aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Smith-Rowland <3dw4rd@verizon.net>2016-10-12 16:07:33 +0000
committerEdward Smith-Rowland <3dw4rd@verizon.net>2016-10-12 16:07:33 +0000
commit2a9e6471f863471665b61772863acb405befbe2a (patch)
treefdeab1b7331002ec01876ab8c9e28c6bed10e8c3
parent9b4b395f705789cd2f50466b13f5c37dec612c15 (diff)
Merged revisions r232323 through r241067 to the branch
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/tr29124@241068 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog177
-rw-r--r--gcc/Makefile.in13
-rw-r--r--gcc/ada/ChangeLog295
-rw-r--r--gcc/ada/a-strunb-shared.adb23
-rw-r--r--gcc/ada/a-strunb-shared.ads9
-rw-r--r--gcc/ada/a-tags.adb94
-rw-r--r--gcc/ada/contracts.adb17
-rw-r--r--gcc/ada/einfo.adb151
-rw-r--r--gcc/ada/einfo.ads54
-rw-r--r--gcc/ada/exp_aggr.adb28
-rw-r--r--gcc/ada/exp_ch4.adb33
-rw-r--r--gcc/ada/exp_ch5.adb19
-rw-r--r--gcc/ada/exp_ch6.adb10
-rw-r--r--gcc/ada/exp_ch7.adb197
-rw-r--r--gcc/ada/exp_ch9.adb38
-rw-r--r--gcc/ada/freeze.adb6
-rw-r--r--gcc/ada/g-dyntab.adb372
-rw-r--r--gcc/ada/g-dyntab.ads172
-rw-r--r--gcc/ada/g-spitbo.adb6
-rw-r--r--gcc/ada/g-spitbo.ads6
-rw-r--r--gcc/ada/ghost.adb6
-rw-r--r--gcc/ada/gnat1drv.adb2
-rw-r--r--gcc/ada/init.c6
-rw-r--r--gcc/ada/lib-load.adb8
-rw-r--r--gcc/ada/lib-writ.adb40
-rw-r--r--gcc/ada/restrict.adb14
-rw-r--r--gcc/ada/restrict.ads10
-rw-r--r--gcc/ada/rtsfind.adb20
-rw-r--r--gcc/ada/rtsfind.ads7
-rw-r--r--gcc/ada/s-os_lib.adb58
-rw-r--r--gcc/ada/s-os_lib.ads16
-rw-r--r--gcc/ada/s-rident.ads46
-rw-r--r--gcc/ada/sem.adb21
-rw-r--r--gcc/ada/sem_attr.adb197
-rw-r--r--gcc/ada/sem_case.adb169
-rw-r--r--gcc/ada/sem_ch10.adb7
-rw-r--r--gcc/ada/sem_ch12.adb40
-rw-r--r--gcc/ada/sem_ch3.adb62
-rw-r--r--gcc/ada/sem_ch4.adb8
-rw-r--r--gcc/ada/sem_ch7.adb28
-rw-r--r--gcc/ada/sem_ch7.ads4
-rw-r--r--gcc/ada/sem_ch9.adb1
-rw-r--r--gcc/ada/sem_elab.adb8
-rw-r--r--gcc/ada/sem_prag.adb422
-rw-r--r--gcc/ada/sem_res.adb16
-rw-r--r--gcc/ada/xref_lib.adb37
-rw-r--r--gcc/cgraphunit.c13
-rw-r--r--gcc/common.opt4
-rw-r--r--gcc/config/rs6000/rs6000.c273
-rw-r--r--gcc/config/rs6000/vsx.md4
-rw-r--r--gcc/dce.c9
-rw-r--r--gcc/diagnostic.c10
-rw-r--r--gcc/doc/invoke.texi11
-rw-r--r--gcc/doc/tm.texi63
-rw-r--r--gcc/doc/tm.texi.in38
-rw-r--r--gcc/dwarf2out.c41
-rw-r--r--gcc/emit-rtl.h4
-rw-r--r--gcc/function-tests.c22
-rw-r--r--gcc/function.c15
-rw-r--r--gcc/gimple-fold.c67
-rw-r--r--gcc/go/gofrontend/MERGE2
-rw-r--r--gcc/lto-streamer.c12
-rw-r--r--gcc/match.pd6
-rw-r--r--gcc/print-rtl-function.c160
-rw-r--r--gcc/regrename.c7
-rw-r--r--gcc/rtl.h25
-rw-r--r--gcc/selftest.c60
-rw-r--r--gcc/selftest.h7
-rw-r--r--gcc/shrink-wrap.c741
-rw-r--r--gcc/shrink-wrap.h1
-rw-r--r--gcc/target.def57
-rw-r--r--gcc/testsuite/ChangeLog81
-rw-r--r--gcc/testsuite/g++.dg/torture/pr77947.C29
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr77929.c13
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77920.c17
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp35.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp36.c4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/vrp46.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/slp-26.c7
-rw-r--r--gcc/testsuite/gcc.dg/vect/tree-vect.h2
-rw-r--r--gcc/testsuite/gcc.target/mips/mips.exp8
-rw-r--r--gcc/testsuite/gcc.target/mips/msa-builtins.c1085
-rw-r--r--gcc/testsuite/gcc.target/mips/msa.c630
-rw-r--r--gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-0.c22
-rw-r--r--gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-1.c18
-rw-r--r--gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-2.c26
-rw-r--r--gcc/testsuite/gcc.target/powerpc/warn-1.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/warn-2.c2
-rw-r--r--gcc/testsuite/gnat.dg/debug8.adb29
-rw-r--r--gcc/testsuite/gnat.dg/debug9.adb53
-rw-r--r--gcc/testsuite/lib/target-supports.exp191
-rw-r--r--gcc/tree-ssa-propagate.c14
-rw-r--r--gcc/tree-ssa-reassoc.c20
-rw-r--r--gcc/tree-vrp.c40
-rw-r--r--gcc/vmsdbgout.c2
-rw-r--r--libgo/Makefile.am11
-rw-r--r--libgo/Makefile.in47
-rw-r--r--libgo/go/internal/syscall/unix/getrandom_linux_sparcx.go (renamed from libgo/go/internal/syscall/unix/getrandom_linux_sparc.go)0
-rw-r--r--libgo/go/runtime/sema.go358
-rw-r--r--libgo/go/syscall/clone_linux.c100
-rw-r--r--libgo/go/syscall/exec_linux.go19
-rwxr-xr-xlibgo/mksysinfo.sh2
-rw-r--r--libgo/runtime/proc.c5
-rw-r--r--libgo/runtime/runtime.h6
-rw-r--r--libgo/runtime/sema.goc470
-rw-r--r--libstdc++-v3/ChangeLog42
-rw-r--r--libstdc++-v3/doc/html/manual/bugs.html9
-rw-r--r--libstdc++-v3/doc/html/manual/status.html6
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml7
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxx2017.xml11
-rw-r--r--libstdc++-v3/include/Makefile.am7
-rw-r--r--libstdc++-v3/include/Makefile.in7
-rw-r--r--libstdc++-v3/include/bits/complex128.h508
-rw-r--r--libstdc++-v3/include/bits/complex_util.h329
-rw-r--r--libstdc++-v3/include/bits/complex_util.tcc230
-rw-r--r--libstdc++-v3/include/bits/float128.h688
-rw-r--r--libstdc++-v3/include/bits/float128.tcc100
-rw-r--r--libstdc++-v3/include/bits/numeric_limits.h313
-rw-r--r--libstdc++-v3/include/bits/sf_airy.tcc2663
-rw-r--r--libstdc++-v3/include/bits/sf_bessel.tcc904
-rw-r--r--libstdc++-v3/include/bits/sf_beta.tcc325
-rw-r--r--libstdc++-v3/include/bits/sf_cardinal.tcc133
-rw-r--r--libstdc++-v3/include/bits/sf_chebyshev.tcc193
-rw-r--r--libstdc++-v3/include/bits/sf_dawson.tcc252
-rw-r--r--libstdc++-v3/include/bits/sf_distributions.tcc588
-rw-r--r--libstdc++-v3/include/bits/sf_ellint.tcc1035
-rw-r--r--libstdc++-v3/include/bits/sf_expint.tcc591
-rw-r--r--libstdc++-v3/include/bits/sf_fresnel.tcc205
-rw-r--r--libstdc++-v3/include/bits/sf_gamma.tcc3055
-rw-r--r--libstdc++-v3/include/bits/sf_gegenbauer.tcc93
-rw-r--r--libstdc++-v3/include/bits/sf_hankel.tcc1304
-rw-r--r--libstdc++-v3/include/bits/sf_hermite.tcc197
-rw-r--r--libstdc++-v3/include/bits/sf_hydrogen.tcc95
-rw-r--r--libstdc++-v3/include/bits/sf_hyperg.tcc846
-rw-r--r--libstdc++-v3/include/bits/sf_hypint.tcc193
-rw-r--r--libstdc++-v3/include/bits/sf_jacobi.tcc208
-rw-r--r--libstdc++-v3/include/bits/sf_laguerre.tcc330
-rw-r--r--libstdc++-v3/include/bits/sf_legendre.tcc367
-rw-r--r--libstdc++-v3/include/bits/sf_mod_bessel.tcc602
-rw-r--r--libstdc++-v3/include/bits/sf_owens_t.tcc396
-rw-r--r--libstdc++-v3/include/bits/sf_polylog.tcc1446
-rw-r--r--libstdc++-v3/include/bits/sf_theta.tcc506
-rw-r--r--libstdc++-v3/include/bits/sf_trig.tcc414
-rw-r--r--libstdc++-v3/include/bits/sf_trigint.tcc261
-rw-r--r--libstdc++-v3/include/bits/sf_zeta.tcc761
-rw-r--r--libstdc++-v3/include/bits/specfun.h4666
-rw-r--r--libstdc++-v3/include/bits/specfun_util.h208
-rw-r--r--libstdc++-v3/include/bits/stl_algo.h80
-rw-r--r--libstdc++-v3/include/bits/stl_uninitialized.h3
-rw-r--r--libstdc++-v3/include/bits/summation.h1230
-rw-r--r--libstdc++-v3/include/bits/summation.tcc352
-rw-r--r--libstdc++-v3/include/experimental/algorithm53
-rw-r--r--libstdc++-v3/include/ext/cmath112
-rw-r--r--libstdc++-v3/include/ext/math_const.h426
-rw-r--r--libstdc++-v3/include/ext/math_util.h98
-rw-r--r--libstdc++-v3/include/ext/polynomial.h820
-rw-r--r--libstdc++-v3/include/ext/polynomial.tcc353
-rw-r--r--libstdc++-v3/include/std/mutex23
-rw-r--r--libstdc++-v3/libsupc++/nested_exception.h2
-rw-r--r--libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc32
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/sample/1.cc110
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc8
-rw-r--r--libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc45
-rw-r--r--libstdc++-v3/testsuite/ext/polynomial/compile.cc7
-rw-r--r--libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc3172
-rw-r--r--libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc12067
-rw-r--r--libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc1622
-rw-r--r--libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc2046
-rw-r--r--libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc312
-rw-r--r--libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc67
-rw-r--r--libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc63
-rw-r--r--libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc489
-rw-r--r--libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc1258
-rw-r--r--libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc4
-rw-r--r--libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_origin.cc47
-rw-r--r--libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc1244
-rw-r--r--libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc1255
-rw-r--r--libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_origin.cc49
-rw-r--r--libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc1249
-rw-r--r--libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc499
-rw-r--r--libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc485
-rw-r--r--libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc6792
-rw-r--r--libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc228
-rw-r--r--libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc3428
-rw-r--r--libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc382
-rw-r--r--libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc396
-rw-r--r--libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc439
-rw-r--r--libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc652
-rw-r--r--libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc1860
-rw-r--r--libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc716
-rw-r--r--libstdc++-v3/testsuite/util/specfun_testcase.h699
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_common_types.h5
196 files changed, 57853 insertions, 20474 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6facb484ff8..3a67339b3b8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,180 @@
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/rs6000.c (machine_function): Add new fields
+ gpr_is_wrapped_separately and lr_is_wrapped_separately.
+ (TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS,
+ TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB,
+ TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS,
+ TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS,
+ TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS,
+ TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS): Define.
+ (rs6000_get_separate_components): New function.
+ (rs6000_components_for_bb): New function.
+ (rs6000_disqualify_components): New function.
+ (rs6000_emit_prologue_components): New function.
+ (rs6000_emit_epilogue_components): New function.
+ (rs6000_set_handled_components): New function.
+ (rs6000_emit_prologue): Don't emit LR save if lr_is_wrapped_separately.
+ Don't emit GPR saves if gpr_is_wrapped_separately for that register.
+ (restore_saved_lr): Don't restore LR if lr_is_wrapped_separately.
+ (rs6000_emit_epilogue): Don't emit GPR restores if
+ gpr_is_wrapped_separately for that register. Don't make a
+ REG_CFA_RESTORE note for registers we did not restore, either.
+
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * function.c (thread_prologue_and_epilogue_insns): Call
+ try_shrink_wrapping_separate. Compute the prologue_seq afterwards,
+ if it has possibly changed. Compute the split_prologue_seq and
+ epilogue_seq later, too.
+ * shrink-wrap.c: #include cfgbuild.h and insn-config.h.
+ (dump_components): New function.
+ (struct sw): New struct.
+ (SW): New function.
+ (init_separate_shrink_wrap): New function.
+ (fini_separate_shrink_wrap): New function.
+ (place_prologue_for_one_component): New function.
+ (spread_components): New function.
+ (disqualify_problematic_components): New function.
+ (emit_common_heads_for_components): New function.
+ (emit_common_tails_for_components): New function.
+ (insert_prologue_epilogue_for_components): New function.
+ (try_shrink_wrapping_separate): New function.
+ * shrink-wrap.h: Declare try_shrink_wrapping_separate.
+
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * regrename.c (build_def_use): Invalidate chains that have a
+ REG_CFA_RESTORE on some instruction.
+
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * dce.c (delete_unmarked_insns): Don't delete instructions with
+ a REG_CFA_RESTORE note.
+
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * common.opt (-fshrink-wrap-separate): New flag.
+ * doc/invoke.texi: Document it.
+ * doc/tm.texi.in (Shrink-wrapping separate components): New subsection.
+ * doc/tm.texi: Regenerate.
+ * emit-rtl.h (struct rtl_data): New field shrink_wrapped_separate.
+ * target.def (shrink_wrap): New hook vector.
+ (get_separate_components, components_for_bb, disqualify_components,
+ emit_prologue_components, emit_epilogue_components,
+ set_handled_components): New hooks.
+
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * config/rs6000/rs6000.c (rs6000_return_in_memory): Warn for
+ vector return by reference only if -Wpsabi.
+ (rs6000_pass_by_reference): Similarly, for argument passing.
+
+2016-10-12 David Malcolm <dmalcolm@redhat.com>
+
+ * function-tests.c: Include "print-rtl.h".
+ (selftest::test_expansion_to_rtl): Call print_rtx_function on the
+ function, and verify what is dumped.
+ * print-rtl-function.c (print_edge): New function.
+ (begin_any_block): New function.
+ (end_any_block): New function.
+ (can_have_basic_block_p): New function.
+ (print_rtx_function): Track the basic blocks of insns in the
+ chain, wrapping those that are within blocks within "(block)"
+ directives. Remove the "(cfg)" directive.
+
+2016-10-12 David Malcolm <dmalcolm@redhat.com>
+
+ * selftest.c (selftest::read_file): New function.
+ (selftest::test_read_file): New function.
+ (selftest::selftest_c_tests): Call test_read_file.
+ * selftest.h (selftest::read_file): New decl.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ PR debug/77947
+ * cgraphunit.c (analyze_functions): Preserve cgraph nodes
+ function context.
+
+2016-10-12 Thomas Schwinge <thomas@codesourcery.com>
+
+ * lto-streamer.c: Fix LTO_STREAMER_DEBUG build.
+
+ * dwarf2out.c (dwarf2_lineno_debug_hooks): Use
+ dwarf2out_assembly_start.
+
+ * Makefile.in (SELFTEST_FLAGS): Add -nostdinc.
+
+ * Makefile.in (SELFTEST_FLAGS): New variable.
+ (s-selftest, selftest-gdb, selftest-valgrind): Use it.
+
+ * vmsdbgout.c (vmsdbg_debug_hooks): Add filename parameter to
+ early_finish hook.
+
+2016-10-12 Georg-Johann Lay <avr@gjlay.de>
+
+ * rtl.h (struct rtx_def): Comment how RTX_FLAGS will be
+ dumped in RTL dumps.
+
+2016-10-12 Martin Liska <mliska@suse.cz>
+
+ * gimple-fold.c (create_tmp_reg_or_ssa_name): New function.
+ (gimple_fold_builtin_memory_op): Use the function.
+ (gimple_fold_builtin_strchr): Likewise.
+ (gimple_fold_builtin_strcat): Likewise.
+ (gimple_build): Likewise.
+
+2016-10-12 Nathan Sidwell <nathan@acm.org>
+
+ * diagnostic.c (diagnostc_report_diagnostic): Fix formatting.
+
+2016-10-12 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * dwarf2out.c (int_loc_descriptor): Generate opcodes for another
+ equivalent 32-bit constant (modulo 2**32) when that yields
+ smaller instructions.
+ (size_of_int_loc_descriptor): Update accordingly.
+
+2016-10-12 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * dwarf2out.c (dwarf2out_early_global_decl): For nested
+ functions, call dwarf2out_decl on the parent function first.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ * match.pd ((X /[ex] A) * A -> X): Remove unnecessary constraint
+ on the conversion.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ * tree-ssa-propagate.c
+ (substitute_and_fold_dom_walker::before_dom_children): Do not
+ ignore ASSERT_EXPRs but only preserve them.
+ * tree-vrp.c (remove_range_assertions): Deal with ASSERT_EXPRs
+ that have been propagated into.
+ (vrp_finalize): Enable DCE for substitute_and_fold.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77920
+ * tree-vrp.c (simplify_div_or_mod_using_ranges): Simplify.
+ (simplify_min_or_max_using_ranges): Pass in gsi and use it.
+ (simplify_abs_using_ranges): Likewise.
+ (simplify_conversion_using_ranges): Likewise.
+ (simplify_stmt_using_ranges): Adjust.
+
+2016-10-12 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/77929
+ * tree-ssa-reassoc.c (optimize_range_tests_var_bound): Handle
+ (*ops)[ranges[i].idx]->op != ranges[i].exp case.
+
+2016-10-12 Aaron Sawdey <acsawdey@linux.vnet.ibm.com>
+
+ PR target/77934
+ * config/rs6000/vmx.md (vsx_concat_<mode>): The mtvsrdd instruction
+ needs a base register for arg 1.
+
2016-10-12 Jakub Jelinek <jakub@redhat.com>
* common.opt (Wimplicit-fallthrough) Turn into alias to
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index 29146052018..f1ff782f10b 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1877,6 +1877,12 @@ endif
# This does the things that can't be done on the host machine.
rest.cross: specs
+# GCC's selftests.
+# Specify a dummy input file to placate the driver.
+# Specify -nostdinc to work around missing WIND_BASE environment variable
+# required for *-wrs-vxworks-* targets.
+SELFTEST_FLAGS = -nostdinc -x c /dev/null -S -fself-test
+
# Run the selftests during the build once we have a driver and a cc1,
# so that self-test failures are caught as early as possible.
# Use "s-selftest" to ensure that we only run the selftests if the
@@ -1884,18 +1890,19 @@ rest.cross: specs
.PHONY: selftest
selftest: s-selftest
s-selftest: $(GCC_PASSES) cc1$(exeext) stmp-int-hdrs
- $(GCC_FOR_TARGET) -xc -S -c /dev/null -fself-test
+ $(GCC_FOR_TARGET) $(SELFTEST_FLAGS)
$(STAMP) $@
# Convenience method for running selftests under gdb:
.PHONY: selftest-gdb
selftest-gdb: $(GCC_PASSES) cc1$(exeext) stmp-int-hdrs
- $(GCC_FOR_TARGET) -xc -S -c /dev/null -fself-test -wrapper gdb,--args
+ $(GCC_FOR_TARGET) $(SELFTEST_FLAGS) \
+ -wrapper gdb,--args
# Convenience method for running selftests under valgrind:
.PHONY: selftest-valgrind
selftest-valgrind: $(GCC_PASSES) cc1$(exeext) stmp-int-hdrs
- $(GCC_FOR_TARGET) -xc -S -c /dev/null -fself-test \
+ $(GCC_FOR_TARGET) $(SELFTEST_FLAGS) \
-wrapper valgrind,--leak-check=full
# Recompile all the language-independent object files.
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 7e71e44b269..88090334494 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,298 @@
+2016-10-12 Yannick Moy <moy@adacore.com>
+
+ * einfo.adb, einfo.ads (Partial_Refinement_Constituents): Take
+ into account constituents that are themselves abstract states
+ with full or partial refinement visible.
+ * sem_prag.adb (Find_Encapsulating_State): Move function
+ to library-level, to share between subprograms.
+ (Analyze_Refined_Global_In_Decl_Part): Use
+ Find_Encapsulating_State to get relevant encapsulating state.
+
+2016-10-12 Arnaud Charlet <charlet@adacore.com>
+
+ * gnat1drv.adb: Fix minor typo.
+
+2016-10-12 Yannick Moy <moy@adacore.com>
+
+ * sem_prag.adb (Analyze_Refined_Depends_In_Decl_Part): Adapt checking
+ for optional refinement of abstract state with partial
+ visible refinement.
+ (Analyze_Refined_Global_In_Decl_Part): Adapt checking for optional
+ refinement of abstract state with partial visible refinement. Implement
+ new rules in SPARK RM 7.2.4 related to optional refinement.
+ Also fix the missing detection of missing items.
+
+2016-10-12 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * einfo.adb Add new usage for Elist29 and Node35.
+ (Anonymous_Designated_Type): New routine.
+ (Anonymous_Master): Removed.
+ (Anonymous_Masters): New routine.
+ (Set_Anonymous_Designated_Type): New routine.
+ (Set_Anonymous_Master): Removed.
+ (Set_Anonymous_Masters): New routine.
+ (Write_Field29_Name): Add output for Anonymous_Masters.
+ (Write_Field35_Name): Remove the output for Anonymous_Master. Add
+ output for Anonymous_Designated_Type.
+ * einfo.ads Remove attribute Anonymous_Master along with
+ usage in entities. Add attributes Anonymous_Designated_Type
+ and Anonymous_Masters along with usage in entities.
+ (Anonymous_Designated_Type): New routine along with pragma Inline.
+ (Anonymous_Master): Removed along with pragma Inline.
+ (Anonymous_Masters): New routine along with pragma Inline.
+ (Set_Anonymous_Designated_Type): New routine along with pragma Inline.
+ (Set_Anonymous_Master): Removed along with pragma Inline.
+ (Set_Anonymous_Masters): New routine along with pragma Inline.
+ * exp_ch7.adb (Build_Anonymous_Master): Reuse an anonymous master
+ defined in the same unit if it services the same designated
+ type, otherwise create a new one.
+ (Create_Anonymous_Master): Reimplemented.
+ (Current_Anonymous_Master): New routine.
+ (In_Subtree): Removed.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_prag.adb (Analyze_Pragma, case Dynamic_Predicate):
+ Check properly whether there is an explicit assertion policy
+ for predicate checking, even in the presence of a general Ignore
+ assertion policy.
+
+2016-10-12 Steve Baird <baird@adacore.com>
+
+ * sem.adb (Walk_Library_Items): Cope with ignored ghost units.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * lib-writ.adb (Write_ALI): Removal of unused file entries from
+ dependency list must be performed before the list is sorted,
+ so that the dependency number of other files is properly set-up
+ for use in tools that relate entity information to the unit in
+ which they are declared.
+
+2016-10-12 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * exp_aggr.adb (Initialize_Ctrl_Array_Component):
+ Create a copy of the initialization expression to avoid sharing
+ it between multiple components.
+
+2016-10-12 Yannick Moy <moy@adacore.com>
+
+ * einfo.adb, einfo.ads (Has_Partial_Visible_Refinement): New flag
+ in abtract states.
+ (Has_Non_Null_Visible_Refinement): Return true for patial refinement.
+ (Partial_Refinement_Constituents): New function returns the full or
+ partial refinement constituents depending on scope.
+ * sem_ch3.adb (Analyze_Declarations): Remove partial visible
+ refinements when exiting the scope of a package spec or body
+ and those partial refinements are not in scope afterwards.
+ * sem_ch7.adb, sem_ch7.ads (Install_Partial_Declarations): Mark
+ abstract states of parent units with partial refinement so that
+ it is visible.
+ * sem_prag.adb (Analyze_Part_Of_In_Decl_Part): Mark enclosing
+ abstract state if any as having partial refinement in that scope.
+ (Analyze_Refined_Global_In_Decl_Part): Check constituent usage
+ based on full or partial refinement depending on scope.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_ch4.adb (Expand_N_Type_Conversion): If the target type
+ has an invariant aspect, insert invariant call at the proper
+ place in the code rather than rewriting the expression as an
+ expression with actions, to prevent spurious semantic errors on
+ the rewritten conversion when it is the object in a renaming.
+
+2016-10-12 Hristian Kirtchev <kirtchev@adacore.com>
+
+ * exp_ch5.adb, sem_ch3.adb, exp_ch9.adb, a-tags.adb, sem_prag.adb,
+ sem_ch12.adb, xref_lib.adb, a-strunb-shared.adb, rtsfind.adb,
+ freeze.adb, sem_attr.adb, sem_case.adb, exp_ch4.adb, ghost.adb,
+ exp_ch6.adb, sem_ch4.adb, restrict.adb, s-os_lib.adb: Minor
+ reformatting.
+
+2016-10-12 Justin Squirek <squirek@adacore.com>
+
+ * sem_ch10.adb (Remove_Limited_With_Clause): Add a check to
+ detect accidental visibility.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_ch4.adb (Expand_Allocator): If the expression is a qualified
+ expression, add a predicate check after the constraint check.
+ * sem_res.adb (Resolve_Qualified_Expression): If context is an
+ allocator, do not apply predicate check, as it will be done when
+ allocator is expanded.
+
+2016-10-12 Bob Duff <duff@adacore.com>
+
+ * xref_lib.adb: Use renamings-of-slices to ensure
+ that all references to Tables are properly bounds checked (when
+ checks are turned on).
+ * g-dyntab.ads, g-dyntab.adb: Default-initialize the array
+ components, so we don't get uninitialized pointers in case
+ of Tables containing access types. Misc cleanup of the code
+ and comments.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_attr.adb (Analyze_Attribute, case 'Type_Key): Implement
+ functionality of attribute, to provide a reasonably unique key
+ for a given type and detect any changes in the semantics of the
+ type or any of its subcomponents from version to version.
+
+2016-10-12 Bob Duff <duff@adacore.com>
+
+ * sem_case.adb (Check_Choice_Set): Separate
+ checking for duplicates out into a separate pass from checking
+ full coverage, because the check for duplicates does not depend
+ on predicates. Therefore, we shouldn't do it separately for the
+ predicate vs. no-predicate case; we should share code. The code
+ for the predicate case was wrong.
+
+2016-10-12 Jerome Lambourg <lambourg@adacore.com>
+
+ * init.c: Make sure to call finit on x86_64-vx7 to reinitialize
+ the FPU unit.
+
+2016-10-12 Arnaud Charlet <charlet@adacore.com>
+
+ * lib-load.adb (Load_Unit): Generate an error message even when
+ Error_Node is null.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * lib-writ.adb (Write_ALI): Disable optimization related to transitive
+ limited_with clauses for now.
+
+2016-10-12 Javier Miranda <miranda@adacore.com>
+
+ * sem_attr.adb (Analyze_Attribute_Old_Result): Generating C
+ code handle 'old located in inlined _postconditions procedures.
+ (Analyze_Attribute [Attribute_Result]): Handle 'result when
+ rewriting the attribute as a reference to the formal parameter
+ _Result of inlined _postconditions procedures.
+
+2016-10-12 Tristan Gingold <gingold@adacore.com>
+
+ * s-rident.ads (Profile_Info): Remove
+ Max_Protected_Entries restriction from GNAT_Extended_Ravenscar
+ * sem_ch9.adb (Analyze_Protected_Type_Declaration):
+ Not a controlled type on restricted runtimes.
+
+2016-10-12 Gary Dismukes <dismukes@adacore.com>
+
+ * sem_ch3.adb (Derive_Subprogram): Add test
+ for Is_Controlled of Parent_Type when determining whether an
+ inherited subprogram with one of the special names Initialize,
+ Adjust, or Finalize should be derived with its normal name even
+ when inherited as a private operation (which would normally
+ result in the inherited operation having a special "hidden" name).
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_res.adb (Resolve_Call): If a function call returns a
+ limited view of a type replace it with the non-limited view,
+ which must be available when compiling call. This was already
+ done elsewhere for non-overloaded calls, but needs to be done
+ after resolution if function name is overloaded.
+
+2016-10-12 Javier Miranda <miranda@adacore.com>
+
+ * a-tags.adb (IW_Membership [private]): new overloaded
+ subprogram that factorizes the code needed to check if a
+ given type implements an interface type.
+ (IW_Membership
+ [public]): invoke the new internal IW_Membership function.
+ (Is_Descendant_At_Same_Level): Fix this routine to implement RM
+ 3.9 (12.3/3)
+
+2016-10-12 Tristan Gingold <gingold@adacore.com>
+
+ * exp_ch9.adb (Expand_N_Delay_Relative_Statement): Add support
+ for a secondary procedure in case of missing Ada.Calendar.Delays
+ * rtsfind.ads (RTU_Id): Add System_Relative_Delays.
+ (RE_Id): Add RO_RD_Delay_For.
+ * rtsfind.adb (Output_Entity_Name): Handle correctly units RO_XX.
+ * s-rident.ads: Remove No_Relative_Delays
+ restriction for GNAT_Extended_Ravenscar.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_elab.adb (Within_Initial_Condition): When deternining
+ the context of the expression, use the original node if it is
+ a pragma, because Check pragmas are rewritten as conditionals
+ when assertions are not enabled.
+
+2016-10-12 Bob Duff <duff@adacore.com>
+
+ * spitbol_table.ads, spitbol_table.adb (Adjust, Finalize): Add
+ "overriding".
+
+2016-10-12 Bob Duff <duff@adacore.com>
+
+ * a-strunb-shared.ads, a-strunb-shared.adb (Finalize):
+ Make sure Finalize is idempotent.
+ (Unreference): Check for
+ Empty_Shared_String, in case the reference count of the empty
+ string wraps around.
+ Also add "not null" in various places that can't be null.
+
+2016-10-12 Jerome Lambourg <lambourg@adacore.com>
+
+ * init.c: Fix sigtramp with the x86_64-vx7-vxsim target on
+ Windows host.
+
+2016-10-12 Vadim Godunko <godunko@adacore.com>
+
+ * s-os_lib.ads (Is_Owner_Readable_File): Renamed from
+ Is_Readable_File.
+ (Is_Owner_Writable_File): Renamed from Is_Writable_File.
+ (Is_Readable_File): Renames Is_Read_Accessible_File.
+ (Is_Writable_File): Renames Is_Write_Accessible_File.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch12.adb (Check_Formal_Package_Instance): Skip an internal
+ formal entity without a parent only if the corresponding actual
+ entity has a different kind.
+ * exp_ch9.adb (Build_Class_Wide_Master): If the master is
+ declared locally, insert the renaming declaration after the
+ master declaration, to prevent access before elaboration in gigi.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * contracts.adb (Analyze_Contracts): For a type declaration, analyze
+ an iterable aspect when present.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch12.adb (Check_Formal_Package_Instance): Handle properly
+ an instance of a formal package with defaults, when defaulted
+ parameters include tagged private types and array types.
+
+2016-10-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/64057.
+ * exp_ch5.adb (Is_Non_Local_Array): Return true for every array
+ that is not a component or slice of an entity in the current
+ scope.
+
+2016-10-12 Tristan Gingold <gingold@adacore.com>
+
+ * restrict.ads, restrict.adb (Restricted_Profile): Adjust
+ comment, use Restricted_Tasking to compare restrictions.
+ * s-rident.ads (Profile_Name): Add Restricted_Tasking and
+ reorder literals.
+ (Profile_Info): Set restrictions for Restricted_Tasking.
+
+2016-10-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Analyze_Full_Type_Declaration): Set Ghost status
+ of type before elaborating inherited operations, so that the
+ Ghost status is set properly for them.
+ * ghost.adb (Check_Ghost_Overriding): A ghost subprogram can
+ override an abstract subprogram coming from an interface
+ operation.
+
2016-10-11 Eric Botcazou <ebotcazou@adacore.com>
* system-linux-armeb.ads (Backend_Overflow_Checks): Change to True.
diff --git a/gcc/ada/a-strunb-shared.adb b/gcc/ada/a-strunb-shared.adb
index 88698b0c892..2199f647b8a 100644
--- a/gcc/ada/a-strunb-shared.adb
+++ b/gcc/ada/a-strunb-shared.adb
@@ -499,7 +499,9 @@ package body Ada.Strings.Unbounded is
-- Allocate --
--------------
- function Allocate (Max_Length : Natural) return Shared_String_Access is
+ function Allocate
+ (Max_Length : Natural) return not null Shared_String_Access
+ is
begin
-- Empty string requested, return shared empty string
@@ -622,8 +624,9 @@ package body Ada.Strings.Unbounded is
-------------------
function Can_Be_Reused
- (Item : Shared_String_Access;
- Length : Natural) return Boolean is
+ (Item : not null Shared_String_Access;
+ Length : Natural) return Boolean
+ is
begin
return
System.Atomic_Counters.Is_One (Item.Counter)
@@ -785,10 +788,9 @@ package body Ada.Strings.Unbounded is
--------------
procedure Finalize (Object : in out Unbounded_String) is
- SR : constant Shared_String_Access := Object.Reference;
-
+ SR : constant not null Shared_String_Access := Object.Reference;
begin
- if SR /= null then
+ if SR /= Null_Unbounded_String.Reference then
-- The same controlled object can be finalized several times for
-- some reason. As per 7.6.1(24) this should have no ill effect,
@@ -2101,11 +2103,12 @@ package body Ada.Strings.Unbounded is
begin
if System.Atomic_Counters.Decrement (Aux.Counter) then
- -- Reference counter of Empty_Shared_String must never reach zero
+ -- Reference counter of Empty_Shared_String should never reach
+ -- zero. We check here in case it wraps around.
- pragma Assert (Aux /= Empty_Shared_String'Access);
-
- Free (Aux);
+ if Aux /= Empty_Shared_String'Access then
+ Free (Aux);
+ end if;
end if;
end Unreference;
diff --git a/gcc/ada/a-strunb-shared.ads b/gcc/ada/a-strunb-shared.ads
index 1a00780fad7..c5f96b38f17 100644
--- a/gcc/ada/a-strunb-shared.ads
+++ b/gcc/ada/a-strunb-shared.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -449,14 +449,15 @@ private
-- Decrement reference counter, deallocate Item when counter goes to zero
function Can_Be_Reused
- (Item : Shared_String_Access;
+ (Item : not null Shared_String_Access;
Length : Natural) return Boolean;
-- Returns True if Shared_String can be reused. There are two criteria when
-- Shared_String can be reused: its reference counter must be one (thus
-- Shared_String is owned exclusively) and its size is sufficient to
-- store string with specified length effectively.
- function Allocate (Max_Length : Natural) return Shared_String_Access;
+ function Allocate
+ (Max_Length : Natural) return not null Shared_String_Access;
-- Allocates new Shared_String with at least specified maximum length.
-- Actual maximum length of the allocated Shared_String can be slightly
-- greater. Returns reference to Empty_Shared_String when requested length
@@ -469,7 +470,7 @@ private
-- This renames are here only to be used in the pragma Stream_Convert
type Unbounded_String is new AF.Controlled with record
- Reference : Shared_String_Access := Empty_Shared_String'Access;
+ Reference : not null Shared_String_Access := Empty_Shared_String'Access;
end record;
pragma Stream_Convert (Unbounded_String, To_Unbounded, To_String);
diff --git a/gcc/ada/a-tags.adb b/gcc/ada/a-tags.adb
index 203d19ed676..08c4dd91b6b 100644
--- a/gcc/ada/a-tags.adb
+++ b/gcc/ada/a-tags.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -61,6 +61,13 @@ package body Ada.Tags is
-- table. This is Inline_Always since it is called from other Inline_
-- Always subprograms where we want no out of line code to be generated.
+ function IW_Membership
+ (Descendant_TSD : Type_Specific_Data_Ptr;
+ T : Tag) return Boolean;
+ -- Subsidiary function of IW_Membership and CW_Membership which factorizes
+ -- the functionality needed to check if a given descendant implements an
+ -- interface tag T.
+
function Length (Str : Cstring_Ptr) return Natural;
-- Length of string represented by the given pointer (treating the string
-- as a C-style string, which is Nul terminated). See comment in body
@@ -431,27 +438,14 @@ package body Ada.Tags is
-- IW_Membership --
-------------------
- -- Canonical implementation of Classwide Membership corresponding to:
-
- -- Obj in Iface'Class
-
- -- Each dispatch table contains a table with the tags of all the
- -- implemented interfaces.
-
- -- Obj is in Iface'Class if Iface'Tag is found in the table of interfaces
- -- that are contained in the dispatch table referenced by Obj'Tag.
-
- function IW_Membership (This : System.Address; T : Tag) return Boolean is
+ function IW_Membership
+ (Descendant_TSD : Type_Specific_Data_Ptr;
+ T : Tag) return Boolean
+ is
Iface_Table : Interface_Data_Ptr;
- Obj_Base : System.Address;
- Obj_DT : Dispatch_Table_Ptr;
- Obj_TSD : Type_Specific_Data_Ptr;
begin
- Obj_Base := Base_Address (This);
- Obj_DT := DT (To_Tag_Ptr (Obj_Base).all);
- Obj_TSD := To_Type_Specific_Data_Ptr (Obj_DT.TSD);
- Iface_Table := Obj_TSD.Interfaces_Table;
+ Iface_Table := Descendant_TSD.Interfaces_Table;
if Iface_Table /= null then
for Id in 1 .. Iface_Table.Nb_Ifaces loop
@@ -464,8 +458,8 @@ package body Ada.Tags is
-- Look for the tag in the ancestor tags table. This is required for:
-- Iface_CW in Typ'Class
- for Id in 0 .. Obj_TSD.Idepth loop
- if Obj_TSD.Tags_Table (Id) = T then
+ for Id in 0 .. Descendant_TSD.Idepth loop
+ if Descendant_TSD.Tags_Table (Id) = T then
return True;
end if;
end loop;
@@ -474,6 +468,33 @@ package body Ada.Tags is
end IW_Membership;
-------------------
+ -- IW_Membership --
+ -------------------
+
+ -- Canonical implementation of Classwide Membership corresponding to:
+
+ -- Obj in Iface'Class
+
+ -- Each dispatch table contains a table with the tags of all the
+ -- implemented interfaces.
+
+ -- Obj is in Iface'Class if Iface'Tag is found in the table of interfaces
+ -- that are contained in the dispatch table referenced by Obj'Tag.
+
+ function IW_Membership (This : System.Address; T : Tag) return Boolean is
+ Obj_Base : System.Address;
+ Obj_DT : Dispatch_Table_Ptr;
+ Obj_TSD : Type_Specific_Data_Ptr;
+
+ begin
+ Obj_Base := Base_Address (This);
+ Obj_DT := DT (To_Tag_Ptr (Obj_Base).all);
+ Obj_TSD := To_Type_Specific_Data_Ptr (Obj_DT.TSD);
+
+ return IW_Membership (Obj_TSD, T);
+ end IW_Membership;
+
+ -------------------
-- Expanded_Name --
-------------------
@@ -721,18 +742,27 @@ package body Ada.Tags is
(Descendant : Tag;
Ancestor : Tag) return Boolean
is
- D_TSD_Ptr : constant Addr_Ptr :=
- To_Addr_Ptr (To_Address (Descendant) - DT_Typeinfo_Ptr_Size);
- A_TSD_Ptr : constant Addr_Ptr :=
- To_Addr_Ptr (To_Address (Ancestor) - DT_Typeinfo_Ptr_Size);
- D_TSD : constant Type_Specific_Data_Ptr :=
- To_Type_Specific_Data_Ptr (D_TSD_Ptr.all);
- A_TSD : constant Type_Specific_Data_Ptr :=
- To_Type_Specific_Data_Ptr (A_TSD_Ptr.all);
-
begin
- return CW_Membership (Descendant, Ancestor)
- and then D_TSD.Access_Level = A_TSD.Access_Level;
+ if Descendant = Ancestor then
+ return True;
+
+ else
+ declare
+ D_TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (Descendant) - DT_Typeinfo_Ptr_Size);
+ A_TSD_Ptr : constant Addr_Ptr :=
+ To_Addr_Ptr (To_Address (Ancestor) - DT_Typeinfo_Ptr_Size);
+ D_TSD : constant Type_Specific_Data_Ptr :=
+ To_Type_Specific_Data_Ptr (D_TSD_Ptr.all);
+ A_TSD : constant Type_Specific_Data_Ptr :=
+ To_Type_Specific_Data_Ptr (A_TSD_Ptr.all);
+ begin
+ return
+ D_TSD.Access_Level = A_TSD.Access_Level
+ and then (CW_Membership (Descendant, Ancestor)
+ or else IW_Membership (D_TSD, Ancestor));
+ end;
+ end if;
end Is_Descendant_At_Same_Level;
------------
diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb
index c85b650d66b..e26b28d832c 100644
--- a/gcc/ada/contracts.adb
+++ b/gcc/ada/contracts.adb
@@ -40,6 +40,7 @@ with Sem_Aux; use Sem_Aux;
with Sem_Ch6; use Sem_Ch6;
with Sem_Ch8; use Sem_Ch8;
with Sem_Ch12; use Sem_Ch12;
+with Sem_Ch13; use Sem_Ch13;
with Sem_Disp; use Sem_Disp;
with Sem_Prag; use Sem_Prag;
with Sem_Util; use Sem_Util;
@@ -408,6 +409,22 @@ package body Contracts is
N_Task_Type_Declaration)
then
Analyze_Task_Contract (Defining_Entity (Decl));
+
+ -- For type declarations, we need to do the pre-analysis of
+ -- Iterable aspect specifications.
+ -- Other type aspects need to be resolved here???
+
+ elsif Nkind (Decl) = N_Private_Type_Declaration
+ and then Present (Aspect_Specifications (Decl))
+ then
+ declare
+ E : constant Entity_Id := Defining_Identifier (Decl);
+ It : constant Node_Id := Find_Aspect (E, Aspect_Iterable);
+ begin
+ if Present (It) then
+ Validate_Iterable_Aspect (E, It);
+ end if;
+ end;
end if;
Next (Decl);
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index 1748efd0b66..2cfb3325f46 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -244,6 +244,7 @@ package body Einfo is
-- Relative_Deadline_Variable Node28
-- Underlying_Record_View Node28
+ -- Anonymous_Masters Elist29
-- BIP_Initialization_Call Node29
-- Subprograms_For_Type Elist29
@@ -265,7 +266,7 @@ package body Einfo is
-- Contract Node34
- -- Anonymous_Master Node35
+ -- Anonymous_Designated_Type Node35
-- Import_Pragma Node35
-- Class_Wide_Preconds List38
@@ -610,8 +611,8 @@ package body Einfo is
-- Is_Actual_Subtype Flag293
-- Has_Pragma_Unused Flag294
-- Is_Ignored_Transient Flag295
+ -- Has_Partial_Visible_Refinement Flag296
- -- (unused) Flag296
-- (unused) Flag297
-- (unused) Flag298
-- (unused) Flag299
@@ -766,11 +767,20 @@ package body Einfo is
return Uint14 (Id);
end Alignment;
- function Anonymous_Master (Id : E) return E is
+ function Anonymous_Designated_Type (Id : E) return E is
begin
- pragma Assert (Is_Type (Id));
+ pragma Assert (Ekind (Id) = E_Variable);
return Node35 (Id);
- end Anonymous_Master;
+ end Anonymous_Designated_Type;
+
+ function Anonymous_Masters (Id : E) return L is
+ begin
+ pragma Assert (Ekind_In (Id, E_Function,
+ E_Package,
+ E_Procedure,
+ E_Subprogram_Body));
+ return Elist29 (Id);
+ end Anonymous_Masters;
function Anonymous_Object (Id : E) return E is
begin
@@ -1682,6 +1692,12 @@ package body Einfo is
return Flag232 (Id);
end Has_Own_Invariants;
+ function Has_Partial_Visible_Refinement (Id : E) return B is
+ begin
+ pragma Assert (Ekind (Id) = E_Abstract_State);
+ return Flag296 (Id);
+ end Has_Partial_Visible_Refinement;
+
function Has_Per_Object_Constraint (Id : E) return B is
begin
return Flag154 (Id);
@@ -3720,11 +3736,20 @@ package body Einfo is
Set_Elist16 (Id, V);
end Set_Access_Disp_Table;
- procedure Set_Anonymous_Master (Id : E; V : E) is
+ procedure Set_Anonymous_Designated_Type (Id : E; V : E) is
begin
- pragma Assert (Is_Type (Id));
+ pragma Assert (Ekind (Id) = E_Variable);
Set_Node35 (Id, V);
- end Set_Anonymous_Master;
+ end Set_Anonymous_Designated_Type;
+
+ procedure Set_Anonymous_Masters (Id : E; V : L) is
+ begin
+ pragma Assert (Ekind_In (Id, E_Function,
+ E_Package,
+ E_Procedure,
+ E_Subprogram_Body));
+ Set_Elist29 (Id, V);
+ end Set_Anonymous_Masters;
procedure Set_Anonymous_Object (Id : E; V : E) is
begin
@@ -4698,6 +4723,12 @@ package body Einfo is
Set_Flag232 (Id, V);
end Set_Has_Own_Invariants;
+ procedure Set_Has_Partial_Visible_Refinement (Id : E; V : B := True) is
+ begin
+ pragma Assert (Ekind (Id) = E_Abstract_State);
+ Set_Flag296 (Id, V);
+ end Set_Has_Partial_Visible_Refinement;
+
procedure Set_Has_Per_Object_Constraint (Id : E; V : B := True) is
begin
Set_Flag154 (Id, V);
@@ -7485,13 +7516,14 @@ package body Einfo is
pragma Assert (Ekind (Id) = E_Abstract_State);
Constits := Refinement_Constituents (Id);
- -- For a refinement to be non-null, the first constituent must be
- -- anything other than null.
+ -- A partial refinement is always non-null. For a full refinement to be
+ -- non-null, the first constituent must be anything other than null.
return
- Has_Visible_Refinement (Id)
- and then Present (Constits)
- and then Nkind (Node (First_Elmt (Constits))) /= N_Null;
+ Has_Partial_Visible_Refinement (Id)
+ or else (Has_Visible_Refinement (Id)
+ and then Present (Constits)
+ and then Nkind (Node (First_Elmt (Constits))) /= N_Null);
end Has_Non_Null_Visible_Refinement;
-----------------------------
@@ -8370,6 +8402,89 @@ package body Einfo is
return Empty;
end Partial_Invariant_Procedure;
+ -------------------------------------
+ -- Partial_Refinement_Constituents --
+ -------------------------------------
+
+ function Partial_Refinement_Constituents (Id : E) return L is
+ Constits : Elist_Id := No_Elist;
+
+ procedure Add_Usable_Constituents (Item : E);
+ -- Add global item Item and/or its constituents to list Constits when
+ -- they can be used in a global refinement within the current scope. The
+ -- criteria are:
+ -- 1) If Item is an abstract state with full refinement visible, add
+ -- its constituents.
+ -- 2) If Item is an abstract state with only partial refinement
+ -- visible, add both Item and its constituents.
+ -- 3) If Item is an abstract state without a visible refinement, add
+ -- it.
+ -- 4) If Id is not an abstract state, add it.
+
+ procedure Add_Usable_Constituents (List : Elist_Id);
+ -- Apply Add_Usable_Constituents to every constituent in List
+
+ -----------------------------
+ -- Add_Usable_Constituents --
+ -----------------------------
+
+ procedure Add_Usable_Constituents (Item : E) is
+ begin
+ if Ekind (Item) = E_Abstract_State then
+ if Has_Visible_Refinement (Item) then
+ Add_Usable_Constituents (Refinement_Constituents (Item));
+
+ elsif Has_Partial_Visible_Refinement (Item) then
+ Append_New_Elmt (Item, Constits);
+ Add_Usable_Constituents (Part_Of_Constituents (Item));
+
+ else
+ Append_New_Elmt (Item, Constits);
+ end if;
+
+ else
+ Append_New_Elmt (Item, Constits);
+ end if;
+ end Add_Usable_Constituents;
+
+ procedure Add_Usable_Constituents (List : Elist_Id) is
+ Constit_Elmt : Elmt_Id;
+ begin
+ if Present (List) then
+ Constit_Elmt := First_Elmt (List);
+ while Present (Constit_Elmt) loop
+ Add_Usable_Constituents (Node (Constit_Elmt));
+ Next_Elmt (Constit_Elmt);
+ end loop;
+ end if;
+ end Add_Usable_Constituents;
+
+ -- Start of processing for Partial_Refinement_Constituents
+
+ begin
+ -- "Refinement" is a concept applicable only to abstract states
+
+ pragma Assert (Ekind (Id) = E_Abstract_State);
+
+ if Has_Visible_Refinement (Id) then
+ Constits := Refinement_Constituents (Id);
+
+ -- A refinement may be partially visible when objects declared in the
+ -- private part of a package are subject to a Part_Of indicator.
+
+ elsif Has_Partial_Visible_Refinement (Id) then
+ Add_Usable_Constituents (Part_Of_Constituents (Id));
+
+ -- Function should only be called when full or partial refinement is
+ -- visible.
+
+ else
+ raise Program_Error;
+ end if;
+
+ return Constits;
+ end Partial_Refinement_Constituents;
+
------------------------
-- Predicate_Function --
------------------------
@@ -10467,6 +10582,12 @@ package body Einfo is
procedure Write_Field29_Name (Id : Entity_Id) is
begin
case Ekind (Id) is
+ when E_Function |
+ E_Package |
+ E_Procedure |
+ E_Subprogram_Body =>
+ Write_Str ("Anonymous_Masters");
+
when E_Constant |
E_Variable =>
Write_Str ("BIP_Initialization_Call");
@@ -10614,8 +10735,8 @@ package body Einfo is
procedure Write_Field35_Name (Id : Entity_Id) is
begin
case Ekind (Id) is
- when Type_Kind =>
- Write_Str ("Anonymous_Master");
+ when E_Variable =>
+ Write_Str ("Anonymous_Designated_Type");
when Subprogram_Kind =>
Write_Str ("Import_Pragma");
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index 1085862f9b6..f62942c80ff 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -438,11 +438,15 @@ package Einfo is
-- definition clause with an (obsolescent) mod clause is converted
-- into an attribute definition clause for this purpose.
--- Anonymous_Master (Node35)
--- Defined in all types. Contains the entity of an anonymous finalization
--- master which services all anonymous access types associated with the
--- same designated type within the current semantic unit. The attribute
--- is set reactively during the expansion of allocators.
+-- Anonymous_Designated_Type (Node35)
+-- Defined in variables which represent anonymous finalization masters.
+-- Contains the designated type which is being services by the master.
+
+-- Anonymous_Masters (Elist29)
+-- Defined in packages, subprograms, and subprogram bodies. Contains a
+-- list of anonymous finalization masters declared within the related
+-- unit. The list acts as a mapping between a master and a designated
+-- type.
-- Anonymous_Object (Node30)
-- Present in protected and task type entities. Contains the entity of
@@ -1812,6 +1816,14 @@ package Einfo is
-- one invariant of its own. The flag is also set on the full view of a
-- private extension or a private type for completeness.
+-- Has_Partial_Visible_Refinement (Flag296)
+-- Defined in E_Abstract_State entities. Set when a state has at least
+-- one refinement constituent subject to indicator Part_Of, and analysis
+-- is in the region between the declaration of the first constituent for
+-- this abstract state (in the private part of the package) and the end
+-- of the package spec or body with visibility over this private part
+-- (which includes the package itself and its child packages).
+
-- Has_Per_Object_Constraint (Flag154)
-- Defined in E_Component entities. Set if the subtype of the component
-- has a per object constraint. Per object constraints result from the
@@ -3780,6 +3792,13 @@ package Einfo is
-- Note: the reason this is marked as a synthesized attribute is that the
-- way this is stored is as an element of the Subprograms_For_Type field.
+-- Partial_Refinement_Constituents (synthesized)
+-- Defined in abstract state entities. Returns the constituents that
+-- refine the state in the current scope, which are allowed in a global
+-- refinement in this scope. These consist in those constituents that are
+-- abstract states with no or only partial refinement visible, and those
+-- that are not themselves abstract states.
+
-- Partial_View_Has_Unknown_Discr (Flag280)
-- Present in all types. Set to Indicate that the partial view of a type
-- has unknown discriminants. A default initialization of an object of
@@ -5517,7 +5536,6 @@ package Einfo is
-- Derived_Type_Link (Node31)
-- No_Tagged_Streams_Pragma (Node32)
-- Linker_Section_Pragma (Node33)
- -- Anonymous_Master (Node35)
-- Depends_On_Private (Flag14)
-- Disable_Controlled (Flag253)
@@ -5619,6 +5637,7 @@ package Einfo is
-- Non_Limited_View (Node19)
-- Encapsulating_State (Node32)
-- From_Limited_With (Flag159)
+ -- Has_Partial_Visible_Refinement (Flag296)
-- Has_Visible_Refinement (Flag263)
-- Has_Non_Limited_View (synth)
-- Has_Non_Null_Visible_Refinement (synth)
@@ -5626,6 +5645,7 @@ package Einfo is
-- Is_External_State (synth)
-- Is_Null_State (synth)
-- Is_Synchronized_State (synth)
+ -- Partial_Refinement_Constituents (synth)
-- E_Access_Protected_Subprogram_Type
-- Equivalent_Type (Node18)
@@ -5967,6 +5987,7 @@ package Einfo is
-- Overridden_Operation (Node26)
-- Wrapped_Entity (Node27) (non-generic case only)
-- Extra_Formals (Node28)
+ -- Anonymous_Masters (Elist29) (non-generic case only)
-- Corresponding_Equality (Node30) (implicit /= only)
-- Thunk_Entity (Node31) (thunk case only)
-- Corresponding_Procedure (Node32) (generate C code only)
@@ -6192,6 +6213,7 @@ package Einfo is
-- Package_Instantiation (Node26)
-- Current_Use_Clause (Node27)
-- Finalizer (Node28) (non-generic case only)
+ -- Anonymous_Masters (Elist29) (non-generic case only)
-- Contract (Node34)
-- SPARK_Pragma (Node40)
-- SPARK_Aux_Pragma (Node41)
@@ -6277,6 +6299,7 @@ package Einfo is
-- Overridden_Operation (Node26) (never for init proc)
-- Wrapped_Entity (Node27) (non-generic case only)
-- Extra_Formals (Node28)
+ -- Anonymous_Masters (Elist29) (non-generic case only)
-- Static_Initialization (Node30) (init_proc only)
-- Thunk_Entity (Node31) (thunk case only)
-- Corresponding_Function (Node32) (generate C code only)
@@ -6468,6 +6491,7 @@ package Einfo is
-- Last_Entity (Node20)
-- Scope_Depth_Value (Uint22)
-- Extra_Formals (Node28)
+ -- Anonymous_Masters (Elist29)
-- Contract (Node34)
-- SPARK_Pragma (Node40)
-- Contains_Ignored_Ghost_Code (Flag279)
@@ -6549,6 +6573,7 @@ package Einfo is
-- Encapsulating_State (Node32)
-- Linker_Section_Pragma (Node33)
-- Contract (Node34)
+ -- Anonymous_Designated_Type (Node35)
-- SPARK_Pragma (Node40)
-- Has_Alignment_Clause (Flag46)
-- Has_Atomic_Components (Flag86)
@@ -6822,7 +6847,8 @@ package Einfo is
function Address_Taken (Id : E) return B;
function Alias (Id : E) return E;
function Alignment (Id : E) return U;
- function Anonymous_Master (Id : E) return E;
+ function Anonymous_Designated_Type (Id : E) return E;
+ function Anonymous_Masters (Id : E) return L;
function Anonymous_Object (Id : E) return E;
function Associated_Entity (Id : E) return E;
function Associated_Formal_Package (Id : E) return E;
@@ -6977,6 +7003,7 @@ package Einfo is
function Has_Object_Size_Clause (Id : E) return B;
function Has_Out_Or_In_Out_Parameter (Id : E) return B;
function Has_Own_Invariants (Id : E) return B;
+ function Has_Partial_Visible_Refinement (Id : E) return B;
function Has_Per_Object_Constraint (Id : E) return B;
function Has_Pragma_Controlled (Id : E) return B;
function Has_Pragma_Elaborate_Body (Id : E) return B;
@@ -7412,6 +7439,7 @@ package Einfo is
function Number_Entries (Id : E) return Nat;
function Number_Formals (Id : E) return Pos;
function Parameter_Mode (Id : E) return Formal_Kind;
+ function Partial_Refinement_Constituents (Id : E) return L;
function Primitive_Operations (Id : E) return L;
function Root_Type (Id : E) return E;
function Safe_Emax_Value (Id : E) return U;
@@ -7499,7 +7527,8 @@ package Einfo is
procedure Set_Address_Taken (Id : E; V : B := True);
procedure Set_Alias (Id : E; V : E);
procedure Set_Alignment (Id : E; V : U);
- procedure Set_Anonymous_Master (Id : E; V : E);
+ procedure Set_Anonymous_Designated_Type (Id : E; V : E);
+ procedure Set_Anonymous_Masters (Id : E; V : L);
procedure Set_Anonymous_Object (Id : E; V : E);
procedure Set_Associated_Entity (Id : E; V : E);
procedure Set_Associated_Formal_Package (Id : E; V : E);
@@ -7652,6 +7681,7 @@ package Einfo is
procedure Set_Has_Object_Size_Clause (Id : E; V : B := True);
procedure Set_Has_Out_Or_In_Out_Parameter (Id : E; V : B := True);
procedure Set_Has_Own_Invariants (Id : E; V : B := True);
+ procedure Set_Has_Partial_Visible_Refinement (Id : E; V : B := True);
procedure Set_Has_Per_Object_Constraint (Id : E; V : B := True);
procedure Set_Has_Pragma_Controlled (Id : E; V : B := True);
procedure Set_Has_Pragma_Elaborate_Body (Id : E; V : B := True);
@@ -8296,7 +8326,8 @@ package Einfo is
pragma Inline (Address_Taken);
pragma Inline (Alias);
pragma Inline (Alignment);
- pragma Inline (Anonymous_Master);
+ pragma Inline (Anonymous_Designated_Type);
+ pragma Inline (Anonymous_Masters);
pragma Inline (Anonymous_Object);
pragma Inline (Associated_Entity);
pragma Inline (Associated_Formal_Package);
@@ -8444,6 +8475,7 @@ package Einfo is
pragma Inline (Has_Object_Size_Clause);
pragma Inline (Has_Out_Or_In_Out_Parameter);
pragma Inline (Has_Own_Invariants);
+ pragma Inline (Has_Partial_Visible_Refinement);
pragma Inline (Has_Per_Object_Constraint);
pragma Inline (Has_Pragma_Controlled);
pragma Inline (Has_Pragma_Elaborate_Body);
@@ -8813,7 +8845,8 @@ package Einfo is
pragma Inline (Set_Address_Taken);
pragma Inline (Set_Alias);
pragma Inline (Set_Alignment);
- pragma Inline (Set_Anonymous_Master);
+ pragma Inline (Set_Anonymous_Designated_Type);
+ pragma Inline (Set_Anonymous_Masters);
pragma Inline (Set_Anonymous_Object);
pragma Inline (Set_Associated_Entity);
pragma Inline (Set_Associated_Formal_Package);
@@ -8959,6 +8992,7 @@ package Einfo is
pragma Inline (Set_Has_Object_Size_Clause);
pragma Inline (Set_Has_Out_Or_In_Out_Parameter);
pragma Inline (Set_Has_Own_Invariants);
+ pragma Inline (Set_Has_Partial_Visible_Refinement);
pragma Inline (Set_Has_Per_Object_Constraint);
pragma Inline (Set_Has_Pragma_Controlled);
pragma Inline (Set_Has_Pragma_Elaborate_Body);
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index 33374d35882..e83b07affdd 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -1277,6 +1277,7 @@ package body Exp_Aggr is
is
Act_Aggr : Node_Id;
Act_Stmts : List_Id;
+ Expr : Node_Id;
Fin_Call : Node_Id;
Hook_Clear : Node_Id;
@@ -1285,20 +1286,29 @@ package body Exp_Aggr is
-- in-place expansion.
begin
+ -- Duplicate the initialization expression in case the context is
+ -- a multi choice list or an "others" choice which plugs various
+ -- holes in the aggregate. As a result the expression is no longer
+ -- shared between the various components and is reevaluated for
+ -- each such component.
+
+ Expr := New_Copy_Tree (Init_Expr);
+ Set_Parent (Expr, Parent (Init_Expr));
+
-- Perform a preliminary analysis and resolution to determine what
-- the initialization expression denotes. An unanalyzed function
-- call may appear as an identifier or an indexed component.
- if Nkind_In (Init_Expr, N_Function_Call,
- N_Identifier,
- N_Indexed_Component)
- and then not Analyzed (Init_Expr)
+ if Nkind_In (Expr, N_Function_Call,
+ N_Identifier,
+ N_Indexed_Component)
+ and then not Analyzed (Expr)
then
- Preanalyze_And_Resolve (Init_Expr, Comp_Typ);
+ Preanalyze_And_Resolve (Expr, Comp_Typ);
end if;
In_Place_Expansion :=
- Nkind (Init_Expr) = N_Function_Call
+ Nkind (Expr) = N_Function_Call
and then not Is_Limited_Type (Comp_Typ);
-- The initialization expression is a controlled function call.
@@ -1315,7 +1325,7 @@ package body Exp_Aggr is
-- generation of a transient scope, which leads to out-of-order
-- adjustment and finalization.
- Set_No_Side_Effect_Removal (Init_Expr);
+ Set_No_Side_Effect_Removal (Expr);
-- When the transient component initialization is related to a
-- range or an "others", keep all generated statements within
@@ -1341,7 +1351,7 @@ package body Exp_Aggr is
Process_Transient_Component
(Loc => Loc,
Comp_Typ => Comp_Typ,
- Init_Expr => Init_Expr,
+ Init_Expr => Expr,
Fin_Call => Fin_Call,
Hook_Clear => Hook_Clear,
Aggr => Act_Aggr,
@@ -1356,7 +1366,7 @@ package body Exp_Aggr is
Initialize_Array_Component
(Arr_Comp => Arr_Comp,
Comp_Typ => Comp_Typ,
- Init_Expr => Init_Expr,
+ Init_Expr => Expr,
Stmts => Stmts);
-- At this point the array element is fully initialized. Complete
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index f6a5c2c9067..905467b8a6b 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -4279,8 +4279,14 @@ package body Exp_Ch4 is
-- in the aggregate might not match the subtype mark in the allocator.
if Nkind (Expression (N)) = N_Qualified_Expression then
- Apply_Constraint_Check
- (Expression (Expression (N)), Etype (Expression (N)));
+ declare
+ Exp : constant Node_Id := Expression (Expression (N));
+ Typ : constant Entity_Id := Etype (Expression (N));
+
+ begin
+ Apply_Constraint_Check (Exp, Typ);
+ Apply_Predicate_Check (Exp, Typ);
+ end;
Expand_Allocator_Expression (N);
return;
@@ -10571,15 +10577,16 @@ package body Exp_Ch4 is
end if;
-- Check for case of converting to a type that has an invariant
- -- associated with it. This required an invariant check. We convert
+ -- associated with it. This requires an invariant check. We insert
+ -- a call:
- -- typ (expr)
+ -- invariant_check (typ (expr))
- -- into
-
- -- do invariant_check (typ (expr)) in typ (expr);
-
- -- using Duplicate_Subexpr to avoid multiple side effects
+ -- in the code, after removing side effects from the expression.
+ -- This is clearer than replacing the conversion into an expression
+ -- with actions, because the context may impose additional actions
+ -- (tag checks, membership tests, etc.) that conflict with this
+ -- rewriting (used previously).
-- Note: the Comes_From_Source check, and then the resetting of this
-- flag prevents what would otherwise be an infinite recursion.
@@ -10589,12 +10596,8 @@ package body Exp_Ch4 is
and then Comes_From_Source (N)
then
Set_Comes_From_Source (N, False);
- Rewrite (N,
- Make_Expression_With_Actions (Loc,
- Actions => New_List (
- Make_Invariant_Call (Duplicate_Subexpr (N))),
- Expression => Duplicate_Subexpr_No_Checks (N)));
- Analyze_And_Resolve (N, Target_Type);
+ Remove_Side_Effects (N);
+ Insert_Action (N, Make_Invariant_Call (Duplicate_Subexpr (N)));
goto Done;
end if;
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 77342299e82..0127bfbf7f6 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -278,9 +278,9 @@ package body Exp_Ch5 is
function Is_Non_Local_Array (Exp : Node_Id) return Boolean;
-- Determine if Exp is a reference to an array variable which is other
- -- than an object defined in the current scope, or a slice of such
- -- an object. Such objects can be aliased to parameters (unlike local
- -- array references).
+ -- than an object defined in the current scope, or a component or a
+ -- slice of such an object. Such objects can be aliased to parameters
+ -- (unlike local array references).
-----------------------
-- Apply_Dereference --
@@ -327,10 +327,15 @@ package body Exp_Ch5 is
function Is_Non_Local_Array (Exp : Node_Id) return Boolean is
begin
- return (Is_Entity_Name (Exp)
- and then Scope (Entity (Exp)) /= Current_Scope)
- or else (Nkind (Exp) = N_Slice
- and then Is_Non_Local_Array (Prefix (Exp)));
+ case Nkind (Exp) is
+ when N_Indexed_Component | N_Selected_Component | N_Slice =>
+ return Is_Non_Local_Array (Prefix (Exp));
+
+ when others =>
+ return
+ not (Is_Entity_Name (Exp)
+ and then Scope (Entity (Exp)) = Current_Scope);
+ end case;
end Is_Non_Local_Array;
-- Determine if Lhs, Rhs are formal arrays or nonlocal arrays
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index a14274c4a98..fa18400c12e 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -5943,7 +5943,7 @@ package body Exp_Ch6 is
Subp : Entity_Id;
Scop : Entity_Id)
is
- Rec : Node_Id;
+ Rec : Node_Id;
procedure Expand_Internal_Init_Call;
-- A call to an operation of the type may occur in the initialization
@@ -6006,7 +6006,7 @@ package body Exp_Ch6 is
-- case this must be handled as an inter-object call.
if not In_Open_Scopes (Scop)
- or else (not Is_Entity_Name (Name (N)))
+ or else not Is_Entity_Name (Name (N))
then
if Nkind (Name (N)) = N_Selected_Component then
Rec := Prefix (Name (N));
@@ -6020,8 +6020,9 @@ package body Exp_Ch6 is
-- function of that enclosing type, and this is treated as an
-- internal call.
- pragma Assert (Is_Entity_Name (Name (N))
- and then Inside_Init_Proc);
+ pragma Assert
+ (Is_Entity_Name (Name (N)) and then Inside_Init_Proc);
+
Expand_Internal_Init_Call;
return;
end if;
@@ -6044,7 +6045,6 @@ package body Exp_Ch6 is
Name => Name (N),
Rec => Rec,
External => False);
-
end if;
-- Analyze and resolve the new call. The actuals have already been
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index 2338deb675f..bd4695571c8 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -541,14 +541,16 @@ package body Exp_Ch7 is
(Desig_Typ : Entity_Id;
Unit_Id : Entity_Id;
Unit_Decl : Node_Id) return Entity_Id;
- -- Create a new anonymous finalization master for access type Ptr_Typ
- -- with designated type Desig_Typ. The declaration of the master along
- -- with its specialized initialization is inserted in the declarative
- -- part of unit Unit_Decl. Unit_Id denotes the entity of Unit_Decl.
+ -- Create a new anonymous master for access type Ptr_Typ with designated
+ -- type Desig_Typ. The declaration of the master and its initialization
+ -- are inserted in the declarative part of unit Unit_Decl. Unit_Id is
+ -- the entity of Unit_Decl.
- function In_Subtree (N : Node_Id; Root : Node_Id) return Boolean;
- -- Determine whether arbitrary node N appears within the subtree rooted
- -- at node Root.
+ function Current_Anonymous_Master
+ (Desig_Typ : Entity_Id;
+ Unit_Id : Entity_Id) return Entity_Id;
+ -- Find an anonymous master declared within unit Unit_Id which services
+ -- designated type Desig_Typ. If there is no such master, return Empty.
-----------------------------
-- Create_Anonymous_Master --
@@ -559,16 +561,42 @@ package body Exp_Ch7 is
Unit_Id : Entity_Id;
Unit_Decl : Node_Id) return Entity_Id
is
- Loc : constant Source_Ptr := Sloc (Unit_Id);
- Spec_Id : constant Entity_Id := Unique_Defining_Entity (Unit_Decl);
+ Loc : constant Source_Ptr := Sloc (Unit_Id);
+
+ All_FMs : Elist_Id;
Decls : List_Id;
FM_Decl : Node_Id;
FM_Id : Entity_Id;
FM_Init : Node_Id;
- Pref : Character;
Unit_Spec : Node_Id;
begin
+ -- Generate:
+ -- <FM_Id> : Finalization_Master;
+
+ FM_Id := Make_Temporary (Loc, 'A');
+
+ FM_Decl :=
+ Make_Object_Declaration (Loc,
+ Defining_Identifier => FM_Id,
+ Object_Definition =>
+ New_Occurrence_Of (RTE (RE_Finalization_Master), Loc));
+
+ -- Generate:
+ -- Set_Base_Pool
+ -- (<FM_Id>, Global_Pool_Object'Unrestricted_Access);
+
+ FM_Init :=
+ Make_Procedure_Call_Statement (Loc,
+ Name =>
+ New_Occurrence_Of (RTE (RE_Set_Base_Pool), Loc),
+ Parameter_Associations => New_List (
+ New_Occurrence_Of (FM_Id, Loc),
+ Make_Attribute_Reference (Loc,
+ Prefix =>
+ New_Occurrence_Of (RTE (RE_Global_Pool_Object), Loc),
+ Attribute_Name => Name_Unrestricted_Access)));
+
-- Find the declarative list of the unit
if Nkind (Unit_Decl) = N_Package_Declaration then
@@ -588,8 +616,8 @@ package body Exp_Ch7 is
-- procedure Comp_Unit_Proc (Param : access Ctrl := new Ctrl);
- -- There is no suitable place to create the anonymous master as the
- -- subprogram is not in a declarative list.
+ -- There is no suitable place to create the master as the subprogram
+ -- is not in a declarative list.
else
Decls := Declarations (Unit_Decl);
@@ -600,100 +628,74 @@ package body Exp_Ch7 is
end if;
end if;
- -- Step 1: Anonymous master creation
-
- -- Use a unique prefix in case the same unit requires two anonymous
- -- masters, one for the spec (S) and one for the body (B).
-
- if Ekind_In (Unit_Id, E_Function, E_Package, E_Procedure) then
- Pref := 'S';
- else
- Pref := 'B';
- end if;
-
- -- The name of the anonymous master has the following format:
-
- -- [BS]scopN__scop1__chars_of_desig_typAM
-
- -- The name utilizes the fully qualified name of the designated type
- -- in case two controlled types with the same name are declared in
- -- different scopes and both have anonymous access types.
-
- FM_Id :=
- Make_Defining_Identifier (Loc,
- New_External_Name
- (Related_Id => Get_Qualified_Name (Desig_Typ),
- Suffix => "AM",
- Prefix => Pref));
-
- -- Associate the anonymous master with the designated type. This
- -- ensures that any additional anonymous access types with the same
- -- designated type will share the same anonymous master within the
- -- same unit.
-
- Set_Anonymous_Master (Desig_Typ, FM_Id);
+ Prepend_To (Decls, FM_Init);
+ Prepend_To (Decls, FM_Decl);
- -- Generate:
- -- <FM_Id> : Finalization_Master;
+ -- Use the scope of the unit when analyzing the declaration of the
+ -- master and its initialization actions.
- FM_Decl :=
- Make_Object_Declaration (Loc,
- Defining_Identifier => FM_Id,
- Object_Definition =>
- New_Occurrence_Of (RTE (RE_Finalization_Master), Loc));
+ Push_Scope (Unit_Id);
+ Analyze (FM_Decl);
+ Analyze (FM_Init);
+ Pop_Scope;
- -- Step 2: Initialization actions
+ -- Mark the master as servicing this specific designated type
- -- Generate:
- -- Set_Base_Pool
- -- (<FM_Id>, Global_Pool_Object'Unrestricted_Access);
+ Set_Anonymous_Designated_Type (FM_Id, Desig_Typ);
- FM_Init :=
- Make_Procedure_Call_Statement (Loc,
- Name =>
- New_Occurrence_Of (RTE (RE_Set_Base_Pool), Loc),
- Parameter_Associations => New_List (
- New_Occurrence_Of (FM_Id, Loc),
- Make_Attribute_Reference (Loc,
- Prefix =>
- New_Occurrence_Of (RTE (RE_Global_Pool_Object), Loc),
- Attribute_Name => Name_Unrestricted_Access)));
+ -- Include the anonymous master in the list of existing masters which
+ -- appear in this unit. This effectively creates a mapping between a
+ -- master and a designated type which in turn allows for the reusal
+ -- of masters on a per-unit basis.
- Prepend_To (Decls, FM_Init);
- Prepend_To (Decls, FM_Decl);
+ All_FMs := Anonymous_Masters (Unit_Id);
- -- Since the anonymous master and all its initialization actions are
- -- inserted at top level, use the scope of the unit when analyzing.
+ if No (All_FMs) then
+ All_FMs := New_Elmt_List;
+ Set_Anonymous_Masters (Unit_Id, All_FMs);
+ end if;
- Push_Scope (Spec_Id);
- Analyze (FM_Decl);
- Analyze (FM_Init);
- Pop_Scope;
+ Prepend_Elmt (FM_Id, All_FMs);
return FM_Id;
end Create_Anonymous_Master;
- ----------------
- -- In_Subtree --
- ----------------
+ ------------------------------
+ -- Current_Anonymous_Master --
+ ------------------------------
- function In_Subtree (N : Node_Id; Root : Node_Id) return Boolean is
- Par : Node_Id;
+ function Current_Anonymous_Master
+ (Desig_Typ : Entity_Id;
+ Unit_Id : Entity_Id) return Entity_Id
+ is
+ All_FMs : constant Elist_Id := Anonymous_Masters (Unit_Id);
+ FM_Elmt : Elmt_Id;
+ FM_Id : Entity_Id;
begin
- -- Traverse the parent chain until reaching the same root
+ -- Inspect the list of anonymous masters declared within the unit
+ -- looking for an existing master which services the same designated
+ -- type.
- Par := N;
- while Present (Par) loop
- if Par = Root then
- return True;
- end if;
+ if Present (All_FMs) then
+ FM_Elmt := First_Elmt (All_FMs);
+ while Present (FM_Elmt) loop
+ FM_Id := Node (FM_Elmt);
- Par := Parent (Par);
- end loop;
+ -- The currect master services the same designated type. As a
+ -- result the master can be reused and associated with another
+ -- anonymous access-to-controlled type.
- return False;
- end In_Subtree;
+ if Anonymous_Designated_Type (FM_Id) = Desig_Typ then
+ return FM_Id;
+ end if;
+
+ Next_Elmt (FM_Elmt);
+ end loop;
+ end if;
+
+ return Empty;
+ end Current_Anonymous_Master;
-- Local variables
@@ -714,7 +716,7 @@ package body Exp_Ch7 is
end if;
Unit_Decl := Unit (Cunit (Current_Sem_Unit));
- Unit_Id := Defining_Entity (Unit_Decl);
+ Unit_Id := Unique_Defining_Entity (Unit_Decl);
-- The compilation unit is a package instantiation. In this case the
-- anonymous master is associated with the package spec as both the
@@ -738,21 +740,14 @@ package body Exp_Ch7 is
Desig_Typ := Priv_View;
end if;
- FM_Id := Anonymous_Master (Desig_Typ);
+ -- Determine whether the current semantic unit already has an anonymous
+ -- master which services the designated type.
- -- The designated type already has at least one anonymous access type
- -- pointing to it within the current unit. Reuse the anonymous master
- -- because the designated type is the same.
+ FM_Id := Current_Anonymous_Master (Desig_Typ, Unit_Id);
- if Present (FM_Id)
- and then In_Subtree (Declaration_Node (FM_Id), Root => Unit_Decl)
- then
- null;
+ -- If this is not the case, create a new master
- -- Otherwise the designated type lacks an anonymous master or it is
- -- declared in a different unit. Create a brand new master.
-
- else
+ if No (FM_Id) then
FM_Id := Create_Anonymous_Master (Desig_Typ, Unit_Id, Unit_Decl);
end if;
diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb
index 6c572cef3ea..7109dcdf82b 100644
--- a/gcc/ada/exp_ch9.adb
+++ b/gcc/ada/exp_ch9.adb
@@ -1106,6 +1106,7 @@ package body Exp_Ch9 is
procedure Build_Class_Wide_Master (Typ : Entity_Id) is
Loc : constant Source_Ptr := Sloc (Typ);
+ Master_Decl : Node_Id;
Master_Id : Entity_Id;
Master_Scope : Entity_Id;
Name_Id : Node_Id;
@@ -1146,13 +1147,12 @@ package body Exp_Ch9 is
-- the second transient scope requires a _master, it cannot use the one
-- already declared because the entity is not visible.
- Name_Id := Make_Identifier (Loc, Name_uMaster);
+ Name_Id := Make_Identifier (Loc, Name_uMaster);
+ Master_Decl := Empty;
if not Has_Master_Entity (Master_Scope)
or else No (Current_Entity_In_Scope (Name_Id))
then
- declare
- Master_Decl : Node_Id;
begin
Set_Has_Master_Entity (Master_Scope);
@@ -1214,7 +1214,17 @@ package body Exp_Ch9 is
Subtype_Mark => New_Occurrence_Of (Standard_Integer, Loc),
Name => Name_Id);
- Insert_Action (Related_Node, Ren_Decl);
+ -- If the master is declared locally, add the renaming declaration
+ -- immediately after it, to prevent access-before-elaboration in the
+ -- back-end.
+
+ if Present (Master_Decl) then
+ Insert_After (Master_Decl, Ren_Decl);
+ Analyze (Ren_Decl);
+
+ else
+ Insert_Action (Related_Node, Ren_Decl);
+ end if;
Set_Master_Id (Typ, Master_Id);
end Build_Class_Wide_Master;
@@ -8378,11 +8388,27 @@ package body Exp_Ch9 is
-- simple delays imposed by the use of Protected Objects.
procedure Expand_N_Delay_Relative_Statement (N : Node_Id) is
- Loc : constant Source_Ptr := Sloc (N);
+ Loc : constant Source_Ptr := Sloc (N);
+ Proc : Entity_Id;
+
begin
+ -- Try to use System.Relative_Delays.Delay_For only if available. This
+ -- is the implementation used on restricted platforms when Ada.Calendar
+ -- is not available.
+
+ if RTE_Available (RO_RD_Delay_For) then
+ Proc := RTE (RO_RD_Delay_For);
+
+ -- Otherwise, use Ada.Calendar.Delays.Delay_For and emit an error
+ -- message if not available.
+
+ else
+ Proc := RTE (RO_CA_Delay_For);
+ end if;
+
Rewrite (N,
Make_Procedure_Call_Statement (Loc,
- Name => New_Occurrence_Of (RTE (RO_CA_Delay_For), Loc),
+ Name => New_Occurrence_Of (Proc, Loc),
Parameter_Associations => New_List (Expression (N))));
Analyze (N);
end Expand_N_Delay_Relative_Statement;
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index d5e8540c0c6..b28be4fcecb 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -1408,7 +1408,7 @@ package body Freeze is
-- care of all overridings and is done only once.
if Present (Overridden_Operation (Prim))
- and then Comes_From_Source (Prim)
+ and then Comes_From_Source (Prim)
then
Update_Primitives_Mapping (Overridden_Operation (Prim), Prim);
@@ -1444,9 +1444,7 @@ package body Freeze is
Op_Node := First_Elmt (Prim_Ops);
while Present (Op_Node) loop
Prim := Node (Op_Node);
- if not Comes_From_Source (Prim)
- and then Present (Alias (Prim))
- then
+ if not Comes_From_Source (Prim) and then Present (Alias (Prim)) then
Par_Prim := Alias (Prim);
A_Pre := Find_Aspect (Par_Prim, Aspect_Pre);
diff --git a/gcc/ada/g-dyntab.adb b/gcc/ada/g-dyntab.adb
index e5e41c927a0..a74697dffba 100644
--- a/gcc/ada/g-dyntab.adb
+++ b/gcc/ada/g-dyntab.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2000-2014, AdaCore --
+-- Copyright (C) 2000-2016, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -32,33 +32,23 @@
pragma Compiler_Unit_Warning;
with GNAT.Heap_Sort_G;
-with System; use System;
-with System.Memory; use System.Memory;
-with Ada.Unchecked_Conversion;
+with Ada.Unchecked_Deallocation;
package body GNAT.Dynamic_Tables is
- Min : constant Integer := Integer (Table_Low_Bound);
- -- Subscript of the minimum entry in the currently allocated table
+ Empty : constant Table_Ptr :=
+ Empty_Table_Array_Ptr_To_Table_Ptr (Empty_Table_Array'Access);
-----------------------
-- Local Subprograms --
-----------------------
- procedure Reallocate (T : in out Instance);
- -- Reallocate the existing table according to the current value stored
- -- in Max. Works correctly to do an initial allocation if the table
- -- is currently null.
-
- pragma Warnings (Off);
- -- These unchecked conversions are in fact safe, since they never
- -- generate improperly aliased pointer values.
-
- function To_Address is new Ada.Unchecked_Conversion (Table_Ptr, Address);
- function To_Pointer is new Ada.Unchecked_Conversion (Address, Table_Ptr);
-
- pragma Warnings (On);
+ procedure Grow (T : in out Instance; New_Last : Table_Count_Type);
+ -- This is called when we are about to set the value of Last to a value
+ -- that is larger than Last_Allocated. This reallocates the table to the
+ -- larger size, as indicated by New_Last. At the time this is called,
+ -- T.P.Last is still the old value.
--------------
-- Allocate --
@@ -66,11 +56,9 @@ package body GNAT.Dynamic_Tables is
procedure Allocate (T : in out Instance; Num : Integer := 1) is
begin
- T.P.Last_Val := T.P.Last_Val + Num;
+ -- Note that Num can be negative
- if T.P.Last_Val > T.P.Max then
- Reallocate (T);
- end if;
+ Set_Last (T, T.P.Last + Table_Index_Type'Base (Num));
end Allocate;
------------
@@ -79,7 +67,7 @@ package body GNAT.Dynamic_Tables is
procedure Append (T : in out Instance; New_Val : Table_Component_Type) is
begin
- Set_Item (T, Table_Index_Type (T.P.Last_Val + 1), New_Val);
+ Set_Item (T, T.P.Last + 1, New_Val);
end Append;
----------------
@@ -99,9 +87,18 @@ package body GNAT.Dynamic_Tables is
procedure Decrement_Last (T : in out Instance) is
begin
- T.P.Last_Val := T.P.Last_Val - 1;
+ Allocate (T, -1);
end Decrement_Last;
+ -----------
+ -- First --
+ -----------
+
+ function First return Table_Index_Type is
+ begin
+ return Table_Low_Bound;
+ end First;
+
--------------
-- For_Each --
--------------
@@ -109,7 +106,7 @@ package body GNAT.Dynamic_Tables is
procedure For_Each (Table : Instance) is
Quit : Boolean := False;
begin
- for Index in Table_Low_Bound .. Table_Index_Type (Table.P.Last_Val) loop
+ for Index in Table_Low_Bound .. Table.P.Last loop
Action (Index, Table.Table (Index), Quit);
exit when Quit;
end loop;
@@ -120,23 +117,119 @@ package body GNAT.Dynamic_Tables is
----------
procedure Free (T : in out Instance) is
+ subtype Alloc_Type is Table_Type (First .. T.P.Last_Allocated);
+ type Alloc_Ptr is access all Alloc_Type;
+
+ procedure Free is new Ada.Unchecked_Deallocation (Alloc_Type, Alloc_Ptr);
+ function To_Alloc_Ptr is
+ new Ada.Unchecked_Conversion (Table_Ptr, Alloc_Ptr);
+
+ Temp : Alloc_Ptr := To_Alloc_Ptr (T.Table);
+
begin
- Free (To_Address (T.Table));
- T.Table := null;
- T.P.Length := 0;
+ if T.Table = Empty then
+ pragma Assert (T.P.Last_Allocated = First - 1);
+ pragma Assert (T.P.Last = First - 1);
+ null;
+ else
+ Free (Temp);
+ T.Table := Empty;
+ T.P.Last_Allocated := First - 1;
+ T.P.Last := First - 1;
+ end if;
end Free;
+ ----------
+ -- Grow --
+ ----------
+
+ procedure Grow (T : in out Instance; New_Last : Table_Count_Type) is
+
+ -- Note: Type Alloc_Ptr below needs to be declared locally so we know
+ -- the bounds. That means that the collection is local, so is finalized
+ -- when leaving Grow. That's why this package doesn't support controlled
+ -- types; the table elements would be finalized prematurely. An Ada
+ -- implementation would also be within its rights to reclaim the
+ -- storage. Fortunately, GNAT doesn't do that.
+
+ pragma Assert (not T.Locked);
+ pragma Assert (New_Last > T.P.Last_Allocated);
+
+ subtype Table_Length_Type is Table_Index_Type'Base
+ range 0 .. Table_Index_Type'Base'Last;
+
+ Old_Last_Allocated : constant Table_Count_Type := T.P.Last_Allocated;
+ Old_Allocated_Length : constant Table_Length_Type :=
+ Old_Last_Allocated - First + 1;
+
+ New_Length : constant Table_Length_Type := New_Last - First + 1;
+ New_Allocated_Length : Table_Length_Type;
+
+ begin
+ if T.Table = Empty then
+ New_Allocated_Length := Table_Length_Type (Table_Initial);
+ else
+ New_Allocated_Length :=
+ Table_Length_Type
+ (Long_Long_Integer (Old_Allocated_Length) *
+ (100 + Long_Long_Integer (Table_Increment)) / 100);
+ end if;
+
+ -- Make sure it really did grow
+
+ if New_Allocated_Length <= Old_Allocated_Length then
+ New_Allocated_Length := Old_Allocated_Length + 10;
+ end if;
+
+ if New_Allocated_Length <= New_Length then
+ New_Allocated_Length := New_Length + 10;
+ end if;
+
+ pragma Assert (New_Allocated_Length > Old_Allocated_Length);
+ pragma Assert (New_Allocated_Length > New_Length);
+
+ T.P.Last_Allocated := First + New_Allocated_Length - 1;
+
+ declare
+ subtype Old_Alloc_Type is Table_Type (First .. Old_Last_Allocated);
+ type Old_Alloc_Ptr is access all Old_Alloc_Type;
+
+ procedure Free is
+ new Ada.Unchecked_Deallocation (Old_Alloc_Type, Old_Alloc_Ptr);
+ function To_Old_Alloc_Ptr is
+ new Ada.Unchecked_Conversion (Table_Ptr, Old_Alloc_Ptr);
+
+ subtype Alloc_Type is
+ Table_Type (First .. First + New_Allocated_Length - 1);
+ type Alloc_Ptr is access all Alloc_Type;
+
+ function To_Table_Ptr is
+ new Ada.Unchecked_Conversion (Alloc_Ptr, Table_Ptr);
+
+ Old_Table : Old_Alloc_Ptr := To_Old_Alloc_Ptr (T.Table);
+ New_Table : constant Alloc_Ptr := new Alloc_Type;
+
+ begin
+ if T.Table /= Empty then
+ New_Table (First .. T.P.Last) := Old_Table (First .. T.P.Last);
+ Free (Old_Table);
+ end if;
+
+ T.Table := To_Table_Ptr (New_Table);
+ end;
+
+ pragma Assert (New_Last <= T.P.Last_Allocated);
+ pragma Assert (T.Table /= null);
+ pragma Assert (T.Table /= Empty);
+ end Grow;
+
--------------------
-- Increment_Last --
--------------------
procedure Increment_Last (T : in out Instance) is
begin
- T.P.Last_Val := T.P.Last_Val + 1;
-
- if T.P.Last_Val > T.P.Max then
- Reallocate (T);
- end if;
+ Allocate (T, 1);
end Increment_Last;
----------
@@ -144,100 +237,57 @@ package body GNAT.Dynamic_Tables is
----------
procedure Init (T : in out Instance) is
- Old_Length : constant Integer := T.P.Length;
-
begin
- T.P.Last_Val := Min - 1;
- T.P.Max := Min + Table_Initial - 1;
- T.P.Length := T.P.Max - Min + 1;
-
- -- If table is same size as before (happens when table is never
- -- expanded which is a common case), then simply reuse it. Note
- -- that this also means that an explicit Init call right after
- -- the implicit one in the package body is harmless.
-
- if Old_Length = T.P.Length then
- return;
-
- -- Otherwise we can use Reallocate to get a table of the right size.
- -- Note that Reallocate works fine to allocate a table of the right
- -- initial size when it is first allocated.
-
- else
- Reallocate (T);
- end if;
+ Free (T);
end Init;
----------
-- Last --
----------
- function Last (T : Instance) return Table_Index_Type is
+ function Last (T : Instance) return Table_Count_Type is
begin
- return Table_Index_Type (T.P.Last_Val);
+ return T.P.Last;
end Last;
- ----------------
- -- Reallocate --
- ----------------
-
- procedure Reallocate (T : in out Instance) is
- New_Length : Integer;
- New_Size : size_t;
+ -------------
+ -- Release --
+ -------------
+ procedure Release (T : in out Instance) is
+ pragma Assert (not T.Locked);
+ Old_Last_Allocated : constant Table_Count_Type := T.P.Last_Allocated;
begin
- if T.P.Max < T.P.Last_Val then
-
- -- Now increment table length until it is sufficiently large. Use
- -- the increment value or 10, which ever is larger (the reason
- -- for the use of 10 here is to ensure that the table does really
- -- increase in size (which would not be the case for a table of
- -- length 10 increased by 3% for instance). Do the intermediate
- -- calculation in Long_Long_Integer to avoid overflow.
-
- while T.P.Max < T.P.Last_Val loop
- New_Length :=
- Integer
- (Long_Long_Integer (T.P.Length) *
- (100 + Long_Long_Integer (Table_Increment)) / 100);
-
- if New_Length > T.P.Length then
- T.P.Length := New_Length;
- else
- T.P.Length := T.P.Length + 10;
- end if;
-
- T.P.Max := Min + T.P.Length - 1;
- end loop;
- end if;
+ if T.P.Last /= T.P.Last_Allocated then
+ pragma Assert (T.P.Last < T.P.Last_Allocated);
+ pragma Assert (T.Table /= Empty);
- New_Size :=
- size_t ((T.P.Max - Min + 1) *
- (Table_Type'Component_Size / Storage_Unit));
+ declare
+ subtype Old_Alloc_Type is Table_Type (First .. Old_Last_Allocated);
+ type Old_Alloc_Ptr is access all Old_Alloc_Type;
- if T.Table = null then
- T.Table := To_Pointer (Alloc (New_Size));
+ procedure Free is
+ new Ada.Unchecked_Deallocation (Old_Alloc_Type, Old_Alloc_Ptr);
+ function To_Old_Alloc_Ptr is
+ new Ada.Unchecked_Conversion (Table_Ptr, Old_Alloc_Ptr);
- elsif New_Size > 0 then
- T.Table :=
- To_Pointer (Realloc (Ptr => To_Address (T.Table),
- Size => New_Size));
- end if;
+ subtype Alloc_Type is
+ Table_Type (First .. First + T.P.Last - 1);
+ type Alloc_Ptr is access all Alloc_Type;
- if T.P.Length /= 0 and then T.Table = null then
- raise Storage_Error;
- end if;
- end Reallocate;
+ function To_Table_Ptr is
+ new Ada.Unchecked_Conversion (Alloc_Ptr, Table_Ptr);
- -------------
- -- Release --
- -------------
+ Old_Table : Old_Alloc_Ptr := To_Old_Alloc_Ptr (T.Table);
+ New_Table : constant Alloc_Ptr := new Alloc_Type'(Old_Table.all);
+ begin
+ T.P.Last_Allocated := T.P.Last;
+ Free (Old_Table);
+ T.Table := To_Table_Ptr (New_Table);
+ end;
+ end if;
- procedure Release (T : in out Instance) is
- begin
- T.P.Length := T.P.Last_Val - Integer (Table_Low_Bound) + 1;
- T.P.Max := T.P.Last_Val;
- Reallocate (T);
+ pragma Assert (T.P.Last = T.P.Last_Allocated);
end Release;
--------------
@@ -245,60 +295,18 @@ package body GNAT.Dynamic_Tables is
--------------
procedure Set_Item
- (T : in out Instance;
- Index : Table_Index_Type;
- Item : Table_Component_Type)
+ (T : in out Instance;
+ Index : Valid_Table_Index_Type;
+ Item : Table_Component_Type)
is
- -- If Item is a value within the current allocation, and we are going to
- -- reallocate, then we must preserve an intermediate copy here before
- -- calling Increment_Last. Otherwise, if Table_Component_Type is passed
- -- by reference, we are going to end up copying from storage that might
- -- have been deallocated from Increment_Last calling Reallocate.
-
- subtype Allocated_Table_T is
- Table_Type (T.Table'First .. Table_Index_Type (T.P.Max + 1));
- -- A constrained table subtype one element larger than the currently
- -- allocated table.
-
- Allocated_Table_Address : constant System.Address :=
- T.Table.all'Address;
- -- Used for address clause below (we can't use non-static expression
- -- Table.all'Address directly in the clause because some older versions
- -- of the compiler do not allow it).
-
- Allocated_Table : Allocated_Table_T;
- pragma Import (Ada, Allocated_Table);
- pragma Suppress (Range_Check, On => Allocated_Table);
- for Allocated_Table'Address use Allocated_Table_Address;
- -- Allocated_Table represents the currently allocated array, plus one
- -- element (the supplementary element is used to have a convenient way
- -- to the address just past the end of the current allocation). Range
- -- checks are suppressed because this unit uses direct calls to
- -- System.Memory for allocation, and this can yield misaligned storage
- -- (and we cannot rely on the bootstrap compiler supporting specifically
- -- disabling alignment checks, so we need to suppress all range checks).
- -- It is safe to suppress this check here because we know that a
- -- (possibly misaligned) object of that type does actually exist at that
- -- address.
- -- ??? We should really improve the allocation circuitry here to
- -- guarantee proper alignment.
-
- Need_Realloc : constant Boolean := Integer (Index) > T.P.Max;
- -- True if this operation requires storage reallocation (which may
- -- involve moving table contents around).
-
+ Item_Copy : constant Table_Component_Type := Item;
begin
- -- If we're going to reallocate, check whether Item references an
- -- element of the currently allocated table.
-
- if Need_Realloc
- and then Allocated_Table'Address <= Item'Address
- and then Item'Address <
- Allocated_Table (Table_Index_Type (T.P.Max + 1))'Address
- then
- -- If so, save a copy on the stack because Increment_Last will
- -- reallocate storage and might deallocate the current table.
+ -- If Set_Last is going to reallocate the table, we make a copy of Item,
+ -- in case the call was "Set_Item (T, X, T.Table (Y));", and Item is
+ -- passed by reference. Without the copy, we would deallocate the array
+ -- containing Item, leaving a dangling pointer.
+ if Index > T.P.Last_Allocated then
declare
Item_Copy : constant Table_Component_Type := Item;
begin
@@ -306,34 +314,28 @@ package body GNAT.Dynamic_Tables is
T.Table (Index) := Item_Copy;
end;
- else
- -- Here we know that either we won't reallocate (case of Index < Max)
- -- or that Item is not in the currently allocated table.
-
- if Integer (Index) > T.P.Last_Val then
- Set_Last (T, Index);
- end if;
+ return;
+ end if;
- T.Table (Index) := Item;
+ if Index > T.P.Last then
+ Set_Last (T, Index);
end if;
+
+ T.Table (Index) := Item_Copy;
end Set_Item;
--------------
-- Set_Last --
--------------
- procedure Set_Last (T : in out Instance; New_Val : Table_Index_Type) is
+ procedure Set_Last (T : in out Instance; New_Val : Table_Count_Type) is
+ pragma Assert (not T.Locked);
begin
- if Integer (New_Val) < T.P.Last_Val then
- T.P.Last_Val := Integer (New_Val);
-
- else
- T.P.Last_Val := Integer (New_Val);
-
- if T.P.Last_Val > T.P.Max then
- Reallocate (T);
- end if;
+ if New_Val > T.P.Last_Allocated then
+ Grow (T, New_Val);
end if;
+
+ T.P.Last := New_Val;
end Set_Last;
----------------
@@ -341,13 +343,12 @@ package body GNAT.Dynamic_Tables is
----------------
procedure Sort_Table (Table : in out Instance) is
-
Temp : Table_Component_Type;
-- A temporary position to simulate index 0
-- Local subprograms
- function Index_Of (Idx : Natural) return Table_Index_Type;
+ function Index_Of (Idx : Natural) return Table_Index_Type'Base;
-- Return index of Idx'th element of table
function Lower_Than (Op1, Op2 : Natural) return Boolean;
@@ -362,11 +363,11 @@ package body GNAT.Dynamic_Tables is
-- Index_Of --
--------------
- function Index_Of (Idx : Natural) return Table_Index_Type is
+ function Index_Of (Idx : Natural) return Table_Index_Type'Base is
J : constant Integer'Base :=
- Table_Index_Type'Pos (First) + Idx - 1;
+ Table_Index_Type'Base'Pos (First) + Idx - 1;
begin
- return Table_Index_Type'Val (J);
+ return Table_Index_Type'Base'Val (J);
end Index_Of;
----------
@@ -401,8 +402,7 @@ package body GNAT.Dynamic_Tables is
else
return
- Lt (Table.Table (Index_Of (Op1)),
- Table.Table (Index_Of (Op2)));
+ Lt (Table.Table (Index_Of (Op1)), Table.Table (Index_Of (Op2)));
end if;
end Lower_Than;
diff --git a/gcc/ada/g-dyntab.ads b/gcc/ada/g-dyntab.ads
index 59d993200aa..eb7181565db 100644
--- a/gcc/ada/g-dyntab.ads
+++ b/gcc/ada/g-dyntab.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2000-2015, AdaCore --
+-- Copyright (C) 2000-2016, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -41,40 +41,49 @@
-- instances of the table, while an instantiation of GNAT.Table creates a
-- single instance of the table type.
--- Note that this interface should remain synchronized with those in
--- GNAT.Table and the GNAT compiler source unit Table to keep as much
--- coherency as possible between these three related units.
+-- Note that these three interfaces should remain synchronized to keep as much
+-- coherency as possible among these three related units:
+--
+-- GNAT.Dynamic_Tables
+-- GNAT.Table
+-- Table (the compiler unit)
pragma Compiler_Unit_Warning;
+with Ada.Unchecked_Conversion;
+
generic
type Table_Component_Type is private;
type Table_Index_Type is range <>;
Table_Low_Bound : Table_Index_Type;
- Table_Initial : Positive;
- Table_Increment : Natural;
+ Table_Initial : Positive := 8;
+ Table_Increment : Natural := 100;
package GNAT.Dynamic_Tables is
- -- Table_Component_Type and Table_Index_Type specify the type of the
- -- array, Table_Low_Bound is the lower bound. Table_Index_Type must be an
- -- integer type. The effect is roughly to declare:
+ -- Table_Component_Type and Table_Index_Type specify the type of the array,
+ -- Table_Low_Bound is the lower bound. The effect is roughly to declare:
-- Table : array (Table_Low_Bound .. <>) of Table_Component_Type;
- -- Note: since the upper bound can be one less than the lower
- -- bound for an empty array, the table index type must be able
- -- to cover this range, e.g. if the lower bound is 1, then the
- -- Table_Index_Type should be Natural rather than Positive.
+ -- The lower bound of Table_Index_Type is ignored.
+
+ pragma Assert (Table_Low_Bound /= Table_Index_Type'Base'First);
+
+ function First return Table_Index_Type;
+ pragma Inline (First);
+ -- Export First as synonym for Table_Low_Bound (parallel with use of Last)
- -- Table_Component_Type may be any Ada type, except that controlled
- -- types are not supported. Note however that default initialization
- -- will NOT occur for array components.
+ subtype Valid_Table_Index_Type is Table_Index_Type'Base
+ range Table_Low_Bound .. Table_Index_Type'Base'Last;
+ subtype Table_Count_Type is Table_Index_Type'Base
+ range Table_Low_Bound - 1 .. Table_Index_Type'Base'Last;
- -- The Table_Initial values controls the allocation of the table when
- -- it is first allocated, either by default, or by an explicit Init
- -- call.
+ -- Table_Component_Type must not be a type with controlled parts.
+
+ -- The Table_Initial value controls the allocation of the table when
+ -- it is first allocated.
-- The Table_Increment value controls the amount of increase, if the
-- table has to be increased in size. The value given is a percentage
@@ -90,97 +99,114 @@ package GNAT.Dynamic_Tables is
-- to take the access of a table element, use Unrestricted_Access.
type Table_Type is
- array (Table_Index_Type range <>) of Table_Component_Type;
+ array (Valid_Table_Index_Type range <>) of Table_Component_Type;
subtype Big_Table_Type is
- Table_Type (Table_Low_Bound .. Table_Index_Type'Last);
+ Table_Type (Table_Low_Bound .. Valid_Table_Index_Type'Last);
-- We work with pointers to a bogus array type that is constrained with
-- the maximum possible range bound. This means that the pointer is a thin
-- pointer, which is more efficient. Since subscript checks in any case
-- must be on the logical, rather than physical bounds, safety is not
- -- compromised by this approach. These types should not be used by the
- -- client.
+ -- compromised by this approach.
+
+ -- To get subscript checking, rename a slice of the Table, like this:
+
+ -- Table : Table_Type renames T.Table (First .. Last (T));
+
+ -- and the refer to components of Table.
type Table_Ptr is access all Big_Table_Type;
for Table_Ptr'Storage_Size use 0;
- -- The table is actually represented as a pointer to allow reallocation.
- -- This type should not be used by the client.
+ -- The table is actually represented as a pointer to allow reallocation
type Table_Private is private;
-- Table private data that is not exported in Instance
+ -- Private use only:
+ subtype Empty_Table_Array_Type is
+ Table_Type (Table_Low_Bound .. Table_Low_Bound - 1);
+ type Empty_Table_Array_Ptr is access all Empty_Table_Array_Type;
+ Empty_Table_Array : aliased Empty_Table_Array_Type;
+ function Empty_Table_Array_Ptr_To_Table_Ptr is
+ new Ada.Unchecked_Conversion (Empty_Table_Array_Ptr, Table_Ptr);
+ -- End private use only. The above are used to initialize Table to point to
+ -- an empty array.
+
type Instance is record
- Table : aliased Table_Ptr := null;
- -- The table itself. The lower bound is the value of Low_Bound.
- -- Logically the upper bound is the current value of Last (although
- -- the actual size of the allocated table may be larger than this).
- -- The program may only access and modify Table entries in the
- -- range First .. Last.
+ Table : aliased Table_Ptr :=
+ Empty_Table_Array_Ptr_To_Table_Ptr (Empty_Table_Array'Access);
+ -- The table itself. The lower bound is the value of First. Logically
+ -- the upper bound is the current value of Last (although the actual
+ -- size of the allocated table may be larger than this). The program may
+ -- only access and modify Table entries in the range First .. Last.
+ --
+ -- It's a good idea to access this via a renaming of a slice, in order
+ -- to ensure bounds checking, as in:
+ --
+ -- Tab : Table_Type renames X.Table (First .. X.Last);
+
+ Locked : Boolean := False;
+ -- Table expansion is permitted only if this switch is set to False. A
+ -- client may set Locked to True, in which case any attempt to expand
+ -- the table will cause an assertion failure. Note that while a table
+ -- is locked, its address in memory remains fixed and unchanging.
P : Table_Private;
end record;
procedure Init (T : in out Instance);
- -- This procedure allocates a new table of size Initial (freeing any
- -- previously allocated larger table). Init must be called before using
- -- the table. Init is convenient in reestablishing a table for new use.
+ -- Reinitializes the table to empty. There is no need to call this before
+ -- using a table; tables default to empty.
- function Last (T : Instance) return Table_Index_Type;
+ function Last (T : Instance) return Table_Count_Type;
pragma Inline (Last);
- -- Returns the current value of the last used entry in the table,
- -- which can then be used as a subscript for Table. Note that the
- -- only way to modify Last is to call the Set_Last procedure. Last
- -- must always be used to determine the logically last entry.
+ -- Returns the current value of the last used entry in the table, which can
+ -- then be used as a subscript for Table.
procedure Release (T : in out Instance);
-- Storage is allocated in chunks according to the values given in the
- -- Initial and Increment parameters. A call to Release releases all
- -- storage that is allocated, but is not logically part of the current
+ -- Table_Initial and Table_Increment parameters. A call to Release releases
+ -- all storage that is allocated, but is not logically part of the current
-- array value. Current array values are not affected by this call.
procedure Free (T : in out Instance);
- -- Free all allocated memory for the table. A call to init is required
- -- before any use of this table after calling Free.
+ -- Same as Init
- First : constant Table_Index_Type := Table_Low_Bound;
- -- Export First as synonym for Low_Bound (parallel with use of Last)
-
- procedure Set_Last (T : in out Instance; New_Val : Table_Index_Type);
+ procedure Set_Last (T : in out Instance; New_Val : Table_Count_Type);
pragma Inline (Set_Last);
- -- This procedure sets Last to the indicated value. If necessary the
- -- table is reallocated to accommodate the new value (i.e. on return
- -- the allocated table has an upper bound of at least Last). If
- -- Set_Last reduces the size of the table, then logically entries are
- -- removed from the table. If Set_Last increases the size of the
- -- table, then new entries are logically added to the table.
+ -- This procedure sets Last to the indicated value. If necessary the table
+ -- is reallocated to accommodate the new value (i.e. on return the
+ -- allocated table has an upper bound of at least Last). If Set_Last
+ -- reduces the size of the table, then logically entries are removed from
+ -- the table. If Set_Last increases the size of the table, then new entries
+ -- are logically added to the table.
procedure Increment_Last (T : in out Instance);
pragma Inline (Increment_Last);
- -- Adds 1 to Last (same as Set_Last (Last + 1)
+ -- Adds 1 to Last (same as Set_Last (Last + 1))
procedure Decrement_Last (T : in out Instance);
pragma Inline (Decrement_Last);
- -- Subtracts 1 from Last (same as Set_Last (Last - 1)
+ -- Subtracts 1 from Last (same as Set_Last (Last - 1))
procedure Append (T : in out Instance; New_Val : Table_Component_Type);
pragma Inline (Append);
+ -- Appends New_Val onto the end of the table
-- Equivalent to:
-- Increment_Last (T);
-- T.Table (T.Last) := New_Val;
- -- i.e. the table size is increased by one, and the given new item
- -- stored in the newly created table element.
procedure Append_All (T : in out Instance; New_Vals : Table_Type);
-- Appends all components of New_Vals
procedure Set_Item
(T : in out Instance;
- Index : Table_Index_Type;
+ Index : Valid_Table_Index_Type;
Item : Table_Component_Type);
pragma Inline (Set_Item);
- -- Put Item in the table at position Index. The table is expanded if
- -- current table length is less than Index and in that case Last is set to
- -- Index. Item will replace any value already present in the table at this
- -- position.
+ -- Put Item in the table at position Index. If Index points to an existing
+ -- item (i.e. it is in the range First .. Last (T)), the item is replaced.
+ -- Otherwise (i.e. Index > Last (T), the table is expanded, and Last is set
+ -- to Index.
procedure Allocate (T : in out Instance; Num : Integer := 1);
pragma Inline (Allocate);
@@ -188,17 +214,17 @@ package GNAT.Dynamic_Tables is
generic
with procedure Action
- (Index : Table_Index_Type;
+ (Index : Valid_Table_Index_Type;
Item : Table_Component_Type;
Quit : in out Boolean) is <>;
procedure For_Each (Table : Instance);
- -- Calls procedure Action for each component of the table Table, or until
- -- one of these calls set Quit to True.
+ -- Calls procedure Action for each component of the table, or until one of
+ -- these calls set Quit to True.
generic
with function Lt (Comp1, Comp2 : Table_Component_Type) return Boolean;
procedure Sort_Table (Table : in out Instance);
- -- This procedure sorts the components of table Table into ascending
+ -- This procedure sorts the components of the table into ascending
-- order making calls to Lt to do required comparisons, and using
-- assignments to move components around. The Lt function returns True
-- if Comp1 is less than Comp2 (in the sense of the desired sort), and
@@ -208,16 +234,16 @@ package GNAT.Dynamic_Tables is
-- in the table is not preserved).
private
+
type Table_Private is record
- Max : Integer;
- -- Subscript of the maximum entry in the currently allocated table
+ Last_Allocated : Table_Count_Type := Table_Low_Bound - 1;
+ -- Subscript of the maximum entry in the currently allocated table.
+ -- Initial value ensures that we initially allocate the table.
- Length : Integer := 0;
- -- Number of entries in currently allocated table. The value of zero
- -- ensures that we initially allocate the table.
+ Last : Table_Count_Type := Table_Low_Bound - 1;
+ -- Current value of Last function
- Last_Val : Integer;
- -- Current value of Last
+ -- Invariant: Last <= Last_Allocated
end record;
end GNAT.Dynamic_Tables;
diff --git a/gcc/ada/g-spitbo.adb b/gcc/ada/g-spitbo.adb
index 22677149ee1..26753bd0b11 100644
--- a/gcc/ada/g-spitbo.adb
+++ b/gcc/ada/g-spitbo.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2012, AdaCore --
+-- Copyright (C) 1998-2016, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -333,7 +333,7 @@ package body GNAT.Spitbol is
-- Adjust --
------------
- procedure Adjust (Object : in out Table) is
+ overriding procedure Adjust (Object : in out Table) is
Ptr1 : Hash_Element_Ptr;
Ptr2 : Hash_Element_Ptr;
@@ -555,7 +555,7 @@ package body GNAT.Spitbol is
-- Finalize --
--------------
- procedure Finalize (Object : in out Table) is
+ overriding procedure Finalize (Object : in out Table) is
Ptr1 : Hash_Element_Ptr;
Ptr2 : Hash_Element_Ptr;
diff --git a/gcc/ada/g-spitbo.ads b/gcc/ada/g-spitbo.ads
index e97bb62d033..b07a21451fc 100644
--- a/gcc/ada/g-spitbo.ads
+++ b/gcc/ada/g-spitbo.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1997-2012, AdaCore --
+-- Copyright (C) 1997-2016, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -379,12 +379,12 @@ package GNAT.Spitbol is
pragma Finalize_Storage_Only (Table);
- procedure Adjust (Object : in out Table);
+ overriding procedure Adjust (Object : in out Table);
-- The Adjust procedure does a deep copy of the table structure
-- so that the effect of assignment is, like other assignments
-- in Ada, value-oriented.
- procedure Finalize (Object : in out Table);
+ overriding procedure Finalize (Object : in out Table);
-- This is the finalization routine that ensures that all storage
-- associated with a table is properly released when a table object
-- is abandoned and finalized.
diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb
index 2a640a2b88c..8621aea1514 100644
--- a/gcc/ada/ghost.adb
+++ b/gcc/ada/ghost.adb
@@ -603,6 +603,7 @@ package body Ghost is
and then Present (Deriv_Typ)
and then not Is_Ghost_Entity (Deriv_Typ)
and then not Is_Ghost_Entity (Over_Subp)
+ and then not Is_Abstract_Subprogram (Over_Subp)
then
Error_Msg_N ("incompatible overriding in effect", Subp);
@@ -616,8 +617,9 @@ package body Ghost is
-- A non-Ghost primitive of a type extension cannot override an
-- inherited Ghost primitive (SPARK RM 6.9(8)).
- if not Is_Ghost_Entity (Subp)
- and then Is_Ghost_Entity (Over_Subp)
+ if Is_Ghost_Entity (Over_Subp)
+ and then not Is_Ghost_Entity (Subp)
+ and then not Is_Abstract_Subprogram (Subp)
then
Error_Msg_N ("incompatible overriding in effect", Subp);
diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb
index acb79a56980..fa08414652c 100644
--- a/gcc/ada/gnat1drv.adb
+++ b/gcc/ada/gnat1drv.adb
@@ -343,7 +343,7 @@ procedure Gnat1drv is
-- of compiler warnings, but these are being turned off by default,
-- and CodePeer generates better messages (referencing original
-- variables) this way.
- -- Do this only is -gnatws is set (the default with -gnatcC), so that
+ -- Do this only if -gnatws is set (the default with -gnatcC), so that
-- if warnings are enabled, we'll get better messages from GNAT.
if Warning_Mode = Suppress then
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index cec968b9ae7..e180f3cfb09 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -2109,7 +2109,7 @@ __gnat_install_handler (void)
if ((strncmp (model, "Linux", 5) == 0)
|| (strncmp (model, "Windows", 7) == 0)
|| (strncmp (model, "SIMLINUX", 8) == 0) /* vx7 */
- || (strncmp (model, "SIMWINDOWS", 10) == 0)) /* ditto */
+ || (strncmp (model, "SIMNT", 5) == 0)) /* ditto */
__gnat_set_is_vxsim (TRUE);
}
#endif
@@ -2138,9 +2138,9 @@ __gnat_init_float (void)
#endif
#endif
-#if defined (__i386__) && !defined (VTHREADS)
+#if (defined (__i386__) || defined (__x86_64__)) && !defined (VTHREADS)
/* This is used to properly initialize the FPU on an x86 for each
- process thread. Is this needed for x86_64 ??? */
+ process thread. */
asm ("finit");
#endif
diff --git a/gcc/ada/lib-load.adb b/gcc/ada/lib-load.adb
index 83d3576eeb6..c66fd7264d2 100644
--- a/gcc/ada/lib-load.adb
+++ b/gcc/ada/lib-load.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -784,7 +784,7 @@ package body Lib.Load is
-- Generate message if unit required
- if Required and then Present (Error_Node) then
+ if Required then
if Is_Predefined_File_Name (Fname) then
-- This is a predefined library unit which is not present
@@ -799,7 +799,9 @@ package body Lib.Load is
-- the message about the restriction violation is generated,
-- if needed.
- Check_Restricted_Unit (Load_Name, Error_Node);
+ if Present (Error_Node) then
+ Check_Restricted_Unit (Load_Name, Error_Node);
+ end if;
Error_Msg_Unit_1 := Uname_Actual;
Error_Msg -- CODEFIX
diff --git a/gcc/ada/lib-writ.adb b/gcc/ada/lib-writ.adb
index c5f9d01c932..0cd615fd504 100644
--- a/gcc/ada/lib-writ.adb
+++ b/gcc/ada/lib-writ.adb
@@ -990,8 +990,27 @@ package body Lib.Writ is
if Cunit_Entity (Unum) = Empty
or else not From_Limited_With (Cunit_Entity (Unum))
then
- Num_Sdep := Num_Sdep + 1;
- Sdep_Table (Num_Sdep) := Unum;
+ -- Units that are not analyzed need not appear in the dependency
+ -- list. These units are either units appearing in limited_with
+ -- clauses of other units, or units loaded for inlining that end
+ -- up not inlined by a later decision of the inlining code, to
+ -- prevent circularities. We want to exclude these files from the
+ -- list of dependencies, so that the dependency number of other
+ -- is correctly set, as that number is used by cross-reference
+ -- tools to relate entity information to the unit in which they
+ -- are declared.
+
+ if Present (Cunit_Entity (Unum))
+ and then Ekind (Cunit_Entity (Unum)) = E_Void
+ and then Nkind (Unit (Cunit (Unum))) /= N_Subunit
+ and then Serious_Errors_Detected = 0
+ then
+ null;
+
+ else
+ Num_Sdep := Num_Sdep + 1;
+ Sdep_Table (Num_Sdep) := Unum;
+ end if;
end if;
end loop;
@@ -1433,20 +1452,6 @@ package body Lib.Writ is
Units.Table (Unum).Dependency_Num := J;
Sind := Units.Table (Unum).Source_Index;
- -- The dependency table also contains units that appear in the
- -- context of a unit loaded through a limited_with clause. These
- -- units are never analyzed, and thus the main unit does not
- -- really have a dependency on them. Subunits are always compiled
- -- in the context of the parent, and their file table entries are
- -- not properly decorated, they are recognized syntactically.
-
- if Present (Cunit_Entity (Unum))
- and then Ekind (Cunit_Entity (Unum)) = E_Void
- and then Nkind (Unit (Cunit (Unum))) /= N_Subunit
- then
- goto Next_Unit;
- end if;
-
Write_Info_Initiate ('D');
Write_Info_Char (' ');
@@ -1522,9 +1527,6 @@ package body Lib.Writ is
end if;
Write_Info_EOL;
-
- <<Next_Unit>>
- null;
end loop;
end;
diff --git a/gcc/ada/restrict.adb b/gcc/ada/restrict.adb
index c56c2e0b6ac..a66fffb5ee9 100644
--- a/gcc/ada/restrict.adb
+++ b/gcc/ada/restrict.adb
@@ -1194,16 +1194,18 @@ package body Restrict is
Restricted_Profile_Cached := True;
declare
- R : Restriction_Flags renames Profile_Info (Restricted).Set;
- V : Restriction_Values renames Profile_Info (Restricted).Value;
+ R : Restriction_Flags renames
+ Profile_Info (Restricted_Tasking).Set;
+ V : Restriction_Values renames
+ Profile_Info (Restricted_Tasking).Value;
begin
for J in R'Range loop
if R (J)
and then (Restrictions.Set (J) = False
- or else Restriction_Warnings (J)
- or else
- (J in All_Parameter_Restrictions
- and then Restrictions.Value (J) > V (J)))
+ or else Restriction_Warnings (J)
+ or else
+ (J in All_Parameter_Restrictions
+ and then Restrictions.Value (J) > V (J)))
then
Restricted_Profile_Result := False;
exit;
diff --git a/gcc/ada/restrict.ads b/gcc/ada/restrict.ads
index 3f05cd4f617..d725de799a9 100644
--- a/gcc/ada/restrict.ads
+++ b/gcc/ada/restrict.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -424,10 +424,10 @@ package Restrict is
-- executing this code only if needed.
function Restricted_Profile return Boolean;
- -- Tests if set of restrictions corresponding to Profile (Restricted) is
- -- currently in effect (set by pragma Profile, or by an appropriate set of
- -- individual Restrictions pragmas). Returns True only if all the required
- -- restrictions are set.
+ -- Tests if set of restrictions corresponding to Restricted_Tasking profile
+ -- is currently in effect (set by pragma Profile, or by an appropriate set
+ -- of individual Restrictions pragmas). Returns True only if all the
+ -- required restrictions are set.
procedure Set_Hidden_Part_In_SPARK (Loc1, Loc2 : Source_Ptr);
-- Insert a new hidden region range in the SPARK hides table. The effect
diff --git a/gcc/ada/rtsfind.adb b/gcc/ada/rtsfind.adb
index e2d9cb53018..6e94ccbd942 100644
--- a/gcc/ada/rtsfind.adb
+++ b/gcc/ada/rtsfind.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -1144,6 +1144,9 @@ package body Rtsfind is
-- M (1 .. P) is current message to be output
RE_Image : constant String := RE_Id'Image (Id);
+ S : Natural;
+ -- RE_Image (S .. RE_Image'Last) is the name of the entity without the
+ -- "RE_" or "RO_XX_" prefix.
begin
if Id = RE_Null then
@@ -1166,10 +1169,21 @@ package body Rtsfind is
M (P + 1) := '.';
P := P + 1;
+ -- Strip "RE"
+
+ if RE_Image (2) = 'E' then
+ S := 4;
+
+ -- Strip "RO_XX"
+
+ else
+ S := 7;
+ end if;
+
-- Add entity name and closing quote to message
- Name_Len := RE_Image'Length - 3;
- Name_Buffer (1 .. Name_Len) := RE_Image (4 .. RE_Image'Length);
+ Name_Len := RE_Image'Length - S + 1;
+ Name_Buffer (1 .. Name_Len) := RE_Image (S .. RE_Image'Last);
Set_Casing (Mixed_Case);
M (P + 1 .. P + Name_Len) := Name_Buffer (1 .. Name_Len);
P := P + Name_Len;
diff --git a/gcc/ada/rtsfind.ads b/gcc/ada/rtsfind.ads
index 842c65bc761..6163f0bf27c 100644
--- a/gcc/ada/rtsfind.ads
+++ b/gcc/ada/rtsfind.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2015, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -349,6 +349,7 @@ package Rtsfind is
System_Pool_Empty,
System_Pool_Local,
System_Pool_Size,
+ System_Relative_Delays,
System_RPC,
System_Scalar_Values,
System_Secondary_Stack,
@@ -1403,6 +1404,8 @@ package Rtsfind is
RE_Tk_Objref, -- System.Partition_Interface
RE_Tk_Union, -- System.Partition_Interface
+ RO_RD_Delay_For, -- System.Relative_Delays
+
RE_IS_Is1, -- System.Scalar_Values
RE_IS_Is2, -- System.Scalar_Values
RE_IS_Is4, -- System.Scalar_Values
@@ -2635,6 +2638,8 @@ package Rtsfind is
RE_Stack_Bounded_Pool => System_Pool_Size,
+ RO_RD_Delay_For => System_Relative_Delays,
+
RE_Do_Apc => System_RPC,
RE_Do_Rpc => System_RPC,
RE_Params_Stream_Type => System_RPC,
diff --git a/gcc/ada/s-os_lib.adb b/gcc/ada/s-os_lib.adb
index 31b2f08cab9..5ac823e6cde 100644
--- a/gcc/ada/s-os_lib.adb
+++ b/gcc/ada/s-os_lib.adb
@@ -511,7 +511,6 @@ package body System.OS_Lib is
when None =>
null;
end case;
-
end Copy_To;
-- Start of processing for Copy_File
@@ -622,6 +621,7 @@ package body System.OS_Lib is
Ada_Pathname : String_Access :=
To_Path_String_Access
(Pathname, C_String_Length (Pathname));
+
begin
Copy_File (Ada_Name.all, Ada_Pathname.all, Success, Mode, Preserve);
Free (Ada_Name);
@@ -639,9 +639,10 @@ package body System.OS_Lib is
Copy_Timestamp : Boolean := True;
Copy_Permissions : Boolean := True)
is
- F : aliased String (1 .. From'Length + 1);
+ F : aliased String (1 .. From'Length + 1);
+ T : aliased String (1 .. To'Length + 1);
+
Mode : Integer;
- T : aliased String (1 .. To'Length + 1);
begin
if Copy_Timestamp then
@@ -713,6 +714,7 @@ package body System.OS_Lib is
Ada_Dest : String_Access :=
To_Path_String_Access
(Dest, C_String_Length (Dest));
+
begin
Copy_Time_Stamps (Ada_Source.all, Ada_Dest.all, Success);
Free (Ada_Source);
@@ -1504,30 +1506,31 @@ package body System.OS_Lib is
pragma Import
(C, Is_Read_Accessible_File, "__gnat_is_read_accessible_file");
F_Name : String (1 .. Name'Length + 1);
+
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
return Is_Read_Accessible_File (F_Name'Address) /= 0;
end Is_Read_Accessible_File;
- ----------------------
- -- Is_Readable_File --
- ----------------------
+ ----------------------------
+ -- Is_Owner_Readable_File --
+ ----------------------------
- function Is_Readable_File (Name : C_File_Name) return Boolean is
+ function Is_Owner_Readable_File (Name : C_File_Name) return Boolean is
function Is_Readable_File (Name : Address) return Integer;
pragma Import (C, Is_Readable_File, "__gnat_is_readable_file");
begin
return Is_Readable_File (Name) /= 0;
- end Is_Readable_File;
+ end Is_Owner_Readable_File;
- function Is_Readable_File (Name : String) return Boolean is
+ function Is_Owner_Readable_File (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
- return Is_Readable_File (F_Name'Address);
- end Is_Readable_File;
+ return Is_Owner_Readable_File (F_Name'Address);
+ end Is_Owner_Readable_File;
------------------------
-- Is_Executable_File --
@@ -1595,30 +1598,31 @@ package body System.OS_Lib is
pragma Import
(C, Is_Write_Accessible_File, "__gnat_is_write_accessible_file");
F_Name : String (1 .. Name'Length + 1);
+
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
return Is_Write_Accessible_File (F_Name'Address) /= 0;
end Is_Write_Accessible_File;
- ----------------------
- -- Is_Writable_File --
- ----------------------
+ ----------------------------
+ -- Is_Owner_Writable_File --
+ ----------------------------
- function Is_Writable_File (Name : C_File_Name) return Boolean is
+ function Is_Owner_Writable_File (Name : C_File_Name) return Boolean is
function Is_Writable_File (Name : Address) return Integer;
pragma Import (C, Is_Writable_File, "__gnat_is_writable_file");
begin
return Is_Writable_File (Name) /= 0;
- end Is_Writable_File;
+ end Is_Owner_Writable_File;
- function Is_Writable_File (Name : String) return Boolean is
+ function Is_Owner_Writable_File (Name : String) return Boolean is
F_Name : String (1 .. Name'Length + 1);
begin
F_Name (1 .. Name'Length) := Name;
F_Name (F_Name'Last) := ASCII.NUL;
- return Is_Writable_File (F_Name'Address);
- end Is_Writable_File;
+ return Is_Owner_Writable_File (F_Name'Address);
+ end Is_Owner_Writable_File;
----------
-- Kill --
@@ -1849,8 +1853,8 @@ package body System.OS_Lib is
else
Result :=
- Non_Blocking_Spawn
- (Program_Name, Args, Output_File_Descriptor, Err_To_Out);
+ Non_Blocking_Spawn
+ (Program_Name, Args, Output_File_Descriptor, Err_To_Out);
-- Close the file just created for the output, as the file descriptor
-- cannot be used anywhere, being a local value. It is safe to do
@@ -2628,6 +2632,7 @@ package body System.OS_Lib is
function rename (From, To : Address) return Integer;
pragma Import (C, rename, "__gnat_rename");
R : Integer;
+
begin
R := rename (Old_Name, New_Name);
Success := (R = 0);
@@ -2640,6 +2645,7 @@ package body System.OS_Lib is
is
C_Old_Name : String (1 .. Old_Name'Length + 1);
C_New_Name : String (1 .. New_Name'Length + 1);
+
begin
C_Old_Name (1 .. Old_Name'Length) := Old_Name;
C_Old_Name (C_Old_Name'Last) := ASCII.NUL;
@@ -2673,6 +2679,7 @@ package body System.OS_Lib is
procedure C_Set_Executable (Name : C_File_Name; Mode : Integer);
pragma Import (C, C_Set_Executable, "__gnat_set_executable");
C_Name : aliased String (Name'First .. Name'Last + 1);
+
begin
C_Name (Name'Range) := Name;
C_Name (C_Name'Last) := ASCII.NUL;
@@ -2687,6 +2694,7 @@ package body System.OS_Lib is
procedure C_Set_File_Time (Name : C_File_Name; Time : OS_Time);
pragma Import (C, C_Set_File_Time, "__gnat_set_file_time_name");
C_Name : aliased String (Name'First .. Name'Last + 1);
+
begin
C_Name (Name'Range) := Name;
C_Name (C_Name'Last) := ASCII.NUL;
@@ -2701,6 +2709,7 @@ package body System.OS_Lib is
procedure C_Set_Non_Readable (Name : C_File_Name);
pragma Import (C, C_Set_Non_Readable, "__gnat_set_non_readable");
C_Name : aliased String (Name'First .. Name'Last + 1);
+
begin
C_Name (Name'Range) := Name;
C_Name (C_Name'Last) := ASCII.NUL;
@@ -2715,6 +2724,7 @@ package body System.OS_Lib is
procedure C_Set_Non_Writable (Name : C_File_Name);
pragma Import (C, C_Set_Non_Writable, "__gnat_set_non_writable");
C_Name : aliased String (Name'First .. Name'Last + 1);
+
begin
C_Name (Name'Range) := Name;
C_Name (C_Name'Last) := ASCII.NUL;
@@ -2729,6 +2739,7 @@ package body System.OS_Lib is
procedure C_Set_Readable (Name : C_File_Name);
pragma Import (C, C_Set_Readable, "__gnat_set_readable");
C_Name : aliased String (Name'First .. Name'Last + 1);
+
begin
C_Name (Name'Range) := Name;
C_Name (C_Name'Last) := ASCII.NUL;
@@ -2743,6 +2754,7 @@ package body System.OS_Lib is
procedure C_Set_Writable (Name : C_File_Name);
pragma Import (C, C_Set_Writable, "__gnat_set_writable");
C_Name : aliased String (Name'First .. Name'Last + 1);
+
begin
C_Name (Name'Range) := Name;
C_Name (C_Name'Last) := ASCII.NUL;
@@ -2889,8 +2901,8 @@ package body System.OS_Lib is
type Chars is array (Positive range <>) of aliased Character;
type Char_Ptr is access constant Character;
- Command_Len : constant Positive := Program_Name'Length + 1 +
- Args_Length (Args);
+ Command_Len : constant Positive :=
+ Program_Name'Length + 1 + Args_Length (Args);
Command_Last : Natural := 0;
Command : aliased Chars (1 .. Command_Len);
-- Command contains all characters of the Program_Name and Args, all
diff --git a/gcc/ada/s-os_lib.ads b/gcc/ada/s-os_lib.ads
index 90048749082..e4a2624ea7b 100644
--- a/gcc/ada/s-os_lib.ads
+++ b/gcc/ada/s-os_lib.ads
@@ -425,7 +425,7 @@ package System.OS_Lib is
-- not actually be readable due to some other process having exclusive
-- access.
- function Is_Readable_File (Name : String) return Boolean;
+ function Is_Owner_Readable_File (Name : String) return Boolean;
-- Determines if the given string, Name, is the name of an existing file
-- that is readable. Returns True if so, False otherwise. Note that this
-- function simply interrogates the file attributes (e.g. using the C
@@ -449,7 +449,7 @@ package System.OS_Lib is
-- contains the name of the file to which it is linked. Symbolic links may
-- span file systems and may refer to directories.
- function Is_Writable_File (Name : String) return Boolean;
+ function Is_Owner_Writable_File (Name : String) return Boolean;
-- Determines if the given string, Name, is the name of an existing file
-- that is writable. Returns True if so, False otherwise. Note that this
-- function simply interrogates the file attributes (e.g. using the C
@@ -465,6 +465,14 @@ package System.OS_Lib is
-- Determines if the given string, Name, is the name of an existing file
-- that is writable. Returns True if so, False otherwise.
+ function Is_Readable_File (Name : String) return Boolean
+ renames Is_Read_Accessible_File;
+ function Is_Writable_File (Name : String) return Boolean
+ renames Is_Write_Accessible_File;
+ -- These subprograms provided for backward compatibility and should not be
+ -- used. Use Is_Owner_Readable_File/Is_Owner_Writable_File or
+ -- Is_Read_Accessible_File/Is_Write_Accessible_File instead.
+
function Locate_Exec_On_Path (Exec_Name : String) return String_Access;
-- Try to locate an executable whose name is given by Exec_Name in the
-- directories listed in the environment Path. If the Exec_Name does not
@@ -683,10 +691,10 @@ package System.OS_Lib is
function Is_Directory (Name : C_File_Name) return Boolean;
function Is_Executable_File (Name : C_File_Name) return Boolean;
- function Is_Readable_File (Name : C_File_Name) return Boolean;
+ function Is_Owner_Readable_File (Name : C_File_Name) return Boolean;
function Is_Regular_File (Name : C_File_Name) return Boolean;
function Is_Symbolic_Link (Name : C_File_Name) return Boolean;
- function Is_Writable_File (Name : C_File_Name) return Boolean;
+ function Is_Owner_Writable_File (Name : C_File_Name) return Boolean;
function Locate_Regular_File
(File_Name : C_File_Name;
diff --git a/gcc/ada/s-rident.ads b/gcc/ada/s-rident.ads
index 4f36b460b6a..8f552ba9001 100644
--- a/gcc/ada/s-rident.ads
+++ b/gcc/ada/s-rident.ads
@@ -378,15 +378,19 @@ package System.Rident is
type Profile_Name is
(No_Profile,
No_Implementation_Extensions,
+ Restricted_Tasking,
+ Restricted,
Ravenscar,
- GNAT_Extended_Ravenscar,
- Restricted);
+ GNAT_Extended_Ravenscar);
-- Names of recognized profiles. No_Profile is used to indicate that a
-- restriction came from pragma Restrictions[_Warning], as opposed to
- -- pragma Profile[_Warning].
+ -- pragma Profile[_Warning]. Restricted_Tasking is a non-user profile that
+ -- contaings the minimal set of restrictions to trigger the user of the
+ -- restricted tasking runtime. Restricted is the corresponding user profile
+ -- that also restrict protected types.
subtype Profile_Name_Actual is Profile_Name
- range No_Implementation_Extensions .. Restricted;
+ range No_Implementation_Extensions .. GNAT_Extended_Ravenscar;
-- Actual used profile names
type Profile_Data is record
@@ -422,6 +426,37 @@ package System.Rident is
Value =>
(others => 0)),
+ -- Restricted_Tasking Profile
+
+ Restricted_Tasking =>
+
+ -- Restrictions for Restricted_Tasking profile
+
+ (Set =>
+ (No_Abort_Statements => True,
+ No_Asynchronous_Control => True,
+ No_Dynamic_Attachment => True,
+ No_Dynamic_Priorities => True,
+ No_Local_Protected_Objects => True,
+ No_Protected_Type_Allocators => True,
+ No_Requeue_Statements => True,
+ No_Task_Allocators => True,
+ No_Task_Attributes_Package => True,
+ No_Task_Hierarchy => True,
+ No_Terminate_Alternatives => True,
+ Max_Asynchronous_Select_Nesting => True,
+ Max_Select_Alternatives => True,
+ Max_Task_Entries => True,
+ others => False),
+
+ -- Value settings for Restricted_Tasking profile
+
+ Value =>
+ (Max_Asynchronous_Select_Nesting => 0,
+ Max_Select_Alternatives => 0,
+ Max_Task_Entries => 0,
+ others => 0)),
+
-- Restricted Profile
Restricted =>
@@ -528,7 +563,6 @@ package System.Rident is
No_Task_Hierarchy => True,
No_Terminate_Alternatives => True,
Max_Asynchronous_Select_Nesting => True,
- Max_Protected_Entries => True,
Max_Select_Alternatives => True,
Max_Task_Entries => True,
@@ -539,7 +573,6 @@ package System.Rident is
No_Implicit_Protected_Object_Allocations
=> True,
No_Local_Timing_Events => True,
- No_Relative_Delay => True,
No_Select_Statements => True,
No_Specific_Termination_Handlers => True,
No_Task_Termination => True,
@@ -550,7 +583,6 @@ package System.Rident is
Value =>
(Max_Asynchronous_Select_Nesting => 0,
- Max_Protected_Entries => 1,
Max_Select_Alternatives => 0,
Max_Task_Entries => 0,
others => 0)));
diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb
index 7a86644bcaa..1b1720d3c7b 100644
--- a/gcc/ada/sem.adb
+++ b/gcc/ada/sem.adb
@@ -1767,6 +1767,13 @@ package body Sem is
pragma Assert (False, "subunit");
null;
+ when N_Null_Statement =>
+
+ -- Do not call Action for an ignored ghost unit
+
+ pragma Assert (Is_Ignored_Ghost_Node (Original_Node (Item)));
+ return;
+
when others =>
pragma Assert (False);
null;
@@ -2090,10 +2097,16 @@ package body Sem is
Unit (Library_Unit (Main_CU)));
end if;
- -- It's a spec, process it, and the units it depends on,
- -- unless it is a descendant of the main unit. This can
- -- happen when the body of a parent depends on some other
- -- descendant.
+ -- It is a spec, process it, and the units it depends on,
+ -- unless it is a descendant of the main unit. This can happen
+ -- when the body of a parent depends on some other descendant.
+
+ when N_Null_Statement =>
+
+ -- Ignore an ignored ghost unit
+
+ pragma Assert (Is_Ignored_Ghost_Node (Original_Node (N)));
+ null;
when others =>
Par := Scope (Defining_Entity (Unit (CU)));
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index c0be95d525a..b457aa45114 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -78,6 +78,8 @@ with Uintp; use Uintp;
with Uname; use Uname;
with Urealp; use Urealp;
+with System.CRC32; use System.CRC32;
+
package body Sem_Attr is
True_Value : constant Uint := Uint_1;
@@ -1358,13 +1360,23 @@ package body Sem_Attr is
-- appear on a subprogram renaming, when the renamed entity is an
-- attribute reference.
- if not Nkind_In (Subp_Decl, N_Abstract_Subprogram_Declaration,
- N_Entry_Declaration,
- N_Generic_Subprogram_Declaration,
- N_Subprogram_Body,
- N_Subprogram_Body_Stub,
- N_Subprogram_Declaration,
- N_Subprogram_Renaming_Declaration)
+ -- Generating C code the internally built nested _postcondition
+ -- subprograms are inlined; after expanded, inlined aspects are
+ -- located in the internal block generated by the frontend.
+
+ if Nkind (Subp_Decl) = N_Block_Statement
+ and then Modify_Tree_For_C
+ and then In_Inlined_Body
+ then
+ null;
+
+ elsif not Nkind_In (Subp_Decl, N_Abstract_Subprogram_Declaration,
+ N_Entry_Declaration,
+ N_Generic_Subprogram_Declaration,
+ N_Subprogram_Body,
+ N_Subprogram_Body_Stub,
+ N_Subprogram_Declaration,
+ N_Subprogram_Renaming_Declaration)
then
return;
end if;
@@ -5276,6 +5288,10 @@ package body Sem_Attr is
-- Local variables
+ In_Inlined_C_Postcondition : constant Boolean :=
+ Modify_Tree_For_C
+ and then In_Inlined_Body;
+
Legal : Boolean;
Pref_Id : Entity_Id;
Spec_Id : Entity_Id;
@@ -5309,10 +5325,7 @@ package body Sem_Attr is
-- The exception to this rule is when generating C since in this case
-- postconditions are inlined.
- if No (Spec_Id)
- and then Modify_Tree_For_C
- and then In_Inlined_Body
- then
+ if No (Spec_Id) and then In_Inlined_C_Postcondition then
Spec_Id := Entity (P);
elsif not Legal then
@@ -5325,7 +5338,11 @@ package body Sem_Attr is
-- Instead, rewrite the attribute as a reference to formal parameter
-- _Result of the _Postconditions procedure.
- if Chars (Spec_Id) = Name_uPostconditions then
+ if Chars (Spec_Id) = Name_uPostconditions
+ or else
+ (In_Inlined_C_Postcondition
+ and then Nkind (Parent (Spec_Id)) = N_Block_Statement)
+ then
Rewrite (N, Make_Identifier (Loc, Name_uResult));
-- The type of formal parameter _Result is that of the function
@@ -6121,44 +6138,150 @@ package body Sem_Attr is
-- Type_Key --
--------------
- when Attribute_Type_Key =>
- Check_E0;
- Check_Type;
+ when Attribute_Type_Key => Type_Key : declare
+ Full_Name : constant String_Id :=
+ Fully_Qualified_Name_String (Entity (P));
- -- This processing belongs in Eval_Attribute ???
+ CRC : CRC32;
+ -- The computed signature for the type
- declare
- function Type_Key return String_Id;
- -- A very preliminary implementation. For now, a signature
- -- consists of only the type name. This is clearly incomplete
- -- (e.g., adding a new field to a record type should change the
- -- type's Type_Key attribute).
+ Deref : Boolean;
+ -- To simplify the handling of mutually recursive types, follow a
+ -- single dereference link in a composite type.
- --------------
- -- Type_Key --
- --------------
+ procedure Compute_Type_Key (T : Entity_Id);
+ -- Create a CRC integer from the declaration of the type, For a
+ -- composite type, fold in the representation of its components in
+ -- recursive fashion. We use directly the source representation of
+ -- the types involved.
+
+ ----------------------
+ -- Compute_Type_Key --
+ ----------------------
- function Type_Key return String_Id is
- Full_Name : constant String_Id :=
- Fully_Qualified_Name_String (Entity (P));
+ procedure Compute_Type_Key (T : Entity_Id) is
+ Buffer : Source_Buffer_Ptr;
+ P_Max : Source_Ptr;
+ P_Min : Source_Ptr;
+ Rep : Node_Id;
+ SFI : Source_File_Index;
+
+ procedure Process_One_Declaration;
+ -- Update CRC with the characters of one type declaration, or a
+ -- representation pragma that applies to the type.
+
+ -----------------------------
+ -- Process_One_Declaration --
+ -----------------------------
+
+ procedure Process_One_Declaration is
+ Ptr : Source_Ptr;
begin
- -- Copy all characters in Full_Name but the trailing NUL
+ Ptr := P_Min;
- Start_String;
- for J in 1 .. String_Length (Full_Name) - 1 loop
- Store_String_Char (Get_String_Char (Full_Name, Pos (J)));
+ -- Scan type declaration, skipping blanks
+
+ while Ptr <= P_Max loop
+ if Buffer (Ptr) /= ' ' then
+ System.CRC32.Update (CRC, Buffer (Ptr));
+ end if;
+
+ Ptr := Ptr + 1;
end loop;
+ end Process_One_Declaration;
- Store_String_Chars ("'Type_Key");
- return End_String;
- end Type_Key;
+ -- Start of processing for Compute_Type_Key
begin
- Rewrite (N, Make_String_Literal (Loc, Type_Key));
- end;
+ if Is_Itype (T) then
+ return;
+ end if;
+
+ Sloc_Range (Enclosing_Declaration (T), P_Min, P_Max);
+ SFI := Get_Source_File_Index (P_Min);
+ Buffer := Source_Text (SFI);
+
+ Process_One_Declaration;
+
+ -- Recurse on relevant component types
+
+ if Is_Array_Type (T) then
+ Compute_Type_Key (Component_Type (T));
+
+ elsif Is_Access_Type (T) then
+ if not Deref then
+ Deref := True;
+ Compute_Type_Key (Designated_Type (T));
+ end if;
+
+ elsif Is_Derived_Type (T) then
+ Compute_Type_Key (Etype (T));
+
+ elsif Is_Record_Type (T) then
+ declare
+ Comp : Entity_Id;
+ begin
+ Comp := First_Component (T);
+ while Present (Comp) loop
+ Compute_Type_Key (Etype (Comp));
+ Next_Component (Comp);
+ end loop;
+ end;
+ end if;
+
+ -- Fold in representation aspects for the type, which appear in
+ -- the same source buffer.
+
+ Rep := First_Rep_Item (T);
+
+ while Present (Rep) loop
+ if Comes_From_Source (Rep) then
+ Sloc_Range (Rep, P_Min, P_Max);
+ Process_One_Declaration;
+ end if;
+
+ Rep := Next_Rep_Item (Rep);
+ end loop;
+ end Compute_Type_Key;
+
+ -- Start of processing for Type_Key
+
+ begin
+ Check_E0;
+ Check_Type;
+
+ Start_String;
+ Deref := False;
+
+ -- Copy all characters in Full_Name but the trailing NUL
+
+ for J in 1 .. String_Length (Full_Name) - 1 loop
+ Store_String_Char (Get_String_Char (Full_Name, Pos (J)));
+ end loop;
+
+ -- For standard type return the name of the type. as there is no
+ -- explicit source declaration to use. Otherwise compute CRC and
+ -- convert it to string one character at a time so as not to use
+ -- Image within the compiler.
+
+ if Scope (Entity (P)) /= Standard_Standard then
+ Initialize (CRC);
+ Compute_Type_Key (Entity (P));
+
+ if not Is_Frozen (Entity (P)) then
+ Error_Msg_N ("premature usage of Type_Key?", N);
+ end if;
+
+ while CRC > 0 loop
+ Store_String_Char (Character'Val (48 + (CRC rem 10)));
+ CRC := CRC / 10;
+ end loop;
+ end if;
+ Rewrite (N, Make_String_Literal (Loc, End_String));
Analyze_And_Resolve (N, Standard_String);
+ end Type_Key;
-----------------------
-- Unbiased_Rounding --
diff --git a/gcc/ada/sem_case.adb b/gcc/ada/sem_case.adb
index 8df46f067de..039a44485c4 100644
--- a/gcc/ada/sem_case.adb
+++ b/gcc/ada/sem_case.adb
@@ -114,10 +114,12 @@ package body Sem_Case is
Others_Present : Boolean;
Case_Node : Node_Id)
is
- Predicate_Error : Boolean;
+ Predicate_Error : Boolean := False;
-- Flag to prevent cascaded errors when a static predicate is known to
-- be violated by one choice.
+ Num_Choices : constant Nat := Choice_Table'Last;
+
procedure Check_Against_Predicate
(Pred : in out Node_Id;
Choice : Choice_Bounds;
@@ -130,6 +132,10 @@ package body Sem_Case is
-- choice that covered a predicate set. Error denotes whether the check
-- found an illegal intersection.
+ procedure Check_Duplicates;
+ -- Check for duplicate choices, and call Dup_Choice is there are any
+ -- such errors. Note that predicates are irrelevant here.
+
procedure Dup_Choice (Lo, Hi : Uint; C : Node_Id);
-- Post message "duplication of choice value(s) bla bla at xx". Message
-- is posted at location C. Caller sets Error_Msg_Sloc for xx.
@@ -236,8 +242,7 @@ package body Sem_Case is
Val : Uint) return Boolean
is
begin
- return
- Val = Lo or else Val = Hi or else (Lo < Val and then Val < Hi);
+ return Lo <= Val and then Val <= Hi;
end Inside_Range;
-- Local variables
@@ -276,14 +281,12 @@ package body Sem_Case is
return;
end if;
- -- Step 1: Detect duplicate choices
-
- if Inside_Range (Choice_Lo, Choice_Hi, Prev_Lo) then
- Dup_Choice (Prev_Lo, UI_Min (Prev_Hi, Choice_Hi), LocN);
- Error := True;
+ -- Step 1: Ignore duplicate choices, other than to set the flag,
+ -- because these were already detected by Check_Duplicates.
- elsif Inside_Range (Choice_Lo, Choice_Hi, Prev_Hi) then
- Dup_Choice (UI_Max (Choice_Lo, Prev_Lo), Prev_Hi, LocN);
+ if Inside_Range (Choice_Lo, Choice_Hi, Prev_Lo)
+ or else Inside_Range (Choice_Lo, Choice_Hi, Prev_Hi)
+ then
Error := True;
-- Step 2: Detect full coverage
@@ -447,6 +450,56 @@ package body Sem_Case is
end if;
end Check_Against_Predicate;
+ ----------------------
+ -- Check_Duplicates --
+ ----------------------
+
+ procedure Check_Duplicates is
+ Choice : Node_Id;
+ Choice_Hi : Uint;
+ Choice_Lo : Uint;
+ Prev_Choice : Node_Id;
+ Prev_Hi : Uint;
+
+ begin
+ Prev_Hi := Expr_Value (Choice_Table (1).Hi);
+
+ for Outer_Index in 2 .. Num_Choices loop
+ Choice_Lo := Expr_Value (Choice_Table (Outer_Index).Lo);
+ Choice_Hi := Expr_Value (Choice_Table (Outer_Index).Hi);
+
+ -- Choices overlap; this is an error
+
+ if Choice_Lo <= Prev_Hi then
+ Choice := Choice_Table (Outer_Index).Node;
+
+ -- Find first previous choice that overlaps
+
+ for Inner_Index in 1 .. Outer_Index - 1 loop
+ if Choice_Lo <=
+ Expr_Value (Choice_Table (Inner_Index).Hi)
+ then
+ Prev_Choice := Choice_Table (Inner_Index).Node;
+ exit;
+ end if;
+ end loop;
+
+ if Sloc (Prev_Choice) <= Sloc (Choice) then
+ Error_Msg_Sloc := Sloc (Prev_Choice);
+ Dup_Choice (Choice_Lo, UI_Min (Choice_Hi, Prev_Hi), Choice);
+ else
+ Error_Msg_Sloc := Sloc (Choice);
+ Dup_Choice
+ (Choice_Lo, UI_Min (Choice_Hi, Prev_Hi), Prev_Choice);
+ end if;
+ end if;
+
+ if Choice_Hi > Prev_Hi then
+ Prev_Hi := Choice_Hi;
+ end if;
+ end loop;
+ end Check_Duplicates;
+
----------------
-- Dup_Choice --
----------------
@@ -709,17 +762,13 @@ package body Sem_Case is
Bounds_Hi : constant Node_Id := Type_High_Bound (Bounds_Type);
Bounds_Lo : constant Node_Id := Type_Low_Bound (Bounds_Type);
- Num_Choices : constant Nat := Choice_Table'Last;
Has_Predicate : constant Boolean :=
Is_OK_Static_Subtype (Bounds_Type)
and then Has_Static_Predicate (Bounds_Type);
- Choice : Node_Id;
Choice_Hi : Uint;
Choice_Lo : Uint;
- Error : Boolean;
Pred : Node_Id;
- Prev_Choice : Node_Id;
Prev_Lo : Uint;
Prev_Hi : Uint;
@@ -735,8 +784,6 @@ package body Sem_Case is
return;
end if;
- Predicate_Error := False;
-
-- Choice_Table must start at 0 which is an unused location used by the
-- sorting algorithm. However the first valid position for a discrete
-- choice is 1.
@@ -756,16 +803,22 @@ package body Sem_Case is
Sorting.Sort (Positive (Choice_Table'Last));
- -- The type covered by the list of choices is actually a static subtype
- -- subject to a static predicate. The predicate defines subsets of legal
- -- values and requires finer grained analysis.
+ -- First check for duplicates. This involved the choices; predicates, if
+ -- any, are irrelevant.
+
+ Check_Duplicates;
+
+ -- Then check for overlaps
+
+ -- If the subtype has a static predicate, the predicate defines subsets
+ -- of legal values and requires finer grained analysis.
-- Note that in GNAT the predicate is considered static if the predicate
-- expression is static, independently of whether the aspect mentions
-- Static explicitly.
if Has_Predicate then
- Pred := First (Static_Discrete_Predicate (Bounds_Type));
+ Pred := First (Static_Discrete_Predicate (Bounds_Type));
-- Make initial value smaller than 'First of type, so that first
-- range comparison succeeds. This applies both to integer types
@@ -774,28 +827,30 @@ package body Sem_Case is
Prev_Lo := Expr_Value (Type_Low_Bound (Bounds_Type)) - 1;
Prev_Hi := Prev_Lo;
- Error := False;
-
- for Index in 1 .. Num_Choices loop
- Check_Against_Predicate
- (Pred => Pred,
- Choice => Choice_Table (Index),
- Prev_Lo => Prev_Lo,
- Prev_Hi => Prev_Hi,
- Error => Error);
-
- -- The analysis detected an illegal intersection between a choice
- -- and a static predicate set. Do not examine other choices unless
- -- all errors are requested.
-
- if Error then
- Predicate_Error := True;
-
- if not All_Errors_Mode then
- return;
+ declare
+ Error : Boolean := False;
+ begin
+ for Index in 1 .. Num_Choices loop
+ Check_Against_Predicate
+ (Pred => Pred,
+ Choice => Choice_Table (Index),
+ Prev_Lo => Prev_Lo,
+ Prev_Hi => Prev_Hi,
+ Error => Error);
+
+ -- The analysis detected an illegal intersection between a
+ -- choice and a static predicate set. Do not examine other
+ -- choices unless all errors are requested.
+
+ if Error then
+ Predicate_Error := True;
+
+ if not All_Errors_Mode then
+ return;
+ end if;
end if;
- end if;
- end loop;
+ end loop;
+ end;
if Predicate_Error then
return;
@@ -826,35 +881,11 @@ package body Sem_Case is
end if;
end if;
- for Outer_Index in 2 .. Num_Choices loop
- Choice_Lo := Expr_Value (Choice_Table (Outer_Index).Lo);
- Choice_Hi := Expr_Value (Choice_Table (Outer_Index).Hi);
-
- if Choice_Lo <= Prev_Hi then
- Choice := Choice_Table (Outer_Index).Node;
-
- -- Find first previous choice that overlaps
-
- for Inner_Index in 1 .. Outer_Index - 1 loop
- if Choice_Lo <=
- Expr_Value (Choice_Table (Inner_Index).Hi)
- then
- Prev_Choice := Choice_Table (Inner_Index).Node;
- exit;
- end if;
- end loop;
-
- if Sloc (Prev_Choice) <= Sloc (Choice) then
- Error_Msg_Sloc := Sloc (Prev_Choice);
- Dup_Choice
- (Choice_Lo, UI_Min (Choice_Hi, Prev_Hi), Choice);
- else
- Error_Msg_Sloc := Sloc (Choice);
- Dup_Choice
- (Choice_Lo, UI_Min (Choice_Hi, Prev_Hi), Prev_Choice);
- end if;
+ for Index in 2 .. Num_Choices loop
+ Choice_Lo := Expr_Value (Choice_Table (Index).Lo);
+ Choice_Hi := Expr_Value (Choice_Table (Index).Hi);
- elsif not Others_Present and then Choice_Lo /= Prev_Hi + 1 then
+ if Choice_Lo > Prev_Hi + 1 and then not Others_Present then
Missing_Choice (Prev_Hi + 1, Choice_Lo - 1);
end if;
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 86dbad06f52..115b2dd1e77 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -6377,6 +6377,13 @@ package body Sem_Ch10 is
-- Limited_Withed_Unit.
else
+ -- If the limited_with_clause is in some other unit in the context
+ -- then it is not visible in the main unit.
+
+ if not In_Extended_Main_Source_Unit (N) then
+ Set_Is_Immediately_Visible (P, False);
+ end if;
+
-- Real entities that are type or subtype declarations were hidden
-- from visibility at the point of installation of the limited-view.
-- Now we recover the previous value of the hidden attribute.
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 8533af0ecc7..b0a9ff66cac 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -5787,8 +5787,9 @@ package body Sem_Ch12 is
(Formal_Pack : Entity_Id;
Actual_Pack : Entity_Id)
is
- E1 : Entity_Id := First_Entity (Actual_Pack);
- E2 : Entity_Id := First_Entity (Formal_Pack);
+ E1 : Entity_Id := First_Entity (Actual_Pack);
+ E2 : Entity_Id := First_Entity (Formal_Pack);
+ Prev_E1 : Entity_Id;
Expr1 : Node_Id;
Expr2 : Node_Id;
@@ -5954,6 +5955,7 @@ package body Sem_Ch12 is
-- Start of processing for Check_Formal_Package_Instance
begin
+ Prev_E1 := E1;
while Present (E1) and then Present (E2) loop
exit when Ekind (E1) = E_Package
and then Renamed_Entity (E1) = Renamed_Entity (Actual_Pack);
@@ -5983,6 +5985,14 @@ package body Sem_Ch12 is
if No (E1) then
return;
+ -- Entities may be declared without full declaration, such as
+ -- itypes and predefined operators (concatenation for arrays, eg).
+ -- Skip it and keep the formal entity to find a later match for it.
+
+ elsif No (Parent (E2)) and then Ekind (E1) /= Ekind (E2) then
+ E1 := Prev_E1;
+ goto Next_E;
+
-- If the formal entity comes from a formal declaration, it was
-- defaulted in the formal package, and no check is needed on it.
@@ -5990,6 +6000,13 @@ package body Sem_Ch12 is
N_Formal_Object_Declaration,
N_Formal_Type_Declaration)
then
+ -- If the formal is a tagged type the corresponding class-wide
+ -- type has been generated as well, and it must be skipped.
+
+ if Is_Type (E2) and then Is_Tagged_Type (E2) then
+ Next_Entity (E2);
+ end if;
+
goto Next_E;
-- Ditto for defaulted formal subprograms.
@@ -6144,6 +6161,7 @@ package body Sem_Ch12 is
end if;
<<Next_E>>
+ Prev_E1 := E1;
Next_Entity (E1);
Next_Entity (E2);
end loop;
@@ -8930,7 +8948,6 @@ package body Sem_Ch12 is
Gen_Body : Node_Id;
Gen_Decl : Node_Id)
is
-
function In_Same_Scope (Gen_Id, Act_Id : Node_Id) return Boolean;
-- Check if the generic definition and the instantiation come from
-- a common scope, in which case the instance must be frozen after
@@ -8972,12 +8989,12 @@ package body Sem_Ch12 is
---------------
function True_Sloc (N, Act_Unit : Node_Id) return Source_Ptr is
- Res : Source_Ptr;
N1 : Node_Id;
+ Res : Source_Ptr;
begin
Res := Sloc (N);
- N1 := N;
+ N1 := N;
while Present (N1) and then N1 /= Act_Unit loop
if Sloc (N1) > Res then
Res := Sloc (N1);
@@ -8995,11 +9012,11 @@ package body Sem_Ch12 is
Par : constant Entity_Id := Scope (Gen_Id);
Gen_Unit : constant Node_Id :=
Unit (Cunit (Get_Source_Unit (Gen_Decl)));
- Orig_Body : Node_Id := Gen_Body;
- F_Node : Node_Id;
- Body_Unit : Node_Id;
+ Body_Unit : Node_Id;
+ F_Node : Node_Id;
Must_Delay : Boolean;
+ Orig_Body : Node_Id := Gen_Body;
-- Start of processing for Install_Body
@@ -9062,13 +9079,13 @@ package body Sem_Ch12 is
Must_Delay :=
(Gen_Unit = Act_Unit
- and then (Nkind_In (Gen_Unit, N_Package_Declaration,
- N_Generic_Package_Declaration)
+ and then (Nkind_In (Gen_Unit, N_Generic_Package_Declaration,
+ N_Package_Declaration)
or else (Gen_Unit = Body_Unit
and then True_Sloc (N, Act_Unit)
< Sloc (Orig_Body)))
and then Is_In_Main_Unit (Original_Node (Gen_Unit))
- and then (In_Same_Scope (Gen_Id, Act_Id)));
+ and then In_Same_Scope (Gen_Id, Act_Id));
-- If this is an early instantiation, the freeze node is placed after
-- the generic body. Otherwise, if the generic appears in an instance,
@@ -12896,7 +12913,6 @@ package body Sem_Ch12 is
end if;
Current_Unit := Parent (N);
-
while Present (Current_Unit)
and then Nkind (Current_Unit) /= N_Compilation_Unit
loop
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 4053ead57d6..a97d0172100 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -2178,10 +2178,17 @@ package body Sem_Ch3 is
-- case, add a proper spec if the body lacks one. The spec is inserted
-- before Body_Decl and immediately analyzed.
+ procedure Remove_Partial_Visible_Refinements (Spec_Id : Entity_Id);
+ -- Spec_Id is the entity of a package that may define abstract states,
+ -- and in the case of a child unit, whose ancestors may define abstract
+ -- states. If the states have partial visible refinement, remove the
+ -- partial visibility of each constituent at the end of the package
+ -- spec and body declarations.
+
procedure Remove_Visible_Refinements (Spec_Id : Entity_Id);
-- Spec_Id is the entity of a package that may define abstract states.
-- If the states have visible refinement, remove the visibility of each
- -- constituent at the end of the package body declarations.
+ -- constituent at the end of the package body declaration.
-----------------
-- Adjust_Decl --
@@ -2335,6 +2342,29 @@ package body Sem_Ch3 is
Insert_Before_And_Analyze (Body_Decl, Decl);
end Handle_Late_Controlled_Primitive;
+ ----------------------------------------
+ -- Remove_Partial_Visible_Refinements --
+ ----------------------------------------
+
+ procedure Remove_Partial_Visible_Refinements (Spec_Id : Entity_Id) is
+ State_Elmt : Elmt_Id;
+ begin
+ if Present (Abstract_States (Spec_Id)) then
+ State_Elmt := First_Elmt (Abstract_States (Spec_Id));
+ while Present (State_Elmt) loop
+ Set_Has_Partial_Visible_Refinement (Node (State_Elmt), False);
+ Next_Elmt (State_Elmt);
+ end loop;
+ end if;
+
+ -- For a child unit, also hide the partial state refinement from
+ -- ancestor packages.
+
+ if Is_Child_Unit (Spec_Id) then
+ Remove_Partial_Visible_Refinements (Scope (Spec_Id));
+ end if;
+ end Remove_Partial_Visible_Refinements;
+
--------------------------------
-- Remove_Visible_Refinements --
--------------------------------
@@ -2576,6 +2606,15 @@ package body Sem_Ch3 is
-- restore the original state conditions.
Remove_Visible_Refinements (Corresponding_Spec (Context));
+ Remove_Partial_Visible_Refinements (Corresponding_Spec (Context));
+
+ elsif Nkind (Context) = N_Package_Declaration then
+
+ -- Partial state refinements are visible up to the end of the
+ -- package spec declarations. Hide the partial state refinements
+ -- from visibility to restore the original state conditions.
+
+ Remove_Partial_Visible_Refinements (Corresponding_Spec (Context));
end if;
-- Verify that all abstract states found in any package declared in
@@ -2805,6 +2844,13 @@ package body Sem_Ch3 is
if not Analyzed (T) then
Set_Analyzed (T);
+ -- A type declared within a Ghost region is automatically Ghost
+ -- (SPARK RM 6.9(2)).
+
+ if Ghost_Mode > None then
+ Set_Is_Ghost_Entity (T);
+ end if;
+
case Nkind (Def) is
when N_Access_To_Subprogram_Definition =>
Access_Subprogram_Declaration (T, Def);
@@ -2887,13 +2933,6 @@ package body Sem_Ch3 is
Check_SPARK_05_Restriction ("controlled type is not allowed", N);
end if;
- -- A type declared within a Ghost region is automatically Ghost
- -- (SPARK RM 6.9(2)).
-
- if Ghost_Mode > None then
- Set_Is_Ghost_Entity (T);
- end if;
-
-- Some common processing for all types
Set_Depends_On_Private (T, Has_Private_Component (T));
@@ -14758,9 +14797,10 @@ package body Sem_Ch3 is
or else Is_Internal (Parent_Subp)
or else Is_Private_Overriding
or else Is_Internal_Name (Chars (Parent_Subp))
- or else Nam_In (Chars (Parent_Subp), Name_Initialize,
- Name_Adjust,
- Name_Finalize)
+ or else (Is_Controlled (Parent_Type)
+ and then Nam_In (Chars (Parent_Subp), Name_Adjust,
+ Name_Finalize,
+ Name_Initialize))
then
Set_Derived_Name;
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index 5c0f4f66c0c..888d6e9edd5 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -4804,6 +4804,7 @@ package body Sem_Ch4 is
In_Scope := In_Open_Scopes (Prefix_Type);
while Present (Comp) loop
+
-- Do not examine private operations of the type if not within
-- its scope.
@@ -4821,10 +4822,9 @@ package body Sem_Ch4 is
-- a visible entity is found.
if Is_Tagged_Type (Prefix_Type)
- and then
- Nkind_In (Parent (N), N_Procedure_Call_Statement,
- N_Function_Call,
- N_Indexed_Component)
+ and then Nkind_In (Parent (N), N_Function_Call,
+ N_Indexed_Component,
+ N_Procedure_Call_Statement)
and then Has_Mode_Conformant_Spec (Comp)
then
Has_Candidate := True;
diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb
index 4a3b2de0429..55ec81e1f51 100644
--- a/gcc/ada/sem_ch7.adb
+++ b/gcc/ada/sem_ch7.adb
@@ -2275,6 +2275,34 @@ package body Sem_Ch7 is
Next_Entity (Id);
end loop;
+ -- An abstract state is partially refined when it has at least one
+ -- Part_Of constituent. Since these constituents are being installed
+ -- into visibility, update the partial refinement status of any state
+ -- defined in the associated package, subject to at least one Part_Of
+ -- constituent.
+
+ if Ekind_In (P, E_Generic_Package, E_Package) then
+ declare
+ States : constant Elist_Id := Abstract_States (P);
+ State_Elmt : Elmt_Id;
+ State_Id : Entity_Id;
+
+ begin
+ if Present (States) then
+ State_Elmt := First_Elmt (States);
+ while Present (State_Elmt) loop
+ State_Id := Node (State_Elmt);
+
+ if Present (Part_Of_Constituents (State_Id)) then
+ Set_Has_Partial_Visible_Refinement (State_Id);
+ end if;
+
+ Next_Elmt (State_Elmt);
+ end loop;
+ end if;
+ end;
+ end if;
+
-- Indicate that the private part is currently visible, so it can be
-- properly reset on exit.
diff --git a/gcc/ada/sem_ch7.ads b/gcc/ada/sem_ch7.ads
index 2963aed984c..4e645adf7fb 100644
--- a/gcc/ada/sem_ch7.ads
+++ b/gcc/ada/sem_ch7.ads
@@ -46,10 +46,10 @@ package Sem_Ch7 is
-- On entrance to a package body, make declarations in package spec
-- immediately visible.
--
- -- When compiling the body of a package, both routines are called in
+ -- When compiling the body of a package, both routines are called in
-- succession. When compiling the body of a child package, the call
-- to Install_Private_Declaration is immediate for private children,
- -- but is deferred until the compilation of the private part of the
+ -- but is deferred until the compilation of the private part of the
-- child for public child packages.
function Unit_Requires_Body
diff --git a/gcc/ada/sem_ch9.adb b/gcc/ada/sem_ch9.adb
index 8297db8fe74..7ccf38bdb33 100644
--- a/gcc/ada/sem_ch9.adb
+++ b/gcc/ada/sem_ch9.adb
@@ -2090,6 +2090,7 @@ package body Sem_Ch9 is
if (Abort_Allowed or else Restriction_Active (No_Entry_Queue) = False
or else Number_Entries (T) > 1)
+ and then not Restricted_Profile
and then
(Has_Entries (T)
or else Has_Interrupt_Handler (T)
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb
index 8e82d281795..66eaca70e27 100644
--- a/gcc/ada/sem_elab.adb
+++ b/gcc/ada/sem_elab.adb
@@ -2126,6 +2126,14 @@ package body Sem_Elab is
end if;
Par := Parent (Par);
+
+ -- If assertions are not enabled, the check pragma is rewritten
+ -- as an if_statement in sem_prag, to generate various warnings
+ -- on boolean expressions. Retrieve the original pragma.
+
+ if Nkind (Original_Node (Par)) = N_Pragma then
+ Par := Original_Node (Par);
+ end if;
end loop;
return False;
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 9128294556f..649eb629b8c 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -258,6 +258,13 @@ package body Sem_Prag is
-- Subsidiary to all Find_Related_xxx routines. Emit an error on pragma
-- Prag that duplicates previous pragma Prev.
+ function Find_Encapsulating_State
+ (States : Elist_Id;
+ Constit_Id : Entity_Id) return Entity_Id;
+ -- Given the entity of a constituent Constit_Id, find the corresponding
+ -- encapsulating state which appears in States. The routine returns Empty
+ -- is no such state is found.
+
function Find_Related_Context
(Prag : Node_Id;
Do_Checks : Boolean := False) return Node_Id;
@@ -3410,6 +3417,13 @@ package body Sem_Prag is
Append_Elmt (Var_Id, Constits);
Set_Encapsulating_State (Var_Id, Encap_Id);
+
+ -- A Part_Of constituent partially refines an abstract state. This
+ -- property does not apply to protected or task units.
+
+ if Ekind (Encap_Id) = E_Abstract_State then
+ Set_Has_Partial_Visible_Refinement (Encap_Id);
+ end if;
end if;
-- Emit a clarification message when the encapsulator is undefined,
@@ -18717,7 +18731,7 @@ package body Sem_Prag is
Add_Contract_Item (N, Item_Id);
- -- A variable may act as consituent of a single concurrent type
+ -- A variable may act as constituent of a single concurrent type
-- which in turn could be declared after the variable. Due to this
-- discrepancy, the full analysis of indicator Part_Of is delayed
-- until the end of the enclosing declarative region (see routine
@@ -19129,15 +19143,17 @@ package body Sem_Prag is
-- the rep item chain, for processing when the type is frozen.
-- This is accomplished by a call to Rep_Item_Too_Late. We also
-- mark the type as having predicates.
- -- If the current policy is Ignore mark the subtype accordingly.
- -- In the case of predicates we consider them enabled unless an
- -- Ignore is specified, to preserve existing warnings.
+
+ -- If the current policy for predicate checking is Ignore mark the
+ -- subtype accordingly. In the case of predicates we consider them
+ -- enabled unless Ignore is specified (either directly or with a
+ -- general Assertion_Policy pragma) to preserve existing warnings.
Set_Has_Predicates (Typ);
Set_Predicates_Ignored (Typ,
Present (Check_Policy_List)
and then
- Policy_In_Effect (Name_Assertion_Policy) = Name_Ignore);
+ Policy_In_Effect (Name_Dynamic_Predicate) = Name_Ignore);
Discard := Rep_Item_Too_Late (Typ, N, FOnly => True);
end Predicate;
@@ -23802,7 +23818,8 @@ package body Sem_Prag is
Matched := True;
-- An abstract state with visible non-null refinement
- -- matches one of its constituents.
+ -- matches one of its constituents, or itself for an
+ -- abstract state with partial visible refinement.
elsif Has_Non_Null_Visible_Refinement (Dep_Item_Id) then
if Is_Entity_Name (Ref_Item) then
@@ -23817,6 +23834,12 @@ package body Sem_Prag is
then
Record_Item (Dep_Item_Id);
Matched := True;
+
+ elsif not Has_Visible_Refinement (Dep_Item_Id)
+ and then Ref_Item_Id = Dep_Item_Id
+ then
+ Record_Item (Dep_Item_Id);
+ Matched := True;
end if;
end if;
@@ -24041,9 +24064,9 @@ package body Sem_Prag is
procedure Check_Output_States is
procedure Check_Constituent_Usage (State_Id : Entity_Id);
- -- Determine whether all constituents of state State_Id with visible
- -- refinement are used as outputs in pragma Refined_Depends. Emit an
- -- error if this is not the case.
+ -- Determine whether all constituents of state State_Id with full
+ -- visible refinement are used as outputs in pragma Refined_Depends.
+ -- Emit an error if this is not the case.
-----------------------------
-- Check_Constituent_Usage --
@@ -24138,7 +24161,9 @@ package body Sem_Prag is
-- Ensure that all of the constituents are utilized as
-- outputs in pragma Refined_Depends.
- elsif Has_Non_Null_Visible_Refinement (Item_Id) then
+ elsif Has_Visible_Refinement (Item_Id)
+ and then Has_Non_Null_Visible_Refinement (Item_Id)
+ then
Check_Constituent_Usage (Item_Id);
end if;
end if;
@@ -24527,11 +24552,18 @@ package body Sem_Prag is
-- These list contain the entities of all Input, In_Out, Output and
-- Proof_In items defined in the corresponding Global pragma.
+ Repeat_Items : Elist_Id := No_Elist;
+ -- A list of all global items without full visible refinement found
+ -- in pragma Global. These states should be repeated in the global
+ -- refinement (SPARK RM 7.2.4(3c)) unless they have a partial visible
+ -- refinement, in which case they may be repeated (SPARK RM 7.2.4(3d)).
+
Spec_Id : Entity_Id;
-- The entity of the subprogram subject to pragma Refined_Global
States : Elist_Id := No_Elist;
- -- A list of all states with visible refinement found in pragma Global
+ -- A list of all states with full or partial visible refinement found in
+ -- pragma Global.
procedure Check_In_Out_States;
-- Determine whether the corresponding Global pragma mentions In_Out
@@ -24578,9 +24610,10 @@ package body Sem_Prag is
-- and separate them in lists In_Items, In_Out_Items, Out_Items and
-- Proof_In_Items. Flags Has_In_State, Has_In_Out_State, Has_Out_State
-- and Has_Proof_In_State are set when there is at least one abstract
- -- state with visible refinement available in the corresponding mode.
- -- Flag Has_Null_State is set when at least state has a null refinement.
- -- Mode enotes the current global mode in effect.
+ -- state with full or partial visible refinement available in the
+ -- corresponding mode. Flag Has_Null_State is set when at least state
+ -- has a null refinement. Mode denotes the current global mode in
+ -- effect.
function Present_Then_Remove
(List : Elist_Id;
@@ -24589,10 +24622,18 @@ package body Sem_Prag is
-- remove it from List. This routine is used to strip lists In_Constits,
-- In_Out_Constits and Out_Constits of valid constituents.
+ procedure Present_Then_Remove (List : Elist_Id; Item : Entity_Id);
+ -- Same as function Present_Then_Remove, but do not report the presence
+ -- of Item in List.
+
procedure Report_Extra_Constituents;
-- Emit an error for each constituent found in lists In_Constits,
-- In_Out_Constits and Out_Constits.
+ procedure Report_Missing_Items;
+ -- Emit an error for each global item not repeated found in list
+ -- Repeat_Items.
+
-------------------------
-- Check_In_Out_States --
-------------------------
@@ -24614,7 +24655,7 @@ package body Sem_Prag is
procedure Check_Constituent_Usage (State_Id : Entity_Id) is
Constits : constant Elist_Id :=
- Refinement_Constituents (State_Id);
+ Partial_Refinement_Constituents (State_Id);
Constit_Elmt : Elmt_Id;
Constit_Id : Entity_Id;
Has_Missing : Boolean := False;
@@ -24681,15 +24722,24 @@ package body Sem_Prag is
N, State_Id);
end if;
- -- The state lacks a completion
+ -- The state lacks a completion. When full refinement is visible,
+ -- always emit an error (SPARK RM 7.2.4(3a)). When only partial
+ -- refinement is visible, emit an error if the abstract state
+ -- itself is not utilized (SPARK RM 7.2.4(3d)). In the case where
+ -- both are utilized, Check_State_And_Constituent_Use. will issue
+ -- the error.
elsif not Input_Seen
- and not In_Out_Seen
- and not Output_Seen
- and not Proof_In_Seen
+ and then not In_Out_Seen
+ and then not Output_Seen
+ and then not Proof_In_Seen
then
- SPARK_Msg_NE
- ("missing global refinement of state &", N, State_Id);
+ if Has_Visible_Refinement (State_Id)
+ or else Contains (Repeat_Items, State_Id)
+ then
+ SPARK_Msg_NE
+ ("missing global refinement of state &", N, State_Id);
+ end if;
-- Otherwise the state has a malformed completion where at least
-- one of the constituents has a different mode.
@@ -24743,9 +24793,10 @@ package body Sem_Prag is
procedure Check_Input_States is
procedure Check_Constituent_Usage (State_Id : Entity_Id);
-- Determine whether at least one constituent of state State_Id with
- -- visible refinement is used and has mode Input. Ensure that the
- -- remaining constituents do not have In_Out or Output modes. Emit an
- -- error if this is not the case (SPARK RM 7.2.4(5)).
+ -- full or partial visible refinement is used and has mode Input.
+ -- Ensure that the remaining constituents do not have In_Out or
+ -- Output modes. Emit an error if this is not the case (SPARK RM
+ -- 7.2.4(5)).
-----------------------------
-- Check_Constituent_Usage --
@@ -24753,7 +24804,7 @@ package body Sem_Prag is
procedure Check_Constituent_Usage (State_Id : Entity_Id) is
Constits : constant Elist_Id :=
- Refinement_Constituents (State_Id);
+ Partial_Refinement_Constituents (State_Id);
Constit_Elmt : Elmt_Id;
Constit_Id : Entity_Id;
In_Seen : Boolean := False;
@@ -24792,9 +24843,17 @@ package body Sem_Prag is
end loop;
end if;
- -- Not one of the constituents appeared as Input
+ -- Not one of the constituents appeared as Input. Always emit an
+ -- error when the full refinement is visible (SPARK RM 7.2.4(3a)).
+ -- When only partial refinement is visible, emit an
+ -- error if the abstract state itself is not utilized (SPARK RM
+ -- 7.2.4(3d)). In the case where both are utilized, an error will
+ -- be issued in Check_State_And_Constituent_Use.
- if not In_Seen then
+ if not In_Seen
+ and then (Has_Visible_Refinement (State_Id)
+ or else Contains (Repeat_Items, State_Id))
+ then
SPARK_Msg_NE
("global refinement of state & must include at least one "
& "constituent of mode `Input`", N, State_Id);
@@ -24823,8 +24882,11 @@ package body Sem_Prag is
while Present (Item_Elmt) loop
Item_Id := Node (Item_Elmt);
- -- Ensure that at least one of the constituents is utilized and
- -- is of mode Input.
+ -- When full refinement is visible, ensure that at least one of
+ -- the constituents is utilized and is of mode Input. When only
+ -- partial refinement is visible, ensure that either one of
+ -- the constituents is utilized and is of mode Input, or the
+ -- abstract state is repeated and no constituent is utilized.
if Ekind (Item_Id) = E_Abstract_State
and then Has_Non_Null_Visible_Refinement (Item_Id)
@@ -24843,9 +24905,9 @@ package body Sem_Prag is
procedure Check_Output_States is
procedure Check_Constituent_Usage (State_Id : Entity_Id);
- -- Determine whether all constituents of state State_Id with visible
- -- refinement are used and have mode Output. Emit an error if this is
- -- not the case (SPARK RM 7.2.4(5)).
+ -- Determine whether all constituents of state State_Id with full
+ -- visible refinement are used and have mode Output. Emit an error
+ -- if this is not the case (SPARK RM 7.2.4(5)).
-----------------------------
-- Check_Constituent_Usage --
@@ -24853,7 +24915,9 @@ package body Sem_Prag is
procedure Check_Constituent_Usage (State_Id : Entity_Id) is
Constits : constant Elist_Id :=
- Refinement_Constituents (State_Id);
+ Partial_Refinement_Constituents (State_Id);
+ Only_Partial : constant Boolean :=
+ not Has_Visible_Refinement (State_Id);
Constit_Elmt : Elmt_Id;
Constit_Id : Entity_Id;
Posted : Boolean := False;
@@ -24864,7 +24928,27 @@ package body Sem_Prag is
while Present (Constit_Elmt) loop
Constit_Id := Node (Constit_Elmt);
- if Present_Then_Remove (Out_Constits, Constit_Id) then
+ -- Issue an error when a constituent of State_Id is utilized
+ -- and State_Id has only partial visible refinement
+ -- (SPARK RM 7.2.4(3d)).
+
+ if Only_Partial then
+ if Present_Then_Remove (Out_Constits, Constit_Id)
+ or else Present_Then_Remove (In_Constits, Constit_Id)
+ or else
+ Present_Then_Remove (In_Out_Constits, Constit_Id)
+ or else
+ Present_Then_Remove (Proof_In_Constits, Constit_Id)
+ then
+ Error_Msg_Name_1 := Chars (State_Id);
+ SPARK_Msg_NE
+ ("constituent & of state % cannot be used in global "
+ & "refinement", N, Constit_Id);
+ Error_Msg_Name_1 := Chars (State_Id);
+ SPARK_Msg_N ("\use state % instead", N);
+ end if;
+
+ elsif Present_Then_Remove (Out_Constits, Constit_Id) then
null;
-- The constituent appears in the global refinement, but has
@@ -24921,8 +25005,10 @@ package body Sem_Prag is
while Present (Item_Elmt) loop
Item_Id := Node (Item_Elmt);
- -- Ensure that all of the constituents are utilized and they
- -- have mode Output.
+ -- When full refinement is visible, ensure that all of the
+ -- constituents are utilized and they have mode Output. When
+ -- only partial refinement is visible, ensure that no
+ -- constituent is utilized.
if Ekind (Item_Id) = E_Abstract_State
and then Has_Non_Null_Visible_Refinement (Item_Id)
@@ -24942,9 +25028,10 @@ package body Sem_Prag is
procedure Check_Proof_In_States is
procedure Check_Constituent_Usage (State_Id : Entity_Id);
-- Determine whether at least one constituent of state State_Id with
- -- visible refinement is used and has mode Proof_In. Ensure that the
- -- remaining constituents do not have Input, In_Out or Output modes.
- -- Emit an error of this is not the case (SPARK RM 7.2.4(5)).
+ -- full or partial visible refinement is used and has mode Proof_In.
+ -- Ensure that the remaining constituents do not have Input, In_Out
+ -- or Output modes. Emit an error of this is not the case (SPARK RM
+ -- 7.2.4(5)).
-----------------------------
-- Check_Constituent_Usage --
@@ -24952,7 +25039,7 @@ package body Sem_Prag is
procedure Check_Constituent_Usage (State_Id : Entity_Id) is
Constits : constant Elist_Id :=
- Refinement_Constituents (State_Id);
+ Partial_Refinement_Constituents (State_Id);
Constit_Elmt : Elmt_Id;
Constit_Id : Entity_Id;
Proof_In_Seen : Boolean := False;
@@ -24985,9 +25072,17 @@ package body Sem_Prag is
end loop;
end if;
- -- Not one of the constituents appeared as Proof_In
+ -- Not one of the constituents appeared as Proof_In. Always emit
+ -- an error when full refinement is visible (SPARK RM 7.2.4(3a)).
+ -- When only partial refinement is visible, emit an error if the
+ -- abstract state itself is not utilized (SPARK RM 7.2.4(3d)). In
+ -- the case where both are utilized, an error will be issued by
+ -- Check_State_And_Constituent_Use.
- if not Proof_In_Seen then
+ if not Proof_In_Seen
+ and then (Has_Visible_Refinement (State_Id)
+ or else Contains (Repeat_Items, State_Id))
+ then
SPARK_Msg_NE
("global refinement of state & must include at least one "
& "constituent of mode `Proof_In`", N, State_Id);
@@ -25016,8 +25111,11 @@ package body Sem_Prag is
while Present (Item_Elmt) loop
Item_Id := Node (Item_Elmt);
- -- Ensure that at least one of the constituents is utilized and
- -- is of mode Proof_In
+ -- Ensure that at least one of the constituents is utilized
+ -- and is of mode Proof_In. When only partial refinement is
+ -- visible, ensure that either one of the constituents is
+ -- utilized and is of mode Proof_In, or the abstract state
+ -- is repeated and no constituent is utilized.
if Ekind (Item_Id) = E_Abstract_State
and then Has_Non_Null_Visible_Refinement (Item_Id)
@@ -25072,20 +25170,40 @@ package body Sem_Prag is
SPARK_Msg_N ("\expected mode %, found mode %", Item);
end Inconsistent_Mode_Error;
+ -- Local variables
+
+ Enc_State : Entity_Id := Empty;
+ -- Encapsulating state for constituent, Empty otherwise
+
-- Start of processing for Check_Refined_Global_Item
begin
+ if Ekind_In (Item_Id, E_Abstract_State,
+ E_Constant,
+ E_Variable)
+ then
+ Enc_State := Find_Encapsulating_State (States, Item_Id);
+ end if;
+
-- When the state or object acts as a constituent of another
-- state with a visible refinement, collect it for the state
-- completeness checks performed later on. Note that the item
-- acts as a constituent only when the encapsulating state is
-- present in pragma Global.
- if Ekind_In (Item_Id, E_Abstract_State, E_Constant, E_Variable)
- and then Present (Encapsulating_State (Item_Id))
- and then Has_Visible_Refinement (Encapsulating_State (Item_Id))
- and then Contains (States, Encapsulating_State (Item_Id))
+ if Present (Enc_State)
+ and then (Has_Visible_Refinement (Enc_State)
+ or else Has_Partial_Visible_Refinement (Enc_State))
+ and then Contains (States, Enc_State)
then
+ -- If the state has only partial visible refinement, remove it
+ -- from the list of items that should be repeated from pragma
+ -- Global.
+
+ if not Has_Visible_Refinement (Enc_State) then
+ Present_Then_Remove (Repeat_Items, Enc_State);
+ end if;
+
if Global_Mode = Name_Input then
Append_New_Elmt (Item_Id, In_Constits);
@@ -25100,31 +25218,37 @@ package body Sem_Prag is
end if;
-- When not a constituent, ensure that both occurrences of the
- -- item in pragmas Global and Refined_Global match.
+ -- item in pragmas Global and Refined_Global match. Also remove
+ -- it when present from the list of items that should be repeated
+ -- from pragma Global.
- elsif Contains (In_Items, Item_Id) then
- if Global_Mode /= Name_Input then
- Inconsistent_Mode_Error (Name_Input);
- end if;
+ else
+ Present_Then_Remove (Repeat_Items, Item_Id);
- elsif Contains (In_Out_Items, Item_Id) then
- if Global_Mode /= Name_In_Out then
- Inconsistent_Mode_Error (Name_In_Out);
- end if;
+ if Contains (In_Items, Item_Id) then
+ if Global_Mode /= Name_Input then
+ Inconsistent_Mode_Error (Name_Input);
+ end if;
- elsif Contains (Out_Items, Item_Id) then
- if Global_Mode /= Name_Output then
- Inconsistent_Mode_Error (Name_Output);
- end if;
+ elsif Contains (In_Out_Items, Item_Id) then
+ if Global_Mode /= Name_In_Out then
+ Inconsistent_Mode_Error (Name_In_Out);
+ end if;
- elsif Contains (Proof_In_Items, Item_Id) then
- null;
+ elsif Contains (Out_Items, Item_Id) then
+ if Global_Mode /= Name_Output then
+ Inconsistent_Mode_Error (Name_Output);
+ end if;
- -- The item does not appear in the corresponding Global pragma,
- -- it must be an extra (SPARK RM 7.2.4(3)).
+ elsif Contains (Proof_In_Items, Item_Id) then
+ null;
- else
- SPARK_Msg_NE ("extra global item &", Item, Item_Id);
+ -- The item does not appear in the corresponding Global pragma,
+ -- it must be an extra (SPARK RM 7.2.4(3)).
+
+ else
+ SPARK_Msg_NE ("extra global item &", Item, Item_Id);
+ end if;
end if;
end Check_Refined_Global_Item;
@@ -25243,6 +25367,16 @@ package body Sem_Prag is
end if;
end if;
+ -- Record global items without full visible refinement found in
+ -- pragma Global which should be repeated in the global refinement
+ -- (SPARK RM 7.2.4(3c), SPARK RM 7.2.4(3d)).
+
+ if Ekind (Item_Id) /= E_Abstract_State
+ or else not Has_Visible_Refinement (Item_Id)
+ then
+ Append_New_Elmt (Item_Id, Repeat_Items);
+ end if;
+
-- Add the item to the proper list
if Item_Mode = Name_Input then
@@ -25342,6 +25476,12 @@ package body Sem_Prag is
return False;
end Present_Then_Remove;
+ procedure Present_Then_Remove (List : Elist_Id; Item : Entity_Id) is
+ Ignore : Boolean;
+ begin
+ Ignore := Present_Then_Remove (List, Item);
+ end Present_Then_Remove;
+
-------------------------------
-- Report_Extra_Constituents --
-------------------------------
@@ -25384,11 +25524,39 @@ package body Sem_Prag is
end if;
end Report_Extra_Constituents;
+ --------------------------
+ -- Report_Missing_Items --
+ --------------------------
+
+ procedure Report_Missing_Items is
+ Item_Elmt : Elmt_Id;
+ Item_Id : Entity_Id;
+
+ begin
+ -- Do not perform this check in an instance because it was already
+ -- performed successfully in the generic template.
+
+ if Is_Generic_Instance (Spec_Id) then
+ null;
+
+ else
+ if Present (Repeat_Items) then
+ Item_Elmt := First_Elmt (Repeat_Items);
+ while Present (Item_Elmt) loop
+ Item_Id := Node (Item_Elmt);
+ SPARK_Msg_NE ("missing global item &", N, Item_Id);
+ Next_Elmt (Item_Elmt);
+ end loop;
+ end if;
+ end if;
+ end Report_Missing_Items;
+
-- Local variables
- Body_Decl : constant Node_Id := Find_Related_Declaration_Or_Body (N);
- Errors : constant Nat := Serious_Errors_Detected;
- Items : Node_Id;
+ Body_Decl : constant Node_Id := Find_Related_Declaration_Or_Body (N);
+ Errors : constant Nat := Serious_Errors_Detected;
+ Items : Node_Id;
+ No_Constit : Boolean;
-- Start of processing for Analyze_Refined_Global_In_Decl_Part
@@ -25438,10 +25606,10 @@ package body Sem_Prag is
-- Non-instance case
else
- -- The corresponding Global pragma must mention at least one state
- -- witha visible refinement at the point Refined_Global is processed.
- -- States with null refinements need Refined_Global pragma
- -- (SPARK RM 7.2.4(2)).
+ -- The corresponding Global pragma must mention at least one
+ -- state with a visible refinement at the point Refined_Global
+ -- is processed. States with null refinements need Refined_Global
+ -- pragma (SPARK RM 7.2.4(2)).
if not Has_In_State
and then not Has_In_Out_State
@@ -25487,6 +25655,16 @@ package body Sem_Prag is
Check_Refined_Global_List (Items);
end if;
+ -- Store the information that no constituent is used in the global
+ -- refinement, prior to calling checking procedures which remove items
+ -- from the list of constituents.
+
+ No_Constit :=
+ No (In_Constits)
+ and then No (In_Out_Constits)
+ and then No (Out_Constits)
+ and then No (Proof_In_Constits);
+
-- For Input states with visible refinement, at least one constituent
-- must be used as an Input in the global refinement.
@@ -25522,6 +25700,29 @@ package body Sem_Prag is
Report_Extra_Constituents;
end if;
+ -- Emit errors for all items in Global that are not repeated in the
+ -- global refinement and for which there is no full visible refinement
+ -- and, in the case of states with partial visible refinement, no
+ -- constituent is mentioned in the global refinement.
+
+ if Serious_Errors_Detected = Errors then
+ Report_Missing_Items;
+ end if;
+
+ -- Emit an error if no constituent is used in the global refinement
+ -- (SPARK RM 7.2.4(3f)). Emit this error last, in case a more precise
+ -- one may be issued by the checking procedures. Do not perform this
+ -- check in an instance because it was already performed successfully
+ -- in the generic template.
+
+ if Serious_Errors_Detected = Errors
+ and then not Is_Generic_Instance (Spec_Id)
+ and then not Has_Null_State
+ and then No_Constit
+ then
+ SPARK_Msg_N ("missing refinement", N);
+ end if;
+
<<Leave>>
Set_Is_Analyzed_Pragma (N);
end Analyze_Refined_Global_In_Decl_Part;
@@ -26411,9 +26612,6 @@ package body Sem_Prag is
Par_Subp : Entity_Id;
Adjust_Sloc : Boolean)
is
- Par_Formal : Entity_Id;
- Subp_Formal : Entity_Id;
-
function Replace_Entity (N : Node_Id) return Traverse_Result;
-- Replace reference to formal of inherited operation or to primitive
-- operation of root type, with corresponding entity for derived type,
@@ -26516,6 +26714,11 @@ package body Sem_Prag is
procedure Replace_Condition_Entities is
new Traverse_Proc (Replace_Entity);
+ -- Local variables
+
+ Par_Formal : Entity_Id;
+ Subp_Formal : Entity_Id;
+
-- Start of processing for Build_Class_Wide_Expression
begin
@@ -27074,46 +27277,10 @@ package body Sem_Prag is
Constits : Elist_Id;
Context : Node_Id)
is
- function Find_Encapsulating_State
- (Constit_Id : Entity_Id) return Entity_Id;
- -- Given the entity of a constituent, try to find a corresponding
- -- encapsulating state that appears in the same context. The routine
- -- returns Empty is no such state is found.
-
- ------------------------------
- -- Find_Encapsulating_State --
- ------------------------------
-
- function Find_Encapsulating_State
- (Constit_Id : Entity_Id) return Entity_Id
- is
- State_Id : Entity_Id;
-
- begin
- -- Since a constituent may be part of a larger constituent set, climb
- -- the encapsulating state chain looking for a state that appears in
- -- the same context.
-
- State_Id := Encapsulating_State (Constit_Id);
- while Present (State_Id) loop
- if Contains (States, State_Id) then
- return State_Id;
- end if;
-
- State_Id := Encapsulating_State (State_Id);
- end loop;
-
- return Empty;
- end Find_Encapsulating_State;
-
- -- Local variables
-
Constit_Elmt : Elmt_Id;
Constit_Id : Entity_Id;
State_Id : Entity_Id;
- -- Start of processing for Check_State_And_Constituent_Use
-
begin
-- Nothing to do if there are no states or constituents
@@ -27132,7 +27299,7 @@ package body Sem_Prag is
-- state that appears in the same context and if this is the case,
-- emit an error (SPARK RM 7.2.6(7)).
- State_Id := Find_Encapsulating_State (Constit_Id);
+ State_Id := Find_Encapsulating_State (States, Constit_Id);
if Present (State_Id) then
Error_Msg_Name_1 := Chars (Constit_Id);
@@ -27608,6 +27775,33 @@ package body Sem_Prag is
return Num_Primitives (E mod 511);
end Entity_Hash;
+ ------------------------------
+ -- Find_Encapsulating_State --
+ ------------------------------
+
+ function Find_Encapsulating_State
+ (States : Elist_Id;
+ Constit_Id : Entity_Id) return Entity_Id
+ is
+ State_Id : Entity_Id;
+
+ begin
+ -- Since a constituent may be part of a larger constituent set, climb
+ -- the encapsulating state chain looking for a state that appears in
+ -- States.
+
+ State_Id := Encapsulating_State (Constit_Id);
+ while Present (State_Id) loop
+ if Contains (States, State_Id) then
+ return State_Id;
+ end if;
+
+ State_Id := Encapsulating_State (State_Id);
+ end loop;
+
+ return Empty;
+ end Find_Encapsulating_State;
+
--------------------------
-- Find_Related_Context --
--------------------------
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index f35c9e25145..86691d9e9a5 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -6034,6 +6034,15 @@ package body Sem_Res is
end;
else
+ -- If the function returns the limited view of type, the call must
+ -- appear in a context in which the non-limited view is available.
+ -- As is done in Try_Object_Operation, use the available view to
+ -- prevent back-end confusion.
+
+ if From_Limited_With (Etype (Nam)) then
+ Set_Etype (Nam, Available_View (Etype (Nam)));
+ end if;
+
Set_Etype (N, Etype (Nam));
end if;
@@ -9486,7 +9495,12 @@ package body Sem_Res is
then
null;
- elsif Nkind (N) = N_Qualified_Expression then
+ -- In the case of a qualified expression in an allocator, the check
+ -- is applied when expanding the allocator, so avoid redundant check.
+
+ elsif Nkind (N) = N_Qualified_Expression
+ and then Nkind (Parent (N)) /= N_Allocator
+ then
Apply_Predicate_Check (N, Target_Typ);
end if;
end if;
diff --git a/gcc/ada/xref_lib.adb b/gcc/ada/xref_lib.adb
index 3f882b0a570..92508414a03 100644
--- a/gcc/ada/xref_lib.adb
+++ b/gcc/ada/xref_lib.adb
@@ -401,8 +401,9 @@ package body Xref_Lib is
(File : ALI_File;
Num : Positive) return File_Reference
is
+ Table : Table_Type renames File.Dep.Table (1 .. Last (File.Dep));
begin
- return File.Dep.Table (Num);
+ return Table (Num);
end File_Name;
--------------------
@@ -642,10 +643,15 @@ package body Xref_Lib is
Token := Gnatchop_Name + 1;
end if;
- File.Dep.Table (Num_Dependencies) := Add_To_Xref_File
- (Ali (File_Start .. File_End),
- Gnatchop_File => Ali (Token .. Ptr - 1),
- Gnatchop_Offset => Gnatchop_Offset);
+ declare
+ Table : Table_Type renames
+ File.Dep.Table (1 .. Last (File.Dep));
+ begin
+ Table (Num_Dependencies) := Add_To_Xref_File
+ (Ali (File_Start .. File_End),
+ Gnatchop_File => Ali (Token .. Ptr - 1),
+ Gnatchop_Offset => Gnatchop_Offset);
+ end;
elsif W_Lines and then Ali (Ptr) = 'W' then
@@ -854,6 +860,8 @@ package body Xref_Lib is
Ptr := Ptr + 1;
end Skip_To_Matching_Closing_Bracket;
+ Table : Table_Type renames File.Dep.Table (1 .. Last (File.Dep));
+
-- Start of processing for Parse_Identifier_Info
begin
@@ -976,9 +984,9 @@ package body Xref_Lib is
-- We don't have a unit number specified, so we set P_Eun to
-- the current unit.
- for K in Dependencies_Tables.First .. Last (File.Dep) loop
+ for K in Table'Range loop
P_Eun := K;
- exit when File.Dep.Table (K) = File_Ref;
+ exit when Table (K) = File_Ref;
end loop;
end if;
@@ -1011,7 +1019,7 @@ package body Xref_Lib is
Symbol,
P_Line,
P_Column,
- File.Dep.Table (P_Eun));
+ Table (P_Eun));
end if;
end;
end if;
@@ -1029,7 +1037,7 @@ package body Xref_Lib is
Add_Entity
(Pattern,
Get_Symbol_Name (P_Eun, P_Line, P_Column)
- & ':' & Get_Gnatchop_File (File.Dep.Table (P_Eun))
+ & ':' & Get_Gnatchop_File (Table (P_Eun))
& ':' & Get_Line (Get_Parent (Decl_Ref))
& ':' & Get_Column (Get_Parent (Decl_Ref)),
False);
@@ -1080,11 +1088,10 @@ package body Xref_Lib is
if Wide_Search then
declare
- File_Ref : File_Reference;
- pragma Unreferenced (File_Ref);
File_Name : constant String := Get_Gnatchop_File (File.X_File);
+ Ignored : File_Reference;
begin
- File_Ref := Add_To_Xref_File (ALI_File_Name (File_Name), False);
+ Ignored := Add_To_Xref_File (ALI_File_Name (File_Name), False);
end;
end if;
@@ -1252,6 +1259,8 @@ package body Xref_Lib is
Ptr : Positive renames File.Current_Line;
File_Nr : Natural;
+ Table : Table_Type renames File.Dep.Table (1 .. Last (File.Dep));
+
begin
while Ali (Ptr) = 'X' loop
@@ -1267,8 +1276,8 @@ package body Xref_Lib is
-- If the referenced file is unknown, we simply ignore it
- if File_Nr in Dependencies_Tables.First .. Last (File.Dep) then
- File.X_File := File.Dep.Table (File_Nr);
+ if File_Nr in Table'Range then
+ File.X_File := Table (File_Nr);
else
File.X_File := Empty_File;
end if;
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index abcb35dea63..4fa518d27c6 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1117,15 +1117,22 @@ analyze_functions (bool first_time)
}
/* If decl is a clone of an abstract function,
- mark that abstract function so that we don't release its body.
- The DECL_INITIAL() of that abstract function declaration
- will be later needed to output debug info. */
+ mark that abstract function so that we don't release its body.
+ The DECL_INITIAL() of that abstract function declaration
+ will be later needed to output debug info. */
if (DECL_ABSTRACT_ORIGIN (decl))
{
cgraph_node *origin_node
= cgraph_node::get_create (DECL_ABSTRACT_ORIGIN (decl));
origin_node->used_as_abstract_origin = true;
}
+ /* Preserve a functions function context node. It will
+ later be needed to output debug info. */
+ if (tree fn = decl_function_context (decl))
+ {
+ cgraph_node *origin_node = cgraph_node::get_create (fn);
+ enqueue_node (origin_node);
+ }
}
else
{
diff --git a/gcc/common.opt b/gcc/common.opt
index 15679c5d392..ce16a7e2397 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -2200,6 +2200,10 @@ Common Report Var(flag_shrink_wrap) Optimization
Emit function prologues only before parts of the function that need it,
rather than at the top of the function.
+fshrink-wrap-separate
+Common Report Var(flag_shrink_wrap_separate) Init(1) Optimization
+Shrink-wrap parts of the prologue and epilogue separately.
+
fsignaling-nans
Common Report Var(flag_signaling_nans) Optimization SetByCombined
Disable optimizations observable by IEEE signaling NaNs.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 3a164e9b1c8..1110ee260ab 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -153,6 +153,10 @@ typedef struct GTY(()) machine_function
bool split_stack_argp_used;
/* Flag if r2 setup is needed with ELFv2 ABI. */
bool r2_setup_needed;
+ /* The components already handled by separate shrink-wrapping, which should
+ not be considered by the prologue and epilogue. */
+ bool gpr_is_wrapped_separately[32];
+ bool lr_is_wrapped_separately;
} machine_function;
/* Support targetm.vectorize.builtin_mask_for_load. */
@@ -1522,6 +1526,19 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_SET_UP_BY_PROLOGUE
#define TARGET_SET_UP_BY_PROLOGUE rs6000_set_up_by_prologue
+#undef TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
+#define TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS rs6000_get_separate_components
+#undef TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
+#define TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB rs6000_components_for_bb
+#undef TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS
+#define TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS rs6000_disqualify_components
+#undef TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS
+#define TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS rs6000_emit_prologue_components
+#undef TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS
+#define TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS rs6000_emit_epilogue_components
+#undef TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
+#define TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS rs6000_set_handled_components
+
#undef TARGET_EXTRA_LIVE_ON_ENTRY
#define TARGET_EXTRA_LIVE_ON_ENTRY rs6000_live_on_entry
@@ -10952,7 +10969,7 @@ rs6000_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
static bool warned_for_return_big_vectors = false;
if (!warned_for_return_big_vectors)
{
- warning (0, "GCC vector returned by reference: "
+ warning (OPT_Wpsabi, "GCC vector returned by reference: "
"non-standard ABI extension with no compatibility guarantee");
warned_for_return_big_vectors = true;
}
@@ -12610,7 +12627,7 @@ rs6000_pass_by_reference (cumulative_args_t cum ATTRIBUTE_UNUSED,
fprintf (stderr, "function_arg_pass_by_reference: synthetic vector\n");
if (!warned_for_pass_big_vectors)
{
- warning (0, "GCC vector passed by reference: "
+ warning (OPT_Wpsabi, "GCC vector passed by reference: "
"non-standard ABI extension with no compatibility guarantee");
warned_for_pass_big_vectors = true;
}
@@ -27411,6 +27428,212 @@ rs6000_global_entry_point_needed_p (void)
return cfun->machine->r2_setup_needed;
}
+/* Implement TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS. */
+static sbitmap
+rs6000_get_separate_components (void)
+{
+ rs6000_stack_t *info = rs6000_stack_info ();
+
+ if (!(info->savres_strategy & SAVE_INLINE_GPRS)
+ || !(info->savres_strategy & REST_INLINE_GPRS)
+ || WORLD_SAVE_P (info))
+ return NULL;
+
+ sbitmap components = sbitmap_alloc (32);
+ bitmap_clear (components);
+
+ /* The GPRs we need saved to the frame. */
+ int reg_size = TARGET_32BIT ? 4 : 8;
+ int offset = info->gp_save_offset;
+ if (info->push_p)
+ offset += info->total_size;
+
+ for (unsigned regno = info->first_gp_reg_save; regno < 32; regno++)
+ {
+ if (IN_RANGE (offset, -0x8000, 0x7fff)
+ && rs6000_reg_live_or_pic_offset_p (regno))
+ bitmap_set_bit (components, regno);
+
+ offset += reg_size;
+ }
+
+ /* Don't mess with the hard frame pointer. */
+ if (frame_pointer_needed)
+ bitmap_clear_bit (components, HARD_FRAME_POINTER_REGNUM);
+
+ /* Don't mess with the fixed TOC register. */
+ if ((TARGET_TOC && TARGET_MINIMAL_TOC)
+ || (flag_pic == 1 && DEFAULT_ABI == ABI_V4)
+ || (flag_pic && DEFAULT_ABI == ABI_DARWIN))
+ bitmap_clear_bit (components, RS6000_PIC_OFFSET_TABLE_REGNUM);
+
+ /* Optimize LR save and restore if we can. This is component 0. */
+ if (info->lr_save_p
+ && !(flag_pic && (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN)))
+ {
+ offset = info->lr_save_offset;
+ if (info->push_p)
+ offset += info->total_size;
+ if (IN_RANGE (offset, -0x8000, 0x7fff))
+ bitmap_set_bit (components, 0);
+ }
+
+ return components;
+}
+
+/* Implement TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB. */
+static sbitmap
+rs6000_components_for_bb (basic_block bb)
+{
+ rs6000_stack_t *info = rs6000_stack_info ();
+
+ bitmap in = DF_LIVE_IN (bb);
+ bitmap gen = &DF_LIVE_BB_INFO (bb)->gen;
+ bitmap kill = &DF_LIVE_BB_INFO (bb)->kill;
+
+ sbitmap components = sbitmap_alloc (32);
+ bitmap_clear (components);
+
+ /* GPRs are used in a bb if they are in the IN, GEN, or KILL sets. */
+ for (unsigned regno = info->first_gp_reg_save; regno < 32; regno++)
+ if (bitmap_bit_p (in, regno)
+ || bitmap_bit_p (gen, regno)
+ || bitmap_bit_p (kill, regno))
+ bitmap_set_bit (components, regno);
+
+ /* LR needs to be saved around a bb if it is killed in that bb. */
+ if (bitmap_bit_p (gen, LR_REGNO)
+ || bitmap_bit_p (kill, LR_REGNO))
+ bitmap_set_bit (components, 0);
+
+ return components;
+}
+
+/* Implement TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS. */
+static void
+rs6000_disqualify_components (sbitmap components, edge e,
+ sbitmap edge_components, bool /*is_prologue*/)
+{
+ /* Our LR pro/epilogue code moves LR via R0, so R0 had better not be
+ live where we want to place that code. */
+ if (bitmap_bit_p (edge_components, 0)
+ && bitmap_bit_p (DF_LIVE_IN (e->dest), 0))
+ {
+ if (dump_file)
+ fprintf (dump_file, "Disqualifying LR because GPR0 is live "
+ "on entry to bb %d\n", e->dest->index);
+ bitmap_clear_bit (components, 0);
+ }
+}
+
+/* Implement TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS. */
+static void
+rs6000_emit_prologue_components (sbitmap components)
+{
+ rs6000_stack_t *info = rs6000_stack_info ();
+ rtx ptr_reg = gen_rtx_REG (Pmode, frame_pointer_needed
+ ? HARD_FRAME_POINTER_REGNUM
+ : STACK_POINTER_REGNUM);
+ int reg_size = TARGET_32BIT ? 4 : 8;
+
+ /* Prologue for LR. */
+ if (bitmap_bit_p (components, 0))
+ {
+ rtx reg = gen_rtx_REG (Pmode, 0);
+ rtx_insn *insn = emit_move_insn (reg, gen_rtx_REG (Pmode, LR_REGNO));
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_CFA_REGISTER, NULL);
+
+ int offset = info->lr_save_offset;
+ if (info->push_p)
+ offset += info->total_size;
+
+ insn = emit_insn (gen_frame_store (reg, ptr_reg, offset));
+ RTX_FRAME_RELATED_P (insn) = 1;
+ rtx lr = gen_rtx_REG (Pmode, LR_REGNO);
+ rtx mem = copy_rtx (SET_DEST (single_set (insn)));
+ add_reg_note (insn, REG_CFA_OFFSET, gen_rtx_SET (mem, lr));
+ }
+
+ /* Prologue for the GPRs. */
+ int offset = info->gp_save_offset;
+ if (info->push_p)
+ offset += info->total_size;
+
+ for (int i = info->first_gp_reg_save; i < 32; i++)
+ {
+ if (bitmap_bit_p (components, i))
+ {
+ rtx reg = gen_rtx_REG (Pmode, i);
+ rtx_insn *insn = emit_insn (gen_frame_store (reg, ptr_reg, offset));
+ RTX_FRAME_RELATED_P (insn) = 1;
+ rtx set = copy_rtx (single_set (insn));
+ add_reg_note (insn, REG_CFA_OFFSET, set);
+ }
+
+ offset += reg_size;
+ }
+}
+
+/* Implement TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS. */
+static void
+rs6000_emit_epilogue_components (sbitmap components)
+{
+ rs6000_stack_t *info = rs6000_stack_info ();
+ rtx ptr_reg = gen_rtx_REG (Pmode, frame_pointer_needed
+ ? HARD_FRAME_POINTER_REGNUM
+ : STACK_POINTER_REGNUM);
+ int reg_size = TARGET_32BIT ? 4 : 8;
+
+ /* Epilogue for the GPRs. */
+ int offset = info->gp_save_offset;
+ if (info->push_p)
+ offset += info->total_size;
+
+ for (int i = info->first_gp_reg_save; i < 32; i++)
+ {
+ if (bitmap_bit_p (components, i))
+ {
+ rtx reg = gen_rtx_REG (Pmode, i);
+ rtx_insn *insn = emit_insn (gen_frame_load (reg, ptr_reg, offset));
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_CFA_RESTORE, reg);
+ }
+
+ offset += reg_size;
+ }
+
+ /* Epilogue for LR. */
+ if (bitmap_bit_p (components, 0))
+ {
+ int offset = info->lr_save_offset;
+ if (info->push_p)
+ offset += info->total_size;
+
+ rtx reg = gen_rtx_REG (Pmode, 0);
+ rtx_insn *insn = emit_insn (gen_frame_load (reg, ptr_reg, offset));
+
+ rtx lr = gen_rtx_REG (Pmode, LR_REGNO);
+ insn = emit_move_insn (lr, reg);
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_CFA_RESTORE, lr);
+ }
+}
+
+/* Implement TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS. */
+static void
+rs6000_set_handled_components (sbitmap components)
+{
+ rs6000_stack_t *info = rs6000_stack_info ();
+
+ for (int i = info->first_gp_reg_save; i < 32; i++)
+ if (bitmap_bit_p (components, i))
+ cfun->machine->gpr_is_wrapped_separately[i] = true;
+
+ if (bitmap_bit_p (components, 0))
+ cfun->machine->lr_is_wrapped_separately = true;
+}
+
/* Emit function prologue as insns. */
void
@@ -27668,7 +27891,8 @@ rs6000_emit_prologue (void)
}
/* If we use the link register, get it into r0. */
- if (!WORLD_SAVE_P (info) && info->lr_save_p)
+ if (!WORLD_SAVE_P (info) && info->lr_save_p
+ && !cfun->machine->lr_is_wrapped_separately)
{
rtx addr, reg, mem;
@@ -27896,13 +28120,16 @@ rs6000_emit_prologue (void)
}
else if (!WORLD_SAVE_P (info))
{
- int i;
- for (i = 0; i < 32 - info->first_gp_reg_save; i++)
- if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i))
- emit_frame_save (frame_reg_rtx, reg_mode,
- info->first_gp_reg_save + i,
- info->gp_save_offset + frame_off + reg_size * i,
- sp_off - frame_off);
+ int offset = info->gp_save_offset + frame_off;
+ for (int i = info->first_gp_reg_save; i < 32; i++)
+ {
+ if (rs6000_reg_live_or_pic_offset_p (i)
+ && !cfun->machine->gpr_is_wrapped_separately[i])
+ emit_frame_save (frame_reg_rtx, reg_mode, i, offset,
+ sp_off - frame_off);
+
+ offset += reg_size;
+ }
}
if (crtl->calls_eh_return)
@@ -28825,7 +29052,9 @@ rs6000_emit_epilogue (int sibcall)
&& (restoring_FPRs_inline
|| (strategy & REST_NOINLINE_FPRS_DOESNT_RESTORE_LR))
&& (restoring_GPRs_inline
- || info->first_fp_reg_save < 64));
+ || info->first_fp_reg_save < 64)
+ && !cfun->machine->lr_is_wrapped_separately);
+
if (WORLD_SAVE_P (info))
{
@@ -29460,12 +29689,18 @@ rs6000_emit_epilogue (int sibcall)
}
else
{
- for (i = 0; i < 32 - info->first_gp_reg_save; i++)
- if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i))
- emit_insn (gen_frame_load
- (gen_rtx_REG (reg_mode, info->first_gp_reg_save + i),
- frame_reg_rtx,
- info->gp_save_offset + frame_off + reg_size * i));
+ int offset = info->gp_save_offset + frame_off;
+ for (i = info->first_gp_reg_save; i < 32; i++)
+ {
+ if (rs6000_reg_live_or_pic_offset_p (i)
+ && !cfun->machine->gpr_is_wrapped_separately[i])
+ {
+ rtx reg = gen_rtx_REG (reg_mode, i);
+ emit_insn (gen_frame_load (reg, frame_reg_rtx, offset));
+ }
+
+ offset += reg_size;
+ }
}
if (DEFAULT_ABI == ABI_V4 || flag_shrink_wrap)
@@ -29504,8 +29739,10 @@ rs6000_emit_epilogue (int sibcall)
|| using_load_multiple
|| rs6000_reg_live_or_pic_offset_p (i))
{
- rtx reg = gen_rtx_REG (reg_mode, i);
+ if (cfun->machine->gpr_is_wrapped_separately[i])
+ continue;
+ rtx reg = gen_rtx_REG (reg_mode, i);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores);
}
}
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index 359e424d6b4..0f650242da4 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -1938,8 +1938,8 @@
(define_insn "vsx_concat_<mode>"
[(set (match_operand:VSX_D 0 "gpc_reg_operand" "=<VSa>,we")
(vec_concat:VSX_D
- (match_operand:<VS_scalar> 1 "gpc_reg_operand" "<VS_64reg>,r")
- (match_operand:<VS_scalar> 2 "gpc_reg_operand" "<VS_64reg>,r")))]
+ (match_operand:<VS_scalar> 1 "gpc_reg_operand" "<VS_64reg>,b")
+ (match_operand:<VS_scalar> 2 "gpc_reg_operand" "<VS_64reg>,b")))]
"VECTOR_MEM_VSX_P (<MODE>mode)"
{
if (which_alternative == 0)
diff --git a/gcc/dce.c b/gcc/dce.c
index ea3fb00d433..d5102873f60 100644
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -587,6 +587,15 @@ delete_unmarked_insns (void)
if (!dbg_cnt (dce))
continue;
+ if (crtl->shrink_wrapped_separate
+ && find_reg_note (insn, REG_CFA_RESTORE, NULL))
+ {
+ if (dump_file)
+ fprintf (dump_file, "DCE: NOT deleting insn %d, it's a "
+ "callee-save restore\n", INSN_UID (insn));
+ continue;
+ }
+
if (dump_file)
fprintf (dump_file, "DCE: Deleting insn %d\n", INSN_UID (insn));
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 167a1b58766..2304e14c761 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -877,13 +877,15 @@ diagnostic_report_diagnostic (diagnostic_context *context,
}
}
}
+
/* This tests if the user provided the appropriate -Werror=foo
option. */
if (diag_class == DK_UNSPECIFIED
- && context->classify_diagnostic[diagnostic->option_index] != DK_UNSPECIFIED)
- {
- diagnostic->kind = context->classify_diagnostic[diagnostic->option_index];
- }
+ && (context->classify_diagnostic[diagnostic->option_index]
+ != DK_UNSPECIFIED))
+ diagnostic->kind
+ = context->classify_diagnostic[diagnostic->option_index];
+
/* This allows for future extensions, like temporarily disabling
warnings for ranges of source code. */
if (diagnostic->kind == DK_IGNORED)
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index c11f1d572e9..0241cb5ecc6 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -399,7 +399,8 @@ Objective-C and Objective-C++ Dialects}.
-fschedule-insns -fschedule-insns2 -fsection-anchors @gol
-fselective-scheduling -fselective-scheduling2 @gol
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops @gol
--fsemantic-interposition -fshrink-wrap -fsignaling-nans @gol
+-fsemantic-interposition -fshrink-wrap -fshrink-wrap-separate @gol
+-fsignaling-nans @gol
-fsingle-precision-constant -fsplit-ivs-in-unroller @gol
-fsplit-paths @gol
-fsplit-wide-types -fssa-backprop -fssa-phiopt @gol
@@ -6663,6 +6664,7 @@ compilation time.
-fmove-loop-invariants @gol
-freorder-blocks @gol
-fshrink-wrap @gol
+-fshrink-wrap-separate @gol
-fsplit-wide-types @gol
-fssa-backprop @gol
-fssa-phiopt @gol
@@ -7573,6 +7575,13 @@ Emit function prologues only before parts of the function that need it,
rather than at the top of the function. This flag is enabled by default at
@option{-O} and higher.
+@item -fshrink-wrap-separate
+@opindex fshrink-wrap-separate
+Shrink-wrap separate parts of the prologue and epilogue separately, so that
+those parts are only executed when needed.
+This option is on by default, but has no effect unless @option{-fshrink-wrap}
+is also turned on and the target supports this.
+
@item -fcaller-saves
@opindex fcaller-saves
Enable allocation of values to registers that are clobbered by
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index d54f96c25de..a4a8e499fe1 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -2924,6 +2924,7 @@ This describes the stack layout and calling conventions.
* Function Entry::
* Profiling::
* Tail Calls::
+* Shrink-wrapping separate components::
* Stack Smashing Protection::
* Miscellaneous Register Hooks::
@end menu
@@ -4853,6 +4854,68 @@ This hook should add additional registers that are computed by the prologue to t
True if a function's return statements should be checked for matching the function's return type. This includes checking for falling off the end of a non-void function. Return false if no such check should be made.
@end deftypefn
+@node Shrink-wrapping separate components
+@subsection Shrink-wrapping separate components
+@cindex shrink-wrapping separate components
+
+The prologue may perform a variety of target dependent tasks such as
+saving callee-saved registers, saving the return address, aligning the
+stack, creating a stack frame, initializing the PIC register, setting
+up the static chain, etc.
+
+On some targets some of these tasks may be independent of others and
+thus may be shrink-wrapped separately. These independent tasks are
+referred to as components and are handled generically by the target
+independent parts of GCC.
+
+Using the following hooks those prologue or epilogue components can be
+shrink-wrapped separately, so that the initialization (and possibly
+teardown) those components do is not done as frequently on execution
+paths where this would unnecessary.
+
+What exactly those components are is up to the target code; the generic
+code treats them abstractly, as a bit in an @code{sbitmap}. These
+@code{sbitmap}s are allocated by the @code{shrink_wrap.get_separate_components}
+and @code{shrink_wrap.components_for_bb} hooks, and deallocated by the
+generic code.
+
+@deftypefn {Target Hook} sbitmap TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS (void)
+This hook should return an @code{sbitmap} with the bits set for those
+components that can be separately shrink-wrapped in the current function.
+Return @code{NULL} if the current function should not get any separate
+shrink-wrapping.
+Don't define this hook if it would always return @code{NULL}.
+If it is defined, the other hooks in this group have to be defined as well.
+@end deftypefn
+
+@deftypefn {Target Hook} sbitmap TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB (basic_block)
+This hook should return an @code{sbitmap} with the bits set for those
+components where either the prologue component has to be executed before
+the @code{basic_block}, or the epilogue component after it, or both.
+@end deftypefn
+
+@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS (sbitmap @var{components}, edge @var{e}, sbitmap @var{edge_components}, bool @var{is_prologue})
+This hook should clear the bits in the @var{components} bitmap for those
+components in @var{edge_components} that the target cannot handle on edge
+@var{e}, where @var{is_prologue} says if this is for a prologue or an
+epilogue instead.
+@end deftypefn
+
+@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS (sbitmap)
+Emit prologue insns for the components indicated by the parameter.
+@end deftypefn
+
+@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS (sbitmap)
+Emit epilogue insns for the components indicated by the parameter.
+@end deftypefn
+
+@deftypefn {Target Hook} void TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS (sbitmap)
+Mark the components in the parameter as handled, so that the
+@code{prologue} and @code{epilogue} named patterns know to ignore those
+components. The target code should not hang on to the @code{sbitmap}, it
+will be deleted after this call.
+@end deftypefn
+
@node Stack Smashing Protection
@subsection Stack smashing protection
@cindex stack smashing protection
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 00699e36070..265f1be7edf 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -2530,6 +2530,7 @@ This describes the stack layout and calling conventions.
* Function Entry::
* Profiling::
* Tail Calls::
+* Shrink-wrapping separate components::
* Stack Smashing Protection::
* Miscellaneous Register Hooks::
@end menu
@@ -3775,6 +3776,43 @@ the function prologue. Normally, the profiling code comes after.
@hook TARGET_WARN_FUNC_RETURN
+@node Shrink-wrapping separate components
+@subsection Shrink-wrapping separate components
+@cindex shrink-wrapping separate components
+
+The prologue may perform a variety of target dependent tasks such as
+saving callee-saved registers, saving the return address, aligning the
+stack, creating a stack frame, initializing the PIC register, setting
+up the static chain, etc.
+
+On some targets some of these tasks may be independent of others and
+thus may be shrink-wrapped separately. These independent tasks are
+referred to as components and are handled generically by the target
+independent parts of GCC.
+
+Using the following hooks those prologue or epilogue components can be
+shrink-wrapped separately, so that the initialization (and possibly
+teardown) those components do is not done as frequently on execution
+paths where this would unnecessary.
+
+What exactly those components are is up to the target code; the generic
+code treats them abstractly, as a bit in an @code{sbitmap}. These
+@code{sbitmap}s are allocated by the @code{shrink_wrap.get_separate_components}
+and @code{shrink_wrap.components_for_bb} hooks, and deallocated by the
+generic code.
+
+@hook TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
+
+@hook TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB
+
+@hook TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS
+
+@hook TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS
+
+@hook TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS
+
+@hook TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS
+
@node Stack Smashing Protection
@subsection Stack smashing protection
@cindex stack smashing protection
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 3f7833ff9cd..98deeefd337 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -2540,7 +2540,7 @@ const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
dwarf2out_init,
debug_nothing_charstar,
debug_nothing_charstar,
- debug_nothing_void,
+ dwarf2out_assembly_start,
debug_nothing_int_charstar,
debug_nothing_int_charstar,
debug_nothing_int_charstar,
@@ -11985,20 +11985,35 @@ int_loc_descriptor (HOST_WIDE_INT i)
/* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes,
while DW_OP_const4u is 5 bytes. */
return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
+
+ else if (DWARF2_ADDR_SIZE == 4 && i > 0x7fffffff
+ && size_of_int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i)
+ <= 4)
+ {
+ /* As i >= 2**31, the double cast above will yield a negative number.
+ Since wrapping is defined in DWARF expressions we can output big
+ positive integers as small negative ones, regardless of the size
+ of host wide ints.
+
+ Here, since the evaluator will handle 32-bit values and since i >=
+ 2**31, we know it's going to be interpreted as a negative literal:
+ store it this way if we can do better than 5 bytes this way. */
+ return int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i);
+ }
else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
op = DW_OP_const4u;
+
+ /* Past this point, i >= 0x100000000 and thus DW_OP_constu will take at
+ least 6 bytes: see if we can do better before falling back to it. */
else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8
&& clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT)
- /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes,
- while DW_OP_constu of constant >= 0x100000000 takes at least
- 6 bytes. */
+ /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes. */
return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8);
else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16
&& clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31)
>= HOST_BITS_PER_WIDE_INT)
/* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes,
- DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes,
- while DW_OP_constu takes in this case at least 6 bytes. */
+ DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes. */
return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16);
else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32
&& clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT
@@ -12223,6 +12238,10 @@ size_of_int_loc_descriptor (HOST_WIDE_INT i)
&& clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT)
return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT
- clz - 8);
+ else if (DWARF2_ADDR_SIZE == 4 && i > 0x7fffffff
+ && size_of_int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i)
+ <= 4)
+ return size_of_int_loc_descriptor ((HOST_WIDE_INT) (int32_t) i);
else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff)
return 5;
s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
@@ -23902,6 +23921,16 @@ dwarf2out_early_global_decl (tree decl)
if (!DECL_STRUCT_FUNCTION (decl))
goto early_decl_exit;
+ /* For nested functions, emit DIEs for the parents first so that all
+ nested DIEs are generated at the proper scope in the first
+ shot. */
+ tree context = decl_function_context (decl);
+ if (context != NULL)
+ {
+ current_function_decl = context;
+ dwarf2out_decl (context);
+ }
+
current_function_decl = decl;
}
dwarf2out_decl (decl);
diff --git a/gcc/emit-rtl.h b/gcc/emit-rtl.h
index 52c72b1eed2..0a242b1234d 100644
--- a/gcc/emit-rtl.h
+++ b/gcc/emit-rtl.h
@@ -254,6 +254,10 @@ struct GTY(()) rtl_data {
/* True if we performed shrink-wrapping for the current function. */
bool shrink_wrapped;
+ /* True if we performed shrink-wrapping for separate components for
+ the current function. */
+ bool shrink_wrapped_separate;
+
/* Nonzero if function being compiled doesn't modify the stack pointer
(ignoring the prologue and epilogue). This is only valid after
pass_stack_ptr_mod has run. */
diff --git a/gcc/function-tests.c b/gcc/function-tests.c
index 4152cd386d5..049a07f9a86 100644
--- a/gcc/function-tests.c
+++ b/gcc/function-tests.c
@@ -78,6 +78,7 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-ref.h"
#include "cgraph.h"
#include "selftest.h"
+#include "print-rtl.h"
#if CHECKING_P
@@ -643,6 +644,27 @@ test_expansion_to_rtl ()
/* ...etc; any further checks are likely to over-specify things
and run us into target dependencies. */
+
+ /* Verify that print_rtl_function is sane. */
+ named_temp_file tmp_out (".rtl");
+ FILE *outfile = fopen (tmp_out.get_filename (), "w");
+ print_rtx_function (outfile, fun);
+ fclose (outfile);
+
+ char *dump = read_file (SELFTEST_LOCATION, tmp_out.get_filename ());
+ ASSERT_STR_CONTAINS (dump, "(function \"test_fn\"\n");
+ ASSERT_STR_CONTAINS (dump, " (insn-chain\n");
+ ASSERT_STR_CONTAINS (dump, " (block 2\n");
+ ASSERT_STR_CONTAINS (dump, " (edge-from entry (flags \"FALLTHRU\"))\n");
+ ASSERT_STR_CONTAINS (dump, " (insn "); /* ...etc. */
+ ASSERT_STR_CONTAINS (dump, " (edge-to exit (flags \"FALLTHRU\"))\n");
+ ASSERT_STR_CONTAINS (dump, " ) ;; block 2\n");
+ ASSERT_STR_CONTAINS (dump, " ) ;; insn-chain\n");
+ ASSERT_STR_CONTAINS (dump, " (crtl\n");
+ ASSERT_STR_CONTAINS (dump, " ) ;; crtl\n");
+ ASSERT_STR_CONTAINS (dump, ") ;; function \"test_fn\"\n");
+
+ free (dump);
}
/* Run all of the selftests within this file. */
diff --git a/gcc/function.c b/gcc/function.c
index cdd2721cdf9..5dafb8ce35b 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5919,16 +5919,25 @@ thread_prologue_and_epilogue_insns (void)
edge entry_edge = single_succ_edge (ENTRY_BLOCK_PTR_FOR_FN (cfun));
edge orig_entry_edge = entry_edge;
- rtx_insn *split_prologue_seq = make_split_prologue_seq ();
rtx_insn *prologue_seq = make_prologue_seq ();
- rtx_insn *epilogue_seq = make_epilogue_seq ();
/* Try to perform a kind of shrink-wrapping, making sure the
prologue/epilogue is emitted only around those parts of the
function that require it. */
-
try_shrink_wrapping (&entry_edge, prologue_seq);
+ /* If the target can handle splitting the prologue/epilogue into separate
+ components, try to shrink-wrap these components separately. */
+ try_shrink_wrapping_separate (entry_edge->dest);
+
+ /* If that did anything for any component we now need the generate the
+ "main" prologue again. If that does not work for some target then
+ that target should not enable separate shrink-wrapping. */
+ if (crtl->shrink_wrapped_separate)
+ prologue_seq = make_prologue_seq ();
+
+ rtx_insn *split_prologue_seq = make_split_prologue_seq ();
+ rtx_insn *epilogue_seq = make_epilogue_seq ();
rtl_profile_for_bb (EXIT_BLOCK_PTR_FOR_FN (cfun));
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 3aaa09c0bef..1836927e289 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -171,6 +171,19 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl)
return !node || !node->global.inlined_to;
}
+/* Create a temporary for TYPE for a statement STMT. If the current function
+ is in SSA form, a SSA name is created. Otherwise a temporary register
+ is made. */
+
+static tree
+create_tmp_reg_or_ssa_name (tree type, gimple *stmt = NULL)
+{
+ if (gimple_in_ssa_p (cfun))
+ return make_ssa_name (type, stmt);
+ else
+ return create_tmp_reg (type);
+}
+
/* CVAL is value taken from DECL_INITIAL of variable. Try to transform it into
acceptable form for is_gimple_min_invariant.
FROM_DECL (if non-NULL) specify variable whose constructor contains CVAL. */
@@ -747,11 +760,9 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
if (is_gimple_reg_type (TREE_TYPE (srcmem)))
{
new_stmt = gimple_build_assign (NULL_TREE, srcmem);
- if (gimple_in_ssa_p (cfun))
- srcmem = make_ssa_name (TREE_TYPE (srcmem),
- new_stmt);
- else
- srcmem = create_tmp_reg (TREE_TYPE (srcmem));
+ srcmem
+ = create_tmp_reg_or_ssa_name (TREE_TYPE (srcmem),
+ new_stmt);
gimple_assign_set_lhs (new_stmt, srcmem);
gimple_set_vuse (new_stmt, gimple_vuse (stmt));
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
@@ -1038,10 +1049,8 @@ gimple_fold_builtin_memory_op (gimple_stmt_iterator *gsi,
if (! is_gimple_min_invariant (srcvar))
{
new_stmt = gimple_build_assign (NULL_TREE, srcvar);
- if (gimple_in_ssa_p (cfun))
- srcvar = make_ssa_name (TREE_TYPE (srcvar), new_stmt);
- else
- srcvar = create_tmp_reg (TREE_TYPE (srcvar));
+ srcvar = create_tmp_reg_or_ssa_name (TREE_TYPE (srcvar),
+ new_stmt);
gimple_assign_set_lhs (new_stmt, srcvar);
gimple_set_vuse (new_stmt, gimple_vuse (stmt));
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
@@ -1535,10 +1544,7 @@ gimple_fold_builtin_strchr (gimple_stmt_iterator *gsi, bool is_strrchr)
gimple_seq stmts = NULL;
gimple *new_stmt = gimple_build_call (strlen_fn, 1, str);
gimple_set_location (new_stmt, loc);
- if (gimple_in_ssa_p (cfun))
- len = make_ssa_name (size_type_node);
- else
- len = create_tmp_reg (size_type_node);
+ len = create_tmp_reg_or_ssa_name (size_type_node);
gimple_call_set_lhs (new_stmt, len);
gimple_seq_add_stmt_without_update (&stmts, new_stmt);
@@ -1611,10 +1617,7 @@ gimple_fold_builtin_strcat (gimple_stmt_iterator *gsi, tree dst, tree src)
gimple_seq stmts = NULL, stmts2;
gimple *repl = gimple_build_call (strlen_fn, 1, dst);
gimple_set_location (repl, loc);
- if (gimple_in_ssa_p (cfun))
- newdst = make_ssa_name (size_type_node);
- else
- newdst = create_tmp_reg (size_type_node);
+ newdst = create_tmp_reg_or_ssa_name (size_type_node);
gimple_call_set_lhs (repl, newdst);
gimple_seq_add_stmt_without_update (&stmts, repl);
@@ -6376,10 +6379,7 @@ gimple_build (gimple_seq *seq, location_t loc,
tree res = gimple_simplify (code, type, op0, seq, gimple_build_valueize);
if (!res)
{
- if (gimple_in_ssa_p (cfun))
- res = make_ssa_name (type);
- else
- res = create_tmp_reg (type);
+ res = create_tmp_reg_or_ssa_name (type);
gimple *stmt;
if (code == REALPART_EXPR
|| code == IMAGPART_EXPR
@@ -6405,10 +6405,7 @@ gimple_build (gimple_seq *seq, location_t loc,
tree res = gimple_simplify (code, type, op0, op1, seq, gimple_build_valueize);
if (!res)
{
- if (gimple_in_ssa_p (cfun))
- res = make_ssa_name (type);
- else
- res = create_tmp_reg (type);
+ res = create_tmp_reg_or_ssa_name (type);
gimple *stmt = gimple_build_assign (res, code, op0, op1);
gimple_set_location (stmt, loc);
gimple_seq_add_stmt_without_update (seq, stmt);
@@ -6429,10 +6426,7 @@ gimple_build (gimple_seq *seq, location_t loc,
seq, gimple_build_valueize);
if (!res)
{
- if (gimple_in_ssa_p (cfun))
- res = make_ssa_name (type);
- else
- res = create_tmp_reg (type);
+ res = create_tmp_reg_or_ssa_name (type);
gimple *stmt;
if (code == BIT_FIELD_REF)
stmt = gimple_build_assign (res, code,
@@ -6462,10 +6456,7 @@ gimple_build (gimple_seq *seq, location_t loc,
gimple *stmt = gimple_build_call (decl, 1, arg0);
if (!VOID_TYPE_P (type))
{
- if (gimple_in_ssa_p (cfun))
- res = make_ssa_name (type);
- else
- res = create_tmp_reg (type);
+ res = create_tmp_reg_or_ssa_name (type);
gimple_call_set_lhs (stmt, res);
}
gimple_set_location (stmt, loc);
@@ -6491,10 +6482,7 @@ gimple_build (gimple_seq *seq, location_t loc,
gimple *stmt = gimple_build_call (decl, 2, arg0, arg1);
if (!VOID_TYPE_P (type))
{
- if (gimple_in_ssa_p (cfun))
- res = make_ssa_name (type);
- else
- res = create_tmp_reg (type);
+ res = create_tmp_reg_or_ssa_name (type);
gimple_call_set_lhs (stmt, res);
}
gimple_set_location (stmt, loc);
@@ -6522,10 +6510,7 @@ gimple_build (gimple_seq *seq, location_t loc,
gimple *stmt = gimple_build_call (decl, 3, arg0, arg1, arg2);
if (!VOID_TYPE_P (type))
{
- if (gimple_in_ssa_p (cfun))
- res = make_ssa_name (type);
- else
- res = create_tmp_reg (type);
+ res = create_tmp_reg_or_ssa_name (type);
gimple_call_set_lhs (stmt, res);
}
gimple_set_location (stmt, loc);
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index d09cec1414e..b5ba744b3b5 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-03e53c928ebaa15a915eb1e1b07f193d83fc2852
+7e4543d050339e113e6278fd442d940c0f1a5670
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/gcc/lto-streamer.c b/gcc/lto-streamer.c
index bfde1fe7763..a44a91690dc 100644
--- a/gcc/lto-streamer.c
+++ b/gcc/lto-streamer.c
@@ -267,23 +267,23 @@ struct tree_hash_entry
struct tree_entry_hasher : nofree_ptr_hash <tree_hash_entry>
{
- static inline hashval_t hash (const value_type *);
- static inline bool equal (const value_type *, const compare_type *);
+ static inline hashval_t hash (const tree_hash_entry *);
+ static inline bool equal (const tree_hash_entry *, const tree_hash_entry *);
};
inline hashval_t
-tree_entry_hasher::hash (const value_type *e)
+tree_entry_hasher::hash (const tree_hash_entry *e)
{
return htab_hash_pointer (e->key);
}
inline bool
-tree_entry_hasher::equal (const value_type *e1, const compare_type *e2)
+tree_entry_hasher::equal (const tree_hash_entry *e1, const tree_hash_entry *e2)
{
return (e1->key == e2->key);
}
-static hash_table<tree_hash_entry> *tree_htab;
+static hash_table<tree_entry_hasher> *tree_htab;
#endif
/* Initialization common to the LTO reader and writer. */
@@ -299,7 +299,7 @@ lto_streamer_init (void)
streamer_check_handled_ts_structures ();
#ifdef LTO_STREAMER_DEBUG
- tree_htab = new hash_table<tree_hash_entry> (31);
+ tree_htab = new hash_table<tree_entry_hasher> (31);
#endif
}
diff --git a/gcc/match.pd b/gcc/match.pd
index 1d80613fdf8..894cc14e5f2 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -1783,10 +1783,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
(simplify
(mult (convert1? (exact_div @0 @1)) (convert2? @2))
/* We cannot use matching captures here, since in the case of
- constants we don't see the second conversion. Look through
- a sign-changing or widening conversions. */
- (if (operand_equal_p (@1, @2, 0)
- && element_precision (@0) <= element_precision (type))
+ constants we don't see the second conversion. */
+ (if (operand_equal_p (@1, @2, 0))
(convert @0)))
/* Canonicalization of binary operations. */
diff --git a/gcc/print-rtl-function.c b/gcc/print-rtl-function.c
index c4b99c03a37..4f9b4efdb2e 100644
--- a/gcc/print-rtl-function.c
+++ b/gcc/print-rtl-function.c
@@ -33,14 +33,106 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "emit-rtl.h"
+/* Print an "(edge-from)" or "(edge-to)" directive describing E
+ to OUTFILE. */
+
+static void
+print_edge (FILE *outfile, edge e, bool from)
+{
+ fprintf (outfile, " (%s ", from ? "edge-from" : "edge-to");
+ basic_block bb = from ? e->src : e->dest;
+ gcc_assert (bb);
+ switch (bb->index)
+ {
+ case ENTRY_BLOCK:
+ fprintf (outfile, "entry");
+ break;
+ case EXIT_BLOCK:
+ fprintf (outfile, "exit");
+ break;
+ default:
+ fprintf (outfile, "%i", bb->index);
+ break;
+ }
+
+ /* Express edge flags as a string with " | " separator.
+ e.g. (flags "FALLTHRU | DFS_BACK"). */
+ fprintf (outfile, " (flags \"");
+ bool seen_flag = false;
+#define DEF_EDGE_FLAG(NAME,IDX) \
+ do { \
+ if (e->flags & EDGE_##NAME) \
+ { \
+ if (seen_flag) \
+ fprintf (outfile, " | "); \
+ fprintf (outfile, "%s", (#NAME)); \
+ seen_flag = true; \
+ } \
+ } while (0);
+#include "cfg-flags.def"
+#undef DEF_EDGE_FLAG
+
+ fprintf (outfile, "\"))\n");
+}
+
+/* If BB is non-NULL, print the start of a "(block)" directive for it
+ to OUTFILE, otherwise do nothing. */
+
+static void
+begin_any_block (FILE *outfile, basic_block bb)
+{
+ if (!bb)
+ return;
+
+ edge e;
+ edge_iterator ei;
+
+ fprintf (outfile, " (block %i\n", bb->index);
+ FOR_EACH_EDGE (e, ei, bb->preds)
+ print_edge (outfile, e, true);
+}
+
+/* If BB is non-NULL, print the end of a "(block)" directive for it
+ to OUTFILE, otherwise do nothing. */
+
+static void
+end_any_block (FILE *outfile, basic_block bb)
+{
+ if (!bb)
+ return;
+
+ edge e;
+ edge_iterator ei;
+
+ FOR_EACH_EDGE (e, ei, bb->succs)
+ print_edge (outfile, e, false);
+ fprintf (outfile, " ) ;; block %i\n", bb->index);
+}
+
+/* Determine if INSN is of a kind that can have a basic block. */
+
+static bool
+can_have_basic_block_p (const rtx_insn *insn)
+{
+ rtx_code code = GET_CODE (insn);
+ if (code == BARRIER)
+ return false;
+ gcc_assert (GET_RTX_FORMAT (code)[2] == 'B');
+ return true;
+}
+
/* Write FN to OUTFILE in a form suitable for parsing, with indentation
- and comments to make the structure easy for a human to grok.
+ and comments to make the structure easy for a human to grok. Track
+ the basic blocks of insns in the chain, wrapping those that are within
+ blocks within "(block)" directives.
Example output:
- (function "times_two"
- (insn-chain
- (note 1 0 4 (nil) NOTE_INSN_DELETED)
+ (function "times_two"
+ (insn-chain
+ (note 1 0 4 (nil) NOTE_INSN_DELETED)
+ (block 2
+ (edge-from entry (flags "FALLTHRU"))
(note 4 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 2 4 3 2 (set (mem/c:SI (plus:DI (reg/f:DI 82 virtual-stack-vars)
(const_int -4 [0xfffffffffffffffc])) [1 i+0 S4 A32])
@@ -69,23 +161,15 @@ along with GCC; see the file COPYING3. If not see
(nil))
(insn 15 14 0 2 (use (reg/i:SI 0 ax)) t.c:4 -1
(nil))
- ) ;; insn-chain
- (cfg
- (bb 0
- (edge 0 2 (flags 0x1))
- ) ;; bb
- (bb 2
- (edge 2 1 (flags 0x1))
- ) ;; bb
- (bb 1
- ) ;; bb
- ) ;; cfg
- (crtl
- (return_rtx
- (reg/i:SI 0 ax)
- ) ;; return_rtx
- ) ;; crtl
- ) ;; function "times_two"
+ (edge-to exit (flags "FALLTHRU"))
+ ) ;; block 2
+ ) ;; insn-chain
+ (crtl
+ (return_rtx
+ (reg/i:SI 0 ax)
+ ) ;; return_rtx
+ ) ;; crtl
+ ) ;; function "times_two"
*/
DEBUG_FUNCTION void
@@ -99,27 +183,25 @@ print_rtx_function (FILE *outfile, function *fn)
/* The instruction chain. */
fprintf (outfile, " (insn-chain\n");
+ basic_block curr_bb = NULL;
for (rtx_insn *insn = get_insns (); insn; insn = NEXT_INSN (insn))
- print_rtl_single_with_indent (outfile, insn, 4);
+ {
+ basic_block insn_bb;
+ if (can_have_basic_block_p (insn))
+ insn_bb = BLOCK_FOR_INSN (insn);
+ else
+ insn_bb = NULL;
+ if (curr_bb != insn_bb)
+ {
+ end_any_block (outfile, curr_bb);
+ curr_bb = insn_bb;
+ begin_any_block (outfile, curr_bb);
+ }
+ print_rtl_single_with_indent (outfile, insn, curr_bb ? 6 : 4);
+ }
+ end_any_block (outfile, curr_bb);
fprintf (outfile, " ) ;; insn-chain\n");
- /* The CFG. */
- fprintf (outfile, " (cfg\n");
- {
- basic_block bb;
- FOR_ALL_BB_FN (bb, fn)
- {
- fprintf (outfile, " (bb %i\n", bb->index);
- edge e;
- edge_iterator ei;
- FOR_EACH_EDGE (e, ei, bb->succs)
- fprintf (outfile, " (edge %i %i (flags 0x%x))\n",
- e->src->index, e->dest->index, e->flags);
- fprintf (outfile, " ) ;; bb\n");
- }
- }
- fprintf (outfile, " ) ;; cfg\n");
-
/* Additional RTL state. */
fprintf (outfile, " (crtl\n");
fprintf (outfile, " (return_rtx \n");
diff --git a/gcc/regrename.c b/gcc/regrename.c
index 3509e8bab81..e0d2dd1f74c 100644
--- a/gcc/regrename.c
+++ b/gcc/regrename.c
@@ -1655,6 +1655,7 @@ build_def_use (basic_block bb)
(6) For any non-earlyclobber write we find in an operand, make
a new chain or mark the hard register as live.
(7) For any REG_UNUSED, close any chains we just opened.
+ (8) For any REG_CFA_RESTORE, kill any chain containing it.
We cannot deal with situations where we track a reg in one mode
and see a reference in another mode; these will cause the chain
@@ -1867,6 +1868,12 @@ build_def_use (basic_block bb)
scan_rtx (insn, &XEXP (note, 0), NO_REGS, terminate_dead,
OP_IN);
}
+
+ /* Step 8: Kill the chains involving register restores. Those
+ should restore _that_ register. */
+ for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
+ if (REG_NOTE_KIND (note) == REG_CFA_RESTORE)
+ scan_rtx (insn, &XEXP (note, 0), NO_REGS, mark_all_read, OP_IN);
}
else if (DEBUG_INSN_P (insn)
&& !VAR_LOC_UNKNOWN_P (INSN_VAR_LOCATION_LOC (insn)))
diff --git a/gcc/rtl.h b/gcc/rtl.h
index ce1131bd791..7de2cebaef9 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -317,12 +317,14 @@ struct GTY((desc("0"), tag("0"),
1 in a CONCAT is VAL_EXPR_IS_COPIED in var-tracking.c.
1 in a VALUE is SP_BASED_VALUE_P in cselib.c.
1 in a SUBREG generated by LRA for reload insns.
- 1 in a CALL for calls instrumented by Pointer Bounds Checker. */
+ 1 in a CALL for calls instrumented by Pointer Bounds Checker.
+ Dumped as "/j" in RTL dumps. */
unsigned int jump : 1;
/* In a CODE_LABEL, part of the two-bit alternate entry field.
1 in a MEM if it cannot trap.
1 in a CALL_INSN logically equivalent to
- ECF_LOOPING_CONST_OR_PURE and DECL_LOOPING_CONST_OR_PURE_P. */
+ ECF_LOOPING_CONST_OR_PURE and DECL_LOOPING_CONST_OR_PURE_P.
+ Dumped as "/c" in RTL dumps. */
unsigned int call : 1;
/* 1 in a REG, MEM, or CONCAT if the value is set at most once, anywhere.
1 in a SUBREG used for SUBREG_PROMOTED_UNSIGNED_P.
@@ -333,7 +335,8 @@ struct GTY((desc("0"), tag("0"),
1 in a JUMP_INSN of an annulling branch.
1 in a CONCAT is VAL_EXPR_IS_CLOBBERED in var-tracking.c.
1 in a preserved VALUE is PRESERVED_VALUE_P in cselib.c.
- 1 in a clobber temporarily created for LRA. */
+ 1 in a clobber temporarily created for LRA.
+ Dumped as "/u" in RTL dumps. */
unsigned int unchanging : 1;
/* 1 in a MEM or ASM_OPERANDS expression if the memory reference is volatile.
1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL, BARRIER, or NOTE
@@ -344,9 +347,10 @@ struct GTY((desc("0"), tag("0"),
1 in a LABEL_REF, REG_LABEL_TARGET or REG_LABEL_OPERAND note for a
non-local label.
In a SYMBOL_REF, this flag is used for machine-specific purposes.
- In a PREFETCH, this flag indicates that it should be considered a scheduling
- barrier.
- 1 in a CONCAT is VAL_NEEDS_RESOLUTION in var-tracking.c. */
+ In a PREFETCH, this flag indicates that it should be considered a
+ scheduling barrier.
+ 1 in a CONCAT is VAL_NEEDS_RESOLUTION in var-tracking.c.
+ Dumped as "/v" in RTL dumps. */
unsigned int volatil : 1;
/* 1 in a REG if the register is used only in exit code a loop.
1 in a SUBREG expression if was generated from a variable with a
@@ -360,7 +364,8 @@ struct GTY((desc("0"), tag("0"),
cleared before used.
The name of the field is historical. It used to be used in MEMs
- to record whether the MEM accessed part of a structure. */
+ to record whether the MEM accessed part of a structure.
+ Dumped as "/s" in RTL dumps. */
unsigned int in_struct : 1;
/* At the end of RTL generation, 1 if this rtx is used. This is used for
copying shared structure. See `unshare_all_rtl'.
@@ -377,13 +382,15 @@ struct GTY((desc("0"), tag("0"),
1 in a REG or MEM if it is a pointer.
1 in a SYMBOL_REF if it addresses something in the per-function
constant string pool.
- 1 in a VALUE is VALUE_CHANGED in var-tracking.c. */
+ 1 in a VALUE is VALUE_CHANGED in var-tracking.c.
+ Dumped as "/f" in RTL dumps. */
unsigned frame_related : 1;
/* 1 in a REG or PARALLEL that is the current function's return value.
1 in a SYMBOL_REF for a weak symbol.
1 in a CALL_INSN logically equivalent to ECF_PURE and DECL_PURE_P.
1 in a CONCAT is VAL_EXPR_HAS_REVERSE in var-tracking.c.
- 1 in a VALUE or DEBUG_EXPR is NO_LOC_P in var-tracking.c. */
+ 1 in a VALUE or DEBUG_EXPR is NO_LOC_P in var-tracking.c.
+ Dumped as "/i" in RTL dumps. */
unsigned return_val : 1;
union {
diff --git a/gcc/selftest.c b/gcc/selftest.c
index 69d9931fbe7..2a729be9b5e 100644
--- a/gcc/selftest.c
+++ b/gcc/selftest.c
@@ -151,6 +151,53 @@ temp_source_file::temp_source_file (const location &loc,
fclose (out);
}
+/* Read the contents of PATH into memory, returning a 0-terminated buffer
+ that must be freed by the caller.
+ Fail (and abort) if there are any problems, with LOC as the reported
+ location of the failure. */
+
+char *
+read_file (const location &loc, const char *path)
+{
+ FILE *f_in = fopen (path, "r");
+ if (!f_in)
+ fail_formatted (loc, "unable to open file: %s", path);
+
+ /* Read content, allocating FIXME. */
+ char *result = NULL;
+ size_t total_sz = 0;
+ size_t alloc_sz = 0;
+ char buf[4096];
+ size_t iter_sz_in;
+
+ while ( (iter_sz_in = fread (buf, 1, sizeof (buf), f_in)) )
+ {
+ gcc_assert (alloc_sz >= total_sz);
+ size_t old_total_sz = total_sz;
+ total_sz += iter_sz_in;
+ /* Allow 1 extra byte for 0-termination. */
+ if (alloc_sz < (total_sz + 1))
+ {
+ size_t new_alloc_sz = alloc_sz ? alloc_sz * 2: total_sz + 1;
+ result = (char *)xrealloc (result, new_alloc_sz);
+ alloc_sz = new_alloc_sz;
+ }
+ memcpy (result + old_total_sz, buf, iter_sz_in);
+ }
+
+ if (!feof (f_in))
+ fail_formatted (loc, "error reading from %s: %s", path,
+ xstrerror (errno));
+
+ fclose (f_in);
+
+ /* 0-terminate the buffer. */
+ gcc_assert (total_sz < alloc_sz);
+ result[total_sz] = '\0';
+
+ return result;
+}
+
/* Selftests for the selftest system itself. */
/* Sanity-check the ASSERT_ macros with various passing cases. */
@@ -181,6 +228,18 @@ test_named_temp_file ()
fclose (f);
}
+/* Verify read_file (and also temp_source_file). */
+
+static void
+test_read_file ()
+{
+ temp_source_file t (SELFTEST_LOCATION, "test1.s",
+ "\tjmp\t.L2\n");
+ char *buf = read_file (SELFTEST_LOCATION, t.get_filename ());
+ ASSERT_STREQ ("\tjmp\t.L2\n", buf);
+ free (buf);
+}
+
/* Run all of the selftests within this file. */
void
@@ -188,6 +247,7 @@ selftest_c_tests ()
{
test_assertions ();
test_named_temp_file ();
+ test_read_file ();
}
} // namespace selftest
diff --git a/gcc/selftest.h b/gcc/selftest.h
index 9b6fa952f6b..1a55e4b836e 100644
--- a/gcc/selftest.h
+++ b/gcc/selftest.h
@@ -146,6 +146,13 @@ class line_table_test
extern void
for_each_line_table_case (void (*testcase) (const line_table_case &));
+/* Read the contents of PATH into memory, returning a 0-terminated buffer
+ that must be freed by the caller.
+ Fail (and abort) if there are any problems, with LOC as the reported
+ location of the failure. */
+
+extern char *read_file (const location &loc, const char *path);
+
/* Declarations for specific families of tests (by source file), in
alphabetical order. */
extern void bitmap_c_tests ();
diff --git a/gcc/shrink-wrap.c b/gcc/shrink-wrap.c
index b85b1c3b349..7285775e5e0 100644
--- a/gcc/shrink-wrap.c
+++ b/gcc/shrink-wrap.c
@@ -30,10 +30,12 @@ along with GCC; see the file COPYING3. If not see
#include "df.h"
#include "tm_p.h"
#include "regs.h"
+#include "insn-config.h"
#include "emit-rtl.h"
#include "output.h"
#include "tree-pass.h"
#include "cfgrtl.h"
+#include "cfgbuild.h"
#include "params.h"
#include "bb-reorder.h"
#include "shrink-wrap.h"
@@ -1006,3 +1008,742 @@ try_shrink_wrapping (edge *entry_edge, rtx_insn *prologue_seq)
BITMAP_FREE (bb_with);
free_dominance_info (CDI_DOMINATORS);
}
+
+/* Separate shrink-wrapping
+
+ Instead of putting all of the prologue and epilogue in one spot, we
+ can put parts of it in places where those components are executed less
+ frequently. The following code does this, for prologue and epilogue
+ components that can be put in more than one location, and where those
+ components can be executed more than once (the epilogue component will
+ always be executed before the prologue component is executed a second
+ time).
+
+ What exactly is a component is target-dependent. The more usual
+ components are simple saves/restores to/from the frame of callee-saved
+ registers. This code treats components abstractly (as an sbitmap),
+ letting the target handle all details.
+
+ Prologue components are placed in such a way that for every component
+ the prologue is executed as infrequently as possible. We do this by
+ walking the dominator tree, comparing the cost of placing a prologue
+ component before a block to the sum of costs determined for all subtrees
+ of that block.
+
+ From this placement, we then determine for each component all blocks
+ where at least one of this block's dominators (including itself) will
+ get a prologue inserted. That then is how the components are placed.
+ We could place the epilogue components a bit smarter (we can save a
+ bit of code size sometimes); this is a possible future improvement.
+
+ Prologues and epilogues are preferably placed into a block, either at
+ the beginning or end of it, if it is needed for all predecessor resp.
+ successor edges; or placed on the edge otherwise.
+
+ If the placement of any prologue/epilogue leads to a situation we cannot
+ handle (for example, an abnormal edge would need to be split, or some
+ targets want to use some specific registers that may not be available
+ where we want to put them), separate shrink-wrapping for the components
+ in that prologue/epilogue is aborted. */
+
+
+/* Print the sbitmap COMPONENTS to the DUMP_FILE if not empty, with the
+ label LABEL. */
+static void
+dump_components (const char *label, sbitmap components)
+{
+ if (bitmap_empty_p (components))
+ return;
+
+ fprintf (dump_file, " [%s", label);
+
+ for (unsigned int j = 0; j < components->n_bits; j++)
+ if (bitmap_bit_p (components, j))
+ fprintf (dump_file, " %u", j);
+
+ fprintf (dump_file, "]");
+}
+
+/* The data we collect for each bb. */
+struct sw {
+ /* What components does this BB need? */
+ sbitmap needs_components;
+
+ /* What components does this BB have? This is the main decision this
+ pass makes. */
+ sbitmap has_components;
+
+ /* The components for which we placed code at the start of the BB (instead
+ of on all incoming edges). */
+ sbitmap head_components;
+
+ /* The components for which we placed code at the end of the BB (instead
+ of on all outgoing edges). */
+ sbitmap tail_components;
+
+ /* The frequency of executing the prologue for this BB, if a prologue is
+ placed on this BB. This is a pessimistic estimate (no prologue is
+ needed for edges from blocks that have the component under consideration
+ active already). */
+ gcov_type own_cost;
+
+ /* The frequency of executing the prologue for this BB and all BBs
+ dominated by it. */
+ gcov_type total_cost;
+};
+
+/* A helper function for accessing the pass-specific info. */
+static inline struct sw *
+SW (basic_block bb)
+{
+ gcc_assert (bb->aux);
+ return (struct sw *) bb->aux;
+}
+
+/* Create the pass-specific data structures for separately shrink-wrapping
+ with components COMPONENTS. */
+static void
+init_separate_shrink_wrap (sbitmap components)
+{
+ basic_block bb;
+ FOR_ALL_BB_FN (bb, cfun)
+ {
+ bb->aux = xcalloc (1, sizeof (struct sw));
+
+ SW (bb)->needs_components = targetm.shrink_wrap.components_for_bb (bb);
+
+ /* Mark all basic blocks without successor as needing all components.
+ This avoids problems in at least cfgcleanup, sel-sched, and
+ regrename (largely to do with all paths to such a block still
+ needing the same dwarf CFI info). */
+ if (EDGE_COUNT (bb->succs) == 0)
+ bitmap_copy (SW (bb)->needs_components, components);
+
+ if (dump_file)
+ {
+ fprintf (dump_file, "bb %d components:", bb->index);
+ dump_components ("has", SW (bb)->needs_components);
+ fprintf (dump_file, "\n");
+ }
+
+ SW (bb)->has_components = sbitmap_alloc (SBITMAP_SIZE (components));
+ SW (bb)->head_components = sbitmap_alloc (SBITMAP_SIZE (components));
+ SW (bb)->tail_components = sbitmap_alloc (SBITMAP_SIZE (components));
+ bitmap_clear (SW (bb)->has_components);
+ bitmap_clear (SW (bb)->head_components);
+ bitmap_clear (SW (bb)->tail_components);
+ }
+}
+
+/* Destroy the pass-specific data. */
+static void
+fini_separate_shrink_wrap (void)
+{
+ basic_block bb;
+ FOR_ALL_BB_FN (bb, cfun)
+ if (bb->aux)
+ {
+ sbitmap_free (SW (bb)->needs_components);
+ sbitmap_free (SW (bb)->has_components);
+ sbitmap_free (SW (bb)->head_components);
+ sbitmap_free (SW (bb)->tail_components);
+ free (bb->aux);
+ bb->aux = 0;
+ }
+}
+
+/* Place the prologue for component WHICH, in the basic blocks dominated
+ by HEAD. Do a DFS over the dominator tree, and set bit WHICH in the
+ HAS_COMPONENTS of a block if either the block has that bit set in
+ NEEDS_COMPONENTS, or it is cheaper to place the prologue here than in all
+ dominator subtrees separately. */
+static void
+place_prologue_for_one_component (unsigned int which, basic_block head)
+{
+ /* The block we are currently dealing with. */
+ basic_block bb = head;
+ /* Is this the first time we visit this block, i.e. have we just gone
+ down the tree. */
+ bool first_visit = true;
+
+ /* Walk the dominator tree, visit one block per iteration of this loop.
+ Each basic block is visited twice: once before visiting any children
+ of the block, and once after visiting all of them (leaf nodes are
+ visited only once). As an optimization, we do not visit subtrees
+ that can no longer influence the prologue placement. */
+ for (;;)
+ {
+ /* First visit of a block: set the (children) cost accumulator to zero;
+ if the block does not have the component itself, walk down. */
+ if (first_visit)
+ {
+ /* Initialize the cost. The cost is the block execution frequency
+ that does not come from backedges. Calculating this by simply
+ adding the cost of all edges that aren't backedges does not
+ work: this does not always add up to the block frequency at
+ all, and even if it does, rounding error makes for bad
+ decisions. */
+ SW (bb)->own_cost = bb->frequency;
+
+ edge e;
+ edge_iterator ei;
+ FOR_EACH_EDGE (e, ei, bb->preds)
+ if (dominated_by_p (CDI_DOMINATORS, e->src, bb))
+ {
+ if (SW (bb)->own_cost > EDGE_FREQUENCY (e))
+ SW (bb)->own_cost -= EDGE_FREQUENCY (e);
+ else
+ SW (bb)->own_cost = 0;
+ }
+
+ SW (bb)->total_cost = 0;
+
+ if (!bitmap_bit_p (SW (bb)->needs_components, which)
+ && first_dom_son (CDI_DOMINATORS, bb))
+ {
+ bb = first_dom_son (CDI_DOMINATORS, bb);
+ continue;
+ }
+ }
+
+ /* If this block does need the component itself, or it is cheaper to
+ put the prologue here than in all the descendants that need it,
+ mark it so. If this block's immediate post-dominator is dominated
+ by this block, and that needs the prologue, we can put it on this
+ block as well (earlier is better). */
+ if (bitmap_bit_p (SW (bb)->needs_components, which)
+ || SW (bb)->total_cost > SW (bb)->own_cost)
+ {
+ SW (bb)->total_cost = SW (bb)->own_cost;
+ bitmap_set_bit (SW (bb)->has_components, which);
+ }
+ else
+ {
+ basic_block kid = get_immediate_dominator (CDI_POST_DOMINATORS, bb);
+ if (dominated_by_p (CDI_DOMINATORS, kid, bb)
+ && bitmap_bit_p (SW (kid)->has_components, which))
+ {
+ SW (bb)->total_cost = SW (bb)->own_cost;
+ bitmap_set_bit (SW (bb)->has_components, which);
+ }
+ }
+
+ /* We are back where we started, so we are done now. */
+ if (bb == head)
+ return;
+
+ /* We now know the cost of the subtree rooted at the current block.
+ Accumulate this cost in the parent. */
+ basic_block parent = get_immediate_dominator (CDI_DOMINATORS, bb);
+ SW (parent)->total_cost += SW (bb)->total_cost;
+
+ /* Don't walk the tree down unless necessary. */
+ if (next_dom_son (CDI_DOMINATORS, bb)
+ && SW (parent)->total_cost <= SW (parent)->own_cost)
+ {
+ bb = next_dom_son (CDI_DOMINATORS, bb);
+ first_visit = true;
+ }
+ else
+ {
+ bb = parent;
+ first_visit = false;
+ }
+ }
+}
+
+/* Mark HAS_COMPONENTS for every block dominated by at least one block with
+ HAS_COMPONENTS set for the respective components, starting at HEAD. */
+static void
+spread_components (basic_block head)
+{
+ basic_block bb = head;
+ bool first_visit = true;
+ /* This keeps a tally of all components active. */
+ sbitmap components = SW (head)->has_components;
+
+ for (;;)
+ {
+ if (first_visit)
+ {
+ bitmap_ior (SW (bb)->has_components, SW (bb)->has_components,
+ components);
+
+ if (first_dom_son (CDI_DOMINATORS, bb))
+ {
+ components = SW (bb)->has_components;
+ bb = first_dom_son (CDI_DOMINATORS, bb);
+ continue;
+ }
+ }
+
+ components = SW (bb)->has_components;
+
+ if (next_dom_son (CDI_DOMINATORS, bb))
+ {
+ bb = next_dom_son (CDI_DOMINATORS, bb);
+ basic_block parent = get_immediate_dominator (CDI_DOMINATORS, bb);
+ components = SW (parent)->has_components;
+ first_visit = true;
+ }
+ else
+ {
+ if (bb == head)
+ return;
+ bb = get_immediate_dominator (CDI_DOMINATORS, bb);
+ first_visit = false;
+ }
+ }
+}
+
+/* If we cannot handle placing some component's prologues or epilogues where
+ we decided we should place them, unmark that component in COMPONENTS so
+ that it is not wrapped separately. */
+static void
+disqualify_problematic_components (sbitmap components)
+{
+ sbitmap pro = sbitmap_alloc (SBITMAP_SIZE (components));
+ sbitmap epi = sbitmap_alloc (SBITMAP_SIZE (components));
+
+ basic_block bb;
+ FOR_EACH_BB_FN (bb, cfun)
+ {
+ edge e;
+ edge_iterator ei;
+ FOR_EACH_EDGE (e, ei, bb->succs)
+ {
+ /* Find which components we want pro/epilogues for here. */
+ bitmap_and_compl (epi, SW (e->src)->has_components,
+ SW (e->dest)->has_components);
+ bitmap_and_compl (pro, SW (e->dest)->has_components,
+ SW (e->src)->has_components);
+
+ /* Ask the target what it thinks about things. */
+ if (!bitmap_empty_p (epi))
+ targetm.shrink_wrap.disqualify_components (components, e, epi,
+ false);
+ if (!bitmap_empty_p (pro))
+ targetm.shrink_wrap.disqualify_components (components, e, pro,
+ true);
+
+ /* If this edge doesn't need splitting, we're fine. */
+ if (single_pred_p (e->dest)
+ && e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
+ continue;
+
+ /* If the edge can be split, that is fine too. */
+ if ((e->flags & EDGE_ABNORMAL) == 0)
+ continue;
+
+ /* We also can handle sibcalls. */
+ if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
+ {
+ gcc_assert (e->flags & EDGE_SIBCALL);
+ continue;
+ }
+
+ /* Remove from consideration those components we would need
+ pro/epilogues for on edges where we cannot insert them. */
+ bitmap_and_compl (components, components, epi);
+ bitmap_and_compl (components, components, pro);
+
+ if (dump_file && !bitmap_subset_p (epi, components))
+ {
+ fprintf (dump_file, " BAD epi %d->%d", e->src->index,
+ e->dest->index);
+ if (e->flags & EDGE_EH)
+ fprintf (dump_file, " for EH");
+ dump_components ("epi", epi);
+ fprintf (dump_file, "\n");
+ }
+
+ if (dump_file && !bitmap_subset_p (pro, components))
+ {
+ fprintf (dump_file, " BAD pro %d->%d", e->src->index,
+ e->dest->index);
+ if (e->flags & EDGE_EH)
+ fprintf (dump_file, " for EH");
+ dump_components ("pro", pro);
+ fprintf (dump_file, "\n");
+ }
+ }
+ }
+
+ sbitmap_free (pro);
+ sbitmap_free (epi);
+}
+
+/* Place code for prologues and epilogues for COMPONENTS where we can put
+ that code at the start of basic blocks. */
+static void
+emit_common_heads_for_components (sbitmap components)
+{
+ sbitmap pro = sbitmap_alloc (SBITMAP_SIZE (components));
+ sbitmap epi = sbitmap_alloc (SBITMAP_SIZE (components));
+ sbitmap tmp = sbitmap_alloc (SBITMAP_SIZE (components));
+
+ basic_block bb;
+ FOR_EACH_BB_FN (bb, cfun)
+ {
+ /* Find which prologue resp. epilogue components are needed for all
+ predecessor edges to this block. */
+
+ /* First, select all possible components. */
+ bitmap_copy (epi, components);
+ bitmap_copy (pro, components);
+
+ edge e;
+ edge_iterator ei;
+ FOR_EACH_EDGE (e, ei, bb->preds)
+ {
+ if (e->flags & EDGE_ABNORMAL)
+ {
+ bitmap_clear (epi);
+ bitmap_clear (pro);
+ break;
+ }
+
+ /* Deselect those epilogue components that should not be inserted
+ for this edge. */
+ bitmap_and_compl (tmp, SW (e->src)->has_components,
+ SW (e->dest)->has_components);
+ bitmap_and (epi, epi, tmp);
+
+ /* Similar, for the prologue. */
+ bitmap_and_compl (tmp, SW (e->dest)->has_components,
+ SW (e->src)->has_components);
+ bitmap_and (pro, pro, tmp);
+ }
+
+ if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
+ fprintf (dump_file, " bb %d", bb->index);
+
+ if (dump_file && !bitmap_empty_p (epi))
+ dump_components ("epi", epi);
+ if (dump_file && !bitmap_empty_p (pro))
+ dump_components ("pro", pro);
+
+ if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
+ fprintf (dump_file, "\n");
+
+ /* Place code after the BB note. */
+ if (!bitmap_empty_p (pro))
+ {
+ start_sequence ();
+ targetm.shrink_wrap.emit_prologue_components (pro);
+ rtx_insn *seq = get_insns ();
+ end_sequence ();
+
+ emit_insn_after (seq, bb_note (bb));
+
+ bitmap_ior (SW (bb)->head_components, SW (bb)->head_components, pro);
+ }
+
+ if (!bitmap_empty_p (epi))
+ {
+ start_sequence ();
+ targetm.shrink_wrap.emit_epilogue_components (epi);
+ rtx_insn *seq = get_insns ();
+ end_sequence ();
+
+ emit_insn_after (seq, bb_note (bb));
+
+ bitmap_ior (SW (bb)->head_components, SW (bb)->head_components, epi);
+ }
+ }
+
+ sbitmap_free (pro);
+ sbitmap_free (epi);
+ sbitmap_free (tmp);
+}
+
+/* Place code for prologues and epilogues for COMPONENTS where we can put
+ that code at the end of basic blocks. */
+static void
+emit_common_tails_for_components (sbitmap components)
+{
+ sbitmap pro = sbitmap_alloc (SBITMAP_SIZE (components));
+ sbitmap epi = sbitmap_alloc (SBITMAP_SIZE (components));
+ sbitmap tmp = sbitmap_alloc (SBITMAP_SIZE (components));
+
+ basic_block bb;
+ FOR_EACH_BB_FN (bb, cfun)
+ {
+ /* Find which prologue resp. epilogue components are needed for all
+ successor edges from this block. */
+ if (EDGE_COUNT (bb->succs) == 0)
+ continue;
+
+ /* First, select all possible components. */
+ bitmap_copy (epi, components);
+ bitmap_copy (pro, components);
+
+ edge e;
+ edge_iterator ei;
+ FOR_EACH_EDGE (e, ei, bb->succs)
+ {
+ if (e->flags & EDGE_ABNORMAL)
+ {
+ bitmap_clear (epi);
+ bitmap_clear (pro);
+ break;
+ }
+
+ /* Deselect those epilogue components that should not be inserted
+ for this edge, and also those that are already put at the head
+ of the successor block. */
+ bitmap_and_compl (tmp, SW (e->src)->has_components,
+ SW (e->dest)->has_components);
+ bitmap_and_compl (tmp, tmp, SW (e->dest)->head_components);
+ bitmap_and (epi, epi, tmp);
+
+ /* Similarly, for the prologue. */
+ bitmap_and_compl (tmp, SW (e->dest)->has_components,
+ SW (e->src)->has_components);
+ bitmap_and_compl (tmp, tmp, SW (e->dest)->head_components);
+ bitmap_and (pro, pro, tmp);
+ }
+
+ /* If the last insn of this block is a control flow insn we cannot
+ put anything after it. We can put our code before it instead,
+ but only if that jump insn is a simple jump. */
+ rtx_insn *last_insn = BB_END (bb);
+ if (control_flow_insn_p (last_insn) && !simplejump_p (last_insn))
+ {
+ bitmap_clear (epi);
+ bitmap_clear (pro);
+ }
+
+ if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
+ fprintf (dump_file, " bb %d", bb->index);
+
+ if (dump_file && !bitmap_empty_p (epi))
+ dump_components ("epi", epi);
+ if (dump_file && !bitmap_empty_p (pro))
+ dump_components ("pro", pro);
+
+ if (dump_file && !(bitmap_empty_p (epi) && bitmap_empty_p (pro)))
+ fprintf (dump_file, "\n");
+
+ /* Put the code at the end of the BB, but before any final jump. */
+ if (!bitmap_empty_p (epi))
+ {
+ start_sequence ();
+ targetm.shrink_wrap.emit_epilogue_components (epi);
+ rtx_insn *seq = get_insns ();
+ end_sequence ();
+
+ if (control_flow_insn_p (last_insn))
+ emit_insn_before (seq, last_insn);
+ else
+ emit_insn_after (seq, last_insn);
+
+ bitmap_ior (SW (bb)->tail_components, SW (bb)->tail_components, epi);
+ }
+
+ if (!bitmap_empty_p (pro))
+ {
+ start_sequence ();
+ targetm.shrink_wrap.emit_prologue_components (pro);
+ rtx_insn *seq = get_insns ();
+ end_sequence ();
+
+ if (control_flow_insn_p (last_insn))
+ emit_insn_before (seq, last_insn);
+ else
+ emit_insn_after (seq, last_insn);
+
+ bitmap_ior (SW (bb)->tail_components, SW (bb)->tail_components, pro);
+ }
+ }
+
+ sbitmap_free (pro);
+ sbitmap_free (epi);
+ sbitmap_free (tmp);
+}
+
+/* Place prologues and epilogues for COMPONENTS on edges, if we haven't already
+ placed them inside blocks directly. */
+static void
+insert_prologue_epilogue_for_components (sbitmap components)
+{
+ sbitmap pro = sbitmap_alloc (SBITMAP_SIZE (components));
+ sbitmap epi = sbitmap_alloc (SBITMAP_SIZE (components));
+
+ basic_block bb;
+ FOR_EACH_BB_FN (bb, cfun)
+ {
+ if (!bb->aux)
+ continue;
+
+ edge e;
+ edge_iterator ei;
+ FOR_EACH_EDGE (e, ei, bb->succs)
+ {
+ /* Find which pro/epilogue components are needed on this edge. */
+ bitmap_and_compl (epi, SW (e->src)->has_components,
+ SW (e->dest)->has_components);
+ bitmap_and_compl (pro, SW (e->dest)->has_components,
+ SW (e->src)->has_components);
+ bitmap_and (epi, epi, components);
+ bitmap_and (pro, pro, components);
+
+ /* Deselect those we already have put at the head or tail of the
+ edge's dest resp. src. */
+ bitmap_and_compl (epi, epi, SW (e->dest)->head_components);
+ bitmap_and_compl (pro, pro, SW (e->dest)->head_components);
+ bitmap_and_compl (epi, epi, SW (e->src)->tail_components);
+ bitmap_and_compl (pro, pro, SW (e->src)->tail_components);
+
+ if (!bitmap_empty_p (epi) || !bitmap_empty_p (pro))
+ {
+ if (dump_file)
+ {
+ fprintf (dump_file, " %d->%d", e->src->index,
+ e->dest->index);
+ dump_components ("epi", epi);
+ dump_components ("pro", pro);
+ fprintf (dump_file, "\n");
+ }
+
+ /* Put the epilogue components in place. */
+ start_sequence ();
+ targetm.shrink_wrap.emit_epilogue_components (epi);
+ rtx_insn *seq = get_insns ();
+ end_sequence ();
+
+ if (e->flags & EDGE_SIBCALL)
+ {
+ gcc_assert (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun));
+
+ rtx_insn *insn = BB_END (e->src);
+ gcc_assert (CALL_P (insn) && SIBLING_CALL_P (insn));
+ emit_insn_before (seq, insn);
+ }
+ else if (e->dest == EXIT_BLOCK_PTR_FOR_FN (cfun))
+ {
+ gcc_assert (e->flags & EDGE_FALLTHRU);
+ basic_block new_bb = split_edge (e);
+ emit_insn_after (seq, BB_END (new_bb));
+ }
+ else
+ insert_insn_on_edge (seq, e);
+
+ /* Put the prologue components in place. */
+ start_sequence ();
+ targetm.shrink_wrap.emit_prologue_components (pro);
+ seq = get_insns ();
+ end_sequence ();
+
+ insert_insn_on_edge (seq, e);
+ }
+ }
+ }
+
+ sbitmap_free (pro);
+ sbitmap_free (epi);
+
+ commit_edge_insertions ();
+}
+
+/* The main entry point to this subpass. FIRST_BB is where the prologue
+ would be normally put. */
+void
+try_shrink_wrapping_separate (basic_block first_bb)
+{
+ if (HAVE_cc0)
+ return;
+
+ if (!(SHRINK_WRAPPING_ENABLED
+ && flag_shrink_wrap_separate
+ && optimize_function_for_speed_p (cfun)
+ && targetm.shrink_wrap.get_separate_components))
+ return;
+
+ /* We don't handle "strange" functions. */
+ if (cfun->calls_alloca
+ || cfun->calls_setjmp
+ || cfun->can_throw_non_call_exceptions
+ || crtl->calls_eh_return
+ || crtl->has_nonlocal_goto
+ || crtl->saves_all_registers)
+ return;
+
+ /* Ask the target what components there are. If it returns NULL, don't
+ do anything. */
+ sbitmap components = targetm.shrink_wrap.get_separate_components ();
+ if (!components)
+ return;
+
+ /* We need LIVE info. */
+ df_live_add_problem ();
+ df_live_set_all_dirty ();
+ df_analyze ();
+
+ calculate_dominance_info (CDI_DOMINATORS);
+ calculate_dominance_info (CDI_POST_DOMINATORS);
+
+ init_separate_shrink_wrap (components);
+
+ sbitmap_iterator sbi;
+ unsigned int j;
+ EXECUTE_IF_SET_IN_BITMAP (components, 0, j, sbi)
+ place_prologue_for_one_component (j, first_bb);
+
+ spread_components (first_bb);
+
+ disqualify_problematic_components (components);
+
+ /* Don't separately shrink-wrap anything where the "main" prologue will
+ go; the target code can often optimize things if it is presented with
+ all components together (say, if it generates store-multiple insns). */
+ bitmap_and_compl (components, components, SW (first_bb)->has_components);
+
+ if (bitmap_empty_p (components))
+ {
+ if (dump_file)
+ fprintf (dump_file, "Not wrapping anything separately.\n");
+ }
+ else
+ {
+ if (dump_file)
+ {
+ fprintf (dump_file, "The components we wrap separately are");
+ dump_components ("sep", components);
+ fprintf (dump_file, "\n");
+
+ fprintf (dump_file, "... Inserting common heads...\n");
+ }
+
+ emit_common_heads_for_components (components);
+
+ if (dump_file)
+ fprintf (dump_file, "... Inserting common tails...\n");
+
+ emit_common_tails_for_components (components);
+
+ if (dump_file)
+ fprintf (dump_file, "... Inserting the more difficult ones...\n");
+
+ insert_prologue_epilogue_for_components (components);
+
+ if (dump_file)
+ fprintf (dump_file, "... Done.\n");
+
+ targetm.shrink_wrap.set_handled_components (components);
+
+ crtl->shrink_wrapped_separate = true;
+ }
+
+ fini_separate_shrink_wrap ();
+
+ sbitmap_free (components);
+ free_dominance_info (CDI_DOMINATORS);
+ free_dominance_info (CDI_POST_DOMINATORS);
+
+ if (crtl->shrink_wrapped_separate)
+ {
+ df_live_set_all_dirty ();
+ df_analyze ();
+ }
+}
diff --git a/gcc/shrink-wrap.h b/gcc/shrink-wrap.h
index e06ab37952f..05fcb41277a 100644
--- a/gcc/shrink-wrap.h
+++ b/gcc/shrink-wrap.h
@@ -25,6 +25,7 @@ along with GCC; see the file COPYING3. If not see
/* In shrink-wrap.c. */
extern bool requires_stack_frame_p (rtx_insn *, HARD_REG_SET, HARD_REG_SET);
extern void try_shrink_wrapping (edge *entry_edge, rtx_insn *prologue_seq);
+extern void try_shrink_wrapping_separate (basic_block first_bb);
#define SHRINK_WRAPPING_ENABLED \
(flag_shrink_wrap && targetm.have_simple_return ())
diff --git a/gcc/target.def b/gcc/target.def
index 83373a554ec..b6968f76990 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -5814,6 +5814,63 @@ DEFHOOK
bool, (tree),
hook_bool_tree_true)
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_SHRINK_WRAP_"
+HOOK_VECTOR (TARGET_SHRINK_WRAP_HOOKS, shrink_wrap)
+
+DEFHOOK
+(get_separate_components,
+ "This hook should return an @code{sbitmap} with the bits set for those\n\
+components that can be separately shrink-wrapped in the current function.\n\
+Return @code{NULL} if the current function should not get any separate\n\
+shrink-wrapping.\n\
+Don't define this hook if it would always return @code{NULL}.\n\
+If it is defined, the other hooks in this group have to be defined as well.",
+ sbitmap, (void),
+ NULL)
+
+DEFHOOK
+(components_for_bb,
+ "This hook should return an @code{sbitmap} with the bits set for those\n\
+components where either the prologue component has to be executed before\n\
+the @code{basic_block}, or the epilogue component after it, or both.",
+ sbitmap, (basic_block),
+ NULL)
+
+DEFHOOK
+(disqualify_components,
+ "This hook should clear the bits in the @var{components} bitmap for those\n\
+components in @var{edge_components} that the target cannot handle on edge\n\
+@var{e}, where @var{is_prologue} says if this is for a prologue or an\n\
+epilogue instead.",
+ void, (sbitmap components, edge e, sbitmap edge_components, bool is_prologue),
+ NULL)
+
+DEFHOOK
+(emit_prologue_components,
+ "Emit prologue insns for the components indicated by the parameter.",
+ void, (sbitmap),
+ NULL)
+
+DEFHOOK
+(emit_epilogue_components,
+ "Emit epilogue insns for the components indicated by the parameter.",
+ void, (sbitmap),
+ NULL)
+
+DEFHOOK
+(set_handled_components,
+ "Mark the components in the parameter as handled, so that the\n\
+@code{prologue} and @code{epilogue} named patterns know to ignore those\n\
+components. The target code should not hang on to the @code{sbitmap}, it\n\
+will be deleted after this call.",
+ void, (sbitmap),
+ NULL)
+
+HOOK_VECTOR_END (shrink_wrap)
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
/* Determine the type of unwind info to emit for debugging. */
DEFHOOK
(debug_unwind_info,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4423684948a..5eb693a652f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,86 @@
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * gcc.target/powerpc/shrink-wrap-separate-0.c: New testcase.
+ * gcc.target/powerpc/shrink-wrap-separate-1.c: New testcase.
+ * gcc.target/powerpc/shrink-wrap-separate-2.c: New testcase.
+
+2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
+
+ * gcc.target/powerpc/warn-1.c: Change line number in dg-warning.
+ * gcc.target/powerpc/warn-2.c: Ditto.
+
+2016-10-12 Robert Suchanek <robert.suchanek@imgtec.com>
+
+ * gcc.dg/vect/slp-26.c: Check if vectorized for MIPS MSA.
+ * gcc.dg/vect/tree-vect.h (check_vect): Check for MIPS SIMD support.
+ * gcc.target/mips/mips.exp: Add support for -mmsa. Imply -mno-mips16
+ for -mmsa.
+ * gcc.target/mips/msa.c: New test.
+ * gcc.target/mips/msa-builtins.c: Likewise.
+ * lib/target-supports.exp (check_mips_msa_hw_available): New.
+ (check_effective_target_mips_msa_runtime): Likewise.
+ (check_effective_target_mips_msa): Likewise.
+ (add_options_for_mips_msa): Likewise.
+ (check_effective_target_vect_int): Return TRUE for MIPS MSA.
+ (check_effective_target_vect_intfloat_cvt): Likewise.
+ (check_effective_target_vect_uintfloat_cvt): Likewise.
+ (check_effective_target_vect_floatint_cvt): Likewise.
+ (check_effective_target_vect_floatuint_cvt): Likewise.
+ (check_effective_target_vect_shift): Likewise.
+ (check_effective_target_vect_shift_char): Likewise.
+ (check_effective_target_vect_long): Likewise.
+ (check_effective_target_vect_float): Likewise.
+ (check_effective_target_vect_double): Likewise.
+ (check_effective_target_vect_long_long): Likewise.
+ (check_effective_target_vect_perm): Likewise.
+ (check_effective_target_vect_perm_byte): Likewise.
+ (check_effective_target_vect_perm_short): Likewise.
+ (check_effective_target_vect_sdot_qi): Likewise.
+ (check_effective_target_vect_udot_qi): Likewise.
+ (check_effective_target_vect_sdot_hi): Likewise.
+ (check_effective_target_vect_udot_hi): Likewise.
+ (check_effective_target_vect_pack_trunc): Likewise.
+ (check_effective_target_vect_unpack): Likewise.
+ (check_effective_target_vect_hw_misalign): Likewise.
+ (check_effective_target_vect_condition): Likewise.
+ (check_effective_target_vect_cond_mixed): Likewise.
+ (check_effective_target_vect_char_mult): Likewise.
+ (check_effective_target_vect_short_mult): Likewise.
+ (check_effective_target_vect_int_mult): Likewise.
+ (check_effective_target_vect_extract_even_odd): Likewise.
+ (check_effective_target_vect_interleave): Likewise.
+ (check_vect_support_and_set_flags): Check if the target supports MSA
+ and append to the list of EFFECTIVE_TARGETS.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ PR debug/77947
+ * g++.dg/torture/pr77947.C: New testcase.
+
+2016-10-12 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * gnat.dg/debug8.adb: New testcase.
+
+2016-10-12 Pierre-Marie de Rodat <derodat@adacore.com>
+
+ * gnat.dg/debug9.adb: New testcase.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ * gcc.dg/tree-ssa/vrp35.c: Adjust.
+ * gcc.dg/tree-ssa/vrp36.c: Likewise.
+ * gcc.dg/tree-ssa/vrp46.c: Likewise.
+
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77920
+ * gcc.dg/torture/pr77920.c: New testcase.
+
2016-10-12 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/77929
+ * gcc.c-torture/compile/pr77929.c: New test.
+
* c-c++-common/Wimplicit-fallthrough-25.c: New test.
* c-c++-common/Wimplicit-fallthrough-26.c: New test.
* c-c++-common/Wimplicit-fallthrough-27.c: New test.
diff --git a/gcc/testsuite/g++.dg/torture/pr77947.C b/gcc/testsuite/g++.dg/torture/pr77947.C
new file mode 100644
index 00000000000..3c8a24a16c6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr77947.C
@@ -0,0 +1,29 @@
+// { dg-do compile }
+// { dg-additional-options "-g" }
+
+class A
+{
+public:
+ virtual bool m_fn1 () const = 0;
+};
+class B
+{
+ const A *m_fn2 () const;
+};
+inline const A *
+B::m_fn2 () const
+{
+ class C : A
+ {
+ bool
+ m_fn1 () const
+ {
+ }
+ C () {}
+ };
+}
+void
+fn1 (A &p1)
+{
+ p1.m_fn1 ();
+}
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr77929.c b/gcc/testsuite/gcc.c-torture/compile/pr77929.c
new file mode 100644
index 00000000000..bbcb04bd4f4
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr77929.c
@@ -0,0 +1,13 @@
+/* PR tree-optimization/77929 */
+
+void bar (void);
+
+void
+foo (int x, unsigned short int y)
+{
+ int a = 0;
+ int b = (y != 0) ? (x < y) : (a < 0);
+
+ if (x >= 0 & b)
+ bar ();
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77920.c b/gcc/testsuite/gcc.dg/torture/pr77920.c
new file mode 100644
index 00000000000..66ad5fc1248
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77920.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+int a, b;
+void fn1()
+{
+ int c;
+ for (; b < 0;)
+ {
+ {
+ int d = 56, e = (b >> 3) - (d >> 3) > 0 ? (b >> 3) - (d >> 3)
+ : -((b >> 3) - (d >> 3));
+ c = 1 >= e;
+ }
+ if (c)
+ a = 0;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp35.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp35.c
index 1cf310bbffd..20112eafd53 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp35.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp35.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
int test1(int i, int k)
{
@@ -11,4 +11,4 @@ int test1(int i, int k)
return 1;
}
-/* { dg-final { scan-tree-dump "Folding predicate j_.* == 10 to 0" "vrp1" } } */
+/* { dg-final { scan-tree-dump "Removing dead stmt \[^\r\n\]* = j_.* == 10" "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp36.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp36.c
index 873a7c9de91..3933254474a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp36.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp36.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
int foo(int i)
{
@@ -8,4 +8,4 @@ int foo(int i)
return 1;
}
-/* { dg-final { scan-tree-dump "Folding predicate i_.* == 1 to 0" "vrp1" } } */
+/* { dg-final { scan-tree-dump "Removing dead stmt \[^\r\n\]* = i_.* == 1" "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c
index d3c9ed144f3..ebdc2e3eedb 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp46.c
@@ -27,6 +27,6 @@ func_18 ( int t )
}
}
-/* There should be a single if left. */
+/* There should be no if left. */
-/* { dg-final { scan-tree-dump-times "if" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "if" 0 "vrp1" } } */
diff --git a/gcc/testsuite/gcc.dg/vect/slp-26.c b/gcc/testsuite/gcc.dg/vect/slp-26.c
index 8b224ff5793..01f4e4ee32e 100644
--- a/gcc/testsuite/gcc.dg/vect/slp-26.c
+++ b/gcc/testsuite/gcc.dg/vect/slp-26.c
@@ -46,6 +46,7 @@ int main (void)
return 0;
}
-/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" } } */
-
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! mips_msa } } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { mips_msa } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 0 "vect" { target { ! mips_msa } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "vect" { target { mips_msa } } } } */
diff --git a/gcc/testsuite/gcc.dg/vect/tree-vect.h b/gcc/testsuite/gcc.dg/vect/tree-vect.h
index 3a8b8d33d2e..ab40e7f3c2e 100644
--- a/gcc/testsuite/gcc.dg/vect/tree-vect.h
+++ b/gcc/testsuite/gcc.dg/vect/tree-vect.h
@@ -70,6 +70,8 @@ check_vect (void)
if (a != 1)
exit (0);
}
+#elif defined(__mips_msa)
+ asm volatile ("or.v $w0,$w0,$w0");
#endif
signal (SIGILL, SIG_DFL);
}
diff --git a/gcc/testsuite/gcc.target/mips/mips.exp b/gcc/testsuite/gcc.target/mips/mips.exp
index 32581058ff1..7c241400b73 100644
--- a/gcc/testsuite/gcc.target/mips/mips.exp
+++ b/gcc/testsuite/gcc.target/mips/mips.exp
@@ -290,6 +290,7 @@ foreach option {
relax-pic-calls
mcount-ra-address
odd-spreg
+ msa
} {
lappend mips_option_groups $option "-m(no-|)$option"
}
@@ -820,6 +821,12 @@ proc mips-dg-init {} {
"-mno-synci",
#endif
+ #ifdef __mips_msa
+ "-mmsa"
+ #else
+ "-mno-msa"
+ #endif
+
0
};
}]
@@ -1368,6 +1375,7 @@ proc mips-dg-options { args } {
mips_option_dependency options "-mfpxx" "-mno-paired-single"
mips_option_dependency options "-msoft-float" "-mno-paired-single"
mips_option_dependency options "-mno-paired-single" "-mno-mips3d"
+ mips_option_dependency options "-mmsa" "-mno-mips16"
# If the test requires an unsupported option, change run tests
# to link tests.
diff --git a/gcc/testsuite/gcc.target/mips/msa-builtins.c b/gcc/testsuite/gcc.target/mips/msa-builtins.c
new file mode 100644
index 00000000000..6db3d667309
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/msa-builtins.c
@@ -0,0 +1,1085 @@
+/* Test builtins for MIPS MSA ASE instructions */
+/* { dg-do compile } */
+/* { dg-options "-mfp64 -mhard-float -mmsa" } */
+
+/* { dg-final { scan-assembler-times "msa_addv_b:.*addv\\.b.*msa_addv_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addv_h:.*addv\\.h.*msa_addv_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addv_w:.*addv\\.w.*msa_addv_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addv_d:.*addv\\.d.*msa_addv_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addvi_b:.*addvi\\.b.*msa_addvi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addvi_h:.*addvi\\.h.*msa_addvi_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addvi_w:.*addvi\\.w.*msa_addvi_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_addvi_d:.*addvi\\.d.*msa_addvi_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_add_a_b:.*add_a\\.b.*msa_add_a_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_add_a_h:.*add_a\\.h.*msa_add_a_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_add_a_w:.*add_a\\.w.*msa_add_a_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_add_a_d:.*add_a\\.d.*msa_add_a_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_a_b:.*adds_a\\.b.*msa_adds_a_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_a_h:.*adds_a\\.h.*msa_adds_a_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_a_w:.*adds_a\\.w.*msa_adds_a_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_a_d:.*adds_a\\.d.*msa_adds_a_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_s_b:.*adds_s\\.b.*msa_adds_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_s_h:.*adds_s\\.h.*msa_adds_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_s_w:.*adds_s\\.w.*msa_adds_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_s_d:.*adds_s\\.d.*msa_adds_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_u_b:.*adds_u\\.b.*msa_adds_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_u_h:.*adds_u\\.h.*msa_adds_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_u_w:.*adds_u\\.w.*msa_adds_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_adds_u_d:.*adds_u\\.d.*msa_adds_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hadd_s_h:.*hadd_s\\.h.*msa_hadd_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hadd_s_w:.*hadd_s\\.w.*msa_hadd_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hadd_s_d:.*hadd_s\\.d.*msa_hadd_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hadd_u_h:.*hadd_u\\.h.*msa_hadd_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hadd_u_w:.*hadd_u\\.w.*msa_hadd_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hadd_u_d:.*hadd_u\\.d.*msa_hadd_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_s_b:.*asub_s\\.b.*msa_asub_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_s_h:.*asub_s\\.h.*msa_asub_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_s_w:.*asub_s\\.w.*msa_asub_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_s_d:.*asub_s\\.d.*msa_asub_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_u_b:.*asub_u\\.b.*msa_asub_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_u_h:.*asub_u\\.h.*msa_asub_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_u_w:.*asub_u\\.w.*msa_asub_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_asub_u_d:.*asub_u\\.d.*msa_asub_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_s_b:.*ave_s\\.b.*msa_ave_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_s_h:.*ave_s\\.h.*msa_ave_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_s_w:.*ave_s\\.w.*msa_ave_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_s_d:.*ave_s\\.d.*msa_ave_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_u_b:.*ave_u\\.b.*msa_ave_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_u_h:.*ave_u\\.h.*msa_ave_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_u_w:.*ave_u\\.w.*msa_ave_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ave_u_d:.*ave_u\\.d.*msa_ave_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_s_b:.*aver_s\\.b.*msa_aver_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_s_h:.*aver_s\\.h.*msa_aver_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_s_w:.*aver_s\\.w.*msa_aver_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_s_d:.*aver_s\\.d.*msa_aver_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_u_b:.*aver_u\\.b.*msa_aver_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_u_h:.*aver_u\\.h.*msa_aver_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_u_w:.*aver_u\\.w.*msa_aver_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_aver_u_d:.*aver_u\\.d.*msa_aver_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dotp_s_h:.*dotp_s\\.h.*msa_dotp_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dotp_s_w:.*dotp_s\\.w.*msa_dotp_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dotp_s_d:.*dotp_s\\.d.*msa_dotp_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dotp_u_h:.*dotp_u\\.h.*msa_dotp_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dotp_u_w:.*dotp_u\\.w.*msa_dotp_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dotp_u_d:.*dotp_u\\.d.*msa_dotp_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpadd_s_h:.*dpadd_s\\.h.*msa_dpadd_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpadd_s_w:.*dpadd_s\\.w.*msa_dpadd_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpadd_s_d:.*dpadd_s\\.d.*msa_dpadd_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpadd_u_h:.*dpadd_u\\.h.*msa_dpadd_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpadd_u_w:.*dpadd_u\\.w.*msa_dpadd_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpadd_u_d:.*dpadd_u\\.d.*msa_dpadd_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpsub_s_h:.*dpsub_s\\.h.*msa_dpsub_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpsub_s_w:.*dpsub_s\\.w.*msa_dpsub_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpsub_s_d:.*dpsub_s\\.d.*msa_dpsub_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpsub_u_h:.*dpsub_u\\.h.*msa_dpsub_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpsub_u_w:.*dpsub_u\\.w.*msa_dpsub_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_dpsub_u_d:.*dpsub_u\\.d.*msa_dpsub_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_s_b:.*div_s\\.b.*msa_div_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_s_h:.*div_s\\.h.*msa_div_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_s_w:.*div_s\\.w.*msa_div_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_s_d:.*div_s\\.d.*msa_div_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_u_b:.*div_u\\.b.*msa_div_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_u_h:.*div_u\\.h.*msa_div_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_u_w:.*div_u\\.w.*msa_div_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_div_u_d:.*div_u\\.d.*msa_div_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maddv_b:.*maddv\\.b.*msa_maddv_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maddv_h:.*maddv\\.h.*msa_maddv_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maddv_w:.*maddv\\.w.*msa_maddv_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maddv_d:.*maddv\\.d.*msa_maddv_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_a_b:.*max_a\\.b.*msa_max_a_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_a_h:.*max_a\\.h.*msa_max_a_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_a_w:.*max_a\\.w.*msa_max_a_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_a_d:.*max_a\\.d.*msa_max_a_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_a_b:.*min_a\\.b.*msa_min_a_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_a_h:.*min_a\\.h.*msa_min_a_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_a_w:.*min_a\\.w.*msa_min_a_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_a_d:.*min_a\\.d.*msa_min_a_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_s_b:.*max_s\\.b.*msa_max_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_s_h:.*max_s\\.h.*msa_max_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_s_w:.*max_s\\.w.*msa_max_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_s_d:.*max_s\\.d.*msa_max_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_s_b:.*maxi_s\\.b.*msa_maxi_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_s_h:.*maxi_s\\.h.*msa_maxi_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_s_w:.*maxi_s\\.w.*msa_maxi_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_s_d:.*maxi_s\\.d.*msa_maxi_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_u_b:.*max_u\\.b.*msa_max_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_u_h:.*max_u\\.h.*msa_max_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_u_w:.*max_u\\.w.*msa_max_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_max_u_d:.*max_u\\.d.*msa_max_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_u_b:.*maxi_u\\.b.*msa_maxi_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_u_h:.*maxi_u\\.h.*msa_maxi_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_u_w:.*maxi_u\\.w.*msa_maxi_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maxi_u_d:.*maxi_u\\.d.*msa_maxi_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_s_b:.*min_s\\.b.*msa_min_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_s_h:.*min_s\\.h.*msa_min_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_s_w:.*min_s\\.w.*msa_min_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_s_d:.*min_s\\.d.*msa_min_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_s_b:.*mini_s\\.b.*msa_mini_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_s_h:.*mini_s\\.h.*msa_mini_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_s_w:.*mini_s\\.w.*msa_mini_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_s_d:.*mini_s\\.d.*msa_mini_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_u_b:.*min_u\\.b.*msa_min_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_u_h:.*min_u\\.h.*msa_min_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_u_w:.*min_u\\.w.*msa_min_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_min_u_d:.*min_u\\.d.*msa_min_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_u_b:.*mini_u\\.b.*msa_mini_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_u_h:.*mini_u\\.h.*msa_mini_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_u_w:.*mini_u\\.w.*msa_mini_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mini_u_d:.*mini_u\\.d.*msa_mini_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msubv_b:.*msubv\\.b.*msa_msubv_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msubv_h:.*msubv\\.h.*msa_msubv_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msubv_w:.*msubv\\.w.*msa_msubv_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msubv_d:.*msubv\\.d.*msa_msubv_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mulv_b:.*mulv\\.b.*msa_mulv_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mulv_h:.*mulv\\.h.*msa_mulv_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mulv_w:.*mulv\\.w.*msa_mulv_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mulv_d:.*mulv\\.d.*msa_mulv_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_s_b:.*mod_s\\.b.*msa_mod_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_s_h:.*mod_s\\.h.*msa_mod_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_s_w:.*mod_s\\.w.*msa_mod_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_s_d:.*mod_s\\.d.*msa_mod_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_u_b:.*mod_u\\.b.*msa_mod_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_u_h:.*mod_u\\.h.*msa_mod_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_u_w:.*mod_u\\.w.*msa_mod_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mod_u_d:.*mod_u\\.d.*msa_mod_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_s_b:.*sat_s\\.b.*msa_sat_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_s_h:.*sat_s\\.h.*msa_sat_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_s_w:.*sat_s\\.w.*msa_sat_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_s_d:.*sat_s\\.d.*msa_sat_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_u_b:.*sat_u\\.b.*msa_sat_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_u_h:.*sat_u\\.h.*msa_sat_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_u_w:.*sat_u\\.w.*msa_sat_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sat_u_d:.*sat_u\\.d.*msa_sat_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_s_b:.*subs_s\\.b.*msa_subs_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_s_h:.*subs_s\\.h.*msa_subs_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_s_w:.*subs_s\\.w.*msa_subs_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_s_d:.*subs_s\\.d.*msa_subs_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_u_b:.*subs_u\\.b.*msa_subs_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_u_h:.*subs_u\\.h.*msa_subs_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_u_w:.*subs_u\\.w.*msa_subs_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subs_u_d:.*subs_u\\.d.*msa_subs_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hsub_s_h:.*hsub_s\\.h.*msa_hsub_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hsub_s_w:.*hsub_s\\.w.*msa_hsub_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hsub_s_d:.*hsub_s\\.d.*msa_hsub_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hsub_u_h:.*hsub_u\\.h.*msa_hsub_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hsub_u_w:.*hsub_u\\.w.*msa_hsub_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_hsub_u_d:.*hsub_u\\.d.*msa_hsub_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsuu_s_b:.*subsuu_s\\.b.*msa_subsuu_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsuu_s_h:.*subsuu_s\\.h.*msa_subsuu_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsuu_s_w:.*subsuu_s\\.w.*msa_subsuu_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsuu_s_d:.*subsuu_s\\.d.*msa_subsuu_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsus_u_b:.*subsus_u\\.b.*msa_subsus_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsus_u_h:.*subsus_u\\.h.*msa_subsus_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsus_u_w:.*subsus_u\\.w.*msa_subsus_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subsus_u_d:.*subsus_u\\.d.*msa_subsus_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subv_b:.*subv\\.b.*msa_subv_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subv_h:.*subv\\.h.*msa_subv_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subv_w:.*subv\\.w.*msa_subv_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subv_d:.*subv\\.d.*msa_subv_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subvi_b:.*subvi\\.b.*msa_subvi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subvi_h:.*subvi\\.h.*msa_subvi_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subvi_w:.*subvi\\.w.*msa_subvi_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_subvi_d:.*subvi\\.d.*msa_subvi_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_and_v:.*and\\.v.*msa_and_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_andi_b:.*andi\\.b.*msa_andi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclr_b:.*bclr\\.b.*msa_bclr_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclr_h:.*bclr\\.h.*msa_bclr_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclr_w:.*bclr\\.w.*msa_bclr_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclr_d:.*bclr\\.d.*msa_bclr_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclri_b:.*bclri\\.b.*msa_bclri_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclri_h:.*bclri\\.h.*msa_bclri_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclri_w:.*bclri\\.w.*msa_bclri_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bclri_d:.*bclri\\.d.*msa_bclri_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsl_b:.*binsl\\.b.*msa_binsl_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsl_h:.*binsl\\.h.*msa_binsl_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsl_w:.*binsl\\.w.*msa_binsl_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsl_d:.*binsl\\.d.*msa_binsl_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsli_b:.*binsli\\.b.*msa_binsli_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsli_h:.*binsli\\.h.*msa_binsli_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsli_w:.*binsli\\.w.*msa_binsli_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsli_d:.*binsli\\.d.*msa_binsli_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsr_b:.*binsr\\.b.*msa_binsr_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsr_h:.*binsr\\.h.*msa_binsr_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsr_w:.*binsr\\.w.*msa_binsr_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsr_d:.*binsr\\.d.*msa_binsr_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsri_b:.*binsri\\.b.*msa_binsri_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsri_h:.*binsri\\.h.*msa_binsri_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsri_w:.*binsri\\.w.*msa_binsri_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_binsri_d:.*binsri\\.d.*msa_binsri_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bmnz_v:.*bmnz\\.v.*msa_bmnz_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bmnzi_b:.*bmnzi\\.b.*msa_bmnzi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bmz_v:.*bmz\\.v.*msa_bmz_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bmzi_b:.*bmzi\\.b.*msa_bmzi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bneg_b:.*bneg\\.b.*msa_bneg_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bneg_h:.*bneg\\.h.*msa_bneg_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bneg_w:.*bneg\\.w.*msa_bneg_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bneg_d:.*bneg\\.d.*msa_bneg_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnegi_b:.*bnegi\\.b.*msa_bnegi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnegi_h:.*bnegi\\.h.*msa_bnegi_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnegi_w:.*bnegi\\.w.*msa_bnegi_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnegi_d:.*bnegi\\.d.*msa_bnegi_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bsel_v:.*bsel\\.v.*msa_bsel_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bseli_b:.*bseli\\.b.*msa_bseli_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bset_b:.*bset\\.b.*msa_bset_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bset_h:.*bset\\.h.*msa_bset_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bset_w:.*bset\\.w.*msa_bset_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bset_d:.*bset\\.d.*msa_bset_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bseti_b:.*bseti\\.b.*msa_bseti_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bseti_h:.*bseti\\.h.*msa_bseti_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bseti_w:.*bseti\\.w.*msa_bseti_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bseti_d:.*bseti\\.d.*msa_bseti_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nloc_b:.*nloc\\.b.*msa_nloc_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nloc_h:.*nloc\\.h.*msa_nloc_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nloc_w:.*nloc\\.w.*msa_nloc_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nloc_d:.*nloc\\.d.*msa_nloc_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nlzc_b:.*nlzc\\.b.*msa_nlzc_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nlzc_h:.*nlzc\\.h.*msa_nlzc_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nlzc_w:.*nlzc\\.w.*msa_nlzc_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nlzc_d:.*nlzc\\.d.*msa_nlzc_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nor_v:.*nor\\.v.*msa_nor_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_nori_b:.*nori\\.b.*msa_nori_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pcnt_b:.*pcnt\\.b.*msa_pcnt_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pcnt_h:.*pcnt\\.h.*msa_pcnt_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pcnt_w:.*pcnt\\.w.*msa_pcnt_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pcnt_d:.*pcnt\\.d.*msa_pcnt_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_or_v:.*or\\.v.*msa_or_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ori_b:.*ori\\.b.*msa_ori_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_xor_v:.*xor\\.v.*msa_xor_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_xori_b:.*xori\\.b.*msa_xori_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sll_b:.*sll\\.b.*msa_sll_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sll_h:.*sll\\.h.*msa_sll_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sll_w:.*sll\\.w.*msa_sll_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sll_d:.*sll\\.d.*msa_sll_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_slli_b:.*slli\\.b.*msa_slli_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_slli_h:.*slli\\.h.*msa_slli_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_slli_w:.*slli\\.w.*msa_slli_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_slli_d:.*slli\\.d.*msa_slli_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sra_b:.*sra\\.b.*msa_sra_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sra_h:.*sra\\.h.*msa_sra_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sra_w:.*sra\\.w.*msa_sra_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sra_d:.*sra\\.d.*msa_sra_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srai_b:.*srai\\.b.*msa_srai_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srai_h:.*srai\\.h.*msa_srai_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srai_w:.*srai\\.w.*msa_srai_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srai_d:.*srai\\.d.*msa_srai_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srar_b:.*srar\\.b.*msa_srar_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srar_h:.*srar\\.h.*msa_srar_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srar_w:.*srar\\.w.*msa_srar_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srar_d:.*srar\\.d.*msa_srar_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srari_b:.*srari\\.b.*msa_srari_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srari_h:.*srari\\.h.*msa_srari_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srari_w:.*srari\\.w.*msa_srari_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srari_d:.*srari\\.d.*msa_srari_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srl_b:.*srl\\.b.*msa_srl_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srl_h:.*srl\\.h.*msa_srl_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srl_w:.*srl\\.w.*msa_srl_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srl_d:.*srl\\.d.*msa_srl_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srli_b:.*srli\\.b.*msa_srli_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srli_h:.*srli\\.h.*msa_srli_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srli_w:.*srli\\.w.*msa_srli_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srli_d:.*srli\\.d.*msa_srli_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlr_b:.*srlr\\.b.*msa_srlr_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlr_h:.*srlr\\.h.*msa_srlr_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlr_w:.*srlr\\.w.*msa_srlr_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlr_d:.*srlr\\.d.*msa_srlr_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlri_b:.*srlri\\.b.*msa_srlri_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlri_h:.*srlri\\.h.*msa_srlri_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlri_w:.*srlri\\.w.*msa_srlri_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_srlri_d:.*srlri\\.d.*msa_srlri_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fadd_w:.*fadd\\.w.*msa_fadd_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fadd_d:.*fadd\\.d.*msa_fadd_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fdiv_w:.*fdiv\\.w.*msa_fdiv_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fdiv_d:.*fdiv\\.d.*msa_fdiv_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexp2_w:.*fexp2\\.w.*msa_fexp2_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexp2_d:.*fexp2\\.d.*msa_fexp2_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_flog2_w:.*flog2\\.w.*msa_flog2_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_flog2_d:.*flog2\\.d.*msa_flog2_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmadd_w:.*fmadd\\.w.*msa_fmadd_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmadd_d:.*fmadd\\.d.*msa_fmadd_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmsub_w:.*fmsub\\.w.*msa_fmsub_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmsub_d:.*fmsub\\.d.*msa_fmsub_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmax_w:.*fmax\\.w.*msa_fmax_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmax_d:.*fmax\\.d.*msa_fmax_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmin_w:.*fmin\\.w.*msa_fmin_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmin_d:.*fmin\\.d.*msa_fmin_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmax_a_w:.*fmax_a\\.w.*msa_fmax_a_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmax_a_d:.*fmax_a\\.d.*msa_fmax_a_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmin_a_w:.*fmin_a\\.w.*msa_fmin_a_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmin_a_d:.*fmin_a\\.d.*msa_fmin_a_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmul_w:.*fmul\\.w.*msa_fmul_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fmul_d:.*fmul\\.d.*msa_fmul_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_frcp_w:.*frcp\\.w.*msa_frcp_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_frcp_d:.*frcp\\.d.*msa_frcp_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_frint_w:.*frint\\.w.*msa_frint_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_frint_d:.*frint\\.d.*msa_frint_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_frsqrt_w:.*frsqrt\\.w.*msa_frsqrt_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_frsqrt_d:.*frsqrt\\.d.*msa_frsqrt_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsqrt_w:.*fsqrt\\.w.*msa_fsqrt_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsqrt_d:.*fsqrt\\.d.*msa_fsqrt_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsub_w:.*fsub\\.w.*msa_fsub_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsub_d:.*fsub\\.d.*msa_fsub_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fclass_w:.*fclass\\.w.*msa_fclass_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fclass_d:.*fclass\\.d.*msa_fclass_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcaf_w:.*fcaf\\.w.*msa_fcaf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcaf_d:.*fcaf\\.d.*msa_fcaf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcun_w:.*fcun\\.w.*msa_fcun_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcun_d:.*fcun\\.d.*msa_fcun_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcor_w:.*fcor\\.w.*msa_fcor_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcor_d:.*fcor\\.d.*msa_fcor_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fceq_w:.*fceq\\.w.*msa_fceq_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fceq_d:.*fceq\\.d.*msa_fceq_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcune_w:.*fcune\\.w.*msa_fcune_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcune_d:.*fcune\\.d.*msa_fcune_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcueq_w:.*fcueq\\.w.*msa_fcueq_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcueq_d:.*fcueq\\.d.*msa_fcueq_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcne_w:.*fcne\\.w.*msa_fcne_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcne_d:.*fcne\\.d.*msa_fcne_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fclt_w:.*fclt\\.w.*msa_fclt_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fclt_d:.*fclt\\.d.*msa_fclt_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcult_w:.*fcult\\.w.*msa_fcult_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcult_d:.*fcult\\.d.*msa_fcult_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcle_w:.*fcle\\.w.*msa_fcle_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcle_d:.*fcle\\.d.*msa_fcle_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcule_w:.*fcule\\.w.*msa_fcule_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fcule_d:.*fcule\\.d.*msa_fcule_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsaf_w:.*fsaf\\.w.*msa_fsaf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsaf_d:.*fsaf\\.d.*msa_fsaf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsun_w:.*fsun\\.w.*msa_fsun_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsun_d:.*fsun\\.d.*msa_fsun_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsor_w:.*fsor\\.w.*msa_fsor_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsor_d:.*fsor\\.d.*msa_fsor_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fseq_w:.*fseq\\.w.*msa_fseq_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fseq_d:.*fseq\\.d.*msa_fseq_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsune_w:.*fsune\\.w.*msa_fsune_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsune_d:.*fsune\\.d.*msa_fsune_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsueq_w:.*fsueq\\.w.*msa_fsueq_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsueq_d:.*fsueq\\.d.*msa_fsueq_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsne_w:.*fsne\\.w.*msa_fsne_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsne_d:.*fsne\\.d.*msa_fsne_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fslt_w:.*fslt\\.w.*msa_fslt_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fslt_d:.*fslt\\.d.*msa_fslt_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsult_w:.*fsult\\.w.*msa_fsult_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsult_d:.*fsult\\.d.*msa_fsult_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsle_w:.*fsle\\.w.*msa_fsle_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsle_d:.*fsle\\.d.*msa_fsle_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsule_w:.*fsule\\.w.*msa_fsule_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fsule_d:.*fsule\\.d.*msa_fsule_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexupl_w:.*fexupl\\.w.*msa_fexupl_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexupl_d:.*fexupl\\.d.*msa_fexupl_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexupr_w:.*fexupr\\.w.*msa_fexupr_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexupr_d:.*fexupr\\.d.*msa_fexupr_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexdo_h:.*fexdo\\.h.*msa_fexdo_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fexdo_w:.*fexdo\\.w.*msa_fexdo_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffint_s_w:.*ffint_s\\.w.*msa_ffint_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffint_s_d:.*ffint_s\\.d.*msa_ffint_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffint_u_w:.*ffint_u\\.w.*msa_ffint_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffint_u_d:.*ffint_u\\.d.*msa_ffint_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffql_w:.*ffql\\.w.*msa_ffql_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffql_d:.*ffql\\.d.*msa_ffql_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffqr_w:.*ffqr\\.w.*msa_ffqr_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ffqr_d:.*ffqr\\.d.*msa_ffqr_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftint_s_w:.*ftint_s\\.w.*msa_ftint_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftint_s_d:.*ftint_s\\.d.*msa_ftint_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftint_u_w:.*ftint_u\\.w.*msa_ftint_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftint_u_d:.*ftint_u\\.d.*msa_ftint_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftrunc_s_w:.*ftrunc_s\\.w.*msa_ftrunc_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftrunc_s_d:.*ftrunc_s\\.d.*msa_ftrunc_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftrunc_u_w:.*ftrunc_u\\.w.*msa_ftrunc_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftrunc_u_d:.*ftrunc_u\\.d.*msa_ftrunc_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftq_h:.*ftq\\.h.*msa_ftq_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ftq_w:.*ftq\\.w.*msa_ftq_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_madd_q_h:.*madd_q\\.h.*msa_madd_q_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_madd_q_w:.*madd_q\\.w.*msa_madd_q_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maddr_q_h:.*maddr_q\\.h.*msa_maddr_q_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_maddr_q_w:.*maddr_q\\.w.*msa_maddr_q_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msub_q_h:.*msub_q\\.h.*msa_msub_q_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msub_q_w:.*msub_q\\.w.*msa_msub_q_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msubr_q_h:.*msubr_q\\.h.*msa_msubr_q_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_msubr_q_w:.*msubr_q\\.w.*msa_msubr_q_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mul_q_h:.*mul_q\\.h.*msa_mul_q_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mul_q_w:.*mul_q\\.w.*msa_mul_q_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mulr_q_h:.*mulr_q\\.h.*msa_mulr_q_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_mulr_q_w:.*mulr_q\\.w.*msa_mulr_q_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceq_b:.*ceq\\.b.*msa_ceq_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceq_h:.*ceq\\.h.*msa_ceq_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceq_w:.*ceq\\.w.*msa_ceq_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceq_d:.*ceq\\.d.*msa_ceq_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceqi_b:.*ceqi\\.b.*msa_ceqi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceqi_h:.*ceqi\\.h.*msa_ceqi_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceqi_w:.*ceqi\\.w.*msa_ceqi_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ceqi_d:.*ceqi\\.d.*msa_ceqi_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_s_b:.*cle_s\\.b.*msa_cle_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_s_h:.*cle_s\\.h.*msa_cle_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_s_w:.*cle_s\\.w.*msa_cle_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_s_d:.*cle_s\\.d.*msa_cle_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_s_b:.*clei_s\\.b.*msa_clei_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_s_h:.*clei_s\\.h.*msa_clei_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_s_w:.*clei_s\\.w.*msa_clei_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_s_d:.*clei_s\\.d.*msa_clei_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_u_b:.*cle_u\\.b.*msa_cle_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_u_h:.*cle_u\\.h.*msa_cle_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_u_w:.*cle_u\\.w.*msa_cle_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cle_u_d:.*cle_u\\.d.*msa_cle_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_u_b:.*clei_u\\.b.*msa_clei_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_u_h:.*clei_u\\.h.*msa_clei_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_u_w:.*clei_u\\.w.*msa_clei_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clei_u_d:.*clei_u\\.d.*msa_clei_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_s_b:.*clt_s\\.b.*msa_clt_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_s_h:.*clt_s\\.h.*msa_clt_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_s_w:.*clt_s\\.w.*msa_clt_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_s_d:.*clt_s\\.d.*msa_clt_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_s_b:.*clti_s\\.b.*msa_clti_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_s_h:.*clti_s\\.h.*msa_clti_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_s_w:.*clti_s\\.w.*msa_clti_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_s_d:.*clti_s\\.d.*msa_clti_s_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_u_b:.*clt_u\\.b.*msa_clt_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_u_h:.*clt_u\\.h.*msa_clt_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_u_w:.*clt_u\\.w.*msa_clt_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clt_u_d:.*clt_u\\.d.*msa_clt_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_u_b:.*clti_u\\.b.*msa_clti_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_u_h:.*clti_u\\.h.*msa_clti_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_u_w:.*clti_u\\.w.*msa_clti_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_clti_u_d:.*clti_u\\.d.*msa_clti_u_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnz_v:.*li\t\\\$\\d+,1.*bnz\\.v.*msa_bnz_v|msa_bnz_v:.*bz\\.v.*li\t\\\$\\d+,1.*msa_bnz_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bz_v:.*li\t\\\$\\d+,1.*bz\\.v.*msa_bz_v|msa_bz_v:.*bnz\\.v.*li\t\\\$\\d+,1.*msa_bz_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnz_b:.*li\t\\\$\\d+,1.*bnz\\.b.*msa_bnz_b|msa_bnz_b:.*bz\\.b.*li\t\\\$\\d+,1.*msa_bnz_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnz_h:.*li\t\\\$\\d+,1.*bnz\\.h.*msa_bnz_h|msa_bnz_h:.*bz\\.h.*li\t\\\$\\d+,1.*msa_bnz_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnz_w:.*li\t\\\$\\d+,1.*bnz\\.w.*msa_bnz_w|msa_bnz_w:.*bz\\.w.*li\t\\\$\\d+,1.*msa_bnz_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bnz_d:.*li\t\\\$\\d+,1.*bnz\\.d.*msa_bnz_d|msa_bnz_d:.*bz\\.d.*li\t\\\$\\d+,1.*msa_bnz_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bz_b:.*li\t\\\$\\d+,1.*bz\\.b.*msa_bz_b|msa_bz_b:.*bnz\\.b.*li\t\\\$\\d+,1.*msa_bz_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bz_h:.*li\t\\\$\\d+,1.*bz\\.h.*msa_bz_h|msa_bz_h:.*bnz\\.h.*li\t\\\$\\d+,1.*msa_bz_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bz_w:.*li\t\\\$\\d+,1.*bz\\.w.*msa_bz_w|msa_bz_w:.*bnz\\.w.*li\t\\\$\\d+,1.*msa_bz_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_bz_d:.*li\t\\\$\\d+,1.*bz\\.d.*msa_bz_d|msa_bz_d:.*bnz\\.d.*li\t\\\$\\d+,1.*msa_bz_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_cfcmsa:.*cfcmsa.*msa_cfcmsa" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ctcmsa:.*ctcmsa.*msa_ctcmsa" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ld_b:.*ld\\.b.*msa_ld_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ld_h:.*ld\\.h.*msa_ld_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ld_w:.*ld\\.w.*msa_ld_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ld_d:.*ld\\.d.*msa_ld_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ldi_b:.*ldi\\.b.*msa_ldi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ldi_h:.*ldi\\.h.*msa_ldi_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ldi_w:.*ldi\\.w.*msa_ldi_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ldi_d:.*ldi\\.d.*msa_ldi_d" 1 } } */
+/* Note: move.v is likely to be optimised out. */
+/* { dg-final { scan-assembler-times "msa_move_v:.*msa_move_v|msa_move_v:.*move\\.v.*msa_move_v" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splat_b:.*splat\\.b.*msa_splat_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splat_h:.*splat\\.h.*msa_splat_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splat_w:.*splat\\.w.*msa_splat_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splat_d:.*splat\\.d.*msa_splat_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splati_b:.*splati\\.b.*msa_splati_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splati_h:.*splati\\.h.*msa_splati_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splati_w:.*splati\\.w.*msa_splati_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_splati_d:.*splati\\.d.*msa_splati_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fill_b:.*fill\\.b.*msa_fill_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fill_h:.*fill\\.h.*msa_fill_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_fill_w:.*fill\\.w.*msa_fill_w" 1 } } */
+/* Note: some instructions are only available on MIPS64, thus, these will be
+ replaced with equivalent ones on MIPS32. */
+/* { dg-final { scan-assembler-times "msa_fill_d:.*fill\\.d.*msa_fill_d" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "msa_fill_d:.*fill\\.w.*insert.w.*insert.w.*msa_fill_d" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "msa_insert_b:.*insert\\.b.*msa_insert_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_insert_h:.*insert\\.h.*msa_insert_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_insert_w:.*insert\\.w.*msa_insert_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_insert_d:.*insert\\.d.*msa_insert_d" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "msa_insert_d:.*sra.*insert.w.*insert.w.*msa_insert_d" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "msa_insve_b:.*insve\\.b.*msa_insve_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_insve_h:.*insve\\.h.*msa_insve_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_insve_w:.*insve\\.w.*msa_insve_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_insve_d:.*insve\\.d.*msa_insve_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_s_b:.*copy_s\\.b.*msa_copy_s_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_s_h:.*copy_s\\.h.*msa_copy_s_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_s_w:.*copy_s\\.w.*msa_copy_s_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_s_d:.*copy_s\\.d.*msa_copy_s_d" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "msa_copy_s_d:.*copy_s\\.w.*copy_s\\.w.*msa_copy_s_d" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "msa_copy_u_b:.*copy_u\\.b.*msa_copy_u_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_u_h:.*copy_u\\.h.*msa_copy_u_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_u_w:.*copy_s\\.w.*msa_copy_u_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_copy_u_d:.*copy_s\\.d.*msa_copy_u_d" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "msa_copy_u_d:.*copy_s\\.w.*copy_s\\.w.*msa_copy_u_d" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "msa_st_b:.*st\\.b.*msa_st_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_st_h:.*st\\.h.*msa_st_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_st_w:.*st\\.w.*msa_st_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_st_d:.*st\\.d.*msa_st_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvev_b:.*ilvev\\.b.*msa_ilvev_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvev_h:.*ilvev\\.h.*msa_ilvev_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvev_w:.*ilvev\\.w.*msa_ilvev_w" 1 } } */
+/* Note: ilvev.d is equivalent to ilvr.d. */
+/* { dg-final { scan-assembler-times "msa_ilvev_d:.*ilvev\\.d.*msa_ilvev_d|msa_ilvev_d:.*ilvr\\.d.*msa_ilvev_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvod_b:.*ilvod\\.b.*msa_ilvod_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvod_h:.*ilvod\\.h.*msa_ilvod_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvod_w:.*ilvod\\.w.*msa_ilvod_w" 1 } } */
+/* Note: ilvod.d is equivalent to ilvl.d. */
+/* { dg-final { scan-assembler-times "msa_ilvod_d:.*ilvod\\.d.*msa_ilvod_d|msa_ilvod_d:.*ilvl\\.d.*msa_ilvod_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvl_b:.*ilvl\\.b.*msa_ilvl_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvl_h:.*ilvl\\.h.*msa_ilvl_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvl_w:.*ilvl\\.w.*msa_ilvl_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvl_d:.*ilvl\\.d.*msa_ilvl_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvr_b:.*ilvr\\.b.*msa_ilvr_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvr_h:.*ilvr\\.h.*msa_ilvr_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvr_w:.*ilvr\\.w.*msa_ilvr_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_ilvr_d:.*ilvr\\.d.*msa_ilvr_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pckev_b:.*pckev\\.b.*msa_pckev_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pckev_h:.*pckev\\.h.*msa_pckev_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pckev_w:.*pckev\\.w.*msa_pckev_w" 1 } } */
+/* Note: ilvr.d is equivalent to pckev.d. */
+/* { dg-final { scan-assembler-times "msa_pckev_d:.*ilvr\\.d.*msa_pckev_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pckod_b:.*pckod\\.b.*msa_pckod_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pckod_h:.*pckod\\.h.*msa_pckod_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_pckod_w:.*pckod\\.w.*msa_pckod_w" 1 } } */
+/* Note: ilvl.d is equivalent to pckod.d. */
+/* { dg-final { scan-assembler-times "msa_pckod_d:.*ilvl\\.d.*msa_pckod_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_shf_b:.*shf\\.b.*msa_shf_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_shf_h:.*shf\\.h.*msa_shf_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_shf_w:.*shf\\.w.*msa_shf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sld_b:.*sld\\.b.*msa_sld_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sld_h:.*sld\\.h.*msa_sld_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sld_w:.*sld\\.w.*msa_sld_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sld_d:.*sld\\.d.*msa_sld_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sldi_b:.*sldi\\.b.*msa_sldi_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sldi_h:.*sldi\\.h.*msa_sldi_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sldi_w:.*sldi\\.w.*msa_sldi_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_sldi_d:.*sldi\\.d.*msa_sldi_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_vshf_b:.*vshf\\.b.*msa_vshf_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_vshf_h:.*vshf\\.h.*msa_vshf_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_vshf_w:.*vshf\\.w.*msa_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_vshf_d:.*vshf\\.d.*msa_vshf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_s_vshf_b:.*vshf.b.*msa_gcc_1_s_vshf_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_s_vshf_h:.*vshf.h.*msa_gcc_1_s_vshf_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_s_vshf_w:.*vshf.w.*msa_gcc_1_s_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_s_vshf_d:.*vshf.d.*msa_gcc_1_s_vshf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_u_vshf_b:.*vshf.b.*msa_gcc_1_u_vshf_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_u_vshf_h:.*vshf.h.*msa_gcc_1_u_vshf_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_u_vshf_w:.*vshf.w.*msa_gcc_1_u_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_1_u_vshf_d:.*vshf.d.*msa_gcc_1_u_vshf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_s_vshf_b:.*vshf.b.*msa_gcc_2_s_vshf_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_s_vshf_h:.*vshf.h.*msa_gcc_2_s_vshf_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_s_vshf_w:.*vshf.w.*msa_gcc_2_s_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_s_vshf_d:.*vshf.d.*msa_gcc_2_s_vshf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_u_vshf_b:.*vshf.b.*msa_gcc_2_u_vshf_b" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_u_vshf_h:.*vshf.h.*msa_gcc_2_u_vshf_h" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_u_vshf_w:.*vshf.w.*msa_gcc_2_u_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_2_u_vshf_d:.*vshf.d.*msa_gcc_2_u_vshf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_3_vshf_w:.*vshf.w.*msa_gcc_3_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_3_vshf_d:.*vshf.d.*msa_gcc_3_vshf_d" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_4_vshf_w:.*vshf.w.*msa_gcc_4_vshf_w" 1 } } */
+/* { dg-final { scan-assembler-times "msa_gcc_4_vshf_d:.*vshf.d.*msa_gcc_4_vshf_d" 1 } } */
+
+#include <msa.h>
+
+#define U5MAX 31
+#define U8MAX 255
+#define S5MAX 15
+
+#define v16i8_DF b
+#define v8i16_DF h
+#define v4i32_DF w
+#define v2i64_DF d
+#define v16u8_DF b
+#define v8u16_DF h
+#define v4u32_DF w
+#define v2u64_DF d
+#define v4f32_DF w
+#define v2f64_DF d
+
+#define v16i8_DBL v8i16
+#define v8i16_DBL v4i32
+#define v4i32_DBL v2i64
+#define v16u8_DBL v8u16
+#define v8u16_DBL v4u32
+#define v4u32_DBL v2u64
+
+#define v16i8_DDF h
+#define v8i16_DDF w
+#define v4i32_DDF d
+#define v16u8_DDF h
+#define v8u16_DDF w
+#define v4u32_DDF d
+
+#define v4f32_HDF h
+#define v2f64_HDF w
+
+/* Signed twice the size result. */
+#define v16u8_SDBL v8i16
+#define v8u16_SDBL v4i32
+#define v4u32_SDBL v2i64
+
+/* Signed values for unsigned type, subsus_u_* instructions. */
+#define v16u8_S v16i8
+#define v8u16_S v8i16
+#define v4u32_S v4i32
+#define v2u64_S v2i64
+
+/* Integer elements for fexp2. */
+#define v4f32_FEXP2 v4i32
+#define v2f64_FEXP2 v2i64
+
+/* Return type for floating-point conversion instructions. */
+#define v4f32_FCNV v8i16
+#define v2f64_FCNV v4f32
+#define v4f32_FSINT v4i32
+#define v2f64_FSINT v2i64
+#define v4f32_FUINT v4u32
+#define v2f64_FUINT v2u64
+#define v4f32_FFP v8i16
+#define v2f64_FFP v4i32
+
+/* Integer result for floating point operations. */
+#define v4f32_FRES v4i32
+#define v2f64_FRES v2i64
+
+/* Return type for compare unsign instructions. */
+#define v16u8_CMP v16i8
+#define v8u16_CMP v8i16
+#define v4u32_CMP v4i32
+#define v2u64_CMP v2i64
+
+#define PASTE_BUILTIN(NAME, DF) __builtin_msa_ ## NAME ## _ ## DF
+#define EVAL_BUILTIN(NAME, DF) PASTE_BUILTIN (NAME, DF)
+#define BUILTIN(NAME, DF) EVAL_BUILTIN (NAME, DF)
+
+#define FN_EVAL(NAME, T) msa_ ## NAME ## _ ## T
+#define FN(NAME, T) FN_EVAL (NAME, T)
+
+/* MSA Arithmetic builtins. */
+#define ADDV(T) NOMIPS16 T FN (addv, T ## _DF) (T i, T j) { return BUILTIN (addv, T ## _DF) (i, j); }
+#define ADDVI(T) NOMIPS16 T FN (addvi, T ## _DF) (T i) { return BUILTIN (addvi, T ## _DF) (i, U5MAX); }
+#define ADD_A(T) NOMIPS16 T FN (add_a, T ## _DF) (T i, T j) { return BUILTIN (add_a, T ## _DF) (i, j); }
+#define ADDS_A(T) NOMIPS16 T FN (adds_a, T ## _DF) (T i, T j) { return BUILTIN (adds_a, T ## _DF) (i, j); }
+#define ADDS_S(T) NOMIPS16 T FN (adds_s, T ## _DF) (T i, T j) { return BUILTIN (adds_s, T ## _DF) (i, j); }
+#define ADDS_U(T) NOMIPS16 T FN (adds_u, T ## _DF) (T i, T j) { return BUILTIN (adds_u, T ## _DF) (i, j); }
+#define HADD_S(T) NOMIPS16 T ## _DBL FN (hadd_s, T ## _DDF) (T i, T j) { return BUILTIN (hadd_s, T ## _DDF) (i, j); }
+#define HADD_U(T) NOMIPS16 T ## _DBL FN (hadd_u, T ## _DDF) (T i, T j) { return BUILTIN (hadd_u, T ## _DDF) (i, j); }
+#define ASUB_S(T) NOMIPS16 T FN (asub_s, T ## _DF) (T i, T j) { return BUILTIN (asub_s, T ## _DF) (i, j); }
+#define ASUB_U(T) NOMIPS16 T FN (asub_u, T ## _DF) (T i, T j) { return BUILTIN (asub_u, T ## _DF) (i, j); }
+#define AVE_S(T) NOMIPS16 T FN (ave_s, T ## _DF) (T i, T j) { return BUILTIN (ave_s, T ## _DF) (i, j); }
+#define AVE_U(T) NOMIPS16 T FN (ave_u, T ## _DF) (T i, T j) { return BUILTIN (ave_u, T ## _DF) (i, j); }
+#define AVER_S(T) NOMIPS16 T FN (aver_s, T ## _DF) (T i, T j) { return BUILTIN (aver_s, T ## _DF) (i, j); }
+#define AVER_U(T) NOMIPS16 T FN (aver_u, T ## _DF) (T i, T j) { return BUILTIN (aver_u, T ## _DF) (i, j); }
+#define DOTP_S(T) NOMIPS16 T ## _DBL FN (dotp_s, T ## _DDF) (T i, T j) { return BUILTIN (dotp_s, T ## _DDF) (i, j); }
+#define DOTP_U(T) NOMIPS16 T ## _DBL FN (dotp_u, T ## _DDF) (T i, T j) { return BUILTIN (dotp_u, T ## _DDF) (i, j); }
+#define DPADD_S(T) NOMIPS16 T ## _DBL FN (dpadd_s, T ## _DDF) (T ## _DBL i, T j, T k) { return BUILTIN (dpadd_s, T ## _DDF) (i, j, k); }
+#define DPADD_U(T) NOMIPS16 T ## _DBL FN (dpadd_u, T ## _DDF) (T ## _DBL i, T j, T k) { return BUILTIN (dpadd_u, T ## _DDF) (i, j, k); }
+#define DPSUB_S(T) NOMIPS16 T ## _DBL FN (dpsub_s, T ## _DDF) (T ## _DBL i, T j, T k) { return BUILTIN (dpsub_s, T ## _DDF) (i, j, k); }
+#define DPSUB_U(T) NOMIPS16 T ## _SDBL FN (dpsub_u, T ## _DDF) (T ## _SDBL i, T j, T k) { return BUILTIN (dpsub_u, T ## _DDF) (i, j, k); }
+#define DIV_S(T) NOMIPS16 T FN (div_s, T ## _DF) (T i, T j) { return BUILTIN (div_s, T ## _DF) (i, j); }
+#define DIV_U(T) NOMIPS16 T FN (div_u, T ## _DF) (T i, T j) { return BUILTIN (div_u, T ## _DF) (i, j); }
+#define MADDV(T) NOMIPS16 T FN (maddv, T ## _DF) (T i, T j, T k) { return BUILTIN (maddv, T ## _DF) (i, j, k); }
+#define MAX_A(T) NOMIPS16 T FN (max_a, T ## _DF) (T i, T j) { return BUILTIN (max_a, T ## _DF) (i, j); }
+#define MIN_A(T) NOMIPS16 T FN (min_a, T ## _DF) (T i, T j) { return BUILTIN (min_a, T ## _DF) (i, j); }
+#define MAX_S(T) NOMIPS16 T FN (max_s, T ## _DF) (T i, T j) { return BUILTIN (max_s, T ## _DF) (i, j); }
+#define MAXI_S(T) NOMIPS16 T FN (maxi_s, T ## _DF) (T i) { return BUILTIN (maxi_s, T ## _DF) (i, S5MAX); }
+#define MAX_U(T) NOMIPS16 T FN (max_u, T ## _DF) (T i, T j) { return BUILTIN (max_u, T ## _DF) (i, j); }
+#define MAXI_U(T) NOMIPS16 T FN (maxi_u, T ## _DF) (T i) { return BUILTIN (maxi_u, T ## _DF) (i, S5MAX); }
+#define MIN_S(T) NOMIPS16 T FN (min_s, T ## _DF) (T i, T j) { return BUILTIN (min_s, T ## _DF) (i, j); }
+#define MINI_S(T) NOMIPS16 T FN (mini_s, T ## _DF) (T i) { return BUILTIN (mini_s, T ## _DF) (i, S5MAX); }
+#define MIN_U(T) NOMIPS16 T FN (min_u, T ## _DF) (T i, T j) { return BUILTIN (min_u, T ## _DF) (i, j); }
+#define MINI_U(T) NOMIPS16 T FN (mini_u, T ## _DF) (T i) { return BUILTIN (mini_u, T ## _DF) (i, S5MAX); }
+#define MSUBV(T) NOMIPS16 T FN (msubv, T ## _DF) (T i, T j, T k) { return BUILTIN (msubv, T ## _DF) (i, j, k); }
+#define MULV(T) NOMIPS16 T FN (mulv, T ## _DF) (T i, T j) { return BUILTIN (mulv, T ## _DF) (i, j); }
+#define MOD_S(T) NOMIPS16 T FN (mod_s, T ## _DF) (T i, T j) { return BUILTIN (mod_s, T ## _DF) (i, j); }
+#define MOD_U(T) NOMIPS16 T FN (mod_u, T ## _DF) (T i, T j) { return BUILTIN (mod_u, T ## _DF) (i, j); }
+#define SAT_S(T) NOMIPS16 T FN (sat_s, T ## _DF) (T i) { return BUILTIN (sat_s, T ## _DF) (i, 7); }
+#define SAT_U(T) NOMIPS16 T FN (sat_u, T ## _DF) (T i) { return BUILTIN (sat_u, T ## _DF) (i, 7); }
+#define SUBS_S(T) NOMIPS16 T FN (subs_s, T ## _DF) (T i, T j) { return BUILTIN (subs_s, T ## _DF) (i, j); }
+#define SUBS_U(T) NOMIPS16 T FN (subs_u, T ## _DF) (T i, T j) { return BUILTIN (subs_u, T ## _DF) (i, j); }
+#define HSUB_S(T) NOMIPS16 T ## _DBL FN (hsub_s, T ## _DDF) (T i, T j) { return BUILTIN (hsub_s, T ## _DDF) (i, j); }
+#define HSUB_U(T) NOMIPS16 T ## _SDBL FN (hsub_u, T ## _DDF) (T i, T j) { return BUILTIN (hsub_u, T ## _DDF) (i, j); }
+#define SUBSUU_S(T) NOMIPS16 T ## _S FN (subsuu_s, T ## _DF) (T i, T j) { return BUILTIN (subsuu_s, T ## _DF) (i, j); }
+#define SUBSUS_U(T) NOMIPS16 T FN (subsus_u, T ## _DF) (T i, T ## _S j) { return BUILTIN (subsus_u, T ## _DF) (i, j); }
+#define SUBV(T) NOMIPS16 T FN (subv, T ## _DF) (T i, T j) { return BUILTIN (subv, T ## _DF) (i, j); }
+#define SUBVI(T) NOMIPS16 T FN (subvi, T ## _DF) (T i) { return BUILTIN (subvi, T ## _DF) (i, U5MAX); }
+
+/* MSA Bitwise builtins. */
+#define AND(T) NOMIPS16 T FN (and, v) (T i, T j) { return BUILTIN (and, v) (i, j); }
+#define ANDI(T) NOMIPS16 T FN (andi, T ## _DF) (T i) { return BUILTIN (andi, T ## _DF) (i, 252); }
+#define BCLR(T) NOMIPS16 T FN (bclr, T ## _DF) (T i, T j) { return BUILTIN (bclr, T ## _DF) (i, j); }
+#define BCLRI(T) NOMIPS16 T FN (bclri, T ## _DF) (T i) { return BUILTIN (bclri, T ## _DF) (i, 0); }
+#define BINSL(T) NOMIPS16 T FN (binsl, T ## _DF) (T i, T j, T k) { return BUILTIN (binsl, T ## _DF) (i, j, k); }
+#define BINSLI(T) NOMIPS16 T FN (binsli, T ## _DF) (T i, T j) { return BUILTIN (binsli, T ## _DF) (i, j, 0); }
+#define BINSR(T) NOMIPS16 T FN (binsr, T ## _DF) (T i, T j, T k) { return BUILTIN (binsr, T ## _DF) (i, j, k); }
+#define BINSRI(T) NOMIPS16 T FN (binsri, T ## _DF) (T i, T j) { return BUILTIN (binsri, T ## _DF) (i, j, 0); }
+#define BMNZ(T) NOMIPS16 T FN (bmnz, v) (T i, T j, T k) { return BUILTIN (bmnz, v) (i, j, k); }
+#define BMNZI(T) NOMIPS16 T FN (bmnzi, T ## _DF) (T i, T j) { return BUILTIN (bmnzi, T ## _DF) (i, j, 254); }
+#define BMZ(T) NOMIPS16 T FN (bmz, v) (T i, T j, T k) { return BUILTIN (bmz, v) (i, j, k); }
+#define BMZI(T) NOMIPS16 T FN (bmzi, T ## _DF) (T i, T j) { return BUILTIN (bmzi, T ## _DF) (i, j, 254); }
+#define BNEG(T) NOMIPS16 T FN (bneg, T ## _DF) (T i, T j) { return BUILTIN (bneg, T ## _DF) (i, j); }
+#define BNEGI(T) NOMIPS16 T FN (bnegi, T ## _DF) (T i) { return BUILTIN (bnegi, T ## _DF) (i, 0); }
+#define BSEL(T) NOMIPS16 T FN (bsel, v) (T i, T j, T k) { return BUILTIN (bsel, v) (i, j, k); }
+#define BSELI(T) NOMIPS16 T FN (bseli, T ## _DF) (T i, T j) { return BUILTIN (bseli, T ## _DF) (i, j, U8MAX); }
+#define BSET(T) NOMIPS16 T FN (bset, T ## _DF) (T i, T j) { return BUILTIN (bset, T ## _DF) (i, j); }
+#define BSETI(T) NOMIPS16 T FN (bseti, T ## _DF) (T i) { return BUILTIN (bseti, T ## _DF) (i, 0); }
+#define NLOC(T) NOMIPS16 T FN (nloc, T ## _DF) (T i) { return BUILTIN (nloc, T ## _DF) (i); }
+#define NLZC(T) NOMIPS16 T FN (nlzc, T ## _DF) (T i) { return BUILTIN (nlzc, T ## _DF) (i); }
+#define NOR(T) NOMIPS16 T FN (nor, v) (T i, T j) { return BUILTIN (nor, v) (i, j); }
+#define NORI(T) NOMIPS16 T FN (nori, T ## _DF) (T i) { return BUILTIN (nori, T ## _DF) (i, 254); }
+#define PCNT(T) NOMIPS16 T FN (pcnt, T ## _DF) (T i) { return BUILTIN (pcnt, T ## _DF) (i); }
+#define OR(T) NOMIPS16 T FN (or, v) (T i, T j) { return BUILTIN (or, v) (i, j); }
+#define ORI(T) NOMIPS16 T FN (ori, T ## _DF) (T i) { return BUILTIN (ori, T ## _DF) (i, 252); }
+#define XOR(T) NOMIPS16 T FN (xor, v) (T i, T j) { return BUILTIN (xor, v) (i, j); }
+#define XORI(T) NOMIPS16 T FN (xori, T ## _DF) (T i) { return BUILTIN (xori, T ## _DF) (i, 254); }
+#define SLL(T) NOMIPS16 T FN (sll, T ## _DF) (T i, T j) { return BUILTIN (sll, T ## _DF) (i, j); }
+#define SLLI(T) NOMIPS16 T FN (slli, T ## _DF) (T i) { return BUILTIN (slli, T ## _DF) (i, 1); }
+#define SRA(T) NOMIPS16 T FN (sra, T ## _DF) (T i, T j) { return BUILTIN (sra, T ## _DF) (i, j); }
+#define SRAI(T) NOMIPS16 T FN (srai, T ## _DF) (T i) { return BUILTIN (srai, T ## _DF) (i, 1); }
+#define SRAR(T) NOMIPS16 T FN (srar, T ## _DF) (T i, T j) { return BUILTIN (srar, T ## _DF) (i, j); }
+#define SRARI(T) NOMIPS16 T FN (srari, T ## _DF) (T i) { return BUILTIN (srari, T ## _DF) (i, 0); }
+#define SRL(T) NOMIPS16 T FN (srl, T ## _DF) (T i, T j) { return BUILTIN (srl, T ## _DF) (i, j); }
+#define SRLI(T) NOMIPS16 T FN (srli, T ## _DF) (T i) { return BUILTIN (srli, T ## _DF) (i, 1); }
+#define SRLR(T) NOMIPS16 T FN (srlr, T ## _DF) (T i, T j) { return BUILTIN (srlr, T ## _DF) (i, j); }
+#define SRLRI(T) NOMIPS16 T FN (srlri, T ## _DF) (T i) { return BUILTIN (srlri, T ## _DF) (i, 0); }
+
+/* MSA Floating-Point Arithmetic builtins. */
+#define FADD(T) NOMIPS16 T FN (fadd, T ## _DF) (T i, T j) { return BUILTIN (fadd, T ## _DF) (i, j); }
+#define FDIV(T) NOMIPS16 T FN (fdiv, T ## _DF) (T i, T j) { return BUILTIN (fdiv, T ## _DF) (i, j); }
+#define FEXP2(T) NOMIPS16 T FN (fexp2, T ## _DF) (T i, T ## _FEXP2 j) { return BUILTIN (fexp2, T ## _DF) (i, j); }
+#define FLOG2(T) NOMIPS16 T FN (flog2, T ## _DF) (T i) { return BUILTIN (flog2, T ## _DF) (i); }
+#define FMADD(T) NOMIPS16 T FN (fmadd, T ## _DF) (T i, T j, T k) { return BUILTIN (fmadd, T ## _DF) (i, j, k); }
+#define FMSUB(T) NOMIPS16 T FN (fmsub, T ## _DF) (T i, T j, T k) { return BUILTIN (fmsub, T ## _DF) (i, j, k); }
+#define FMAX(T) NOMIPS16 T FN (fmax, T ## _DF) (T i, T j) { return BUILTIN (fmax, T ## _DF) (i, j); }
+#define FMIN(T) NOMIPS16 T FN (fmin, T ## _DF) (T i, T j) { return BUILTIN (fmin, T ## _DF) (i, j); }
+#define FMAX_A(T) NOMIPS16 T FN (fmax_a, T ## _DF) (T i, T j) { return BUILTIN (fmax_a, T ## _DF) (i, j); }
+#define FMIN_A(T) NOMIPS16 T FN (fmin_a, T ## _DF) (T i, T j) { return BUILTIN (fmin_a, T ## _DF) (i, j); }
+#define FMUL(T) NOMIPS16 T FN (fmul, T ## _DF) (T i, T j) { return BUILTIN (fmul, T ## _DF) (i, j); }
+#define FRCP(T) NOMIPS16 T FN (frcp, T ## _DF) (T i) { return BUILTIN (frcp, T ## _DF) (i); }
+#define FRINT(T) NOMIPS16 T FN (frint, T ## _DF) (T i) { return BUILTIN (frint, T ## _DF) (i); }
+#define FRSQRT(T) NOMIPS16 T FN (frsqrt, T ## _DF) (T i) { return BUILTIN (frsqrt, T ## _DF) (i); }
+#define FSQRT(T) NOMIPS16 T FN (fsqrt, T ## _DF) (T i) { return BUILTIN (fsqrt, T ## _DF) (i); }
+#define FSUB(T) NOMIPS16 T FN (fsub, T ## _DF) (T i, T j) { return BUILTIN (fsub, T ## _DF) (i, j); }
+
+/* MSA Floating-Point Compare builtins. */
+#define FCLASS(T) NOMIPS16 T ## _FRES FN (fclass, T ## _DF) (T i) { return BUILTIN (fclass, T ## _DF) (i); }
+#define FCAF(T) NOMIPS16 T ## _FRES FN (fcaf, T ## _DF) (T i, T j) { return BUILTIN (fcaf, T ## _DF) (i, j); }
+#define FCUN(T) NOMIPS16 T ## _FRES FN (fcun, T ## _DF) (T i, T j) { return BUILTIN (fcun, T ## _DF) (i, j); }
+#define FCOR(T) NOMIPS16 T ## _FRES FN (fcor, T ## _DF) (T i, T j) { return BUILTIN (fcor, T ## _DF) (i, j); }
+#define FCEQ(T) NOMIPS16 T ## _FRES FN (fceq, T ## _DF) (T i, T j) { return BUILTIN (fceq, T ## _DF) (i, j); }
+#define FCUNE(T) NOMIPS16 T ## _FRES FN (fcune, T ## _DF) (T i, T j) { return BUILTIN (fcune, T ## _DF) (i, j); }
+#define FCUEQ(T) NOMIPS16 T ## _FRES FN (fcueq, T ## _DF) (T i, T j) { return BUILTIN (fcueq, T ## _DF) (i, j); }
+#define FCNE(T) NOMIPS16 T ## _FRES FN (fcne, T ## _DF) (T i, T j) { return BUILTIN (fcne, T ## _DF) (i, j); }
+#define FCLT(T) NOMIPS16 T ## _FRES FN (fclt, T ## _DF) (T i, T j) { return BUILTIN (fclt, T ## _DF) (i, j); }
+#define FCULT(T) NOMIPS16 T ## _FRES FN (fcult, T ## _DF) (T i, T j) { return BUILTIN (fcult, T ## _DF) (i, j); }
+#define FCLE(T) NOMIPS16 T ## _FRES FN (fcle, T ## _DF) (T i, T j) { return BUILTIN (fcle, T ## _DF) (i, j); }
+#define FCULE(T) NOMIPS16 T ## _FRES FN (fcule, T ## _DF) (T i, T j) { return BUILTIN (fcule, T ## _DF) (i, j); }
+#define FSAF(T) NOMIPS16 T ## _FRES FN (fsaf, T ## _DF) (T i, T j) { return BUILTIN (fsaf, T ## _DF) (i, j); }
+#define FSUN(T) NOMIPS16 T ## _FRES FN (fsun, T ## _DF) (T i, T j) { return BUILTIN (fsun, T ## _DF) (i, j); }
+#define FSOR(T) NOMIPS16 T ## _FRES FN (fsor, T ## _DF) (T i, T j) { return BUILTIN (fsor, T ## _DF) (i, j); }
+#define FSEQ(T) NOMIPS16 T ## _FRES FN (fseq, T ## _DF) (T i, T j) { return BUILTIN (fseq, T ## _DF) (i, j); }
+#define FSUNE(T) NOMIPS16 T ## _FRES FN (fsune, T ## _DF) (T i, T j) { return BUILTIN (fsune, T ## _DF) (i, j); }
+#define FSUEQ(T) NOMIPS16 T ## _FRES FN (fsueq, T ## _DF) (T i, T j) { return BUILTIN (fsueq, T ## _DF) (i, j); }
+#define FSNE(T) NOMIPS16 T ## _FRES FN (fsne, T ## _DF) (T i, T j) { return BUILTIN (fsne, T ## _DF) (i, j); }
+#define FSLT(T) NOMIPS16 T ## _FRES FN (fslt, T ## _DF) (T i, T j) { return BUILTIN (fslt, T ## _DF) (i, j); }
+#define FSULT(T) NOMIPS16 T ## _FRES FN (fsult, T ## _DF) (T i, T j) { return BUILTIN (fsult, T ## _DF) (i, j); }
+#define FSLE(T) NOMIPS16 T ## _FRES FN (fsle, T ## _DF) (T i, T j) { return BUILTIN (fsle, T ## _DF) (i, j); }
+#define FSULE(T) NOMIPS16 T ## _FRES FN (fsule, T ## _DF) (T i, T j) { return BUILTIN (fsule, T ## _DF) (i, j); }
+
+/* MSA Floating-Point Conversion builtins. */
+#define FEXUPL(T) NOMIPS16 T FN (fexupl, T ## _DF) (T ## _FCNV i) { return BUILTIN (fexupl, T ## _DF) (i); }
+#define FEXUPR(T) NOMIPS16 T FN (fexupr, T ## _DF) (T ## _FCNV i) { return BUILTIN (fexupr, T ## _DF) (i); }
+#define FEXDO(T) NOMIPS16 T ## _FCNV FN (fexdo, T ## _HDF) (T i, T j) { return BUILTIN (fexdo, T ## _HDF) (i, j); }
+#define FFINT_S(T) NOMIPS16 T FN (ffint_s, T ## _DF) (T ## _FSINT i) { return BUILTIN (ffint_s, T ## _DF) (i); }
+#define FFINT_U(T) NOMIPS16 T FN (ffint_u, T ## _DF) (T ## _FUINT i) { return BUILTIN (ffint_u, T ## _DF) (i); }
+#define FFQL(T) NOMIPS16 T FN (ffql, T ## _DF) (T ## _FFP i) { return BUILTIN (ffql, T ## _DF) (i); }
+#define FFQR(T) NOMIPS16 T FN (ffqr, T ## _DF) (T ## _FFP i) { return BUILTIN (ffqr, T ## _DF) (i); }
+#define FTINT_S(T) NOMIPS16 T ## _FSINT FN (ftint_s, T ## _DF) (T i) { return BUILTIN (ftint_s, T ## _DF) (i); }
+#define FTINT_U(T) NOMIPS16 T ## _FUINT FN (ftint_u, T ## _DF) (T i) { return BUILTIN (ftint_u, T ## _DF) (i); }
+#define FTRUNC_S(T) NOMIPS16 T ## _FSINT FN (ftrunc_s, T ## _DF) (T i) { return BUILTIN (ftrunc_s, T ## _DF) (i); }
+#define FTRUNC_U(T) NOMIPS16 T ## _FUINT FN (ftrunc_u, T ## _DF) (T i) { return BUILTIN (ftrunc_u, T ## _DF) (i); }
+#define FTQ(T) NOMIPS16 T ## _FFP FN (ftq, T ## _HDF) (T i, T j) { return BUILTIN (ftq, T ## _HDF) (i, j); }
+
+/* MSA Fixed-Point Multiplication builtins. */
+#define MADD_Q(T) NOMIPS16 T ## _FFP FN (madd_q, T ## _HDF) (T ## _FFP i, T ## _FFP j, T ## _FFP k) { return BUILTIN (madd_q, T ## _HDF) (i, j, k); }
+#define MADDR_Q(T) NOMIPS16 T ## _FFP FN (maddr_q, T ## _HDF) (T ## _FFP i, T ## _FFP j, T ## _FFP k) { return BUILTIN (maddr_q, T ## _HDF) (i, j, k); }
+#define MSUB_Q(T) NOMIPS16 T ## _FFP FN (msub_q, T ## _HDF) (T ## _FFP i, T ## _FFP j, T ## _FFP k) { return BUILTIN (msub_q, T ## _HDF) (i, j, k); }
+#define MSUBR_Q(T) NOMIPS16 T ## _FFP FN (msubr_q, T ## _HDF) (T ## _FFP i, T ## _FFP j, T ## _FFP k) { return BUILTIN (msubr_q, T ## _HDF) (i, j, k); }
+#define MUL_Q(T) NOMIPS16 T ## _FFP FN (mul_q, T ## _HDF) (T ## _FFP i, T ## _FFP j) { return BUILTIN (mul_q, T ## _HDF) (i, j); }
+#define MULR_Q(T) NOMIPS16 T ## _FFP FN (mulr_q, T ## _HDF) (T ## _FFP i, T ## _FFP j) { return BUILTIN (mulr_q, T ## _HDF) (i, j); }
+
+/* MSA Compare builtins. */
+#define CEQ(T) NOMIPS16 T FN (ceq, T ## _DF) (T i, T j) { return BUILTIN (ceq, T ## _DF) (i, j); }
+#define CEQI(T) NOMIPS16 T FN (ceqi, T ## _DF) (T i) { return BUILTIN (ceqi, T ## _DF) (i, 0); }
+#define CLE_S(T) NOMIPS16 T FN (cle_s, T ## _DF) (T i, T j) { return BUILTIN (cle_s, T ## _DF) (i, j); }
+#define CLEI_S(T) NOMIPS16 T FN (clei_s, T ## _DF) (T i) { return BUILTIN (clei_s, T ## _DF) (i, 0); }
+#define CLE_U(T) NOMIPS16 T ## _CMP FN (cle_u, T ## _DF) (T i, T j) { return BUILTIN (cle_u, T ## _DF) (i, j); }
+#define CLEI_U(T) NOMIPS16 T ## _CMP FN (clei_u, T ## _DF) (T i) { return BUILTIN (clei_u, T ## _DF) (i, 10); }
+#define CLT_S(T) NOMIPS16 T FN (clt_s, T ## _DF) (T i, T j) { return BUILTIN (clt_s, T ## _DF) (i, j); }
+#define CLTI_S(T) NOMIPS16 T FN (clti_s, T ## _DF) (T i) { return BUILTIN (clti_s, T ## _DF) (i, 0); }
+#define CLT_U(T) NOMIPS16 T ## _CMP FN (clt_u, T ## _DF) (T i, T j) { return BUILTIN (clt_u, T ## _DF) (i, j); }
+#define CLTI_U(T) NOMIPS16 T ## _CMP FN (clti_u, T ## _DF) (T i) { return BUILTIN (clti_u, T ## _DF) (i, 0); }
+
+/* MSA Branch builtins. */
+#define BNZV(T) NOMIPS16 int FN (bnz, v) (T i) { return BUILTIN (bnz, v) (i); }
+#define BZV(T) NOMIPS16 int FN (bz, v) (T i) { return BUILTIN (bz, v) (i); }
+#define BNZ(T) NOMIPS16 int FN (bnz, T ## _DF) (T i) { return BUILTIN (bnz, T ## _DF) (i); }
+#define BZ(T) NOMIPS16 int FN (bz, T ## _DF) (T i) { return BUILTIN (bz, T ## _DF) (i); }
+
+/* MSA Load/Store and Move builtins. */
+#define CFCMSA() int msa_cfcmsa () { return __builtin_msa_cfcmsa(0x1f); }
+#define CTCMSA() void msa_ctcmsa (int i) { return __builtin_msa_ctcmsa(0x1f, i); }
+#define LD(T) T FN (ld, T ## _DF) (char *i) { return BUILTIN (ld, T ## _DF) (i, 0); }
+#define LDI(T) T FN (ldi, T ## _DF) () { return BUILTIN (ldi, T ## _DF) (123); }
+#define MOVE(T) NOMIPS16 T FN (move, v) (T i) { return BUILTIN (move, v) (i); }
+#define SPLAT(T) T FN (splat, T ## _DF) (T i, int j) { return BUILTIN (splat, T ## _DF) (i, j); }
+#define SPLATI(T) T FN (splati, T ## _DF) (T i) { return BUILTIN (splati, T ## _DF) (i, 1); }
+#define FILL(T) T FN (fill, T ## _DF) (int i) { return BUILTIN (fill, T ## _DF) (i); }
+#define INSERT(T) T FN (insert, T ## _DF) (T i, int j) { return BUILTIN (insert, T ## _DF) (i, 1, j); }
+#define INSVE(T) T FN (insve, T ## _DF) (T i, T j) { return BUILTIN (insve, T ## _DF) (i, 1, j); }
+#define COPY_S(T) int FN (copy_s, T ## _DF) (T i) { return BUILTIN (copy_s, T ## _DF) (i, 1); }
+#define COPY_S_D(T) long long FN (copy_s, T ## _DF) (T i) { return BUILTIN (copy_s, T ## _DF) (i, 1); }
+#define COPY_U(T) unsigned int FN (copy_u, T ## _DF) (T i) { return BUILTIN (copy_u, T ## _DF) (i, 1); }
+#define COPY_U_D(T) unsigned long long FN (copy_u, T ## _DF) (T i) { return BUILTIN (copy_u, T ## _DF) (i, 1); }
+#define ST(T) void FN (st, T ## _DF) (T i, char *j) { BUILTIN (st, T ## _DF) (i, j, -64); }
+
+/* MSA Element Permute builtins. */
+#define ILVEV(T) NOMIPS16 T FN (ilvev, T ## _DF) (T i, T j) { return BUILTIN (ilvev, T ## _DF) (i, j); }
+#define ILVOD(T) NOMIPS16 T FN (ilvod, T ## _DF) (T i, T j) { return BUILTIN (ilvod, T ## _DF) (i, j); }
+#define ILVL(T) NOMIPS16 T FN (ilvl, T ## _DF) (T i, T j) { return BUILTIN (ilvl, T ## _DF) (i, j); }
+#define ILVR(T) NOMIPS16 T FN (ilvr, T ## _DF) (T i, T j) { return BUILTIN (ilvr, T ## _DF) (i, j); }
+#define PCKEV(T) NOMIPS16 T FN (pckev, T ## _DF) (T i, T j) { return BUILTIN (pckev, T ## _DF) (i, j); }
+#define PCKOD(T) NOMIPS16 T FN (pckod, T ## _DF) (T i, T j) { return BUILTIN (pckod, T ## _DF) (i, j); }
+#define SHF(T) NOMIPS16 T FN (shf, T ## _DF) (T i) { return BUILTIN (shf, T ## _DF) (i, 127); }
+#define SLD(T) NOMIPS16 T FN (sld, T ## _DF) (T i, T j, int k) { return BUILTIN (sld, T ## _DF) (i, j, k); }
+#define SLDI(T) NOMIPS16 T FN (sldi, T ## _DF) (T i, T j) { return BUILTIN (sldi, T ## _DF) (i, j, 1); }
+#define VSHF(T) NOMIPS16 T FN (vshf, T ## _DF) (T i, T j, T k) { return BUILTIN (vshf, T ## _DF) (i, j, k); }
+
+/* GCC builtins that generate MSA instructions. */
+#define SHUFFLE1_S(T) T FN (gcc_1_s_vshf, T ## _DF) (T i, T mask) { return __builtin_shuffle (i, mask); }
+#define SHUFFLE1_U(T) T FN (gcc_1_u_vshf, T ## _DF) (T i, T mask) { return __builtin_shuffle (i, mask); }
+#define SHUFFLE2_S(T) T FN (gcc_2_s_vshf, T ## _DF) (T i, T j, T mask) { return __builtin_shuffle (i, j, mask); }
+#define SHUFFLE2_U(T) T FN (gcc_2_u_vshf, T ## _DF) (T i, T j, T mask) { return __builtin_shuffle (i, j, mask); }
+#define REAL_SHUFFLE1(T, MASK_T) T FN (gcc_3_vshf, T ## _DF) (T i, MASK_T mask) { return __builtin_shuffle (i, mask); }
+#define REAL_SHUFFLE2(T, MASK_T) T FN (gcc_4_vshf, T ## _DF) (T i, T j, MASK_T mask) { return __builtin_shuffle (i, j, mask); }
+
+#define ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES(FUNC) \
+ FUNC (v16i8) \
+ FUNC (v8i16) \
+ FUNC (v4i32) \
+ FUNC (v2i64)
+
+#define ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2(FUNC) \
+ FUNC (v16i8) \
+ FUNC (v8i16) \
+ FUNC (v4i32)
+
+#define ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES(FUNC) \
+ FUNC (v16u8) \
+ FUNC (v8u16) \
+ FUNC (v4u32) \
+ FUNC (v2u64)
+
+#define ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES_2(FUNC) \
+ FUNC (v16u8) \
+ FUNC (v8u16) \
+ FUNC (v4u32)
+
+#define ITERATE_FOR_ALL_REAL_VECTOR_TYPES(FUNC) \
+ FUNC (v4f32) \
+ FUNC (v2f64) \
+
+/* MSA Arithmetic builtins. */
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ADDV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ADDVI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ADD_A)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ADDS_A)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ADDS_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (ADDS_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (HADD_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES_2 (HADD_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ASUB_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (ASUB_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (AVE_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (AVE_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (AVER_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (AVER_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (DOTP_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES_2 (DOTP_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (DPADD_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES_2 (DPADD_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (DPSUB_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES_2 (DPSUB_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (DIV_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (DIV_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MADDV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MAX_A)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MIN_A)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MAX_S)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MAXI_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (MAX_U)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (MAXI_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MIN_S)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MINI_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (MIN_U)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (MINI_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MSUBV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MULV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (MOD_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (MOD_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SAT_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (SAT_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SUBS_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (SUBS_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (HSUB_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES_2 (HSUB_U)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (SUBSUU_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (SUBSUS_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SUBV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SUBVI)
+
+/* MSA Bitwise builtins. */
+AND (v16u8)
+ANDI (v16u8)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BCLR)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BCLRI)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BINSL)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BINSLI)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BINSR)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BINSRI)
+BMNZ (v16u8)
+BMNZI (v16u8)
+BMZ (v16u8)
+BMZI (v16u8)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BNEG)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BNEGI)
+BSEL (v16u8)
+BSELI (v16u8)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BSET)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BSETI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (NLOC)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (NLZC)
+NOR (v16u8)
+NORI (v16u8)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (PCNT)
+OR (v16u8)
+ORI (v16u8)
+XOR (v16u8)
+XORI (v16u8)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SLL)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SLLI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRA)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRAI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRAR)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRARI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRL)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRLI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRLR)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SRLRI)
+
+/* MSA Floating-Point Arithmetic builtins. */
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FADD)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FDIV)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FEXP2)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FLOG2)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMADD)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMSUB)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMAX)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMIN)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMAX_A)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMIN_A)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FMUL)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FRCP)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FRINT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FRSQRT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSQRT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSUB)
+
+/* MSA Floating-Point Compare builtins. */
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCLASS)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCAF)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCUN)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCOR)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCEQ)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCUNE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCUEQ)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCNE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCLT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCULT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCLE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FCULE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSAF)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSUN)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSOR)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSEQ)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSUNE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSUEQ)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSNE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSLT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSULT)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSLE)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FSULE)
+
+/* MSA Floating-Point Conversion builtins. */
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FEXUPL)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FEXUPR)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FEXDO)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FFINT_S)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FFINT_U)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FFQL)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FFQR)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FTINT_S)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FTINT_U)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FTRUNC_S)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FTRUNC_U)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FTQ)
+
+/* MSA Fixed-Point Multiplication builtins. */
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (MADD_Q)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (MADDR_Q)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (MSUB_Q)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (MSUBR_Q)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (MUL_Q)
+ITERATE_FOR_ALL_REAL_VECTOR_TYPES (MULR_Q)
+
+/* MSA Compare builtins. */
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (CEQ)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (CEQI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (CLE_S)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (CLEI_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (CLE_U)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (CLEI_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (CLT_S)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (CLTI_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (CLT_U)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (CLTI_U)
+
+/* MSA Branch builtins. */
+BNZV (v16u8)
+BZV (v16u8)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BNZ)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (BZ)
+
+/* MSA Load/Store and Move builtins. */
+CFCMSA ()
+CTCMSA ()
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LD)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LDI)
+MOVE (v16i8)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SPLAT)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SPLATI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (FILL)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (INSERT)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (INSVE)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (COPY_S)
+COPY_S_D (v2i64)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (COPY_U)
+COPY_U_D (v2i64)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ST)
+
+/* MSA Element Permute builtins. */
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ILVEV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ILVOD)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ILVL)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (ILVR)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (PCKEV)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (PCKOD)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES_2 (SHF)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SLD)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SLDI)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (VSHF)
+
+/* GCC builtins. */
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SHUFFLE1_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (SHUFFLE1_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (SHUFFLE2_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (SHUFFLE2_U)
+REAL_SHUFFLE1 (v2f64, v2i64)
+REAL_SHUFFLE2 (v2f64, v2i64)
+REAL_SHUFFLE1 (v4f32, v4i32)
+REAL_SHUFFLE2 (v4f32, v4i32)
diff --git a/gcc/testsuite/gcc.target/mips/msa.c b/gcc/testsuite/gcc.target/mips/msa.c
new file mode 100644
index 00000000000..6b35e21bfd3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/msa.c
@@ -0,0 +1,630 @@
+/* Test MIPS MSA ASE instructions */
+/* { dg-do compile } */
+/* { dg-options "-mfp64 -mhard-float -mmsa -fexpensive-optimizations" } */
+/* { dg-skip-if "madd and msub need combine" { *-*-* } { "-O0" } { "" } } */
+
+/* { dg-final { scan-assembler-times "\t.comm\tv16i8_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv8i16_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv4i32_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv2i64_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv16u8_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv8u16_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv4u32_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv2u64_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv4f32_\\d+,16,16" 3 } } */
+/* { dg-final { scan-assembler-times "\t.comm\tv2f64_\\d+,16,16" 3 } } */
+
+/* { dg-final { scan-assembler-times "test0_v16i8:.*v16i8_0.*test0_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v8i16:.*v8i16_0.*test0_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v4i32:.*v4i32_0.*test0_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v2i64:.*v2i64_0.*test0_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v16u8:.*v16u8_0.*test0_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v8u16:.*v8u16_0.*test0_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v4u32:.*v4u32_0.*test0_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v2u64:.*v2u64_0.*test0_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v4f32:.*v4f32_0.*test0_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test0_v2f64:.*v2f64_0.*test0_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v16i8:.*st.b.*test1_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v8i16:.*st.h.*test1_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v4i32:.*st.w.*test1_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v2i64:.*st.d.*test1_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v16u8:.*st.b.*test1_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v8u16:.*st.h.*test1_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v4u32:.*st.w.*test1_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v2u64:.*st.d.*test1_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v4f32:.*st.w.*test1_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test1_v2f64:.*st.d.*test1_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v16i8:.*addv.b.*test2_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v8i16:.*addv.h.*test2_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v4i32:.*addv.w.*test2_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v2i64:.*addv.d.*test2_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v16u8:.*addv.b.*test2_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v8u16:.*addv.h.*test2_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v4u32:.*addv.w.*test2_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v2u64:.*addv.d.*test2_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v4f32:.*fadd.w.*test2_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test2_v2f64:.*fadd.d.*test2_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v16i8:.*subv.b.*test3_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v8i16:.*subv.h.*test3_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v4i32:.*subv.w.*test3_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v2i64:.*subv.d.*test3_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v16u8:.*subv.b.*test3_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v8u16:.*subv.h.*test3_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v4u32:.*subv.w.*test3_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v2u64:.*subv.d.*test3_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v4f32:.*fsub.w.*test3_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test3_v2f64:.*fsub.d.*test3_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v16i8:.*mulv.b.*test4_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v8i16:.*mulv.h.*test4_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v4i32:.*mulv.w.*test4_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v2i64:.*mulv.d.*test4_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v16u8:.*mulv.b.*test4_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v8u16:.*mulv.h.*test4_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v4u32:.*mulv.w.*test4_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v2u64:.*mulv.d.*test4_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v4f32:.*fmul.w.*test4_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test4_v2f64:.*fmul.d.*test4_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v16i8:.*div_s.b.*test5_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v8i16:.*div_s.h.*test5_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v4i32:.*div_s.w.*test5_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v2i64:.*div_s.d.*test5_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v16u8:.*div_u.b.*test5_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v8u16:.*div_u.h.*test5_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v4u32:.*div_u.w.*test5_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v2u64:.*div_u.d.*test5_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v4f32:.*fdiv.w.*test5_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test5_v2f64:.*fdiv.d.*test5_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v16i8:.*mod_s.b.*test6_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v8i16:.*mod_s.h.*test6_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v4i32:.*mod_s.w.*test6_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v2i64:.*mod_s.d.*test6_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v16u8:.*mod_u.b.*test6_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v8u16:.*mod_u.h.*test6_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v4u32:.*mod_u.w.*test6_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test6_v2u64:.*mod_u.d.*test6_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v16i8:.*subv.b.*test7_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v8i16:.*subv.h.*test7_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v4i32:.*subv.w.*test7_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v2i64:.*subv.d.*test7_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v16u8:.*subv.b.*test7_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v8u16:.*subv.h.*test7_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v4u32:.*subv.w.*test7_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v2u64:.*subv.d.*test7_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v4f32:.*fsub.w.*test7_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test7_v2f64:.*fsub.d.*test7_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v16i8:.*xor.v.*test8_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v8i16:.*xor.v.*test8_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v4i32:.*xor.v.*test8_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v2i64:.*xor.v.*test8_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v16u8:.*xor.v.*test8_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v8u16:.*xor.v.*test8_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v4u32:.*xor.v.*test8_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test8_v2u64:.*xor.v.*test8_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v16i8:.*or.v.*test9_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v8i16:.*or.v.*test9_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v4i32:.*or.v.*test9_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v2i64:.*or.v.*test9_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v16u8:.*or.v.*test9_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v8u16:.*or.v.*test9_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v4u32:.*or.v.*test9_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test9_v2u64:.*or.v.*test9_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v16i8:.*and.v.*test10_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v8i16:.*and.v.*test10_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v4i32:.*and.v.*test10_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v2i64:.*and.v.*test10_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v16u8:.*and.v.*test10_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v8u16:.*and.v.*test10_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v4u32:.*and.v.*test10_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test10_v2u64:.*and.v.*test10_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v16i8:.*nor.v.*test11_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v8i16:.*nor.v.*test11_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v4i32:.*nor.v.*test11_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v2i64:.*nor.v.*test11_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v16u8:.*nor.v.*test11_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v8u16:.*nor.v.*test11_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v4u32:.*nor.v.*test11_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test11_v2u64:.*nor.v.*test11_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v16i8:.*sra.b.*test12_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v8i16:.*sra.h.*test12_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v4i32:.*sra.w.*test12_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v2i64:.*sra.d.*test12_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v16u8:.*srl.b.*test12_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v8u16:.*srl.h.*test12_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v4u32:.*srl.w.*test12_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test12_v2u64:.*srl.d.*test12_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v16i8:.*sll.b.*test13_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v8i16:.*sll.h.*test13_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v4i32:.*sll.w.*test13_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v2i64:.*sll.d.*test13_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v16u8:.*sll.b.*test13_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v8u16:.*sll.h.*test13_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v4u32:.*sll.w.*test13_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test13_v2u64:.*sll.d.*test13_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v16i8:.*ceq.b.*test14_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v8i16:.*ceq.h.*test14_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v4i32:.*ceq.w.*test14_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v2i64:.*ceq.d.*test14_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v16u8:.*ceq.b.*test14_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v8u16:.*ceq.h.*test14_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v4u32:.*ceq.w.*test14_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v2u64:.*ceq.d.*test14_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v4f32:.*fceq.w.*test14_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test14_v2f64:.*fceq.d.*test14_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v16i8:.*ceq.b.*nor.v.*test15_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v8i16:.*ceq.h.*nor.v.*test15_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v4i32:.*ceq.w.*nor.v.*test15_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v2i64:.*ceq.d.*nor.v.*test15_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v16u8:.*ceq.b.*nor.v.*test15_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v8u16:.*ceq.h.*nor.v.*test15_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v4u32:.*ceq.w.*nor.v.*test15_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v2u64:.*ceq.d.*nor.v.*test15_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v4f32:.*fcne.w.*test15_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test15_v2f64:.*fcne.d.*test15_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test16_v16i8:.*clt_s.b.*test16_v16i8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v8i16:.*clt_s.h.*test16_v8i16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v4i32:.*clt_s.w.*test16_v4i32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v2i64:.*clt_s.d.*test16_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v16u8:.*clt_u.b.*test16_v16u8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v8u16:.*clt_u.h.*test16_v8u16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v4u32:.*clt_u.w.*test16_v4u32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v2u64:.*clt_u.d.*test16_v2u64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v4f32:.*fslt.w.*test16_v4f32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v2f64:.*fslt.d.*test16_v2f64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test16_v16i8:.*clt_s.b.*test16_v16i8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v8i16:.*clt_s.h.*test16_v8i16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v4i32:.*clt_s.w.*test16_v4i32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v2i64:.*clt_s.d.*test16_v2i64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v16u8:.*clt_u.b.*test16_v16u8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v8u16:.*clt_u.h.*test16_v8u16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v4u32:.*clt_u.w.*test16_v4u32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v2u64:.*clt_u.d.*test16_v2u64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v4f32:.*fslt.w.*test16_v4f32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test16_v2f64:.*fslt.d.*test16_v2f64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v16i8:.*cle_s.b.*test17_v16i8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v8i16:.*cle_s.h.*test17_v8i16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v4i32:.*cle_s.w.*test17_v4i32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v2i64:.*cle_s.d.*test17_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v16u8:.*cle_u.b.*test17_v16u8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v8u16:.*cle_u.h.*test17_v8u16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v4u32:.*cle_u.w.*test17_v4u32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v2u64:.*cle_u.d.*test17_v2u64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v4f32:.*fsle.w.*test17_v4f32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v2f64:.*fsle.d.*test17_v2f64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test17_v16i8:.*cle_s.b.*test17_v16i8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v8i16:.*cle_s.h.*test17_v8i16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v4i32:.*cle_s.w.*test17_v4i32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v2i64:.*cle_s.d.*test17_v2i64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v16u8:.*cle_u.b.*test17_v16u8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v8u16:.*cle_u.h.*test17_v8u16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v4u32:.*cle_u.w.*test17_v4u32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v2u64:.*cle_u.d.*test17_v2u64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v4f32:.*fsle.w.*test17_v4f32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test17_v2f64:.*fsle.d.*test17_v2f64" 1 { target {! mips64 } } } } */
+/* Note: For reversed comparison the compare instruction is the same with vectors swapped. */
+/* { dg-final { scan-assembler-times "test18_v16i8:.*clt_s.b.*test18_v16i8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v8i16:.*clt_s.h.*test18_v8i16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v4i32:.*clt_s.w.*test18_v4i32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v2i64:.*clt_s.d.*test18_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v16u8:.*clt_u.b.*test18_v16u8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v8u16:.*clt_u.h.*test18_v8u16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v4u32:.*clt_u.w.*test18_v4u32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v2u64:.*clt_u.d.*test18_v2u64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v4f32:.*fslt.w.*test18_v4f32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v2f64:.*fslt.d.*test18_v2f64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test18_v16i8:.*clt_s.b.*test18_v16i8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v8i16:.*clt_s.h.*test18_v8i16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v4i32:.*clt_s.w.*test18_v4i32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v2i64:.*clt_s.d.*test18_v2i64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v16u8:.*clt_u.b.*test18_v16u8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v8u16:.*clt_u.h.*test18_v8u16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v4u32:.*clt_u.w.*test18_v4u32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v2u64:.*clt_u.d.*test18_v2u64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v4f32:.*fslt.w.*test18_v4f32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test18_v2f64:.*fslt.d.*test18_v2f64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v16i8:.*cle_s.b.*test19_v16i8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v8i16:.*cle_s.h.*test19_v8i16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v4i32:.*cle_s.w.*test19_v4i32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v2i64:.*cle_s.d.*test19_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v16u8:.*cle_u.b.*test19_v16u8" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v8u16:.*cle_u.h.*test19_v8u16" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v4u32:.*cle_u.w.*test19_v4u32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v2u64:.*cle_u.d.*test19_v2u64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v4f32:.*fsle.w.*test19_v4f32" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v2f64:.*fsle.d.*test19_v2f64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test19_v16i8:.*cle_s.b.*test19_v16i8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v8i16:.*cle_s.h.*test19_v8i16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v4i32:.*cle_s.w.*test19_v4i32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v2i64:.*cle_s.d.*test19_v2i64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v16u8:.*cle_u.b.*test19_v16u8" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v8u16:.*cle_u.h.*test19_v8u16" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v4u32:.*cle_u.w.*test19_v4u32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v2u64:.*cle_u.d.*test19_v2u64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v4f32:.*fsle.w.*test19_v4f32" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test19_v2f64:.*fsle.d.*test19_v2f64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test20_v16i8:.*addvi.b.*test20_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v8i16:.*addvi.h.*test20_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v4i32:.*addvi.w.*test20_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v2i64:.*addvi.d.*test20_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v16u8:.*addvi.b.*test20_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v8u16:.*addvi.h.*test20_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v4u32:.*addvi.w.*test20_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test20_v2u64:.*addvi.d.*test20_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v16i8:.*subvi.b.*test21_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v8i16:.*subvi.h.*test21_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v4i32:.*subvi.w.*test21_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v2i64:.*subvi.d.*test21_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v16u8:.*subvi.b.*test21_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v8u16:.*subvi.h.*test21_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v4u32:.*subvi.w.*test21_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test21_v2u64:.*subvi.d.*test21_v2u64" 1 } } */
+/* Note: the output varies across optimizations levels but limited to two variants. */
+/* { dg-final { scan-assembler-times "test22_v16i8:.*slli.b.*addv.b.*test22_v16i8|test22_v16i8:.*ldi.b.*37.*mulv.b.*test22_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v8i16:.*slli.h.*addv.h.*test22_v8i16|test22_v8i16:.*ldi.h.*37.*mulv.h.*test22_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v4i32:.*slli.w.*addv.w.*test22_v4i32|test22_v4i32:.*ldi.w.*37.*mulv.w.*test22_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v2i64:.*slli.d.*addv.d.*test22_v2i64|test22_v2i64:.*ldi.d.*37.*mulv.d.*test22_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v16u8:.*slli.b.*addv.b.*test22_v16u8|test22_v16u8:.*ldi.b.*37.*mulv.b.*test22_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v8u16:.*slli.h.*addv.h.*test22_v8u16|test22_v8u16:.*ldi.h.*37.*mulv.h.*test22_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v4u32:.*slli.w.*addv.w.*test22_v4u32|test22_v4u32:.*ldi.w.*37.*mulv.w.*test22_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test22_v2u64:.*slli.d.*addv.d.*test22_v2u64|test22_v2u64:.*ldi.d.*37.*mulv.d.*test22_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v16i8:.*ldi.b\t\\\$w\\d+,37.*div_s.b.*test23_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v8i16:.*ldi.h\t\\\$w\\d+,37.*div_s.h.*test23_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v4i32:.*ldi.w\t\\\$w\\d+,37.*div_s.w.*test23_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v2i64:.*ldi.d\t\\\$w\\d+,37.*div_s.d.*test23_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v16u8:.*ldi.b\t\\\$w\\d+,37.*div_u.b.*test23_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v8u16:.*ldi.h\t\\\$w\\d+,37.*div_u.h.*test23_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v4u32:.*ldi.w\t\\\$w\\d+,37.*div_u.w.*test23_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test23_v2u64:.*ldi.d\t\\\$w\\d+,37.*div_u.d.*test23_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v16i8:.*ldi.b\t\\\$w\\d+,37.*mod_s.b.*test24_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v8i16:.*ldi.h\t\\\$w\\d+,37.*mod_s.h.*test24_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v4i32:.*ldi.w\t\\\$w\\d+,37.*mod_s.w.*test24_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v2i64:.*ldi.d\t\\\$w\\d+,37.*mod_s.d.*test24_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v16u8:.*ldi.b\t\\\$w\\d+,37.*mod_u.b.*test24_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v8u16:.*ldi.h\t\\\$w\\d+,37.*mod_u.h.*test24_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v4u32:.*ldi.w\t\\\$w\\d+,37.*mod_u.w.*test24_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test24_v2u64:.*ldi.d\t\\\$w\\d+,37.*mod_u.d.*test24_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v16i8:.*xori.b.*test25_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v8i16:.*ldi.h\t\\\$w\\d+,37.*xor.v.*test25_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v4i32:.*ldi.w\t\\\$w\\d+,37.*xor.v.*test25_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v2i64:.*ldi.d\t\\\$w\\d+,37.*xor.v.*test25_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v16u8:.*xori.b.*test25_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v8u16:.*ldi.h\t\\\$w\\d+,37.*xor.v.*test25_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v4u32:.*ldi.w\t\\\$w\\d+,37.*xor.v.*test25_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test25_v2u64:.*ldi.d\t\\\$w\\d+,37.*xor.v.*test25_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v16i8:.*ori.b.*test26_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v8i16:.*ldi.h\t\\\$w\\d+,37.*or.v.*test26_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v4i32:.*ldi.w\t\\\$w\\d+,37.*or.v.*test26_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v2i64:.*ldi.d\t\\\$w\\d+,37.*or.v.*test26_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v16u8:.*ori.b.*test26_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v8u16:.*ldi.h\t\\\$w\\d+,37.*or.v.*test26_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v4u32:.*ldi.w\t\\\$w\\d+,37.*or.v.*test26_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test26_v2u64:.*ldi.d\t\\\$w\\d+,37.*or.v.*test26_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v16i8:.*andi.b.*test27_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v8i16:.*ldi.h\t\\\$w\\d+,37.*and.v.*test27_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v4i32:.*ldi.w\t\\\$w\\d+,37.*and.v.*test27_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v2i64:.*ldi.d\t\\\$w\\d+,37.*and.v.*test27_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v16u8:.*andi.b.*test27_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v8u16:.*ldi.h\t\\\$w\\d+,37.*and.v.*test27_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v4u32:.*ldi.w\t\\\$w\\d+,37.*and.v.*test27_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test27_v2u64:.*ldi.d\t\\\$w\\d+,37.*and.v.*test27_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v16i8:.*srai.b.*test28_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v8i16:.*srai.h.*test28_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v4i32:.*srai.w.*test28_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v2i64:.*srai.d.*test28_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v16u8:.*srli.b.*test28_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v8u16:.*srli.h.*test28_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v4u32:.*srli.w.*test28_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test28_v2u64:.*srli.d.*test28_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v16i8:.*slli.b.*test29_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v8i16:.*slli.h.*test29_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v4i32:.*slli.w.*test29_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v2i64:.*slli.d.*test29_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v16u8:.*slli.b.*test29_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v8u16:.*slli.h.*test29_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v4u32:.*slli.w.*test29_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test29_v2u64:.*slli.d.*test29_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v16i8:.*ceqi.b.*test30_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v8i16:.*ceqi.h.*test30_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v4i32:.*ceqi.w.*test30_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v2i64:.*ceqi.d.*test30_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v16u8:.*ceqi.b.*test30_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v8u16:.*ceqi.h.*test30_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v4u32:.*ceqi.w.*test30_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test30_v2u64:.*ceqi.d.*test30_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test31_s_v16i8:.*clti_s.b.*test31_s_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test31_s_v8i16:.*clti_s.h.*test31_s_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test31_s_v4i32:.*clti_s.w.*test31_s_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test31_s_v2i64:.*clti_s.d.*test31_s_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test31_u_v16u8:.*clti_u.b.*test31_u_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test31_u_v8u16:.*clti_u.h.*test31_u_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test31_u_v4u32:.*clti_u.w.*test31_u_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test31_u_v2u64:.*clti_u.d.*test31_u_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test32_s_v16i8:.*clei_s.b.*test32_s_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test32_s_v8i16:.*clei_s.h.*test32_s_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test32_s_v4i32:.*clei_s.w.*test32_s_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test32_s_v2i64:.*clei_s.d.*test32_s_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test32_u_v16u8:.*clei_u.b.*test32_u_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test32_u_v8u16:.*clei_u.h.*test32_u_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test32_u_v4u32:.*clei_u.w.*test32_u_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test32_u_v2u64:.*clei_u.d.*test32_u_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test33_v4f32:.*fadd.w.*test33_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test33_v2f64:.*fadd.d.*test33_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test34_v4f32:.*fsub.w.*test34_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test34_v2f64:.*fsub.d.*test34_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test35_v4f32:.*fmul.w.*test35_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test35_v2f64:.*fmul.d.*test35_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test36_v4f32:.*fdiv.w.*test36_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test36_v2f64:.*fdiv.d.*test36_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v16i8:.*maddv.b.*test37_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v8i16:.*maddv.h.*test37_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v4i32:.*maddv.w.*test37_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v2i64:.*maddv.d.*test37_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v16u8:.*maddv.b.*test37_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v8u16:.*maddv.h.*test37_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v4u32:.*maddv.w.*test37_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v2u64:.*maddv.d.*test37_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v4f32:.*fmadd.w.*test37_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test37_v2f64:.*fmadd.d.*test37_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v16i8:.*msubv.b.*test38_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v8i16:.*msubv.h.*test38_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v4i32:.*msubv.w.*test38_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v2i64:.*msubv.d.*test38_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v16u8:.*msubv.b.*test38_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v8u16:.*msubv.h.*test38_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v4u32:.*msubv.w.*test38_v4u32" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v2u64:.*msubv.d.*test38_v2u64" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v4f32:.*fmsub.w.*test38_v4f32" 1 } } */
+/* { dg-final { scan-assembler-times "test38_v2f64:.*fmsub.d.*test38_v2f64" 1 } } */
+/* { dg-final { scan-assembler-times "test39_v16i8:.*ld.b.*test39_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test39_v8i16:.*ld.h.*test39_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test39_v4i32:.*ld.w.*test39_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test39_v2i64:.*ld.d.*test39_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test40_min_v16i8:.*ldi.b\t\\\$w\\d+,-128.*test40_min_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test40_min_v8i16:.*ldi.h\t\\\$w\\d+,-512.*test40_min_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test40_min_v4i32:.*ldi.w\t\\\$w\\d+,-512.*test40_min_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test40_min_v2i64:.*ldi.d\t\\\$w\\d+,-512.*test40_min_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test40_max_v16i8:.*ldi.b\t\\\$w\\d+,127.*test40_max_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test40_max_v8i16:.*ldi.h\t\\\$w\\d+,511.*test40_max_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test40_max_v4i32:.*ldi.w\t\\\$w\\d+,511.*test40_max_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test40_max_v2i64:.*ldi.d\t\\\$w\\d+,511.*test40_max_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test41_v16i8:.*fill.b.*test41_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test41_v8i16:.*fill.h.*test41_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test41_v4i32:.*fill.w.*test41_v4i32" 1 } } */
+/* Note: fill.d only available on MIPS64, replaced with equivalent on MIPS32. */
+/* { dg-final { scan-assembler-times "test41_v2i64:.*fill.d.*test41_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test41_v2i64:.*fill.w.*insert.w.*test41_v2i64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test42_v16i8:.*insert.b.*test42_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test42_v8i16:.*insert.h.*test42_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test42_v4i32:.*insert.w.*test42_v4i32" 1 } } */
+/* Note: insert.d only available on MIPS64, replaced with equivalent on MIPS32. */
+/* { dg-final { scan-assembler-times "test42_v2i64:.*insert.d.*test42_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test42_v2i64:.*insert.w.*insert.w.*test42_v2i64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test43_v16i8:.*insve.b.*test43_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test43_v8i16:.*insve.h.*test43_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test43_v4i32:.*insve.w.*test43_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test43_v2i64:.*insve.d.*test43_v2i64" 1 } } */
+/* { dg-final { scan-assembler-times "test44_v16i8:.*copy_s.b.*test44_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test44_v8i16:.*copy_s.h.*test44_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test44_v4i32:.*copy_s.w.*test44_v4i32" 1 } } */
+/* Note: copy_s.d on MIPS64 but replaced with equivalent on MIPS32. */
+/* { dg-final { scan-assembler-times "test44_v2i64:.*copy_s.d.*test44_v2i64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test44_v2i64:.*copy_s.w.*copy_s.w.*test44_v2i64" 1 { target {! mips64 } } } } */
+/* Note: two outputs are possible for unsigned return types, copy unsigned or
+ copy signed followed by logical AND. For targets where the width of elements
+ is equal to the register size for that target, logical AND is not emitted/needed. */
+/* { dg-final { scan-assembler-times "test45_v16u8:.*copy_u.b.*test45_v16u8|test45_v16u8:.*copy_s.b.*andi.*0x0?0?ff.*test45_v16u8" 1 } } */
+/* { dg-final { scan-assembler-times "test45_v8u16:.*copy_u.h.*test45_v8u16|test45_v8u16:.*copy_s.h.*andi.*0xffff.*test45_v8u16" 1 } } */
+/* { dg-final { scan-assembler-times "test45_v4u32:.*copy_s.w.*test45_v4u32" 1 } } */
+/* Note: copy_s.d on MIPS64 replaced with equivalent on MIPS32. */
+/* { dg-final { scan-assembler-times "test45_v2u64:.*copy_s.d.*test45_v2u64" 1 { target mips64 } } } */
+/* { dg-final { scan-assembler-times "test45_v2u64:.*copy_s.w.*copy_s.w.*test45_v2u64" 1 { target {! mips64 } } } } */
+/* { dg-final { scan-assembler-times "test46_v16i8:.*st.b.*test46_v16i8" 1 } } */
+/* { dg-final { scan-assembler-times "test46_v8i16:.*st.h.*test46_v8i16" 1 } } */
+/* { dg-final { scan-assembler-times "test46_v4i32:.*st.w.*test46_v4i32" 1 } } */
+/* { dg-final { scan-assembler-times "test46_v2i64:.*st.d.*test46_v2i64" 1 } } */
+
+typedef signed char v16i8 __attribute__ ((vector_size(16)));
+typedef short v8i16 __attribute__ ((vector_size(16)));
+typedef int v4i32 __attribute__ ((vector_size(16)));
+typedef long long v2i64 __attribute__ ((vector_size(16)));
+typedef unsigned char v16u8 __attribute__ ((vector_size(16)));
+typedef unsigned short v8u16 __attribute__ ((vector_size(16)));
+typedef unsigned int v4u32 __attribute__ ((vector_size(16)));
+typedef unsigned long long v2u64 __attribute__ ((vector_size(16)));
+typedef float v4f32 __attribute__ ((vector_size(16)));
+typedef double v2f64 __attribute__ ((vector_size(16)));
+
+float imm_f = 37.0;
+
+#define v16i8_DF b
+#define v8i16_DF h
+#define v4i32_DF w
+#define v2i64_DF d
+#define v16u8_DF b
+#define v8u16_DF h
+#define v4u32_DF w
+#define v2u64_DF d
+
+#define v16i8_IN int
+#define v8i16_IN int
+#define v4i32_IN int
+#define v2i64_IN long long
+#define v16u8_IN int
+#define v8u16_IN int
+#define v4u32_IN int
+#define v2u64_IN long long
+
+#define v16i8_INITV V16
+#define v8i16_INITV V8
+#define v4i32_INITV V4
+#define v2i64_INITV V2
+#define v16u8_INITV V16
+#define v8u16_INITV V8
+#define v4u32_INITV V4
+#define v2u64_INITV V2
+
+#define v16i8_LDI_MIN -128
+#define v16i8_LDI_MAX 127
+#define v8i16_LDI_MIN -512
+#define v8i16_LDI_MAX 511
+#define v4i32_LDI_MIN -512
+#define v4i32_LDI_MAX 511
+#define v2i64_LDI_MIN -512
+#define v2i64_LDI_MAX 511
+
+#define VE2(VALUE) (VALUE), (VALUE)
+#define VE4(VALUE) VE2 (VALUE), VE2 (VALUE)
+#define VE8(VALUE) VE4 (VALUE), VE4 (VALUE)
+#define VE16(VALUE) VE8 (VALUE), VE8 (VALUE)
+
+#define V16(TYPE, VALUE) (TYPE) { VE16 (VALUE) }
+#define V8(TYPE, VALUE) (TYPE) { VE8 (VALUE) }
+#define V4(TYPE, VALUE) (TYPE) { VE4 (VALUE) }
+#define V2(TYPE, VALUE) (TYPE) { VE2 (VALUE) }
+
+#define INIT_VECTOR(TYPE, VALUE) TYPE ## _INITV (TYPE, VALUE)
+
+
+#define DECLARE(TYPE) TYPE TYPE ## _0, TYPE ## _1, TYPE ## _2;
+#define RETURN(TYPE) NOMIPS16 TYPE test0_ ## TYPE () { return TYPE ## _0; }
+#define ASSIGN(TYPE) NOMIPS16 void test1_ ## TYPE (TYPE i) { TYPE ## _1 = i; }
+#define ADD(TYPE) NOMIPS16 TYPE test2_ ## TYPE (TYPE i, TYPE j) { return i + j; }
+#define SUB(TYPE) NOMIPS16 TYPE test3_ ## TYPE (TYPE i, TYPE j) { return i - j; }
+#define MUL(TYPE) NOMIPS16 TYPE test4_ ## TYPE (TYPE i, TYPE j) { return i * j; }
+#define DIV(TYPE) TYPE test5_ ## TYPE (TYPE i, TYPE j) { return i / j; }
+#define MOD(TYPE) TYPE test6_ ## TYPE (TYPE i, TYPE j) { return i % j; }
+#define MINUS(TYPE) TYPE test7_ ## TYPE (TYPE i) { return -i; }
+#define XOR(TYPE) TYPE test8_ ## TYPE (TYPE i, TYPE j) { return i ^ j; }
+#define OR(TYPE) TYPE test9_ ## TYPE (TYPE i, TYPE j) { return i | j; }
+#define AND(TYPE) TYPE test10_ ## TYPE (TYPE i, TYPE j) { return i & j; }
+#define BIT_COMPLEMENT(TYPE) TYPE test11_ ## TYPE (TYPE i) { return ~i; }
+#define SHIFT_RIGHT(TYPE) TYPE test12_ ## TYPE (TYPE i, TYPE j) { return i >> j; }
+#define SHIFT_LEFT(TYPE) TYPE test13_ ## TYPE (TYPE i, TYPE j) { return i << j; }
+#define EQ(TYPE) TYPE test14_ ## TYPE (TYPE i, TYPE j) { return i == j; }
+#define NEQ(TYPE) TYPE test15_ ## TYPE (TYPE i, TYPE j) { return i != j; }
+#define LT(TYPE) TYPE test16_ ## TYPE (TYPE i, TYPE j) { return i < j; }
+#define LEQ(TYPE) TYPE test17_ ## TYPE (TYPE i, TYPE j) { return i <= j; }
+#define GT(TYPE) TYPE test18_ ## TYPE (TYPE i, TYPE j) { return i > j; }
+#define GEQ(TYPE) TYPE test19_ ## TYPE (TYPE i, TYPE j) { return i >= j; }
+
+#define ADD_I(TYPE) TYPE test20_ ## TYPE (TYPE i) { return i + 31; }
+#define SUB_I(TYPE) TYPE test21_ ## TYPE (TYPE i) { return i - 31; }
+#define MUL_I(TYPE) TYPE test22_ ## TYPE (TYPE i) { return i * 37; }
+#define DIV_I(TYPE) TYPE test23_ ## TYPE (TYPE i) { return i / 37; }
+#define MOD_I(TYPE) TYPE test24_ ## TYPE (TYPE i) { return i % 37; }
+#define XOR_I(TYPE) TYPE test25_ ## TYPE (TYPE i) { return i ^ 37; }
+#define OR_I(TYPE) TYPE test26_ ## TYPE (TYPE i) { return i | 37; }
+#define AND_I(TYPE) TYPE test27_ ## TYPE (TYPE i) { return i & 37; }
+#define SHIFT_RIGHT_I(TYPE) TYPE test28_ ## TYPE (TYPE i) { return i >> 3; }
+#define SHIFT_LEFT_I(TYPE) TYPE test29_ ## TYPE (TYPE i) { return i << 3; }
+#define EQ_I(TYPE) TYPE test30_ ## TYPE (TYPE i) { return i == 5; }
+#define LT_S_I(TYPE) TYPE test31_s_ ## TYPE (TYPE i) { return i < 5; }
+#define LT_U_I(TYPE) TYPE test31_u_ ## TYPE (TYPE i) { return i < (unsigned) 5; }
+#define LEQ_S_I(TYPE) TYPE test32_s_ ## TYPE (TYPE i) { return i <= 5; }
+#define LEQ_U_I(TYPE) TYPE test32_u_ ## TYPE (TYPE i) { return i <= (unsigned) 5; }
+
+#define ADD_F(TYPE) TYPE test33_ ## TYPE (TYPE i) { return i + imm_f; }
+#define SUB_F(TYPE) TYPE test34_ ## TYPE (TYPE i) { return i - imm_f; }
+#define MUL_F(TYPE) TYPE test35_ ## TYPE (TYPE i) { return i * imm_f; }
+#define DIV_F(TYPE) TYPE test36_ ## TYPE (TYPE i) { return i / imm_f; }
+
+#define MADD(TYPE) TYPE test37_ ## TYPE (TYPE i, TYPE j, TYPE k) { return i * j + k; }
+#define MSUB(TYPE) TYPE test38_ ## TYPE (TYPE i, TYPE j, TYPE k) { return k - i * j; }
+
+/* MSA Load/Store and Move instructions */
+#define LOAD_V(TYPE) TYPE test39_ ## TYPE (TYPE *i) { return *i; }
+#define LOAD_I_MIN(TYPE) TYPE test40_min_ ## TYPE (TYPE *i) { return INIT_VECTOR (TYPE, TYPE ## _LDI_MIN); }
+#define LOAD_I_MAX(TYPE) TYPE test40_max_ ## TYPE (TYPE *i) { return INIT_VECTOR (TYPE, TYPE ## _LDI_MAX); }
+#define FILL(TYPE) TYPE test41_ ## TYPE (TYPE ## _IN i) { return INIT_VECTOR (TYPE, i); }
+#define INSERT(TYPE) TYPE test42_ ## TYPE (TYPE ## _IN i) { TYPE a = INIT_VECTOR (TYPE, 0); a[1] = i; return a; }
+#define INSVE(TYPE) TYPE test43_ ## TYPE (TYPE i) { TYPE a = INIT_VECTOR (TYPE, 0); a[1] = i[0]; return a; }
+#define COPY_S(TYPE) TYPE ## _IN test44_ ## TYPE (TYPE i) { return i[1]; }
+#define COPY_U(TYPE) TYPE ## _IN test45_ ## TYPE (TYPE i) { return i[1]; }
+#define STORE_V(TYPE) void test46_ ## TYPE (TYPE i) { TYPE ## _0 = i; }
+
+#define ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES(FUNC) \
+ FUNC (v16i8) \
+ FUNC (v8i16) \
+ FUNC (v4i32) \
+ FUNC (v2i64)
+
+#define ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES(FUNC) \
+ FUNC (v16u8) \
+ FUNC (v8u16) \
+ FUNC (v4u32) \
+ FUNC (v2u64)
+
+#define ITERATE_FOR_ALL_INT_VECTOR_TYPES(FUNC) \
+ ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (FUNC) \
+ ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (FUNC)
+
+#define ITERATE_FOR_ALL_INT_TYPES(FUNC) \
+ ITERATE_FOR_ALL_INT_VECTOR_TYPES (FUNC)
+
+#define ITERATE_FOR_ALL_REAL_VECTOR_TYPES(FUNC) \
+ FUNC (v4f32) \
+ FUNC (v2f64) \
+
+#define ITERATE_FOR_ALL_REAL_SCALAR_TYPES(FUNC) \
+ FUNC (f64) \
+ FUNC (f32)
+
+#define ITERATE_FOR_ALL_REAL_TYPES(FUNC) \
+ ITERATE_FOR_ALL_REAL_VECTOR_TYPES (FUNC)
+
+#define ITERATE_FOR_ALL_TYPES(FUNC) \
+ ITERATE_FOR_ALL_INT_TYPES (FUNC) \
+ ITERATE_FOR_ALL_REAL_TYPES (FUNC)
+
+ITERATE_FOR_ALL_TYPES (ADD)
+ITERATE_FOR_ALL_TYPES (SUB)
+ITERATE_FOR_ALL_TYPES (MUL)
+ITERATE_FOR_ALL_TYPES (DIV)
+ITERATE_FOR_ALL_INT_TYPES (MOD)
+ITERATE_FOR_ALL_INT_TYPES (XOR)
+ITERATE_FOR_ALL_INT_TYPES (OR)
+ITERATE_FOR_ALL_INT_TYPES (AND)
+ITERATE_FOR_ALL_INT_TYPES (SHIFT_RIGHT)
+ITERATE_FOR_ALL_INT_TYPES (SHIFT_LEFT)
+ITERATE_FOR_ALL_TYPES (MINUS)
+ITERATE_FOR_ALL_INT_TYPES (BIT_COMPLEMENT)
+ITERATE_FOR_ALL_TYPES (MADD)
+ITERATE_FOR_ALL_TYPES (MSUB)
+
+ITERATE_FOR_ALL_TYPES (DECLARE)
+ITERATE_FOR_ALL_TYPES (RETURN)
+ITERATE_FOR_ALL_TYPES (ASSIGN)
+ITERATE_FOR_ALL_INT_TYPES (ADD_I)
+ITERATE_FOR_ALL_INT_TYPES (SUB_I)
+ITERATE_FOR_ALL_INT_TYPES (MUL_I)
+ITERATE_FOR_ALL_INT_TYPES (DIV_I)
+ITERATE_FOR_ALL_INT_TYPES (MOD_I)
+ITERATE_FOR_ALL_INT_TYPES (XOR_I)
+ITERATE_FOR_ALL_INT_TYPES (OR_I)
+ITERATE_FOR_ALL_INT_TYPES (AND_I)
+ITERATE_FOR_ALL_INT_TYPES (SHIFT_RIGHT_I)
+ITERATE_FOR_ALL_INT_TYPES (SHIFT_LEFT_I)
+ITERATE_FOR_ALL_REAL_TYPES (ADD_F)
+ITERATE_FOR_ALL_REAL_TYPES (SUB_F)
+ITERATE_FOR_ALL_REAL_TYPES (MUL_F)
+ITERATE_FOR_ALL_REAL_TYPES (DIV_F)
+ITERATE_FOR_ALL_TYPES (EQ)
+ITERATE_FOR_ALL_TYPES (EQ_I)
+ITERATE_FOR_ALL_TYPES (NEQ)
+ITERATE_FOR_ALL_TYPES (LT)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LT_S_I)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (LT_U_I)
+ITERATE_FOR_ALL_TYPES (LEQ)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LEQ_S_I)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (LEQ_U_I)
+ITERATE_FOR_ALL_TYPES (GT)
+ITERATE_FOR_ALL_TYPES (GEQ)
+
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LOAD_V)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LOAD_I_MIN)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (LOAD_I_MAX)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (FILL)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (INSERT)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (INSVE)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (COPY_S)
+ITERATE_FOR_ALL_UNSIGNED_INT_VECTOR_TYPES (COPY_U)
+ITERATE_FOR_ALL_SIGNED_INT_VECTOR_TYPES (STORE_V)
diff --git a/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-0.c b/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-0.c
new file mode 100644
index 00000000000..dea0611e8fc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-0.c
@@ -0,0 +1,22 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler {#before\M.*\mmflr\M} } } */
+
+/* This tests if shrink-wrapping for separate components works.
+
+ r20 (a callee-saved register) is forced live at the start, so that we
+ get it saved in a prologue at the start of the function.
+ The link register only needs to be saved if x is non-zero; without
+ separate shrink-wrapping it would however be saved in the one prologue.
+ The test tests if the mflr insn ends up behind the prologue. */
+
+void g(void);
+
+void f(int x)
+{
+ register int r20 asm("20") = x;
+ asm("#before" : : "r"(r20));
+ if (x)
+ g();
+ asm(""); // no tailcall of g
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-1.c b/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-1.c
new file mode 100644
index 00000000000..735b606e66d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler {\mmflr\M.*\mbl\M.*\mmflr\M.*\mbl\M} } } */
+
+/* This tests if shrink-wrapping for separate components creates more
+ than one prologue when that is useful. In this case, it saves the
+ link register before both the call to g and the call to h. */
+
+void g(void) __attribute__((noreturn));
+void h(void) __attribute__((noreturn));
+
+void f(int x)
+{
+ if (x == 42)
+ g();
+ if (x == 31)
+ h();
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-2.c b/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-2.c
new file mode 100644
index 00000000000..b22564a51c5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/shrink-wrap-separate-2.c
@@ -0,0 +1,26 @@
+/* { dg-do compile { target powerpc*-*-* } } */
+/* { dg-options "-O2" } */
+/* { dg-final { scan-assembler {\mmflr\M.*\mbl\M.*\mmflr\M.*\mbl\M} } } */
+
+/* This tests if shrink-wrapping for separate components puts a prologue
+ inside a loop when that is useful. In this case, it saves the link
+ register before each call: both calls happen with probability .10,
+ so saving the link register happens with .80 per execution of f on
+ average, which is smaller than 1 which you would get if you saved
+ it outside the loop. */
+
+int *a;
+void g(void);
+
+void f(int x)
+{
+ int j;
+ for (j = 0; j < 4; j++) {
+ if (__builtin_expect(a[j], 0))
+ g();
+ asm("#" : : : "memory");
+ if (__builtin_expect(a[j], 0))
+ g();
+ a[j]++;
+ }
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/warn-1.c b/gcc/testsuite/gcc.target/powerpc/warn-1.c
index f4cb4372fdb..f345106678a 100644
--- a/gcc/testsuite/gcc.target/powerpc/warn-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/warn-1.c
@@ -3,7 +3,7 @@
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-O -mvsx -mno-altivec" } */
-/* { dg-warning "-mvsx and -mno-altivec are incompatible" "" { target *-*-* } 1 } */
+/* { dg-warning "-mvsx and -mno-altivec are incompatible" "" { target *-*-* } 0 } */
double
foo (double *x, double *y)
diff --git a/gcc/testsuite/gcc.target/powerpc/warn-2.c b/gcc/testsuite/gcc.target/powerpc/warn-2.c
index 45f490c057b..02e8268f854 100644
--- a/gcc/testsuite/gcc.target/powerpc/warn-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/warn-2.c
@@ -4,7 +4,7 @@
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
/* { dg-options "-O -mcpu=power7 -mno-altivec" } */
-/* { dg-warning "-mno-altivec disables vsx" "" { target *-*-* } 1 } */
+/* { dg-warning "-mno-altivec disables vsx" "" { target *-*-* } 0 } */
double
foo (double *x, double *y)
diff --git a/gcc/testsuite/gnat.dg/debug8.adb b/gcc/testsuite/gnat.dg/debug8.adb
new file mode 100644
index 00000000000..fabcc22d06f
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/debug8.adb
@@ -0,0 +1,29 @@
+-- { dg-do compile }
+-- { dg-options "-cargs -g -fgnat-encodings=minimal -dA" }
+-- { dg-final { scan-assembler-not "DW_OP_const4u" } }
+-- { dg-final { scan-assembler-not "DW_OP_const8u" } }
+
+-- The DW_AT_byte_size attribute DWARF expression for the
+-- DW_TAG_structure_type DIE that describes Rec_Type contains the -4u literal.
+-- Check that it is not created using an inefficient encoding (DW_OP_const1s
+-- is expected).
+
+procedure Debug8 is
+
+ type Rec_Type (I : Integer) is record
+ B : Boolean;
+ case I is
+ when 0 =>
+ null;
+ when 1 .. 10 =>
+ C : Character;
+ when others =>
+ N : Natural;
+ end case;
+ end record;
+
+ R : access Rec_Type := null;
+
+begin
+ null;
+end Debug8;
diff --git a/gcc/testsuite/gnat.dg/debug9.adb b/gcc/testsuite/gnat.dg/debug9.adb
new file mode 100644
index 00000000000..a15069faf21
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/debug9.adb
@@ -0,0 +1,53 @@
+-- The aim of this test is to check that Ada types appear in the proper
+-- context in the debug info.
+--
+-- Checking this directly would be really tedious just scanning for assembly
+-- lines, so instead we rely on DWARFv4's .debug_types sections, which must be
+-- created only for global-scope types. Checking the number of .debug_types is
+-- some hackish way to check that types are output in the proper context (i.e.
+-- at global or local scope).
+--
+-- { dg-options "-g -gdwarf-4 -cargs -fdebug-types-section -dA" }
+-- { dg-final { scan-assembler-times "\\(DIE \\(0x\[a-f0-9\]*\\) DW_TAG_type_unit\\)" 0 } }
+
+procedure Debug9 is
+ type Array_Type is array (Natural range <>) of Integer;
+ type Record_Type (L1, L2 : Natural) is record
+ I1 : Integer;
+ A1 : Array_Type (1 .. L1);
+ I2 : Integer;
+ A2 : Array_Type (1 .. L2);
+ I3 : Integer;
+ end record;
+
+ function Get (L1, L2 : Natural) return Record_Type is
+ Result : Record_Type (L1, L2);
+ begin
+ Result.I1 := 1;
+ for I in Result.A1'Range loop
+ Result.A1 (I) := I;
+ end loop;
+ Result.I2 := 2;
+ for I in Result.A2'Range loop
+ Result.A2 (I) := I;
+ end loop;
+ Result.I3 := 3;
+ return Result;
+ end Get;
+
+ R1 : Record_Type := Get (0, 0);
+ R2 : Record_Type := Get (1, 0);
+ R3 : Record_Type := Get (0, 1);
+ R4 : Record_Type := Get (2, 2);
+
+ procedure Process (R : Record_Type) is
+ begin
+ null;
+ end Process;
+
+begin
+ Process (R1);
+ Process (R2);
+ Process (R3);
+ Process (R4);
+end Debug9;
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 7eb543dbdbf..201ed4b2b02 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -1626,6 +1626,42 @@ proc check_mips_loongson_hw_available { } {
}]
}
+# Return 1 if the target supports executing MIPS MSA instructions, 0
+# otherwise. Cache the result.
+
+proc check_mips_msa_hw_available { } {
+ return [check_cached_effective_target mips_msa_hw_available {
+ # If this is not the right target then we can skip the test.
+ if { !([istarget mips*-*-*]) } {
+ expr 0
+ } else {
+ check_runtime_nocache mips_msa_hw_available {
+ #if !defined(__mips_msa)
+ #error "MSA NOT AVAIL"
+ #else
+ #if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2))
+ #error "MSA NOT AVAIL FOR ISA REV < 2"
+ #endif
+ #if !defined(__mips_hard_float)
+ #error "MSA HARD_FLOAT REQUIRED"
+ #endif
+ #if __mips_fpr != 64
+ #error "MSA 64-bit FPR REQUIRED"
+ #endif
+ #include <msa.h>
+
+ int main()
+ {
+ v8i16 v = __builtin_msa_ldi_h (0);
+ v[0] = 0;
+ return v[0];
+ }
+ #endif
+ } "-mmsa"
+ }
+ }]
+}
+
# Return 1 if the target supports executing SSE2 instructions, 0
# otherwise. Cache the result.
@@ -1750,6 +1786,16 @@ proc check_effective_target_mips_loongson_runtime { } {
return 0
}
+# Return 1 if the target supports running MIPS MSA executables, 0 otherwise.
+
+proc check_effective_target_mips_msa_runtime { } {
+ if { [check_effective_target_mips_msa]
+ && [check_mips_msa_hw_available] } {
+ return 1
+ }
+ return 0
+}
+
# Return 1 if the target supports running AVX executables, 0 otherwise.
proc check_effective_target_avx_runtime { } {
@@ -2767,7 +2813,8 @@ proc check_effective_target_vect_int { } {
|| [istarget aarch64*-*-*]
|| [check_effective_target_arm32]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mips_loongson]) } {
+ && ([et-is-effective-target mips_loongson]
+ || [et-is-effective-target mips_msa])) } {
set et_vect_int_saved($et_index) 1
}
}
@@ -2793,7 +2840,9 @@ proc check_effective_target_vect_intfloat_cvt { } {
|| ([istarget powerpc*-*-*]
&& ![istarget powerpc-*-linux*paired*])
|| ([istarget arm*-*-*]
- && [check_effective_target_arm_neon_ok])} {
+ && [check_effective_target_arm_neon_ok])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_intfloat_cvt_saved($et_index) 1
}
}
@@ -2834,7 +2883,9 @@ proc check_effective_target_vect_uintfloat_cvt { } {
&& ![istarget powerpc-*-linux*paired*])
|| [istarget aarch64*-*-*]
|| ([istarget arm*-*-*]
- && [check_effective_target_arm_neon_ok])} {
+ && [check_effective_target_arm_neon_ok])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_uintfloat_cvt_saved($et_index) 1
}
}
@@ -2861,7 +2912,9 @@ proc check_effective_target_vect_floatint_cvt { } {
|| ([istarget powerpc*-*-*]
&& ![istarget powerpc-*-linux*paired*])
|| ([istarget arm*-*-*]
- && [check_effective_target_arm_neon_ok])} {
+ && [check_effective_target_arm_neon_ok])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_floatint_cvt_saved($et_index) 1
}
}
@@ -2886,7 +2939,9 @@ proc check_effective_target_vect_floatuint_cvt { } {
if { ([istarget powerpc*-*-*]
&& ![istarget powerpc-*-linux*paired*])
|| ([istarget arm*-*-*]
- && [check_effective_target_arm_neon_ok])} {
+ && [check_effective_target_arm_neon_ok])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_floatuint_cvt_saved($et_index) 1
}
}
@@ -4152,6 +4207,15 @@ proc add_options_for_mpaired_single { flags } {
return "$flags -mpaired-single"
}
+# Add the options needed for MIPS SIMD Architecture.
+
+proc add_options_for_mips_msa { flags } {
+ if { ! [check_effective_target_mips_msa] } {
+ return "$flags"
+ }
+ return "$flags -mmsa"
+}
+
# Return 1 if this a Loongson-2E or -2F target using an ABI that supports
# the Loongson vector modes.
@@ -4172,6 +4236,37 @@ proc check_effective_target_mips_nanlegacy { } {
} "-mnan=legacy"]
}
+# Return 1 if an MSA program can be compiled to object
+
+proc check_effective_target_mips_msa { } {
+ if ![check_effective_target_nomips16] {
+ return 0
+ }
+ return [check_no_compiler_messages msa object {
+ #if !defined(__mips_msa)
+ #error "MSA NOT AVAIL"
+ #else
+ #if !(((__mips == 64) || (__mips == 32)) && (__mips_isa_rev >= 2))
+ #error "MSA NOT AVAIL FOR ISA REV < 2"
+ #endif
+ #if !defined(__mips_hard_float)
+ #error "MSA HARD_FLOAT REQUIRED"
+ #endif
+ #if __mips_fpr != 64
+ #error "MSA 64-bit FPR REQUIRED"
+ #endif
+ #include <msa.h>
+
+ int main()
+ {
+ v8i16 v = __builtin_msa_ldi_h (1);
+
+ return v[0];
+ }
+ #endif
+ } "-mmsa" ]
+}
+
# Return 1 if this is an ARM target that adheres to the ABI for the ARM
# Architecture.
@@ -4686,7 +4781,8 @@ proc check_effective_target_vect_shift { } {
|| [istarget aarch64*-*-*]
|| [check_effective_target_arm32]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mips_loongson]) } {
+ && ([et-is-effective-target mips_msa]
+ || [et-is-effective-target mips_loongson])) } {
set et_vect_shift_saved($et_index) 1
}
}
@@ -4749,7 +4845,9 @@ proc check_effective_target_vect_shift_char { } {
set et_vect_shift_char_saved($et_index) 0
if { ([istarget powerpc*-*-*]
&& ![istarget powerpc-*-linux*paired*])
- || [check_effective_target_arm32] } {
+ || [check_effective_target_arm32]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_shift_char_saved($et_index) 1
}
}
@@ -4770,7 +4868,9 @@ proc check_effective_target_vect_long { } {
&& [check_effective_target_ilp32])
|| [check_effective_target_arm32]
|| ([istarget sparc*-*-*] && [check_effective_target_ilp32])
- || [istarget aarch64*-*-*] } {
+ || [istarget aarch64*-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set answer 1
} else {
set answer 0
@@ -4799,6 +4899,8 @@ proc check_effective_target_vect_float { } {
|| [istarget mipsisa64*-*-*]
|| [istarget ia64-*-*]
|| [istarget aarch64*-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa])
|| [check_effective_target_arm32] } {
set et_vect_float_saved($et_index) 1
}
@@ -4832,9 +4934,10 @@ proc check_effective_target_vect_double { } {
} else {
set et_vect_double_saved($et_index) 0
}
- } elseif { [istarget spu-*-*] } {
- set et_vect_double_saved($et_index) 1
- } elseif { [istarget powerpc*-*-*] && [check_vsx_hw_available] } {
+ } elseif { [istarget spu-*-*]
+ || ([istarget powerpc*-*-*] && [check_vsx_hw_available])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_double_saved($et_index) 1
}
}
@@ -4856,7 +4959,9 @@ proc check_effective_target_vect_long_long { } {
verbose "check_effective_target_vect_long_long: using cached result" 2
} else {
set et_vect_long_long_saved($et_index) 0
- if { [istarget i?86-*-*] || [istarget x86_64-*-*] } {
+ if { [istarget i?86-*-*] || [istarget x86_64-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_long_long_saved($et_index) 1
}
}
@@ -4955,7 +5060,8 @@ proc check_effective_target_vect_perm { } {
|| [istarget spu-*-*]
|| [istarget i?86-*-*] || [istarget x86_64-*-*]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mpaired_single]) } {
+ && ([et-is-effective-target mpaired_single]
+ || [et-is-effective-target mips_msa])) } {
set et_vect_perm_saved($et_index) 1
}
}
@@ -4982,7 +5088,9 @@ proc check_effective_target_vect_perm_byte { } {
|| ([istarget aarch64*-*-*]
&& [is-effective-target aarch64_little_endian])
|| [istarget powerpc*-*-*]
- || [istarget spu-*-*] } {
+ || [istarget spu-*-*]
+ || ([istarget mips-*.*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_perm_byte_saved($et_index) 1
}
}
@@ -5009,7 +5117,9 @@ proc check_effective_target_vect_perm_short { } {
|| ([istarget aarch64*-*-*]
&& [is-effective-target aarch64_little_endian])
|| [istarget powerpc*-*-*]
- || [istarget spu-*-*] } {
+ || [istarget spu-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_perm_short_saved($et_index) 1
}
}
@@ -5308,7 +5418,9 @@ proc check_effective_target_vect_sdot_qi { } {
verbose "check_effective_target_vect_sdot_qi: using cached result" 2
} else {
set et_vect_sdot_qi_saved($et_index) 0
- if { [istarget ia64-*-*] } {
+ if { [istarget ia64-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_udot_qi_saved 1
}
}
@@ -5331,7 +5443,9 @@ proc check_effective_target_vect_udot_qi { } {
} else {
set et_vect_udot_qi_saved($et_index) 0
if { [istarget powerpc*-*-*]
- || [istarget ia64-*-*] } {
+ || [istarget ia64-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_udot_qi_saved($et_index) 1
}
}
@@ -5355,7 +5469,9 @@ proc check_effective_target_vect_sdot_hi { } {
set et_vect_sdot_hi_saved($et_index) 0
if { ([istarget powerpc*-*-*] && ![istarget powerpc-*-linux*paired*])
|| [istarget ia64-*-*]
- || [istarget i?86-*-*] || [istarget x86_64-*-*] } {
+ || [istarget i?86-*-*] || [istarget x86_64-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_sdot_hi_saved($et_index) 1
}
}
@@ -5377,7 +5493,9 @@ proc check_effective_target_vect_udot_hi { } {
verbose "check_effective_target_vect_udot_hi: using cached result" 2
} else {
set et_vect_udot_hi_saved($et_index) 0
- if { ([istarget powerpc*-*-*] && ![istarget powerpc-*-linux*paired*]) } {
+ if { ([istarget powerpc*-*-*] && ![istarget powerpc-*-linux*paired*])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_udot_hi_saved($et_index) 1
}
}
@@ -5427,7 +5545,9 @@ proc check_effective_target_vect_pack_trunc { } {
|| [istarget aarch64*-*-*]
|| [istarget spu-*-*]
|| ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]
- && [check_effective_target_arm_little_endian]) } {
+ && [check_effective_target_arm_little_endian])
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_pack_trunc_saved($et_index) 1
}
}
@@ -5454,6 +5574,8 @@ proc check_effective_target_vect_unpack { } {
|| [istarget spu-*-*]
|| [istarget ia64-*-*]
|| [istarget aarch64*-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa])
|| ([istarget arm*-*-*] && [check_effective_target_arm_neon_ok]
&& [check_effective_target_arm_little_endian]) } {
set et_vect_unpack_saved($et_index) 1
@@ -5524,7 +5646,8 @@ proc check_effective_target_vect_hw_misalign { } {
set et_vect_hw_misalign_saved($et_index) 0
if { [istarget i?86-*-*] || [istarget x86_64-*-*]
|| ([istarget powerpc*-*-*] && [check_p8vector_hw_available])
- || [istarget aarch64*-*-*] } {
+ || [istarget aarch64*-*-*]
+ || ([istarget mips*-*-*] && [et-is-effective-target mips_msa]) } {
set et_vect_hw_misalign_saved($et_index) 1
}
}
@@ -5695,6 +5818,8 @@ proc check_effective_target_vect_condition { } {
|| [istarget ia64-*-*]
|| [istarget i?86-*-*] || [istarget x86_64-*-*]
|| [istarget spu-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa])
|| ([istarget arm*-*-*]
&& [check_effective_target_arm_neon_ok]) } {
set et_vect_cond_saved($et_index) 1
@@ -5719,7 +5844,9 @@ proc check_effective_target_vect_cond_mixed { } {
set et_vect_cond_mixed_saved($et_index) 0
if { [istarget i?86-*-*] || [istarget x86_64-*-*]
|| [istarget aarch64*-*-*]
- || [istarget powerpc*-*-*] } {
+ || [istarget powerpc*-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_cond_mixed_saved($et_index) 1
}
}
@@ -5742,8 +5869,10 @@ proc check_effective_target_vect_char_mult { } {
if { [istarget aarch64*-*-*]
|| [istarget ia64-*-*]
|| [istarget i?86-*-*] || [istarget x86_64-*-*]
- || [check_effective_target_arm32]
- || [check_effective_target_powerpc_altivec] } {
+ || [check_effective_target_arm32]
+ || [check_effective_target_powerpc_altivec]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa]) } {
set et_vect_char_mult_saved($et_index) 1
}
}
@@ -5770,7 +5899,8 @@ proc check_effective_target_vect_short_mult { } {
|| [istarget aarch64*-*-*]
|| [check_effective_target_arm32]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mips_loongson]) } {
+ && ([et-is-effective-target mips_msa]
+ || [et-is-effective-target mips_loongson])) } {
set et_vect_short_mult_saved($et_index) 1
}
}
@@ -5795,6 +5925,8 @@ proc check_effective_target_vect_int_mult { } {
|| [istarget i?86-*-*] || [istarget x86_64-*-*]
|| [istarget ia64-*-*]
|| [istarget aarch64*-*-*]
+ || ([istarget mips*-*-*]
+ && [et-is-effective-target mips_msa])
|| [check_effective_target_arm32] } {
set et_vect_int_mult_saved($et_index) 1
}
@@ -5823,7 +5955,8 @@ proc check_effective_target_vect_extract_even_odd { } {
|| [istarget ia64-*-*]
|| [istarget spu-*-*]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mpaired_single]) } {
+ && ([et-is-effective-target mips_msa]
+ || [et-is-effective-target mpaired_single])) } {
set et_vect_extract_even_odd_saved($et_index) 1
}
}
@@ -5850,7 +5983,8 @@ proc check_effective_target_vect_interleave { } {
|| [istarget ia64-*-*]
|| [istarget spu-*-*]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mpaired_single]) } {
+ && ([et-is-effective-target mpaired_single]
+ || [et-is-effective-target mips_msa])) } {
set et_vect_interleave_saved($et_index) 1
}
}
@@ -7513,6 +7647,9 @@ proc check_vect_support_and_set_flags { } {
}
if { [check_effective_target_mips_loongson] } {
lappend EFFECTIVE_TARGETS mips_loongson
+ }
+ if { [check_effective_target_mips_msa] } {
+ lappend EFFECTIVE_TARGETS mips_msa
}
return [llength $EFFECTIVE_TARGETS]
} elseif [istarget sparc*-*-*] {
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index cd1cbd28325..0f940cc56b5 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -1035,15 +1035,6 @@ substitute_and_fold_dom_walker::before_dom_children (basic_block bb)
{
bool did_replace;
gimple *stmt = gsi_stmt (i);
- enum gimple_code code = gimple_code (stmt);
-
- /* Ignore ASSERT_EXPRs. They are used by VRP to generate
- range information for names and they are discarded
- afterwards. */
-
- if (code == GIMPLE_ASSIGN
- && TREE_CODE (gimple_assign_rhs1 (stmt)) == ASSERT_EXPR)
- continue;
/* No point propagating into a stmt we have a value for we
can propagate into all uses. Mark it for removal instead. */
@@ -1056,7 +1047,10 @@ substitute_and_fold_dom_walker::before_dom_children (basic_block bb)
&& sprime != lhs
&& may_propagate_copy (lhs, sprime)
&& !stmt_could_throw_p (stmt)
- && !gimple_has_side_effects (stmt))
+ && !gimple_has_side_effects (stmt)
+ /* We have to leave ASSERT_EXPRs around for jump-threading. */
+ && (!is_gimple_assign (stmt)
+ || gimple_assign_rhs_code (stmt) != ASSERT_EXPR))
{
stmts_to_remove.safe_push (stmt);
continue;
diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c
index 76663654815..7b844ddd83d 100644
--- a/gcc/tree-ssa-reassoc.c
+++ b/gcc/tree-ssa-reassoc.c
@@ -2994,12 +2994,26 @@ optimize_range_tests_var_bound (enum tree_code opcode, int first, int length,
}
else
{
- g = gimple_build_assign (make_ssa_name (TREE_TYPE (ranges[i].exp)),
- ccode, rhs1, rhs2);
+ operand_entry *oe = (*ops)[ranges[i].idx];
+ tree ctype = oe->op ? TREE_TYPE (oe->op) : boolean_type_node;
+ if (!INTEGRAL_TYPE_P (ctype)
+ || (TREE_CODE (ctype) != BOOLEAN_TYPE
+ && TYPE_PRECISION (ctype) != 1))
+ ctype = boolean_type_node;
+ g = gimple_build_assign (make_ssa_name (ctype), ccode, rhs1, rhs2);
gimple_set_uid (g, uid);
gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+ if (oe->op && ctype != TREE_TYPE (oe->op))
+ {
+ g = gimple_build_assign (make_ssa_name (TREE_TYPE (oe->op)),
+ NOP_EXPR, gimple_assign_lhs (g));
+ gimple_set_uid (g, uid);
+ gsi_insert_before (&gsi, g, GSI_SAME_STMT);
+ }
ranges[i].exp = gimple_assign_lhs (g);
- (*ops)[ranges[i].idx]->op = ranges[i].exp;
+ oe->op = ranges[i].exp;
+ ranges[i].low = build_zero_cst (TREE_TYPE (ranges[i].exp));
+ ranges[i].high = ranges[i].low;
}
ranges[i].strict_overflow_p = false;
operand_entry *oe = (*ops)[ranges[*idx].idx];
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 8a129c6d704..8d5fa66e084 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -6894,9 +6894,9 @@ remove_range_assertions (void)
imm_use_iterator iter;
var = ASSERT_EXPR_VAR (rhs);
- gcc_assert (TREE_CODE (var) == SSA_NAME);
- if (!POINTER_TYPE_P (TREE_TYPE (lhs))
+ if (TREE_CODE (var) == SSA_NAME
+ && !POINTER_TYPE_P (TREE_TYPE (lhs))
&& SSA_NAME_RANGE_INFO (lhs))
{
if (is_unreachable == -1)
@@ -6928,8 +6928,11 @@ remove_range_assertions (void)
/* Propagate the RHS into every use of the LHS. */
FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
- FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
- SET_USE (use_p, var);
+ {
+ FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
+ SET_USE (use_p, var);
+ update_stmt (use_stmt);
+ }
/* And finally, remove the copy, it is not needed. */
gsi_remove (&si, true);
@@ -9093,9 +9096,7 @@ simplify_div_or_mod_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
{
/* If op0 already has the range op0 % op1 has,
then TRUNC_MOD_EXPR won't change anything. */
- gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
- gimple_assign_set_rhs_from_tree (&gsi, op0);
- update_stmt (stmt);
+ gimple_assign_set_rhs_from_tree (gsi, op0);
return true;
}
}
@@ -9171,7 +9172,7 @@ simplify_div_or_mod_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
disjoint. Return true if we do simplify. */
static bool
-simplify_min_or_max_using_ranges (gimple *stmt)
+simplify_min_or_max_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
{
tree op0 = gimple_assign_rhs1 (stmt);
tree op1 = gimple_assign_rhs2 (stmt);
@@ -9206,10 +9207,7 @@ simplify_min_or_max_using_ranges (gimple *stmt)
VAL == FALSE -> OP0 > or >= op1. */
tree res = ((gimple_assign_rhs_code (stmt) == MAX_EXPR)
== integer_zerop (val)) ? op0 : op1;
- gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
- gimple_assign_set_rhs_from_tree (&gsi, res);
- update_stmt (stmt);
- fold_stmt (&gsi, follow_single_use_edges);
+ gimple_assign_set_rhs_from_tree (gsi, res);
return true;
}
@@ -9221,7 +9219,7 @@ simplify_min_or_max_using_ranges (gimple *stmt)
ABS_EXPR into a NEGATE_EXPR. */
static bool
-simplify_abs_using_ranges (gimple *stmt)
+simplify_abs_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
{
tree op = gimple_assign_rhs1 (stmt);
value_range *vr = get_value_range (op);
@@ -9262,8 +9260,7 @@ simplify_abs_using_ranges (gimple *stmt)
else
gimple_assign_set_rhs_code (stmt, NEGATE_EXPR);
update_stmt (stmt);
- gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
- fold_stmt (&gsi, follow_single_use_edges);
+ fold_stmt (gsi, follow_single_use_edges);
return true;
}
}
@@ -9844,7 +9841,7 @@ simplify_switch_using_ranges (gswitch *stmt)
/* Simplify an integral conversion from an SSA name in STMT. */
static bool
-simplify_conversion_using_ranges (gimple *stmt)
+simplify_conversion_using_ranges (gimple_stmt_iterator *gsi, gimple *stmt)
{
tree innerop, middleop, finaltype;
gimple *def_stmt;
@@ -9914,8 +9911,7 @@ simplify_conversion_using_ranges (gimple *stmt)
return false;
gimple_assign_set_rhs1 (stmt, innerop);
- gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
- fold_stmt (&gsi, follow_single_use_edges);
+ fold_stmt (gsi, follow_single_use_edges);
return true;
}
@@ -10218,7 +10214,7 @@ simplify_stmt_using_ranges (gimple_stmt_iterator *gsi)
case ABS_EXPR:
if (TREE_CODE (rhs1) == SSA_NAME
&& INTEGRAL_TYPE_P (TREE_TYPE (rhs1)))
- return simplify_abs_using_ranges (stmt);
+ return simplify_abs_using_ranges (gsi, stmt);
break;
case BIT_AND_EXPR:
@@ -10233,7 +10229,7 @@ simplify_stmt_using_ranges (gimple_stmt_iterator *gsi)
CASE_CONVERT:
if (TREE_CODE (rhs1) == SSA_NAME
&& INTEGRAL_TYPE_P (TREE_TYPE (rhs1)))
- return simplify_conversion_using_ranges (stmt);
+ return simplify_conversion_using_ranges (gsi, stmt);
break;
case FLOAT_EXPR:
@@ -10244,7 +10240,7 @@ simplify_stmt_using_ranges (gimple_stmt_iterator *gsi)
case MIN_EXPR:
case MAX_EXPR:
- return simplify_min_or_max_using_ranges (stmt);
+ return simplify_min_or_max_using_ranges (gsi, stmt);
default:
break;
@@ -10618,7 +10614,7 @@ vrp_finalize (bool warn_array_bounds_p)
}
substitute_and_fold (op_with_constant_singleton_value_range,
- vrp_fold_stmt, false);
+ vrp_fold_stmt, true);
if (warn_array_bounds && warn_array_bounds_p)
check_all_array_refs ();
diff --git a/gcc/vmsdbgout.c b/gcc/vmsdbgout.c
index 7c6d64dc793..23f7631daf4 100644
--- a/gcc/vmsdbgout.c
+++ b/gcc/vmsdbgout.c
@@ -174,7 +174,7 @@ static void vmsdbgout_abstract_function (tree);
const struct gcc_debug_hooks vmsdbg_debug_hooks
= {vmsdbgout_init,
vmsdbgout_finish,
- debug_nothing_void,
+ debug_nothing_charstar,
vmsdbgout_assembly_start,
vmsdbgout_define,
vmsdbgout_undef,
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index b7c3e1810dc..d37bb68ba9c 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -528,7 +528,6 @@ runtime_files = \
rdebug.c \
reflect.c \
runtime1.c \
- sema.c \
sigqueue.c \
string.c \
time.c \
@@ -736,6 +735,12 @@ s-epoll: Makefile
$(SHELL) $(srcdir)/mvifdiff.sh epoll.go.tmp epoll.go
$(STAMP) $@
+if LIBGO_IS_LINUX
+syscall_lib_clone_lo = syscall/clone_linux.lo
+else
+syscall_lib_clone_lo =
+endif
+
libgo_go_objs = \
bufio.lo \
bytes.lo \
@@ -767,6 +772,7 @@ libgo_go_objs = \
strings/index.lo \
sync.lo \
syscall.lo \
+ $(syscall_lib_clone_lo) \
syscall/errno.lo \
syscall/signame.lo \
syscall/wait.lo \
@@ -2534,6 +2540,9 @@ syscall.lo.dep: $(srcdir)/go/syscall/*.go $(extra_go_files_syscall)
$(BUILDDEPS)
syscall.lo:
$(BUILDPACKAGE)
+syscall/clone_linux.lo: go/syscall/clone_linux.c runtime.inc
+ @$(MKDIR_P) syscall
+ $(LTCOMPILE) -c -o $@ $<
syscall/errno.lo: go/syscall/errno.c runtime.inc
@$(MKDIR_P) syscall
$(LTCOMPILE) -c -o $@ $<
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index e6571cd6d0c..8493333290c 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -168,21 +168,22 @@ libnetgo_a_DEPENDENCIES = netgo.o
am_libnetgo_a_OBJECTS =
libnetgo_a_OBJECTS = $(am_libnetgo_a_OBJECTS)
LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
-am__DEPENDENCIES_1 = bufio.lo bytes.lo bytes/index.lo context.lo \
+@LIBGO_IS_LINUX_TRUE@am__DEPENDENCIES_1 = syscall/clone_linux.lo
+am__DEPENDENCIES_2 = bufio.lo bytes.lo bytes/index.lo context.lo \
crypto.lo encoding.lo errors.lo expvar.lo flag.lo fmt.lo \
hash.lo html.lo image.lo io.lo log.lo math.lo mime.lo net.lo \
os.lo path.lo reflect-go.lo reflect/makefunc_ffi_c.lo \
regexp.lo runtime-go.lo sort.lo strconv.lo strings.lo \
- strings/index.lo sync.lo syscall.lo syscall/errno.lo \
- syscall/signame.lo syscall/wait.lo testing.lo time-go.lo \
- unicode.lo archive/tar.lo archive/zip.lo compress/bzip2.lo \
- compress/flate.lo compress/gzip.lo compress/lzw.lo \
- compress/zlib.lo container/heap.lo container/list.lo \
- container/ring.lo crypto/aes.lo crypto/cipher.lo crypto/des.lo \
- crypto/dsa.lo crypto/ecdsa.lo crypto/elliptic.lo \
- crypto/hmac.lo crypto/md5.lo crypto/rand.lo crypto/rc4.lo \
- crypto/rsa.lo crypto/sha1.lo crypto/sha256.lo crypto/sha512.lo \
- crypto/subtle.lo crypto/tls.lo crypto/x509.lo \
+ strings/index.lo sync.lo syscall.lo $(am__DEPENDENCIES_1) \
+ syscall/errno.lo syscall/signame.lo syscall/wait.lo testing.lo \
+ time-go.lo unicode.lo archive/tar.lo archive/zip.lo \
+ compress/bzip2.lo compress/flate.lo compress/gzip.lo \
+ compress/lzw.lo compress/zlib.lo container/heap.lo \
+ container/list.lo container/ring.lo crypto/aes.lo \
+ crypto/cipher.lo crypto/des.lo crypto/dsa.lo crypto/ecdsa.lo \
+ crypto/elliptic.lo crypto/hmac.lo crypto/md5.lo crypto/rand.lo \
+ crypto/rc4.lo crypto/rsa.lo crypto/sha1.lo crypto/sha256.lo \
+ crypto/sha512.lo crypto/subtle.lo crypto/tls.lo crypto/x509.lo \
crypto/x509/pkix.lo database/sql.lo database/sql/driver.lo \
debug/dwarf.lo debug/elf.lo debug/gosym.lo debug/macho.lo \
debug/pe.lo debug/plan9obj.lo encoding/ascii85.lo \
@@ -217,12 +218,12 @@ am__DEPENDENCIES_1 = bufio.lo bytes.lo bytes/index.lo context.lo \
text/scanner.lo text/tabwriter.lo text/template.lo \
text/template/parse.lo testing/iotest.lo testing/quick.lo \
unicode/utf16.lo unicode/utf8.lo
-am__DEPENDENCIES_2 =
-am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) \
- ../libbacktrace/libbacktrace.la $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2) \
- $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2)
-libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+am__DEPENDENCIES_3 =
+am__DEPENDENCIES_4 = $(am__DEPENDENCIES_2) \
+ ../libbacktrace/libbacktrace.la $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_3)
+libgo_llgo_la_DEPENDENCIES = $(am__DEPENDENCIES_4)
@HAVE_SYS_MMAN_H_FALSE@am__objects_1 = mem_posix_memalign.lo
@HAVE_SYS_MMAN_H_TRUE@am__objects_1 = mem.lo
@LIBGO_IS_LINUX_FALSE@@LIBGO_IS_SOLARIS_FALSE@am__objects_2 = netpoll_kqueue.lo
@@ -264,7 +265,7 @@ am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
$(am__objects_2) panic.lo parfor.lo print.lo proc.lo \
runtime.lo signal_unix.lo thread.lo $(am__objects_3) yield.lo \
$(am__objects_4) cpuprof.lo go-iface.lo lfstack.lo malloc.lo \
- mprof.lo netpoll.lo rdebug.lo reflect.lo runtime1.lo sema.lo \
+ mprof.lo netpoll.lo rdebug.lo reflect.lo runtime1.lo \
sigqueue.lo string.lo time.lo $(am__objects_5)
am_libgo_llgo_la_OBJECTS = $(am__objects_6)
libgo_llgo_la_OBJECTS = $(am_libgo_llgo_la_OBJECTS)
@@ -272,7 +273,7 @@ libgo_llgo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libgo_llgo_la_LDFLAGS) $(LDFLAGS) -o $@
@GOC_IS_LLGO_TRUE@am_libgo_llgo_la_rpath = -rpath $(toolexeclibdir)
-libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_3)
+libgo_la_DEPENDENCIES = $(am__DEPENDENCIES_4)
am_libgo_la_OBJECTS = $(am__objects_6)
libgo_la_OBJECTS = $(am_libgo_la_OBJECTS)
libgo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@@ -929,7 +930,6 @@ runtime_files = \
rdebug.c \
reflect.c \
runtime1.c \
- sema.c \
sigqueue.c \
string.c \
time.c \
@@ -948,6 +948,8 @@ SYSINFO_FLAGS = \
$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(OSCFLAGS) -O
+@LIBGO_IS_LINUX_FALSE@syscall_lib_clone_lo =
+@LIBGO_IS_LINUX_TRUE@syscall_lib_clone_lo = syscall/clone_linux.lo
libgo_go_objs = \
bufio.lo \
bytes.lo \
@@ -979,6 +981,7 @@ libgo_go_objs = \
strings/index.lo \
sync.lo \
syscall.lo \
+ $(syscall_lib_clone_lo) \
syscall/errno.lo \
syscall/signame.lo \
syscall/wait.lo \
@@ -1652,7 +1655,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtems-task-variable-add.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtime.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtime1.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sema.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal_unix.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigqueue.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string.Plo@am__quote@
@@ -5109,6 +5111,9 @@ syscall.lo.dep: $(srcdir)/go/syscall/*.go $(extra_go_files_syscall)
$(BUILDDEPS)
syscall.lo:
$(BUILDPACKAGE)
+syscall/clone_linux.lo: go/syscall/clone_linux.c runtime.inc
+ @$(MKDIR_P) syscall
+ $(LTCOMPILE) -c -o $@ $<
syscall/errno.lo: go/syscall/errno.c runtime.inc
@$(MKDIR_P) syscall
$(LTCOMPILE) -c -o $@ $<
diff --git a/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go b/libgo/go/internal/syscall/unix/getrandom_linux_sparcx.go
index 4874ec1bd86..4874ec1bd86 100644
--- a/libgo/go/internal/syscall/unix/getrandom_linux_sparc.go
+++ b/libgo/go/internal/syscall/unix/getrandom_linux_sparcx.go
diff --git a/libgo/go/runtime/sema.go b/libgo/go/runtime/sema.go
new file mode 100644
index 00000000000..855d73ef4f4
--- /dev/null
+++ b/libgo/go/runtime/sema.go
@@ -0,0 +1,358 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Semaphore implementation exposed to Go.
+// Intended use is provide a sleep and wakeup
+// primitive that can be used in the contended case
+// of other synchronization primitives.
+// Thus it targets the same goal as Linux's futex,
+// but it has much simpler semantics.
+//
+// That is, don't think of these as semaphores.
+// Think of them as a way to implement sleep and wakeup
+// such that every sleep is paired with a single wakeup,
+// even if, due to races, the wakeup happens before the sleep.
+//
+// See Mullender and Cox, ``Semaphores in Plan 9,''
+// http://swtch.com/semaphore.pdf
+
+package runtime
+
+// Export temporarily for gccgo's C code to call:
+//go:linkname semacquire runtime.semacquire
+//go:linkname semrelease runtime.semrelease
+
+import (
+ "runtime/internal/atomic"
+ "runtime/internal/sys"
+ "unsafe"
+)
+
+// Asynchronous semaphore for sync.Mutex.
+
+type semaRoot struct {
+ lock mutex
+ head *sudog
+ tail *sudog
+ nwait uint32 // Number of waiters. Read w/o the lock.
+}
+
+// Prime to not correlate with any user patterns.
+const semTabSize = 251
+
+var semtable [semTabSize]struct {
+ root semaRoot
+ pad [sys.CacheLineSize - unsafe.Sizeof(semaRoot{})]byte
+}
+
+//go:linkname sync_runtime_Semacquire sync.runtime_Semacquire
+func sync_runtime_Semacquire(addr *uint32) {
+ semacquire(addr, true)
+}
+
+//go:linkname net_runtime_Semacquire net.runtime_Semacquire
+func net_runtime_Semacquire(addr *uint32) {
+ semacquire(addr, true)
+}
+
+//go:linkname sync_runtime_Semrelease sync.runtime_Semrelease
+func sync_runtime_Semrelease(addr *uint32) {
+ semrelease(addr)
+}
+
+//go:linkname net_runtime_Semrelease net.runtime_Semrelease
+func net_runtime_Semrelease(addr *uint32) {
+ semrelease(addr)
+}
+
+func readyWithTime(s *sudog, traceskip int) {
+ if s.releasetime != 0 {
+ s.releasetime = cputicks()
+ }
+ goready(s.g, traceskip)
+}
+
+// Called from runtime.
+func semacquire(addr *uint32, profile bool) {
+ gp := getg()
+ if gp != gp.m.curg {
+ throw("semacquire not on the G stack")
+ }
+
+ // Easy case.
+ if cansemacquire(addr) {
+ return
+ }
+
+ // Harder case:
+ // increment waiter count
+ // try cansemacquire one more time, return if succeeded
+ // enqueue itself as a waiter
+ // sleep
+ // (waiter descriptor is dequeued by signaler)
+ s := acquireSudog()
+ root := semroot(addr)
+ t0 := int64(0)
+ s.releasetime = 0
+ if profile && blockprofilerate > 0 {
+ t0 = cputicks()
+ s.releasetime = -1
+ }
+ for {
+ lock(&root.lock)
+ // Add ourselves to nwait to disable "easy case" in semrelease.
+ atomic.Xadd(&root.nwait, 1)
+ // Check cansemacquire to avoid missed wakeup.
+ if cansemacquire(addr) {
+ atomic.Xadd(&root.nwait, -1)
+ unlock(&root.lock)
+ break
+ }
+ // Any semrelease after the cansemacquire knows we're waiting
+ // (we set nwait above), so go to sleep.
+ root.queue(addr, s)
+ goparkunlock(&root.lock, "semacquire", traceEvGoBlockSync, 4)
+ if cansemacquire(addr) {
+ break
+ }
+ }
+ if s.releasetime > 0 {
+ blockevent(s.releasetime-t0, 3)
+ }
+ releaseSudog(s)
+}
+
+func semrelease(addr *uint32) {
+ root := semroot(addr)
+ atomic.Xadd(addr, 1)
+
+ // Easy case: no waiters?
+ // This check must happen after the xadd, to avoid a missed wakeup
+ // (see loop in semacquire).
+ if atomic.Load(&root.nwait) == 0 {
+ return
+ }
+
+ // Harder case: search for a waiter and wake it.
+ lock(&root.lock)
+ if atomic.Load(&root.nwait) == 0 {
+ // The count is already consumed by another goroutine,
+ // so no need to wake up another goroutine.
+ unlock(&root.lock)
+ return
+ }
+ s := root.head
+ for ; s != nil; s = s.next {
+ if s.elem == unsafe.Pointer(addr) {
+ atomic.Xadd(&root.nwait, -1)
+ root.dequeue(s)
+ break
+ }
+ }
+ unlock(&root.lock)
+ if s != nil {
+ readyWithTime(s, 5)
+ }
+}
+
+func semroot(addr *uint32) *semaRoot {
+ return &semtable[(uintptr(unsafe.Pointer(addr))>>3)%semTabSize].root
+}
+
+func cansemacquire(addr *uint32) bool {
+ for {
+ v := atomic.Load(addr)
+ if v == 0 {
+ return false
+ }
+ if atomic.Cas(addr, v, v-1) {
+ return true
+ }
+ }
+}
+
+func (root *semaRoot) queue(addr *uint32, s *sudog) {
+ s.g = getg()
+ s.elem = unsafe.Pointer(addr)
+ s.next = nil
+ s.prev = root.tail
+ if root.tail != nil {
+ root.tail.next = s
+ } else {
+ root.head = s
+ }
+ root.tail = s
+}
+
+func (root *semaRoot) dequeue(s *sudog) {
+ if s.next != nil {
+ s.next.prev = s.prev
+ } else {
+ root.tail = s.prev
+ }
+ if s.prev != nil {
+ s.prev.next = s.next
+ } else {
+ root.head = s.next
+ }
+ s.elem = nil
+ s.next = nil
+ s.prev = nil
+}
+
+// notifyList is a ticket-based notification list used to implement sync.Cond.
+//
+// It must be kept in sync with the sync package.
+type notifyList struct {
+ // wait is the ticket number of the next waiter. It is atomically
+ // incremented outside the lock.
+ wait uint32
+
+ // notify is the ticket number of the next waiter to be notified. It can
+ // be read outside the lock, but is only written to with lock held.
+ //
+ // Both wait & notify can wrap around, and such cases will be correctly
+ // handled as long as their "unwrapped" difference is bounded by 2^31.
+ // For this not to be the case, we'd need to have 2^31+ goroutines
+ // blocked on the same condvar, which is currently not possible.
+ notify uint32
+
+ // List of parked waiters.
+ lock mutex
+ head *sudog
+ tail *sudog
+}
+
+// less checks if a < b, considering a & b running counts that may overflow the
+// 32-bit range, and that their "unwrapped" difference is always less than 2^31.
+func less(a, b uint32) bool {
+ return int32(a-b) < 0
+}
+
+// notifyListAdd adds the caller to a notify list such that it can receive
+// notifications. The caller must eventually call notifyListWait to wait for
+// such a notification, passing the returned ticket number.
+//go:linkname notifyListAdd sync.runtime_notifyListAdd
+func notifyListAdd(l *notifyList) uint32 {
+ // This may be called concurrently, for example, when called from
+ // sync.Cond.Wait while holding a RWMutex in read mode.
+ return atomic.Xadd(&l.wait, 1) - 1
+}
+
+// notifyListWait waits for a notification. If one has been sent since
+// notifyListAdd was called, it returns immediately. Otherwise, it blocks.
+//go:linkname notifyListWait sync.runtime_notifyListWait
+func notifyListWait(l *notifyList, t uint32) {
+ lock(&l.lock)
+
+ // Return right away if this ticket has already been notified.
+ if less(t, l.notify) {
+ unlock(&l.lock)
+ return
+ }
+
+ // Enqueue itself.
+ s := acquireSudog()
+ s.g = getg()
+ s.ticket = t
+ s.releasetime = 0
+ t0 := int64(0)
+ if blockprofilerate > 0 {
+ t0 = cputicks()
+ s.releasetime = -1
+ }
+ if l.tail == nil {
+ l.head = s
+ } else {
+ l.tail.next = s
+ }
+ l.tail = s
+ goparkunlock(&l.lock, "semacquire", traceEvGoBlockCond, 3)
+ if t0 != 0 {
+ blockevent(s.releasetime-t0, 2)
+ }
+ releaseSudog(s)
+}
+
+// notifyListNotifyAll notifies all entries in the list.
+//go:linkname notifyListNotifyAll sync.runtime_notifyListNotifyAll
+func notifyListNotifyAll(l *notifyList) {
+ // Fast-path: if there are no new waiters since the last notification
+ // we don't need to acquire the lock.
+ if atomic.Load(&l.wait) == atomic.Load(&l.notify) {
+ return
+ }
+
+ // Pull the list out into a local variable, waiters will be readied
+ // outside the lock.
+ lock(&l.lock)
+ s := l.head
+ l.head = nil
+ l.tail = nil
+
+ // Update the next ticket to be notified. We can set it to the current
+ // value of wait because any previous waiters are already in the list
+ // or will notice that they have already been notified when trying to
+ // add themselves to the list.
+ atomic.Store(&l.notify, atomic.Load(&l.wait))
+ unlock(&l.lock)
+
+ // Go through the local list and ready all waiters.
+ for s != nil {
+ next := s.next
+ s.next = nil
+ readyWithTime(s, 4)
+ s = next
+ }
+}
+
+// notifyListNotifyOne notifies one entry in the list.
+//go:linkname notifyListNotifyOne sync.runtime_notifyListNotifyOne
+func notifyListNotifyOne(l *notifyList) {
+ // Fast-path: if there are no new waiters since the last notification
+ // we don't need to acquire the lock at all.
+ if atomic.Load(&l.wait) == atomic.Load(&l.notify) {
+ return
+ }
+
+ lock(&l.lock)
+
+ // Re-check under the lock if we need to do anything.
+ t := l.notify
+ if t == atomic.Load(&l.wait) {
+ unlock(&l.lock)
+ return
+ }
+
+ // Update the next notify ticket number, and try to find the G that
+ // needs to be notified. If it hasn't made it to the list yet we won't
+ // find it, but it won't park itself once it sees the new notify number.
+ atomic.Store(&l.notify, t+1)
+ for p, s := (*sudog)(nil), l.head; s != nil; p, s = s, s.next {
+ if s.ticket == t {
+ n := s.next
+ if p != nil {
+ p.next = n
+ } else {
+ l.head = n
+ }
+ if n == nil {
+ l.tail = p
+ }
+ unlock(&l.lock)
+ s.next = nil
+ readyWithTime(s, 4)
+ return
+ }
+ }
+ unlock(&l.lock)
+}
+
+//go:linkname notifyListCheck sync.runtime_notifyListCheck
+func notifyListCheck(sz uintptr) {
+ if sz != unsafe.Sizeof(notifyList{}) {
+ print("runtime: bad notifyList size - sync=", sz, " runtime=", unsafe.Sizeof(notifyList{}), "\n")
+ throw("bad notifyList size")
+ }
+}
diff --git a/libgo/go/syscall/clone_linux.c b/libgo/go/syscall/clone_linux.c
new file mode 100644
index 00000000000..a1a15ea05d8
--- /dev/null
+++ b/libgo/go/syscall/clone_linux.c
@@ -0,0 +1,100 @@
+/* clone_linux.c -- consistent wrapper around Linux clone syscall
+
+ Copyright 2016 The Go Authors. All rights reserved.
+ Use of this source code is governed by a BSD-style
+ license that can be found in the LICENSE file. */
+
+#include <errno.h>
+#include <asm/ptrace.h>
+#include <sys/syscall.h>
+
+#include "runtime.h"
+
+long rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs) __asm__ (GOSYM_PREFIX "syscall.rawClone");
+
+long
+rawClone (unsigned long flags, void *child_stack, void *ptid, void *ctid, struct pt_regs *regs)
+{
+#if defined(__arc__) || defined(__aarch64__) || defined(__arm__) || defined(__mips__) || defined(__hppa__) || defined(__powerpc__) || defined(__score__) || defined(__i386__) || defined(__xtensa__)
+ // CLONE_BACKWARDS
+ return syscall(__NR_clone, flags, child_stack, ptid, regs, ctid);
+#elif defined(__s390__) || defined(__cris__)
+ // CLONE_BACKWARDS2
+ return syscall(__NR_clone, child_stack, flags, ptid, ctid, regs);
+#elif defined(__microblaze__)
+ // CLONE_BACKWARDS3
+ return syscall(__NR_clone, flags, child_stack, 0, ptid, ctid, regs);
+#elif defined(__sparc__)
+
+ /* SPARC has a unique return value convention:
+
+ Parent --> %o0 == child's pid, %o1 == 0
+ Child --> %o0 == parent's pid, %o1 == 1
+
+ Translate this to look like a normal clone. */
+
+# if defined(__arch64__)
+
+# define SYSCALL_STRING \
+ "ta 0x6d;" \
+ "bcc,pt %%xcc, 1f;" \
+ " mov 0, %%g1;" \
+ "sub %%g0, %%o0, %%o0;" \
+ "mov 1, %%g1;" \
+ "1:"
+
+# define SYSCALL_CLOBBERS \
+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
+ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
+ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
+ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
+ "f32", "f34", "f36", "f38", "f40", "f42", "f44", "f46", \
+ "f48", "f50", "f52", "f54", "f56", "f58", "f60", "f62", \
+ "cc", "memory"
+
+# else /* __arch64__ */
+
+# define SYSCALL_STRING \
+ "ta 0x10;" \
+ "bcc 1f;" \
+ " mov 0, %%g1;" \
+ "sub %%g0, %%o0, %%o0;" \
+ "mov 1, %%g1;" \
+ "1:"
+
+# define SYSCALL_CLOBBERS \
+ "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", \
+ "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", \
+ "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", \
+ "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", \
+ "cc", "memory"
+
+# endif /* __arch64__ */
+
+ register long o0 __asm__ ("o0") = (long)flags;
+ register long o1 __asm__ ("o1") = (long)child_stack;
+ register long o2 __asm__ ("o2") = (long)ptid;
+ register long o3 __asm__ ("o3") = (long)ctid;
+ register long o4 __asm__ ("o4") = (long)regs;
+ register long g1 __asm__ ("g1") = __NR_clone;
+
+ __asm __volatile (SYSCALL_STRING :
+ "=r" (g1), "=r" (o0), "=r" (o1) :
+ "0" (g1), "1" (o0), "2" (o1),
+ "r" (o2), "r" (o3), "r" (o4) :
+ SYSCALL_CLOBBERS);
+
+ if (__builtin_expect(g1 != 0, 0))
+ {
+ errno = -o0;
+ o0 = -1L;
+ }
+ else
+ o0 &= (o1 - 1);
+
+ return o0;
+
+#else
+ return syscall(__NR_clone, flags, child_stack, ptid, ctid, regs);
+#endif
+}
diff --git a/libgo/go/syscall/exec_linux.go b/libgo/go/syscall/exec_linux.go
index 581a9886dcf..83d9c1ca2db 100644
--- a/libgo/go/syscall/exec_linux.go
+++ b/libgo/go/syscall/exec_linux.go
@@ -7,7 +7,6 @@
package syscall
import (
- "runtime"
"unsafe"
)
@@ -49,6 +48,9 @@ type SysProcAttr struct {
func runtime_BeforeFork()
func runtime_AfterFork()
+// Implemented in clone_linux.c
+func rawClone(flags _C_ulong, child_stack *byte, ptid *Pid_t, ctid *Pid_t, regs unsafe.Pointer) _C_long
+
// Fork, dup fd onto 0..len(fd), and exec(argv0, argvv, envv) in child.
// If a dup or exec fails, write the errno error to pipe.
// (Pipe is close-on-exec so if exec succeeds, it will be closed.)
@@ -64,6 +66,7 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
// declarations require heap allocation (e.g., err1).
var (
r1 uintptr
+ r2 _C_long
err1 Errno
err2 Errno
nextfd int
@@ -98,20 +101,16 @@ func forkAndExecInChild(argv0 *byte, argv, envv []*byte, chroot, dir *byte, attr
// About to call fork.
// No more allocation or calls of non-assembly functions.
runtime_BeforeFork()
- if runtime.GOARCH == "s390x" || runtime.GOARCH == "s390" {
- r1, _, err1 = RawSyscall6(SYS_CLONE, 0, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0)
- } else {
- r1, _, err1 = RawSyscall6(SYS_CLONE, uintptr(SIGCHLD)|sys.Cloneflags, 0, 0, 0, 0, 0)
- }
- if err1 != 0 {
+ r2 = rawClone(_C_ulong(uintptr(SIGCHLD)|sys.Cloneflags), nil, nil, nil, unsafe.Pointer(nil))
+ if r2 < 0 {
runtime_AfterFork()
- return 0, err1
+ return 0, GetErrno()
}
- if r1 != 0 {
+ if r2 != 0 {
// parent; return PID
runtime_AfterFork()
- pid = int(r1)
+ pid = int(r2)
if sys.UidMappings != nil || sys.GidMappings != nil {
Close(p[0])
diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh
index eeac94a3ecf..f79b5cfd7d8 100755
--- a/libgo/mksysinfo.sh
+++ b/libgo/mksysinfo.sh
@@ -349,8 +349,10 @@ fi
sizeof_long=`grep '^const ___SIZEOF_LONG__ = ' gen-sysinfo.go | sed -e 's/.*= //'`
if test "$sizeof_long" = "4"; then
echo "type _C_long int32" >> ${OUT}
+ echo "type _C_ulong uint32" >> ${OUT}
elif test "$sizeof_long" = "8"; then
echo "type _C_long int64" >> ${OUT}
+ echo "type _C_ulong uint64" >> ${OUT}
else
echo 1>&2 "mksysinfo.sh: could not determine size of long (got $sizeof_long)"
exit 1
diff --git a/libgo/runtime/proc.c b/libgo/runtime/proc.c
index 98c18a726af..eb9e6c21e44 100644
--- a/libgo/runtime/proc.c
+++ b/libgo/runtime/proc.c
@@ -246,12 +246,15 @@ static void
kickoff(void)
{
void (*fn)(void*);
+ void *param;
if(g->traceback != nil)
gtraceback(g);
fn = (void (*)(void*))(g->entry);
- fn(g->param);
+ param = g->param;
+ g->param = nil;
+ fn(param);
runtime_goexit();
}
diff --git a/libgo/runtime/runtime.h b/libgo/runtime/runtime.h
index 3304215e9ed..69d2f5a7b2f 100644
--- a/libgo/runtime/runtime.h
+++ b/libgo/runtime/runtime.h
@@ -552,8 +552,10 @@ void runtime_newErrorCString(const char*, Eface*)
/*
* wrapped for go users
*/
-void runtime_semacquire(uint32 volatile *, bool);
-void runtime_semrelease(uint32 volatile *);
+void runtime_semacquire(uint32 volatile *, bool)
+ __asm__ (GOSYM_PREFIX "runtime.semacquire");
+void runtime_semrelease(uint32 volatile *)
+ __asm__ (GOSYM_PREFIX "runtime.semrelease");
int32 runtime_gomaxprocsfunc(int32 n);
void runtime_procyield(uint32)
__asm__(GOSYM_PREFIX "runtime.procyield");
diff --git a/libgo/runtime/sema.goc b/libgo/runtime/sema.goc
deleted file mode 100644
index b0d198e6073..00000000000
--- a/libgo/runtime/sema.goc
+++ /dev/null
@@ -1,470 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Semaphore implementation exposed to Go.
-// Intended use is provide a sleep and wakeup
-// primitive that can be used in the contended case
-// of other synchronization primitives.
-// Thus it targets the same goal as Linux's futex,
-// but it has much simpler semantics.
-//
-// That is, don't think of these as semaphores.
-// Think of them as a way to implement sleep and wakeup
-// such that every sleep is paired with a single wakeup,
-// even if, due to races, the wakeup happens before the sleep.
-//
-// See Mullender and Cox, ``Semaphores in Plan 9,''
-// http://swtch.com/semaphore.pdf
-
-package sync
-#include "runtime.h"
-#include "arch.h"
-
-typedef struct SemaWaiter SemaWaiter;
-struct SemaWaiter
-{
- uint32 volatile* addr;
- G* g;
- int64 releasetime;
- int32 nrelease; // -1 for acquire
- SemaWaiter* prev;
- SemaWaiter* next;
-};
-
-typedef struct SemaRoot SemaRoot;
-struct SemaRoot
-{
- Lock;
- SemaWaiter* head;
- SemaWaiter* tail;
- // Number of waiters. Read w/o the lock.
- uint32 volatile nwait;
-};
-
-// Prime to not correlate with any user patterns.
-#define SEMTABLESZ 251
-
-struct semtable
-{
- SemaRoot;
- uint8 pad[CacheLineSize-sizeof(SemaRoot)];
-};
-static struct semtable semtable[SEMTABLESZ];
-
-static SemaRoot*
-semroot(uint32 volatile *addr)
-{
- return &semtable[((uintptr)addr >> 3) % SEMTABLESZ];
-}
-
-static void
-semqueue(SemaRoot *root, uint32 volatile *addr, SemaWaiter *s)
-{
- s->g = runtime_g();
- s->addr = addr;
- s->next = nil;
- s->prev = root->tail;
- if(root->tail)
- root->tail->next = s;
- else
- root->head = s;
- root->tail = s;
-}
-
-static void
-semdequeue(SemaRoot *root, SemaWaiter *s)
-{
- if(s->next)
- s->next->prev = s->prev;
- else
- root->tail = s->prev;
- if(s->prev)
- s->prev->next = s->next;
- else
- root->head = s->next;
- s->prev = nil;
- s->next = nil;
-}
-
-static int32
-cansemacquire(uint32 volatile *addr)
-{
- uint32 v;
-
- while((v = runtime_atomicload(addr)) > 0)
- if(runtime_cas(addr, v, v-1))
- return 1;
- return 0;
-}
-
-static void readyWithTime(SudoG* s, int traceskip __attribute__ ((unused))) {
- if (s->releasetime != 0) {
- s->releasetime = runtime_cputicks();
- }
- runtime_ready(s->g);
-}
-
-void
-runtime_semacquire(uint32 volatile *addr, bool profile)
-{
- SemaWaiter s; // Needs to be allocated on stack, otherwise garbage collector could deallocate it
- SemaRoot *root;
- int64 t0;
-
- // Easy case.
- if(cansemacquire(addr))
- return;
-
- // Harder case:
- // increment waiter count
- // try cansemacquire one more time, return if succeeded
- // enqueue itself as a waiter
- // sleep
- // (waiter descriptor is dequeued by signaler)
- root = semroot(addr);
- t0 = 0;
- s.releasetime = 0;
- if(profile && runtime_blockprofilerate > 0) {
- t0 = runtime_cputicks();
- s.releasetime = -1;
- }
- for(;;) {
-
- runtime_lock(root);
- // Add ourselves to nwait to disable "easy case" in semrelease.
- runtime_xadd(&root->nwait, 1);
- // Check cansemacquire to avoid missed wakeup.
- if(cansemacquire(addr)) {
- runtime_xadd(&root->nwait, -1);
- runtime_unlock(root);
- return;
- }
- // Any semrelease after the cansemacquire knows we're waiting
- // (we set nwait above), so go to sleep.
- semqueue(root, addr, &s);
- runtime_parkunlock(root, "semacquire");
- if(cansemacquire(addr)) {
- if(t0)
- runtime_blockevent(s.releasetime - t0, 3);
- return;
- }
- }
-}
-
-void
-runtime_semrelease(uint32 volatile *addr)
-{
- SemaWaiter *s;
- SemaRoot *root;
-
- root = semroot(addr);
- runtime_xadd(addr, 1);
-
- // Easy case: no waiters?
- // This check must happen after the xadd, to avoid a missed wakeup
- // (see loop in semacquire).
- if(runtime_atomicload(&root->nwait) == 0)
- return;
-
- // Harder case: search for a waiter and wake it.
- runtime_lock(root);
- if(runtime_atomicload(&root->nwait) == 0) {
- // The count is already consumed by another goroutine,
- // so no need to wake up another goroutine.
- runtime_unlock(root);
- return;
- }
- for(s = root->head; s; s = s->next) {
- if(s->addr == addr) {
- runtime_xadd(&root->nwait, -1);
- semdequeue(root, s);
- break;
- }
- }
- runtime_unlock(root);
- if(s) {
- if(s->releasetime)
- s->releasetime = runtime_cputicks();
- runtime_ready(s->g);
- }
-}
-
-// TODO(dvyukov): move to netpoll.goc once it's used by all OSes.
-void net_runtime_Semacquire(uint32 *addr)
- __asm__ (GOSYM_PREFIX "net.runtime_Semacquire");
-
-void net_runtime_Semacquire(uint32 *addr)
-{
- runtime_semacquire(addr, true);
-}
-
-void net_runtime_Semrelease(uint32 *addr)
- __asm__ (GOSYM_PREFIX "net.runtime_Semrelease");
-
-void net_runtime_Semrelease(uint32 *addr)
-{
- runtime_semrelease(addr);
-}
-
-func runtime_Semacquire(addr *uint32) {
- runtime_semacquire(addr, true);
-}
-
-func runtime_Semrelease(addr *uint32) {
- runtime_semrelease(addr);
-}
-
-typedef struct SyncSema SyncSema;
-struct SyncSema
-{
- Lock;
- SemaWaiter* head;
- SemaWaiter* tail;
-};
-
-func runtime_Syncsemcheck(size uintptr) {
- if(size != sizeof(SyncSema)) {
- runtime_printf("bad SyncSema size: sync:%D runtime:%D\n", (int64)size, (int64)sizeof(SyncSema));
- runtime_throw("bad SyncSema size");
- }
-}
-
-// Syncsemacquire waits for a pairing Syncsemrelease on the same semaphore s.
-func runtime_Syncsemacquire(s *SyncSema) {
- SemaWaiter w, *wake;
- int64 t0;
-
- w.g = runtime_g();
- w.nrelease = -1;
- w.next = nil;
- w.releasetime = 0;
- t0 = 0;
- if(runtime_blockprofilerate > 0) {
- t0 = runtime_cputicks();
- w.releasetime = -1;
- }
-
- runtime_lock(s);
- if(s->head && s->head->nrelease > 0) {
- // have pending release, consume it
- wake = nil;
- s->head->nrelease--;
- if(s->head->nrelease == 0) {
- wake = s->head;
- s->head = wake->next;
- if(s->head == nil)
- s->tail = nil;
- }
- runtime_unlock(s);
- if(wake)
- runtime_ready(wake->g);
- } else {
- // enqueue itself
- if(s->tail == nil)
- s->head = &w;
- else
- s->tail->next = &w;
- s->tail = &w;
- runtime_parkunlock(s, "semacquire");
- if(t0)
- runtime_blockevent(w.releasetime - t0, 2);
- }
-}
-
-// Syncsemrelease waits for n pairing Syncsemacquire on the same semaphore s.
-func runtime_Syncsemrelease(s *SyncSema, n uint32) {
- SemaWaiter w, *wake;
-
- w.g = runtime_g();
- w.nrelease = (int32)n;
- w.next = nil;
- w.releasetime = 0;
-
- runtime_lock(s);
- while(w.nrelease > 0 && s->head && s->head->nrelease < 0) {
- // have pending acquire, satisfy it
- wake = s->head;
- s->head = wake->next;
- if(s->head == nil)
- s->tail = nil;
- if(wake->releasetime)
- wake->releasetime = runtime_cputicks();
- runtime_ready(wake->g);
- w.nrelease--;
- }
- if(w.nrelease > 0) {
- // enqueue itself
- if(s->tail == nil)
- s->head = &w;
- else
- s->tail->next = &w;
- s->tail = &w;
- runtime_parkunlock(s, "semarelease");
- } else
- runtime_unlock(s);
-}
-
-// notifyList is a ticket-based notification list used to implement sync.Cond.
-//
-// It must be kept in sync with the sync package.
-typedef struct {
- // wait is the ticket number of the next waiter. It is atomically
- // incremented outside the lock.
- uint32 wait;
-
- // notify is the ticket number of the next waiter to be notified. It can
- // be read outside the lock, but is only written to with lock held.
- //
- // Both wait & notify can wrap around, and such cases will be correctly
- // handled as long as their "unwrapped" difference is bounded by 2^31.
- // For this not to be the case, we'd need to have 2^31+ goroutines
- // blocked on the same condvar, which is currently not possible.
- uint32 notify;
-
- // List of parked waiters.
- Lock lock;
- SudoG* head;
- SudoG* tail;
-} notifyList;
-
-// less checks if a < b, considering a & b running counts that may overflow the
-// 32-bit range, and that their "unwrapped" difference is always less than 2^31.
-static bool less(uint32 a, uint32 b) {
- return (int32)(a-b) < 0;
-}
-
-// notifyListAdd adds the caller to a notify list such that it can receive
-// notifications. The caller must eventually call notifyListWait to wait for
-// such a notification, passing the returned ticket number.
-//go:linkname notifyListAdd sync.runtime_notifyListAdd
-func runtime_notifyListAdd(l *notifyList) (r uint32) {
- // This may be called concurrently, for example, when called from
- // sync.Cond.Wait while holding a RWMutex in read mode.
- r = runtime_xadd(&l->wait, 1) - 1;
-}
-
-// notifyListWait waits for a notification. If one has been sent since
-// notifyListAdd was called, it returns immediately. Otherwise, it blocks.
-//go:linkname notifyListWait sync.runtime_notifyListWait
-func runtime_notifyListWait(l *notifyList, t uint32) {
- SudoG s;
- int64 t0;
-
- runtime_lock(&l->lock);
-
- // Return right away if this ticket has already been notified.
- if (less(t, l->notify)) {
- runtime_unlock(&l->lock);
- return;
- }
-
- // Enqueue itself.
- runtime_memclr(&s, sizeof(s));
- s.g = runtime_g();
- s.ticket = t;
- s.releasetime = 0;
- t0 = 0;
- if (runtime_blockprofilerate > 0) {
- t0 = runtime_cputicks();
- s.releasetime = -1;
- }
- if (l->tail == nil) {
- l->head = &s;
- } else {
- l->tail->next = &s;
- }
- l->tail = &s;
- runtime_parkunlock(&l->lock, "semacquire");
- if (t0 != 0) {
- runtime_blockevent(s.releasetime-t0, 2);
- }
-}
-
-// notifyListNotifyAll notifies all entries in the list.
-//go:linkname notifyListNotifyAll sync.runtime_notifyListNotifyAll
-func runtime_notifyListNotifyAll(l *notifyList) {
- SudoG *s;
-
- // Fast-path: if there are no new waiters since the last notification
- // we don't need to acquire the lock.
- if (runtime_atomicload(&l->wait) == runtime_atomicload(&l->notify)) {
- return;
- }
-
- // Pull the list out into a local variable, waiters will be readied
- // outside the lock.
- runtime_lock(&l->lock);
- s = l->head;
- l->head = nil;
- l->tail = nil;
-
- // Update the next ticket to be notified. We can set it to the current
- // value of wait because any previous waiters are already in the list
- // or will notice that they have already been notified when trying to
- // add themselves to the list.
- runtime_atomicstore(&l->notify, runtime_atomicload(&l->wait));
- runtime_unlock(&l->lock);
-
- // Go through the local list and ready all waiters.
- while (s != nil) {
- SudoG* next = s->next;
- s->next = nil;
- readyWithTime(s, 4);
- s = next;
- }
-}
-
-// notifyListNotifyOne notifies one entry in the list.
-//go:linkname notifyListNotifyOne sync.runtime_notifyListNotifyOne
-func runtime_notifyListNotifyOne(l *notifyList) {
- uint32 t;
- SudoG *p;
- SudoG *s;
-
- // Fast-path: if there are no new waiters since the last notification
- // we don't need to acquire the lock at all.
- if (runtime_atomicload(&l->wait) == runtime_atomicload(&l->notify)) {
- return;
- }
-
- runtime_lock(&l->lock);
-
- // Re-check under the lock if we need to do anything.
- t = l->notify;
- if (t == runtime_atomicload(&l->wait)) {
- runtime_unlock(&l->lock);
- return;
- }
-
- // Update the next notify ticket number, and try to find the G that
- // needs to be notified. If it hasn't made it to the list yet we won't
- // find it, but it won't park itself once it sees the new notify number.
- runtime_atomicstore(&l->notify, t+1);
- for (p = nil, s = l->head; s != nil; p = s, s = s->next) {
- if (s->ticket == t) {
- SudoG *n = s->next;
- if (p != nil) {
- p->next = n;
- } else {
- l->head = n;
- }
- if (n == nil) {
- l->tail = p;
- }
- runtime_unlock(&l->lock);
- s->next = nil;
- readyWithTime(s, 4);
- return;
- }
- }
- runtime_unlock(&l->lock);
-}
-
-//go:linkname notifyListCheck sync.runtime_notifyListCheck
-func runtime_notifyListCheck(sz uintptr) {
- if (sz != sizeof(notifyList)) {
- runtime_printf("runtime: bad notifyList size\n");
- runtime_throw("bad notifyList size");
- }
-}
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index cf51dd7dd3b..efbcd2dec19 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,45 @@
+2016-10-12 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/status_cxx2017.xml: Add std::sample status.
+ * doc/html/*: Regenerate.
+ * include/experimental/algorithm (__sample): Move to bits/stl_algo.h
+ and into namespace std.
+ * include/bits/stl_algo.h (__sample): Define here. Fix invalid use
+ of input iterator. Defend against overloaded comma operator.
+ (sample): Define for C++17.
+ * testsuite/25_algorithms/sample/1.cc: New test.
+
+ * testsuite/util/testsuite_common_types.h
+ (bitwise_assignment_operators): Use direct-initialization for C++11
+ and later, to avoid CopyConstructible requirement.
+ * testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error
+ line numbers.
+ * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
+ * testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
+ Adjust expected errors and line numbers.
+
+ * include/std/mutex [_GLIBCXX_HAVE_TLS] (_Once_call): Remove.
+ (call_once) [_GLIBCXX_HAVE_TLS]: Simplify by removing _Once_call.
+
+ * include/bits/stl_uninitialized.h
+ (__uninitialized_default_novalue_n_1<true>): Add missing return.
+ * testsuite/20_util/specialized_algorithms/memory_management_tools/
+ 1.cc: Check return values of uninitialized_xxx_n algorithms.
+
+ * libsupc++/nested_exception.h (throw_with_nested): Remove return.
+
+ * doc/xml/manual/intro.xml: Document LWG 2442 status.
+ * include/std/mutex [_GLIBCXX_HAVE_TLS] (__once_call_impl): Remove.
+ [_GLIBCXX_HAVE_TLS] (_Once_call): Declare primary template and define
+ partial specialization to unpack args and forward to std::invoke.
+ (call_once) [_GLIBCXX_HAVE_TLS]: Use forward_as_tuple and _Once_call
+ instead of __bind_simple and __once_call_impl.
+ (call_once) [!_GLIBCXX_HAVE_TLS]: Use __invoke instead of
+ __bind_simple.
+ * testsuite/30_threads/call_once/dr2442.cc: New test.
+
2016-10-11 Jonathan Wakely <jwakely@redhat.com>
* include/bits/stl_list.h (assign(initializer_list<value_type>)): Call
diff --git a/libstdc++-v3/doc/html/manual/bugs.html b/libstdc++-v3/doc/html/manual/bugs.html
index 31600a49bd6..122bf8f7b9f 100644
--- a/libstdc++-v3/doc/html/manual/bugs.html
+++ b/libstdc++-v3/doc/html/manual/bugs.html
@@ -466,6 +466,10 @@
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2441" target="_top">2441</a>:
<span class="emphasis"><em>Exact-width atomic typedefs should be provided</em></span>
</span></dt><dd><p>Define the typedefs.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2442" target="_top">2442</a>:
+ <span class="emphasis"><em><code class="code">call_once()</code> shouldn't <code class="code">DECAY_COPY()</code></em></span>
+ </span></dt><dd><p>Remove indirection through call wrapper that made copies
+ of arguments and forward arguments straight to <code class="code">std::invoke</code>.
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2454" target="_top">2454</a>:
<span class="emphasis"><em>Add <code class="code">raw_storage_iterator::base()</code> member
</em></span>
@@ -486,6 +490,11 @@
<span class="emphasis"><em><code class="code">allocator_traits::max_size()</code> default behavior is incorrect
</em></span>
</span></dt><dd><p>Divide by the object type.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2484" target="_top">2484</a>:
+ <span class="emphasis"><em><code class="code">rethrow_if_nested()</code> is doubly unimplementable
+ </em></span>
+ </span></dt><dd><p>Avoid using <code class="code">dynamic_cast</code> when it would be
+ ill-formed.
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2583" target="_top">2583</a>:
<span class="emphasis"><em>There is no way to supply an allocator for <code class="code"> basic_string(str, pos)</code>
</em></span>
diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html
index 1808122f507..5ef66daa494 100644
--- a/libstdc++-v3/doc/html/manual/status.html
+++ b/libstdc++-v3/doc/html/manual/status.html
@@ -573,7 +573,11 @@ Feature-testing recommendations for C++</a>.
<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html" target="_top">
P0220R1
</a>
- </td><td align="center"> 7 </td><td align="left"> <code class="code">__cpp_lib_boyer_moore_searcher &gt;= 201603</code> </td></tr><tr><td align="left"> Constant View: A proposal for a <code class="code">std::as_const</code> helper function template </td><td align="left">
+ </td><td align="center"> 7 </td><td align="left"> <code class="code">__cpp_lib_boyer_moore_searcher &gt;= 201603</code> </td></tr><tr><td align="left"> Library Fundamentals V1 TS Components: Sampling </td><td align="left">
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html" target="_top">
+ P0220R1
+ </a>
+ </td><td align="center"> 7 </td><td align="left"> <code class="code">__cpp_lib_sample &gt;= 201603</code> </td></tr><tr><td align="left"> Constant View: A proposal for a <code class="code">std::as_const</code> helper function template </td><td align="left">
<a class="link" href="" target="_top">
P0007R1
</a>
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index 22b792ad118..528b1920cda 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -1043,6 +1043,13 @@ requirements of the license of GCC.
<listitem><para>Define the typedefs.
</para></listitem></varlistentry>
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#2442">2442</link>:
+ <emphasis><code>call_once()</code> shouldn't <code>DECAY_COPY()</code></emphasis>
+ </term>
+ <listitem><para>Remove indirection through call wrapper that made copies
+ of arguments and forward arguments straight to <code>std::invoke</code>.
+ </para></listitem></varlistentry>
+
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#2454">2454</link>:
<emphasis>Add <code>raw_storage_iterator::base()</code> member
</emphasis>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml
index c6b84409f68..ae8dfa9529b 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxx2017.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxx2017.xml
@@ -182,6 +182,17 @@ Feature-testing recommendations for C++</link>.
</row>
<row>
+ <entry> Library Fundamentals V1 TS Components: Sampling </entry>
+ <entry>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
+ P0220R1
+ </link>
+ </entry>
+ <entry align="center"> 7 </entry>
+ <entry> <code>__cpp_lib_sample >= 201603</code> </entry>
+ </row>
+
+ <row>
<entry> Constant View: A proposal for a <code>std::as_const</code> helper function template </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">
diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
index c518b15b24c..9e4fed569e3 100644
--- a/libstdc++-v3/include/Makefile.am
+++ b/libstdc++-v3/include/Makefile.am
@@ -77,6 +77,7 @@ std_headers = \
${std_srcdir}/unordered_set \
${std_srcdir}/utility \
${std_srcdir}/valarray \
+ ${std_srcdir}/variant \
${std_srcdir}/vector
bits_srcdir = ${glibcxx_srcdir}/include/bits
@@ -132,7 +133,9 @@ bits_headers = \
${bits_srcdir}/mask_array.h \
${bits_srcdir}/memoryfwd.h \
${bits_srcdir}/move.h \
+ ${bits_srcdir}/std_mutex.h \
${bits_srcdir}/node_handle.h \
+ ${bits_srcdir}/numeric_limits.h \
${bits_srcdir}/ostream.tcc \
${bits_srcdir}/ostream_insert.h \
${bits_srcdir}/parse_numbers.h \
@@ -179,6 +182,7 @@ bits_headers = \
${bits_srcdir}/sf_owens_t.tcc \
${bits_srcdir}/sf_polylog.tcc \
${bits_srcdir}/sf_theta.tcc \
+ ${bits_srcdir}/sf_trig.tcc \
${bits_srcdir}/sf_trigint.tcc \
${bits_srcdir}/sf_zeta.tcc \
${bits_srcdir}/shared_ptr.h \
@@ -240,6 +244,8 @@ bits_sup_srcdir = ${glibcxx_srcdir}/libsupc++
bits_sup_headers = \
${bits_sup_srcdir}/atomic_lockfree_defines.h \
${bits_sup_srcdir}/cxxabi_forced.h \
+ ${bits_sup_srcdir}/cxxabi_init_exception.h \
+ ${bits_sup_srcdir}/exception.h \
${bits_sup_srcdir}/exception_defines.h \
${bits_sup_srcdir}/exception_ptr.h \
${bits_sup_srcdir}/hash_bytes.h \
@@ -580,6 +586,7 @@ ext_headers = \
${ext_srcdir}/pod_char_traits.h \
${ext_srcdir}/pointer.h \
${ext_srcdir}/polynomial.h \
+ ${ext_srcdir}/polynomial.tcc \
${ext_srcdir}/pool_allocator.h \
${ext_srcdir}/rb_tree \
${ext_srcdir}/random \
diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in
index 465bc0fa49c..5d020174d5c 100644
--- a/libstdc++-v3/include/Makefile.in
+++ b/libstdc++-v3/include/Makefile.in
@@ -368,6 +368,7 @@ std_headers = \
${std_srcdir}/unordered_set \
${std_srcdir}/utility \
${std_srcdir}/valarray \
+ ${std_srcdir}/variant \
${std_srcdir}/vector
bits_srcdir = ${glibcxx_srcdir}/include/bits
@@ -423,7 +424,9 @@ bits_headers = \
${bits_srcdir}/mask_array.h \
${bits_srcdir}/memoryfwd.h \
${bits_srcdir}/move.h \
+ ${bits_srcdir}/std_mutex.h \
${bits_srcdir}/node_handle.h \
+ ${bits_srcdir}/numeric_limits.h \
${bits_srcdir}/ostream.tcc \
${bits_srcdir}/ostream_insert.h \
${bits_srcdir}/parse_numbers.h \
@@ -470,6 +473,7 @@ bits_headers = \
${bits_srcdir}/sf_owens_t.tcc \
${bits_srcdir}/sf_polylog.tcc \
${bits_srcdir}/sf_theta.tcc \
+ ${bits_srcdir}/sf_trig.tcc \
${bits_srcdir}/sf_trigint.tcc \
${bits_srcdir}/sf_zeta.tcc \
${bits_srcdir}/shared_ptr.h \
@@ -531,6 +535,8 @@ bits_sup_srcdir = ${glibcxx_srcdir}/libsupc++
bits_sup_headers = \
${bits_sup_srcdir}/atomic_lockfree_defines.h \
${bits_sup_srcdir}/cxxabi_forced.h \
+ ${bits_sup_srcdir}/cxxabi_init_exception.h \
+ ${bits_sup_srcdir}/exception.h \
${bits_sup_srcdir}/exception_defines.h \
${bits_sup_srcdir}/exception_ptr.h \
${bits_sup_srcdir}/hash_bytes.h \
@@ -869,6 +875,7 @@ ext_headers = \
${ext_srcdir}/pod_char_traits.h \
${ext_srcdir}/pointer.h \
${ext_srcdir}/polynomial.h \
+ ${ext_srcdir}/polynomial.tcc \
${ext_srcdir}/pool_allocator.h \
${ext_srcdir}/rb_tree \
${ext_srcdir}/random \
diff --git a/libstdc++-v3/include/bits/complex128.h b/libstdc++-v3/include/bits/complex128.h
new file mode 100644
index 00000000000..c60b62a5c20
--- /dev/null
+++ b/libstdc++-v3/include/bits/complex128.h
@@ -0,0 +1,508 @@
+// -*- C++ -*- header.
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/complex128.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{xxxxx}
+ */
+
+#ifndef _GLIBCXX_BITS_COMPLEX128_H
+#define _GLIBCXX_BITS_COMPLEX128_H 1
+
+#pragma GCC system_header
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+
+#include <bits/float128.h>
+#include <complex>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /// complex<__float128> specialization
+ template<>
+ struct complex<__float128>
+ {
+ typedef __float128 value_type;
+
+ // From quadmath.h
+ //typedef _Complex float __attribute__((mode(TC))) __complex128;
+ typedef __complex128 _ComplexT;
+
+ _GLIBCXX_CONSTEXPR
+ complex(_ComplexT __z)
+ : _M_value(__z)
+ { }
+
+ _GLIBCXX_CONSTEXPR
+ complex(__float128 __r = 0.0Q,
+ __float128 __i = 0.0Q)
+#if __cplusplus >= 201103L
+ : _M_value{ __r, __i }
+ { }
+#else
+ {
+ __real__ _M_value = __r;
+ __imag__ _M_value = __i;
+ }
+#endif
+
+ _GLIBCXX_CONSTEXPR
+ complex(const complex<float>& __z)
+ : _M_value(__z.__rep())
+ { }
+
+ _GLIBCXX_CONSTEXPR
+ complex(const complex<double>& __z)
+ : _M_value(__z.__rep())
+ { }
+
+ _GLIBCXX_CONSTEXPR
+ complex(const complex<long double>& __z)
+ : _M_value(__z.__rep())
+ { }
+
+#if __cplusplus >= 201103L
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // DR 387. std::complex over-encapsulated.
+ __attribute ((__abi_tag__ ("cxx11")))
+ constexpr __float128
+ real() const
+ { return __real__ _M_value; }
+
+ __attribute ((__abi_tag__ ("cxx11")))
+ constexpr __float128
+ imag() const
+ { return __imag__ _M_value; }
+#else
+ __float128&
+ real()
+ { return __real__ _M_value; }
+
+ const __float128&
+ real() const
+ { return __real__ _M_value; }
+
+ __float128&
+ imag()
+ { return __imag__ _M_value; }
+
+ const __float128&
+ imag()
+ const { return __imag__ _M_value; }
+#endif
+
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // DR 387. std::complex over-encapsulated.
+ void
+ real(__float128 __val)
+ { __real__ _M_value = __val; }
+
+ void
+ imag(__float128 __val)
+ { __imag__ _M_value = __val; }
+
+ complex&
+ operator=(__float128 __r)
+ {
+ _M_value = __r;
+ return *this;
+ }
+
+ complex&
+ operator+=(__float128 __r)
+ {
+ _M_value += __r;
+ return *this;
+ }
+
+ complex&
+ operator-=(__float128 __r)
+ {
+ _M_value -= __r;
+ return *this;
+ }
+
+ complex&
+ operator*=(__float128 __r)
+ {
+ _M_value *= __r;
+ return *this;
+ }
+
+ complex&
+ operator/=(__float128 __r)
+ {
+ _M_value /= __r;
+ return *this;
+ }
+
+ // The compiler knows how to do this efficiently
+ // complex& operator=(const complex&);
+
+ template<typename _Tp>
+ complex&
+ operator=(const complex<_Tp>& __z)
+ {
+ __real__ _M_value = __z.real();
+ __imag__ _M_value = __z.imag();
+ return *this;
+ }
+
+ template<typename _Tp>
+ complex&
+ operator+=(const complex<_Tp>& __z)
+ {
+ __real__ _M_value += __z.real();
+ __imag__ _M_value += __z.imag();
+ return *this;
+ }
+
+ template<typename _Tp>
+ complex&
+ operator-=(const complex<_Tp>& __z)
+ {
+ __real__ _M_value -= __z.real();
+ __imag__ _M_value -= __z.imag();
+ return *this;
+ }
+
+ template<typename _Tp>
+ complex&
+ operator*=(const complex<_Tp>& __z)
+ {
+ _ComplexT __t;
+ __real__ __t = __z.real();
+ __imag__ __t = __z.imag();
+ _M_value *= __t;
+ return *this;
+ }
+
+ template<typename _Tp>
+ complex&
+ operator/=(const complex<_Tp>& __z)
+ {
+ _ComplexT __t;
+ __real__ __t = __z.real();
+ __imag__ __t = __z.imag();
+ _M_value /= __t;
+ return *this;
+ }
+
+ _GLIBCXX_CONSTEXPR _ComplexT
+ __rep() const
+ { return _M_value; }
+
+ private:
+
+ _ComplexT _M_value;
+ };
+
+ // @todo Ctors from larger types are marked explicit in the smaller classes.
+ //inline _GLIBCXX_CONSTEXPR
+ //complex<float>::complex(const complex<__float128>& __z)
+ //: _M_value(__z.__rep()) { }
+
+ //inline _GLIBCXX_CONSTEXPR
+ //complex<double>::complex(const complex<__float128>& __z)
+ //: _M_value(__z.__rep()) { }
+
+ //inline _GLIBCXX_CONSTEXPR
+ //complex<long double>::complex(const complex<__float128>& __z)
+ //: _M_value(__z.__rep()) { }
+
+} // namespace std
+
+ inline __float128
+ cabsq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cabsq(z.__rep()); }
+
+ inline __float128
+ cargq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cargq(z.__rep()); }
+
+ inline __float128
+ cimagq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cimagq(z.__rep()); }
+
+ inline __float128
+ crealq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return crealq(z.__rep()); }
+
+ inline __complex128
+ cacosq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cacosq(z.__rep()); }
+
+ inline __complex128
+ cacoshq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cacoshq(z.__rep()); }
+
+ inline __complex128
+ casinq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return casinq(z.__rep()); }
+
+ inline __complex128
+ casinhq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return casinhq(z.__rep()); }
+
+ inline __complex128
+ catanq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return catanq(z.__rep()); }
+
+ inline __complex128
+ catanhq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return catanhq(z.__rep()); }
+
+ inline __complex128
+ ccosq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return ccosq(z.__rep()); }
+
+ inline __complex128
+ ccoshq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return ccoshq(z.__rep()); }
+
+ inline __complex128
+ cexpq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cexpq(z.__rep()); }
+
+ inline __complex128
+ cexpiq(__float128 x) _GLIBCXX_USE_NOEXCEPT
+ { return cexpiq(x); }
+
+ inline __complex128
+ clogq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return clogq(z.__rep()); }
+
+ inline __complex128
+ clog10q(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return clog10q(z.__rep()); }
+
+ inline __complex128
+ conjq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return conjq(z.__rep()); }
+
+ inline __complex128
+ cpowq(const std::complex<__float128>& z, const std::complex<__float128>& w)
+ _GLIBCXX_USE_NOEXCEPT
+ { return cpowq(z.__rep(), w.__rep()); }
+
+ inline __complex128
+ cprojq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return cprojq(z.__rep()); }
+
+ inline __complex128
+ csinq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return csinq(z.__rep()); }
+
+ inline __complex128
+ csinhq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return csinhq(z.__rep()); }
+
+ inline __complex128
+ csqrtq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return csqrtq(z.__rep()); }
+
+ inline __complex128
+ ctanq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return ctanq(z.__rep()); }
+
+ inline __complex128
+ ctanhq(const std::complex<__float128>& z) _GLIBCXX_USE_NOEXCEPT
+ { return ctanhq(z.__rep()); };
+
+namespace std
+{
+
+ inline __float128
+ abs(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cabsq(__z); }
+
+ inline __float128
+ arg(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cargq(__z); }
+
+ inline __float128
+ imag(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cimagq(__z); }
+
+ inline __float128
+ real(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return crealq(__z); }
+
+ inline __complex128
+ acos(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cacosq(__z); }
+
+ inline __complex128
+ acosh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cacoshq(__z); }
+
+ inline __complex128
+ asin(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return casinq(__z); }
+
+ inline __complex128
+ asinh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return casinhq(__z); }
+
+ inline __complex128
+ atan(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return catanq(__z); }
+
+ inline __complex128
+ atanh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return catanhq(__z); }
+
+ inline __complex128
+ cos(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return ccosq(__z); }
+
+ inline __complex128
+ cosh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return ccoshq(__z); }
+
+ inline __complex128
+ exp(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cexpq(__z); }
+
+ inline __complex128
+ expi(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return cexpiq(__x); }
+
+ inline __complex128
+ log(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return clogq(__z); }
+
+ inline __complex128
+ log10(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return clog10q(__z); }
+
+ inline __complex128
+ conj(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return conjq(__z); }
+
+ inline __complex128
+ pow(const __complex128& __z, const __complex128& __w) _GLIBCXX_USE_NOEXCEPT
+ { return cpowq(__z, __w); }
+
+ inline __complex128
+ proj(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return cprojq(__z); }
+
+ inline __complex128
+ sin(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return csinq(__z); }
+
+ inline __complex128
+ sinh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return csinhq(__z); }
+
+ inline __complex128
+ sqrt(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return csqrtq(__z); }
+
+ inline __complex128
+ tan(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return ctanq(__z); }
+
+ inline __complex128
+ tanh(const __complex128& __z) _GLIBCXX_USE_NOEXCEPT
+ { return ctanhq(__z); }
+
+#if _GLIBCXX_USE_C99_COMPLEX
+
+ inline __float128
+ __complex_abs(const __complex128& __z)
+ { return cabsq(__z); }
+
+ inline __float128
+ __complex_arg(const __complex128& __z)
+ { return cargq(__z); }
+
+ inline __complex128
+ __complex_cos(const __complex128& __z)
+ { return ccosq(__z); }
+
+ inline __complex128
+ __complex_cosh(const __complex128& __z)
+ { return ccoshq(__z); }
+
+ inline __complex128
+ __complex_exp(const __complex128& __z)
+ { return cexpq(__z); }
+
+ inline __complex128
+ __complex_log(const __complex128& __z)
+ { return clogq(__z); }
+
+ inline __complex128
+ __complex_sin(const __complex128& __z)
+ { return csinq(__z); }
+
+ inline __complex128
+ __complex_sinh(const __complex128& __z)
+ { return csinhq(__z); }
+
+ inline __complex128
+ __complex_sqrt(const __complex128& __z)
+ { return csqrtq(__z); }
+
+ inline __complex128
+ __complex_tan(const __complex128& __z)
+ { return ctanq(__z); }
+
+ inline __complex128
+ __complex_tanh(const __complex128& __z)
+ { return ctanhq(__z); }
+
+ inline __complex128
+ __complex_pow(const __complex128& __x, const __complex128& __y)
+ { return cpowq(__x, __y); }
+
+#endif
+
+_GLIBCXX_END_NAMESPACE_VERSION
+
+#if __cplusplus > 201103L
+
+inline namespace literals {
+inline namespace complex_literals {
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ std::complex<__float128>
+ operator""iq(const char* __str)
+ { return complex<__float128>(0.0Q, strtoflt128(__str, 0)); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // inline namespace complex_literals
+} // inline namespace literals
+
+#endif // C++14
+
+} // namespace std
+
+#endif // __STRICT_ANSI__ && _GLIBCXX_USE_FLOAT128
+
+#endif // _GLIBCXX_BITS_COMPLEX128_H
diff --git a/libstdc++-v3/include/bits/complex_util.h b/libstdc++-v3/include/bits/complex_util.h
new file mode 100644
index 00000000000..ca5503b0da5
--- /dev/null
+++ b/libstdc++-v3/include/bits/complex_util.h
@@ -0,0 +1,329 @@
+// TR29124 math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/complex_util.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_COMPLEX_UTIL_H
+#define _GLIBCXX_BITS_COMPLEX_UTIL_H 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ratio>
+#include <limits>
+#include <bits/specfun_util.h>
+#include <bits/numeric_limits.h>
+#include <ext/math_util.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+//
+// The base definitions of __num_traits, __promote_fp,
+// and __isnan reside in ext/specfun_util.h
+//
+
+ /**
+ * A class to reach into compound numeric types to extract the
+ * value or element type - specialized for complex.
+ */
+ template<>
+ template<typename _Tp>
+ struct __num_traits<std::complex<_Tp>>
+ {
+ using __value_type = typename std::complex<_Tp>::value_type;
+ };
+
+ /**
+ * Create a complex number NaN.
+ */
+ template<>
+ template<typename _Tp>
+ struct __make_NaN<std::complex<_Tp>>
+ {
+ constexpr std::complex<_Tp>
+ operator()()
+ {
+ auto __NaN = std::numeric_limits<_Tp>::quiet_NaN();
+ return std::complex<_Tp>{__NaN, __NaN};
+ }
+ };
+
+ /**
+ * Return true if one component of a complex number is NaN.
+ */
+ template<typename _Tp>
+ inline bool
+ __isnan(const std::complex<_Tp>& __z)
+ { return __isnan(std::real(__z)) || __isnan(std::imag(__z)); }
+
+ /**
+ * Return true if one component of a complex number is inf.
+ */
+ template<typename _Tp>
+ inline bool
+ __isinf(const std::complex<_Tp>& __z)
+ { return __isinf(std::real(__z)) || __isinf(std::imag(__z)); }
+
+
+ /**
+ * Return the L1 norm modulus or the Manhattan metric distance of a complex number.
+ */
+ template<typename _Tp>
+ inline constexpr _Tp
+ __l1_norm(const std::complex<_Tp>& __z)
+ { return std::abs(std::real(__z)) + std::abs(std::imag(__z)); }
+
+ /**
+ * Return the L2 norm modulus or the Euclidean metric distance of a complex number.
+ */
+ template<typename _Tp>
+ inline constexpr _Tp
+ __l2_norm(const std::complex<_Tp>& __z)
+ { return std::norm(__z); }
+
+ /**
+ * Return the Linf norm modulus of a complex number.
+ */
+ template<typename _Tp>
+ inline constexpr _Tp
+ __linf_norm(const std::complex<_Tp>& __z)
+ { return std::max(std::abs(std::real(__z)), std::abs(std::imag(__z))); }
+
+
+ /**
+ * Return the L1 norm modulus or the Manhattan metric distance of a real number.
+ */
+ template<typename _Tp>
+ inline constexpr _Tp
+ __l1_norm(_Tp __x)
+ { return std::abs(__x); }
+
+ /**
+ * Return the L2 norm modulus or the Euclidean metric distance of a real number.
+ */
+ template<typename _Tp>
+ inline constexpr _Tp
+ __l2_norm(_Tp __x)
+ { return std::abs(__x); }
+
+ /**
+ * Return the Linf norm modulus of a real number.
+ */
+ template<typename _Tp>
+ inline constexpr _Tp
+ __linf_norm(_Tp __x)
+ { return std::abs(__x); }
+
+
+ /**
+ * Carefully compute @c z1/z2 avoiding overflow and destructive underflow.
+ * If the quotient is successfully computedit is returned.
+ * Otherwise, std::runtime_error is thrown.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __safe_div(const std::complex<_Tp>& __z1, const std::complex<_Tp>& __z2);
+
+ /**
+ * Carefully compute @c s/z2 avoiding overflow and destructive underflow.
+ * If the quotient is successfully computed it is returned.
+ * Otherwise, @c false is returned and the quotient is not.
+ */
+ template<typename _Sp, typename _Tp>
+ inline std::complex<_Tp>
+ __safe_div(_Sp __s, const std::complex<_Tp>& __z)
+ { return __safe_div(std::complex<_Tp>(__s), __z); }
+
+ /**
+ * Carefully compute @c z1/s avoiding overflow and destructive underflow.
+ * If the quotient is successfully computed it is returned.
+ * Otherwise, @c false is returned and the quotient is not.
+ */
+ template<typename _Sp, typename _Tp>
+ inline std::complex<_Tp>
+ __safe_div(const std::complex<_Tp>& __z, _Sp __s)
+ { return __safe_div(__z, std::complex<_Tp>(__s)); }
+
+ /**
+ * @brief Carefully compute and return @c s1*s2 avoiding overflow.
+ * If the product can be successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ */
+ template<typename _Tp>
+ _Tp
+ __safe_mul(_Tp __s1, _Tp __s2);
+
+ /**
+ * Carefully compute @c z1*z2 avoiding overflow.
+ * If the product is successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __safe_mul(const std::complex<_Tp>& __z1, const std::complex<_Tp>& __z2);
+
+ /**
+ * Carefully compute @c s*z avoiding overflow.
+ * If the product is successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ */
+ template<typename _Sp, typename _Tp>
+ inline std::complex<_Tp>
+ __safe_mul(_Sp __s, const std::complex<_Tp>& __z)
+ { return __safe_mul(std::complex<_Tp>(__s), __z); }
+
+ /**
+ * Carefully compute @c z*s avoiding overflow.
+ * If the product is successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ */
+ template<typename _Sp, typename _Tp>
+ inline std::complex<_Tp>
+ __safe_mul(const std::complex<_Tp>& __z, _Sp __s)
+ { return __safe_mul(__z, std::complex<_Tp>(__s)); }
+
+ /**
+ * Carefully compute @c z*z avoiding overflow.
+ * If the square is successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __safe_sqr(const std::complex<_Tp>& __z);
+
+
+ /**
+ * A function to reliably test a complex number for realness.
+ *
+ * @param __w The complex argument
+ * @param __mul The multiplier for numeric epsilon for comparison tolerance
+ * @return @c true if @f$ Im(w) @f$ is zero within @f$ mul * epsilon @f$,
+ * @c false otherwize.
+ */
+ template<typename _Tp>
+ bool
+ __fpreal(const std::complex<_Tp>& __w, const _Tp __mul = _Tp{5})
+ { return __gnu_cxx::__fpequal(std::imag(__w), _Tp{0}, __mul); }
+
+ // Specialize for real numbers.
+ template<typename _Tp>
+ bool
+ __fpreal(const _Tp)
+ { return true; }
+
+
+ /**
+ * A function to reliably test a complex number for imaginaryness [?].
+ *
+ * @param __w The complex argument
+ * @param __mul The multiplier for numeric epsilon for comparison tolerance
+ * @return @c true if @f$ Re(w) @f$ is zero within @f$ mul * epsilon @f$,
+ * @c false otherwize.
+ */
+ template<typename _Tp>
+ bool
+ __fpimag(const std::complex<_Tp>& __w, const _Tp __mul = _Tp{5})
+ { return __gnu_cxx::__fpequal(std::real(__w), _Tp{0}, __mul); }
+
+ // Specialize for real numbers.
+ template<typename _Tp>
+ bool
+ __fpimag(const _Tp)
+ { return false; }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#if __cplusplus >= 201103L
+
+ /**
+ * We need isnan to be extended to std::complex.
+ */
+ template<typename _Tp>
+ bool
+ isnan(const std::complex<_Tp>& __z)
+ { return std::__detail::__isnan(__z); }
+
+ /**
+ * This is a more modern version of __promote_N in ext/type_traits
+ * specialized for complex.
+ * This is used for numeric argument promotion of complex and cmath
+ */
+ template<>
+ template<typename _Tp>
+ struct __promote_fp_help<std::complex<_Tp>, false>
+ {
+ private:
+ using __vtype = typename std::complex<_Tp>::value_type;
+ public:
+ using __type = decltype(std::complex<__promote_fp_help_t<__vtype>>{});
+ };
+
+ /**
+ * Type introspection for complex.
+ */
+ template<typename _Tp>
+ struct is_complex : public std::false_type
+ { };
+
+ /**
+ * Type introspection for complex.
+ */
+ template<>
+ template<typename _Tp>
+ struct is_complex<std::complex<_Tp>> : public std::true_type
+ { };
+
+ /**
+ * Type introspection for complex.
+ */
+ template<typename _Tp>
+ using is_complex_t = typename is_complex<_Tp>::type;
+
+ /**
+ * Type introspection for complex.
+ */
+ template<typename _Tp>
+ constexpr bool is_complex_v = is_complex<_Tp>::value;
+
+#endif // __cplusplus >= 201103L
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#include <bits/complex_util.tcc>
+
+#endif // _GLIBCXX_BITS_COMPLEX_UTIL_H
diff --git a/libstdc++-v3/include/bits/complex_util.tcc b/libstdc++-v3/include/bits/complex_util.tcc
new file mode 100644
index 00000000000..57b4dba71a6
--- /dev/null
+++ b/libstdc++-v3/include/bits/complex_util.tcc
@@ -0,0 +1,230 @@
+// TR29124 math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/complex_util.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_COMPLEX_UTIL_TCC
+#define _GLIBCXX_BITS_COMPLEX_UTIL_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Carefully compute and return @c z1/z2 avoiding overflow
+ * and destructive underflow.
+ * If the quotient can be successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ *
+ * @param[in] z1 Dividend
+ * @param[in] z2 Divisor
+ * @return The quotient of z1 and z2
+ * @throws std::runtime_error on division overflow.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __safe_div(const std::complex<_Tp>& __z1, const std::complex<_Tp>& __z2)
+ {
+ // Half the largest available floating-point number.
+ constexpr _Tp _S_hmax = __gnu_cxx::__max<_Tp>() / _Tp{2};
+
+ auto __re1 = std::real(__z1);
+ auto __im1 = std::imag(__z1);
+ auto __re2 = std::real(__z2);
+ auto __im2 = std::imag(__z2);
+
+ // Find the largest and smallest magnitudes
+ auto __z1b = std::max(std::abs(__re1), std::abs(__im1));
+ auto __z2max = std::abs(__re2);
+ auto __z2min = std::abs(__im2);
+ if (__z2max < __z2min)
+ std::swap(__z2max, __z2min);
+
+ if (__z2max < _Tp{1} && __z1b > __z2max * _S_hmax)
+ std::__throw_runtime_error(__N("__safe_div: "
+ "overflow in complex division"));
+
+ __re1 /= __z1b;
+ __im1 /= __z1b;
+ __re2 /= __z2max;
+ __im2 /= __z2max;
+ auto __term = __z2min / __z2max;
+ auto __denom = _Tp{1} + __term * __term;
+ auto __scale = __z1b / __z2max / __denom;
+ auto __qr = (__re1 * __re2 + __im1 * __im2) * __scale;
+ auto __qi = (__re2 * __im1 - __re1 * __im2) * __scale;
+
+ return std::complex<_Tp>{__qr, __qi};
+ }
+
+ /**
+ * @brief Carefully compute and return @c s1*s2 avoiding overflow.
+ * If the product can be successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ *
+ * @param[in] s1 Factor 1
+ * @param[in] s2 Factor 2
+ * @return The product of s1 and s2
+ * @throws std::runtime_error on multiplication overflow.
+ */
+ template<typename _Tp>
+ _Tp
+ __safe_mul(_Tp __s1, _Tp __s2)
+ {
+ // The largest available floating-point number.
+ const _Tp _S_max = __gnu_cxx::__max<_Tp>();
+ const auto _S_sqrt_max = __gnu_cxx::__sqrt_max<_Tp>();
+ auto __abs_s1 = std::abs(__s1);
+ auto __abs_s2 = std::abs(__s2);
+ if (__abs_s1 < _S_sqrt_max || __abs_s2 < _S_sqrt_max)
+ {
+ auto __abs_max = __abs_s1;
+ auto __abs_min = __abs_s2;
+ if (__abs_max < __abs_min)
+ std::swap(__abs_max, __abs_min);
+ if (__abs_max > _S_sqrt_max && __abs_min > _S_max / __abs_max)
+ std::__throw_runtime_error(__N("__safe_mul: "
+ "overflow in scalar multiplication"));
+ else
+ return __s1 * __s2;
+ }
+ else
+ std::__throw_runtime_error(__N("__safe_mul: "
+ "overflow in scalar multiplication"));
+ }
+
+ /**
+ * @brief Carefully compute and return @c z1*z2 avoiding overflow.
+ * If the product can be successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ *
+ * @param[in] z1 Factor 1
+ * @param[in] z2 Factor 2
+ * @return The product of z1 and z2
+ * @throws std::runtime_error on multiplication overflow.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __safe_mul(const std::complex<_Tp>& __z1, const std::complex<_Tp>& __z2)
+ {
+ // Half the largest available floating-point number.
+ const _Tp _S_max = __gnu_cxx::__max<_Tp>();
+ const auto _S_sqrt_max = __gnu_cxx::__sqrt_max<_Tp>();
+
+ auto __re1 = std::real(__z1);
+ auto __im1 = std::imag(__z1);
+ auto __re2 = std::real(__z2);
+ auto __im2 = std::imag(__z2);
+
+ auto __abs_rem = std::abs(__re1 - __im1);
+ auto __abs_rep = std::abs(__re2 + __im2);
+ if (__abs_rem < _S_sqrt_max || __abs_rep < _S_sqrt_max)
+ {
+ // Find the largest and smallest magnitudes
+ auto __abs_min = __abs_rem;
+ auto __abs_max = __abs_rep;
+ if (__abs_max < __abs_min)
+ std::swap(__abs_max, __abs_min);
+ if (__abs_max > _S_sqrt_max && __abs_min > _S_max / __abs_max)
+ std::__throw_runtime_error(__N("__safe_mul: "
+ "overflow in complex multiplication"));
+ else
+ return std::complex<_Tp>((__re1 - __im1) * (__re2 + __im2),
+ __safe_mul(__re1, __im2) + __safe_mul(__re2, __im1));
+ }
+ else
+ std::__throw_runtime_error(__N("__safe_mul: "
+ "overflow in complex multiplication"));
+ }
+
+ /**
+ * @brief Carefully compute @c z*z avoiding overflow.
+ * If the product can be successfully computed it is returned.
+ * Otherwise, std::runtime_error is thrown.
+ *
+ * @param[in] z Argument
+ * @return The square of the argument
+ * @throws std::runtime_error on multiplication overflow.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __safe_sqr(const std::complex<_Tp>& __z)
+ {
+ const auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ const auto _S_max = __gnu_cxx::__max<_Tp>();
+ const auto _S_hmax = _S_max / _Tp{2};
+ const auto _S_sqrt_max = __gnu_cxx::__sqrt_max<_Tp>();
+ const auto _S_sqrt_hmax = _S_sqrt_max / _S_sqrt_2;
+
+ auto __rez = std::real(__z);
+ auto __imz = std::imag(__z);
+ auto __abs_rez = std::abs(__rez);
+ auto __abs_imz = std::abs(__imz);
+ auto __zm = __rez - __imz;
+ auto __zp = __rez + __imz;
+ auto __abs_zm = std::abs(__zm);
+ auto __abs_zp = std::abs(__zp);
+
+ if ((__abs_zm < _S_sqrt_max || __abs_zp < _S_sqrt_max)
+ && (__abs_rez < _S_sqrt_hmax || __abs_imz < _S_sqrt_hmax))
+ {
+ // Sort the magnitudes of the imag part factors.
+ auto __imzmax = __abs_rez;
+ auto __imzmin = __abs_imz;
+ if (__imzmax < __imzmin)
+ std::swap(__imzmax, __imzmin);
+ if (__imzmax >= _S_sqrt_hmax && __imzmin > _S_hmax / __imzmax)
+ std::__throw_runtime_error(__N("__safe_sqr: "
+ "overflow in complex multiplication"));
+
+ // Sort the magnitudes of the real part factors.
+ auto __rezmax = __abs_zp;
+ auto __rezmin = __abs_zm;
+ if (__imzmax < __rezmin)
+ std::swap(__rezmax, __rezmin);
+ if (__rezmax >= _S_sqrt_max && __rezmin > _S_max / __rezmax)
+ std::__throw_runtime_error(__N("__safe_sqr: "
+ "overflow in complex multiplication"));
+
+ return std::complex<_Tp>(__zm * __zp, _Tp{2} * __rez * __imz);
+ }
+ else
+ std::__throw_runtime_error(__N("__safe_sqr: "
+ "overflow in complex multiplication"));
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_COMPLEX_UTIL_TCC
diff --git a/libstdc++-v3/include/bits/float128.h b/libstdc++-v3/include/bits/float128.h
new file mode 100644
index 00000000000..9053ec100e4
--- /dev/null
+++ b/libstdc++-v3/include/bits/float128.h
@@ -0,0 +1,688 @@
+// -*- C++ -*- header.
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/float128.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{xxxxx}
+ */
+
+#ifndef _GLIBCXX_BITS_FLOAT128_H
+#define _GLIBCXX_BITS_FLOAT128_H 1
+
+#pragma GCC system_header
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+
+#include <limits>
+#include <iosfwd>
+#include <quadmath.h>
+
+// From <limits>
+#define __glibcxx_max_digits10(T) \
+ (2 + (T) * 643L / 2136)
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ inline __float128
+ acos(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return acosq(__x); }
+
+ inline __float128
+ asin(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return asinq(__x); }
+
+ inline __float128
+ atan(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return atanq(__x); }
+
+ inline __float128
+ atan2(__float128 __y, __float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return atan2q(__y, __x); }
+
+ inline __float128
+ cbrt(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return cbrtq(__x); }
+
+ inline __float128
+ ceil(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return ceilq(__x); }
+
+ inline __float128
+ copysign(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return copysignq(__x, __y); }
+
+ inline __float128
+ cos(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return cosq(__x); }
+
+ inline __float128
+ cosh(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return coshq(__x); }
+
+ inline __float128
+ exp(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return expq(__x); }
+
+ inline __float128
+ erf(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return erfq(__x); }
+
+ inline __float128
+ erfc(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return erfcq(__x); }
+
+ inline __float128
+ expm1(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return expm1q(__x); }
+
+ inline __float128
+ fabs(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return fabsq(__x); }
+
+ inline __float128
+ fdim(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return fdimq(__x, __y); }
+
+ inline __float128
+ floor(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return floorq(__x); }
+
+ inline __float128
+ fma(__float128 __m, __float128 __x, __float128 __b) _GLIBCXX_USE_NOEXCEPT
+ { return fmaq(__m, __x, __b); }
+
+ inline __float128
+ fmax(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return fmaxq(__x, __y); }
+
+ inline __float128
+ fmin(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return fminq(__x, __y); }
+
+ inline __float128
+ fmod(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return fmodq(__x, __y); }
+
+ inline __float128
+ frexp(__float128 __x, int* __exp) _GLIBCXX_USE_NOEXCEPT
+ { return frexpq(__x, __exp); }
+
+ inline __float128
+ hypot(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return hypotq(__x, __y); }
+
+ inline int
+ isinf(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return isinfq(__x); }
+
+ inline int
+ ilogb(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return ilogbq(__x); }
+
+ inline int
+ isnan(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return isnanq(__x); }
+
+ inline __float128
+ j0(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return j0q(__x); }
+
+ inline __float128
+ j1(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return j1q(__x); }
+
+ inline __float128
+ jn(int __n, __float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return jnq(__n, __x); }
+
+ inline __float128
+ ldexp(__float128 __x, int __exp) _GLIBCXX_USE_NOEXCEPT
+ { return ldexpq(__x, __exp); }
+
+ inline __float128
+ lgamma(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return lgammaq(__x); }
+
+ inline long long int
+ llrint(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return llrintq(__x); }
+
+ inline long long int
+ llround(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return llroundq(__x); }
+
+#ifndef NO_LOGBQ
+ inline __float128
+ logb(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return logbq(__x); }
+#endif
+
+ inline __float128
+ log(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return logq(__x); }
+
+ inline __float128
+ log10(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return log10q(__x); }
+
+ inline __float128
+ log2(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return log2q(__x); }
+
+ inline __float128
+ log1p(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return log1pq(__x); }
+
+ inline long int
+ lrint(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return lrintq(__x); }
+
+ inline long int
+ lround(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return lroundq(__x); }
+
+ inline __float128
+ modf(__float128 __x, __float128* __iptr) _GLIBCXX_USE_NOEXCEPT
+ { return modfq(__x, __iptr); }
+
+ inline __float128
+ nanq(const char* __str) _GLIBCXX_USE_NOEXCEPT
+ { return __builtin_nanq(__str); }
+
+ inline __float128
+ nearbyint(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return nearbyintq(__x); }
+
+ inline __float128
+ nextafter(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return nextafterq(__x, __y); }
+
+ inline __float128
+ pow(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return powq(__x, __y); }
+
+ inline __float128
+ remainder(__float128 __x, __float128 __y) _GLIBCXX_USE_NOEXCEPT
+ { return remainderq(__x, __y); }
+
+ inline __float128
+ remquo(__float128 __x, __float128 __y, int* __n) _GLIBCXX_USE_NOEXCEPT
+ { return remquoq(__x, __y, __n); }
+
+ inline __float128
+ rint(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return rintq(__x); }
+
+ inline __float128
+ round(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return roundq(__x); }
+
+ inline __float128
+ scalbln(__float128 __x, long int __n) _GLIBCXX_USE_NOEXCEPT
+ { return scalblnq(__x, __n); }
+
+ inline __float128
+ scalbn(__float128 __x, int __n) _GLIBCXX_USE_NOEXCEPT
+ { return scalbnq(__x, __n); }
+
+ inline int
+ signbit(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return signbitq(__x); }
+
+ inline void
+ sincos(__float128 __x, __float128 * __sin, __float128 * __cos)
+ _GLIBCXX_USE_NOEXCEPT
+ { return sincosq(__x, __sin, __cos); }
+
+ inline __float128
+ sin(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return sinq(__x); }
+
+ inline __float128
+ sinh(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return sinhq(__x); }
+
+ inline __float128
+ sqrt(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return sqrtq(__x); }
+
+ inline __float128
+ tan(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return tanq(__x); }
+
+ inline __float128
+ tanh(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return tanhq(__x); }
+
+ inline __float128
+ tgamma(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return tgammaq(__x); }
+
+ inline __float128
+ trunc(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return truncq(__x); }
+
+ inline __float128
+ y0(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return y0q(__x); }
+
+ inline __float128
+ y1(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return y1q(__x); }
+
+ inline __float128
+ yn(int __n, __float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return ynq(__n, __x); }
+
+
+ inline __float128
+ mod(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return __x * __x; }
+
+ inline __float128
+ arg(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return __x < 0.0Q ? M_PIq : 0.0Q; }
+
+ inline _GLIBCXX_USE_CONSTEXPR __float128
+ imag(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return 0.0Q; }
+
+ inline _GLIBCXX_USE_CONSTEXPR __float128
+ real(__float128 __x) _GLIBCXX_USE_NOEXCEPT
+ { return __x; }
+
+
+ /// numeric_limits<__float128> specialization.
+ template<>
+ struct numeric_limits<__float128>
+ {
+ static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true;
+
+ static _GLIBCXX_CONSTEXPR __float128
+ min() _GLIBCXX_USE_NOEXCEPT { return FLT128_MIN; }
+
+ static _GLIBCXX_CONSTEXPR __float128
+ max() _GLIBCXX_USE_NOEXCEPT { return FLT128_MAX; }
+
+#if __cplusplus >= 201103L
+ static _GLIBCXX_CONSTEXPR __float128
+ lowest() _GLIBCXX_USE_NOEXCEPT { return -FLT128_MAX; }
+#endif
+
+ static _GLIBCXX_USE_CONSTEXPR int digits = FLT128_MANT_DIG;
+ static _GLIBCXX_USE_CONSTEXPR int digits10 = FLT128_DIG;
+#if __cplusplus >= 201103L
+ static _GLIBCXX_USE_CONSTEXPR int max_digits10
+ = __glibcxx_max_digits10 (FLT128_MANT_DIG);
+#endif
+ static _GLIBCXX_USE_CONSTEXPR bool is_signed = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_integer = false;
+ static _GLIBCXX_USE_CONSTEXPR bool is_exact = false;
+ static _GLIBCXX_USE_CONSTEXPR int radix = __FLT_RADIX__;
+
+ static _GLIBCXX_CONSTEXPR __float128
+ epsilon() _GLIBCXX_USE_NOEXCEPT { return FLT128_EPSILON; }
+
+ static _GLIBCXX_CONSTEXPR __float128
+ round_error() _GLIBCXX_USE_NOEXCEPT { return 0.5Q; }
+
+ static _GLIBCXX_USE_CONSTEXPR int min_exponent = FLT128_MIN_EXP;
+ static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = FLT128_MIN_10_EXP;
+ static _GLIBCXX_USE_CONSTEXPR int max_exponent = FLT128_MAX_EXP;
+ static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = FLT128_MAX_10_EXP;
+
+ static _GLIBCXX_USE_CONSTEXPR bool has_infinity = true;
+ static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = true;
+ static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = has_quiet_NaN;
+ static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm
+ = denorm_present;
+ static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = true;
+
+ static _GLIBCXX_CONSTEXPR __float128
+ infinity() _GLIBCXX_USE_NOEXCEPT { return __builtin_infq(); }
+
+ static _GLIBCXX_CONSTEXPR __float128
+ quiet_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nanq(""); }
+
+ static _GLIBCXX_CONSTEXPR __float128
+ signaling_NaN() _GLIBCXX_USE_NOEXCEPT { return __builtin_nansq(""); }
+
+ static _GLIBCXX_CONSTEXPR __float128
+ denorm_min() _GLIBCXX_USE_NOEXCEPT { return FLT128_DENORM_MIN; }
+
+ static _GLIBCXX_USE_CONSTEXPR bool is_iec559
+ = has_infinity && has_quiet_NaN && has_denorm == denorm_present;
+ static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true;
+ static _GLIBCXX_USE_CONSTEXPR bool is_modulo = false;
+
+ static _GLIBCXX_USE_CONSTEXPR bool traps = false;//???
+ static _GLIBCXX_USE_CONSTEXPR bool tinyness_before =
+ false;//???
+ static _GLIBCXX_USE_CONSTEXPR float_round_style round_style =
+ round_to_nearest;
+ };
+
+ template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
+ std::basic_ostream<_CharT, _Traits>&
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ __float128 __x);
+
+ template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
+ std::basic_istream<_CharT, _Traits>&
+ operator>>(std::basic_istream<_CharT, _Traits>& __is, __float128& __x);
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+// From <limits>
+#undef __glibcxx_max_digits10
+
+#include <bits/numeric_limits.h>
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Part of std::numeric_limits.
+ * The idea is that types with, say, non-constexpr or even dynamic epsilon()
+ * can participate in this.
+ * I think variable templates could be specialized with non-constexpr types
+ * but I need something to work in C++11 and variable templates won't allow
+ * extraction of variable max from a mp number.
+ */
+
+ // Constexpr function template versions of std::numeric_limits.
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_specialized<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_specialized; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __min<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::min(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::max(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __lowest<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::lowest(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __digits<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::digits; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __digits10<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::digits10; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __max_digits10<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::max_digits10; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_signed<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_signed; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_integer<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_integer; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_exact<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_exact; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __radix<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::radix; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __epsilon<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::epsilon(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __round_error<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::round_error(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __min_exponent<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::min_exponent; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __min_exponent10<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::min_exponent10; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __max_exponent<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::max_exponent; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR int
+ __max_exponent10<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::max_exponent10; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __has_infinity<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::has_infinity; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __has_quiet_NaN<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::has_quiet_NaN; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __has_signaling_NaN<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::has_signaling_NaN; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR std::float_denorm_style
+ __has_denorm<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::has_denorm; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __has_denorm_loss<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::has_denorm_loss; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __infinity<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::infinity(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __quiet_NaN<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::quiet_NaN(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __signaling_NaN<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::signaling_NaN(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR __float128
+ __denorm_min<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::denorm_min(); }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_iec559<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_iec559; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_bounded<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_bounded; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __is_modulo<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::is_modulo; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __traps<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::traps; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR bool
+ __tinyness_before<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::tinyness_before; }
+
+ template<>
+ _GLIBCXX_CONSTEXPR std::float_round_style
+ __round_style<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<__float128>::round_style; }
+
+ // Extra bits to help with numerics...
+ // These depend math functions which aren't constexpr for __float128.
+ // These are specializations of the functions in bits/numeric_limits.h
+
+ template<>
+ __float128
+ __sqrt_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::sqrt(__max(__float128{})); }
+
+#ifdef NO_CBRT
+ template<>
+ __float128
+ __cbrt_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__max(__float128{}), 1 / 3.0Q); }
+#else
+ template<>
+ __float128
+ __cbrt_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::cbrt(__max(__float128{})); }
+#endif
+
+ template<>
+ __float128
+ __root_max(__float128 __root) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__max(__float128{}), 1 / __root); }
+
+ template<>
+ __float128
+ __log_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::log(__max(__float128{})); }
+
+ template<>
+ __float128
+ __log10_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::log10(__max(__float128{})); }
+
+
+ template<>
+ __float128
+ __sqrt_min<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::sqrt(__min(__float128{})); }
+
+#ifdef NO_CBRT
+ template<>
+ __float128
+ __cbrt_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__min(__float128{}), 1 / 3.0Q); }
+#else
+ template<>
+ __float128
+ __cbrt_min<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::cbrt(__min(__float128{})); }
+#endif
+
+ template<>
+ __float128
+ __root_min(__float128 __root) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__min(__float128{}), 1 / __root); }
+
+ template<>
+ __float128
+ __log_min<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::log(__min(__float128{})); }
+
+ template<>
+ __float128
+ __log10_min<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::log10(__min(__float128{})); }
+
+ template<>
+ __float128
+ __sqrt_eps<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::sqrt(__epsilon(__float128{})); }
+
+#ifdef NO_CBRT
+ template<>
+ __float128
+ __cbrt_max<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__epsilon(__float128{}), 1 / 3.0Q); }
+#else
+ template<>
+ __float128
+ __cbrt_eps<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::cbrt(__epsilon(__float128{})); }
+#endif
+
+ template<>
+ __float128
+ __root_eps(__float128 __root) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__epsilon(__float128{}), 1 / __root); }
+
+ template<>
+ __float128
+ __log_eps<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::log(__epsilon(__float128{})); }
+
+ template<>
+ __float128
+ __log10_eps<__float128>(__float128) _GLIBCXX_USE_NOEXCEPT
+ { return std::log10(__epsilon(__float128{})); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // __STRICT_ANSI__ && _GLIBCXX_USE_FLOAT128
+
+#include <bits/float128.tcc>
+
+#endif // _GLIBCXX_BITS_FLOAT128_H
diff --git a/libstdc++-v3/include/bits/float128.tcc b/libstdc++-v3/include/bits/float128.tcc
new file mode 100644
index 00000000000..636ab01a3b1
--- /dev/null
+++ b/libstdc++-v3/include/bits/float128.tcc
@@ -0,0 +1,100 @@
+// -*- C++ -*- header.
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/float128.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{xxxxx}
+ */
+
+#ifndef _GLIBCXX_BITS_FLOAT128_TCC
+#define _GLIBCXX_BITS_FLOAT128_TCC 1
+
+#pragma GCC system_header
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+
+#include <iostream>
+#include <iomanip> // For setw().
+#include <sstream>
+#include <quadmath.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
+ std::basic_ostream<_CharT, _Traits>&
+ operator<<(std::basic_ostream<_CharT, _Traits>& __os,
+ __float128 __x)
+ {
+ auto __sci = __os.flags() & std::ios::scientific;
+ auto __hex = __os.flags() & std::ios::fixed
+ && __os.flags() & std::ios::scientific;
+ //auto __hex = __os.flags() & (std::ios::fixed | std::ios::scientific);
+ auto __upper = __os.flags() & std::ios::uppercase;
+ auto __width = __os.width();
+ std::ostringstream __fmt;
+ __fmt << '%';
+
+ if (__os.flags() & std::ios::showpos)
+ __fmt << '+';
+ else
+ __fmt << ' '; // Space instead of plus standard?
+
+ if (__os.flags() & std::ios::left)
+ __fmt << '-';
+
+ __fmt << __os.width() << '.' << __os.precision() << 'Q';
+
+ if (__hex)
+ __fmt << (__upper ? 'A' : 'a');
+ else if (__sci)
+ __fmt << (__upper ? 'E' : 'e');
+ else
+ __fmt << (__upper ? 'G' : 'g');
+
+ constexpr int __strlen = 1000;
+ char __str[__strlen];
+ quadmath_snprintf(__str, __strlen, __fmt.str().c_str(), __x) ;
+ __os << __str;
+ return __os;
+ }
+
+ template<typename _CharT, typename _Traits = std::char_traits<_CharT>>
+ std::basic_istream<_CharT, _Traits>&
+ operator>>(std::basic_istream<_CharT, _Traits>& __is, __float128& __x)
+ {
+ constexpr int __strlen = 160;
+ char __str[__strlen];
+ __is >> std::setw(__strlen) >> __str;
+ __x = strtoflt128(__str, 0);
+ return __is;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace std
+
+#endif // __STRICT_ANSI__ && _GLIBCXX_USE_FLOAT128
+
+#endif // _GLIBCXX_BITS_FLOAT128_TCC
diff --git a/libstdc++-v3/include/bits/numeric_limits.h b/libstdc++-v3/include/bits/numeric_limits.h
new file mode 100644
index 00000000000..99eda1250da
--- /dev/null
+++ b/libstdc++-v3/include/bits/numeric_limits.h
@@ -0,0 +1,313 @@
+// math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/numeric_limits.h
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_NUMERIC_LIMITS_H
+#define _GLIBCXX_BITS_NUMERIC_LIMITS_H 1
+
+#pragma GCC system_header
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Part of std::numeric_limits.
+ * The idea is that types with, say, non-constexpr or even dynamic epsilon()
+ * can participate in this.
+ * I think variable templates could be specialized with non-constexpr types
+ * but I need something to work in C++11 and variable templates won't allow
+ * extraction of variable max from a mp number.
+ */
+
+ // Constexpr function template versions of std::numeric_limits.
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_specialized(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_specialized; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::min(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::max(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __lowest(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::lowest(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __digits(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::digits; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __digits10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::digits10; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __max_digits10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::max_digits10; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_signed(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_signed; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_integer(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_integer; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_exact(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_exact; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __radix(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::radix; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __epsilon(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::epsilon(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __round_error(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::round_error(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __min_exponent(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::min_exponent; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __min_exponent10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::min_exponent10; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __max_exponent(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::max_exponent; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR int
+ __max_exponent10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::max_exponent10; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __has_infinity(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::has_infinity; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __has_quiet_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::has_quiet_NaN; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __has_signaling_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::has_signaling_NaN; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR std::float_denorm_style
+ __has_denorm(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::has_denorm; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __has_denorm_loss(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::has_denorm_loss; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __infinity(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::infinity(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __quiet_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::quiet_NaN(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __signaling_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::signaling_NaN(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR _Tp
+ __denorm_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::denorm_min(); }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_iec559(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_iec559; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_bounded(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_bounded; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __is_modulo(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::is_modulo; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __traps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::traps; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR bool
+ __tinyness_before(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::tinyness_before; }
+
+ template<typename _Tp>
+ _GLIBCXX_CONSTEXPR std::float_round_style
+ __round_style(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::numeric_limits<_Tp>::round_style; }
+
+ // Extra bits to help with numerics...
+ // These depend on constexpr math functions.
+
+ template<typename _Tp>
+ _Tp
+ __sqrt_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::sqrt(__max(_Tp{})); }
+
+#ifdef NO_CBRT
+ template<typename _Tp>
+ _Tp
+ __cbrt_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__max(_Tp{}), 1 / _Tp{3}); }
+#else
+ template<typename _Tp>
+ _Tp
+ __cbrt_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::cbrt(__max(_Tp{})); }
+#endif
+
+ template<typename _Tp>
+ _Tp
+ __root_max(_Tp __root) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__max(_Tp{}), 1 / __root); }
+
+ template<typename _Tp>
+ _Tp
+ __log_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::log(__max(_Tp{})); }
+
+ template<typename _Tp>
+ _Tp
+ __log10_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::log10(__max(_Tp{})); }
+
+
+ template<typename _Tp>
+ _Tp
+ __sqrt_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::sqrt(__min(_Tp{})); }
+
+#ifdef NO_CBRT
+ template<typename _Tp>
+ _Tp
+ __cbrt_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__min(_Tp{}), 1 / _Tp{3}); }
+#else
+ template<typename _Tp>
+ _Tp
+ __cbrt_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::cbrt(__min(_Tp{})); }
+#endif
+
+ template<typename _Tp>
+ _Tp
+ __root_min(_Tp __root) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__min(_Tp{}), 1 / __root); }
+
+ template<typename _Tp>
+ _Tp
+ __log_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::log(__min(_Tp{})); }
+
+ template<typename _Tp>
+ _Tp
+ __log10_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::log10(__min(_Tp{})); }
+
+ template<typename _Tp>
+ _Tp
+ __sqrt_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::sqrt(__epsilon(_Tp{})); }
+
+#ifdef NO_CBRT
+ template<typename _Tp>
+ _Tp
+ __cbrt_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__epsilon(_Tp{}), 1 / _Tp{3}); }
+#else
+ template<typename _Tp>
+ _Tp
+ __cbrt_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::cbrt(__epsilon(_Tp{})); }
+#endif
+
+ template<typename _Tp>
+ _Tp
+ __root_eps(_Tp __root) _GLIBCXX_USE_NOEXCEPT
+ { return std::pow(__epsilon(_Tp{}), 1 / __root); }
+
+ template<typename _Tp>
+ _Tp
+ __log_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::log(__epsilon(_Tp{})); }
+
+ template<typename _Tp>
+ _Tp
+ __log10_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT
+ { return std::log10(__epsilon(_Tp{})); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // _GLIBCXX_BITS_NUMERIC_LIMITS_H
diff --git a/libstdc++-v3/include/bits/sf_airy.tcc b/libstdc++-v3/include/bits/sf_airy.tcc
new file mode 100644
index 00000000000..091a3ef339c
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_airy.tcc
@@ -0,0 +1,2663 @@
+// TR29124 math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_airy.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_SF_AIRY_TCC
+#define _GLIBCXX_BITS_SF_AIRY_TCC 1
+
+#pragma GCC system_header
+
+#include <bits/complex_util.h>
+#include <bits/summation.h>
+#include <ext/polynomial.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+
+ /**
+ * This struct defines the Airy function state with two presumably
+ * numerically useful Airy functions and their derivatives.
+ * The data mambers are directly accessible.
+ * The lone method computes the Wronskian from the stord functions.
+ * A static method returns the correct Wronskian.
+ */
+ template<typename _Tp>
+ struct _AiryState
+ {
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+
+ _Tp z;
+ _Tp Ai;
+ _Tp Aip;
+ _Tp Bi;
+ _Tp Bip;
+
+ constexpr _Tp
+ Wronskian() const
+ { return Ai * Bip - Bi * Aip; }
+
+ static constexpr _Val
+ true_Wronskian()
+ { return _Val{1} / __gnu_cxx::__math_constants<_Val>::__pi; }
+ };
+
+
+ /**
+ * A structure containing three auxilliary Airy functions
+ * and their derivatives.
+ */
+ template<typename _Tp>
+ struct _AiryAuxilliaryState
+ {
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+
+ _Tp z;
+ _Tp fai;
+ _Tp faip;
+ _Tp gai;
+ _Tp gaip;
+ _Tp hai;
+ _Tp haip;
+ };
+
+
+ /**
+ * This class orgianizes series solutions of the Airy function.
+ * @f[
+ * fai(x) = \sum_{k=0}^\infty \frac{(2k+1)!!!x^{3k}}{(2k+1)!}
+ * @f]
+ * @f[
+ * gai(x) = \sum_{k=0}^\infty \frac{(2k+2)!!!x^{3k+1}}{(2k+2)!}
+ * @f]
+ * @f[
+ * hai(x) = \sum_{k=0}^\infty \frac{(2k+3)!!!x^{3k+2}}{(2k+3)!}
+ * @f]
+ * This class contains tabulations of the factors appearing in the sums above.
+ */
+ template<typename _Tp>
+ class _Airy_series
+ {
+ using __cmplx = std::complex<_Tp>;
+
+ public: // FIXME!!!
+ static constexpr int _N_FGH = 200;
+ private: // FIXME!!!
+ static constexpr _Tp _S_slope_F{-2.660L}, _S_intercept_F{-0.778L};
+ static constexpr _Tp _S_slope_Fp{-2.576L}, _S_intercept_Fp{-0.301L};
+ static constexpr _Tp _S_slope_G{-2.708L}, _S_intercept_G{-1.079L};
+ static constexpr _Tp _S_slope_Gp{-2.632L}, _S_intercept_Gp{-0.477L};
+ static constexpr _Tp _S_slope_H{-2.75L}, _S_intercept_H{-1.25L};
+ static constexpr _Tp _S_slope_Hp{-2.625L}, _S_intercept_Hp{-0.6L};
+
+ public:
+
+ static constexpr _Tp _S_eps = __gnu_cxx::__epsilon(_Tp{});
+ static constexpr _Tp _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ static constexpr _Tp _S_sqrt_pi
+ = __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ static constexpr _Tp _S_Ai0
+ = _Tp{3.550280538878172392600631860041831763980e-1L};
+ static constexpr _Tp _S_Aip0
+ = _Tp{-2.588194037928067984051835601892039634793e-1L};
+ static constexpr _Tp _S_Bi0
+ = _Tp{6.149266274460007351509223690936135535960e-1L};
+ static constexpr _Tp _S_Bip0
+ = _Tp{4.482883573538263579148237103988283908668e-1L};
+ static constexpr _Tp _S_Hi0
+ = _Tp{4.099510849640004901006149127290757023959e-1L};
+ static constexpr _Tp _S_Hip0
+ = _Tp{2.988589049025509052765491402658855939102e-1L};
+ static constexpr _Tp _S_Gi0
+ = _Tp{2.049755424820002450503074563645378511979e-1L};
+ static constexpr _Tp _S_Gip0
+ = _Tp{1.494294524512754526382745701329427969551e-1L};
+ static constexpr __cmplx _S_i{_Tp{0}, _Tp{1}};
+
+ static _AiryState<std::complex<_Tp>>
+ _S_Airy(std::complex<_Tp> __t);
+
+ static _AiryState<std::complex<_Tp>>
+ _S_Fock(std::complex<_Tp> __t);
+
+ static std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _S_Ai(std::complex<_Tp> __t);
+
+ static std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _S_Bi(std::complex<_Tp> __t);
+
+ static _AiryAuxilliaryState<std::complex<_Tp>>
+ _S_FGH(std::complex<_Tp> __t);
+
+ static _AiryState<std::complex<_Tp>>
+ _S_Scorer(std::complex<_Tp> __t);
+ static _AiryState<std::complex<_Tp>>
+ _S_Scorer2(std::complex<_Tp> __t);
+
+ private:
+
+ static _AiryState<std::complex<_Tp>>
+ _S_AiryHelp(std::complex<_Tp> __t, bool __return_fock_airy = false);
+
+ std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ static _S_AiBi(std::complex<_Tp> __t, std::pair<_Tp, _Tp> _Z0);
+ };
+
+ // Type-dependent limits for the arrays.
+ // FIXME: Make these limits digits10-based.
+ template<typename _Tp>
+ constexpr int __max_FGH = _Airy_series<_Tp>::_N_FGH;
+
+ template<>
+ constexpr int __max_FGH<float> = 15;
+
+ template<>
+ constexpr int __max_FGH<double> = 79;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_eps;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_pi;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_sqrt_pi;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Ai0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Aip0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Bi0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Bip0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Hi0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Hip0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Gi0;
+
+ template<typename _Tp>
+ constexpr _Tp
+ _Airy_series<_Tp>::_S_Gip0;
+
+ template<typename _Tp>
+ constexpr std::complex<_Tp>
+ _Airy_series<_Tp>::_S_i;
+
+ /**
+ * Return the Airy functions by using the series expansions of
+ * the auxilliary Airy functions:
+ * @f[
+ * fai(x) = \sum_{k=0}^\infty \frac{(2k+1)!!!x^{3k}}{(2k+1)!}
+ * @f]
+ * @f[
+ * gai(x) = \sum_{k=0}^\infty \frac{(2k+2)!!!x^{3k+1}}{(2k+2)!}
+ * @f]
+ * The Airy functions are then defined by:
+ * @f[
+ * Ai(x) = Ai(0)fai(x) + Ai'(0)gai(x)
+ * @f]
+ * @f[
+ * Bi(x) = Bi(0)fai(x) + Bi'(0)gai(x)
+ * @f]
+ * where @f$ Ai(0) = 3^{-2/3}/\Gamma(2/3) @f$, @f$ Ai'(0) = -3{-1/2}Bi'(0) @f$
+ * and @f$ Bi(0) = 3^{1/2}Ai(0) @f$, @f$ Bi'(0) = 3^{1/6}/\Gamma(1/3) @f$
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_AiryHelp(std::complex<_Tp> __t,
+ bool __return_fock_airy)
+ {
+ const _Tp _S_log10min = __gnu_cxx::__log10_min(_Tp{});
+ const auto _S_min = std::numeric_limits<_Tp>::min();
+ const auto __log10t = std::log10(std::abs(__t));
+ const auto __ttt = __t * __t * __t;
+
+ auto _Fai = _Tp{1};
+ auto _Gai = _Tp{1};
+ auto _Faip = _Tp{0};
+ auto _Gaip = _Tp{1};
+ auto __term = __cmplx{_Tp{1}};
+ auto _F = __cmplx{_Tp{1}};
+ auto _G = __t;
+ auto _Fp = __cmplx{_Tp{0}};
+ auto _Gp = __cmplx{_Tp{1}};
+ for (int __k = 1; __k < __max_FGH<_Tp>; ++__k)
+ {
+ if (std::abs(__t) < _S_eps)
+ break;
+
+ auto __xx = __log10t * (3 * __k + 1)
+ + _S_slope_G * __k + _S_intercept_G;
+ if (__xx < _S_log10min)
+ break;
+
+ _Fai /= (3ULL * __k - 1ULL) * (3ULL * __k);
+ if (_Fai < _Tp{10} * _S_min)
+ break;
+ _Faip = (3ULL * __k) * _Fai;
+ _Gai /= (3ULL * __k) * (3ULL * __k + 1ULL);
+ _Gaip = (3ULL * __k + 1ULL) * _Gai;
+
+ __term *= __ttt;
+ _F += _Fai * __term;
+ _G += _Gai * __term * __t;
+ _Fp += _Faip * __term / __t;
+ _Gp += _Gaip * __term;
+ }
+ auto _UU = _S_sqrt_pi * (_S_Bi0 * _F + _S_Bip0 * _G);
+ auto _VV = _S_sqrt_pi * (_S_Ai0 * _F + _S_Aip0 * _G);
+ auto _UUp = _S_sqrt_pi * (_S_Bi0 * _Fp + _S_Bip0 * _Gp);
+ auto _VVp = _S_sqrt_pi * (_S_Ai0 * _Fp + _S_Aip0 * _Gp);
+
+ if (!__return_fock_airy)
+ {
+ auto _Bi = _UU / _S_sqrt_pi;
+ auto _Ai = _VV / _S_sqrt_pi;
+ auto _Bip = _UUp / _S_sqrt_pi;
+ auto _Aip = _VVp / _S_sqrt_pi;
+ return _AiryState<std::complex<_Tp>>{__t, _Ai, _Aip, _Bi, _Bip};
+ }
+ else
+ {
+ auto __w1 = _UU - _S_i * _VV;
+ auto __w2 = _UU + _S_i * _VV;
+ auto __w1p = _UUp - _S_i * _VVp;
+ auto __w2p = _UUp + _S_i * _VVp;
+ return _AiryState<std::complex<_Tp>>{__t, __w1, __w1p, __w2, __w2p};
+ }
+ }
+
+ /**
+ * Return the Airy function of the first kind and its derivative
+ * by using the series expansions of the auxilliary Airy functions:
+ * @f[
+ * fai(x) = \sum_{k=0}^\infty \frac{(2k+1)!!!x^{3k}}{(2k+1)!}
+ * @f]
+ * @f[
+ * gai(x) = \sum_{k=0}^\infty \frac{(2k+2)!!!x^{3k+1}}{(2k+2)!}
+ * @f]
+ * The Airy function of the first kind is then defined by:
+ * @f[
+ * Ai(x) = Ai(0)fai(x) + Ai'(0)gai(x)
+ * @f]
+ * where @f$ Ai(0) = 3^{-2/3}/\Gamma(2/3) @f$, @f$ Ai'(0) = -3{-1/2}Bi'(0) @f$
+ * and @f$ Bi(0) = 3^{1/2}Ai(0) @f$, @f$ Bi'(0) = 3^{1/6}/\Gamma(1/3) @f$
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_Ai(std::complex<_Tp> __t)
+ { return _S_AiBi(__t, std::make_pair(_S_Ai0, _S_Aip0)); }
+
+ /**
+ * Return the Airy function of the second kind and its derivative
+ * by using the series expansions of the auxilliary Airy functions:
+ * @f[
+ * fai(x) = \sum_{k=0}^\infty \frac{(2k+1)!!!x^{3k}}{(2k+1)!}
+ * @f]
+ * @f[
+ * gai(x) = \sum_{k=0}^\infty \frac{(2k+2)!!!x^{3k+1}}{(2k+2)!}
+ * @f]
+ * The Airy function of the second kind is then defined by:
+ * @f[
+ * Bi(x) = Bi(0)fai(x) + Bi'(0)gai(x)
+ * @f]
+ * where @f$ Ai(0) = 3^{-2/3}/\Gamma(2/3) @f$, @f$ Ai'(0) = -3{-1/2}Bi'(0) @f$
+ * and @f$ Bi(0) = 3^{1/2}Ai(0) @f$, @f$ Bi'(0) = 3^{1/6}/\Gamma(1/3) @f$
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_Bi(std::complex<_Tp> __t)
+ { return _S_AiBi(__t, std::make_pair(_S_Bi0, _S_Bip0)); }
+
+ /**
+ * Return the auxilliary Airy functions:
+ * @f[
+ * fai(x) = \sum_{k=0}^\infty \frac{(2k+1)!!!x^{3k}}{(2k+1)!}
+ * @f]
+ * @f[
+ * gai(x) = \sum_{k=0}^\infty \frac{(2k+2)!!!x^{3k+1}}{(2k+2)!}
+ * @f]
+ * @f[
+ * hai(x) = \sum_{k=0}^\infty \frac{(2k+3)!!!x^{3k+2}}{(2k+3)!}
+ * @f]
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ _AiryAuxilliaryState<std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_FGH(std::complex<_Tp> __t)
+ {
+ const _Tp _S_log10min = __gnu_cxx::__log10_min(_Tp{});
+ const auto _S_min = std::numeric_limits<_Tp>::min();
+ const auto __log10t = std::log10(std::abs(__t));
+ const auto __tt = __t * __t;
+ const auto __ttt = __t * __tt;
+
+ auto _Fai = _Tp{1};
+ auto _Gai = _Tp{1};
+ auto _Faip = _Tp{0};
+ auto _Gaip = _Tp{1};
+ auto _Hai = _Tp{1} / _Tp{2};
+ auto _Haip = _Tp{1};
+ auto __term = __cmplx{_Tp{1}};
+ auto _F = __cmplx{_Tp{1}};
+ auto _G = __t;
+ auto _H = __t * __t / _Tp{2};
+ auto _Fp = __cmplx{_Tp{0}};
+ auto _Gp = __cmplx{_Tp{1}};
+ auto _Hp = __t;
+ for (int __k = 1; __k < __max_FGH<_Tp>; ++__k)
+ {
+ if (std::abs(__t) < _S_eps)
+ break;
+
+ auto __xx = __log10t * (3 * __k + 2)
+ + _S_slope_H * __k + _S_intercept_H;
+ if (__xx < _S_log10min)
+ break;
+
+ _Fai /= (3ULL * __k - 1ULL) * (3ULL * __k);
+ if (_Fai < _Tp{10} * _S_min)
+ break;
+ _Faip = (3ULL * __k) * _Fai;
+ _Gai /= (3ULL * __k) * (3ULL * __k + 1ULL);
+ _Gaip = (3ULL * __k + 1ULL) * _Gai;
+ _Hai /= (3ULL * __k + 1ULL) * (3ULL * __k + 2ULL);
+ _Haip = (3ULL * __k + 2ULL) * _Hai;
+
+ __term *= __ttt;
+ _F += _Fai * __term;
+ _G += _Gai * __term * __t;
+ _H += _Hai * __term * __tt;
+ _Fp += _Faip * __term / __t;
+ _Gp += _Gaip * __term;
+ _Hp += _Haip * __term * __t;
+ }
+
+ return _AiryAuxilliaryState<std::complex<_Tp>>
+ {__t, _F, _G, _H, _Fp, _Gp, _Hp};
+ }
+
+ /**
+ * Return the Scorer functions by using the series expansions of
+ * the auxilliary Airy functions:
+ * @f[
+ * fai(x) = \sum_{k=0}^\infty \frac{(2k+1)!!!x^{3k}}{(2k+1)!}
+ * @f]
+ * @f[
+ * gai(x) = \sum_{k=0}^\infty \frac{(2k+2)!!!x^{3k+1}}{(2k+2)!}
+ * @f]
+ * @f[
+ * hai(x) = \sum_{k=0}^\infty \frac{(2k+3)!!!x^{3k+2}}{(2k+3)!}
+ * @f]
+ * The Scorer function is then defined by:
+ * @f[
+ * Hi(x) = Hi(0)\left(fai(x) + gai(x) + hai(x)\right)
+ * @f]
+ * where @f$ Hi(0) = 2/(3^{7/6}\Gamma(2/3)) @f$
+ * and @f$ Hi'(0) = 2/(3^{5/6}\Gamma(1/3)) @f$.
+ * The other Scorer function is found from the identity
+ * @f[
+ * Gi(x) + Hi(x) = Bi(x)
+ * @f]
+ *
+ * @todo Find out what is wrong with the Hi = fai + gai + hai scorer function.
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_Scorer(std::complex<_Tp> __t)
+ {
+ auto __aux = FGH(__t);
+
+ auto _Hi = _S_Hi0 * (__aux.fai + __aux.gai + __aux.hai);
+ auto _Hip = _S_Hip0 * (__aux.faip + __aux.gaip + __aux.haip);
+ auto _Bi = _S_Bi0 * __aux.fai + _S_Bip0 * __aux.gai;
+ auto _Bip = _S_Bi0 * __aux.faip + _S_Bip0 * __aux.gaip;
+ auto _Gi = _Bi - _Hi;
+ auto _Gip = _Bip - _Hip;
+
+ return _AiryState<std::complex<_Tp>>{__t, _Gi, _Gip, _Hi, _Hip};
+ }
+
+ /**
+ * Return the Scorer functions by using the series expansions:
+ * @f[
+ * Hi(x) = \frac{3^{-2/3}}{\pi} \sum_{k=0}^\infty
+ * \Gamma\left(\frac{k+1}{3}\right) \frac{3^{1/3}x}{k!}
+ * @f]
+ * @f[
+ * Hi'(x) = \frac{3^{-1/3}}{\pi} \sum_{k=0}^\infty
+ * \Gamma\left(\frac{k+2}{3}\right) \frac{3^{1/3}x}{k!}
+ * @f]
+ * @f[
+ * Gi(x) = \frac{3^{-2/3}}{\pi} \sum_{k=0}^\infty
+ * \cos\left(\frac{2k-1}{3}\pi\right)
+ * \Gamma\left(\frac{k+1}{3}\right) \frac{3^{1/3}x}{k!}
+ * @f]
+ * @f[
+ * Gi'(x) = \frac{3^{-1/3}}{\pi} \sum_{k=0}^\infty
+ * \cos\left(\frac{2k+1}{3}\pi\right)
+ * \Gamma\left(\frac{k+2}{3}\right) \frac{3^{1/3}x}{k!}
+ * @f]
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_Scorer2(std::complex<_Tp> __t)
+ {
+ //constexpr auto _S_cbrt3 = __gnu_cxx::__math_constants<_Tp>::__cbrt_3;
+ constexpr auto _S_cbrt3 = std::cbrt(_Tp{3});
+ constexpr auto _S_1d3 = _Tp{1} / _Tp{3};
+ constexpr auto _S_2d3 = _Tp{2} / _Tp{3};
+ const auto __s = _S_cbrt3 * __t;
+ const std::array<_Tp, 3>
+ __cos{ _Tp{1} / _Tp{2}, _Tp{-1}, _Tp{1} / _Tp{2} };
+ auto _Hi = __cmplx{__gamma(_S_1d3)};
+ auto _Hip = __cmplx{__gamma(_S_2d3)};
+ auto _Gi = __cmplx{__cos[2] * __gamma(_S_1d3)};
+ auto _Gip = __cmplx{__cos[0] * __gamma(_S_2d3)};
+ auto __term = __cmplx(_Tp{1});
+ auto __termp = __cmplx(_Tp{1});
+ for (int __k = 1; __k < __max_FGH<_Tp>; ++__k)
+ {
+ __term *= __s / _Tp(__k);
+ __termp *= __s / _Tp(__k);
+ if (std::abs(__term) < _S_eps)
+ break;
+
+ const auto __gam = __gamma(_Tp(__k + 1) /_Tp{3});
+ const auto __gamp = __gamma(_Tp(__k + 2) /_Tp{3});
+ _Hi += __gam * __term;
+ _Hip += __gamp * __termp;
+ _Gi += __cos[(__k + 2) % 3] * __gam * __term;
+ _Gip += __cos[__k % 3] * __gamp * __termp;
+ }
+
+ const auto __fact = _Tp{1} / (_S_cbrt3 * _S_cbrt3 * _S_pi);
+ const auto __factp = _Tp{1} / (_S_cbrt3 * _S_pi);
+ _Gi *= __fact;
+ _Gip *= __factp;
+ _Hi *= __fact;
+ _Hip *= __factp;
+
+ return _AiryState<std::complex<_Tp>>{__t, _Gi, _Gip, _Hi, _Hip};
+ }
+
+ /**
+ * Return the Airy function of either the first or second kind and it's
+ * derivative by series expansion as a pair of complex numbers. The type
+ * of function is determined by the input value of the function and it's
+ * derivative at the origin.
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_AiBi(std::complex<_Tp> __t, std::pair<_Tp, _Tp> _Z0)
+ {
+ const _Tp _S_log10min = __gnu_cxx::__log10_min(_Tp{});
+ const auto __log10t = std::log10(std::abs(__t));
+ const auto __ttt = __t * __t * __t;
+
+ auto _Fai = _Tp{1};
+ auto _Gai = _Tp{1};
+ auto __termF = _Z0.first * __cmplx{_Tp{1}};
+ auto __termG = _Z0.second * __t;
+ auto _Ai = __termF + __termG;
+ if (std::abs(__t) >= _S_eps)
+ for (int __k = 1; __k < __max_FGH<_Tp>; ++__k)
+ {
+ auto __xx = __log10t * (3 * __k + 1)
+ + _S_slope_G * __k + _S_intercept_G;
+ if (__xx < _S_log10min)
+ break;
+
+ __termF *= __ttt;
+ __termG *= __ttt;
+ _Ai += _Fai * __termF + _Gai * __termG;
+ }
+
+ auto _Faip = _Tp{0};
+ auto _Gaip = _Tp{1};
+ __termF = _Z0.first * __cmplx{_Tp{1}};
+ __termG = _Z0.second * __cmplx{_Tp{1}};
+ auto _Aip = __termG;
+ if (std::abs(__t) >= _S_eps)
+ {
+ __termF *= __t * __t;
+ __termG *= __ttt;
+ _Aip += _Faip * __termF + _Gaip * __termG;
+ for (int __k = 2; __k < __max_FGH<_Tp>; ++__k)
+ {
+ auto __xx = __log10t * 3 * __k
+ + _S_slope_Gp * __k + _S_intercept_Gp;
+ if (__xx < _S_log10min)
+ break;
+
+ __termF *= __ttt;
+ __termG *= __ttt;
+ _Aip += _Faip * __termF + _Gaip * __termG;
+ }
+ }
+
+ return std::make_pair(_Ai, _Aip);
+ }
+
+ /**
+ * Return the Fock-type Airy functions @f$ Ai(t) @f$, and @f$ Bi(t) @f$
+ * and their derivatives of complex argument.
+ *
+ * @tparam _Tp A real type
+ * @param __t The complex argument
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_Airy(std::complex<_Tp> __t)
+ { return _S_AiryHelp(__t, false); }
+
+ /**
+ * Return the Fock-type Airy functions @f$ w_1(t) @f$, and @f$ w_2(t) @f$
+ * and their derivatives of complex argument.
+ *
+ * @tparam _Tp A real type
+ * @param __t The complex argument
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_series<_Tp>::_S_Fock(std::complex<_Tp> __t)
+ { return _S_AiryHelp(__t, true); }
+
+
+ /**
+ * A class encapsulating data for the asymptotic expansions of Airy functions
+ * and thier derivatives.
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ struct _Airy_asymp_data
+ { };
+
+ template<>
+ struct _Airy_asymp_data<float>
+ {
+ static constexpr int _S_max_cd = 43;
+
+ static constexpr float
+ _S_c[_S_max_cd]
+ {
+ 1.000000e+00F,
+ 6.944445e-02F,
+ 3.713349e-02F,
+ 3.799306e-02F,
+ 5.764920e-02F,
+ 1.160991e-01F,
+ 2.915914e-01F,
+ 8.776670e-01F,
+ 3.079453e+00F,
+ 1.234157e+01F,
+ 5.562279e+01F,
+ 2.784651e+02F,
+ 1.533170e+03F,
+ 9.207208e+03F,
+ 5.989252e+04F,
+ 4.195249e+05F,
+ 3.148258e+06F,
+ 2.519892e+07F,
+ 2.142880e+08F,
+ 1.929376e+09F,
+ 1.833577e+10F,
+ 1.834183e+11F,
+ 1.926471e+12F,
+ 2.119700e+13F,
+ 2.438269e+14F,
+ 2.926600e+15F,
+ 3.659031e+16F,
+ 4.757682e+17F,
+ 6.424051e+18F,
+ 8.995209e+19F,
+ 1.304514e+21F,
+ 1.957062e+22F,
+ 3.033872e+23F,
+ 4.854833e+24F,
+ 8.011465e+25F,
+ 1.362108e+27F,
+ 2.383952e+28F,
+ 4.291560e+29F,
+ 7.940171e+30F,
+ 1.508774e+32F,
+ 2.942371e+33F,
+ 5.885241e+34F,
+ 1.206572e+36F,
+ };
+
+ static constexpr float
+ _S_d[_S_max_cd]
+ {
+ -1.000000e+00F,
+ -9.722223e-02F,
+ -4.388503e-02F,
+ -4.246284e-02F,
+ -6.266217e-02F,
+ -1.241059e-01F,
+ -3.082538e-01F,
+ -9.204800e-01F,
+ -3.210494e+00F,
+ -1.280729e+01F,
+ -5.750832e+01F,
+ -2.870333e+02F,
+ -1.576357e+03F,
+ -9.446356e+03F,
+ -6.133572e+04F,
+ -4.289525e+05F,
+ -3.214537e+06F,
+ -2.569791e+07F,
+ -2.182934e+08F,
+ -1.963524e+09F,
+ -1.864393e+10F,
+ -1.863530e+11F,
+ -1.955883e+12F,
+ -2.150644e+13F,
+ -2.472370e+14F,
+ -2.965883e+15F,
+ -3.706245e+16F,
+ -4.816783e+17F,
+ -6.500985e+18F,
+ -9.099199e+19F,
+ -1.319089e+21F,
+ -1.978220e+22F,
+ -3.065640e+23F,
+ -4.904121e+24F,
+ -8.090396e+25F,
+ -1.375143e+27F,
+ -2.406128e+28F,
+ -4.330398e+29F,
+ -8.010129e+30F,
+ -1.521725e+32F,
+ -2.966994e+33F,
+ -5.933284e+34F,
+ -1.216186e+36F,
+ };
+ };
+
+
+ template<>
+ struct _Airy_asymp_data<double>
+ {
+ static constexpr int _S_max_cd = 198;
+
+ static constexpr double
+ _S_c[_S_max_cd]
+ {
+ 1.000000000000000e+00,
+ 6.944444444444445e-02,
+ 3.713348765432099e-02,
+ 3.799305912780064e-02,
+ 5.764919041266972e-02,
+ 1.160990640255154e-01,
+ 2.915913992307505e-01,
+ 8.776669695100169e-01,
+ 3.079453030173167e+00,
+ 1.234157333234524e+01,
+ 5.562278536591707e+01,
+ 2.784650807776025e+02,
+ 1.533169432012795e+03,
+ 9.207206599726414e+03,
+ 5.989251356587907e+04,
+ 4.195248751165511e+05,
+ 3.148257417866826e+06,
+ 2.519891987160237e+07,
+ 2.142880369636803e+08,
+ 1.929375549182493e+09,
+ 1.833576693789056e+10,
+ 1.834183035288325e+11,
+ 1.926471158970446e+12,
+ 2.119699938864764e+13,
+ 2.438268268797160e+14,
+ 2.926599219297924e+15,
+ 3.659030701264312e+16,
+ 4.757681020363067e+17,
+ 6.424049357901937e+18,
+ 8.995207427058378e+19,
+ 1.304513299317610e+21,
+ 1.957062178658161e+22,
+ 3.033871086594339e+23,
+ 4.854832179436168e+24,
+ 8.011464687609595e+25,
+ 1.362107954526322e+27,
+ 2.383951672727106e+28,
+ 4.291560449285805e+29,
+ 7.940171107576634e+30,
+ 1.508773895252729e+32,
+ 2.942371035655193e+33,
+ 5.885240440388241e+34,
+ 1.206571599149305e+36,
+ 2.533995217967925e+37,
+ 5.448489654744985e+38,
+ 1.198751805674371e+40,
+ 2.697372533752491e+41,
+ 6.204355375581934e+42,
+ 1.458113275347628e+44,
+ 3.499678509541131e+45,
+ 8.574698414835430e+46,
+ 2.143791361584876e+48,
+ 5.466954268964723e+49,
+ 1.421479741931207e+51,
+ 3.767104119582454e+52,
+ 1.017165676733217e+54,
+ 2.797331747633005e+55,
+ 7.832869698897223e+56,
+ 2.232461648545130e+58,
+ 6.474401546982448e+59,
+ 1.910023391562912e+61,
+ 5.730287618153169e+62,
+ 1.747801906865773e+64,
+ 5.418378570224247e+65,
+ 1.706848042790888e+67,
+ 5.462096092490968e+68,
+ 1.775238701609359e+70,
+ 5.858471716005496e+71,
+ 1.962647854025608e+73,
+ 6.673200232657881e+74,
+ 2.302320282650229e+76,
+ 8.058346177096876e+77,
+ 2.860790616115698e+79,
+ 1.029911836324255e+81,
+ 3.759274853469072e+82,
+ 1.390966503884052e+84,
+ 5.216251488112698e+85,
+ 1.982222609597978e+87,
+ 7.631733526885406e+88,
+ 2.976443161750489e+90,
+ 1.175720886071667e+92,
+ 4.702984343402413e+93,
+ 1.904748487874923e+95,
+ 7.809628166793868e+96,
+ 3.241060252944379e+98,
+ 1.361271785487072e+100,
+ 5.785515010137358e+101,
+ 2.487817635034432e+103,
+ 1.082220303639244e+105,
+ 4.761853778920262e+106,
+ 2.119061674318428e+108,
+ 9.535939245488659e+109,
+ 4.338924336915075e+111,
+ 1.995937594356210e+113,
+ 9.281257267774871e+114,
+ 4.362258761302053e+116,
+ 2.072104467309746e+118,
+ 9.946249789626537e+119,
+ 4.824001628763865e+121,
+ 2.363794636489558e+123,
+ 1.170094760302862e+125,
+ 5.850554253574287e+126,
+ 2.954569730259901e+128,
+ 1.506850482670752e+130,
+ 7.760380603441518e+131,
+ 4.035449239058130e+133,
+ 2.118637288197074e+135,
+ 1.122891512986455e+137,
+ 6.007541796863912e+138,
+ 3.244110844655371e+140,
+ 1.768060890834934e+142,
+ 9.724445514012234e+143,
+ 5.397127555697884e+145,
+ 3.022424599378842e+147,
+ 1.707688310104938e+149,
+ 9.733926488872914e+150,
+ 5.597066004129277e+152,
+ 3.246331503347047e+154,
+ 1.899123034516305e+156,
+ 1.120493673015381e+158,
+ 6.667002197825375e+159,
+ 4.000239582022806e+161,
+ 2.420167717157848e+163,
+ 1.476315971466497e+165,
+ 9.079425903504815e+166,
+ 5.629294501428005e+168,
+ 3.518340089045620e+170,
+ 2.216573494616288e+172,
+ 1.407536194762195e+174,
+ 9.008307418237021e+175,
+ 5.810406406063190e+177,
+ 3.776794965501750e+179,
+ 2.473820571905779e+181,
+ 1.632734494231895e+183,
+ 1.085776900182112e+185,
+ 7.274761083941352e+186,
+ 4.910500878112026e+188,
+ 3.339165488138471e+190,
+ 2.287345162743855e+192,
+ 1.578279589877007e+194,
+ 1.096912143732327e+196,
+ 7.678439030562050e+197,
+ 5.413337067597843e+199,
+ 3.843495606538892e+201,
+ 2.748117894051496e+203,
+ 1.978658045201244e+205,
+ 1.434536494196155e+207,
+ 1.047218417674069e+209,
+ 7.697104507405235e+210,
+ 5.695893209382314e+212,
+ 4.243466810865792e+214,
+ 3.182619623725185e+216,
+ 2.402892356389597e+218,
+ 1.826209097230261e+220,
+ 1.397058194451032e+222,
+ 1.075741068948596e+224,
+ 8.337041171685528e+225,
+ 6.502928990423786e+227,
+ 5.104827839273243e+229,
+ 4.032836288744937e+231,
+ 3.206122353181950e+233,
+ 2.564911711575723e+235,
+ 2.064764922810362e+237,
+ 1.672468384191300e+239,
+ 1.363068815045043e+241,
+ 1.117722165158547e+243,
+ 9.221254621350063e+244,
+ 7.653679680924400e+246,
+ 6.390854170806005e+248,
+ 5.368343764383400e+250,
+ 4.536272410412814e+252,
+ 3.855849971009803e+254,
+ 3.296767293083097e+256,
+ 2.835233105703090e+258,
+ 2.452487952018684e+260,
+ 2.133674250351303e+262,
+ 1.866973387910966e+264,
+ 1.642943906272933e+266,
+ 1.454011766789008e+268,
+ 1.294076113394137e+270,
+ 1.158203114065351e+272,
+ 1.042387246347866e+274,
+ 9.433644353076327e+275,
+ 8.584652159889140e+277,
+ 7.854989126102911e+279,
+ 7.226619481709595e+281,
+ 6.684650001687565e+283,
+ 6.216749325730167e+285,
+ 5.812683583318513e+287,
+ 5.463943925916343e+289,
+ 5.163446980546229e+291,
+ 4.905293404959073e+293,
+ 4.684572943682547e+295,
+ 4.497206881767656e+297,
+ 4.339820739154935e+299,
+ 4.209641572182349e+301,
+ 4.104415447991071e+303,
+ 4.022341607500821e+305,
+ };
+
+ static constexpr double
+ _S_d[_S_max_cd]
+ {
+ -1.000000000000000e+00,
+ -9.722222222222224e-02,
+ -4.388503086419752e-02,
+ -4.246283078989483e-02,
+ -6.266216349203231e-02,
+ -1.241058960272751e-01,
+ -3.082537649010791e-01,
+ -9.204799924129445e-01,
+ -3.210493584648621e+00,
+ -1.280729308073562e+01,
+ -5.750830351391426e+01,
+ -2.870332371092210e+02,
+ -1.576357303337099e+03,
+ -9.446354823095931e+03,
+ -6.133570666385206e+04,
+ -4.289524004000691e+05,
+ -3.214536521400865e+06,
+ -2.569790838391133e+07,
+ -2.182934208321604e+08,
+ -1.963523788991033e+09,
+ -1.864393108810722e+10,
+ -1.863529963852939e+11,
+ -1.955882932389843e+12,
+ -2.150644463519725e+13,
+ -2.472369922906211e+14,
+ -2.965882430295212e+15,
+ -3.706244000635465e+16,
+ -4.816782647945217e+17,
+ -6.500984080751062e+18,
+ -9.099198264365413e+19,
+ -1.319088866907751e+21,
+ -1.978219607616628e+22,
+ -3.065639370223599e+23,
+ -4.904119815775620e+24,
+ -8.090395374187028e+25,
+ -1.375142480406956e+27,
+ -2.406127967357125e+28,
+ -4.330398100410563e+29,
+ -8.010128562268939e+30,
+ -1.521724744139019e+32,
+ -2.966993387417997e+33,
+ -5.933283219493451e+34,
+ -1.216185715477188e+36,
+ -2.553715025111644e+37,
+ -5.489923036149890e+38,
+ -1.207664458504664e+40,
+ -2.716989788543418e+41,
+ -6.248514488575399e+42,
+ -1.468274343468517e+44,
+ -3.523567100049944e+45,
+ -8.632054257075131e+46,
+ -2.157849009857564e+48,
+ -5.502111531144559e+49,
+ -1.430448068378723e+51,
+ -3.790429841685131e+52,
+ -1.023349054707279e+54,
+ -2.814032235678575e+55,
+ -7.878810283641486e+56,
+ -2.245328862657782e+58,
+ -6.511083708721726e+59,
+ -1.920664190401703e+61,
+ -5.761686454417021e+62,
+ -1.757224019571249e+64,
+ -5.447123284124641e+65,
+ -1.715761087400762e+67,
+ -5.490178848750562e+68,
+ -1.784227251997255e+70,
+ -5.887691026309764e+71,
+ -1.972292315224751e+73,
+ -6.705515972283344e+74,
+ -2.313309878271472e+76,
+ -8.096267806165569e+77,
+ -2.874065746584913e+79,
+ -1.034625391639241e+81,
+ -3.776246748970062e+82,
+ -1.397162345772177e+84,
+ -5.239180066082425e+85,
+ -1.990822273847861e+87,
+ -7.664417610512326e+88,
+ -2.989028545098271e+90,
+ -1.180629950314137e+92,
+ -4.722378093272115e+93,
+ -1.912507137520035e+95,
+ -7.841055241911753e+96,
+ -3.253947172439189e+98,
+ -1.366620594074447e+100,
+ -5.807983029594204e+101,
+ -2.497367798700592e+103,
+ -1.086327401565769e+105,
+ -4.779721898165742e+106,
+ -2.126924611885473e+108,
+ -9.570933517949168e+109,
+ -4.354673608555420e+111,
+ -2.003104336167184e+113,
+ -9.314227986310485e+114,
+ -4.377591832519284e+116,
+ -2.079311787196041e+118,
+ -9.980488171002189e+119,
+ -4.840437750156587e+121,
+ -2.371766962413637e+123,
+ -1.174001587549283e+125,
+ -5.869894928792715e+126,
+ -2.964240989606087e+128,
+ -1.511734925078113e+130,
+ -7.785293542778409e+131,
+ -4.048280556193450e+133,
+ -2.125310161545726e+135,
+ -1.126395074649439e+137,
+ -6.026112250640926e+138,
+ -3.254046865619094e+140,
+ -1.773426781247180e+142,
+ -9.753691966685956e+143,
+ -5.413214374045717e+145,
+ -3.031353475595618e+147,
+ -1.712688861525451e+149,
+ -9.762181718158467e+150,
+ -5.613172668889362e+152,
+ -3.255593504783130e+154,
+ -1.904495376905319e+156,
+ -1.123636712771385e+158,
+ -6.685547405607922e+159,
+ -4.011274725697352e+161,
+ -2.426789243059785e+163,
+ -1.480322256328008e+165,
+ -9.103865811724210e+166,
+ -5.644325995423808e+168,
+ -3.527660195241767e+170,
+ -2.222398917729603e+172,
+ -1.411206432558185e+174,
+ -9.031614811298435e+175,
+ -5.825324009159629e+177,
+ -3.786417373057168e+179,
+ -2.480075491177349e+181,
+ -1.636831694970243e+183,
+ -1.088481201303362e+185,
+ -7.292745660168647e+186,
+ -4.922551187015368e+188,
+ -3.347299874224070e+190,
+ -2.292876831819414e+192,
+ -1.582068976647419e+194,
+ -1.099526952179841e+196,
+ -7.696612850752728e+197,
+ -5.426059363878918e+199,
+ -3.852465257896041e+201,
+ -2.754486649310016e+203,
+ -1.983211918722996e+205,
+ -1.437815434754317e+207,
+ -1.049595758009311e+209,
+ -7.714459872698144e+210,
+ -5.708649969089776e+212,
+ -4.252907226462823e+214,
+ -3.189653037258280e+216,
+ -2.408167641474974e+218,
+ -1.830192105075910e+220,
+ -1.400085406139984e+222,
+ -1.078056980830078e+224,
+ -8.354874414833517e+225,
+ -6.516750306025111e+227,
+ -5.115608890676142e+229,
+ -4.041299743705576e+231,
+ -3.212808739737073e+233,
+ -2.570227590770699e+235,
+ -2.069017785679178e+237,
+ -1.675892065632837e+239,
+ -1.365842098493761e+241,
+ -1.119982472873731e+243,
+ -9.239789806518604e+244,
+ -7.668971748218954e+246,
+ -6.403547029139283e+248,
+ -5.378942666188698e+250,
+ -4.545175791002436e+252,
+ -3.863373580709335e+254,
+ -3.303162573962017e+256,
+ -2.840701250554976e+258,
+ -2.457190709357166e+260,
+ -2.137742266081238e+262,
+ -1.870512673954399e+264,
+ -1.646040878763552e+266,
+ -1.456737187157872e+268,
+ -1.296488184434946e+270,
+ -1.160349922432478e+272,
+ -1.044308697493207e+274,
+ -9.450937926592507e+275,
+ -8.600303303298236e+277,
+ -7.869232080094031e+279,
+ -7.239652158863265e+281,
+ -6.696640405278035e+283,
+ -6.227840760744850e+285,
+ -5.822998904673116e+287,
+ -5.473589016694659e+289,
+ -5.172513612645520e+291,
+ -4.913861603046338e+293,
+ -4.692712948797547e+295,
+ -4.504980791675638e+297,
+ -4.347283887459587e+299,
+ -4.216843696343482e+301,
+ -4.111401687051481e+303,
+ -4.029153362974997e+305,
+ };
+ };
+
+
+ template<>
+ struct _Airy_asymp_data<long double>
+ {
+ static constexpr int _S_max_cd = 201;
+
+ static constexpr long double
+ _S_c[_S_max_cd]
+ {
+ 1.000000000000000000e+00L,
+ 6.944444444444444445e-02L,
+ 3.713348765432098766e-02L,
+ 3.799305912780064015e-02L,
+ 5.764919041266972134e-02L,
+ 1.160990640255154110e-01L,
+ 2.915913992307505115e-01L,
+ 8.776669695100169165e-01L,
+ 3.079453030173166994e+00L,
+ 1.234157333234523871e+01L,
+ 5.562278536591708279e+01L,
+ 2.784650807776025672e+02L,
+ 1.533169432012795616e+03L,
+ 9.207206599726414699e+03L,
+ 5.989251356587906863e+04L,
+ 4.195248751165510687e+05L,
+ 3.148257417866826379e+06L,
+ 2.519891987160236768e+07L,
+ 2.142880369636803196e+08L,
+ 1.929375549182493053e+09L,
+ 1.833576693789056766e+10L,
+ 1.834183035288325634e+11L,
+ 1.926471158970446564e+12L,
+ 2.119699938864764906e+13L,
+ 2.438268268797160419e+14L,
+ 2.926599219297925047e+15L,
+ 3.659030701264312806e+16L,
+ 4.757681020363067633e+17L,
+ 6.424049357901937700e+18L,
+ 8.995207427058378954e+19L,
+ 1.304513299317609818e+21L,
+ 1.957062178658161504e+22L,
+ 3.033871086594338300e+23L,
+ 4.854832179436167361e+24L,
+ 8.011464687609593663e+25L,
+ 1.362107954526321589e+27L,
+ 2.383951672727105667e+28L,
+ 4.291560449285803547e+29L,
+ 7.940171107576632359e+30L,
+ 1.508773895252729248e+32L,
+ 2.942371035655192299e+33L,
+ 5.885240440388239474e+34L,
+ 1.206571599149304506e+36L,
+ 2.533995217967924041e+37L,
+ 5.448489654744983645e+38L,
+ 1.198751805674370862e+40L,
+ 2.697372533752490593e+41L,
+ 6.204355375581932929e+42L,
+ 1.458113275347627820e+44L,
+ 3.499678509541130410e+45L,
+ 8.574698414835427995e+46L,
+ 2.143791361584876000e+48L,
+ 5.466954268964722378e+49L,
+ 1.421479741931207335e+51L,
+ 3.767104119582453966e+52L,
+ 1.017165676733216895e+54L,
+ 2.797331747633004845e+55L,
+ 7.832869698897222655e+56L,
+ 2.232461648545130119e+58L,
+ 6.474401546982448099e+59L,
+ 1.910023391562912264e+61L,
+ 5.730287618153167906e+62L,
+ 1.747801906865772587e+64L,
+ 5.418378570224246184e+65L,
+ 1.706848042790887377e+67L,
+ 5.462096092490966838e+68L,
+ 1.775238701609358950e+70L,
+ 5.858471716005495788e+71L,
+ 1.962647854025607485e+73L,
+ 6.673200232657881231e+74L,
+ 2.302320282650229520e+76L,
+ 8.058346177096876306e+77L,
+ 2.860790616115697965e+79L,
+ 1.029911836324255108e+81L,
+ 3.759274853469072083e+82L,
+ 1.390966503884051755e+84L,
+ 5.216251488112698105e+85L,
+ 1.982222609597977811e+87L,
+ 7.631733526885405277e+88L,
+ 2.976443161750488134e+90L,
+ 1.175720886071666341e+92L,
+ 4.702984343402412251e+93L,
+ 1.904748487874923120e+95L,
+ 7.809628166793867769e+96L,
+ 3.241060252944379015e+98L,
+ 1.361271785487071739e+100L,
+ 5.785515010137358431e+101L,
+ 2.487817635034432399e+103L,
+ 1.082220303639244464e+105L,
+ 4.761853778920262973e+106L,
+ 2.119061674318428445e+108L,
+ 9.535939245488660482e+109L,
+ 4.338924336915075186e+111L,
+ 1.995937594356210236e+113L,
+ 9.281257267774873180e+114L,
+ 4.362258761302054246e+116L,
+ 2.072104467309746760e+118L,
+ 9.946249789626540298e+119L,
+ 4.824001628763866564e+121L,
+ 2.363794636489558111e+123L,
+ 1.170094760302862443e+125L,
+ 5.850554253574289032e+126L,
+ 2.954569730259901407e+128L,
+ 1.506850482670752657e+130L,
+ 7.760380603441520329e+131L,
+ 4.035449239058131851e+133L,
+ 2.118637288197074896e+135L,
+ 1.122891512986455128e+137L,
+ 6.007541796863915236e+138L,
+ 3.244110844655372943e+140L,
+ 1.768060890834934916e+142L,
+ 9.724445514012239322e+143L,
+ 5.397127555697886649e+145L,
+ 3.022424599378843182e+147L,
+ 1.707688310104939300e+149L,
+ 9.733926488872918803e+150L,
+ 5.597066004129280281e+152L,
+ 3.246331503347048857e+154L,
+ 1.899123034516305991e+156L,
+ 1.120493673015382185e+158L,
+ 6.667002197825379055e+159L,
+ 4.000239582022809076e+161L,
+ 2.420167717157850167e+163L,
+ 1.476315971466498391e+165L,
+ 9.079425903504822323e+166L,
+ 5.629294501428009312e+168L,
+ 3.518340089045622156e+170L,
+ 2.216573494616289233e+172L,
+ 1.407536194762195531e+174L,
+ 9.008307418237028691e+175L,
+ 5.810406406063194601e+177L,
+ 3.776794965501753246e+179L,
+ 2.473820571905781698e+181L,
+ 1.632734494231896465e+183L,
+ 1.085776900182112434e+185L,
+ 7.274761083941356088e+186L,
+ 4.910500878112028622e+188L,
+ 3.339165488138473218e+190L,
+ 2.287345162743856462e+192L,
+ 1.578279589877007681e+194L,
+ 1.096912143732327268e+196L,
+ 7.678439030562053892e+197L,
+ 5.413337067597845030e+199L,
+ 3.843495606538893038e+201L,
+ 2.748117894051497464e+203L,
+ 1.978658045201245087e+205L,
+ 1.434536494196155738e+207L,
+ 1.047218417674069521e+209L,
+ 7.697104507405240282e+210L,
+ 5.695893209382317244e+212L,
+ 4.243466810865795709e+214L,
+ 3.182619623725187776e+216L,
+ 2.402892356389598849e+218L,
+ 1.826209097230261744e+220L,
+ 1.397058194451033127e+222L,
+ 1.075741068948596812e+224L,
+ 8.337041171685535040e+225L,
+ 6.502928990423792373e+227L,
+ 5.104827839273246737e+229L,
+ 4.032836288744939317e+231L,
+ 3.206122353181952212e+233L,
+ 2.564911711575725598e+235L,
+ 2.064764922810364009e+237L,
+ 1.672468384191301163e+239L,
+ 1.363068815045044049e+241L,
+ 1.117722165158548263e+243L,
+ 9.221254621350072972e+244L,
+ 7.653679680924408496e+246L,
+ 6.390854170806011899e+248L,
+ 5.368343764383406036e+250L,
+ 4.536272410412819536e+252L,
+ 3.855849971009808288e+254L,
+ 3.296767293083101081e+256L,
+ 2.835233105703092986e+258L,
+ 2.452487952018686700e+260L,
+ 2.133674250351305122e+262L,
+ 1.866973387910968178e+264L,
+ 1.642943906272935389e+266L,
+ 1.454011766789009870e+268L,
+ 1.294076113394138357e+270L,
+ 1.158203114065351801e+272L,
+ 1.042387246347866902e+274L,
+ 9.433644353076337553e+275L,
+ 8.584652159889149460e+277L,
+ 7.854989126102919164e+279L,
+ 7.226619481709603434e+281L,
+ 6.684650001687572355e+283L,
+ 6.216749325730173453e+285L,
+ 5.812683583318519397e+287L,
+ 5.463943925916348704e+289L,
+ 5.163446980546234308e+291L,
+ 4.905293404959078738e+293L,
+ 4.684572943682552715e+295L,
+ 4.497206881767661669e+297L,
+ 4.339820739154940732e+299L,
+ 4.209641572182355027e+301L,
+ 4.104415447991076276e+303L,
+ 4.022341607500826067e+305L,
+ 3.962020590927621690e+307L,
+ 3.922414211165019564e+309L,
+ 3.902815759602983234e+311L,
+ };
+
+ static constexpr long double
+ _S_d[_S_max_cd]
+ {
+ -1.000000000000000000e+00L,
+ -9.722222222222222222e-02L,
+ -4.388503086419753087e-02L,
+ -4.246283078989483311e-02L,
+ -6.266216349203230580e-02L,
+ -1.241058960272750945e-01L,
+ -3.082537649010791121e-01L,
+ -9.204799924129445710e-01L,
+ -3.210493584648620908e+00L,
+ -1.280729308073562507e+01L,
+ -5.750830351391427204e+01L,
+ -2.870332371092211078e+02L,
+ -1.576357303337099718e+03L,
+ -9.446354823095931964e+03L,
+ -6.133570666385205824e+04L,
+ -4.289524004000690703e+05L,
+ -3.214536521400864830e+06L,
+ -2.569790838391132545e+07L,
+ -2.182934208321603255e+08L,
+ -1.963523788991032753e+09L,
+ -1.864393108810721585e+10L,
+ -1.863529963852938844e+11L,
+ -1.955882932389842695e+12L,
+ -2.150644463519724977e+13L,
+ -2.472369922906211613e+14L,
+ -2.965882430295212631e+15L,
+ -3.706244000635465229e+16L,
+ -4.816782647945217541e+17L,
+ -6.500984080751062702e+18L,
+ -9.099198264365412236e+19L,
+ -1.319088866907750710e+21L,
+ -1.978219607616628114e+22L,
+ -3.065639370223598387e+23L,
+ -4.904119815775620837e+24L,
+ -8.090395374187028084e+25L,
+ -1.375142480406956246e+27L,
+ -2.406127967357125255e+28L,
+ -4.330398100410561950e+29L,
+ -8.010128562268937490e+30L,
+ -1.521724744139018769e+32L,
+ -2.966993387417997255e+33L,
+ -5.933283219493449593e+34L,
+ -1.216185715477187411e+36L,
+ -2.553715025111643294e+37L,
+ -5.489923036149888465e+38L,
+ -1.207664458504663582e+40L,
+ -2.716989788543417798e+41L,
+ -6.248514488575398644e+42L,
+ -1.468274343468517212e+44L,
+ -3.523567100049943587e+45L,
+ -8.632054257075129856e+46L,
+ -2.157849009857563711e+48L,
+ -5.502111531144559821e+49L,
+ -1.430448068378722839e+51L,
+ -3.790429841685131699e+52L,
+ -1.023349054707279003e+54L,
+ -2.814032235678575023e+55L,
+ -7.878810283641487892e+56L,
+ -2.245328862657782166e+58L,
+ -6.511083708721725425e+59L,
+ -1.920664190401702861e+61L,
+ -5.761686454417020881e+62L,
+ -1.757224019571248450e+64L,
+ -5.447123284124640063e+65L,
+ -1.715761087400761462e+67L,
+ -5.490178848750560497e+68L,
+ -1.784227251997254439e+70L,
+ -5.887691026309762600e+71L,
+ -1.972292315224750519e+73L,
+ -6.705515972283343125e+74L,
+ -2.313309878271471665e+76L,
+ -8.096267806165567488e+77L,
+ -2.874065746584912340e+79L,
+ -1.034625391639240257e+81L,
+ -3.776246748970061121e+82L,
+ -1.397162345772176707e+84L,
+ -5.239180066082424250e+85L,
+ -1.990822273847860578e+87L,
+ -7.664417610512323500e+88L,
+ -2.989028545098270324e+90L,
+ -1.180629950314136764e+92L,
+ -4.722378093272112919e+93L,
+ -1.912507137520034823e+95L,
+ -7.841055241911750536e+96L,
+ -3.253947172439187679e+98L,
+ -1.366620594074447266e+100L,
+ -5.807983029594202542e+101L,
+ -2.497367798700591449e+103L,
+ -1.086327401565769111e+105L,
+ -4.779721898165742383e+106L,
+ -2.126924611885472706e+108L,
+ -9.570933517949169328e+109L,
+ -4.354673608555420287e+111L,
+ -2.003104336167184061e+113L,
+ -9.314227986310485517e+114L,
+ -4.377591832519284665e+116L,
+ -2.079311787196041531e+118L,
+ -9.980488171002191038e+119L,
+ -4.840437750156588426e+121L,
+ -2.371766962413637565e+123L,
+ -1.174001587549282684e+125L,
+ -5.869894928792716434e+126L,
+ -2.964240989606087664e+128L,
+ -1.511734925078113281e+130L,
+ -7.785293542778411245e+131L,
+ -4.048280556193451825e+133L,
+ -2.125310161545727101e+135L,
+ -1.126395074649439387e+137L,
+ -6.026112250640928884e+138L,
+ -3.254046865619095371e+140L,
+ -1.773426781247180546e+142L,
+ -9.753691966685960342e+143L,
+ -5.413214374045719396e+145L,
+ -3.031353475595619676e+147L,
+ -1.712688861525451568e+149L,
+ -9.762181718158471542e+150L,
+ -5.613172668889364540e+152L,
+ -3.255593504783131735e+154L,
+ -1.904495376905319587e+156L,
+ -1.123636712771386062e+158L,
+ -6.685547405607925311e+159L,
+ -4.011274725697354756e+161L,
+ -2.426789243059786829e+163L,
+ -1.480322256328008563e+165L,
+ -9.103865811724216192e+166L,
+ -5.644325995423811740e+168L,
+ -3.527660195241769499e+170L,
+ -2.222398917729604053e+172L,
+ -1.411206432558185611e+174L,
+ -9.031614811298444031e+175L,
+ -5.825324009159634125e+177L,
+ -3.786417373057171726e+179L,
+ -2.480075491177351310e+181L,
+ -1.636831694970245013e+183L,
+ -1.088481201303363025e+185L,
+ -7.292745660168652396e+186L,
+ -4.922551187015371024e+188L,
+ -3.347299874224072422e+190L,
+ -2.292876831819415970e+192L,
+ -1.582068976647420664e+194L,
+ -1.099526952179841755e+196L,
+ -7.696612850752733309e+197L,
+ -5.426059363878921047e+199L,
+ -3.852465257896043314e+201L,
+ -2.754486649310017736e+203L,
+ -1.983211918722997090e+205L,
+ -1.437815434754318380e+207L,
+ -1.049595758009311450e+209L,
+ -7.714459872698149505e+210L,
+ -5.708649969089780440e+212L,
+ -4.252907226462827513e+214L,
+ -3.189653037258282114e+216L,
+ -2.408167641474976673e+218L,
+ -1.830192105075911170e+220L,
+ -1.400085406139984445e+222L,
+ -1.078056980830079259e+224L,
+ -8.354874414833525489e+225L,
+ -6.516750306025118181e+227L,
+ -5.115608890676146942e+229L,
+ -4.041299743705579274e+231L,
+ -3.212808739737076200e+233L,
+ -2.570227590770701195e+235L,
+ -2.069017785679180413e+237L,
+ -1.675892065632839139e+239L,
+ -1.365842098493762348e+241L,
+ -1.119982472873732385e+243L,
+ -9.239789806518615833e+244L,
+ -7.668971748218962759e+246L,
+ -6.403547029139290970e+248L,
+ -5.378942666188703975e+250L,
+ -4.545175791002442342e+252L,
+ -3.863373580709339622e+254L,
+ -3.303162573962020773e+256L,
+ -2.840701250554979375e+258L,
+ -2.457190709357169321e+260L,
+ -2.137742266081240880e+262L,
+ -1.870512673954401294e+264L,
+ -1.646040878763553552e+266L,
+ -1.456737187157873994e+268L,
+ -1.296488184434947562e+270L,
+ -1.160349922432479422e+272L,
+ -1.044308697493208592e+274L,
+ -9.450937926592517823e+275L,
+ -8.600303303298245448e+277L,
+ -7.869232080094039597e+279L,
+ -7.239652158863272692e+281L,
+ -6.696640405278043338e+283L,
+ -6.227840760744857081e+285L,
+ -5.822998904673121916e+287L,
+ -5.473589016694665295e+289L,
+ -5.172513612645525325e+291L,
+ -4.913861603046343504e+293L,
+ -4.692712948797552807e+295L,
+ -4.504980791675643798e+297L,
+ -4.347283887459592393e+299L,
+ -4.216843696343488227e+301L,
+ -4.111401687051486619e+303L,
+ -4.029153362975001895e+305L,
+ -3.968696278528173706e+307L,
+ -3.928989926523217418e+309L,
+ -3.909325877634014065e+311L,
+ };
+ };
+
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+ template<>
+ struct _Airy_asymp_data<__float128>
+ {
+ static constexpr int _S_max_cd = 201;
+
+ static constexpr __float128
+ _S_c[_S_max_cd]
+ {
+ 1.000000000000000000000000000000000e+00Q,
+ 6.944444444444444444444444444444445e-02Q,
+ 3.713348765432098765432098765432099e-02Q,
+ 3.799305912780064014631915866483767e-02Q,
+ 5.764919041266972133313011227963217e-02Q,
+ 1.160990640255154110181092538964814e-01Q,
+ 2.915913992307505114690938436983388e-01Q,
+ 8.776669695100169164655066684332937e-01Q,
+ 3.079453030173166993362480862680011e+00Q,
+ 1.234157333234523870642339938330245e+01Q,
+ 5.562278536591708278103323749835620e+01Q,
+ 2.784650807776025672055514983345737e+02Q,
+ 1.533169432012795615968528330529591e+03Q,
+ 9.207206599726414698033224087507302e+03Q,
+ 5.989251356587906862599588327558073e+04Q,
+ 4.195248751165510686626470897960817e+05Q,
+ 3.148257417866826378983145912575630e+06Q,
+ 2.519891987160236767557016381168582e+07Q,
+ 2.142880369636803195620823884016894e+08Q,
+ 1.929375549182493052665328054052345e+09Q,
+ 1.833576693789056765675348223590718e+10Q,
+ 1.834183035288325633653415468373651e+11Q,
+ 1.926471158970446563579032395664927e+12Q,
+ 2.119699938864764905493571816510304e+13Q,
+ 2.438268268797160418199984201202274e+14Q,
+ 2.926599219297925046400592148165286e+15Q,
+ 3.659030701264312805075099317724813e+16Q,
+ 4.757681020363067632401403572743319e+17Q,
+ 6.424049357901937699484057869724498e+18Q,
+ 8.995207427058378952098438694307239e+19Q,
+ 1.304513299317609817937424037496177e+21Q,
+ 1.957062178658161503299043185284924e+22Q,
+ 3.033871086594338299189753708716216e+23Q,
+ 4.854832179436167359995522969659059e+24Q,
+ 8.011464687609593661835749240413277e+25Q,
+ 1.362107954526321589052986810339313e+27Q,
+ 2.383951672727105666951726336845792e+28Q,
+ 4.291560449285803546171319066670932e+29Q,
+ 7.940171107576632357848623628433817e+30Q,
+ 1.508773895252729247570260010478430e+32Q,
+ 2.942371035655192298256376857240314e+33Q,
+ 5.885240440388239473257038331156990e+34Q,
+ 1.206571599149304506030147504684986e+36Q,
+ 2.533995217967924040264412819835998e+37Q,
+ 5.448489654744983644276862627802042e+38Q,
+ 1.198751805674370861365049853157002e+40Q,
+ 2.697372533752490593092703511670458e+41Q,
+ 6.204355375581932928326145485753351e+42Q,
+ 1.458113275347627819362204463247607e+44Q,
+ 3.499678509541130409867726398367846e+45Q,
+ 8.574698414835427994510633526889885e+46Q,
+ 2.143791361584875999553509561372892e+48Q,
+ 5.466954268964722377387030779679476e+49Q,
+ 1.421479741931207334923266721673421e+51Q,
+ 3.767104119582453965238905174924491e+52Q,
+ 1.017165676733216894528206908658589e+54Q,
+ 2.797331747633004844984132516532928e+55Q,
+ 7.832869698897222655239804005906784e+56Q,
+ 2.232461648545130118891994043551321e+58Q,
+ 6.474401546982448099273469637085500e+59Q,
+ 1.910023391562912263916452171061022e+61Q,
+ 5.730287618153167906533500007282686e+62Q,
+ 1.747801906865772586581276345187251e+64Q,
+ 5.418378570224246183810530443928050e+65Q,
+ 1.706848042790887376960471283961076e+67Q,
+ 5.462096092490966837830875680393816e+68Q,
+ 1.775238701609358950481459584298028e+70Q,
+ 5.858471716005495788553004175818681e+71Q,
+ 1.962647854025607485159829039873276e+73Q,
+ 6.673200232657881231295145771503102e+74Q,
+ 2.302320282650229519650310362059160e+76Q,
+ 8.058346177096876306796396352336370e+77Q,
+ 2.860790616115697964648704466618304e+79Q,
+ 1.029911836324255107627078591853086e+81Q,
+ 3.759274853469072082695033095116603e+82Q,
+ 1.390966503884051754597927939944024e+84Q,
+ 5.216251488112698104939104585457117e+85Q,
+ 1.982222609597977811425425210588653e+87Q,
+ 7.631733526885405277140613683381215e+88Q,
+ 2.976443161750488133728977351758507e+90Q,
+ 1.175720886071666341365773562428566e+92Q,
+ 4.702984343402412250437491178174693e+93Q,
+ 1.904748487874923120067516222987124e+95Q,
+ 7.809628166793867767772136754895049e+96Q,
+ 3.241060252944379014728014234570755e+98Q,
+ 1.361271785487071738301899377328823e+100Q,
+ 5.785515010137358430397599315806522e+101Q,
+ 2.487817635034432399004799104258776e+103Q,
+ 1.082220303639244463772256524486913e+105Q,
+ 4.761853778920262972406899701541145e+106Q,
+ 2.119061674318428444503264864868692e+108Q,
+ 9.535939245488660481067843850461071e+109Q,
+ 4.338924336915075185707133051022668e+111Q,
+ 1.995937594356210235628280808705277e+113Q,
+ 9.281257267774873178578984209120842e+114Q,
+ 4.362258761302054245344246693668441e+116Q,
+ 2.072104467309746759407768801647412e+118Q,
+ 9.946249789626540297588519326430030e+119Q,
+ 4.824001628763866563465193696726490e+121Q,
+ 2.363794636489558111233771687446041e+123Q,
+ 1.170094760302862442547600553144731e+125Q,
+ 5.850554253574289032212875400525164e+126Q,
+ 2.954569730259901407135096119172891e+128Q,
+ 1.506850482670752656564243782753088e+130Q,
+ 7.760380603441520328785594012413897e+131Q,
+ 4.035449239058131850864863288532028e+133Q,
+ 2.118637288197074896047939919766058e+135Q,
+ 1.122891512986455127634484273389301e+137Q,
+ 6.007541796863915234743129911261451e+138Q,
+ 3.244110844655372941817576741848712e+140Q,
+ 1.768060890834934915998545344362736e+142Q,
+ 9.724445514012239318704962265951030e+143Q,
+ 5.397127555697886647769886900870839e+145Q,
+ 3.022424599378843181346562978935192e+147Q,
+ 1.707688310104939299770635973954737e+149Q,
+ 9.733926488872918799713142602023519e+150Q,
+ 5.597066004129280278937066773118756e+152Q,
+ 3.246331503347048856182115401407294e+154Q,
+ 1.899123034516305990523176999673793e+156Q,
+ 1.120493673015382184186863757404408e+158Q,
+ 6.667002197825379052751202022282931e+159Q,
+ 4.000239582022809074092484018707352e+161Q,
+ 2.420167717157850166107112283071242e+163Q,
+ 1.476315971466498390452292575285715e+165Q,
+ 9.079425903504822320053466065861946e+166Q,
+ 5.629294501428009309668260368979217e+168Q,
+ 3.518340089045622154572808609472069e+170Q,
+ 2.216573494616289232217672643612031e+172Q,
+ 1.407536194762195530346851781865534e+174Q,
+ 9.008307418237028687260890747812261e+175Q,
+ 5.810406406063194598521988532823673e+177Q,
+ 3.776794965501753244735849596741095e+179Q,
+ 2.473820571905781696815263976656646e+181Q,
+ 1.632734494231896463871010812229020e+183Q,
+ 1.085776900182112433178118702418846e+185Q,
+ 7.274761083941356085854772781448162e+186Q,
+ 4.910500878112028620595383876113036e+188Q,
+ 3.339165488138473217218874597110657e+190Q,
+ 2.287345162743856460926658260024207e+192Q,
+ 1.578279589877007679944175008061088e+194Q,
+ 1.096912143732327267162788655280075e+196Q,
+ 7.678439030562053888621945862209508e+197Q,
+ 5.413337067597845028126988176489658e+199Q,
+ 3.843495606538893036428145904978289e+201Q,
+ 2.748117894051497462467017590510021e+203Q,
+ 1.978658045201245086278275974638434e+205Q,
+ 1.434536494196155737613994555908787e+207Q,
+ 1.047218417674069520637626522764264e+209Q,
+ 7.697104507405240277996644921039320e+210Q,
+ 5.695893209382317241028283445171450e+212Q,
+ 4.243466810865795707145890742039051e+214Q,
+ 3.182619623725187774636952759853157e+216Q,
+ 2.402892356389598847645922346082956e+218Q,
+ 1.826209097230261743668270472503557e+220Q,
+ 1.397058194451033126500669860015331e+222Q,
+ 1.075741068948596811317372874066017e+224Q,
+ 8.337041171685535036499317363616066e+225Q,
+ 6.502928990423792370644965152066054e+227Q,
+ 5.104827839273246735782117989682823e+229Q,
+ 4.032836288744939315252568277004871e+231Q,
+ 3.206122353181952211091569786157574e+233Q,
+ 2.564911711575725597169542455779864e+235Q,
+ 2.064764922810364008523252808343359e+237Q,
+ 1.672468384191301162360585470279629e+239Q,
+ 1.363068815045044048700750297613391e+241Q,
+ 1.117722165158548262375897654608207e+243Q,
+ 9.221254621350072970000351429368717e+244Q,
+ 7.653679680924408494545443051776191e+246Q,
+ 6.390854170806011898205425708166369e+248Q,
+ 5.368343764383406034975374020836526e+250Q,
+ 4.536272410412819535036360064657603e+252Q,
+ 3.855849971009808287771220530105424e+254Q,
+ 3.296767293083101080425400381488402e+256Q,
+ 2.835233105703092985287715014497742e+258Q,
+ 2.452487952018686699407435459583229e+260Q,
+ 2.133674250351305121685656974581297e+262Q,
+ 1.866973387910968178228113069523844e+264Q,
+ 1.642943906272935388900446924725668e+266Q,
+ 1.454011766789009870266895920263165e+268Q,
+ 1.294076113394138357046345046315099e+270Q,
+ 1.158203114065351800769276063153581e+272Q,
+ 1.042387246347866902121909419376833e+274Q,
+ 9.433644353076337553141853273039645e+275Q,
+ 8.584652159889149460614524934193433e+277Q,
+ 7.854989126102919164182174880475904e+279Q,
+ 7.226619481709603434798217189493089e+281Q,
+ 6.684650001687572355815272936635608e+283Q,
+ 6.216749325730173453907148480777505e+285Q,
+ 5.812683583318519397833495247776379e+287Q,
+ 5.463943925916348704713771517239779e+289Q,
+ 5.163446980546234307930774002547136e+291Q,
+ 4.905293404959078737946931385804023e+293Q,
+ 4.684572943682552714555356607887959e+295Q,
+ 4.497206881767661668698799206542388e+297Q,
+ 4.339820739154940731305469165295673e+299Q,
+ 4.209641572182355026961502047135824e+301Q,
+ 4.104415447991076275844674535292913e+303Q,
+ 4.022341607500826066868516537658598e+305Q,
+ 3.962020590927621689424926459755537e+307Q,
+ 3.922414211165019563896148387670753e+309Q,
+ 3.902815759602983233505708951803189e+311Q,
+ };
+
+ static constexpr __float128
+ _S_d[_S_max_cd]
+ {
+ -1.000000000000000000000000000000000e+00Q,
+ -9.722222222222222222222222222222222e-02Q,
+ -4.388503086419753086419753086419753e-02Q,
+ -4.246283078989483310470964791952445e-02Q,
+ -6.266216349203230579688055682568713e-02Q,
+ -1.241058960272750945365995472686526e-01Q,
+ -3.082537649010791121244706347668154e-01Q,
+ -9.204799924129445709272387010397958e-01Q,
+ -3.210493584648620907973650261091926e+00Q,
+ -1.280729308073562507270352766191764e+01Q,
+ -5.750830351391427202784792351524963e+01Q,
+ -2.870332371092211077349530828987144e+02Q,
+ -1.576357303337099717826796734206481e+03Q,
+ -9.446354823095931962917203933936062e+03Q,
+ -6.133570666385205823144156720993206e+04Q,
+ -4.289524004000690702056279232746453e+05Q,
+ -3.214536521400864829067001615998275e+06Q,
+ -2.569790838391132545132402844162020e+07Q,
+ -2.182934208321603255352054236989173e+08Q,
+ -1.963523788991032752712502001911679e+09Q,
+ -1.864393108810721585266530546676276e+10Q,
+ -1.863529963852938843791870115867630e+11Q,
+ -1.955882932389842694320697012392636e+12Q,
+ -2.150644463519724977106616660546951e+13Q,
+ -2.472369922906211612860123840379929e+14Q,
+ -2.965882430295212630916036338073545e+15Q,
+ -3.706244000635465228366390921824489e+16Q,
+ -4.816782647945217540878439641969944e+17Q,
+ -6.500984080751062701873088502894851e+18Q,
+ -9.099198264365412234781657638750099e+19Q,
+ -1.319088866907750709757953915010101e+21Q,
+ -1.978219607616628114145519327828545e+22Q,
+ -3.065639370223598386092264218755129e+23Q,
+ -4.904119815775620835731518126711435e+24Q,
+ -8.090395374187028082149401942289269e+25Q,
+ -1.375142480406956245407560846801890e+27Q,
+ -2.406127967357125254551277279514124e+28Q,
+ -4.330398100410561949304091184921347e+29Q,
+ -8.010128562268937488754778902693146e+30Q,
+ -1.521724744139018769008631341040477e+32Q,
+ -2.966993387417997254727141517133538e+33Q,
+ -5.933283219493449591406075378758271e+34Q,
+ -1.216185715477187410460666608307974e+36Q,
+ -2.553715025111643293496042491585695e+37Q,
+ -5.489923036149888462864519377823350e+38Q,
+ -1.207664458504663581523897807455567e+40Q,
+ -2.716989788543417797406104991755334e+41Q,
+ -6.248514488575398643118502393125261e+42Q,
+ -1.468274343468517211831627490866057e+44Q,
+ -3.523567100049943586726891766274794e+45Q,
+ -8.632054257075129854005687931752024e+46Q,
+ -2.157849009857563711025991591283533e+48Q,
+ -5.502111531144559820328426476011819e+49Q,
+ -1.430448068378722838613634335059373e+51Q,
+ -3.790429841685131698769796228639194e+52Q,
+ -1.023349054707279003309533394425510e+54Q,
+ -2.814032235678575023163142262900288e+55Q,
+ -7.878810283641487890754406961953157e+56Q,
+ -2.245328862657782165686760579825391e+58Q,
+ -6.511083708721725425614962382904681e+59Q,
+ -1.920664190401702861487017364214565e+61Q,
+ -5.761686454417020881363820555267796e+62Q,
+ -1.757224019571248449581714492600659e+64Q,
+ -5.447123284124640062769737501986023e+65Q,
+ -1.715761087400761462479847113120142e+67Q,
+ -5.490178848750560497665481725023091e+68Q,
+ -1.784227251997254438838327734091942e+70Q,
+ -5.887691026309762600465986740286605e+71Q,
+ -1.972292315224750519484938764884938e+73Q,
+ -6.705515972283343125877688850299728e+74Q,
+ -2.313309878271471665328832129897152e+76Q,
+ -8.096267806165567489416614688112071e+77Q,
+ -2.874065746584912340354730937461081e+79Q,
+ -1.034625391639240256861069798223123e+81Q,
+ -3.776246748970061121443091935275144e+82Q,
+ -1.397162345772176706734221605600790e+84Q,
+ -5.239180066082424250455320429788797e+85Q,
+ -1.990822273847860578503192782001185e+87Q,
+ -7.664417610512323501025584191661221e+88Q,
+ -2.989028545098270324569269010751143e+90Q,
+ -1.180629950314136764503000174380252e+92Q,
+ -4.722378093272112919511460213960981e+93Q,
+ -1.912507137520034823204247449964669e+95Q,
+ -7.841055241911750535449288210649155e+96Q,
+ -3.253947172439187678802479499916961e+98Q,
+ -1.366620594074447265760845936768229e+100Q,
+ -5.807983029594202540806910381110625e+101Q,
+ -2.497367798700591448521132306194511e+103Q,
+ -1.086327401565769110693593361391987e+105Q,
+ -4.779721898165742383185161989351806e+106Q,
+ -2.126924611885472705892887369005496e+108Q,
+ -9.570933517949169326869927681104966e+109Q,
+ -4.354673608555420286199717925981008e+111Q,
+ -2.003104336167184060531793486653949e+113Q,
+ -9.314227986310485516691165325316653e+114Q,
+ -4.377591832519284664484296769920352e+116Q,
+ -2.079311787196041530744839301827055e+118Q,
+ -9.980488171002191038716190649412579e+119Q,
+ -4.840437750156588425691650915454689e+121Q,
+ -2.371766962413637565234560124840463e+123Q,
+ -1.174001587549282684425889703572593e+125Q,
+ -5.869894928792716433972256806807892e+126Q,
+ -2.964240989606087663786929494358400e+128Q,
+ -1.511734925078113281058779419001883e+130Q,
+ -7.785293542778411244768854346322128e+131Q,
+ -4.048280556193451824953463807732449e+133Q,
+ -2.125310161545727100444941305340125e+135Q,
+ -1.126395074649439387003078608095664e+137Q,
+ -6.026112250640928883073093218560559e+138Q,
+ -3.254046865619095370429575445499091e+140Q,
+ -1.773426781247180545485642598822107e+142Q,
+ -9.753691966685960339212345611111786e+143Q,
+ -5.413214374045719394857129484778055e+145Q,
+ -3.031353475595619675235326828208266e+147Q,
+ -1.712688861525451567119891130540256e+149Q,
+ -9.762181718158471539334951433959726e+150Q,
+ -5.613172668889364538732569123544997e+152Q,
+ -3.255593504783131734516443833365660e+154Q,
+ -1.904495376905319585970201545641753e+156Q,
+ -1.123636712771386061281357063876791e+158Q,
+ -6.685547405607925308808924420119601e+159Q,
+ -4.011274725697354754296877078069304e+161Q,
+ -2.426789243059786828668280852929166e+163Q,
+ -1.480322256328008562475229597199652e+165Q,
+ -9.103865811724216189017270819740446e+166Q,
+ -5.644325995423811737731459996132700e+168Q,
+ -3.527660195241769498028630619033585e+170Q,
+ -2.222398917729604052801687552005230e+172Q,
+ -1.411206432558185609956621929927765e+174Q,
+ -9.031614811298444026684592923097672e+175Q,
+ -5.825324009159634122523328683100498e+177Q,
+ -3.786417373057171724340272143484384e+179Q,
+ -2.480075491177351309196592077735423e+181Q,
+ -1.636831694970245012086496410252179e+183Q,
+ -1.088481201303363024543444029199466e+185Q,
+ -7.292745660168652392618319809338021e+186Q,
+ -4.922551187015371022118317333477730e+188Q,
+ -3.347299874224072421158506447529927e+190Q,
+ -2.292876831819415968691898062345910e+192Q,
+ -1.582068976647420663569491154539025e+194Q,
+ -1.099526952179841754092854897604938e+196Q,
+ -7.696612850752733306109808455966215e+197Q,
+ -5.426059363878921044644325398996096e+199Q,
+ -3.852465257896043311892388952597841e+201Q,
+ -2.754486649310017734685944630117228e+203Q,
+ -1.983211918722997088778341051680179e+205Q,
+ -1.437815434754318379299969400608007e+207Q,
+ -1.049595758009311449174828853122412e+209Q,
+ -7.714459872698149500720425405641437e+210Q,
+ -5.708649969089780437536745446168474e+212Q,
+ -4.252907226462827510721298730341696e+214Q,
+ -3.189653037258282112260459837775483e+216Q,
+ -2.408167641474976671680271242561732e+218Q,
+ -1.830192105075911169499608030786007e+220Q,
+ -1.400085406139984444217897747035949e+222Q,
+ -1.078056980830079258704493160124286e+224Q,
+ -8.354874414833525485775251732308293e+225Q,
+ -6.516750306025118178021468797447702e+227Q,
+ -5.115608890676146940081552240980990e+229Q,
+ -4.041299743705579271842815010010127e+231Q,
+ -3.212808739737076199018768054741844e+233Q,
+ -2.570227590770701194262121818382516e+235Q,
+ -2.069017785679180412248326449555188e+237Q,
+ -1.675892065632839138127956167250518e+239Q,
+ -1.365842098493762347884271661392869e+241Q,
+ -1.119982472873732384241167417307111e+243Q,
+ -9.239789806518615830241558165910161e+244Q,
+ -7.668971748218962757271807573358159e+246Q,
+ -6.403547029139290968509706593386163e+248Q,
+ -5.378942666188703973840083545063250e+250Q,
+ -4.545175791002442340796980987257519e+252Q,
+ -3.863373580709339621015652179920263e+254Q,
+ -3.303162573962020772143005425875382e+256Q,
+ -2.840701250554979374844682642298123e+258Q,
+ -2.457190709357169320115791040522027e+260Q,
+ -2.137742266081240879782293117526161e+262Q,
+ -1.870512673954401293257929397617728e+264Q,
+ -1.646040878763553551744745599418836e+266Q,
+ -1.456737187157873993735062548042477e+268Q,
+ -1.296488184434947561812507851620440e+270Q,
+ -1.160349922432479422272092144827638e+272Q,
+ -1.044308697493208592264069621071536e+274Q,
+ -9.450937926592517823633405708003970e+275Q,
+ -8.600303303298245448692217778193785e+277Q,
+ -7.869232080094039597843429957321735e+279Q,
+ -7.239652158863272692570621548716701e+281Q,
+ -6.696640405278043337619425892575762e+283Q,
+ -6.227840760744857081835617969592452e+285Q,
+ -5.822998904673121916729384325412184e+287Q,
+ -5.473589016694665295542922040659443e+289Q,
+ -5.172513612645525325152777117564777e+291Q,
+ -4.913861603046343504301423842373113e+293Q,
+ -4.692712948797552806153193891307399e+295Q,
+ -4.504980791675643797771744408282305e+297Q,
+ -4.347283887459592392064377968675372e+299Q,
+ -4.216843696343488226323283915479940e+301Q,
+ -4.111401687051486618441856960033836e+303Q,
+ -4.029153362975001894246786675740999e+305Q,
+ -3.968696278528173705750831980327997e+307Q,
+ -3.928989926523217417314247546744802e+309Q,
+ -3.909325877634014064587453253641059e+311Q,
+ };
+ };
+#endif // _GLIBCXX_USE_FLOAT128
+
+
+ /**
+ * A class encapsulating the asymptotic expansions of Airy functions
+ * and thier derivatives.
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ class _Airy_asymp : public _Airy_asymp_data<_Tp>
+ {
+
+ public:
+
+ using __cmplx = std::complex<_Tp>;
+
+ constexpr _Airy_asymp() = default;
+
+ _AiryState<std::complex<_Tp>>
+ operator()(std::complex<_Tp> __t, bool __return_fock_airy = false) const;
+
+ _AiryState<std::complex<_Tp>>
+ _S_absarg_ge_pio3(std::complex<_Tp> __z) const;
+
+ _AiryState<std::complex<_Tp>>
+ _S_absarg_lt_pio3(std::complex<_Tp> __z) const;
+
+ private:
+ std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _S_absarg_ge_pio3_help(std::complex<_Tp> __z, int __sign = -1) const;
+ };
+
+ /**
+ * Return the Airy functions for a given argument using asymptotic series.
+ *
+ *
+ * @tparam _Tp A real type
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_asymp<_Tp>::operator()(std::complex<_Tp> __t,
+ bool __return_fock_airy) const
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_sqrt_pi = __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ constexpr auto _S_i = __cmplx(_Tp{0}, _Tp{1});
+ if (std::real(__t) > _Tp{0})
+ {
+ auto __zeta0 = _Tp{2} * std::pow(__t, _Tp{1.5L}) / _Tp{3};
+ auto __t0p1d4 = std::pow(__t, _Tp{0.25L});
+ auto __ezeta0 = std::exp(-__zeta0);
+ auto _Ai = __cmplx{_Tp{1}};
+ auto _Aip = __cmplx{_Tp{1}};
+ auto __fact0 = -_Tp{1} / __zeta0;
+ auto __izeta0 = __cmplx{_Tp{1}};
+ auto __prev_Ai0 = _Tp{1};
+ auto __prev_Aip0 = _Tp{1};
+ for (int __n = 1; __n < _Airy_asymp_data<_Tp>::_S_max_cd; ++__n)
+ {
+ __izeta0 *= __fact0;
+ auto __term = _Airy_asymp_data<_Tp>::_S_c[__n] * __izeta0;
+ auto __termp = _Airy_asymp_data<_Tp>::_S_d[__n] * __izeta0;
+ if (std::abs(__term) > __prev_Ai0
+ || std::abs(__termp) > __prev_Aip0)
+ break;
+ __prev_Ai0 = std::abs(__term);
+ __prev_Aip0 = std::abs(__termp);
+ _Ai += __term;
+ _Aip += __termp;
+ }
+ _Ai *= _Tp{0.5L} * __ezeta0 / __t0p1d4 / _S_sqrt_pi;
+ _Aip *= _Tp{-0.5L} * __t0p1d4 * __ezeta0 / _S_sqrt_pi;
+
+ auto __t1 = __t * std::exp(+_Tp{2} * _S_pi * _S_i / _Tp{3});
+ auto __t2 = __t * std::exp(-_Tp{2} * _S_pi * _S_i / _Tp{3});
+ auto __zeta1 = (_Tp{2} / _Tp{3}) * std::pow(__t1, _Tp{1.5L});
+ auto __zeta2 = (_Tp{2} / _Tp{3}) * std::pow(__t2, _Tp{1.5L});
+ auto __t1p1d4 = std::pow(__t1, _Tp{+0.25L});
+ auto __t2p1d4 = std::pow(__t2, _Tp{+0.25L});
+ auto __ezeta1 = std::exp(-__zeta1);
+ auto __ezeta2 = std::exp(-__zeta2);
+ auto _Ai1 = __cmplx{_Tp{1}};
+ auto _Ai1p = __cmplx{_Tp{1}};
+ auto _Ai2 = _Ai1;
+ auto _Ai2p = _Ai1p;
+ auto __sign = _Tp{1};
+ auto __izeta1 = __cmplx{_Tp{1}};
+ auto __izeta2 = __cmplx{_Tp{1}};
+ auto __prev_Ai1 = _Tp{1};
+ auto __prev_Ai2 = _Tp{1};
+ auto __prev_Ai1p = _Tp{1};
+ auto __prev_Ai2p = _Tp{1};
+ for (int __n = 1; __n < _Airy_asymp_data<_Tp>::_S_max_cd; ++__n)
+ {
+ __sign = -__sign;
+ __izeta1 /= __zeta1;
+ __izeta2 /= __zeta2;
+ const auto __term1 = _Airy_asymp_data<_Tp>::_S_c[__n] * __izeta1;
+ const auto __term2 = _Airy_asymp_data<_Tp>::_S_c[__n] * __izeta2;
+ const auto __term1p = _Airy_asymp_data<_Tp>::_S_d[__n] * __izeta1;
+ const auto __term2p = _Airy_asymp_data<_Tp>::_S_d[__n] * __izeta2;
+ if (std::abs(__term1) > __prev_Ai1
+ || std::abs(__term2) > __prev_Ai2
+ || std::abs(__term1p) > __prev_Ai1p
+ || std::abs(__term2p) > __prev_Ai2p)
+ break;
+ __prev_Ai1 = std::abs(__term1);
+ __prev_Ai2 = std::abs(__term2);
+ __prev_Ai1p = std::abs(__term1p);
+ __prev_Ai2p = std::abs(__term2p);
+ _Ai1 += __sign * __term1;
+ _Ai2 += __sign * __term2;
+ _Ai1p += __sign * __term1p;
+ _Ai2p += __sign * __term2p;
+ }
+ _Ai1 *= _Tp{+0.5L} * __ezeta1 / __t1p1d4 / _S_sqrt_pi;
+ _Ai2 *= _Tp{+0.5L} * __ezeta2 / __t2p1d4 / _S_sqrt_pi;
+ _Ai1p *= _Tp{-0.5L} * __t1p1d4 * __ezeta1 / _S_sqrt_pi;
+ _Ai2p *= _Tp{-0.5L} * __t2p1d4 * __ezeta2 / _S_sqrt_pi;
+
+ auto _Bi = std::exp(+_S_i * _S_pi / _Tp{6}) * _Ai1
+ + std::exp(-_S_i * _S_pi / _Tp{6}) * _Ai2;
+ auto _Bip = std::exp(+_S_i * _Tp{5} * _S_pi / _Tp{6}) * _Ai1p
+ + std::exp(-_S_i * _Tp{5} * _S_pi / _Tp{6}) * _Ai2p;
+
+ if (__return_fock_airy)
+ {
+ auto __w1 = _S_sqrt_pi * (_Bi - _S_i * _Ai);
+ auto __w2 = _S_sqrt_pi * (_Bi + _S_i * _Ai);
+ auto __w1p = _S_sqrt_pi * (_Bip - _S_i * _Aip);
+ auto __w2p = _S_sqrt_pi * (_Bip + _S_i * _Aip);
+ return _AiryState<std::complex<_Tp>>{__t, __w1, __w1p,
+ __w2, __w2p};
+ }
+ else
+ return _AiryState<std::complex<_Tp>>{__t, _Ai, _Aip, _Bi, _Bip};
+ }
+ else // Argument t is on or left of the imaginary axis.
+ {
+ auto __zeta = (_Tp{2} / _Tp{3}) * std::pow(-__t, _Tp{1.5L});
+ auto __tp1d4 = std::pow(-__t, _Tp{+0.25L});
+ auto __mezeta = std::exp(-_S_i * (__zeta + (_S_pi / _Tp{4})));
+ auto __pezeta = std::exp(+_S_i * (__zeta + (_S_pi / _Tp{4})));
+ auto __w1 = __cmplx{_Tp{1}};
+ auto __w2 = __cmplx{_Tp{1}};
+ auto __w1p = +_S_i;
+ auto __w2p = -_S_i;
+ auto __ipn = __cmplx{_Tp{1}};
+ auto __imn = __cmplx{_Tp{1}};
+ auto __ixn = __cmplx{_Tp{1}};
+ auto __prev_w1 = _Tp{1};
+ auto __prev_w2 = _Tp{1};
+ auto __prev_w1p = _Tp{1};
+ auto __prev_w2p = _Tp{1};
+ for (int __n = 1; __n < _Airy_asymp_data<_Tp>::_S_max_cd; ++__n)
+ {
+ __ipn *= +_S_i;
+ __imn *= -_S_i;
+ __ixn /= __zeta;
+ const auto __term = _Airy_asymp_data<_Tp>::_S_c[__n] * __ixn;
+ const auto __termp = _Airy_asymp_data<_Tp>::_S_d[__n] * __ixn;
+ if (std::abs(__term) > __prev_w1
+ || std::abs(__term) > __prev_w2
+ || std::abs(__termp) > __prev_w1p
+ || std::abs(__termp) > __prev_w2p)
+ break;
+ __prev_w1 = std::abs(__term);
+ __prev_w2 = std::abs(__term);
+ __prev_w1p = std::abs(__termp);
+ __prev_w2p = std::abs(__termp);
+ __w1 += __ipn * __term;
+ __w2 += __imn * __term;
+ __w1p += +_S_i * __ipn * __termp;
+ __w2p += -_S_i * __imn * __termp;
+ }
+ __w1 *= __mezeta / __tp1d4;
+ __w2 *= __pezeta / __tp1d4;
+ __w1p *= __tp1d4 * __mezeta;
+ __w2p *= __tp1d4 * __pezeta;
+
+ if (__return_fock_airy)
+ return _AiryState<std::complex<_Tp>>{__t, __w1, __w1p, __w2, __w2p};
+ else
+ {
+ auto _Bi = (__w1 + __w2) / (_Tp{2} * _S_sqrt_pi);
+ auto _Ai = (__w2 - __w1) / (_Tp{2} * _S_i * _S_sqrt_pi);
+ auto _Bip = (__w1p + __w2p) / (_Tp{2} * _S_sqrt_pi);
+ auto _Aip = (__w2p - __w1p) / (_Tp{2} * _S_i * _S_sqrt_pi);
+ return _AiryState<std::complex<_Tp>>{__t, _Ai, _Aip, _Bi, _Bip};
+ }
+ }
+ }
+
+ /**
+ * @brief This function evaluates @f$ Ai(z) @f$ and @f$ Ai'(z) @f$
+ * or @f$ Bi(z) @f$ and @f$ Bi'(z) @f$ from their asymptotic expansions
+ * for @f$ |arg(z)| < 2*\pi/3 @f$ i.e. roughly along the negative real axis.
+ *
+ * For speed, the number of terms needed to achieve about 16 decimals accuracy
+ * is tabled and determined from @f$ |z| @f$.
+ *
+ * Note that for speed and since this function
+ * is called by another, checks for valid arguments are not
+ * made.
+ *
+ * @see Digital Library of Mathematical Functions §9.7 Asymptotic Expansions
+ * http://dlmf.nist.gov/9.7
+ *
+ * @tparam _Tp A real type
+ * @param[in] z Complex arument at which @f$ Ai(z) @f$ or @f$ Bi(z) @f$
+ * and their derivative are evaluated. This function assumes
+ * @f$ |z| > 15 @f$ and @f$ |arg(z)| < 2\pi/3 @f$.
+ * @param[inout] Ai The value computed for @f$ Ai(z) @f$ or @f$ Bi(x) @f$.
+ * @param[inout] Aip The value computed for @f$ Ai'(z) @f$ or @f$ Bi'(x) @f$.
+ * @param[in] sign The sign of the series terms and exponent.
+ * The default (-1) gives the Airy @f$ Ai(x) @f$ and
+ * @f$ Ai'(x) @f$ functions for @f$ |arg(z)| < \pi @f$.
+ * The value +1 gives the Airy @f$ Bi(x) @f$ and
+ * @f$ Bi'(x) @f$ functions for @f$ |arg(z)| < \pi/3 @f$.
+ * @return A pair containing the Airy function @f$ Ai(z) @f$ or @f$ Bi(x) @f$
+ * and the derivative @f$ Ai'(z) @f$ or @f$ Bi'(x) @f$
+ */
+ template<typename _Tp>
+ std::pair<std::complex<_Tp>, std::complex<_Tp>>
+ _Airy_asymp<_Tp>::_S_absarg_ge_pio3_help(std::complex<_Tp> __z,
+ int __sign) const
+ {
+ constexpr auto _S_sqrt_pi = __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ constexpr _Tp _S_pmhd2 = _Tp{1} / (_Tp{2} * _S_sqrt_pi);
+ constexpr int _S_num_nterms = 5;
+ constexpr int _S_max_nterms = 40;
+ static_assert(_Airy_asymp_data<_Tp>::_S_max_cd > _S_max_nterms, "");
+ constexpr int _S_nterms[_S_num_nterms]{_S_max_nterms, 24, 22, 22, 18};
+
+ auto __zeta = _Tp{2} * std::pow(__z, _Tp{1.5L}) / _Tp{3};
+ auto __z1d4 = std::pow(__z, _Tp{0.25L});
+
+ // Compute outer factors in the expansions.
+ auto __exp = std::exp(_Tp(__sign) * __zeta);
+ auto __fact = _S_pmhd2 * __exp / __z1d4;
+ auto __factp = _S_pmhd2 * __exp * __z1d4;
+ if (__sign == +1)
+ {
+ __fact *= _Tp{2};
+ __factp *= -_Tp{2};
+ }
+
+ // Determine number of terms to use.
+ auto __iterm = std::min(_S_num_nterms - 1, (int(std::abs(__z)) - 10) / 5);
+ if (__iterm < 0 || __iterm >= _S_num_nterms)
+ __iterm = 0;
+ auto __nterm = _S_nterms[__iterm];
+ // Power series is in terms of +-1 / \zeta.
+ auto __zetam = _Tp(__sign) / __zeta;
+
+ __gnu_cxx::_Polynomial<_Tp>
+ __cpoly(std::begin(_Airy_asymp_data<_Tp>::_S_c),
+ std::begin(_Airy_asymp_data<_Tp>::_S_c) + __nterm);
+ auto _Ai = __fact * __cpoly(__zetam);
+
+ __gnu_cxx::_Polynomial<_Tp>
+ __dpoly(std::begin(_Airy_asymp_data<_Tp>::_S_d),
+ std::begin(_Airy_asymp_data<_Tp>::_S_d) + __nterm);
+ auto _Aip = __factp * __dpoly(__zetam);
+
+ return std::make_pair(_Ai, _Aip);
+ }
+
+
+ /**
+ * @brief This function evaluates @f$ Ai(z), Ai'(z) @f$
+ * and @f$ Bi(z), Bi'(z) @f$ from their asymptotic expansions
+ * for @f$ |arg(z)| < 2*\pi/3 @f$ i.e. roughly along the negative real axis.
+ *
+ * @tparam _Tp A real type
+ * @param[in] __z Complex argument at which Ai(z) and Bi(z)
+ * and their derivative are evaluated. This function
+ * assumes @f$ |z| > 15 @f$ and @f$ |(arg(z)| < 2\pi/3 @f$.
+ * @return A struct containing @f$ z, Ai(z), Ai'(z), Bi(z), Bi'(z) @f$.
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_asymp<_Tp>::_S_absarg_ge_pio3(std::complex<_Tp> __z) const
+ {
+ std::complex<_Tp> _Ai, _Aip;
+ std::tie(_Ai, _Aip) = _S_absarg_ge_pio3_help(__z, -1);
+ std::complex<_Tp> _Bi, _Bip;
+ std::tie(_Bi, _Bip) = _S_absarg_ge_pio3_help(__z, +1);
+ return _AiryState<std::complex<_Tp>>{__z, _Ai, _Aip, _Bi, _Bip};
+ }
+
+
+ /**
+ * @brief This function evaluates @f$ Ai(z) @f$ and @f$ Ai'(z) @f$
+ * from their asymptotic expansions for @f$ |arg(-z)| < \pi/3 @f$
+ * i.e. roughly along the negative real axis.
+ *
+ * For speed, the number of terms needed to achieve about 16 decimals
+ * accuracy is tabled and determined for @f$ |z| @f$.
+ * This function assumes @f$ |z| > 15 @f$ and @f$ |arg(-z)| < \pi/3 @f$.
+ *
+ * Note that for speed and since this function
+ * is called by another, checks for valid arguments are not
+ * made. Hence, an error return is not needed.
+ *
+ * @tparam _Tp A real type
+ * @param[in] __z The value at which the Airy function and their derivatives
+ * are evaluated.
+ * @return A struct containing @f$ z, Ai(z), Ai'(z), Bi(z), Bi'(z) @f$.
+ */
+ template<typename _Tp>
+ _AiryState<std::complex<_Tp>>
+ _Airy_asymp<_Tp>::_S_absarg_lt_pio3(std::complex<_Tp> __z) const
+ {
+ constexpr _Tp _S_pimh
+ = _Tp{1} / __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ constexpr _Tp _S_pid4 = __gnu_cxx::__math_constants<_Tp>::__pi_quarter;
+
+ constexpr std::complex<_Tp> _S_zone{1};
+ /// @todo Revisit these numbers of terms for the Airy asymptotic
+ /// expansions.
+ constexpr int _S_num_nterms = 5;
+ constexpr int _S_max_nterms = 40;
+ static_assert(_Airy_asymp_data<_Tp>::_S_max_cd > _S_max_nterms, "");
+ constexpr int _S_nterms[_S_num_nterms]{_S_max_nterms, 28, 24, 24, 20};
+
+ auto __zeta = _Tp{2} * std::pow(-__z, _Tp{1.5L}) / _Tp{3};
+ auto __z1d4 = std::pow(-__z, _Tp{0.25L});
+
+ auto __zetaarg = __zeta - _S_pid4;
+ auto __sinzeta = std::sin(__zetaarg);
+ auto __coszeta = std::cos(__zetaarg);
+
+ // Determine number of terms to use.
+ auto __iterm = std::min(_S_num_nterms - 1, (int(std::abs(__z)) - 10) / 5);
+ if (__iterm < 0 || __iterm >= _S_num_nterms)
+ __iterm = 0;
+ auto __nterm = _S_nterms[__iterm];
+ // Power series is in terms of 1 / \zeta^2.
+ auto __zetam2 = _Tp{1} / (__zeta * __zeta);
+
+ __gnu_cxx::_Polynomial<_Tp>
+ __cpoly(std::begin(_Airy_asymp_data<_Tp>::_S_c),
+ std::begin(_Airy_asymp_data<_Tp>::_S_c) + __nterm);
+
+ __gnu_cxx::_Polynomial<_Tp>
+ __dpoly(std::begin(_Airy_asymp_data<_Tp>::_S_d),
+ std::begin(_Airy_asymp_data<_Tp>::_S_d) + __nterm);
+
+ // Complete evaluation of the Airy functions.
+ __zeta = _S_zone / __zeta;
+ auto _Ai = __coszeta * __cpoly.even(__zetam2)
+ + __sinzeta * __cpoly.odd(__zetam2);
+ _Ai *= _S_pimh / __z1d4;
+ auto _Aip = __sinzeta * __dpoly.even(__zetam2)
+ - __coszeta * __dpoly.odd(__zetam2);
+ _Aip *= _S_pimh * __z1d4;
+ auto _Bi = -__sinzeta * __cpoly.even(__zetam2)
+ + __coszeta * __cpoly.odd(__zetam2);
+ _Bi *= _S_pimh / __z1d4;
+ auto _Bip = __coszeta * __dpoly.even(__zetam2)
+ + __sinzeta * __dpoly.odd(__zetam2);
+ _Bip *= _S_pimh * __z1d4;
+
+ // I think we're computing d/d(-z) above.
+ return _AiryState<std::complex<_Tp>>{__z, _Ai, -_Aip, _Bi, -_Bip};
+ }
+
+
+ /**
+ * Class to manage the asymptotic series for Airy functions.
+ *
+ * @tparam _Sum A sum type
+ */
+ template<typename _Sum>
+ class _Airy_asymp_series
+ {
+ public:
+
+ using value_type = typename _Sum::value_type;
+ using scalar_type = std::__detail::__num_traits_t<value_type>;
+ static constexpr scalar_type _S_sqrt_pi
+ = __gnu_cxx::__math_constants<scalar_type>::__root_pi;
+
+ _Airy_asymp_series(_Sum __proto)
+ : _M_Asum(__proto),
+ _M_Bsum(__proto),
+ _M_Csum(__proto),
+ _M_Dsum(__proto)
+ { }
+ _Airy_asymp_series(const _Airy_asymp_series&) = default;
+ _Airy_asymp_series(_Airy_asymp_series&&) = default;
+
+ _AiryState<value_type>
+ operator()(value_type __y);
+
+ private:
+
+ static constexpr int _S_max_iter = 10000;
+ static constexpr scalar_type _S_eps
+ = std::numeric_limits<scalar_type>::epsilon();
+
+ _Sum _M_Asum;
+ _Sum _M_Bsum;
+ _Sum _M_Csum;
+ _Sum _M_Dsum;
+ };
+
+ template<typename _Sum>
+ constexpr int
+ _Airy_asymp_series<_Sum>::_S_max_iter;
+
+ template<typename _Sum>
+ constexpr typename _Airy_asymp_series<_Sum>::scalar_type
+ _Airy_asymp_series<_Sum>::_S_eps;
+
+ template<typename _Sum>
+ constexpr typename _Airy_asymp_series<_Sum>::scalar_type
+ _Airy_asymp_series<_Sum>::_S_sqrt_pi;
+
+
+ /**
+ * Return an _AiryState containing, not actual Airy functions, but
+ * four asymptotic Airy components:
+ *
+ * @tparam _Sum A sum type
+ */
+ template<typename _Sum>
+ _AiryState<typename _Airy_asymp_series<_Sum>::value_type>
+ _Airy_asymp_series<_Sum>::operator()(typename _Sum::value_type __y)
+ {
+ using __cmplx = value_type;
+ using __scal = scalar_type;
+
+ _M_Asum.reset(__scal{1});
+ _M_Bsum.reset(__scal{1});
+ _M_Csum.reset(__scal{1});
+ _M_Dsum.reset(__scal{1});
+
+ auto __zeta = __scal{2} * std::pow(__y, __scal{1.5L}) / __scal{3};
+ auto __sign = __scal{1};
+ auto __numerAB = __scal{1};
+ auto __numerCD = __scal{1};
+ auto __denom = __cmplx{1};
+ for (int __k = 1; __k < _S_max_iter; ++__k)
+ {
+ __sign = -__sign;
+ __numerAB *= __scal(__k + __scal{1} / __scal{6})
+ * __scal(__k + __scal{5} / __scal{6});
+ __numerCD *= __scal(__k - __scal{1} / __scal{6})
+ * __scal(__k + __scal{7} / __scal{6});
+ __denom *= __cmplx(2 * __k) * __zeta;
+ auto _Aterm = __sign * __numerAB / __denom;
+ _M_Asum += _Aterm;
+ auto _Bterm = __numerAB / __denom;
+ _M_Bsum += _Bterm;
+ auto _Cterm = __sign * __numerCD / __denom;
+ _M_Csum += _Cterm;
+ auto _Dterm = __numerCD / __denom;
+ _M_Dsum += _Dterm;
+ if (std::abs(_M_Asum()) * _S_eps < std::abs(_Aterm)
+ && std::abs(_M_Bsum()) * _S_eps < std::abs(_Bterm)
+ && std::abs(_M_Csum()) * _S_eps < std::abs(_Cterm)
+ && std::abs(_M_Dsum()) * _S_eps < std::abs(_Dterm))
+ break;
+ }
+
+ auto __expzeta = std::exp(__zeta);
+ auto __y1o4 = std::pow(__y, __scal{0.25L});
+ auto _AA = __scal{0.5L} * _M_Asum() / _S_sqrt_pi / __y1o4 / __expzeta;
+ auto _BB = __scal{0.5L} * __expzeta * _M_Bsum() / _S_sqrt_pi / __y1o4;
+ auto _CC = __scal{-0.5L} * __y1o4 * _M_Csum() / _S_sqrt_pi / __expzeta;
+ auto _DD = __scal{0.5L} * __y1o4 * __expzeta * _M_Dsum() / _S_sqrt_pi;
+
+ return _AiryState<value_type>{__y, _AA, _CC, _BB, _DD};
+ }
+
+
+ template<typename _Tp>
+ struct _Airy_default_radii
+ {};
+
+ template<>
+ struct _Airy_default_radii<float>
+ {
+ constexpr static float inner_radius{2.0F};
+ constexpr static float outer_radius{6.0F};
+ };
+
+ template<>
+ struct _Airy_default_radii<double>
+ {
+ constexpr static double inner_radius{4.0};
+ constexpr static double outer_radius{12.0};
+ };
+
+ template<>
+ struct _Airy_default_radii<long double>
+ {
+ constexpr static long double inner_radius{5.0L};
+ constexpr static long double outer_radius{15.0L};
+ };
+
+ /**
+ * Class to manage the asymptotic expansions for Airy functions.
+ * The parameters describing the various regions are adjustable.
+ */
+ template<typename _Tp>
+ class _Airy
+ {
+ public:
+
+ using value_type = _Tp;
+ using scalar_type = std::__detail::__num_traits_t<value_type>;
+ static constexpr scalar_type _S_pi
+ = __gnu_cxx::__math_constants<scalar_type>::__pi;
+ static constexpr scalar_type _S_sqrt_pi
+ = __gnu_cxx::__math_constants<scalar_type>::__root_pi;
+ static constexpr scalar_type _S_pi_3
+ = __gnu_cxx::__math_constants<scalar_type>::__pi_third;
+ static constexpr scalar_type _S_2pi_3 = scalar_type{2} * _S_pi_3;
+ static constexpr scalar_type _S_pi_6 = _S_pi_3 / scalar_type{2};
+ static constexpr scalar_type _S_5pi_6 = scalar_type{5} * _S_pi_6;
+ static constexpr value_type _S_i = value_type{0, 1};
+
+ static constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<scalar_type>();
+ static constexpr auto _S_cNaN = value_type(_S_NaN, _S_NaN);
+
+ constexpr _Airy() = default;
+ _Airy(const _Airy&) = default;
+ _Airy(_Airy&&) = default;
+
+ constexpr _AiryState<value_type>
+ operator()(value_type __y) const;
+
+ scalar_type inner_radius{_Airy_default_radii<scalar_type>::inner_radius};
+ scalar_type outer_radius{_Airy_default_radii<scalar_type>::outer_radius};
+ };
+
+ template<typename _Tp>
+ constexpr typename _Airy<_Tp>::scalar_type
+ _Airy<_Tp>::_S_sqrt_pi;
+
+ template<typename _Tp>
+ constexpr typename _Airy<_Tp>::scalar_type
+ _Airy<_Tp>::_S_pi_3;
+
+ template<typename _Tp>
+ constexpr typename _Airy<_Tp>::scalar_type
+ _Airy<_Tp>::_S_pi_6;
+
+ template<typename _Tp>
+ constexpr typename _Airy<_Tp>::value_type
+ _Airy<_Tp>::_S_i;
+
+ /**
+ * Return the Airy functions for complex argument.
+ */
+ template<typename _Tp>
+ constexpr _AiryState<_Tp>
+ _Airy<_Tp>::operator()(typename _Airy<_Tp>::value_type __y) const
+ {
+ using __cmplx = value_type;
+ using __scal = scalar_type;
+
+ using _OuterSum = __gnu_cxx::_KahanSum<__cmplx>;
+ using _InnerSum = __gnu_cxx::_WenigerDeltaSum<_OuterSum>;
+
+ if (std::__detail::__isnan(__y))
+ return _AiryState<_Tp>{__y, _S_cNaN, _S_cNaN, _S_cNaN, _S_cNaN};
+
+ auto __absargy = std::abs(std::arg(__y));
+ auto __absy = std::abs(__y);
+ auto __sign = std::copysign(__scal{1}, std::arg(__y));
+
+ _AiryState<_Tp> __sums;
+ if (__absy >= inner_radius)
+ {
+ if (__absy < outer_radius)
+ {
+ auto __beta = __scal{1};
+ _Airy_asymp_series<_InnerSum> __asymp(_InnerSum{__beta});
+ __sums = __asymp(__y);
+ }
+ else
+ {
+ _Airy_asymp_series<_OuterSum> __asymp(_OuterSum{});
+ __sums = __asymp(__y);
+ }
+ }
+
+ __cmplx _Bi, _Bip;
+ if (__absy < inner_radius
+ || (__absy < outer_radius && __absargy < _S_pi_3))
+ std::tie(_Bi, _Bip) = _Airy_series<__scal>::_S_Bi(__y);
+ else if (__absy < outer_radius)
+ {
+ _Bi = __scal{2} * __sums.Bi + __sign * _S_i * __sums.Ai;
+ _Bip = __scal{2} * __sums.Bip + __sign * _S_i * __sums.Aip;
+ if (__absargy > _S_5pi_6)
+ {
+ _Bi -= __sums.Bi;
+ _Bip -= __sums.Bip;
+ }
+ }
+ else
+ {
+ _Bi = __scal{2} * __sums.Bi;
+ _Bip = __scal{2} * __sums.Bip;
+ if (__absargy > _S_pi_6)
+ {
+ _Bi += __sign * _S_i * __sums.Ai;
+ _Bip += __sign * _S_i * __sums.Aip;
+ }
+ if (__absargy > _S_5pi_6)
+ {
+ _Bi -= __sums.Bi;
+ _Bip -= __sums.Bip;
+ }
+ }
+
+ __cmplx _Ai, _Aip;
+ if ((__absy < inner_radius
+ + outer_radius * __absargy / _S_pi && __absargy < _S_2pi_3)
+ || (__absy < outer_radius && __absargy >= _S_2pi_3))
+ std::tie(_Ai, _Aip) = _Airy_series<__scal>::_S_Ai(__y);
+ else if (__absy < outer_radius)
+ {
+ _Ai = __sums.Ai;
+ _Aip = __sums.Aip;
+ }
+ else
+ {
+ _Ai = __sums.Ai;
+ _Aip = __sums.Aip;
+ if (__absargy >= _S_5pi_6)
+ {
+ _Ai += __sign * _S_i * __sums.Bi;
+ _Aip += __sign * _S_i * __sums.Bip;
+ }
+ }
+
+ return _AiryState<_Tp>{__y, _Ai, _Aip, _Bi, _Bip};
+ }
+
+
+ /**
+ * @brief Return the complex Airy Ai function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __airy_ai(std::complex<_Tp> __z)
+ {
+ auto __airy = _Airy<std::complex<_Tp>>()(__z);
+ return __airy.Ai;
+ }
+
+
+ /**
+ * @brief Return the complex Airy Bi function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __airy_bi(std::complex<_Tp> __z)
+ {
+ auto __airy = _Airy<std::complex<_Tp>>()(__z);
+ return __airy.Bi;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_AIRY_TCC
diff --git a/libstdc++-v3/include/bits/sf_bessel.tcc b/libstdc++-v3/include/bits/sf_bessel.tcc
new file mode 100644
index 00000000000..d046b498ed9
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_bessel.tcc
@@ -0,0 +1,904 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_bessel.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 9, pp. 355-434, Section 10 pp. 435-478
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 240-245
+
+#ifndef _GLIBCXX_BITS_SF_BESSEL_TCC
+#define _GLIBCXX_BITS_SF_BESSEL_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <utility> // For exchange
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This routine computes the asymptotic cylindrical Bessel
+ * and Neumann functions of order nu: @f$ J_{\nu}(x) @f$,
+ * @f$ N_{\nu}(x) @f$. Use this for @f$ x >> nu^2 + 1 @f$.
+ *
+ * References:
+ * (1) Handbook of Mathematical Functions,
+ * ed. Milton Abramowitz and Irene A. Stegun,
+ * Dover Publications,
+ * Section 9 p. 364, Equations 9.2.5-9.2.10
+ *
+ * @param __nu The order of the Bessel functions.
+ * @param __x The argument of the Bessel functions.
+ * @param[out] _Jnu The Bessel function of the first kind.
+ * @param[out] _Nnu The Neumann function (Bessel function of the second kind).
+ * @param[out] _Jpnu The Bessel function of the first kind.
+ * @param[out] _Npnu The Neumann function (Bessel function of the second kind).
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_jn_asymp(_Tp __nu, _Tp __x,
+ _Tp& _Jnu, _Tp& _Nnu,
+ _Tp& _Jpnu, _Tp& _Npnu)
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<long double>::__pi_half;
+ const auto __2nu = _Tp{2} * __nu;
+ const auto __4nu2 = __2nu * __2nu;
+ const auto __8x = _Tp{8} * __x;
+ auto __k = 0;
+ auto __bk_xk = _Tp{1};
+ auto _Rsum = __bk_xk;
+ auto __ak_xk = _Tp{1};
+ auto _Psum = __ak_xk;
+ ++__k;
+ auto __2km1 = 1;
+ __bk_xk *= (__4nu2 + __2km1 * (__2km1 + 2)) / __8x;
+ auto _Ssum = __bk_xk;
+ __ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / __8x;
+ auto _Qsum = __ak_xk;
+ do
+ {
+ ++__k;
+ __2km1 += 2;
+ __bk_xk = -(__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
+ _Rsum += __bk_xk;
+ __ak_xk *= -(__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ _Psum += __ak_xk;
+ auto __convP = std::abs(__ak_xk) < _S_eps * std::abs(_Psum);
+
+ ++__k;
+ __2km1 += 2;
+ __bk_xk = (__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
+ _Ssum += __bk_xk;
+ __ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ _Qsum += __ak_xk;
+ auto __convQ = std::abs(__ak_xk) < _S_eps * std::abs(_Qsum);
+
+ if (__convP && __convQ && __k > (__nu / _Tp{2}))
+ break;
+ }
+ while (__k < _Tp{100} * __nu);
+
+ auto __omega = __x - (__nu + 0.5L) * _S_pi_2;
+ auto __c = std::cos(__omega);
+ auto __s = std::sin(__omega);
+
+ auto __coef = std::sqrt(_Tp{2} / (_S_pi * __x));
+ _Jnu = __coef * (__c * _Psum - __s * _Qsum);
+ _Nnu = __coef * (__s * _Psum + __c * _Qsum);
+ _Jpnu = -__coef * (__s * _Rsum + __c * _Ssum);
+ _Npnu = __coef * (__c * _Rsum - __s * _Ssum);
+
+ return;
+ }
+
+ /**
+ * @brief Compute the gamma functions required by the Temme series
+ * expansions of @f$ N_\nu(x) @f$ and @f$ K_\nu(x) @f$.
+ * @f[
+ * \Gamma_1 = \frac{1}{2\mu}
+ * [\frac{1}{\Gamma(1 - \mu)} - \frac{1}{\Gamma(1 + \mu)}]
+ * @f]
+ * and
+ * @f[
+ * \Gamma_2 = \frac{1}{2}
+ * [\frac{1}{\Gamma(1 - \mu)} + \frac{1}{\Gamma(1 + \mu)}]
+ * @f]
+ * where @f$ -1/2 <= \mu <= 1/2 @f$ is @f$ \mu = \nu - N @f$ and @f$ N @f$.
+ * is the nearest integer to @f$ \nu @f$.
+ * The values of @f$ \Gamma(1 + \mu) @f$ and @f$ \Gamma(1 - \mu) @f$
+ * are returned as well.
+ *
+ * The accuracy requirements on this are exquisite.
+ *
+ * @param __mu The input parameter of the gamma functions.
+ * @param[out] __gam1 The output function @f$ \Gamma_1(\mu) @f$
+ * @param[out] __gam2 The output function @f$ \Gamma_2(\mu) @f$
+ * @param[out] __gampl The output function @f$ \Gamma(1 + \mu) @f$
+ * @param[out] __gammi The output function @f$ \Gamma(1 - \mu) @f$
+ */
+ template<typename _Tp>
+ void
+ __gamma_temme(_Tp __mu,
+ _Tp& __gam1, _Tp& __gam2, _Tp& __gampl, _Tp& __gammi)
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_gamma_E = __gnu_cxx::__math_constants<_Tp>::__gamma_e;
+ __gampl = _Tp{1} / __gamma(_Tp{1} + __mu);
+ __gammi = _Tp{1} / __gamma(_Tp{1} - __mu);
+
+ if (std::abs(__mu) < _S_eps)
+ __gam1 = -_S_gamma_E;
+ else
+ __gam1 = (__gammi - __gampl) / (_Tp{2} * __mu);
+
+ __gam2 = (__gammi + __gampl) / _Tp{2};
+
+ return;
+ }
+
+ /**
+ * @brief Compute the Bessel @f$ J_\nu(x) @f$ and Neumann
+ * @f$ N_\nu(x) @f$ functions and their first derivatives
+ * @f$ J'_\nu(x) @f$ and @f$ N'_\nu(x) @f$ respectively.
+ * These four functions are computed together for numerical
+ * stability.
+ *
+ * @param __nu The order of the Bessel functions.
+ * @param __x The argument of the Bessel functions.
+ * @param[out] _Jnu The output Bessel function of the first kind.
+ * @param[out] _Nnu The output Neumann function (Bessel function of the second kind).
+ * @param[out] _Jpnu The output derivative of the Bessel function of the first kind.
+ * @param[out] _Npnu The output derivative of the Neumann function.
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_jn_steed(_Tp __nu, _Tp __x,
+ _Tp& _Jnu, _Tp& _Nnu, _Tp& _Jpnu, _Tp& _Npnu)
+ {
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Tp>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ // When the multiplier is N i.e.
+ // fp_min = N * min()
+ // Then J_0 and N_0 tank at x = 8 * N (J_0 = 0 and N_0 = nan)!
+ //const _Tp _S_fp_min = _Tp{20} * __gnu_cxx::__min<_Tp>();
+ constexpr int _S_max_iter = 15000;
+ constexpr auto _S_x_min = _Tp{2};
+ const auto _S_fp_min = __gnu_cxx::__sqrt_min<_Tp>();
+
+ const int __n = (__x < _S_x_min
+ ? std::nearbyint(__nu)
+ : std::max(0,
+ static_cast<int>(__nu - __x + _Tp{1.5L})));
+
+ const auto __mu = __nu - __n;
+ const auto __mu2 = __mu * __mu;
+ const auto __xi = _Tp{1} / __x;
+ const auto __xi2 = _Tp{2} * __xi;
+ const auto _Wronski = __xi2 / _S_pi;
+ int __isign = 1;
+ _Tp __h = __nu * __xi;
+ if (__h < _S_fp_min)
+ __h = _S_fp_min;
+ auto __b = __xi2 * __nu;
+ auto __d = _Tp{0};
+ auto __c = __h;
+ int __i;
+ for (__i = 1; __i <= _S_max_iter; ++__i)
+ {
+ __b += __xi2;
+ __d = __b - __d;
+ if (std::abs(__d) < _S_fp_min)
+ __d = _S_fp_min;
+ __c = __b - _Tp{1} / __c;
+ if (std::abs(__c) < _S_fp_min)
+ __c = _S_fp_min;
+ __d = _Tp{1} / __d;
+ const auto __del = __c * __d;
+ __h *= __del;
+ if (__d < _Tp{0})
+ __isign = -__isign;
+ if (std::abs(__del - _Tp{1}) < _S_eps)
+ break;
+ }
+ if (__i > _S_max_iter)
+ {
+ // Don't throw with message "try asymptotic expansion" - Just do it!
+ __cyl_bessel_jn_asymp(__nu, __x, _Jnu, _Nnu, _Jpnu, _Npnu);
+ return;
+ }
+ auto _Jnul = __isign * _S_fp_min;
+ auto _Jpnul = __h * _Jnul;
+ auto _Jnul1 = _Jnul;
+ auto _Jpnu1 = _Jpnul;
+ auto __fact = __nu * __xi;
+ for (int __l = __n; __l >= 1; --__l)
+ {
+ const auto _Jnutemp = __fact * _Jnul + _Jpnul;
+ __fact -= __xi;
+ _Jpnul = __fact * _Jnutemp - _Jnul;
+ _Jnul = _Jnutemp;
+ }
+ if (_Jnul == _Tp{0})
+ _Jnul = _S_eps;
+
+ auto __f = _Jpnul / _Jnul;
+ _Tp _Nmu, _Nnu1, _Npmu, _Jmu;
+ if (__x < _S_x_min)
+ {
+ const auto __x2 = __x / _Tp{2};
+ const auto __pimu = _S_pi * __mu;
+ const auto __fact = (std::abs(__pimu) < _S_eps
+ ? _Tp{1}
+ : __pimu / std::sin(__pimu));
+ auto __d = -std::log(__x2);
+ auto __e = __mu * __d;
+ const auto __fact2 = (std::abs(__e) < _S_eps
+ ? _Tp{1}
+ : std::sinh(__e) / __e);
+ _Tp __gam1, __gam2, __gampl, __gammi;
+ __gamma_temme(__mu, __gam1, __gam2, __gampl, __gammi);
+ auto __ff = (_Tp{2} / _S_pi) * __fact
+ * (__gam1 * std::cosh(__e) + __gam2 * __fact2 * __d);
+ __e = std::exp(__e);
+ auto __p = __e / (_S_pi * __gampl);
+ auto __q = _Tp{1} / (__e * _S_pi * __gammi);
+ const auto __pimu2 = __pimu / _Tp{2};
+ auto __fact3 = (std::abs(__pimu2) < _S_eps
+ ? _Tp{1} : std::sin(__pimu2) / __pimu2 );
+ auto __r = _S_pi * __pimu2 * __fact3 * __fact3;
+ auto __c = _Tp{1};
+ __d = -__x2 * __x2;
+ auto __sum = __ff + __r * __q;
+ auto __sum1 = __p;
+ int __i;
+ for (__i = 1; __i <= _S_max_iter; ++__i)
+ {
+ __ff = (__i * __ff + __p + __q) / (__i * __i - __mu2);
+ __c *= __d / _Tp(__i);
+ __p /= _Tp(__i) - __mu;
+ __q /= _Tp(__i) + __mu;
+ const auto __del = __c * (__ff + __r * __q);
+ __sum += __del;
+ const auto __del1 = __c * __p - _Tp(__i) * __del;
+ __sum1 += __del1;
+ if (std::abs(__del) < _S_eps * (_Tp{1} + std::abs(__sum)))
+ break;
+ }
+ if (__i > _S_max_iter)
+ std::__throw_runtime_error(__N("__cyl_bessel_jn_steed: "
+ "Y-series failed to converge"));
+ _Nmu = -__sum;
+ _Nnu1 = -__sum1 * __xi2;
+ _Npmu = __mu * __xi * _Nmu - _Nnu1;
+ _Jmu = _Wronski / (_Npmu - __f * _Nmu);
+ }
+ else
+ {
+ auto __a = _Tp{0.25L} - __mu2;
+ auto __q = _Tp{1};
+ auto __p = -__xi / _Tp{2};
+ auto __br = _Tp{2} * __x;
+ auto __bi = _Tp{2};
+ auto __fact = __a * __xi / (__p * __p + __q * __q);
+ auto __cr = __br + __q * __fact;
+ auto __ci = __bi + __p * __fact;
+ auto __den = __br * __br + __bi * __bi;
+ auto __dr = __br / __den;
+ auto __di = -__bi / __den;
+ auto __dlr = __cr * __dr - __ci * __di;
+ auto __dli = __cr * __di + __ci * __dr;
+ auto __temp = __p * __dlr - __q * __dli;
+ __q = __p * __dli + __q * __dlr;
+ __p = __temp;
+ int __i;
+ for (__i = 2; __i <= _S_max_iter; ++__i)
+ {
+ __a += _Tp{2 * (__i - 1)};
+ __bi += _Tp{2};
+ __dr = __a * __dr + __br;
+ __di = __a * __di + __bi;
+ if (std::abs(__dr) + std::abs(__di) < _S_fp_min)
+ __dr = _S_fp_min;
+ __fact = __a / (__cr * __cr + __ci * __ci);
+ __cr = __br + __cr * __fact;
+ __ci = __bi - __ci * __fact;
+ if (std::abs(__cr) + std::abs(__ci) < _S_fp_min)
+ __cr = _S_fp_min;
+ __den = __dr * __dr + __di * __di;
+ __dr /= __den;
+ __di /= -__den;
+ __dlr = __cr * __dr - __ci * __di;
+ __dli = __cr * __di + __ci * __dr;
+ __temp = __p * __dlr - __q * __dli;
+ __q = __p * __dli + __q * __dlr;
+ __p = __temp;
+ if (std::abs(__dlr - _Tp{1}) + std::abs(__dli) < _S_eps)
+ break;
+ }
+ if (__i > _S_max_iter)
+ std::__throw_runtime_error(__N("__cyl_bessel_jn_steed: "
+ "Lentz's method failed"));
+ const auto __gam = (__p - __f) / __q;
+ _Jmu = std::sqrt(_Wronski / ((__p - __f) * __gam + __q));
+ _Jmu = std::copysign(_Jmu, _Jnul);
+ _Nmu = __gam * _Jmu;
+ _Npmu = (__p + __q / __gam) * _Nmu;
+ _Nnu1 = __mu * __xi * _Nmu - _Npmu;
+ }
+ __fact = _Jmu / _Jnul;
+ _Jnu = __fact * _Jnul1;
+ _Jpnu = __fact * _Jpnu1;
+ for (int __i = 1; __i <= __n; ++__i)
+ _Nmu = std::exchange(_Nnu1, (__mu + __i) * __xi2 * _Nnu1 - _Nmu);
+ _Nnu = _Nmu;
+ _Npnu = __nu * __xi * _Nmu - _Nnu1;
+
+ return;
+ }
+
+
+ /**
+ * @brief This routine returns the cylindrical Bessel functions
+ * of order @f$ \nu @f$: @f$ J_{\nu} @f$ or @f$ I_{\nu} @f$
+ * by series expansion.
+ *
+ * The modified cylindrical Bessel function is:
+ * @f[
+ * Z_{\nu}(x) = \sum_{k=0}^{\infty}
+ * \frac{\sigma^k (x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
+ * @f]
+ * where @f$ \sigma = +1 @f$ or@f$ -1 @f$ for
+ * @f$ Z = I @f$ or @f$ J @f$ respectively.
+ *
+ * See Abramowitz & Stegun, 9.1.10
+ * Abramowitz & Stegun, 9.6.7
+ * (1) Handbook of Mathematical Functions,
+ * ed. Milton Abramowitz and Irene A. Stegun,
+ * Dover Publications,
+ * Equation 9.1.10 p. 360 and Equation 9.6.10 p. 375
+ *
+ * @param __nu The order of the Bessel function.
+ * @param __x The argument of the Bessel function.
+ * @param __sgn The sign of the alternate terms
+ * -1 for the Bessel function of the first kind.
+ * +1 for the modified Bessel function of the first kind.
+ * @param __max_iter The maximum number of iterations for sum.
+ * @return The output Bessel function.
+ */
+ template<typename _Tp>
+ _Tp
+ __cyl_bessel_ij_series(_Tp __nu, _Tp __x, _Tp __sgn,
+ unsigned int __max_iter)
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ if (__x < _S_eps)
+ {
+ if (__nu == _Tp{0})
+ return _Tp{1};
+ else
+ return _Tp{0};
+ }
+ else
+ {
+ const auto __x2 = __x / _Tp{2};
+
+ _Tp __fact = __nu * std::log(__x2);
+ __fact -= __log_gamma(__nu + _Tp{1});
+ __fact = std::exp(__fact);
+ const auto __xx4 = __sgn * __x2 * __x2;
+ _Tp _Jn = _Tp{1};
+ _Tp __term = _Tp{1};
+ for (unsigned int __i = 1; __i < __max_iter; ++__i)
+ {
+ __term *= __xx4 / (_Tp(__i) * (__nu + _Tp(__i)));
+ _Jn += __term;
+ if (std::abs(__term / _Jn) < _S_eps)
+ break;
+ }
+
+ return __fact * _Jn;
+ }
+ }
+
+ /**
+ * @brief Return the cylindrical Bessel functions and their derivatives
+ * of order @f$ \nu @f$ by various means.
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_jn(_Tp __nu, _Tp __x,
+ _Tp& _Jnu, _Tp& _Nnu, _Tp& _Jpnu, _Tp& _Npnu)
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (__nu < _Tp{0})
+ {
+ _Tp _J_mnu, _N_mnu, _Jp_mnu, _Np_mnu;
+ __cyl_bessel_jn(-__nu, __x, _J_mnu, _N_mnu, _Jp_mnu, _Np_mnu);
+ auto __sinnupi = __sin_pi(-__nu);
+ auto __cosnupi = __cos_pi(-__nu);
+ if (std::abs(__sinnupi) < _S_eps)
+ { // Carefully preserve +-inf.
+ auto __sign = std::copysign(_Tp{1}, __cosnupi);
+ _Jnu = __sign * _J_mnu;
+ _Nnu = __sign * _N_mnu;
+ _Jpnu = __sign * _Jp_mnu;
+ _Npnu = __sign * _Np_mnu;
+ }
+ else if (std::abs(__cosnupi) < _S_eps)
+ { // Carefully preserve +-inf.
+ auto __sign = std::copysign(_Tp{1}, __sinnupi);
+ _Jnu = -__sign * _N_mnu;
+ _Nnu = __sign * _J_mnu;
+ _Jpnu = -__sign * _Np_mnu;
+ _Npnu = __sign * _Jp_mnu;
+ }
+ else
+ {
+ _Jnu = __cosnupi * _J_mnu - __sinnupi * _N_mnu;
+ _Nnu = __sinnupi * _J_mnu + __cosnupi * _N_mnu;
+ _Jpnu = __cosnupi * _Jp_mnu - __sinnupi * _Np_mnu;
+ _Npnu = __sinnupi * _Jp_mnu + __cosnupi * _Np_mnu;
+ }
+ }
+ else if (__x == _Tp{0})
+ {
+ if (__nu == _Tp{0})
+ {
+ _Jnu = _Tp{1};
+ _Jpnu = _Tp{0};
+ }
+ else if (__nu == _Tp{1})
+ {
+ _Jnu = _Tp{0};
+ _Jpnu = _Tp{0.5L};
+ }
+ else
+ {
+ _Jnu = _Tp{0};
+ _Jpnu = _Tp{0};
+ }
+ _Nnu = -_S_inf;
+ _Npnu = _S_inf;
+ return;
+ }
+ else if (__x > _Tp{1000})
+ __cyl_bessel_jn_asymp(__nu, __x, _Jnu, _Nnu, _Jpnu, _Npnu);
+ else
+ __cyl_bessel_jn_steed(__nu, __x, _Jnu, _Nnu, _Jpnu, _Npnu);
+ }
+
+ /**
+ * @brief Return the cylindrical Bessel functions and their derivatives
+ * of order @f$ \nu @f$ and argument @f$ x < 0 @f$.
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_jn_neg_arg(_Tp __nu, _Tp __x,
+ std::complex<_Tp>& _Jnu, std::complex<_Tp>& _Nnu,
+ std::complex<_Tp>& _Jpnu, std::complex<_Tp>& _Npnu)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr std::complex<_Tp> _S_i{0, 1};
+ if (__x >= _Tp{0})
+ std::__throw_domain_error(__N("__cyl_bessel_jn_neg_arg: "
+ "non-negative argument"));
+ else
+ {
+ _Tp _Jm, _Nm, _Jpm, _Npm;
+ __cyl_bessel_jn(__nu, -__x, _Jm, _Nm, _Jpm, _Npm);
+ auto __phm = std::polar(_Tp{1}, -__nu * _S_pi);
+ auto __php = std::polar(_Tp{1}, __nu * _S_pi);
+ _Jnu = __php * _Jm;
+ _Jpnu = -__php * _Jpm;
+ _Nnu = __phm * _Nm
+ + _S_i * _Tp{2} * __cos_pi(__nu) * _Jm;
+ _Npnu = -__phm * _Npm
+ - _S_i * _Tp{2} * __cos_pi(__nu) * _Jpm;
+ }
+ }
+
+
+ /**
+ * @brief Return the Bessel function of order @f$ \nu @f$:
+ * @f$ J_{\nu}(x) @f$.
+ *
+ * The cylindrical Bessel function is:
+ * @f[
+ * J_{\nu}(x) = \sum_{k=0}^{\infty}
+ * \frac{(-1)^k (x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
+ * @f]
+ *
+ * @param __nu The order of the Bessel function.
+ * @param __x The argument of the Bessel function.
+ * @return The output Bessel function.
+ */
+ template<typename _Tp>
+ _Tp
+ __cyl_bessel_j(_Tp __nu, _Tp __x)
+ {
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__cyl_bessel_j: bad argument"));
+ else if (__isnan(__nu) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__nu >= _Tp{0} && __x * __x < _Tp{10} * (__nu + _Tp{1}))
+ return __cyl_bessel_ij_series(__nu, __x, -_Tp{1}, 200);
+ else
+ {
+ _Tp _J_nu, _N_nu, _Jp_nu, _Np_nu;
+ __cyl_bessel_jn(__nu, __x, _J_nu, _N_nu, _Jp_nu, _Np_nu);
+ return _J_nu;
+ }
+ }
+
+
+ /**
+ * @brief Return the Neumann function of order @f$ \nu @f$:
+ * @f$ N_{\nu}(x) @f$.
+ *
+ * The Neumann function is defined by:
+ * @f[
+ * N_{\nu}(x) = \frac{J_{\nu}(x) \cos \nu\pi - J_{-\nu}(x)}
+ * {\sin \nu\pi}
+ * @f]
+ * where for integral @f$ \nu = n @f$ a limit is taken:
+ * @f$ lim_{\nu \to n} @f$.
+ *
+ * @param __nu The order of the Neumann function.
+ * @param __x The argument of the Neumann function.
+ * @return The output Neumann function.
+ */
+ template<typename _Tp>
+ _Tp
+ __cyl_neumann_n(_Tp __nu, _Tp __x)
+ {
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__cyl_neumann_n: bad argument"));
+ else if (__isnan(__nu) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ {
+ _Tp _J_nu, _N_nu, _Jp_nu, _Np_nu;
+ __cyl_bessel_jn(__nu, __x, _J_nu, _N_nu, _Jp_nu, _Np_nu);
+ return _N_nu;
+ }
+ }
+
+
+ /**
+ * @brief Return the cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_\nu(x) @f$.
+ *
+ * The cylindrical Hankel function of the first kind is defined by:
+ * @f[
+ * H^{(1)}_\nu(x) = J_\nu(x) + i N_\nu(x)
+ * @f]
+ *
+ * @param __nu The order of the spherical Neumann function.
+ * @param __x The argument of the spherical Neumann function.
+ * @return The output spherical Neumann function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cyl_hankel_1(_Tp __nu, _Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_nan = __gnu_cxx::__quiet_NaN<_Tp>();
+ constexpr std::complex<_Tp> _S_i{0, 1};
+ if (__nu < _Tp{0})
+ return std::exp(-_S_i * _S_pi * __nu) * __cyl_hankel_1(-__nu, __x);
+ else if (__isnan(__x))
+ return std::complex<_Tp>{_S_nan, _S_nan};
+ else if (__x < _Tp{0})
+ {
+ std::complex<_Tp> _J_n, _N_n, _Jp_n, _Np_n;
+ __cyl_bessel_jn_neg_arg(__nu, __x, _J_n, _N_n, _Jp_n, _Np_n);
+ return _J_n + _S_i * _N_n;
+ }
+ else
+ {
+ _Tp _J_n, _N_n, _Jp_n, _Np_n;
+ __cyl_bessel_jn(__nu, __x, _J_n, _N_n, _Jp_n, _Np_n);
+ return std::complex<_Tp>{_J_n, _N_n};
+ }
+ }
+
+
+ /**
+ * @brief Return the cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_nu(x) @f$.
+ *
+ * The cylindrical Hankel function of the second kind is defined by:
+ * @f[
+ * H^{(2)}_\nu(x) = J_\nu(x) - i N_\nu(x)
+ * @f]
+ *
+ * @param __nu The order of the spherical Neumann function.
+ * @param __x The argument of the spherical Neumann function.
+ * @return The output spherical Neumann function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cyl_hankel_2(_Tp __nu, _Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_nan = __gnu_cxx::__quiet_NaN<_Tp>();
+ constexpr std::complex<_Tp> _S_i{0, 1};
+ if (__nu < _Tp{0})
+ return std::exp(_S_i * _S_pi * __nu) * __cyl_hankel_2(-__nu, __x);
+ else if (__isnan(__x))
+ return std::complex<_Tp>{_S_nan, _S_nan};
+ else if (__x < _Tp{0})
+ {
+ std::complex<_Tp> _J_n, _N_n, _Jp_n, _Np_n;
+ __cyl_bessel_jn_neg_arg(__nu, __x, _J_n, _N_n, _Jp_n, _Np_n);
+ return _J_n - _S_i * _N_n;
+ }
+ else
+ {
+ _Tp _J_n, _N_n, _Jp_n, _Np_n;
+ __cyl_bessel_jn(__nu, __x, _J_n, _N_n, _Jp_n, _Np_n);
+ return std::complex<_Tp>{_J_n, -_N_n};
+ }
+ }
+
+
+ /**
+ * @brief Compute the spherical Bessel @f$ j_n(x) @f$
+ * and Neumann @f$ n_n(x) @f$ functions and their first
+ * derivatives @f$ j_n(x) @f$ and @f$ n'_n(x) @f$
+ * respectively.
+ *
+ * @param __n The order of the spherical Bessel function.
+ * @param __x The argument of the spherical Bessel function.
+ * @param[out] __j_n The output spherical Bessel function.
+ * @param[out] __n_n The output spherical Neumann function.
+ * @param[out] __jp_n The output derivative of the spherical Bessel function.
+ * @param[out] __np_n The output derivative of the spherical Neumann function.
+ */
+ template<typename _Tp>
+ void
+ __sph_bessel_jn(unsigned int __n, _Tp __x,
+ _Tp& __j_n, _Tp& __n_n, _Tp& __jp_n, _Tp& __np_n)
+ {
+ const auto __nu = _Tp(__n + 0.5L);
+
+ _Tp _J_nu, _N_nu, _Jp_nu, _Np_nu;
+ __cyl_bessel_jn(__nu, __x, _J_nu, _N_nu, _Jp_nu, _Np_nu);
+
+ const auto __factor = __gnu_cxx::__math_constants<_Tp>::__root_pi_div_2
+ / std::sqrt(__x);
+
+ __j_n = __factor * _J_nu;
+ __n_n = __factor * _N_nu;
+ __jp_n = __factor * _Jp_nu - __j_n / (_Tp{2} * __x);
+ __np_n = __factor * _Np_nu - __n_n / (_Tp{2} * __x);
+
+ return;
+ }
+
+ /**
+ * Return the spherical Bessel functions and their derivatives
+ * of order @f$ \nu @f$ and argument @f$ x < 0 @f$.
+ */
+ template<typename _Tp>
+ void
+ __sph_bessel_jn_neg_arg(unsigned int __n, _Tp __x,
+ std::complex<_Tp>& __j_n, std::complex<_Tp>& __n_n,
+ std::complex<_Tp>& __jp_n, std::complex<_Tp>& __np_n)
+ {
+ if (__x >= _Tp{0})
+ std::__throw_domain_error(__N("__sph_bessel_jn_neg_arg: "
+ "non-negative argument"));
+ else
+ {
+ const auto __nu = _Tp(__n + 0.5L);
+ std::complex<_Tp> _J_nu, _N_nu, _Jp_nu, _Np_nu;
+ __cyl_bessel_jn_neg_arg(__nu, __x, _J_nu, _N_nu, _Jp_nu, _Np_nu);
+
+ const auto __factor
+ = __gnu_cxx::__math_constants<_Tp>::__root_pi_div_2
+ / std::sqrt(std::complex<_Tp>(__x));
+
+ __j_n = __factor * _J_nu;
+ __n_n = __factor * _N_nu;
+ __jp_n = __factor * _Jp_nu - __j_n / (_Tp{2} * __x);
+ __np_n = __factor * _Np_nu - __n_n / (_Tp{2} * __x);
+ }
+
+ return;
+ }
+
+
+ /**
+ * @brief Return the spherical Bessel function @f$ j_n(x) @f$ of order n
+ * and non-negative real argument @c x.
+ *
+ * The spherical Bessel function is defined by:
+ * @f[
+ * j_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} J_{n+1/2}(x)
+ * @f]
+ *
+ * @param __n The non-negative integral order
+ * @param __x The non-negative real argument
+ * @return The output spherical Bessel function.
+ */
+ template<typename _Tp>
+ _Tp
+ __sph_bessel(unsigned int __n, _Tp __x)
+ {
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__sph_bessel: bad argument"));
+ else if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x == _Tp{0})
+ {
+ if (__n == 0)
+ return _Tp{1};
+ else
+ return _Tp{0};
+ }
+ else
+ {
+ _Tp __j_n, __n_n, __jp_n, __np_n;
+ __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n);
+ return __j_n;
+ }
+ }
+
+
+ /**
+ * @brief Return the spherical Neumann function @f$ n_n(x) @f$ of order n
+ * and non-negative real argument @c x.
+ *
+ * The spherical Neumann function is defined by:
+ * @f[
+ * n_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} N_{n+1/2}(x)
+ * @f]
+ *
+ * @param __n The order of the spherical Neumann function.
+ * @param __x The argument of the spherical Neumann function.
+ * @return The output spherical Neumann function.
+ */
+ template<typename _Tp>
+ _Tp
+ __sph_neumann(unsigned int __n, _Tp __x)
+ {
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__sph_neumann: bad argument"));
+ else if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x == _Tp{0})
+ return -__gnu_cxx::__infinity<_Tp>();
+ else
+ {
+ _Tp __j_n, __n_n, __jp_n, __np_n;
+ __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n);
+ return __n_n;
+ }
+ }
+
+
+ /**
+ * @brief Return the spherical Hankel function of the first kind
+ * @f$ h^{(1)}_n(x) @f$.
+ *
+ * The spherical Hankel function of the first kind is defined by:
+ * @f[
+ * h^{(1)}_n(x) = j_n(x) + i n_n(x)
+ * @f]
+ *
+ * @param __n The order of the spherical Neumann function.
+ * @param __x The argument of the spherical Neumann function.
+ * @return The output spherical Neumann function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_hankel_1(unsigned int __n, _Tp __x)
+ {
+ constexpr std::complex<_Tp> _S_i{0, 1};
+ constexpr auto _S_nan = __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__isnan(__x))
+ return std::complex<_Tp>{_S_nan, _S_nan};
+ else if (__x < _Tp{0})
+ {
+ std::complex<_Tp> __j_n, __n_n, __jp_n, __np_n;
+ __sph_bessel_jn_neg_arg(__n, __x, __j_n, __n_n, __jp_n, __np_n);
+ return __j_n + _S_i * __n_n;
+ }
+ else
+ {
+ _Tp __j_n, __n_n, __jp_n, __np_n;
+ __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n);
+ return std::complex<_Tp>{__j_n, __n_n};
+ }
+ }
+
+
+ /**
+ * @brief Return the spherical Hankel function of the second kind
+ * @f$ h^{(2)}_n(x) @f$.
+ *
+ * The spherical Hankel function of the second kind is defined by:
+ * @f[
+ * h^{(2)}_n(x) = j_n(x) - i n_n(x)
+ * @f]
+ *
+ * @param __n The non-negative integral order
+ * @param __x The non-negative real argument
+ * @return The output spherical Neumann function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_hankel_2(unsigned int __n, _Tp __x)
+ {
+ constexpr std::complex<_Tp> _S_i{0, 1};
+ constexpr auto _S_nan = __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__isnan(__x))
+ return std::complex<_Tp>{_S_nan, _S_nan};
+ else if (__x < _Tp{0})
+ {
+ std::complex<_Tp> __j_n, __n_n, __jp_n, __np_n;
+ __sph_bessel_jn_neg_arg(__n, __x, __j_n, __n_n, __jp_n, __np_n);
+ return __j_n - _S_i * __n_n;
+ }
+ else
+ {
+ _Tp __j_n, __n_n, __jp_n, __np_n;
+ __sph_bessel_jn(__n, __x, __j_n, __n_n, __jp_n, __np_n);
+ return std::complex<_Tp>{__j_n, -__n_n};
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_BESSEL_TCC
diff --git a/libstdc++-v3/include/bits/sf_beta.tcc b/libstdc++-v3/include/bits/sf_beta.tcc
new file mode 100644
index 00000000000..9dc15391811
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_beta.tcc
@@ -0,0 +1,325 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_beta.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 6, pp. 253-266
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 213-216
+// (4) Gamma, Exploring Euler's Constant, Julian Havil,
+// Princeton, 2003.
+
+#ifndef _GLIBCXX_BITS_SF_BETA_TCC
+#define _GLIBCXX_BITS_SF_BETA_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Return the beta function: @f$ B(a,b) @f$.
+ *
+ * The beta function is defined by
+ * @f[
+ * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt
+ * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
+ * @f]
+ *
+ * @param __a The first argument of the beta function.
+ * @param __b The second argument of the beta function.
+ * @return The beta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __beta_gamma(_Tp __a, _Tp __b)
+ {
+
+ _Tp __bet;
+ if (__a > __b)
+ {
+ __bet = __gamma(__a) / __gamma(__a + __b);
+ __bet *= __gamma(__b);
+ }
+ else
+ {
+ __bet = __gamma(__b) / __gamma(__a + __b);
+ __bet *= __gamma(__a);
+ }
+
+ return __bet;
+ }
+
+ /**
+ * @brief Return the beta function @f$B(a,b)@f$ using
+ * the log gamma functions.
+ *
+ * The beta function is defined by
+ * @f[
+ * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt
+ * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
+ * @f]
+ *
+ * @param __a The first argument of the beta function.
+ * @param __b The second argument of the beta function.
+ * @return The beta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __beta_lgamma(_Tp __a, _Tp __b)
+ {
+ _Tp __bet = __log_gamma(__a)
+ + __log_gamma(__b)
+ - __log_gamma(__a + __b);
+ _Tp __sign = __log_gamma_sign(__a)
+ * __log_gamma_sign(__b)
+ * __log_gamma_sign(__a + __b);
+
+ if (__sign == _Tp{0})
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__bet > __gnu_cxx::__log_max<_Tp>())
+ return __sign * __gnu_cxx::__infinity<_Tp>();
+ else
+ return __sign * std::exp(__bet);
+ }
+
+
+ /**
+ * @brief Return the beta function @f$B(x,y)@f$ using
+ * the product form.
+ *
+ * The beta function is defined by
+ * @f[
+ * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt
+ * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
+ * @f]
+ * Here, we employ the product form:
+ * @f[
+ * B(a,b) = \frac{a + b}{a b} \prod_{k=1}^{\infty}
+ * \frac{1 + (a + b) / k}{(1 + a / k) (1 + b / k)}
+ * = \frac{a + b}{ab} \prod_{k=1}^{\infty}
+ * \left[1 - \frac{ab}{(a + k)(b + k)}\right]
+ * @f]
+ *
+ * @param __a The first argument of the beta function.
+ * @param __b The second argument of the beta function.
+ * @return The beta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __beta_product(_Tp __a, _Tp __b)
+ {
+ const auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ const auto __ab = __a * __b;
+ auto __bet = (__a + __b) / __ab;
+
+ const unsigned int _S_max_iter = 100000; // Could need 1 / sqrt(_S_eps)
+
+ const auto __apk = __a, __apb = __b;
+ for (unsigned int __k = 1; __k < _S_max_iter; ++__k)
+ {
+ auto __term = _Tp{1} - __ab / (++__apk) / (++__apb);
+ __bet *= __term;
+ if (std::abs(_Tp{1} - __term) < _S_eps)
+ break;
+ }
+
+ return __bet;
+ }
+
+
+ /**
+ * @brief Return the beta function @f$ B(a,b) @f$.
+ *
+ * The beta function is defined by
+ * @f[
+ * B(a,b) = \int_0^1 t^{a - 1} (1 - t)^{b - 1} dt
+ * = \frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}
+ * @f]
+ *
+ * @param __a The first argument of the beta function.
+ * @param __b The second argument of the beta function.
+ * @return The beta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __beta(_Tp __a, _Tp __b)
+ {
+ if (__isnan(__a) || __isnan(__b))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ return __beta_lgamma(__a, __b);
+ }
+
+
+ /**
+ * Return the regularized incomplete beta function, @f$ I_x(a,b) @f$,
+ * of arguments @c a, @c b, and @c x.
+ *
+ *
+ * @param __a The first parameter
+ * @param __b The second parameter
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __ibeta_cont_frac(_Tp __a, _Tp __b, _Tp __x)
+ {
+ constexpr unsigned int _S_itmax = 100;
+ constexpr auto _S_fpmin = 1000 * __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+
+ auto __apb = __a + __b;
+ auto __ap1 = __a + _Tp{1};
+ auto __am1 = __a - _Tp{1};
+ auto __c = _Tp{1};
+ auto __d = _Tp{1} - __apb * __x / __ap1;
+ if (std::abs(__d) < _S_fpmin)
+ __d = _S_fpmin;
+ __d = _Tp{1} / __d;
+ auto __h = __d;
+ for (unsigned int __m = 1; __m <= _S_itmax; ++__m)
+ {
+ auto __m2 = 2 * __m;
+
+ // Even step of the recurrence.
+ auto __aa = _Tp(__m) * (__b - _Tp(__m)) * __x
+ / ((__am1 + _Tp(__m2)) * (__a + _Tp(__m2)));
+ __d = _Tp{1} + __aa * __d;
+ if (std::abs(__d) < _S_fpmin)
+ __d = _S_fpmin;
+ __c = _Tp{1} + __aa / __c;
+ if (std::abs(__c) < _S_fpmin)
+ __c = _S_fpmin;
+ __d = _Tp{1} / __d;
+ __h *= __d * __c;
+
+ // Odd step of the recurrence.
+ __aa = -(__a + _Tp(__m)) * (__apb + _Tp(__m)) * __x
+ / ((__a + _Tp(__m2)) * (__ap1 + _Tp(__m2)));
+ __d = _Tp{1} + __aa * __d;
+ if (std::abs(__d) < _S_fpmin)
+ __d = _S_fpmin;
+ __c = _Tp{1} + __aa / __c;
+ if (std::abs(__c) < _S_fpmin)
+ __c = _S_fpmin;
+ __d = _Tp{1} / __d;
+ auto __del = __d * __c;
+ __h *= __del;
+
+ if (std::abs(__del - _Tp{1}) < _S_eps)
+ return __h;
+ }
+ std::__throw_runtime_error(__N("__ibeta_cont_frac: "
+ "continued fractions failed to converge"));
+ }
+
+ /**
+ * Return the regularized incomplete beta function, @f$ I_x(a,b) @f$,
+ * of arguments @c a, @c b, and @c x.
+ *
+ * The regularized incomplete beta function is defined by:
+ * @f[
+ * I_x(a,b) = \frac{B_x(a,b)}{B(a,b)}
+ * @f]
+ * where
+ * @f[
+ * B_x(a,b) = \int_0^x t^{a - 1} (1 - t)^{b - 1} dt
+ * @f]
+ * is the non-regularized beta function and @f$ B(a,b) @f$
+ * is the usual beta function.
+ *
+ * @param __a The first parameter
+ * @param __b The second parameter
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __beta_inc(_Tp __a, _Tp __b, _Tp __x)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+
+ if (__x < _Tp{0} || __x > _Tp{1})
+ std::__throw_domain_error(__N("__beta_inc: argument out of range"));
+ else if (__isnan(__x) || __isnan(__a) || __isnan(__b))
+ return _S_NaN;
+ else if (__a == _Tp{0} && __b == _Tp{0})
+ return _S_NaN;
+ else if (__a == _Tp{0})
+ {
+ if (__x > _Tp{0})
+ return _Tp{1};
+ else
+ return _Tp{0};
+ }
+ else if (__b == _Tp{0})
+ {
+ if (__x < _Tp{1})
+ return _Tp{0};
+ else
+ return _Tp{1};
+ }
+ else
+ {
+ auto __sign = __log_gamma_sign(__a + __b)
+ * __log_gamma_sign(__a) * __log_gamma_sign(__b);
+ auto __fact = __sign * std::exp(__log_gamma(__a + __b)
+ - __log_gamma(__a) - __log_gamma(__b)
+ + __a * std::log(__x) + __b * std::log(_Tp{1} - __x));
+
+ if (__x < (__a + _Tp{1}) / (__a + __b + _Tp{2}))
+ return __fact * __ibeta_cont_frac(__a, __b, __x) / __a;
+ else
+ return _Tp{1}
+ - __fact * __ibeta_cont_frac(__b, __a, _Tp{1} - __x) / __b;
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // __GLIBCXX_BITS_SF_BETA_TCC
diff --git a/libstdc++-v3/include/bits/sf_cardinal.tcc b/libstdc++-v3/include/bits/sf_cardinal.tcc
new file mode 100644
index 00000000000..20c58bd423d
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_cardinal.tcc
@@ -0,0 +1,133 @@
+// TR29124 math special functions -*- C++ -*-
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_airy.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_SF_CARDINAL_TCC
+#define _GLIBCXX_BITS_SF_CARDINAL_TCC 1
+
+#pragma GCC system_header
+
+#include <bits/complex_util.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Return the sinus cardinal function
+ * @f[
+ * sinc(x) = \frac{\sin(x)}{x}
+ * @f]
+ */
+ template<typename _Tp>
+ __gnu_cxx::__promote_fp_t<_Tp>
+ __sinc(_Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (std::abs(__x) == __gnu_cxx::__infinity<_Tp>())
+ return _Tp{0};
+ else if (std::abs(__x) < __gnu_cxx::__sqrt_min<_Tp>())
+ return _Tp{1} - __x * __x / _Tp{6};
+ else
+ return std::sin(__x) / __x;
+ }
+
+ /**
+ * @brief Return the reperiodized sinus cardinal function
+ * @f[
+ * sinc_\pi(x) = \frac{\sin(\pi x)}{\pi x}
+ * @f]
+ */
+ template<typename _Tp>
+ __gnu_cxx::__promote_fp_t<_Tp>
+ __sinc_pi(_Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (std::abs(__x) == __gnu_cxx::__infinity<_Tp>())
+ return _Tp{0};
+ else
+ {
+ auto __arg = _S_pi * __x;
+ if (std::abs(__arg) < _Tp{4} * __gnu_cxx::__sqrt_min<_Tp>())
+ return _Tp{1} - __arg * __arg / _Tp{6};
+ else
+ return __sin_pi(__x) / __arg;
+ }
+ }
+
+ /**
+ * @brief Return the hyperbolic sinus cardinal function
+ * @f[
+ * sinhc(x) = \frac{\sinh(x)}{x}
+ * @f]
+ */
+ template<typename _Tp>
+ __gnu_cxx::__promote_fp_t<_Tp>
+ __sinhc(_Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (std::abs(__x) < _Tp{4} * __gnu_cxx::__sqrt_min<_Tp>())
+ return _Tp{1} + __x * __x / _Tp{6};
+ else
+ return std::sinh(__x) / __x;
+ }
+
+ /**
+ * @brief Return the reperiodized hyperbolic sinus cardinal function
+ * @f[
+ * sinhc_\pi(x) = \frac{\sinh(\pi x)}{\pi x}
+ * @f]
+ */
+ template<typename _Tp>
+ __gnu_cxx::__promote_fp_t<_Tp>
+ __sinhc_pi(_Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ {
+ auto __arg = _S_pi * __x;
+ if (std::abs(__arg) < _Tp{4} * __gnu_cxx::__sqrt_min<_Tp>())
+ return _Tp{1} + __arg * __arg / _Tp{6};
+ else
+ return __sinh_pi(__x) / __arg;
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_CARDINAL_TCC
diff --git a/libstdc++-v3/include/bits/sf_chebyshev.tcc b/libstdc++-v3/include/bits/sf_chebyshev.tcc
new file mode 100644
index 00000000000..a0e3bc0fe26
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_chebyshev.tcc
@@ -0,0 +1,193 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_chebyshev.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_CHEBYSHEV_TCC
+#define _GLIBCXX_BITS_SF_CHEBYSHEV_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Return a Chebyshev polynomial of non-negative order @f$ n @f$
+ * and real argument @f$ x @f$ by the recursion
+ * @f[
+ * C_n(x) = 2xC_{n-1} - C_{n-2}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ * @param _C0 The value of the zeroth-order Chebyshev polynomial at @f$ x @f$
+ * @param _C1 The value of the first-order Chebyshev polynomial at @f$ x @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __chebyshev_recur(unsigned int __n, _Tp __x, _Tp _C0, _Tp _C1)
+ {
+ auto _Ck = _Tp{0};
+ for (unsigned int __j = 1; __j < __n; ++__j)
+ {
+ _Ck = _Tp{2} * __x * _C1 - _C0;
+ _C0 = _C1;
+ _C1 = _Ck;
+ }
+ return _Ck;
+ }
+
+ /**
+ * Return the Chebyshev polynomial of the first kind @f$ T_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the first kind is defined by:
+ * @f[
+ * T_n(x) = \cos(n \theta)
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __chebyshev_t(unsigned int __n, _Tp __x)
+ {
+ auto _T0 = _Tp{1};
+ if (__n == 0)
+ return _T0;
+
+ auto _T1 = __x;
+ if (__n == 1)
+ return _T1;
+
+ return __chebyshev_recur(__n, __x, _T0, _T1);
+ }
+
+ /**
+ * Return the Chebyshev polynomial of the second kind @f$ U_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the second kind is defined by:
+ * @f[
+ * U_n(x) = \frac{\sin \left[(n+1)\theta \right]}{\sin(\theta)}
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __chebyshev_u(unsigned int __n, _Tp __x)
+ {
+ auto _U0 = _Tp{1};
+ if (__n == 0)
+ return _U0;
+
+ auto _U1 = _Tp{2} * __x;
+ if (__n == 1)
+ return _U1;
+
+ return __chebyshev_recur(__n, __x, _U0, _U1);
+ }
+
+ /**
+ * Return the Chebyshev polynomial of the third kind @f$ V_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the third kind is defined by:
+ * @f[
+ * V_n(x) = \frac{\cos \left[ \left(n+\frac{1}{2}\right)\theta \right]}
+ * {\cos \left(\frac{\theta}{2}\right)}
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __chebyshev_v(unsigned int __n, _Tp __x)
+ {
+ auto _V0 = _Tp{1};
+ if (__n == 0)
+ return _V0;
+
+ auto _V1 = _Tp{2} * __x - _Tp{1};
+ if (__n == 1)
+ return _V1;
+
+ return __chebyshev_recur(__n, __x, _V0, _V1);
+ }
+
+ /**
+ * Return the Chebyshev polynomial of the fourth kind @f$ W_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the fourth kind is defined by:
+ * @f[
+ * W_n(x) = \frac{\sin \left[ \left(n+\frac{1}{2}\right)\theta \right]}
+ * {\sin \left(\frac{\theta}{2}\right)}
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __chebyshev_w(unsigned int __n, _Tp __x)
+ {
+ auto _W0 = _Tp{1};
+ if (__n == 0)
+ return _W0;
+
+ auto _W1 = _Tp{2} * __x + _Tp{1};
+ if (__n == 1)
+ return _W1;
+
+ return __chebyshev_recur(__n, __x, _W0, _W1);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+}
+
+#endif // _GLIBCXX_BITS_SF_CHEBYSHEV_TCC
diff --git a/libstdc++-v3/include/bits/sf_dawson.tcc b/libstdc++-v3/include/bits/sf_dawson.tcc
new file mode 100644
index 00000000000..865b6340381
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_dawson.tcc
@@ -0,0 +1,252 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_dawson.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_DAWSON_TCC
+#define _GLIBCXX_BITS_SF_DAWSON_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Compute the Dawson integral using the series expansion.
+ */
+ template<typename _Tp>
+ _Tp
+ __dawson_series(_Tp __x)
+ {
+ auto __x2 = __x * __x;
+ _Tp __sum(1);
+ auto __k = 1;
+ _Tp __term(1);
+ while (true)
+ {
+ __term *= -(_Tp{2} / _Tp(2 * __k + 1)) * __x2;
+ __sum += __term;
+ ++__k;
+ if (std::abs(__term) < __gnu_cxx::__epsilon<_Tp>())
+ break;
+ }
+ return __x * __sum;
+ }
+
+
+ /**
+ * @brief Compute the Dawson integral using a sampling theorem
+ * representation.
+ */
+ template<typename _Tp>
+ _Tp
+ __dawson_cont_frac(_Tp __x)
+ {
+ constexpr auto _S_1_sqrtpi{0.5641895835477562869480794515607726L};
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_H{0.2L};
+ /// @todo this needs some compile-time construction!
+ constexpr auto _S_n_max = 100;
+ // The array below is produced by the following snippet:
+ //static _Tp _S_c[_S_n_max + 1];
+ //static auto __init = false;
+ //if (! __init)
+ // {
+ // __init = true;
+ // for (unsigned int __i = 0; __i < _S_n_max; ++__i)
+ // {
+ // auto __y = _Tp(2 * __i + 1) * _S_H;
+ // _S_c[__i] = std::exp(-__y * __y);
+ // }
+ // }
+ constexpr _Tp
+ _S_c[_S_n_max]
+ {
+ 9.60789439152323209438169001326016e-001L,
+ 6.97676326071031057202321464142399e-001L,
+ 3.67879441171442321585552377928190e-001L,
+ 1.40858420921044996140488229803164e-001L,
+ 3.91638950989870737363317023736605e-002L,
+ 7.90705405159344049259833141481939e-003L,
+ 1.15922917390459114979971194637303e-003L,
+ 1.23409804086679549467531425748256e-004L,
+ 9.54016287307923483860084888844751e-006L,
+ 5.35534780279310615538302709570342e-007L,
+ 2.18295779512547920804008261508151e-008L,
+ 6.46143177310610898572394840226245e-010L,
+ 1.38879438649640205852509269274927e-011L,
+ 2.16756888261896194059418783466426e-013L,
+ 2.45659536879214445146530280703707e-015L,
+ 2.02171584869534202501301885439244e-017L,
+ 1.20818201989997357022759799713705e-019L,
+ 5.24288566336346393020847897060042e-022L,
+ 1.65209178231426859061623229756950e-024L,
+ 3.78027784477608462898406047061928e-027L,
+ 6.28114814760598920398901871648105e-030L,
+ 7.57844526761838263084531617905181e-033L,
+ 6.63967719958073438612478157054279e-036L,
+ 4.22415240620620042745713680530106e-039L,
+ 1.95145238029537774304135768095865e-042L,
+ 6.54639343720499329608790652000114e-046L,
+ 1.59467436689686986494851454027059e-049L,
+ 2.82077008846013539186713516083226e-053L,
+ 3.62317350508722347934110715686963e-057L,
+ 3.37937463327921536912579153668807e-061L,
+ 2.28880774041243919016662861963690e-065L,
+ 1.12566212332063150824140805397885e-069L,
+ 4.02006021574335522941543113897424e-074L,
+ 1.04251624107215374431522714856879e-078L,
+ 1.96317432844445950021408646503182e-083L,
+ 2.68448306782610758445887030316137e-088L,
+ 2.66555861809636445675211579279178e-093L,
+ 1.92194772782384905675933472433427e-098L,
+ 1.00628424189764403921411803642026e-103L,
+ 3.82582884899196609344187870411088e-109L,
+ 1.05622433516056737024713529752639e-114L,
+ 2.11744708802352680125417726491892e-120L,
+ 3.08244069694909838852521233803938e-126L,
+ 3.25838695945952019907932932091244e-132L,
+ 2.50113050879336730108217682794430e-138L,
+ 1.39410605788744688310664420089858e-144L,
+ 5.64262307776046700110508712234927e-151L,
+ 1.65841047768114512490788414841255e-157L,
+ 3.53939302656965650656012371162244e-164L,
+ 5.48518544141128941971605912419011e-171L,
+ 6.17276302016755883677739891028503e-178L,
+ 5.04421581617080666599125850865623e-185L,
+ 2.99318445226019269570089318605868e-192L,
+ 1.28973078889439493438423594343846e-199L,
+ 4.03543559387410258104874489257167e-207L,
+ 9.16869527015865195249604938556767e-215L,
+ 1.51269169695184528724035028896828e-222L,
+ 1.81225402579399230372761095817594e-230L,
+ 1.57657083780365412281042949520717e-238L,
+ 9.95941136080552759796029421444741e-247L,
+ 4.56856300016410640187636545957934e-255L,
+ 1.52177810552438350226292055756678e-263L,
+ 3.68085585480180054048750621026265e-272L,
+ 6.46505249021408739998493794189369e-281L,
+ 8.24557727130540112516494412700777e-290L,
+ 7.63652613360855025076250919098713e-299L,
+ 5.13566142435820732098775884762237e-308L,
+ 2.50797205186097588307523168005178e-317L,
+ 8.89354212166825988685748389268173e-327L,
+ 2.29009029289207343509554502505914e-336L,
+ 4.28209414411196708972357973309330e-346L,
+ 5.81414130368226737065152548476486e-356L,
+ 5.73245586032578521491483688909045e-366L,
+ 4.10413485100712456782307385028474e-376L,
+ 2.13367510791650599201905024202141e-386L,
+ 8.05491060616403355837454851476424e-397L,
+ 2.20810095242489485189514149199835e-407L,
+ 4.39544541351233950364876366113300e-418L,
+ 6.35349397868382398176675869724792e-429L,
+ 6.66880655999041479890323913548341e-440L,
+ 5.08287446085302533267012977225643e-451L,
+ 2.81317281842290615009371958753732e-462L,
+ 1.13060058895745543739097618631818e-473L,
+ 3.29949722931472550915694191808876e-485L,
+ 6.99217186328695864989695230548821e-497L,
+ 1.07597501474761095153971136302831e-508L,
+ 1.20231438909832022259340851931311e-520L,
+ 9.75572766967242798560310989969135e-533L,
+ 5.74813630703326414824802394458614e-545L,
+ 2.45934928751589391095933749522896e-557L,
+ 7.64080532462818847220429025437078e-570L,
+ 1.72378787535648674299867938844160e-582L,
+ 2.82393225820965430848685848068497e-595L,
+ 3.35931317332728269858168144943446e-608L,
+ 2.90183341500822904994175717131364e-621L,
+ 1.82020468349683678875494180471718e-634L,
+ 8.29074854613655162715131076161845e-648L,
+ 2.74216147544224226066985666394109e-661L,
+ 6.58594459239068165700389626561349e-675L,
+ 1.14860019578505635531744602406704e-688L
+ };
+
+ auto __xx = std::abs(__x);
+ auto __n0 = 2 * static_cast<int>(_Tp{0.5L} + _Tp{0.5L} * __xx / _S_H);
+ auto __xp = __xx - __n0 * _S_H;
+ auto __e1 = std::exp(_Tp{2} * __xp * _S_H);
+ auto __e2 = __e1 * __e1;
+ auto __d1 = _Tp(__n0) + _Tp{1};
+ auto __d2 = __d1 - _Tp{2};
+ auto __sum = _Tp{0};
+ for (unsigned int __i = 0; __i < _S_n_max; ++__i)
+ {
+ auto __term = _S_c[__i] * (__e1 / __d1 + _Tp{1} / (__d2 * __e1));
+ __sum += __term;
+ if (std::abs(__term / __sum) < _S_eps)
+ break;
+ __d1 += _Tp{2};
+ __d2 -= _Tp{2};
+ __e1 *= __e2;
+ }
+ return std::copysign(std::exp(-__xp * __xp), __x)
+ * __sum * _S_1_sqrtpi;
+ }
+
+ /**
+ * @brief Return the Dawson integral, @f$ F(x) @f$, for real argument @c x.
+ *
+ * The Dawson integral is defined by:
+ * @f[
+ * F(x) = e^{-x^2} \int_0^x e^{y^2} dy
+ * @f]
+ * and it's derivative is:
+ * @f[
+ * F'(x) = 1 - 2xF(x)
+ * @f]
+ *
+ * @param __x The argument @f$ -inf < x < inf @f$.
+ */
+ template<typename _Tp>
+ _Tp
+ __dawson(_Tp __x)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+ constexpr _Tp _S_x_min{0.2L};
+
+ if (__isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__x) < _S_x_min)
+ return __dawson_series(__x);
+ else
+ return __dawson_cont_frac(__x);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+}
+
+#endif // _GLIBCXX_BITS_SF_DAWSON_TCC
diff --git a/libstdc++-v3/include/bits/sf_distributions.tcc b/libstdc++-v3/include/bits/sf_distributions.tcc
new file mode 100644
index 00000000000..7e45b03d8b8
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_distributions.tcc
@@ -0,0 +1,588 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_distributions.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 6, pp. 253-266
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 213-216
+// (4) Gamma, Exploring Euler's Constant, Julian Havil,
+// Princeton, 2003.
+
+#ifndef _GLIBCXX_BITS_SF_DISTRIBUTIONS_TCC
+#define _GLIBCXX_BITS_SF_DISTRIBUTIONS_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Return the chi-squared propability function.
+ * This returns the probability that the observed chi-squared for a correct model
+ * is less than the value @f$ \chi^2 @f$.
+ *
+ * The chi-squared propability function is related
+ * to the normalized lower incomplete gamma function:
+ * @f[
+ * P(\chi^2|\nu) = \Gamma_P(\frac{\nu}{2}, \frac{\chi^2}{2})
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __chi_squared_pdf(_Tp __chi2, unsigned int __nu)
+ {
+ if (__isnan(__chi2))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__chi2 < _Tp{0})
+ std::__throw_domain_error(__N("__chi_squared_cdf: "
+ "chi-squared is negative"));
+ else
+ return __pgamma(_Tp(__nu) / _Tp{2}, __chi2 / _Tp{2});
+ }
+
+ /**
+ * @brief Return the complementary chi-squared propability function.
+ * This returns the probability that the observed chi-squared for a correct model
+ * is greater than the value @f$ \chi^2 @f$.
+ *
+ * The complementary chi-squared propability function is related
+ * to the normalized upper incomplete gamma function:
+ * @f[
+ * Q(\chi^2|\nu) = \Gamma_Q(\frac{\nu}{2}, \frac{\chi^2}{2})
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __chi_squared_pdfc(_Tp __chi2, unsigned int __nu)
+ {
+ if (__isnan(__chi2) || __isnan(__nu))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__chi2 < _Tp{0})
+ std::__throw_domain_error(__N("__chi_square_pdfc: "
+ "chi-squared is negative"));
+ else
+ return __qgamma(_Tp(__nu) / _Tp{2}, __chi2 / _Tp{2});
+ }
+
+ /**
+ * @brief Return the gamma propability distribution function.
+ *
+ * The formula for the gamma probability density function is:
+ * @f[
+ * \Gamma(x|\alpha,\beta) = \frac{1}{\beta\Gamma(\alpha)}
+ * (x/\beta)^{\alpha - 1} e^{-x/\beta}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __gamma_pdf(_Tp __alpha, _Tp __beta, _Tp __x)
+ {
+ if (__isnan(__alpha) || __isnan(__beta) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return std::pow(__beta, __alpha) * std::pow(__x, __alpha - _Tp{1})
+ * std::exp(__beta * __x) / __gamma(__alpha);
+ }
+
+ /**
+ * @brief Return the gamma cumulative propability distribution function.
+ *
+ * The formula for the gamma probability density function is:
+ * @f[
+ * \Gamma(x|\alpha,\beta) = \frac{1}{\beta\Gamma(\alpha)}
+ * (x/\beta)^{\alpha - 1} e^{-x/\beta}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __gamma_cdf(_Tp __alpha, _Tp __beta, _Tp __x)
+ {
+ if (__isnan(__alpha) || __isnan(__beta) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return __tgamma_lower(__alpha, __beta * __x)
+ / __gamma(__alpha);
+ }
+
+ /**
+ * @brief Return the gamma complementary cumulative propability
+ * distribution function.
+ *
+ * The formula for the gamma probability density function is:
+ * @f[
+ * \Gamma(x|\alpha,\beta) = \frac{1}{\beta\Gamma(\alpha)}
+ * (x/\beta)^{\alpha - 1} e^{-x/\beta}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __gamma_cdfc(_Tp __alpha, _Tp __beta, _Tp __x)
+ {
+ if (__isnan(__alpha) || __isnan(__beta) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return __tgamma(__alpha, __beta * __x)
+ / __gamma(__alpha);
+ }
+
+
+ /**
+ * @brief Return the Rice probability density function.
+ *
+ * The formula for the Rice probability density function is
+ * @f[
+ * p(x|\nu,\sigma) = \frac{x}{\sigma^2}
+ * \exp\left(-\frac{x^2+\nu^2}{2\sigma^2}\right)
+ * I_0\left(\frac{x \nu}{\sigma^2}\right)
+ * @f]
+ * where @f$I_0(x)@f$ is the modified Bessel function of the first kind
+ * of order 0 and @f$\nu >= 0@f$ and @f$\sigma > 0@f$.
+ */
+ template<typename _Tp>
+ _Tp
+ __rice_pdf(_Tp __nu, _Tp __sigma, _Tp __x)
+ {
+ if (__isnan(__nu) || __isnan(__sigma))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ {
+ auto __sigma2 = __sigma * __sigma;
+ return (__x / __sigma2)
+ * std::exp(-(__x * __x + __nu * __nu) / (_Tp{2} * __sigma2))
+ * __cyl_bessel_i(_Tp{0}, (__x * __nu) / (__sigma2));
+ }
+ }
+
+
+ /**
+ * @brief Return the normal probability density function.
+ *
+ * The formula for the normal probability density function is
+ * @f[
+ * f(x|\mu,\sigma) = \frac{e^{(x-\mu)^2/2\sigma^2}}{\sigma\sqrt{2\pi}}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __normal_pdf(_Tp __nu, _Tp __sigma, _Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ constexpr auto _S_sqrt_pi = __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ constexpr auto _S_sqrt_2pi = _S_sqrt_2 * _S_sqrt_pi;
+ if (__isnan(__nu) || __isnan(__sigma))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ {
+ __x -= __nu;
+ __x /= __sigma;
+ __x *= __x;
+ __x /= _Tp{2};
+ return std::exp(-(__x)) / (__sigma * _S_sqrt_2pi);
+ }
+ }
+
+ /**
+ * @brief Return the normal cumulative probability density function.
+ *
+ * The formula for the normal cumulative probability density function is
+ * @f[
+ * F(x|\mu,\sigma)
+ * = \frac{1}{2}\left[ 1-erf(\frac{x-\mu}{\sqrt{2}\sigma}) \right]
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __normal_cdf(_Tp __mu, _Tp __sigma, _Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ if (__isnan(__mu) || __isnan(__sigma) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return _Tp{0.5L}
+ * (_Tp{1} + std::erf((__x - __mu) / (__sigma * _S_sqrt_2)));
+ }
+
+
+ /**
+ * @brief Return the lognormal probability density function.
+ *
+ * The formula for the lognormal probability density function is
+ * @f[
+ * f(x|\mu,\sigma) = \frac{e^{(\ln{x}-\mu)^2/2\sigma^2}}{\sigma\sqrt{2\pi}}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __lognormal_pdf(_Tp __nu, _Tp __sigma, _Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ constexpr auto _S_sqrt_pi = __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ constexpr auto _S_sqrt_2pi = _S_sqrt_2 * _S_sqrt_pi;
+ if (__isnan(__nu) || __isnan(__sigma))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ {
+ __x -= __nu;
+ __x /= __sigma;
+ __x *= __x;
+ __x /= _Tp{2};
+ return std::exp(-(std::log(__x))) / (__sigma * _S_sqrt_2pi);
+ }
+ }
+
+ /**
+ * @brief Return the lognormal cumulative probability density function.
+ *
+ * The formula for the lognormal cumulative probability density function is
+ * @f[
+ * F(x|\mu,\sigma)
+ * = \frac{1}{2}\left[ 1-erf(\frac{\ln{x}-\mu}{\sqrt{2}\sigma}) \right]
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __lognormal_cdf(_Tp __mu, _Tp __sigma, _Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ if (__isnan(__mu) || __isnan(__sigma) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return _Tp{0.5L} * (_Tp{1} + std::erf((std::log(__x) - __mu)
+ / (__sigma * _S_sqrt_2)));
+ }
+
+
+ /**
+ * @brief Return the exponential probability density function.
+ *
+ * The formula for the exponential probability density function is
+ * @f[
+ * f(x|\lambda) = \lambda e^{-\lambda x} \mbox{ for } x >= 0
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __exponential_pdf(_Tp __lambda, _Tp __x)
+ {
+ if (__isnan(__lambda) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return _Tp{0};
+ else
+ return __lambda * std::exp(-__lambda * __x);
+ }
+
+ /**
+ * @brief Return the exponential cumulative probability density function.
+ *
+ * The formula for the exponential cumulative probability density function is
+ * @f[
+ * F(x|\lambda) = 1 - e^{-\lambda x} \mbox{ for } x >= 0
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __exponential_cdf(_Tp __lambda, _Tp __x)
+ {
+ if (__isnan(__lambda) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return _Tp{0};
+ else
+ return _Tp{1} - std::exp(-__lambda * __x);
+ }
+
+
+ /**
+ * @brief Return the Weibull probability density function.
+ *
+ * The formula for the Weibull probability density function is
+ * @f[
+ * f(x | a, b) = \frac{a}{b}
+ * \left(\frac{x}{b} \right)^{a-1}
+ * \exp{-\left(\frac{x}{b}\right)^a}
+ * \mbox{ for } x >= 0
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __weibull_pdf(_Tp __a, _Tp __b, _Tp __x)
+ {
+ if (__isnan(__a) || __isnan(__b) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return _Tp{0};
+ else
+ return (__a / __b) * std::pow(__x / __b, __a - _Tp{1})
+ * std::exp(-std::pow(__x / __b, __a));
+ }
+
+ /**
+ * @brief Return the Weibull cumulative probability density function.
+ *
+ * The formula for the Weibull cumulative probability density function is
+ * @f[
+ * F(x|\lambda) = 1 - e^{-(x / b)^a} \mbox{ for } x >= 0
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __weibull_cdf(_Tp __a, _Tp __b, _Tp __x)
+ {
+ if (__isnan(__a) || __isnan(__b) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return _Tp{0};
+ else
+ return _Tp{1} - std::exp(-std::pow(__x / __b, __a));
+ }
+
+ /**
+ * @brief Return the Students T probability function.
+ *
+ * The students T propability function is related to the incomplete beta function:
+ * @f[
+ * A(t|\nu) = 1 - I_{\frac{\nu}{\nu + t^2}}(\frac{\nu}{2}, \frac{1}{2})
+ * A(t|\nu) =
+ * @f]
+ *
+ * @param __t
+ * @param __nu
+ */
+ template<typename _Tp>
+ _Tp
+ __student_t_cdf(_Tp __t, unsigned int __nu)
+ {
+ if (__isnan(__t))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return __beta_inc(_Tp{0.5L}, _Tp(__nu) / _Tp{2},
+ __t * __t / (_Tp(__nu) + __t * __t));
+ }
+
+ /**
+ * @brief Return the complement of the Students T probability function.
+ *
+ * The complement of the students T propability function is:
+ * @f[
+ * A_c(t|\nu) = I_{\frac{\nu}{\nu + t^2}}(\frac{\nu}{2}, \frac{1}{2})
+ * = 1 - A(t|\nu)
+ * @f]
+ *
+ * @param __t
+ * @param __nu
+ */
+ template<typename _Tp>
+ _Tp
+ __student_t_cdfc(_Tp __t, unsigned int __nu)
+ {
+ if (__isnan(__t))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return __beta_inc(_Tp(__nu) / _Tp{2}, _Tp{0.5L},
+ _Tp(__nu) / (_Tp(__nu) + __t * __t));
+ }
+
+ /**
+ * @brief Return the F-distribution propability function.
+ * This returns the probability that the observed chi-square for a correct model
+ * exceeds the value @f$ \chi^2 @f$.
+ *
+ * The f-distribution propability function is related to the incomplete beta function:
+ * @f[
+ * Q(F|\nu_1, \nu_2) = I_{\frac{\nu_2}{\nu_2 + \nu_1 F}}
+ * (\frac{\nu_2}{2}, \frac{\nu_1}{2})
+ * @f]
+ *
+ * @param __nu1 The number of degrees of freedom of sample 1
+ * @param __nu2 The number of degrees of freedom of sample 2
+ * @param __F The F statistic
+ */
+ template<typename _Tp>
+ _Tp
+ __fisher_f_cdf(_Tp __F, unsigned int __nu1, unsigned int __nu2)
+ {
+ if (__isnan(__F))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__F < _Tp{0})
+ std::__throw_domain_error(__N("__f_cdf: F is negative"));
+ else
+ return __beta_inc(_Tp(__nu2) / _Tp{2}, _Tp(__nu1) / _Tp{2},
+ _Tp(__nu2) / (_Tp(__nu2) + __nu1 * __F));
+ }
+
+ /**
+ * @brief Return the F-distribution propability function.
+ * This returns the probability that the observed chi-square for a correct model
+ * exceeds the value @f$ \chi^2 @f$.
+ *
+ * The f-distribution propability function is related to the incomplete beta function:
+ * @f[
+ * P(F|\nu_1, \nu_2) = 1 - I_{\frac{\nu_2}{\nu_2 + \nu_1 F}}
+ * (\frac{\nu_2}{2}, \frac{\nu_1}{2})
+ * = 1 - Q(F|\nu_1, \nu_2)
+ * @f]
+ *
+ * @param __F
+ * @param __nu1
+ * @param __nu2
+ */
+ template<typename _Tp>
+ _Tp
+ __fisher_f_cdfc(_Tp __F, unsigned int __nu1, unsigned int __nu2)
+ {
+ if (__isnan(__F))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__F < _Tp{0})
+ std::__throw_domain_error(__N("__f_cdfc: F is negative"));
+ else
+ return __beta_inc(_Tp(__nu1) / _Tp{2}, _Tp(__nu2) / _Tp{2},
+ __nu1 * __F / (_Tp(__nu2) + __nu1 * __F));
+ }
+
+ /**
+ * @brief Return the binomial probability mass function.
+ *
+ * The binomial cumulative distribution function is related
+ * to the incomplete beta function:
+ * @f[
+ * f(k|n,p) = \binom{n}{k}p^k(1-p)^{n-k}
+ * @f]
+ *
+ * @param __p
+ * @param __n
+ * @param __k
+ */
+ template<typename _Tp>
+ _Tp
+ __binomial_pdf(_Tp __p, unsigned int __n, unsigned int __k)
+ {
+ if (__isnan(__p))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__p < _Tp{0} || __p > _Tp{1})
+ std::__throw_domain_error(__N("__binomial_cdf: "
+ "probability is out of range"));
+ else if (__k > __n)
+ return _Tp{0};
+ else if (__n == 0)
+ return _Tp{1};
+ else if (__k == 0)
+ return std::pow(_Tp{1} - __p, __n);
+ else if (__k == __n)
+ return std::pow(__p, __n);
+ else
+ return __bincoef<_Tp>(__n, __k)
+ * std::pow(__p, __k)
+ * std::pow(_Tp{1} - __p, __n - __k);
+ }
+
+
+ /**
+ * @brief Return the binomial cumulative distribution function.
+ *
+ * The binomial cumulative distribution function is related
+ * to the incomplete beta function:
+ * @f[
+ * P(k|n,p) = I_p(k, n-k+1)
+ * @f]
+ *
+ * @param __p
+ * @param __n
+ * @param __k
+ */
+ template<typename _Tp>
+ _Tp
+ __binomial_cdf(_Tp __p, unsigned int __n, unsigned int __k)
+ {
+ if (__isnan(__p))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__p < _Tp{0} || __p > _Tp{1})
+ std::__throw_domain_error(__N("__binomial_cdf: "
+ "probability is out of range"));
+ else if (__k == 0)
+ return _Tp{1};
+ else if (__k > __n)
+ return _Tp{0};
+ else
+ return __beta_inc(_Tp(__k), _Tp(__n - __k - 1), __p);
+ }
+
+ /**
+ * @brief Return the complementary binomial cumulative distribution function.
+ *
+ * The binomial cumulative distribution function is related
+ * to the incomplete beta function:
+ * @f[
+ * Q(k|n,p) = I_{1-p}(n-k+1, k)
+ * @f]
+ *
+ * @param __p
+ * @param __n
+ * @param __k
+ */
+ template<typename _Tp>
+ _Tp
+ __binomial_cdfc(_Tp __p, unsigned int __n, unsigned int __k)
+ {
+ if (__isnan(__p))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__p < _Tp{0} || __p > _Tp{1})
+ std::__throw_domain_error(__N("__binomial_cdfc: "
+ "probability is out of range"));
+ else if (__k == 0)
+ return _Tp{1};
+ else if (__k > __n)
+ return _Tp{0};
+ else
+ return __beta_inc(_Tp(__n - __k - 1), _Tp(__k), _Tp{1} - __p);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_DISTRIBUTIONS_TCC
+
diff --git a/libstdc++-v3/include/bits/sf_ellint.tcc b/libstdc++-v3/include/bits/sf_ellint.tcc
new file mode 100644
index 00000000000..2a9c503f0e7
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_ellint.tcc
@@ -0,0 +1,1035 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_ellint.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) B. C. Carlson Numer. Math. 33, 1 (1979)
+// (2) B. C. Carlson, Special Functions of Applied Mathematics (1977)
+// (3) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (4) Numerical Recipes in C, 2nd ed, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press
+// (1992), pp. 261-269
+// (5) Toshio Fukushima, Elliptic functions and elliptic integrals for
+// celestial mechanics and dynamical astronomy
+
+#ifndef _GLIBCXX_BITS_SF_ELLINT_TCC
+#define _GLIBCXX_BITS_SF_ELLINT_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Return the Carlson elliptic function
+ * @f$ R_C(x,y) = R_F(x,y,y) @f$ where @f$ R_F(x,y,z) @f$
+ * is the Carlson elliptic function of the first kind.
+ *
+ * The Carlson elliptic function is defined by:
+ * @f[
+ * R_C(x,y) = \frac{1}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)}
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first argument.
+ * @param __y The second argument.
+ * @return The Carlson elliptic function.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_rc(_Tp __x, _Tp __y)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_min = __gnu_cxx::__min<_Real>();
+ constexpr auto _S_max = __gnu_cxx::__max<_Real>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_lolim = _Real(5) * _S_min;
+ constexpr auto _S_uplim = _S_max / _Real(5);
+
+ if (__isnan(__x) || __isnan(__y))
+ return _S_NaN;
+ else if (std::imag(__x) == _Real{} && std::real(__x) < _Real{})
+ std::__throw_domain_error(__N("__ellint_rc: argument less than zero"));
+ else if (std::abs(__x) + std::abs(__y) < _S_lolim)
+ std::__throw_domain_error(__N("__ellint_rc: arguments too small"));
+ else if (std::imag(__y) == _Real{0} && std::real(__y) < _Real{0})
+ {
+ if (std::abs(__x) == _Real{0})
+ return _Tp{};
+ else
+ return std::sqrt(__x / (__x - __y)) * __ellint_rc(__x - __y, -__y);
+ }
+ else
+ {
+ auto __xt = __x;
+ auto __yt = __y;
+ auto _A0 = (__x + _Real{2} * __y) / _Real{3};
+ auto _Q = std::pow(_Real{3} * _S_eps, -_Real{1} / _Real{8})
+ * std::abs(_A0 - __x);
+ auto _A = _A0;
+ auto __f = _Real{1};
+
+ while (true)
+ {
+ auto __lambda = _Real{2} * std::sqrt(__xt) * std::sqrt(__yt)
+ + __yt;
+ _A = (_A + __lambda) / _Real{4};
+ __xt = (__xt + __lambda) / _Real{4};
+ __yt = (__yt + __lambda) / _Real{4};
+ __f *= _Real{4};
+ if (_Q < __f * std::abs(_A))
+ {
+ auto __s = (__y - _A0) / (__f * _A);
+ return (_Real{1} + __s * __s * (_Real{3} / _Real{10}
+ + __s * (_Real{1} / _Real{7}
+ + __s * (_Real{3} / _Real{8}
+ + __s * (_Real{9} / _Real{22}
+ + __s * (_Real{159} / _Real{208}
+ + __s * (_Real{9} / _Real{8}))))))) / std::sqrt(_A);
+ }
+ }
+
+ return _Tp{};
+ }
+ }
+
+ /**
+ * @brief Return the Carlson elliptic function of the second kind
+ * @f$ R_D(x,y,z) = R_J(x,y,z,z) @f$ where
+ * @f$ R_J(x,y,z,p) @f$ is the Carlson elliptic function
+ * of the third kind.
+ *
+ * The Carlson elliptic function of the second kind is defined by:
+ * @f[
+ * R_D(x,y,z) = \frac{3}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)^{1/2}(t + z)^{3/2}}
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first of two symmetric arguments.
+ * @param __y The second of two symmetric arguments.
+ * @param __z The third argument.
+ * @return The Carlson elliptic function of the second kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_rd(_Tp __x, _Tp __y, _Tp __z)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_min = __gnu_cxx::__min<_Real>();
+ constexpr auto _S_max = __gnu_cxx::__max<_Real>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_lolim = _Real(5) * _S_min;
+ constexpr auto _S_uplim = _S_max / _Real(5);
+
+ if (__isnan(__x) || __isnan(__y) || __isnan(__z))
+ return _S_NaN;
+ else if ((std::imag(__x) == _Real{} && std::real(__x) < _Real{})
+ || (std::imag(__y) == _Real{} && std::real(__y) < _Real{})
+ || (std::imag(__z) == _Real{} && std::real(__z) < _Real{}))
+ std::__throw_domain_error(__N("__ellint_rd: argument less than zero"));
+ else if (std::abs(__x) + std::abs(__y) < _S_lolim
+ || std::abs(__z) < _S_lolim)
+ std::__throw_domain_error(__N("__ellint_rd: arguments too small"));
+ else
+ {
+ auto __xt = __x;
+ auto __yt = __y;
+ auto __zt = __z;
+ auto _A0 = (__x + __y + _Real{3} * __z) / _Real{5};
+ auto _Q = std::pow(_S_eps / _Real{4}, -_Real{1} / _Real{6})
+ * std::max(std::abs(_A0 - __z),
+ std::max(std::abs(_A0 - __x),
+ std::abs(_A0 - __y)));
+ auto _A = _A0;
+ auto __f = _Real{1};
+ auto __sum = _Tp{};
+
+ while (true)
+ {
+ auto __lambda = std::sqrt(__xt) * std::sqrt(__yt)
+ + std::sqrt(__yt) * std::sqrt(__zt)
+ + std::sqrt(__zt) * std::sqrt(__xt);
+ __sum += _Real{1} / __f / std::sqrt(__zt) / (__zt + __lambda);
+ _A = (_A + __lambda) / _Real{4};
+ __xt = (__xt + __lambda) / _Real{4};
+ __yt = (__yt + __lambda) / _Real{4};
+ __zt = (__zt + __lambda) / _Real{4};
+ __f *= _Real{4};
+ if (_Q < __f * std::abs(_A))
+ {
+ auto _Xi = (_A0 - __x) / (__f * _A);
+ auto _Yi = (_A0 - __y) / (__f * _A);
+ auto _Zi = -(_Xi + _Yi) / _Real{3};
+ auto _ZZ = _Zi * _Zi;
+ auto _XY = _Xi * _Yi;
+ auto _E2 = _XY - _Real{6} * _ZZ;
+ auto _E3 = (_Real{3} * _XY - _Real{8} * _ZZ) * _Zi;
+ auto _E4 = _Real{3} * (_XY - _ZZ) * _ZZ;
+ auto _E5 = _XY * _Zi * _ZZ;
+ return (_Real{1}
+ - _Real{3} * _E2 / _Real{14}
+ + _E3 / _Real{6}
+ + _Real{9} * _E2 * _E2 / _Real{88}
+ - _Real{3} * _E4 / _Real{22}
+ - _Real{9} * _E2 * _E3 / _Real{52}
+ + _Real{3} * _E5 / _Real{26}) / __f / _A / std::sqrt(_A)
+ + _Real{3} * __sum;
+ }
+ }
+
+ return _Tp{};
+ }
+ }
+
+ template<typename _Tp>
+ _Tp
+ __comp_ellint_rf(_Tp __x, _Tp __y)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ const auto _S_tolfact = _Real{2.7L} * __gnu_cxx::__sqrt_eps<_Real>();
+
+ if (__isnan(__x) || __isnan(__y))
+ return _S_NaN;
+ else
+ {
+ __x = std::sqrt(__x);
+ __y = std::sqrt(__y);
+ while (true)
+ {
+ auto __xt = __x;
+ __x = (__x + __y) / _Tp{2};
+ __y = std::sqrt(__xt) * std::sqrt(__y);
+ if (std::abs(__x - __y) < _S_tolfact * std::abs(__x))
+ return _S_pi / (__x + __y);
+ }
+ }
+ }
+
+ /**
+ * @brief Return the Carlson elliptic function @f$ R_F(x,y,z) @f$
+ * of the first kind.
+ *
+ * The Carlson elliptic function of the first kind is defined by:
+ * @f[
+ * R_F(x,y,z) = \frac{1}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)^{1/2}(t + z)^{1/2}}
+ * @f]
+ *
+ * @param __x The first of three symmetric arguments.
+ * @param __y The second of three symmetric arguments.
+ * @param __z The third of three symmetric arguments.
+ * @return The Carlson elliptic function of the first kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_rf(_Tp __x, _Tp __y, _Tp __z)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_min = __gnu_cxx::__min<_Real>();
+ constexpr auto _S_max = __gnu_cxx::__max<_Real>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_lolim = _Real(5) * _S_min;
+ constexpr auto _S_uplim = _S_max / _Real(5);
+
+ if (__isnan(__x) || __isnan(__y) || __isnan(__z))
+ return _S_NaN;
+ else if (std::imag(__x) == _Real{} && std::real(__x) < _Real{}
+ || std::imag(__y) == _Real{} && std::real(__y) < _Real{}
+ || std::imag(__z) == _Real{} && std::real(__z) < _Real{})
+ std::__throw_domain_error(__N("__ellint_rf: argument less than zero"));
+ else if (std::abs(__x) + std::abs(__y) < _S_lolim
+ || std::abs(__x) + std::abs(__z) < _S_lolim
+ || std::abs(__y) + std::abs(__z) < _S_lolim)
+ std::__throw_domain_error(__N("Argument too small in __ellint_rf"));
+
+ if (std::abs(__z) < _S_eps)
+ return __comp_ellint_rf(__x, __y);
+ else if (std::abs(__z - __y) < _S_eps)
+ return __ellint_rc(__x, __y);
+ else
+ {
+ auto __xt = __x;
+ auto __yt = __y;
+ auto __zt = __z;
+ auto _A0 = (__x + __y + __z) / _Real{3};
+ auto _Q = std::pow(_Real{3} * _S_eps, -_Real{1} / _Real{6})
+ * std::max(std::abs(_A0 - __z),
+ std::max(std::abs(_A0 - __x),
+ std::abs(_A0 - __y)));
+ auto _A = _A0;
+ auto __f = _Real{1};
+
+ while (true)
+ {
+ auto __lambda = std::sqrt(__xt) * std::sqrt(__yt)
+ + std::sqrt(__yt) * std::sqrt(__zt)
+ + std::sqrt(__zt) * std::sqrt(__xt);
+ _A = (_A + __lambda) / _Real{4};
+ __xt = (__xt + __lambda) / _Real{4};
+ __yt = (__yt + __lambda) / _Real{4};
+ __zt = (__zt + __lambda) / _Real{4};
+ __f *= _Real{4};
+ if (_Q < __f * std::abs(_A))
+ {
+ auto _Xi = (_A0 - __x) / (__f * _A);
+ auto _Yi = (_A0 - __y) / (__f * _A);
+ auto _Zi = -(_Xi + _Yi);
+ auto _E2 = _Xi * _Yi - _Zi * _Zi;
+ auto _E3 = _Xi * _Yi * _Zi;
+ return (_Real{1}
+ - _E2 / _Real{10}
+ + _E3 / _Real{14}
+ + _E2 * _E2 / _Real{24}
+ - _Real{3} * _E2 * _E3 / _Real{44}) / std::sqrt(_A);
+ }
+ }
+
+ return _Tp{};
+ }
+ }
+
+ template<typename _Tp>
+ _Tp
+ __comp_ellint_rg(_Tp __x, _Tp __y)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ const auto _S_tolfact = _Real{2.7L} * __gnu_cxx::__sqrt_eps<_Real>();
+
+ if (__isnan(__x) || __isnan(__y))
+ return _S_NaN;
+ else if (__x == _Tp{} && __y == _Tp{})
+ return _Tp{};
+ else if (__x == _Tp{})
+ return std::sqrt(__y) / _Real{2};
+ else if (__y == _Tp{})
+ return std::sqrt(__x) / _Real{2};
+ else
+ {
+ auto __xt = std::sqrt(__x);
+ auto __yt = std::sqrt(__y);
+ const auto _A = (__xt + __yt) / _Real{2};
+ auto __sum = _Tp{};
+ auto __sf = _Real{1} / _Real{2};
+ while (true)
+ {
+ auto __xtt = __xt;
+ __xt = (__xt + __yt) / _Tp{2};
+ __yt = std::sqrt(__xtt) * std::sqrt(__yt);
+ auto __del = __xt - __yt;
+ if (std::abs(__del) < _S_tolfact * std::abs(__xt))
+ return (_A * _A - __sum) * _S_pi / (__xt + __yt) / _Real{2};
+ __sum += __sf * __del * __del;
+ __sf *= _Real{2};
+ }
+ }
+ }
+
+ /**
+ * @brief Return the symmetric Carlson elliptic function of the second kind
+ * @f$ R_G(x,y,z) @f$.
+ *
+ * The Carlson symmetric elliptic function of the second kind is defined by:
+ * @f[
+ * R_G(x,y,z) = \frac{1}{4} \int_0^\infty
+ * dt t [(t + x)(t + y)(t + z)]^{-1/2}
+ * (\frac{x}{t + x} + \frac{y}{t + y} + \frac{z}{t + z})
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first of three symmetric arguments.
+ * @param __y The second of three symmetric arguments.
+ * @param __z The third of three symmetric arguments.
+ * @return The Carlson symmetric elliptic function of the second kind.
+ */
+
+ template<typename _Tp>
+ _Tp
+ __ellint_rg(_Tp __x, _Tp __y, _Tp __z)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__x) || __isnan(__y) || __isnan(__z))
+ return _S_NaN;
+ else if (__z == _Tp{})
+ return __comp_ellint_rg(__x, __y);
+ else if (__x == _Tp{})
+ return __comp_ellint_rg(__y, __z);
+ else if (__y == _Tp{})
+ return __comp_ellint_rg(__z, __x);
+ else
+ //return (__z * __ellint_rf(__x, __y, __z)
+ // - (__x - __z) * (__y - __z) * __ellint_rd(__x, __y, __z) / _Real{3}
+ // + (std::sqrt(__x) * std::sqrt(__y) / std::sqrt(__z))) / _Real{2};
+ // There is a symmetric version that is less subject to cancellation loss
+ // when the arguments are real:
+ return (__x * (__y + __z) * __ellint_rd(__y, __z, __x)
+ + __y * (__z + __x) * __ellint_rd(__z, __x, __y)
+ + __z * (__x + __y) * __ellint_rd(__x, __y, __z)) / _Tp{6};
+ }
+
+ /**
+ * @brief Return the Carlson elliptic function @f$ R_J(x,y,z,p) @f$
+ * of the third kind.
+ *
+ * The Carlson elliptic function of the third kind is defined by:
+ * @f[
+ * R_J(x,y,z,p) = \frac{3}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)^{1/2}(t + z)^{1/2}(t + p)}
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first of three symmetric arguments.
+ * @param __y The second of three symmetric arguments.
+ * @param __z The third of three symmetric arguments.
+ * @param __p The fourth argument.
+ * @return The Carlson elliptic function of the fourth kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_rj(_Tp __x, _Tp __y, _Tp __z, _Tp __p)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_min = __gnu_cxx::__min<_Real>();
+ constexpr auto _S_max = __gnu_cxx::__max<_Real>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_lolim = _Real(5) * _S_min;
+ constexpr auto _S_uplim = _S_max / _Real(5);
+
+ if (__isnan(__x) || __isnan(__y) || __isnan(__z) || __isnan(__p))
+ return _S_NaN;
+ else if (std::imag(__x) == _Real{} && std::real(__x) < _Real{}
+ || std::imag(__y) == _Real{} && std::real(__y) < _Real{}
+ || std::imag(__z) == _Real{} && std::real(__z) < _Real{})
+ std::__throw_domain_error(__N("__ellint_rj: argument less than zero"));
+ else if (std::abs(__x) + std::abs(__y) < _S_lolim
+ || std::abs(__x) + std::abs(__z) < _S_lolim
+ || std::abs(__y) + std::abs(__z) < _S_lolim
+ || std::abs(__p) < _S_lolim)
+ std::__throw_domain_error(__N("__ellint_rj: argument too small"));
+ else if (std::abs(__p - __z) < _S_eps)
+ return __ellint_rd(__x, __y, __z);
+ else
+ {
+ auto __xt = __x;
+ auto __yt = __y;
+ auto __zt = __z;
+ auto __pt = __p;
+ auto _A0 = (__x + __y + __z + _Real{2} * __p) / _Real{5};
+ auto __delta = (__p - __x) * (__p - __y) * (__p - __z);
+ auto _Q = std::pow(_S_eps / _Real{4}, -_Real{1} / _Real{6})
+ * std::max(std::abs(_A0 - __z),
+ std::max(std::abs(_A0 - __x),
+ std::max(std::abs(_A0 - __y), std::abs(_A0 - __p))));
+ auto _A = _A0;
+ auto __f = _Real{1};
+ auto __fe = _Real{1};
+ auto __sum = _Tp{};
+
+ while (true)
+ {
+ auto __xroot = std::sqrt(__xt);
+ auto __yroot = std::sqrt(__yt);
+ auto __zroot = std::sqrt(__zt);
+ auto __proot = std::sqrt(__pt);
+ auto __lambda = __xroot * __yroot
+ + __yroot * __zroot
+ + __zroot * __xroot;
+ _A = (_A + __lambda) / _Real{4};
+ __xt = (__xt + __lambda) / _Real{4};
+ __yt = (__yt + __lambda) / _Real{4};
+ __zt = (__zt + __lambda) / _Real{4};
+ __pt = (__pt + __lambda) / _Real{4};
+ auto __d = (__proot + __xroot)
+ * (__proot + __yroot)
+ * (__proot + __zroot);
+ auto _E = __delta / (__fe * __d * __d);
+ __sum += __ellint_rc(_Tp{1}, _Tp{1} + _E) / (__f * __d);
+ __f *= _Real{4};
+ __fe *= _Real{64};
+ if (_Q < __f * std::abs(_A))
+ {
+ auto _Xi = (_A0 - __x) / (__f * _A);
+ auto _Yi = (_A0 - __y) / (__f * _A);
+ auto _Zi = (_A0 - __z) / (__f * _A);
+ auto _XYZ = _Xi * _Yi * _Zi;
+ auto _Pi = -(_Xi + _Yi + _Zi) / _Real{2};
+ auto _PP = _Pi * _Pi;
+ auto _PPP = _PP * _Pi;
+ auto _E2 = _Xi * _Yi
+ + _Yi * _Zi
+ + _Zi * _Xi
+ - _Real{3} * _PP;
+ auto _E3 = _XYZ + _Real{2} * _E2 * _Pi + _Tp{4} * _PPP;
+ auto _E4 = _Pi
+ * (_Real{2} * _XYZ + _E2 * _Pi + _Real{3} * _PPP);
+ auto _E5 = _XYZ * _PP;
+ return (_Real{1} - _Real{3} * _E2 / _Real{14}
+ + _E3 / _Real{6}
+ + _Real{9} * _E2 * _E2 / _Real{88}
+ - _Real{3} * _E4 / _Real{22}
+ - _Real{9} * _E2 * _E3 / _Real{52}
+ + _Real{3} * _E5 / _Real{26}) / __f / _A / std::sqrt(_A)
+ + _Real{6} * __sum;
+ }
+ }
+
+ return _Tp{};
+ }
+ }
+
+ /**
+ * @brief Return the complete elliptic integral of the first kind
+ * @f$ K(k) @f$ using the Carlson formulation.
+ *
+ * The complete elliptic integral of the first kind is defined as
+ * @f[
+ * K(k) = F(k,\pi/2) = \int_0^{\pi/2}\frac{d\theta}
+ * {\sqrt{1 - k^2 sin^2\theta}}
+ * @f]
+ * where @f$ F(k,\phi) @f$ is the incomplete elliptic integral of the
+ * first kind.
+ *
+ * @param __k The modulus of the complete elliptic function.
+ * @return The complete elliptic function of the first kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __comp_ellint_1(_Tp __k)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__k))
+ return _S_NaN;
+ else if (std::abs(__k) == _Real{1})
+ return _S_NaN;
+ else
+ return __comp_ellint_rf(_Tp{1} - __k * __k, _Tp{1});
+ }
+
+ /**
+ * @brief Return the incomplete elliptic integral of the first kind
+ * @f$ F(k,\phi) @f$ using the Carlson formulation.
+ *
+ * The incomplete elliptic integral of the first kind is defined as
+ * @f[
+ * F(k,\phi) = \int_0^{\phi}\frac{d\theta}
+ * {\sqrt{1 - k^2 sin^2\theta}}
+ * @f]
+ *
+ * @param __k The argument of the elliptic function.
+ * @param __phi The integral limit argument of the elliptic function.
+ * @return The elliptic function of the first kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_1(_Tp __k, _Tp __phi)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+
+ if (__isnan(__k) || __isnan(__phi))
+ return _S_NaN;
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__ellint_1: bad argument"));
+ else
+ {
+ // Reduce phi to -pi/2 < phi < +pi/2.
+ const int __n = std::floor(__phi / _S_pi + _Real{0.5L});
+ const auto __phi_red = __phi - __n * _S_pi;
+
+ const auto __s = std::sin(__phi_red);
+ const auto __c = std::cos(__phi_red);
+
+ const auto __F = __s
+ * __ellint_rf(__c * __c,
+ _Real{1} - __k * __k * __s * __s, _Tp{1});
+
+ if (__n == 0)
+ return __F;
+ else
+ return __F + _Tp{2} * __n * __comp_ellint_1(__k);
+ }
+ }
+
+ /**
+ * @brief Return the complete elliptic integral of the second kind
+ * @f$ E(k) @f$ using the Carlson formulation.
+ *
+ * The complete elliptic integral of the second kind is defined as
+ * @f[
+ * E(k,\pi/2) = \int_0^{\pi/2}\sqrt{1 - k^2 sin^2\theta}
+ * @f]
+ *
+ * @param __k The modulus of the complete elliptic function.
+ * @return The complete elliptic function of the second kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __comp_ellint_2(_Tp __k)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__k))
+ return _S_NaN;
+ else if (std::abs(__k) == _Real{1})
+ return _Tp{1};
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__comp_ellint_2: bad argument"));
+ else
+ {
+ const auto __kk = __k * __k;
+
+ return __ellint_rf(_Real{0}, _Real{1} - __kk, _Real{1})
+ - __kk * __ellint_rd(_Real{0}, _Real{1} - __kk, _Real{1}) / _Tp{3};
+ }
+ }
+
+ /**
+ * @brief Return the incomplete elliptic integral of the second kind
+ * @f$ E(k,\phi) @f$ using the Carlson formulation.
+ *
+ * The incomplete elliptic integral of the second kind is defined as
+ * @f[
+ * E(k,\phi) = \int_0^{\phi} \sqrt{1 - k^2 sin^2\theta}
+ * @f]
+ *
+ * @param __k The argument of the elliptic function.
+ * @param __phi The integral limit argument of the elliptic function.
+ * @return The elliptic function of the second kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_2(_Tp __k, _Tp __phi)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+
+ if (__isnan(__k) || __isnan(__phi))
+ return _S_NaN;
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__ellint_2: bad argument"));
+ else
+ {
+ // Reduce phi to -pi/2 < phi < +pi/2.
+ const int __n = std::floor(std::abs(__phi) / _S_pi + _Real{0.5L});
+ const auto __phi_red = __phi - __n * _S_pi;
+
+ const auto __kk = __k * __k;
+ const auto __s = std::sin(__phi_red);
+ const auto __ss = __s * __s;
+ const auto __sss = __ss * __s;
+ const auto __c = std::cos(__phi_red);
+ const auto __cc = __c * __c;
+
+ const auto _E = __s
+ * __ellint_rf(__cc, _Tp{1} - __kk * __ss, _Tp{1})
+ - __kk * __sss
+ * __ellint_rd(__cc, _Tp{1} - __kk * __ss, _Tp{1})
+ / _Tp{3};
+
+ if (__n == 0)
+ return _E;
+ else
+ return _E + _Tp{2} * __n * __comp_ellint_2(__k);
+ }
+ }
+
+ /**
+ * @brief Return the complete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu) = \Pi(k,\nu,\pi/2) @f$ using the
+ * Carlson formulation.
+ *
+ * The complete elliptic integral of the third kind is defined as
+ * @f[
+ * \Pi(k,\nu) = \int_0^{\pi/2}
+ * \frac{d\theta}
+ * {(1 - \nu \sin^2\theta)\sqrt{1 - k^2 \sin^2\theta}}
+ * @f]
+ *
+ * @param __k The argument of the elliptic function.
+ * @param __nu The second argument of the elliptic function.
+ * @return The complete elliptic function of the third kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __comp_ellint_3(_Tp __k, _Tp __nu)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__k) || __isnan(__nu))
+ return _S_NaN;
+ else if (__nu == _Tp{1})
+ return __gnu_cxx::__infinity<_Real>();
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__comp_ellint_3: bad argument"));
+ else
+ {
+ const auto __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)
+ / _Tp{3};
+ }
+ }
+
+ /**
+ * @brief Return the incomplete elliptic integral of the third kind
+ * @f$ \Pi(k,\nu,\phi) @f$ using the Carlson formulation.
+ *
+ * The incomplete elliptic integral of the third kind is defined as
+ * @f[
+ * \Pi(k,\nu,\phi) = \int_0^{\phi}
+ * \frac{d\theta}
+ * {(1 - \nu \sin^2\theta)
+ * \sqrt{1 - k^2 \sin^2\theta}}
+ * @f]
+ *
+ * @param __k The argument of the elliptic function.
+ * @param __nu The second argument of the elliptic function.
+ * @param __phi The integral limit argument of the elliptic function.
+ * @return The elliptic function of the third kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_3(_Tp __k, _Tp __nu, _Tp __phi)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+
+ if (__isnan(__k) || __isnan(__nu) || __isnan(__phi))
+ return _S_NaN;
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__ellint_3: bad argument"));
+ else
+ {
+ // Reduce phi to -pi/2 < phi < +pi/2.
+ const int __n = std::floor(std::real(__phi) / _S_pi + _Real{0.5L});
+ const auto __phi_red = __phi - __n * _S_pi;
+
+ const auto __kk = __k * __k;
+ const auto __s = std::sin(__phi_red);
+ const auto __ss = __s * __s;
+ const auto __sss = __ss * __s;
+ const auto __c = std::cos(__phi_red);
+ const auto __cc = __c * __c;
+
+ const auto _Pi = __s
+ * __ellint_rf(__cc, _Tp{1} - __kk * __ss, _Tp{1})
+ - __nu * __sss
+ * __ellint_rj(__cc, _Tp{1} - __kk * __ss, _Tp{1},
+ _Tp{1} + __nu * __ss) / _Tp{3};
+
+ if (__n == 0)
+ return _Pi;
+ else
+ return _Pi + _Tp{2} * __n * __comp_ellint_3(__k, __nu);
+ }
+ }
+
+ /**
+ * Return the Legendre elliptic integral D.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_d(_Tp __k, _Tp __phi)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__k) || __isnan(__phi))
+ return _S_NaN;
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__ellint_d: bad argument"));
+ else
+ {
+ auto __sinphi = std::sin(__phi);
+ auto __sinphi2 = __sinphi * __sinphi;
+ auto __k2 = __k * __k;
+ auto __arg1 = _Tp{1} - __sinphi2;
+ auto __arg2 = _Tp{1} - __k2 * __sinphi2;
+ return __sinphi * __sinphi2 * __ellint_rd(__arg1, __arg2, _Tp{1}) / _Tp{3};
+ }
+ }
+
+ /**
+ * Return the complete Legendre elliptic integral D.
+ */
+ template<typename _Tp>
+ _Tp
+ __comp_ellint_d(_Tp __k)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__k))
+ return _S_NaN;
+ else
+ return __ellint_rd(_Tp{0}, _Tp{1} - __k * __k, _Tp{1}) / _Tp{3};
+ }
+
+ /**
+ * Return the Bulirsch elliptic integrals of the first kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_el1(_Tp __x, _Tp __k_c)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__x) || __isnan(__k_c))
+ return _S_NaN;
+ else
+ {
+ auto __x2 = __x * __x;
+ auto __k2_c = __k_c * __k_c;
+ auto __arg2 = _Tp{1} + __k2_c * __x2;
+ return __x * __ellint_rf(_Tp{1}, __arg2, _Tp{1} + __x2);
+ }
+ }
+
+ /**
+ * Return the Bulirsch elliptic integrals of the second kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_el2(_Tp __x, _Tp __k_c, _Tp __a, _Tp __b)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__x) || __isnan(__k_c) || __isnan(__a) || __isnan(__b))
+ return _S_NaN;
+ else
+ {
+ auto __x2 = __x * __x;
+ auto __x3 = __x * __x;
+ auto __k2_c = __k_c * __k_c;
+ auto __arg2 = _Tp{1} + __k2_c * __x2;
+ auto __arg3 = _Tp{1} + __x2;
+ return __a * __x * __ellint_rf(_Tp{1}, __arg2, __arg3)
+ + (__b - __a) * __x3
+ * __ellint_rd(_Tp{1}, __arg2, __arg3) / _Tp{3};
+ }
+ }
+
+ /**
+ * Return the Bulirsch elliptic integrals of the third kind.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_el3(_Tp __x, _Tp __k_c, _Tp __p)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__x) || __isnan(__k_c) || __isnan(__p))
+ return _S_NaN;
+ else
+ {
+ auto __x2 = __x * __x;
+ auto __x3 = __x * __x;
+ auto __k2_c = __k_c * __k_c;
+ auto __arg2 = _Tp{1} + __k2_c * __x2;
+ auto __arg3 = _Tp{1} + __x2;
+ auto __arg4 = _Tp{1} + __p * __x2;
+ return __x * __ellint_rf(_Tp{1}, __arg2, __arg3)
+ + (_Tp{1} - __p) * __x3
+ * __ellint_rj(_Tp{1}, __arg2, __arg3, __arg4) / _Tp{3};
+ }
+ }
+
+ /**
+ * Return the Bulirsch complete elliptic integrals.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellint_cel(_Tp __k_c, _Tp __p, _Tp __a, _Tp __b)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__k_c) || __isnan(__p) || __isnan(__a) || __isnan(__b))
+ return _S_NaN;
+ else
+ {
+ auto __k2_c = __k_c * __k_c;
+ return __a * __ellint_rf(_Tp{0}, __k2_c, _Tp{1})
+ + (__b - __p * __a)
+ * __ellint_rj(_Tp{0}, __k2_c, _Tp{1}, __p) / _Tp{3};
+ }
+ }
+
+ /**
+ * Return the Jacobi zeta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __jacobi_zeta(_Tp __k, _Tp __phi)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Real>::__pi_half;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+
+ if (__isnan(__k) || __isnan(__phi))
+ return _S_NaN;
+ else if (std::abs(__k) > _Real{1})
+ std::__throw_domain_error(__N("__jacobi_zeta: bad argument"));
+ else if (std::abs(__k) < _S_eps)
+ return _Tp{0};
+ else if (std::abs(__k - _Tp{1}) < _S_eps)
+ return std::sin(__phi);
+ else if (std::real(__phi) < _Real{0})
+ return -__jacobi_zeta(__k, -__phi);
+ else if (std::abs(__phi) < _S_eps || std::abs(__phi - _S_pi_2) < _S_eps)
+ return _Tp{0};
+ else
+ {
+ auto __mc = __k * __k;
+ auto __cosphi = std::cos(__phi);
+ auto __sinphi = std::sin(__phi);
+ auto __m = _Tp{1} - __mc;
+ auto __arg4 = _Tp{1} - __mc * __sinphi * __sinphi;
+ return __mc * __cosphi * __sinphi * std::sqrt(__arg4)
+ * __ellint_rj(_Tp{0}, __m, _Tp{1}, __arg4)
+ / (_Tp{3} * __comp_ellint_1(__k));
+ }
+ }
+
+ /**
+ * Return the Heuman lambda function.
+ */
+ template<typename _Tp>
+ _Tp
+ __heuman_lambda(_Tp __k, _Tp __phi)
+ {
+ using _Real = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Real>::__pi_half;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+
+ if (__isnan(__k) || __isnan(__phi))
+ return _S_NaN;
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__heuman_lambda: bad argument"));
+ else if (std::abs(std::abs(__k) - _Tp{1}) < _S_eps)
+ return __phi / _S_pi_2;
+ else if (std::abs(__k) < _S_eps)
+ return std::sin(__phi);
+ else if (std::real(__phi) < _Real{0})
+ return -__heuman_lambda(__k, -__phi);
+ else if (std::abs(__phi - _S_pi_2) < _Tp{5} * _S_eps)
+ return _Tp{1};
+ else if (std::abs(__phi) < _Tp{5} * _S_eps)
+ return _Tp{0};
+ else if (std::abs(__phi) < _S_pi_2)
+ {
+ auto __mc = __k * __k;
+ auto __m = _Tp{1} - __mc;
+ auto __cosphi = std::cos(__phi);
+ auto __sinphi = std::sin(__phi);
+ auto _Delta2 = _Tp{1} - __m * __sinphi * __sinphi;
+ if (std::abs(_Delta2) < _Real{0})
+ _Delta2 = _Tp{0};
+ auto __fact = _Tp{2} * __m * __cosphi * __sinphi
+ / (_S_pi * std::sqrt(_Delta2));
+ auto __arg4 = _Tp{1} - __mc / _Delta2;
+ auto __fact2 = __mc / (_Tp{3} * _Delta2);
+
+ return __fact * (__ellint_rf(_Tp{0}, __m, _Tp{1})
+ + __fact2 * __ellint_rj(_Tp{0}, __m, _Tp{1}, __arg4));
+ }
+ else
+ {
+ auto __kc = std::sqrt(_Tp{1} - __k * __k);
+ return __ellint_1(__kc, __phi) / __comp_ellint_1(__kc)
+ + __comp_ellint_1(__k) * __jacobi_zeta(__kc, __phi) / _S_pi_2;
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_ELLINT_TCC
+
diff --git a/libstdc++-v3/include/bits/sf_expint.tcc b/libstdc++-v3/include/bits/sf_expint.tcc
new file mode 100644
index 00000000000..1c83f0a63fa
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_expint.tcc
@@ -0,0 +1,591 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_expint.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// Ed. by Milton Abramowitz and Irene A. Stegun,
+// Dover Publications, New-York, Section 5, pp. 228-251.
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 222-225.
+//
+
+#ifndef _GLIBCXX_BITS_SF_EXPINT_TCC
+#define _GLIBCXX_BITS_SF_EXPINT_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ template<typename _Tp> _Tp __expint_E1(_Tp);
+
+ /**
+ * @brief Return the exponential integral @f$ E_1(x) @f$ by series summation.
+ * This should be good for @f$ x < 1 @f$.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_1(x) = \int_{1}^{\infty} \frac{e^{-xt}}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_E1_series(_Tp __x)
+ {
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+ auto __term = _Tp{1};
+ auto __esum = _Tp{0};
+ auto __osum = _Tp{0};
+ const unsigned int __max_iter = 100;
+ for (unsigned int __i = 1; __i < __max_iter; ++__i)
+ {
+ __term *= - __x / __i;
+ if (std::abs(__term) < __eps)
+ break;
+ if (__term >= _Tp{0})
+ __esum += __term / __i;
+ else
+ __osum += __term / __i;
+ }
+
+ return - __esum - __osum
+ - __gnu_cxx::__math_constants<_Tp>::__gamma_e - std::log(__x);
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_1(x) @f$
+ * by asymptotic expansion.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_1(x) = \int_{1}^\infty \frac{e^{-xt}}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_E1_asymp(_Tp __x)
+ {
+ auto __term = _Tp{1};
+ auto __esum = _Tp{1};
+ auto __osum = _Tp{0};
+ const unsigned int __max_iter = 1000;
+ for (unsigned int __i = 1; __i < __max_iter; ++__i)
+ {
+ auto __prev = __term;
+ __term *= - __i / __x;
+ if (std::abs(__term) > std::abs(__prev))
+ break;
+ if (__term >= _Tp{0})
+ __esum += __term;
+ else
+ __osum += __term;
+ }
+
+ return std::exp(- __x) * (__esum + __osum) / __x;
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_n(x) @f$ by series summation.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_n(x) = \int_{1}^\infty \frac{e^{-xt}}{t^n} dt
+ * @f]
+ *
+ * @param __n The order of the exponential integral function.
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_En_series(unsigned int __n, _Tp __x)
+ {
+ const unsigned int __max_iter = 100;
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+ const int __nm1 = __n - 1;
+ _Tp __ans = (__nm1 != 0
+ ? _Tp{1} / __nm1
+ : -std::log(__x) - __gnu_cxx::__math_constants<_Tp>::__gamma_e);
+ _Tp __fact = _Tp{1};
+ for (int __i = 1; __i <= __max_iter; ++__i)
+ {
+ __fact *= -__x / _Tp{__i};
+ _Tp __del;
+ if ( __i != __nm1 )
+ __del = -__fact / _Tp{__i - __nm1};
+ else
+ {
+ _Tp __psi = -__gnu_cxx::__math_constants<_Tp>::__gamma_e;
+ for (int __ii = 1; __ii <= __nm1; ++__ii)
+ __psi += _Tp{1} / _Tp(__ii);
+ __del = __fact * (__psi - std::log(__x));
+ }
+ __ans += __del;
+ if (std::abs(__del) < __eps * std::abs(__ans))
+ return __ans;
+ }
+ std::__throw_runtime_error(__N("__expint_En_series: "
+ "series summation failed"));
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_n(x) @f$
+ * by continued fractions.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_n(x) = \int_{1}^\infty \frac{e^{-xt}}{t^n} dt
+ * @f]
+ *
+ * @param __n The order of the exponential integral function.
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_En_cont_frac(unsigned int __n, _Tp __x)
+ {
+ const unsigned int __max_iter = 100;
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto __fp_min = __gnu_cxx::__min<_Tp>();
+ const int __nm1 = __n - 1;
+ auto __b = __x + _Tp(__n);
+ auto __c = _Tp{1} / __fp_min;
+ auto __d = _Tp{1} / __b;
+ auto __h = __d;
+ for ( unsigned int __i = 1; __i <= __max_iter; ++__i )
+ {
+ auto __a = -_Tp{__i * (__nm1 + __i)};
+ __b += _Tp{2};
+ __d = _Tp{1} / (__a * __d + __b);
+ __c = __b + __a / __c;
+ const auto __del = __c * __d;
+ __h *= __del;
+ if (std::abs(__del - _Tp{1}) < __eps)
+ {
+ const auto __ans = __h * std::exp(-__x);
+ return __ans;
+ }
+ }
+ std::__throw_runtime_error(__N("__expint_En_cont_frac: "
+ "continued fraction failed"));
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_n(x) @f$ by recursion.
+ * Use upward recursion for @f$ x < n @f$
+ * and downward recursion (Miller's algorithm) otherwise.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_n(x) = \int_{1}^\infty \frac{e^{-xt}}{t^n} dt
+ * @f]
+ *
+ * @param __n The order of the exponential integral function.
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_En_recursion(unsigned int __n, _Tp __x)
+ {
+ _Tp __En;
+ _Tp __E1 = __expint_E1(__x);
+ if (__x < _Tp(__n))
+ {
+ // Forward recursion is stable only for n < x.
+ __En = __E1;
+ for (unsigned int __j = 2; __j < __n; ++__j)
+ __En = (std::exp(-__x) - __x * __En) / _Tp(__j - 1);
+ }
+ else
+ {
+ // Backward recursion is stable only for n >= x.
+ __En = _Tp{1};
+ /// @todo Find a principled starting number
+ /// for the @f$ E_n(x) @f$ downward recursion.
+ const int __N = __n + 20;
+ _Tp __save = _Tp{0};
+ for (int __j = __N; __j > 0; --__j)
+ {
+ __En = (std::exp(-__x) - __j * __En) / __x;
+ if (__j == __n)
+ __save = __En;
+ }
+ _Tp __norm = __En / __E1;
+ __En /= __norm;
+ }
+
+ return __En;
+ }
+
+ /**
+ * @brief Return the exponential integral @f$ Ei(x) @f$ by series summation.
+ *
+ * The exponential integral is given by
+ * @f[
+ * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_Ei_series(_Tp __x)
+ {
+ _Tp __term = _Tp{1};
+ _Tp __sum = _Tp{0};
+ const unsigned int __max_iter = 1000;
+ for (unsigned int __i = 1; __i < __max_iter; ++__i)
+ {
+ __term *= __x / __i;
+ __sum += __term / __i;
+ if (__term < __gnu_cxx::__epsilon<_Tp>() * __sum)
+ break;
+ }
+
+ return __gnu_cxx::__math_constants<_Tp>::__gamma_e
+ + __sum + std::log(__x);
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ Ei(x) @f$
+ * by asymptotic expansion.
+ *
+ * The exponential integral is given by
+ * @f[
+ * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_Ei_asymp(_Tp __x)
+ {
+ _Tp __term = _Tp{1};
+ _Tp __sum = _Tp{1};
+ const unsigned int __max_iter = 1000;
+ for (unsigned int __i = 1; __i < __max_iter; ++__i)
+ {
+ _Tp __prev = __term;
+ __term *= __i / __x;
+ if (__term < __gnu_cxx::__epsilon<_Tp>())
+ break;
+ if (__term >= __prev)
+ break;
+ __sum += __term;
+ }
+
+ return std::exp(__x) * __sum / __x;
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ Ei(x) @f$.
+ *
+ * The exponential integral is given by
+ * @f[
+ * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_Ei(_Tp __x)
+ {
+ if (__x < _Tp{0})
+ return -__expint_E1(-__x);
+ else if (__x < -std::log(__gnu_cxx::__epsilon<_Tp>()))
+ return __expint_Ei_series(__x);
+ else
+ return __expint_Ei_asymp(__x);
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_1(x) @f$.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_1(x) = \int_{1}^\infty \frac{e^{-xt}}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_E1(_Tp __x)
+ {
+ if (__x < _Tp{0})
+ return -__expint_Ei(-__x);
+ else if (__x < _Tp{1})
+ return __expint_E1_series(__x);
+ else if (__x < _Tp{100})
+ /// @todo Find a good asymptotic switch point in @f$ E_1(x) @f$.
+ return __expint_En_cont_frac(1, __x);
+ else
+ return __expint_E1_asymp(__x);
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_n(x) @f$
+ * for large argument.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_n(x) = \int_{1}^\infty \frac{e^{-xt}}{t^n} dt
+ * @f]
+ *
+ * This is something of an extension.
+ *
+ * @param __n The order of the exponential integral function.
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_asymp(unsigned int __n, _Tp __x)
+ {
+ auto __term = _Tp{1};
+ auto __sum = _Tp{1};
+ for (unsigned int __i = 1; __i <= __n; ++__i)
+ {
+ auto __prev = __term;
+ __term *= -_Tp(__n - __i + 1) / __x;
+ if (std::abs(__term) > std::abs(__prev))
+ break;
+ __sum += __term;
+ }
+
+ return std::exp(-__x) * __sum / __x;
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_n(x) @f$
+ * for large order.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_n(x) = \int_{1}^\infty \frac{e^{-xt}}{t^n} dt
+ * @f]
+ *
+ * This is something of an extension.
+ *
+ * @param __n The order of the exponential integral function.
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint_large_n(unsigned int __n, _Tp __x)
+ {
+ const auto __xpn = __x + __n;
+ const auto __xpn2 = __xpn * __xpn;
+ auto __term = _Tp{1};
+ auto __sum = _Tp{1};
+ for (unsigned int __i = 1; __i <= __n; ++__i)
+ {
+ auto __prev = __term;
+ __term *= (__n - 2 * (__i - 1) * __x) / __xpn2;
+ if (std::abs(__term) < __gnu_cxx::__epsilon<_Tp>())
+ break;
+ __sum += __term;
+ }
+
+ return std::exp(-__x) * __sum / __xpn;
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ E_n(x) @f$.
+ *
+ * The exponential integral is given by
+ * @f[
+ * E_n(x) = \int_{1}^\infty \frac{e^{-xt}}{t^n} dt
+ * @f]
+ *
+ * @param __n The order of the exponential integral function.
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint(unsigned int __n, _Tp __x)
+ {
+ // Return NaN on NaN input.
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__n <= 1 && __x == _Tp{0})
+ return __gnu_cxx::__infinity<_Tp>();
+ else
+ {
+ auto __E0 = std::exp(-__x) / __x;
+ if (__n == 0)
+ return __E0;
+
+ auto __E1 = __expint_E1(__x);
+ if (__n == 1)
+ return __E1;
+
+ if (__x == _Tp{0})
+ return _Tp{1} / static_cast<_Tp>(__n - 1);
+
+ auto __En = __expint_En_recursion(__n, __x);
+
+ return __En;
+ }
+ }
+
+
+ /**
+ * @brief Return the exponential integral @f$ Ei(x) @f$.
+ *
+ * The exponential integral is given by
+ * @f[
+ * Ei(x) = -\int_{-x}^\infty \frac{e^t}{t} dt
+ * @f]
+ *
+ * @param __x The argument of the exponential integral function.
+ * @return The exponential integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __expint(_Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ return __expint_Ei(__x);
+ }
+
+ /**
+ * @brief Return the logarithmic integral @f$ li(x) @f$.
+ *
+ * The logarithmic integral is given by
+ * @f[
+ * li(x) = Ei(\log(x))
+ * @f]
+ *
+ * @param __x The argument of the logarithmic integral function.
+ * @return The logarithmic integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __logint(const _Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (std::abs(__x) == _Tp{1})
+ return __gnu_cxx::__infinity<_Tp>();
+ else
+ return __expint(std::log(__x));
+ }
+
+ /**
+ * @brief Return the hyperbolic cosine integral @f$ li(x) @f$.
+ *
+ * The hyperbolic cosine integral is given by
+ * @f[
+ * Chi(x) = (Ei(x) - E_1(x))/ 2
+ * @f]
+ *
+ * @param __x The argument of the hyperbolic cosine integral function.
+ * @return The hyperbolic cosine integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __coshint(const _Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x == _Tp{0})
+ return _Tp{0};
+ else
+ return (__expint_Ei(__x) - __expint_E1(__x)) / _Tp{2};
+ }
+
+ /**
+ * @brief Return the hyperbolic sine integral @f$ li(x) @f$.
+ *
+ * The hyperbolic sine integral is given by
+ * @f[
+ * Shi(x) = (Ei(x) - E_1(x))/ 2
+ * @f]
+ *
+ * @param __x The argument of the hyperbolic sine integral function.
+ * @return The hyperbolic sine integral.
+ */
+ template<typename _Tp>
+ _Tp
+ __sinhint(const _Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ return (__expint_Ei(__x) + __expint_E1(__x)) / _Tp{2};
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_EXPINT_TCC
diff --git a/libstdc++-v3/include/bits/sf_fresnel.tcc b/libstdc++-v3/include/bits/sf_fresnel.tcc
new file mode 100644
index 00000000000..f082dd6ef81
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_fresnel.tcc
@@ -0,0 +1,205 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_fresnel.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_FRESNEL_TCC
+#define _GLIBCXX_BITS_SF_FRESNEL_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This function returns the Fresnel cosine and sine integrals
+ * as a pair by series expansion for positive argument.
+ */
+ template <typename _Tp>
+ void
+ __fresnel_series(const _Tp __ax, _Tp & _Cf, _Tp & _Sf)
+ {
+ constexpr auto _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = _S_pi / _Tp{2};
+
+ // Evaluate S and C by series expansion.
+ auto __sum = _Tp{0};
+ auto _Ssum = _Tp{0};
+ auto _Csum = __ax;
+ auto __sign = _Tp{1};
+ auto __fact = _S_pi_2 * __ax * __ax;
+ auto __odd = true;
+ auto __term = __ax;
+ auto __n = 3;
+ auto __k = 0;
+ for (__k = 1; __k <= _S_max_iter; ++__k)
+ {
+ __term *= __fact / __k;
+ __sum += __sign * __term / __n;
+ _Tp __test = std::abs(__sum) * _S_eps;
+ if (__odd)
+ {
+ __sign = -__sign;
+ _Ssum = __sum;
+ __sum = _Csum;
+ }
+ else
+ {
+ _Csum = __sum;
+ __sum = _Ssum;
+ }
+
+ if (__term < __test)
+ break;
+
+ __odd = ! __odd;
+
+ __n += 2;
+ }
+ if (__k > _S_max_iter)
+ std::__throw_runtime_error(__N("__fresnel_series: "
+ "series evaluation failed"));
+
+ _Cf = _Csum;
+ _Sf = _Ssum;
+
+ return;
+ }
+
+
+ /**
+ * @brief This function computes the Fresnel cosine and sine integrals
+ * by continued fractions for positive argument.
+ */
+ template <typename _Tp>
+ void
+ __fresnel_cont_frac(const _Tp __ax, _Tp & _Cf, _Tp & _Sf)
+ {
+ constexpr auto _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_fp_min = __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+
+ // Evaluate S and C by Lentz's complex continued fraction method.
+ const auto __pix2 = _S_pi * __ax * __ax;
+ std::complex<_Tp> __b(_Tp{1}, -__pix2);
+ std::complex<_Tp> __cc(_Tp{1} / _S_fp_min, _Tp{0});
+ auto __h = _Tp{1} / __b;
+ auto __d = __h;
+ auto __n = -1;
+ auto __k = 0;
+ for (__k = 2; __k <= _S_max_iter; ++__k)
+ {
+ __n += 2;
+ const auto __a = -_Tp(__n * (__n + 1));
+ __b += _Tp{4};
+ __d = _Tp{1} / (__a * __d + __b);
+ __cc = __b + __a / __cc;
+ const auto __del = __cc * __d;
+ __h *= __del;
+ if (std::abs(__del.real() - _Tp{1})
+ + std::abs(__del.imag()) < _S_eps)
+ break;
+ }
+ if (__k > _S_max_iter)
+ std::__throw_runtime_error(__N("__fresnel_cont_frac: "
+ "continued fraction evaluation failed"));
+
+ __h *= std::complex<_Tp>(__ax, -__ax);
+ auto __phase = std::polar(_Tp{1}, __pix2/_Tp{2});
+ auto __cs = std::complex<_Tp>(_Tp{0.5L}, _Tp{0.5L})
+ * (_Tp{1} - __phase * __h);
+ _Cf = __cs.real();
+ _Sf = __cs.imag();
+
+ return;
+ }
+
+
+ /**
+ * @brief Return the Fresnel cosine and sine integrals
+ * as a complex number $f[ C(x) + iS(x) $f].
+ *
+ * The Fresnel cosine integral is defined by:
+ * @f[
+ * C(x) = \int_0^x \cos(\frac{\pi}{2}t^2) dt
+ * @f]
+ *
+ * The Fresnel sine integral is defined by:
+ * @f[
+ * S(x) = \int_0^x \sin(\frac{\pi}{2}t^2) dt
+ * @f]
+ *
+ * @param __x The argument
+ */
+ template <typename _Tp>
+ std::complex<_Tp>
+ __fresnel(const _Tp __x)
+ {
+ constexpr auto _S_fp_min = __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_x_min = _Tp{1.5L};
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__isnan(__x))
+ return std::complex<_Tp>{_S_NaN, _S_NaN};
+
+ auto _Cf = _Tp{0};
+ auto _Sf = _Tp{0};
+
+ const _Tp __ax = std::abs(__x);
+ if (__ax < std::sqrt(_S_fp_min))
+ {
+ _Cf = __ax;
+ _Sf = _Tp{0};
+ }
+ else if (__ax < _S_x_min)
+ __fresnel_series(__ax, _Cf, _Sf);
+ else
+ __fresnel_cont_frac(__ax, _Cf, _Sf);
+
+ if (__x < _Tp{0})
+ {
+ _Cf = -_Cf;
+ _Sf = -_Sf;
+ }
+
+ return std::complex<_Tp>(_Cf, _Sf);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+}
+
+#endif // _GLIBCXX_BITS_SF_FRESNEL_TCC
diff --git a/libstdc++-v3/include/bits/sf_gamma.tcc b/libstdc++-v3/include/bits/sf_gamma.tcc
new file mode 100644
index 00000000000..b2d60e7dc2d
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_gamma.tcc
@@ -0,0 +1,3055 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_gamma.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 6, pp. 253-266
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 213-216
+// (4) Gamma, Exploring Euler's Constant, Julian Havil,
+// Princeton, 2003.
+
+#ifndef _GLIBCXX_BITS_SF_GAMMA_TCC
+#define _GLIBCXX_BITS_SF_GAMMA_TCC 1
+
+#pragma GCC system_header
+
+#include <array>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+template<typename _Tp>
+ struct _Factorial_table
+ {
+ int __n;
+ _Tp __factorial;
+ _Tp __log_factorial;
+ };
+
+template<typename _Tp>
+ constexpr std::size_t _S_num_factorials = 0;
+
+template<>
+ constexpr std::size_t _S_num_factorials<float> = 35;
+template<>
+ constexpr std::size_t _S_num_factorials<double> = 171;
+template<>
+ constexpr std::size_t _S_num_factorials<long double> = 171;
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+template<>
+ constexpr std::size_t _S_num_factorials<__float128> = 171;
+#endif
+
+constexpr _Factorial_table<long double>
+_S_factorial_table[171]
+{
+ { 0, 1.0L, 0.0L},
+ { 1, 1.0L, 0.0L},
+ { 2, 2.0L, 6.931471805599453094172321214581766e-01L},
+ { 3, 6.0L, 1.791759469228055000812477358380702e+00L},
+ { 4, 24.0L, 3.178053830347945619646941601297055e+00L},
+ { 5, 120.0L, 4.787491742782045994247700934523243e+00L},
+ { 6, 720.0L, 6.579251212010100995060178292903945e+00L},
+ { 7, 5040.0L, 8.525161361065414300165531036347125e+00L},
+ { 8, 40320.0L, 1.060460290274525022841722740072165e+01L},
+ { 9, 362880.0L, 1.280182748008146961120771787456671e+01L},
+ { 10, 3628800.0L, 1.510441257307551529522570932925107e+01L},
+ { 11, 39916800.0L, 1.750230784587388583928765290721620e+01L},
+ { 12, 479001600.0L, 1.998721449566188614951736238705508e+01L},
+ { 13, 6227020800.0L, 2.255216385312342288557084982862040e+01L},
+ { 14, 87178291200.0L, 2.519122118273868150009343469352175e+01L},
+ { 15, 1307674368000.0L, 2.789927138384089156608943926367047e+01L},
+ { 16, 20922789888000.0L, 3.067186010608067280375836774950317e+01L},
+ { 17, 355687428096000.0L, 3.350507345013688888400790236737630e+01L},
+ { 18, 6402373705728000.0L, 3.639544520803305357621562496267953e+01L},
+ { 19, 121645100408832000.0L, 3.933988418719949403622465239456738e+01L},
+ { 20, 2432902008176640000.0L, 4.233561646075348502965987597070992e+01L},
+ { 21, 51090942171709440000.0L, 4.538013889847690802616047395107563e+01L},
+ { 22, 1124000727777607680000.0L, 4.847118135183522387963964965049893e+01L},
+ { 23, 25852016738884976640000.0L, 5.160667556776437357044640248230913e+01L},
+ { 24, 620448401733239439360000.0L, 5.478472939811231919009334408360618e+01L},
+ { 25, 15511210043330985984000000.0L, 5.800360522298051993929486275005856e+01L},
+ { 26, 403291461126605635584000000.0L, 6.126170176100200198476558231308206e+01L},
+ { 27, 10888869450418352160768000000.0L, 6.455753862700633105895131802384963e+01L},
+ { 28, 304888344611713860501504000000.0L, 6.788974313718153498289113501020917e+01L},
+ { 29, 8841761993739701954543616000000.0L, 7.125703896716800901007440704257107e+01L},
+ { 30, 265252859812191058636308480000000.0L, 7.465823634883016438548764373417796e+01L},
+ { 31, 8222838654177922817725562880000000.0L, 7.809222355331531063141680805872032e+01L},
+ { 32, 263130836933693530167218012160000000.0L, 8.155795945611503717850296866601120e+01L},
+ { 33, 8683317618811886495518194401280000000.0L, 8.505446701758151741396015748089886e+01L},
+ { 34, 2.952327990396041408476186096435200e+38L, 8.858082754219767880362692422023016e+01L},
+ { 35, 1.033314796638614492966665133752320e+40L, 9.213617560368709248333303629689953e+01L},
+ { 36, 3.719933267899012174679994481508352e+41L, 9.571969454214320248495799101366093e+01L},
+ { 37, 1.376375309122634504631597958158090e+43L, 9.933061245478742692932608668469238e+01L},
+ { 38, 5.230226174666011117600072241000743e+44L, 1.029681986145138126987523462380384e+02L},
+ { 39, 2.039788208119744335864028173990290e+46L, 1.066317602606434591262010789165263e+02L},
+ { 40, 8.159152832478977343456112695961160e+47L, 1.103206397147573954290535346141270e+02L},
+ { 41, 3.345252661316380710817006205344076e+49L, 1.140342117814617032329202979871644e+02L},
+ { 42, 1.405006117752879898543142606244512e+51L, 1.177718813997450715388381280889883e+02L},
+ { 43, 6.041526306337383563735513206851401e+52L, 1.215330815154386339623109706023341e+02L},
+ { 44, 2.658271574788448768043625811014616e+54L, 1.253172711493568951252073784232156e+02L},
+ { 45, 1.196222208654801945619631614956577e+56L, 1.291239336391272148825986282302868e+02L},
+ { 46, 5.502622159812088949850305428800256e+57L, 1.329525750356163098828226131835552e+02L},
+ { 47, 2.586232415111681806429643551536120e+59L, 1.368027226373263684696435638533274e+02L},
+ { 48, 1.241391559253607267086228904737338e+61L, 1.406739236482342593987077375760826e+02L},
+ { 49, 6.082818640342675608722521633212954e+62L, 1.445657439463448860089184430629690e+02L},
+ { 50, 3.041409320171337804361260816606477e+64L, 1.484777669517730320675371938508795e+02L},
+ { 51, 1.551118753287382280224243016469303e+66L, 1.524095925844973578391819737056752e+02L},
+ { 52, 8.065817517094387857166063685640377e+67L, 1.563608363030787851940699253901568e+02L},
+ { 53, 4.274883284060025564298013753389399e+69L, 1.603311282166309070282143945291859e+02L},
+ { 54, 2.308436973392413804720927426830276e+71L, 1.643201122631951814118173623614117e+02L},
+ { 55, 1.269640335365827592596510084756652e+73L, 1.683274454484276523304800652726030e+02L},
+ { 56, 7.109985878048634518540456474637249e+74L, 1.723527971391628015638371143804207e+02L},
+ { 57, 4.052691950487721675568060190543232e+76L, 1.763958484069973517152413870492311e+02L},
+ { 58, 2.350561331282878571829474910515074e+78L, 1.804562914175437710518418912030512e+02L},
+ { 59, 1.386831185456898357379390197203894e+80L, 1.845338288614494905024579415767709e+02L},
+ { 60, 8.320987112741390144276341183223363e+81L, 1.886281734236715911872884103898359e+02L},
+ { 61, 5.075802138772247988008568121766251e+83L, 1.927390472878449024360397994932615e+02L},
+ { 62, 3.146997326038793752565312235495076e+85L, 1.968661816728899939913861959392621e+02L},
+ { 63, 1.982608315404440064116146708361898e+87L, 2.010093163992815266792820391565503e+02L},
+ { 64, 1.268869321858841641034333893351615e+89L, 2.051681994826411985357854318852994e+02L},
+ { 65, 8.247650592082470666723170306785496e+90L, 2.093425867525368356464396786600909e+02L},
+ { 66, 5.443449390774430640037292402478427e+92L, 2.135322414945632611913140995964367e+02L},
+ { 67, 3.647111091818868528824985909660546e+94L, 2.177369341139542272509841715928004e+02L},
+ { 68, 2.480035542436830599600990418569171e+96L, 2.219564418191303339500681704535899e+02L},
+ { 69, 1.711224524281413113724683388812728e+98L, 2.261905483237275933322701685223226e+02L},
+ { 70, 1.197857166996989179607278372168910e+100L, 2.304390435657769523213935127204502e+02L},
+ { 71, 8.504785885678623175211676442399260e+101L, 2.347017234428182677427229672529632e+02L},
+ { 72, 6.123445837688608686152407038527467e+103L, 2.389783895618343230537651540911828e+02L},
+ { 73, 4.470115461512684340891257138125051e+105L, 2.432688490029827141828572629486213e+02L},
+ { 74, 3.307885441519386412259530282212537e+107L, 2.475729140961868839366425907411109e+02L},
+ { 75, 2.480914081139539809194647711659403e+109L, 2.518904022097231943772393546444858e+02L},
+ { 76, 1.885494701666050254987932260861146e+111L, 2.562211355500095254560828463192901e+02L},
+ { 77, 1.451830920282858696340707840863083e+113L, 2.605649409718632093052501426406984e+02L},
+ { 78, 1.132428117820629783145752115873204e+115L, 2.649216497985528010421161074406444e+02L},
+ { 79, 8.946182130782975286851441715398315e+116L, 2.692910976510198225362890529821258e+02L},
+ { 80, 7.156945704626380229481153372318652e+118L, 2.736731242856937041485587408011847e+02L},
+ { 81, 5.797126020747367985879734231578109e+120L, 2.780675734403661429141397217488748e+02L},
+ { 82, 4.753643337012841748421382069894049e+122L, 2.824742926876303960274237172433704e+02L},
+ { 83, 3.945523969720658651189747118012061e+124L, 2.868931332954269939508991894666617e+02L},
+ { 84, 3.314240134565353266999387579130131e+126L, 2.913239500942703075662342516899438e+02L},
+ { 85, 2.817104114380550276949479442260611e+128L, 2.957666013507606240210845456410431e+02L},
+ { 86, 2.422709538367273238176552320344126e+130L, 3.002209486470141317539746202758472e+02L},
+ { 87, 2.107757298379527717213600518699389e+132L, 3.046868567656687154725531375451316e+02L},
+ { 88, 1.854826422573984391147968456455462e+134L, 3.091641935801469219448667774874712e+02L},
+ { 89, 1.650795516090846108121691926245361e+136L, 3.136528299498790617831845930281411e+02L},
+ { 90, 1.485715964481761497309522733620825e+138L, 3.181526396202093268499930749566705e+02L},
+ { 91, 1.352001527678402962551665687594951e+140L, 3.226634991267261768911519151416790e+02L},
+ { 92, 1.243841405464130725547532432587355e+142L, 3.271852877037752172007931322164055e+02L},
+ { 93, 1.156772507081641574759205162306240e+144L, 3.317178871969284731381175417778704e+02L},
+ { 94, 1.087366156656743080273652852567865e+146L, 3.362611819791984770343557245691008e+02L},
+ { 95, 1.032997848823905926259970209939472e+148L, 3.408150588707990178689655113342148e+02L},
+ { 96, 9.916779348709496892095714015418933e+149L, 3.453794070622668541074469171784282e+02L},
+ { 97, 9.619275968248211985332842594956366e+151L, 3.499541180407702369295636388001322e+02L},
+ { 98, 9.426890448883247745626185743057238e+153L, 3.545390855194408088491915764084767e+02L},
+ { 99, 9.332621544394415268169923885626665e+155L, 3.591342053695753987760440104602869e+02L},
+ { 100, 9.332621544394415268169923885626666e+157L, 3.637393755555634901440799933696556e+02L},
+ { 101, 9.425947759838359420851623124482932e+159L, 3.683544960724047495949641916365686e+02L},
+ { 102, 9.614466715035126609268655586972591e+161L, 3.729794688856890206760262036128225e+02L},
+ { 103, 9.902900716486180407546715254581770e+163L, 3.776141978739186564467948059278759e+02L},
+ { 104, 1.029901674514562762384858386476504e+166L, 3.822585887730600291110999897338157e+02L},
+ { 105, 1.081396758240290900504101305800329e+168L, 3.869125491232175524822013470474076e+02L},
+ { 106, 1.146280563734708354534347384148349e+170L, 3.915759882173296196257630483078949e+02L},
+ { 107, 1.226520203196137939351751701038734e+172L, 3.962488170517915257990674471249182e+02L},
+ { 108, 1.324641819451828974499891837121832e+174L, 4.009309482789157454920876470786021e+02L},
+ { 109, 1.443859583202493582204882102462797e+176L, 4.056222961611448891924649635308113e+02L},
+ { 110, 1.588245541522742940425370312709077e+178L, 4.103227765269373054205448985634608e+02L},
+ { 111, 1.762952551090244663872161047107075e+180L, 4.150323067282496395563082394714147e+02L},
+ { 112, 1.974506857221074023536820372759924e+182L, 4.197508055995447340990825207006906e+02L},
+ { 113, 2.231192748659813646596607021218714e+184L, 4.244781934182570746676646521943066e+02L},
+ { 114, 2.543559733472187557120132004189334e+186L, 4.292143918666515701284861569845752e+02L},
+ { 115, 2.925093693493015690688151804817735e+188L, 4.339593239950148201938936691496116e+02L},
+ { 116, 3.393108684451898201198256093588572e+190L, 4.387129141861211848399114054248899e+02L},
+ { 117, 3.969937160808720895401959629498629e+192L, 4.434750881209189409587553833403002e+02L},
+ { 118, 4.684525849754290656574312362808383e+194L, 4.482457727453846057187886658354781e+02L},
+ { 119, 5.574585761207605881323431711741975e+196L, 4.530248962384961351041435531967944e+02L},
+ { 120, 6.689502913449127057588118054090371e+198L, 4.578123879812781810983912541313177e+02L},
+ { 121, 8.094298525273443739681622845449348e+200L, 4.626081785268749221865151412872479e+02L},
+ { 122, 9.875044200833601362411579871448205e+202L, 4.674121995716081787446837625121317e+02L},
+ { 123, 1.214630436702532967576624324188129e+205L, 4.722243839269805962399457711220916e+02L},
+ { 124, 1.506141741511140879795014161993280e+207L, 4.770446654925856331047093996895503e+02L},
+ { 125, 1.882677176888926099743767702491600e+209L, 4.818729792298879342285116776892289e+02L},
+ { 126, 2.372173242880046885677147305139416e+211L, 4.867092611368394122258247530279753e+02L},
+ { 127, 3.012660018457659544809977077527059e+213L, 4.915534482232980034988721938356916e+02L},
+ { 128, 3.856204823625804217356770659234635e+215L, 4.964054784872176206647928186858988e+02L},
+ { 129, 4.974504222477287440390234150412680e+217L, 5.012652908915792927796609064361672e+02L},
+ { 130, 6.466855489220473672507304395536484e+219L, 5.061328253420348751997323853324169e+02L},
+ { 131, 8.471580690878820510984568758152794e+221L, 5.110080226652360267438818093435864e+02L},
+ { 132, 1.118248651196004307449963076076169e+224L, 5.158908245878223975981734624013904e+02L},
+ { 133, 1.487270706090685728908450891181305e+226L, 5.207811737160441513632878425767215e+02L},
+ { 134, 1.992942746161518876737324194182948e+228L, 5.256790135159950627323751466945434e+02L},
+ { 135, 2.690472707318050483595387662146980e+230L, 5.305842882944334921811616417385371e+02L},
+ { 136, 3.659042881952548657689727220519892e+232L, 5.354969431801695441896628727207848e+02L},
+ { 137, 5.012888748274991661034926292112252e+234L, 5.404169241059976691049780628487646e+02L},
+ { 138, 6.917786472619488492228198283114908e+236L, 5.453441777911548737965972930389555e+02L},
+ { 139, 9.615723196941089004197195613529722e+238L, 5.502786517242855655537860779578311e+02L},
+ { 140, 1.346201247571752460587607385894161e+241L, 5.552202941468948698523266542774168e+02L},
+ { 141, 1.898143759076170969428526414110767e+243L, 5.601690540372730381305428501841115e+02L},
+ { 142, 2.695364137888162776588507508037289e+245L, 5.651248810948742988612895368380828e+02L},
+ { 143, 3.854370717180072770521565736493323e+247L, 5.700877257251342061414049678576132e+02L},
+ { 144, 5.550293832739304789551054660550385e+249L, 5.750575390247102067618643868172909e+02L},
+ { 145, 8.047926057471991944849029257798059e+251L, 5.800342727671307811636484181828790e+02L},
+ { 146, 1.174997204390910823947958271638517e+254L, 5.850178793888391176021577591617758e+02L},
+ { 147, 1.727245890454638911203498659308619e+256L, 5.900083119756178539037637098855847e+02L},
+ { 148, 2.556323917872865588581178015776756e+258L, 5.950055242493819689669662697995324e+02L},
+ { 149, 3.808922637630569726985955243507367e+260L, 6.000094705553274281079586980746365e+02L},
+ { 150, 5.713383956445854590478932865261050e+262L, 6.050201058494236838579726940994696e+02L},
+ { 151, 8.627209774233240431623188626544186e+264L, 6.100373856862386081867689303989541e+02L},
+ { 152, 1.311335885683452545606724671234716e+267L, 6.150612662070848845750296541952165e+02L},
+ { 153, 2.006343905095682394778288746989116e+269L, 6.200917041284773200380696792869347e+02L},
+ { 154, 3.089769613847350887958564670363239e+271L, 6.251286567308909491966542077298012e+02L},
+ { 155, 4.789142901463393876335775239063020e+273L, 6.301720818478101958171841313875697e+02L},
+ { 156, 7.471062926282894447083809372938311e+275L, 6.352219378550597328634673283089739e+02L},
+ { 157, 1.172956879426414428192158071551315e+278L, 6.402781836604080409208917735453774e+02L},
+ { 158, 1.853271869493734796543609753051077e+280L, 6.453407786934350077244819512083170e+02L},
+ { 159, 2.946702272495038326504339507351213e+282L, 6.504096828956552392500216655842685e+02L},
+ { 160, 4.714723635992061322406943211761940e+284L, 6.554848567108890661717085855247856e+02L},
+ { 161, 7.590705053947218729075178570936724e+286L, 6.605662610758735291676206911000390e+02L},
+ { 162, 1.229694218739449434110178928491749e+289L, 6.656538574111059132426189041691872e+02L},
+ { 163, 2.004401576545302577599591653441551e+291L, 6.707476076119126755766838365353080e+02L},
+ { 164, 3.287218585534296227263330311644144e+293L, 6.758474740397368739993850641512618e+02L},
+ { 165, 5.423910666131588774984495014212838e+295L, 6.809534195136374546094430122993756e+02L},
+ { 166, 9.003691705778437366474261723593311e+297L, 6.860654073019939978423357166441252e+02L},
+ { 167, 1.503616514864999040201201707840083e+300L, 6.911834011144107529495954674208699e+02L},
+ { 168, 2.526075744973198387538018869171339e+302L, 6.963073650938140118743477617656102e+02L},
+ { 169, 4.269068009004705274939251888899563e+304L, 7.014372638087370853464547366487408e+02L},
+ { 170, 7.257415615307998967396728211129257e+306L, 7.065730622457873471107222627212983e+02L}
+};
+
+template<typename _Tp>
+ constexpr std::size_t _S_num_double_factorials = 0;
+
+template<>
+ constexpr std::size_t _S_num_double_factorials<float> = 57;
+template<>
+ constexpr std::size_t _S_num_double_factorials<double> = 301;
+template<>
+ constexpr std::size_t _S_num_double_factorials<long double> = 301;
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+template<>
+ constexpr std::size_t _S_num_double_factorials<__float128> = 301;
+#endif
+
+constexpr _Factorial_table<long double>
+_S_double_factorial_table[301]
+{
+ { 0, 1.0L, 0.0L},
+ { 1, 1.0L, 0.0L},
+ { 2, 2.0L, 6.931471805599453094172321214581766e-01L},
+ { 3, 3.0L, 1.098612288668109691395245236922526e+00L},
+ { 4, 8.0L, 2.079441541679835928251696364374530e+00L},
+ { 5, 15.0L, 2.708050201102210065996004570148713e+00L},
+ { 6, 48.0L, 3.871201010907890929064173722755232e+00L},
+ { 7, 105.0L, 4.653960350157523371101357313591893e+00L},
+ { 8, 384.0L, 5.950642552587726857315870087129762e+00L},
+ { 9, 945.0L, 6.851184927493742753891847787436945e+00L},
+ { 10, 3840.03L, 8.253227645581772541333861541814127e+00L},
+ { 11, 10395.0L, 9.249080200292113297953791365402074e+00L},
+ { 12, 46080.0L, 1.073813429536977285156357102165301e+01L},
+ { 13, 135135.0L, 1.181402955775365003400727880696739e+01L},
+ { 14, 645120.0L, 1.337719162498503146608615588655436e+01L},
+ { 15, 2027025.0L, 1.452207975885586010000328337711611e+01L},
+ { 16, 10321920.0L, 1.614978034722481270375508437238707e+01L},
+ { 17, 34459425.0L, 1.735529310291207618025281799498923e+01L},
+ { 18, 185794560.0L, 1.904015210512097739596280696769029e+01L},
+ { 19, 654729075.0L, 2.029973208207851664026184542687709e+01L},
+ { 20, 3715891200.0L, 2.203588437867496838939803054383284e+01L},
+ { 21, 13749310575.0L, 2.334425451980193963676244340724279e+01L},
+ { 22, 81749606400.0L, 2.512692683203328424287720624325614e+01L},
+ { 23, 316234143225.0L, 2.647974873573108932756919623905299e+01L},
+ { 24, 1961990553600.0L, 2.830498066238122986252414784455320e+01L},
+ { 25, 7905853580625.0L, 2.969862456059929007677071490550536e+01L},
+ { 26, 51011754393600.0L, 3.156307720040271190799486740757669e+01L},
+ { 27, 213458046676875.0L, 3.299446142660361915095645061627294e+01L},
+ { 28, 1428329123020800.0L, 3.489528171057791583193468439393622e+01L},
+ { 29, 6190283353629375.0L, 3.636175725659009317813972264863485e+01L},
+ { 30, 42849873690624000.0L, 3.829647909224007120734792108554311e+01L},
+ { 31, 191898783962510625.0L, 3.979574446107523942406888697317721e+01L},
+ { 32, 1371195958099968000.0L, 4.176221499503979775443408169283400e+01L},
+ { 33, 6332659870762850625.0L, 4.329225202254171965952607578806486e+01L},
+ { 34, 46620662575398912000.0L, 4.528857551965595914410084843216530e+01L},
+ { 35, 221643095476699771875.0L, 4.684760008403113333923218786473423e+01L},
+ { 36, 1678343852714360832000.0L, 4.887209445811206914572580314892671e+01L},
+ { 37, 8200794532637891559375.0L, 5.045851799667535778360028353576568e+01L},
+ { 38, 63777066403145711616000.0L, 5.250968061783845491515206270227273e+01L},
+ { 39, 319830986772877770815625.0L, 5.412207964280500421104901621425352e+01L},
+ { 40, 2551082656125828464640000.0L, 5.619856007195239121800451839987345e+01L},
+ { 41, 13113070457687988603440625.0L, 5.783565170950931201491577958729093e+01L},
+ { 42, 107145471557284795514880000.0L, 5.993622969023575952392234850169733e+01L},
+ { 43, 563862029680583509947946875.0L, 6.159685182520287443838862210063677e+01L},
+ { 44, 4714400748520531002654720000.0L, 6.372041932415402068681875632257881e+01L},
+ { 45, 25373791335626257947657609375.0L, 6.540351431497319419577987190770802e+01L},
+ { 46, 216862434431944426122117120000.0L, 6.754906072064311568704274127584719e+01L},
+ { 47, 1192568192774434123539907640625.0L, 6.925366191668325278260082257748019e+01L},
+ { 48, 10409396852733332453861621760000.0L, 7.142026173155100661610691499860242e+01L},
+ { 49, 58435841445947272053455474390625.0L, 7.314548221479387939281152806436655e+01L},
+ { 50, 520469842636666622693081088000000.0L, 7.533228473697915267472566578651297e+01L},
+ { 51, 2980227913743310874726229193921875.0L, 7.707730784751820516445630791916221e+01L},
+ { 52, 2.706443181710666438004021657600000e+34L, 7.928352845556058002961361747099465e+01L},
+ { 53, 1.579520794283954763604901472778594e+35L, 8.104759976107032699860077705819126e+01L},
+ { 54, 1.461479318123759876522171695104000e+36L, 8.327251250212485441321658530322040e+01L},
+ { 55, 8.687364368561751199826958100282266e+36L, 8.505493294630279791726347996938258e+01L},
+ { 56, 8.184284181493055308524161492582400e+37L, 8.729786419286000364657363441103811e+01L},
+ { 57, 4.951797690080198183901366117160891e+38L, 8.909798421413734806866775263819296e+01L},
+ { 58, 4.746884825265972078944013665697792e+39L, 9.135830720340642298317413856485819e+01L},
+ { 59, 2.921560637147316928501806009124926e+40L, 9.317552165804306751928380301191265e+01L},
+ { 60, 2.848130895159583247366408199418675e+41L, 9.545265176562852366800460737792326e+01L},
+ { 61, 1.782151988659863326386101665566205e+42L, 9.728639552221637876803519211533827e+01L},
+ { 62, 1.765841154998941613367173083639579e+43L, 9.957978615067361522335100382392380e+01L},
+ { 63, 1.122755752855713895623244049306709e+44L, 1.014295302486079114559310353326265e+02L},
+ { 64, 1.130138339199322632554990773529330e+45L, 1.037386692340332870798543965526729e+02L},
+ { 65, 7.297912393562140321551086320493608e+45L, 1.056039175185035485665852821074180e+02L},
+ { 66, 7.458913038715529374862939105293580e+46L, 1.079283239760597126247288174890187e+02L},
+ { 67, 4.889601303686634015439227834730717e+47L, 1.098086101378945146262553541037817e+02L},
+ { 68, 5.072060866326559974906798591599634e+48L, 1.121478316812358193238128163498082e+02L},
+ { 69, 3.373824899543777470653067205964195e+49L, 1.140427166424917740084573521725145e+02L},
+ { 70, 3.550442606428591982434759014119744e+50L, 1.163963269232851783129361605479357e+02L},
+ { 71, 2.395415678676082004163677716234578e+51L, 1.183053965195330894297868067050275e+02L},
+ { 72, 2.556318676628586227353026490166216e+52L, 1.206729930423012336239783473861553e+02L},
+ { 73, 1.748653445433539863039484732851242e+53L, 1.225958559606814805588789155624660e+02L},
+ { 74, 1.891675820705153808241239602723000e+54L, 1.249770581355054033777636751786449e+02L},
+ { 75, 1.311490084075154897279613549638432e+55L, 1.269133440742177909994756794658409e+02L},
+ { 76, 1.437673623735916894263342098069480e+56L, 1.293077914757917344566071668534491e+02L},
+ { 77, 1.009847364737869270905302433221592e+57L, 1.312571494960714748486429757872492e+02L},
+ { 78, 1.121385426514015177525406836494194e+58L, 1.336645003024813261934731316533951e+02L},
+ { 79, 7.977794181429167240151889222450580e+58L, 1.356265973485384963428159213287306e+02L},
+ { 80, 8.971083412112121420203254691953555e+59L, 1.380465269371552078057428194724540e+02L},
+ { 81, 6.462013286957625464523030270184970e+60L, 1.400210465032109351083969022764207e+02L},
+ { 82, 7.356288397931939564566668847401915e+61L, 1.424532461844194609190268149669496e+02L},
+ { 83, 5.363471028174829135554115124253525e+62L, 1.444398871110075330318723744997121e+02L},
+ { 84, 6.179282254262829234236001831817608e+63L, 1.468840629832627745343618771902317e+02L},
+ { 85, 4.558950373948604765220997855615496e+64L, 1.488825383674978494867226684508114e+02L},
+ { 86, 5.314182738666033141442961575363143e+65L, 1.513384102795162822672519518250357e+02L},
+ { 87, 3.966286825335286145742268134385482e+66L, 1.533484464861524332053011857200959e+02L},
+ { 88, 4.676480810026109164469806186319566e+67L, 1.558157470939944887395655917673754e+02L},
+ { 89, 3.529995274548404669710618639603079e+68L, 1.578370828558845730436190012607657e+02L},
+ { 90, 4.208832729023498248022825567687610e+69L, 1.603155567643247538063740736959048e+02L},
+ { 91, 3.212295699839048249436662962038802e+70L, 1.623479423624014230847778414457742e+02L},
+ { 92, 3.872126110701618388180999522272601e+71L, 1.648373453413737941160152907706313e+02L},
+ { 93, 2.987435000850314871976096554696086e+72L, 1.668805418555546790221022510072391e+02L},
+ { 94, 3.639798544059521284890139550936245e+73L, 1.693806401236437980122534735618617e+02L},
+ { 95, 2.838063250807799128377291726961281e+74L, 1.714344187471552198567120377723531e+02L},
+ { 96, 3.494206602297140433494533968898795e+75L, 1.739449883151116342507348794060751e+02L},
+ { 97, 2.752921353283565154525972975152443e+76L, 1.760091297256586026788287593940571e+02L},
+ { 98, 3.424322470251197624824643289520819e+77L, 1.785299557937822061703628170144196e+02L},
+ { 99, 2.725392139750729502980713245400919e+78L, 1.806042495757931926056811934458673e+02L},
+ { 100, 3.424322470251197624824643289520819e+79L, 1.831351259797702975383987999237884e+02L},
+ { 101, 2.752646061148236798010520377854928e+80L, 1.852193700926344520565653917127803e+02L},
+ { 102, 3.492808919656221577321136155311235e+81L, 1.877600987930545686194608119000422e+02L},
+ { 103, 2.835225442982683901950835989190576e+82L, 1.898540990808640878273339940278337e+02L},
+ { 104, 3.632521276442470440413981601523684e+83L, 1.924044896921959412837659957059820e+02L},
+ { 105, 2.976986715131818097048377788650104e+84L, 1.945080594310216111984353513414256e+02L},
+ { 106, 3.850472553029018666838820497615105e+85L, 1.970679287863080084273276969664693e+02L},
+ { 107, 3.185375785191045363841764233855612e+86L, 1.991808882654835173717397501584489e+02L},
+ { 108, 4.158510357271340160185926137424314e+87L, 2.017500600134322281203478969201532e+02L},
+ { 109, 3.472059605858239446587523014902617e+88L, 2.038722361477126610721170666106581e+02L},
+ { 110, 4.574361392998474176204518751166745e+89L, 2.064505403792246443484278319528027e+02L},
+ { 111, 3.853986162502645785712150546541905e+90L, 2.085817663490249952078804075186121e+02L},
+ { 112, 5.123284760158291077349061001306754e+91L, 2.111690392505197388912021131820786e+02L},
+ { 113, 4.355004363627989737854730117592352e+92L, 2.133091541677373357764625390122281e+02L},
+ { 114, 5.840544626580451828177929541489699e+93L, 2.159052376989142343520236179723471e+02L},
+ { 115, 5.008255018172188198532939635231205e+94L, 2.180540862961005858418700511772645e+02L},
+ { 116, 6.775031766833324120686398268128051e+95L, 2.206588278900205989980413542476254e+02L},
+ { 117, 5.859658371261460192283539373220509e+96L, 2.228162602308983419607140290926748e+02L},
+ { 118, 7.994537484863322462409949956391101e+97L, 2.254295125144862637580746367428033e+02L},
+ { 119, 6.972993461801137628817411854132406e+98L, 2.275953837240098713460689164539912e+02L},
+ { 120, 9.593444981835986954891939947669321e+99L, 2.302170042572683097523223376773265e+02L},
+ { 121, 8.437322088779376530869068343500211e+100L, 2.323911742696066124341928036099214e+02L},
+ { 122, 1.170400287783990408496816673615657e+102L, 2.350210253020015663104909589022103e+02L},
+ { 123, 1.037790616919863313296895406250526e+103L, 2.372033586249790299294548122198813e+02L},
+ { 124, 1.451296356852148106536052675283415e+104L, 2.398413068676066031752545874696690e+02L},
+ { 125, 1.297238271149829141621119257813157e+105L, 2.420316723622813310532570902195599e+02L},
+ { 126, 1.828633409633706614235426370857103e+106L, 2.446775887745580811725676628084154e+02L},
+ { 127, 1.647492604360283009858821457422710e+107L, 2.468758594487399223263045310272762e+02L},
+ { 128, 2.340650764331144466221345754697092e+108L, 2.495296190384776983384882876586226e+02L},
+ { 129, 2.125265459624765082717879680075296e+109L, 2.517356718531015944411726187775446e+02L},
+ { 130, 3.042845993630487806087749481106219e+110L, 2.543971534889332807585597665548723e+02L},
+ { 131, 2.784097752108442258360422380898638e+111L, 2.566108691763027459853220427887141e+02L},
+ { 132, 4.016556711592243904035829315060209e+112L, 2.592799554115196516128514196126764e+02L},
+ { 133, 3.702850010304228203619361766595188e+113L, 2.615012183045244997504364229640451e+02L},
+ { 134, 5.382185993533606831408011282180680e+114L, 2.641777952114705629819387237304983e+02L},
+ { 135, 4.998847513910708074886138384903503e+115L, 2.664064930829629291992229180080389e+02L},
+ { 136, 7.319772951205705290714895343765725e+116L, 2.690904500972066149904399547127459e+02L},
+ { 137, 6.848421094057670062594009587317800e+117L, 2.713264740087910541145381081360187e+02L},
+ { 138, 1.010128667266387330118655557439670e+119L, 2.740177037823638196820591849029368e+02L},
+ { 139, 9.519305320740161387005673326371742e+119L, 2.762609479419217458717268930548943e+02L},
+ { 140, 1.414180134172942262166117780415538e+121L, 2.789593462049731239805997612225225e+02L},
+ { 141, 1.342222050224362755567799939018416e+122L, 2.812097078322999141499430889615890e+02L},
+ { 142, 2.008135790525578012275887248190064e+123L, 2.839151732625743847113464478764937e+02L},
+ { 143, 1.919377531820838740461953912796334e+124L, 2.861725524625598214300585199811194e+02L},
+ { 144, 2.891715538356832337677277637393692e+125L, 2.888849865621503853318058668361715e+02L},
+ { 145, 2.783097421140216173669833173554685e+126L, 2.911492862049803958318425513467075e+02L},
+ { 146, 4.221904686000975213008825350594791e+127L, 2.938685931838587217703152078150682e+02L},
+ { 147, 4.091153209076117775294654765125387e+128L, 2.961397187917591321334485020705164e+02L},
+ { 148, 6.248418935281443315253061518880290e+129L, 2.988658054576228368335177677290160e+02L},
+ { 149, 6.095818281523415485189035600036826e+130L, 3.011436650977045912744409303456206e+02L},
+ { 150, 9.372628402922164972879592278320435e+131L, 3.038764407517190925835317637538491e+02L},
+ { 151, 9.204685605100357382635443756055608e+132L, 3.061609449345195156032371666451050e+02L},
+ { 152, 1.424639517244169075877698026304706e+134L, 3.089003212725653689717924875501115e+02L},
+ { 153, 1.408316897580354679543222894676508e+135L, 3.111913828559119510662771917368232e+02L},
+ { 154, 2.193944856556020376851654960509247e+136L, 3.139372738749789981303770159929780e+02L},
+ { 155, 2.182891191249549753291995486748587e+137L, 3.162348079728311976868071153945917e+02L},
+ { 156, 3.422553976227391787888581738394426e+138L, 3.189871298822285351766602129143822e+02L},
+ { 157, 3.427139170261793112668432914195282e+139L, 3.212910537781795057442315606309952e+02L},
+ { 158, 5.407635282439279024863959146663193e+140L, 3.240497249152555019802503905773217e+02L},
+ { 159, 5.449151280716251049142808333570499e+141L, 3.263599579803997372697712750069468e+02L},
+ { 160, 8.652216451902846439782334634661109e+142L, 3.291248987304893289019373105178388e+02L},
+ { 161, 8.773133561953164189119921417048503e+143L, 3.314413623453842002656833805822002e+02L},
+ { 162, 1.401659065208261123244738210815100e+145L, 3.342124950657217129769355235869871e+02L},
+ { 163, 1.430020770598365762826547190978906e+146L, 3.365351125461909625997483129483210e+02L},
+ { 164, 2.298720866941548242121370665736764e+147L, 3.393123614935459113996367512029408e+02L},
+ { 165, 2.359534271487303508663802865115195e+148L, 3.416410580200915432098062610964348e+02L},
+ { 166, 3.815876639122970081921475305123027e+149L, 3.444243492819024546325294555476904e+02L},
+ { 167, 3.940422233383796859468550784742375e+150L, 3.467590518325082983170660118731796e+02L},
+ { 168, 6.410672753726589737628078512606686e+151L, 3.495483132613057135572817498924306e+02L},
+ { 169, 6.659313574418616692501850826214614e+152L, 3.518889505474313717891729867563102e+02L},
+ { 170, 1.089814368133520255396773347143137e+154L, 3.546841116983559753215492759649881e+02L},
+ { 171, 1.138742621225583454417816491282699e+155L, 3.570306141039340316319725046620431e+02L},
+ { 172, 1.874480713189654839282450157086195e+156L, 3.598316061751694283638565827212503e+02L},
+ { 173, 1.970024734720259376142822529919069e+157L, 3.621839056984318105789060050504841e+02L},
+ { 174, 3.261596440949999420351463273329979e+158L, 3.649906614743839573918523321119929e+02L},
+ { 175, 3.447543285760453908249939427358371e+159L, 3.673486916723553246332128764603796e+02L},
+ { 176, 5.740409736071998979818575361060763e+160L, 3.701611454694221091735832041757908e+02L},
+ { 177, 6.102151615796003417602392786424317e+161L, 3.725248414049291537752241720710219e+02L},
+ { 178, 1.021792933020815818407706414268816e+163L, 3.753429290197141943213182518379188e+02L},
+ { 179, 1.092285139227484611750828308769953e+164L, 3.777122272107699087714019765010433e+02L},
+ { 180, 1.839227279437468473133871545683868e+165L, 3.805358858706044046975439658879064e+02L},
+ { 181, 1.977036102001747147268999238873614e+166L, 3.829107242420357345182410635396763e+02L},
+ { 182, 3.347393648576192621103646213144640e+167L, 3.857398925576812000481200381943731e+02L},
+ { 183, 3.617976066663197279502268607138714e+168L, 3.881202103948771554583876978800244e+02L},
+ { 184, 6.159204313380194422830709032186138e+169L, 3.909548283152901856671784873905578e+02L},
+ { 185, 6.693255723326914967079196923206621e+170L, 3.933405662199554802773565528842820e+02L},
+ { 186, 1.145612002288716162646511879986622e+172L, 3.961805749890033869139201290734808e+02L},
+ { 187, 1.251638820262133098843809824639638e+173L, 3.985716748368100669016680310801203e+02L},
+ { 188, 2.153750564302786385775442334374848e+174L, 4.014170169518333361195755439861694e+02L},
+ { 189, 2.365597370295431556814800568568916e+175L, 4.038134218518697092809591195343311e+02L},
+ { 190, 4.092126072175294132973340435312212e+176L, 4.066640410239938222636025628727416e+02L},
+ { 191, 4.518290977264274273516269085966630e+177L, 4.090656952799163391538090694865334e+02L},
+ { 192, 7.856882058576564735308813635799447e+178L, 4.119215363960216038115012008384132e+02L},
+ { 193, 8.720301586120049347886399335915597e+179L, 4.143283854688212247056640005399165e+02L},
+ { 194, 1.524235119363853558649909845345093e+181L, 4.171893945550849319430351545815753e+02L},
+ { 195, 1.700458809293409622837847870503541e+182L, 4.196013850273849715077134925516305e+02L},
+ { 196, 2.987500833953152974953823296876382e+183L, 4.224675092143154491720803243113780e+02L},
+ { 197, 3.349903854308016956990560304891976e+184L, 4.248845887561229600144932898807934e+02L},
+ { 198, 5.915251651227242890408570127815236e+185L, 4.277557762450099844083499904846464e+02L},
+ { 199, 6.666308670072953744411215006735033e+186L, 4.301778935808474524099034111726619e+02L},
+ { 200, 1.183050330245448578081714025563047e+188L, 4.330540936115580210858032055154733e+02L},
+ { 201, 1.339928042684663702626654216353742e+189L, 4.354811984889065281609687284059481e+02L},
+ { 202, 2.389761667095806127725062331637355e+190L, 4.383623613089592258461046359038445e+02L},
+ { 203, 2.720053926649867316332108059198095e+191L, 4.407944044679483154932573531817532e+02L},
+ { 204, 4.875113800875444500559127156540205e+192L, 4.436804813028034422365838800015565e+02L},
+ { 205, 5.576110549632227998480821521356096e+193L, 4.461174144470867236717248758880168e+02L},
+ { 206, 1.004273442980341567115180194247282e+195L, 4.490083574715930233167697144380681e+02L},
+ { 207, 1.154254883773871195685530054920712e+196L, 4.514501332403520927453221191936721e+02L},
+ { 208, 2.088888761399110459599574804034347e+197L, 4.543458955512943412904921303654661e+02L},
+ { 209, 2.412392707087390798982757814784288e+198L, 4.567924674923169037493930902035250e+02L},
+ { 210, 4.386666398938131965159107088472129e+199L, 4.596930030820118099710107198005162e+02L},
+ { 211, 5.090148611954394585853618989194847e+200L, 4.621443256257929702451350464689793e+02L},
+ { 212, 9.299732765748839766137307027560914e+201L, 4.650495893566838224239896531824616e+02L},
+ { 213, 1.084201654346286046786820844698502e+203L, 4.675056177915023953578597462384149e+02L},
+ { 214, 1.990142811870251709953383703898036e+204L, 4.704155653717056739067112841209430e+02L},
+ { 215, 2.331033556844515000591664816101780e+205L, 4.728762558196300581559333480849869e+02L},
+ { 216, 4.298708473639743693499308800419757e+206L, 4.757908437793898389091487161960852e+02L},
+ { 217, 5.058342818352597551283912650940863e+207L, 4.782561531731705177069678651529724e+02L},
+ { 218, 9.371184472534641251828493184915070e+208L, 4.811753388421789279189432647697525e+02L},
+ { 219, 1.107777077219218863731176870556049e+210L, 4.836452249029870185274552192473335e+02L},
+ { 220, 2.061660583957621075402268500681315e+211L, 4.865689663885312894564404319238602e+02L},
+ { 221, 2.448187340654473688845900883928868e+212L, 4.890433876045047713437582413067720e+02L},
+ { 222, 4.576886496385918787393036071512520e+213L, 4.919716437704035689016210049532724e+02L},
+ { 223, 5.459457769659476326126358971161377e+214L, 4.944505593759648901023943465164951e+02L},
+ { 224, 1.025222575190445808376040080018804e+216L, 4.973832898222586087538125183040064e+02L},
+ { 225, 1.228377998173382173378430768511310e+217L, 4.998666597781693102343863556567926e+02L},
+ { 226, 2.317003019930407526929850580842498e+218L, 5.028038248215308946318118819190806e+02L},
+ { 227, 2.788418055853577533569037844520673e+219L, 5.052916097956507129093997372336261e+02L},
+ { 228, 5.282766885441329161400059324320896e+220L, 5.082331704504853354020506188308074e+02L},
+ { 229, 6.385477347904692551873096663952341e+221L, 5.107253317992049525578409728375586e+02L},
+ { 230, 1.215036383651505707122013644593806e+223L, 5.136712497594085307768753631173019e+02L},
+ { 231, 1.475045267365983979482685329372991e+224L, 5.161677495097267460984035143958895e+02L},
+ { 232, 2.818884410071493240523071655457630e+225L, 5.191179871310748407323103315140384e+02L},
+ { 233, 3.436855472962742672194656817439068e+226L, 5.216187879632924466637057392705584e+02L},
+ { 234, 6.596189519567294182823987673770854e+227L, 5.245733082464325421605715415509069e+02L},
+ { 235, 8.076610361462445279657443520981810e+228L, 5.270783734774366056251274492735567e+02L},
+ { 236, 1.556700726617881427146461091009922e+230L, 5.300371400514581522300220561675430e+02L},
+ { 237, 1.914156655666599531278814114472689e+231L, 5.325464336185717368106956400519607e+02L},
+ { 238, 3.704947729350557796608577396603613e+232L, 5.355094107251296269247941756503175e+02L},
+ { 239, 4.574834407043172879756365733589726e+233L, 5.380228971705032474776588036462226e+02L},
+ { 240, 8.891874550441338711860585751848673e+234L, 5.409900496484716182284591087062989e+02L},
+ { 241, 1.102535092097404664021284141795124e+236L, 5.435076941039939024731252149649334e+02L},
+ { 242, 2.151833641206803968270261751947379e+237L, 5.464789873746283046260002279836872e+02L},
+ { 243, 2.679160273796693333571720464562151e+238L, 5.490007555473344509301014411495460e+02L},
+ { 244, 5.250474084544601682579438674751604e+239L, 5.519761555999215064935860813300292e+02L},
+ { 245, 6.563942670801898667250715138177270e+240L, 5.545020137578791779149129059696586e+02L},
+ { 246, 1.291616624797972013914541913988895e+242L, 5.574814871358538692982653220614473e+02L},
+ { 247, 1.621293839688068970810926639129786e+243L, 5.600114020945071551109754208431118e+02L},
+ { 248, 3.203209229498970594508063946692458e+244L, 5.629949158820188514724461827503642e+02L},
+ { 249, 4.037021660823291737319207331433167e+245L, 5.655288549909718627258461383033256e+02L},
+ { 250, 8.008023073747426486270159866731147e+246L, 5.685163767998810979056656928715010e+02L},
+ { 251, 1.013292436866646226067121040189725e+248L, 5.710543079301036466120647235423339e+02L},
+ { 252, 2.018021814584351474540080286416249e+249L, 5.740458058873925212123960003317055e+02L},
+ { 253, 2.563629865272614951949816231680004e+250L, 5.765876974188311668469334199521092e+02L},
+ { 254, 5.125775409044252745331803927497273e+251L, 5.795831401544110577948606732608800e+02L},
+ { 255, 6.537256156445168127472031390784010e+252L, 5.821289609639895929931789591401310e+02L},
+ { 256, 1.312198504715328702804941805439302e+254L, 5.851283175988906202701985302325455e+02L},
+ { 257, 1.680074832206408208760312067431491e+255L, 5.876780370488848127915307534548923e+02L},
+ { 258, 3.385472142165548053236749858033399e+256L, 5.906812771838122376944838501042720e+02L},
+ { 259, 4.351393815414597260689208254647560e+257L, 5.932348651105843505410042018693669e+02L},
+ { 260, 8.802227569630424938415549630886837e+258L, 5.962419588148277654239725611219798e+02L},
+ { 261, 1.135713785823209885039883354463013e+260L, 5.987993855179070439509779643755739e+02L},
+ { 262, 2.306183623243171333864874003292351e+261L, 6.018103033185888622775392172546075e+02L},
+ { 263, 2.986927256715041997654893222237725e+262L, 6.043715395500848085020638906397789e+02L},
+ { 264, 6.088324765361972321403267368691808e+263L, 6.073862524217351784412481024338698e+02L},
+ { 265, 7.915357230294861293785467038929971e+264L, 6.099512693760710307108091191120342e+02L},
+ { 266, 1.619494387586284637493269120072021e+266L, 6.129697487305168775157797147306590e+02L},
+ { 267, 2.113400380488727965440719699394302e+267L, 6.155385180344712802405221798896266e+02L},
+ { 268, 4.340244958731242828481961241793015e+268L, 6.185607357110277341942842509699390e+02L},
+ { 269, 5.685047023514678227035535991370674e+269L, 6.211332294140731193467421330701218e+02L},
+ { 270, 1.171866138857435563690129535284114e+271L, 6.241591576700261089524879781353910e+02L},
+ { 271, 1.540647743372477799526630253661453e+272L, 6.267353482349528202468390031433277e+02L},
+ { 272, 3.187475897692224733237152335972790e+273L, 6.297649597363221062704064412390968e+02L},
+ { 273, 4.205968339406864392707700592495766e+274L, 6.323448200301377799793930885652588e+02L},
+ { 274, 8.733683959676695769069797400565445e+275L, 6.353780878427101764951388634885349e+02L},
+ { 275, 1.156641293336887707994617662936336e+277L, 6.379615911278043512726565508096763e+02L},
+ { 276, 2.410496772870768032263264082556063e+278L, 6.409984887084273264961753258001839e+02L},
+ { 277, 3.203896382543178951145090926333650e+279L, 6.435856086339916897725259483592008e+02L},
+ { 278, 6.701181028580735129691874149505854e+280L, 6.466261098221179635627813428405177e+02L},
+ { 279, 8.938870907295469273694803684470883e+281L, 6.492168204158130554012456031575882e+02L},
+ { 280, 1.876330688002605836313724761861639e+283L, 6.522608994252872131707391512815615e+02L},
+ { 281, 2.511822724950026865908239835336318e+284L, 6.548551750851468011663522414822814e+02L},
+ { 282, 5.291252540167348458404703828449822e+285L, 6.579028064962253267583725793097144e+02L},
+ { 283, 7.108458311608576030520318734001781e+286L, 6.605006219827900387909982286290766e+02L},
+ { 284, 1.502715721407526962186935887279750e+288L, 6.635517807343865327985364980851438e+02L},
+ { 285, 2.025910618808444168698290839190508e+289L, 6.661531111630586893170032606311131e+02L},
+ { 286, 4.297766963225527111854636637620083e+290L, 6.692077725452063853880691612261325e+02L},
+ { 287, 5.814363475980234764164094708476757e+291L, 6.718125933788183104259753767475937e+02L},
+ { 288, 1.237756885408951808214135351634584e+293L, 6.748707330253423313179458123072684e+02L},
+ { 289, 1.680351044558287846843423370749783e+294L, 6.774790200669307425864744459833399e+02L},
+ { 290, 3.589494967685960243820992519740294e+295L, 6.805406139483228510291470757943147e+02L},
+ { 291, 4.889821539664617634314362008881867e+296L, 6.831523433341022350999864128419664e+02L},
+ { 292, 1.048132530564300391195729815764166e+298L, 6.862173677505911327770736488946695e+02L},
+ { 293, 1.432717711121732966854108068602387e+299L, 6.888325159431193024059262531047789e+02L},
+ { 294, 3.081509639859043150115445658346647e+300L, 6.919009475179298143880968317399366e+02L},
+ { 295, 4.226517247809112252219618802377042e+301L, 6.945194912994591222311430628117248e+02L},
+ { 296, 9.121268533982767724341719148706075e+302L, 6.975913069722538747607166237753426e+02L},
+ { 297, 1.255275622599306338909226784305981e+304L, 7.002132234382618218493907421004576e+02L},
+ { 298, 2.718138023126864781853832306314410e+305L, 7.032884004587592792111262841719049e+02L},
+ { 299, 3.753274111571925953338588085074884e+306L, 7.059136670116525082762509823738331e+02L},
+ { 300, 8.154414069380594345561496918943231e+307L, 7.089921829334154802705575123181962e+02L}
+};
+
+template<typename _Tp>
+ constexpr std::size_t _S_num_neg_double_factorials = 0;
+
+template<>
+ constexpr std::size_t _S_num_neg_double_factorials<float> = 27;
+template<>
+ constexpr std::size_t _S_num_neg_double_factorials<double> = 150;
+template<>
+ constexpr std::size_t _S_num_neg_double_factorials<long double> = 999;
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+template<>
+ constexpr std::size_t _S_num_neg_double_factorials<__float128> = 999;
+#endif
+
+
+constexpr _Factorial_table<long double>
+_S_neg_double_factorial_table[999]
+{
+ { -1, 1.000000000000000000000000000000000e+00L, 0.000000000000000000000000000000000e+00L},
+ { -3, -3.333333333333333333333333333333333e-01L, -1.098612288668109691395245236922526e+00L},
+ { -5, 6.666666666666666666666666666666667e-02L, -2.708050201102210065996004570148713e+00L},
+ { -7, -9.523809523809523809523809523809523e-03L, -4.653960350157523371101357313591893e+00L},
+ { -9, 1.058201058201058201058201058201058e-03L, -6.851184927493742753891847787436945e+00L},
+ { -11, -9.620009620009620009620009620009619e-05L, -9.249080200292113297953791365402074e+00L},
+ { -13, 7.400007400007400007400007400007400e-06L, -1.181402955775365003400727880696739e+01L},
+ { -15, -4.933338266671600004933338266671600e-07L, -1.452207975885586010000328337711611e+01L},
+ { -17, 2.901963686277411767607846039218588e-08L, -1.735529310291207618025281799498923e+01L},
+ { -19, -1.527349308567058825056761073272941e-09L, -2.029973208207851664026184542687709e+01L},
+ { -21, 7.273091945557422976460767015585433e-11L, -2.334425451980193963676244340724279e+01L},
+ { -23, -3.162213889372792598461203050254536e-12L, -2.647974873573108932756919623905299e+01L},
+ { -25, 1.264885555749117039384481220101814e-13L, -2.969862456059929007677071490550536e+01L},
+ { -27, -4.684761317589322368090671185562275e-15L, -3.299446142660361915095645061627294e+01L},
+ { -29, 1.615434937099766333824369374331819e-16L, -3.636175725659009317813972264863485e+01L},
+ { -31, -5.211080442257310754272159272038126e-18L, -3.979574446107523942406888697317721e+01L},
+ { -33, 1.579115285532518410385502809708523e-19L, -4.329225202254171965952607578806486e+01L},
+ { -35, -4.511757958664338315387150884881494e-21L, -4.684760008403113333923218786473423e+01L},
+ { -37, 1.219394042882253598753284022940944e-22L, -5.045851799667535778360028353576568e+01L},
+ { -39, -3.126651392005778458341753904976780e-24L, -5.412207964280500421104901621425352e+01L},
+ { -41, 7.625979004892142581321350987748245e-26L, -5.783565170950931201491577958729093e+01L},
+ { -43, -1.773483489509800600307290927383313e-27L, -6.159685182520287443838862210063677e+01L},
+ { -45, 3.941074421132890222905090949740695e-29L, -6.540351431497319419577987190770802e+01L},
+ { -47, -8.385264725814660048734236063278075e-31L, -6.925366191668325278260082257748019e+01L},
+ { -49, 1.711278515472379601782497155771036e-32L, -7.314548221479387939281152806436655e+01L},
+ { -51, -3.355448069553685493691170893668698e-34L, -7.707730784751820516445630791916221e+01L},
+ { -53, 6.331034093497519799417303572959807e-36L, -8.104759976107032699860077705819126e+01L},
+ { -55, -1.151097107908639963530418831447238e-37L, -8.505493294630279791726347996938258e+01L},
+ { -57, 2.019468610366035023737576897275856e-39L, -8.909798421413734806866775263819296e+01L},
+ { -59, -3.422828153162771226673859147925179e-41L, -9.317552165804306751928380301191265e+01L},
+ { -61, 5.611193693709461027334195324467507e-43L, -9.728639552221637876803519211533827e+01L},
+ { -63, -8.906656656681684170371738610265885e-45L, -1.014295302486079114559310353326265e+02L},
+ { -65, 1.370254870258720641595652093887059e-46L, -1.056039175185035485665852821074180e+02L},
+ { -67, -2.045156522774209912829331483413521e-48L, -1.098086101378945146262553541037817e+02L},
+ { -69, 2.963994960542333206999031135381915e-50L, -1.140427166424917740084573521725145e+02L},
+ { -71, -4.174640789496243953519762162509739e-52L, -1.183053965195330894297868067050275e+02L},
+ { -73, 5.718686013008553360985975565081835e-54L, -1.225958559606814805588789155624660e+02L},
+ { -75, -7.624914684011404481314634086775780e-56L, -1.269133440742177909994756794658409e+02L},
+ { -77, 9.902486602612213612096927385423091e-58L, -1.312571494960714748486429757872492e+02L},
+ { -79, -1.253479316786356153429990808281404e-59L, -1.356265973485384963428159213287306e+02L},
+ { -81, 1.547505329365871794358013343557289e-61L, -1.400210465032109351083969022764207e+02L},
+ { -83, -1.864464252248038306455437763322035e-63L, -1.444398871110075330318723744997121e+02L},
+ { -85, 2.193487355585927419359338545084747e-65L, -1.488825383674978494867226684508114e+02L},
+ { -87, -2.521249834006813125700389132281318e-67L, -1.533484464861524332053011857200959e+02L},
+ { -89, 2.832864982030127107528527114922829e-69L, -1.578370828558845730436190012607657e+02L},
+ { -91, -3.113038441791348469811568258156955e-71L, -1.623479423624014230847778414457742e+02L},
+ { -93, 3.347353163216503730980180922749414e-73L, -1.668805418555546790221022510072391e+02L},
+ { -95, -3.523529645491056558926506234473068e-75L, -1.714344187471552198567120377723531e+02L},
+ { -97, 3.632504789166037689614954880900070e-77L, -1.760091297256586026788287593940571e+02L},
+ { -99, -3.669196756733371403651469576666738e-79L, -1.806042495757931926056811934458673e+02L},
+ {-101, 3.632868075973635053120266907590829e-81L, -1.852193700926344520565653917127803e+02L},
+ {-103, -3.527056384440422381670162046204689e-83L, -1.898540990808640878273339940278337e+02L},
+ {-105, 3.359101318514687982543011472575894e-85L, -1.945080594310216111984353513414256e+02L},
+ {-107, -3.139347026649241105180384553809247e-87L, -1.991808882654835173717397501584489e+02L},
+ {-109, 2.880134886834166151541637205329584e-89L, -2.038722361477126610721170666106581e+02L},
+ {-111, -2.594716114265014550938411896693319e-91L, -2.085817663490249952078804075186121e+02L},
+ {-113, 2.296208950677004027379125572294973e-93L, -2.133091541677373357764625390122281e+02L},
+ {-115, -1.996703435371307849894891801995629e-95L, -2.180540862961005858418700511772645e+02L},
+ {-117, 1.706584132795989615294779317944982e-97L, -2.228162602308983419607140290926748e+02L},
+ {-119, -1.434104313273940853188890183147043e-99L, -2.275953837240098713460689164539912e+02L},
+ {-121, 1.185210176259455250569330729873590e-101L, -2.323911742696066124341928036099214e+02L},
+ {-123, -9.635855091540286589994558779460078e-104L, -2.372033586249790299294548122198813e+02L},
+ {-125, 7.708684073232229271995647023568062e-106L, -2.420316723622813310532570902195599e+02L},
+ {-127, -6.069829978923015174799722065801623e-108L, -2.468758594487399223263045310272762e+02L},
+ {-129, 4.705294557304662926201334934729941e-110L, -2.517356718531015944411726187775446e+02L},
+ {-131, -3.591827906339437348245293843305299e-112L, -2.566108691763027459853220427887141e+02L},
+ {-133, 2.700622485969501765597965295718269e-114L, -2.615012183045244997504364229640451e+02L},
+ {-135, -2.000461100718149455998492811643163e-116L, -2.664064930829629291992229180080389e+02L},
+ {-137, 1.460190584465802522626637088790630e-118L, -2.713264740087910541145381081360187e+02L},
+ {-139, -1.050496823356692462321321646611964e-120L, -2.762609479419217458717268930548943e+02L},
+ {-141, 7.450332080543918172491642883772792e-123L, -2.812097078322999141499430889615890e+02L},
+ {-143, -5.210022433946795924819330687953002e-125L, -2.861725524625598214300585199811194e+02L},
+ {-145, 3.593118919963307534358159095140001e-127L, -2.911492862049803958318425513467075e+02L},
+ {-147, -2.444298585009052744461332717782314e-129L, -2.961397187917591321334485020705164e+02L},
+ {-149, 1.640468848999364258027740079048533e-131L, -3.011436650977045912744409303456206e+02L},
+ {-151, -1.086403211257857124521682171555320e-133L, -3.061609449345195156032371666451050e+02L},
+ {-153, 7.100674583384687088377007657224312e-136L, -3.111913828559119510662771917368232e+02L},
+ {-155, -4.581080376377217476372263004660846e-138L, -3.162348079728311976868071153945917e+02L},
+ {-157, 2.917885590049183105969594270484616e-140L, -3.212910537781795057442315606309952e+02L},
+ {-159, -1.835148169842253525767040421688438e-142L, -3.263599579803997372697712750069468e+02L},
+ {-161, 1.139843583752952500476422622166731e-144L, -3.314413623453842002656833805822002e+02L},
+ {-163, -6.992905421797254604149832037832708e-147L, -3.365351125461909625997483129483210e+02L},
+ {-165, 4.238124498058942184333231538080429e-149L, -3.416410580200915432098062610964348e+02L},
+ {-167, -2.537799100634097116367204513820616e-151L, -3.467590518325082983170660118731796e+02L},
+ {-169, 1.501656272564554506726156517053619e-153L, -3.518889505474313717891729867563102e+02L},
+ {-171, -8.781615629032482495474599514933445e-156L, -3.570306141039340316319725046620431e+02L},
+ {-173, 5.076078398284671962702080644470200e-158L, -3.621839056984318105789060050504841e+02L},
+ {-175, -2.900616227591241121544046082554400e-160L, -3.673486916723553246332128764603796e+02L},
+ {-177, 1.638766230277537356804545809352768e-162L, -3.725248414049291537752241720710219e+02L},
+ {-179, -9.155118604902443334103607873479154e-165L, -3.777122272107699087714019765010433e+02L},
+ {-181, 5.058076577294167587902545786452571e-167L, -3.829107242420357345182410635396763e+02L},
+ {-183, -2.763976271745446769345653435219984e-169L, -3.881202103948771554583876978800244e+02L},
+ {-185, 1.494041227970511767213866721740532e-171L, -3.933405662199554802773565528842820e+02L},
+ {-187, -7.989525283264768808630303324815679e-174L, -3.985716748368100669016680310801203e+02L},
+ {-189, 4.227262054637443814090107579267555e-176L, -4.038134218518697092809591195343311e+02L},
+ {-191, -2.213226206616462729890108680244793e-178L, -4.090656952799163391538090694865334e+02L},
+ {-193, 1.146749329853089497352387917225281e-180L, -4.143283854688212247056640005399165e+02L},
+ {-195, -5.880765794118407678730194447309134e-183L, -4.196013850273849715077134925516305e+02L},
+ {-197, 2.985160301582948060269134237212758e-185L, -4.248845887561229600144932898807934e+02L},
+ {-199, -1.500080553559270382044791073976260e-187L, -4.301778935808474524099034111726619e+02L},
+ {-201, 7.463087331140648666889507830727664e-190L, -4.354811984889065281609687284059481e+02L},
+ {-203, -3.676397700069285057581038340259933e-192L, -4.407944044679483154932573531817532e+02L},
+ {-205, 1.793364731741114662234652848907284e-194L, -4.461174144470867236717248758880168e+02L},
+ {-207, -8.663597737879780976978999270083499e-197L, -4.514501332403520927453221191936721e+02L},
+ {-209, 4.145262075540565060755502043102153e-199L, -4.567924674923169037493930902035250e+02L},
+ {-211, -1.964579182720646948225356418531826e-201L, -4.621443256257929702451350464689793e+02L},
+ {-213, 9.223376444697872996363175673858338e-204L, -4.675056177915023953578597462384149e+02L},
+ {-215, -4.289942532417615347145663104120157e-206L, -4.728762558196300581559333480849869e+02L},
+ {-217, 1.976932042588762832786019863649842e-208L, -4.782561531731705177069678651529724e+02L},
+ {-219, -9.027086952460104259296894354565488e-211L, -4.836452249029870185274552192473335e+02L},
+ {-221, 4.084654729619956678414884323332800e-213L, -4.890433876045047713437582413067720e+02L},
+ {-223, -1.831683735255585954446136467862242e-215L, -4.944505593759648901023943465164951e+02L},
+ {-225, 8.140816601135937575316162079387743e-218L, -4.998666597781693102343863556567926e+02L},
+ {-227, -3.586262819883672940667912810302971e-220L, -5.052916097956507129093997372336261e+02L},
+ {-229, 1.566053633136975083261097297075533e-222L, -5.107253317992049525578409728375586e+02L},
+ {-231, -6.779452957302922438359728558768542e-225L, -5.161677495097267460984035143958895e+02L},
+ {-233, 2.909636462361769286849668909342722e-227L, -5.216187879632924466637057392705584e+02L},
+ {-235, -1.238143175473093313553050599720307e-229L, -5.270783734774366056251274492735567e+02L},
+ {-237, 5.224232807903347314569833754094123e-232L, -5.325464336185717368106956400519607e+02L},
+ {-239, -2.185871467741986324087796549830177e-234L, -5.380228971705032474776588036462226e+02L},
+ {-241, 9.070006090215710888331106015892851e-237L, -5.435076941039939024731252149649334e+02L},
+ {-243, -3.732512794327453040465475726704877e-239L, -5.490007555473344509301014411495460e+02L},
+ {-245, 1.523474609929572669577745194573419e-241L, -5.545020137578791779149129059696586e+02L},
+ {-247, -6.167913400524585706792490666289146e-244L, -5.600114020945071551109754208431118e+02L},
+ {-249, 2.477073654829150886262044444292830e-246L, -5.655288549909718627258461383033256e+02L},
+ {-251, -9.868819341948808311800973881644741e-249L, -5.710543079301036466120647235423339e+02L},
+ {-253, 3.900719107489647554071531178515708e-251L, -5.765876974188311668469334199521092e+02L},
+ {-255, -1.529693767642999040812365168045375e-253L, -5.821289609639895929931789591401310e+02L},
+ {-257, 5.952115827404665528452782755040371e-256L, -5.876780370488848127915307534548923e+02L},
+ {-259, -2.298114219075160435696055117776205e-258L, -5.932348651105843505410042018693669e+02L},
+ {-261, 8.805035322127051477762663286498870e-261L, -5.987993855179070439509779643755739e+02L},
+ {-263, -3.347922175713707786221544975855083e-263L, -6.043715395500848085020638906397789e+02L},
+ {-265, 1.263366858759889730649639613530220e-265L, -6.099512693760710307108091191120342e+02L},
+ {-267, -4.731711081497714347002395556292960e-268L, -6.155385180344712802405221798896266e+02L},
+ {-269, 1.759000402043759980298288310889576e-270L, -6.211332294140731193467421330701218e+02L},
+ {-271, -6.490776391305387381174495612138657e-273L, -6.267353482349528202468390031433277e+02L},
+ {-273, 2.377573769708933106657324400050790e-275L, -6.323448200301377799793930885652588e+02L},
+ {-275, -8.645722798941574933299361454730147e-278L, -6.379615911278043512726565508096763e+02L},
+ {-277, 3.121199566404900697942007745389945e-280L, -6.435856086339916897725259483592008e+02L},
+ {-279, -1.118709522008924981341221414118260e-282L, -6.492168204158130554012456031575882e+02L},
+ {-281, 3.981172676188345129328190085830106e-285L, -6.548551750851468011663522414822814e+02L},
+ {-283, -1.406774797239697925557664341282723e-287L, -6.605006219827900387909982286290766e+02L},
+ {-285, 4.936051920139290966868997688711309e-290L, -6.661531111630586893170032606311131e+02L},
+ {-287, -1.719878717818568281139023584916832e-292L, -6.718125933788183104259753767475937e+02L},
+ {-289, 5.951137431898160142349562577566894e-295L, -6.774790200669307425864744459833399e+02L},
+ {-291, -2.045064409586996612491258617720582e-297L, -6.831523433341022350999864128419664e+02L},
+ {-293, 6.979742012242309257649346818158983e-300L, -6.888325159431193024059262531047789e+02L},
+ {-295, -2.366014241438070934796388751918300e-302L, -6.945194912994591222311430628117248e+02L},
+ {-297, 7.966377917299902137361578289287204e-305L, -7.002132234382618218493907421004576e+02L},
+ {-299, -2.664340440568529142930293742236523e-307L, -7.059136670116525082762509823738331e+02L},
+ {-301, 8.851629370659565258904630372878815e-310L, -7.116207772764013840048291776306221e+02L},
+ {-303, -2.921329825300186554093937416791688e-312L, -7.173345100819107531471086211344576e+02L},
+ {-305, 9.578130574754710013422745628825207e-315L, -7.230548218585181647704607695711094e+02L},
+ {-307, -3.119912239333781763329884569649905e-317L, -7.287816696061053619240592321383919e+02L},
+ {-309, 1.009680336353974680689283032249160e-319L, -7.345150108830031073862230796903678e+02L},
+ {-311, -3.246560567054580966846569235527846e-322L, -7.402548037951823415204190752558005e+02L},
+ {-313, 1.037239797781016283337562056079184e-324L, -7.460010069857224947370978405650577e+02L},
+ {-315, -3.292824754860369153452577955806934e-327L, -7.517535796245481277995944431155721e+02L},
+ {-317, 1.038745979451220553139614497099979e-329L, -7.575124813984254084137942052848708e+02L},
+ {-319, -3.256256988875299539622615978369840e-332L, -7.632776725012102529850394208951978e+02L},
+ {-321, 1.014410276908193002997699681735153e-334L, -7.690491136243402688497390649491436e+02L},
+ {-323, -3.140589092595024777082661553359606e-337L, -7.748267659475629253899976269989046e+02L},
+ {-325, 9.663351054138537775638958625721864e-340L, -7.806105911298926628752526331069223e+02L},
+ {-327, -2.955153227565302072060843616428705e-342L, -7.864005513007899162670251947960541e+02L},
+ {-329, 8.982228655213684109607427405558372e-345L, -7.921966090515552881589514982092694e+02L},
+ {-331, -2.713664246288122087494691059081079e-347L, -7.979987274269323510597361150488461e+02L},
+ {-333, 8.149141880745111373857931108351588e-350L, -8.038068699169127948868947011937226e+02L},
+ {-335, -2.432579665894063096674009286075101e-352L, -8.096210004487378613211655325233125e+02L},
+ {-337, 7.218337287519475064314567614466175e-355L, -8.154410833790902230456703990779609e+02L},
+ {-339, -2.129303034666511818381878352349904e-357L, -8.212670834864706733056477758084994e+02L},
+ {-341, 6.244290424241970141882341209237255e-360L, -8.270989659637541900956388837110069e+02L},
+ {-343, -1.820492835055967971394268574121649e-362L, -8.329366964109201300109549419413364e+02L},
+ {-345, 5.276790826249182525780488620642460e-365L, -8.387802408279514897677576993432953e+02L},
+ {-347, -1.520688998919072774000140812865262e-367L, -8.446295656078983489601113761896812e+02L},
+ {-349, 4.357275068536025140401549607063789e-370L, -8.504846375301007761233108577121798e+02L},
+ {-351, -1.241388908414821977322378805431279e-372L, -8.563454237535666419335500808645127e+02L},
+ {-353, 3.516682460098645828108721828417221e-375L, -8.622118918104999387009458009817007e+02L},
+ {-355, -9.906147774925762896080906558921748e-378L, -8.680840095999753544968760148474399e+02L},
+ {-357, 2.774831309503014816829385590734383e-380L, -8.739617453817549935736261474456788e+02L},
+ {-359, -7.729335123963829573340906937978783e-383L, -8.798450677702432724466742403312835e+02L},
+ {-361, 2.141090062039841987075043473124317e-385L, -8.857339457285761533666922951950592e+02L},
+ {-363, -5.898319730137305749518026096761204e-388L, -8.916283485628410041462114275879119e+02L},
+ {-365, 1.615978008256796095758363314181152e-390L, -8.975282459164234956499042957785766e+02L},
+ {-367, -4.403209831762387181902897313845100e-393L, -9.034336077644780659215237277177351e+02L},
+ {-369, 1.193281797225579182087506047112493e-395L, -9.093444044085185931081809815646175e+02L},
+ {-371, -3.216392984435523401853116029952812e-398L, -9.152606064711260282474308034470897e+02L},
+ {-373, 8.623037491784245045182616702286359e-401L, -9.211821848907698437887665380521914e+02L},
+ {-375, -2.299476664475798678715364453943029e-403L, -9.271091109167402546039640612887925e+02L},
+ {-377, 6.099407598079041588104414997196363e-406L, -9.330413561041882653672008207627198e+02L},
+ {-379, -1.609342374163335511373196569181099e-408L, -9.389788923092706917150180573463734e+02L},
+ {-381, 4.223995732712166696517576297063251e-411L, -9.449216916843973926794607433910122e+02L},
+ {-383, -1.102870948488816369847931148058290e-413L, -9.508697266735780386694537979281647e+02L},
+ {-385, 2.864599866204717843760860124826727e-416L, -9.568229700078658228932218535827992e+02L},
+ {-387, -7.402066837738289001966046834177590e-419L, -9.627813947008956046994851865699901e+02L},
+ {-389, 1.902844945434007455518263967654908e-421L, -9.687449740445140509923338068036222e+02L},
+ {-391, -4.866611113641962801836992244641708e-424L, -9.747136816044994167633900942533056e+02L},
+ {-393, 1.238323438585741170950888611868119e-426L, -9.806874912163686779989347635013976e+02L},
+ {-395, -3.134996047052509293546553447767390e-429L, -9.866663769812697998677084683761052e+02L},
+ {-397, 7.896715483759469253265877702184862e-432L, -9.926503132619569902807919004062821e+02L},
+ {-399, -1.979126687659014850442575865209239e-434L, -9.986392746788468537373015258185357e+02L},
+ {-401, 4.935478024087318829033855025459448e-437L, -1.004633236106153422923152204905885e+03L},
+ {-403, -1.224684373222659759065472711032121e-439L, -1.010632172668100105905134856671993e+03L},
+ {-405, 3.023912032648542614976475829708941e-442L, -1.016636059735206645045316596952909e+03L},
+ {-407, -7.429759293976763181760382873977743e-445L, -1.022644872920649240033746636201906e+03L},
+ {-409, 1.816567064541995887960973807818519e-447L, -1.028658588076692041779460158411034e+03L},
+ {-411, -4.419871203265196807690933838974499e-450L, -1.034677181291188276386170593775936e+03L},
+ {-413, 1.070186732025471382007490033650000e-452L, -1.040700628884149309141891996893099e+03L},
+ {-415, -2.578763209699931040981903695542168e-455L, -1.046728907404380007439968228449617e+03L},
+ {-417, 6.184084435731249498757562819045967e-458L, -1.052761993626178808888552258605415e+03L},
+ {-419, -1.475915139792660978223762009318846e-460L, -1.058799864546100946619585192527100e+03L},
+ {-421, 3.505736674091831302194209048263293e-463L, -1.064842497379783328037173908755497e+03L},
+ {-423, -8.287793555772650832610423281946319e-466L, -1.070889869558829606006785349899115e+03L},
+ {-425, 1.950069071946506078261276066340310e-468L, -1.076941958727754022836236403183440e+03L},
+ {-427, -4.566906491678000183281676970352015e-471L, -1.082998742740982647390093145030309e+03L},
+ {-429, 1.064546967757109599832558734347789e-473L, -1.089060199659910664361603821286762e+03L},
+ {-431, -2.469946560921367981050020265308096e-476L, -1.095126307750014412149351488093087e+03L},
+ {-433, 5.704264574876138524364942876000221e-479L, -1.101197045478016901996071772667059e+03L},
+ {-435, -1.311325189626698511348262730114993e-481L, -1.107272391509105586089251049269570e+03L},
+ {-437, 3.000744141022193389812958192482822e-484L, -1.113352324704201176240066829533268e+03L},
+ {-439, -6.835408066109779931236806816589572e-487L, -1.119436824117276347590060041663011e+03L},
+ {-441, 1.549979153312875267854151205575867e-489L, -1.125525868992723193583061237623742e+03L},
+ {-443, -3.498824273843962229919077213489541e-492L, -1.131619438762768329221147244881588e+03L},
+ {-445, 7.862526458076319617795679131437171e-495L, -1.137717513044934569434065819755484e+03L},
+ {-447, -1.758954464894031234406192199426660e-497L, -1.143820071639548138266453493267510e+03L},
+ {-449, 3.917493240298510544334503784914611e-500L, -1.149927094527290392559707015058336e+03L},
+ {-451, -8.686237783366985685885817704910445e-503L, -1.156038561866793070907635722009339e+03L},
+ {-453, 1.917491784407723109467067926028796e-505L, -1.162154453992276104927827203545746e+03L},
+ {-455, -4.214267658038951888938610826436914e-508L, -1.168274751411227055343586803063981e+03L},
+ {-457, 9.221592249538187940784706403581869e-511L, -1.174399434802121260042779934445134e+03L},
+ {-459, -2.009061492274115019778803138035266e-513L, -1.180528485012181805197215204773775e+03L},
+ {-461, 4.358050959379859045073325679035283e-516L, -1.186661883055178453715587929967049e+03L},
+ {-463, -9.412637061295591890007182892084844e-519L, -1.192799610109264687789667777148308e+03L},
+ {-465, 2.024223023934535890324125353136526e-521L, -1.198941647514852044101592946042999e+03L},
+ {-467, -4.334524676519348801550589621277357e-524L, -1.205087976772520941413122477331733e+03L},
+ {-469, 9.242056879572172284756054629589247e-527L, -1.211238579540967220777897902071540e+03L},
+ {-471, -1.962220144282839126275170834307696e-529L, -1.217393437634983638526717592544866e+03L},
+ {-473, 4.148456964657165171829113814604008e-532L, -1.223552533023475571494252378636177e+03L},
+ {-475, -8.733593609804558256482344872850543e-535L, -1.229715847827510212703462924734518e+03L},
+ {-477, 1.830942056562800473057095361184600e-537L, -1.235883364318398553920397884347392e+03L},
+ {-479, -3.822426005350314139993936035875992e-540L, -1.242055064915809469155514562178791e+03L},
+ {-481, 7.946831611954915051962444981031169e-543L, -1.248230932185915230335936145291388e+03L},
+ {-483, -1.645306751957539348232390265223845e-545L, -1.254410948839567803023243496103564e+03L},
+ {-485, 3.392385055582555357180186113863597e-548L, -1.260595097730505286219960977058494e+03L},
+ {-487, -6.965883071011407304271429391917037e-551L, -1.266783361853587876010690887889745e+03L},
+ {-489, 1.424515965442005583695588832702871e-553L, -1.272975724343062748036151065492788e+03L},
+ {-491, -2.901254512101844365978795993284869e-556L, -1.279172168470857268614885255817803e+03L},
+ {-493, 5.884897590470272547624332643579856e-559L, -1.285372677644899958722318062468038e+03L},
+ {-495, -1.188868200095004555075622756278759e-561L, -1.291577235407468649023771255853074e+03L},
+ {-497, 2.392088933792765704377510576013599e-564L, -1.297785825433565277750206063129031e+03L},
+ {-499, -4.793765398382296000756534220468135e-567L, -1.303998431529316796415491154267015e+03L},
+ {-501, 9.568394008747097805901265909118033e-570L, -1.310215037630401661214146150280682e+03L},
+ {-503, -1.902265210486500557833253659864420e-572L, -1.316435627800501400420564911396318e+03L},
+ {-505, 3.766861802943565461055947841315683e-575L, -1.322660186229776760246049868996457e+03L},
+ {-507, -7.429707698113541343305617044015155e-578L, -1.328888697233367943409552089116510e+03L},
+ {-509, 1.459667524187336216759453250297673e-580L, -1.335121145249918466152386952972570e+03L},
+ {-511, -2.856492219544689269587971135611884e-583L, -1.341357514840122170586584414573452e+03L},
+ {-513, 5.568210954278146724343023656163517e-586L, -1.347597790685292940120779177716107e+03L},
+ {-515, -1.081206010539445965891849253623984e-588L, -1.353841957585956676266148539364387e+03L},
+ {-517, 2.091307563906085040409766448015443e-591L, -1.360090000460465105397031433612124e+03L},
+ {-519, -4.029494342786291021984135737987366e-594L, -1.366341904343630994035360179237488e+03L},
+ {-521, 7.734154208802861846418686637211834e-597L, -1.372597654385384360953449074944005e+03L},
+ {-523, -1.478805776061732666619251747076833e-599L, -1.378857235849449283854259218120919e+03L},
+ {-525, 2.816772906784252698322384280146348e-602L, -1.385120634112040907599961334767737e+03L},
+ {-527, -5.344920126725337188467522353218876e-605L, -1.391387834660582269926140033710152e+03L},
+ {-529, 1.010381876507625177404068497772945e-607L, -1.397658823092440569307753539373772e+03L},
+ {-531, -1.902790727886299769122539543828521e-610L, -1.403933585113682508141160080221337e+03L},
+ {-533, 3.569963842188179679404389388046005e-613L, -1.410212106537848352681080331035940e+03L},
+ {-535, -6.672829611566690989540914744011225e-616L, -1.416494373284744359228985489186189e+03L},
+ {-537, 1.242612590608322344421026954192034e-618L, -1.422780371379253223916558538853133e+03L},
+ {-539, -2.305403693150876334732888597758876e-621L, -1.429070086950162221070831187917985e+03L},
+ {-541, 4.261374663864836108563564875709568e-624L, -1.435363506229008702592401373530570e+03L},
+ {-543, -7.847835476730821562732163675339904e-627L, -1.441660615548942638030635705806125e+03L},
+ {-545, 1.439969812244187442703149298227505e-629L, -1.447961401343605882105613781591560e+03L},
+ {-547, -2.632485945601805196897896340452478e-632L, -1.454265850146027863311246514213158e+03L},
+ {-549, 4.795056367216402908739337596452602e-635L, -1.460573948587537393942788393790429e+03L},
+ {-551, -8.702461646490749380652155347463887e-638L, -1.466885683396690308429980693254678e+03L},
+ {-553, 1.573682033723462817477785777118244e-640L, -1.473201041398212643229258991539603e+03L},
+ {-555, -2.835463123826059130590605003816655e-643L, -1.479520009511959077739623091780783e+03L},
+ {-557, 5.090598067910339552227298031986813e-646L, -1.485842574751886361761534518717628e+03L},
+ {-559, -9.106615506100786318832375728062277e-649L, -1.492168724225041460921060848672539e+03L},
+ {-561, 1.623282621408339807278498347248178e-651L, -1.498498445130564157236767572105300e+03L},
+ {-563, -2.883272862181775856622554790849339e-654L, -1.504831724758703847618768409093918e+03L},
+ {-565, 5.103137809171284701986822638671396e-657L, -1.511168550489850288561951299920760e+03L},
+ {-567, -9.000243049684805470876230403300522e-660L, -1.517508909793578040632637633611893e+03L},
+ {-569, 1.581765035093990416674205694780408e-662L, -1.523852790227704371553619818421277e+03L},
+ {-571, -2.770166436241664477538013475972694e-665L, -1.530200179437360381770349784617217e+03L},
+ {-573, 4.834496398327512177204211999952345e-668L, -1.536551065154075121334594979806342e+03L},
+ {-575, -8.407819823178282047311673043395383e-671L, -1.542905435194872471774603251304604e+03L},
+ {-577, 1.457161147864520285495957199895214e-673L, -1.549263277461380571336079826611875e+03L},
+ {-579, -2.516685920318687885139822452323340e-676L, -1.555624579938953566579330002902181e+03L},
+ {-581, 4.331645301753335430533257232914526e-679L, -1.561989330695805477807910827868915e+03L},
+ {-583, -7.429923330623216861978142766577231e-682L, -1.568357517882155970186117240585909e+03L},
+ {-585, 1.270072364209096899483443207961920e-684L, -1.574729129729387826679561977834546e+03L},
+ {-587, -2.163666719265923167774179229918092e-687L, -1.581104154549215923127862278332116e+03L},
+ {-589, 3.673457927446389079412867962509494e-690L, -1.587482580732867509833800470088546e+03L},
+ {-591, -6.215664851855142266350030393417080e-693L, -1.593864396750273608031975512654631e+03L},
+ {-593, 1.048172824933413535640814568873032e-695L, -1.600249591149271333484522132398281e+03L},
+ {-595, -1.761634999888089975866915241803415e-698L, -1.606638152554816963244477779092824e+03L},
+ {-597, 2.950812395122428770296340438531683e-701L, -1.613030069668209565331283145621615e+03L},
+ {-599, -4.926231043610064725035626775511993e-704L, -1.619425331266325014680093344794496e+03L},
+ {-601, 8.196723866239708361124171007507475e-707L, -1.625823926200860222259366425301076e+03L},
+ {-603, -1.359324024252024603834854230100742e-709L, -1.632225843397587407701826987771284e+03L},
+ {-605, 2.246816569011610915429511124133458e-712L, -1.638631071855618249164551634260441e+03L},
+ {-607, -3.701509998371681903508255558704214e-715L, -1.645039600646677747426701606495287e+03L},
+ {-609, 6.078013133615241220867414710515950e-718L, -1.651451418914387644450385476508015e+03L},
+ {-611, -9.947648336522489723187258118684043e-721L, -1.657866515873559239773259914619352e+03L},
+ {-613, 1.622781131569737312102325957370970e-723L, -1.664284880809495451172699647212929e+03L},
+ {-615, -2.638668506617459044068822694912146e-726L, -1.670706503077301969042562415156115e+03L},
+ {-617, 4.276610221422137834795498695157448e-729L, -1.677131372101207356856559986834725e+03L},
+ {-619, -6.908901811667427842965264450981339e-732L, -1.683559477373891952958788022224875e+03L},
+ {-621, 1.112544575147733952168319557323887e-734L, -1.689990808455825431723780510767452e+03L},
+ {-623, -1.785785834908080180045456753328872e-737L, -1.696425354974612884867203679051565e+03L},
+ {-625, 2.857257335852928288072730805326195e-740L, -1.702863106624349286365606716384470e+03L},
+ {-627, -4.557029243784574622125567472609561e-743L, -1.709304053164982207061072932631246e+03L},
+ {-629, 7.244879560865778413554161323703594e-746L, -1.715748184421682647585690562920150e+03L},
+ {-631, -1.148158409012009257298599258907067e-748L, -1.722195490284223860742969300953816e+03L},
+ {-633, 1.813836349150093613425907202064877e-751L, -1.728645960706368036930106502456193e+03L},
+ {-635, -2.856435195511958446340011341834452e-754L, -1.735099585705260728577754702597135e+03L},
+ {-637, 4.484199678982666320784947161435560e-757L, -1.741556355360832891924018895525587e+03L},
+ {-639, -7.017526884166926949585206825407763e-760L, -1.748016259815210426728138840531945e+03L},
+ {-641, 1.094777985049442581838565807395907e-762L, -1.754479289272131096767972247069947e+03L},
+ {-643, -1.702609619050455026187505143695034e-765L, -1.760945433996368716155236815573495e+03L},
+ {-645, 2.639704835737139575484504098751991e-768L, -1.767414684313164488644705662656989e+03L},
+ {-647, -4.079914738388160085756575113990712e-771L, -1.773887030607665389209360731872647e+03L},
+ {-649, 6.286463387346933876358359189508031e-774L, -1.780362463324369479204038725824331e+03L},
+ {-651, -9.656625787015259410688723793407114e-777L, -1.786840972966578048446468488129240e+03L},
+ {-653, 1.478809462023776326292300734059282e-779L, -1.793322550095854479507881439200438e+03L},
+ {-655, -2.257724369501948589759237761922569e-782L, -1.799807185331489731426631622544834e+03L},
+ {-657, 3.436414565451976544534608465635568e-785L, -1.806294869349974341938514221876117e+03L},
+ {-659, -5.214589628910434817199709356047903e-788L, -1.812785592884476849157718095726937e+03L},
+ {-661, 7.888940437080839360362646529573228e-791L, -1.819279346724328535443558785315416e+03L},
+ {-663, -1.189885435457140175016990426783292e-793L, -1.825776121714514397951257052611777e+03L},
+ {-665, 1.789301406702466428596978085388410e-796L, -1.832275908755170252090972192120334e+03L},
+ {-667, -2.682610804651373955917508373895666e-799L, -1.838778698801085875808962216984506e+03L},
+ {-669, 4.009881621302502176259354818977080e-802L, -1.845284482861214104258993567431152e+03L},
+ {-671, -5.975978571240688787271765751083577e-805L, -1.851793251998185786051806900112542e+03L},
+ {-673, 8.879611547162984825069488486008286e-808L, -1.858304997327830513856385811276899e+03L},
+ {-675, -1.315498006987108862973257553482709e-810L, -1.864819710018703043679773065654119e+03L},
+ {-677, 1.943128518444769369236717213416114e-813L, -1.871337381291615318673013757589439e+03L},
+ {-679, -2.861750395353121309626976750244645e-816L, -1.877858002419174014800235831954586e+03L},
+ {-681, 4.202276645158768442917733847642650e-819L, -1.884381564725323527166644458768342e+03L},
+ {-683, -6.152674443863496988166521006797438e-822L, -1.890908059584894317230027303917152e+03L},
+ {-685, 8.982006487391966406082512418682391e-825L, -1.897437478423156542519943253378358e+03L},
+ {-687, -1.307424525093444891715067309851876e-827L, -1.903969812715378891859779734219214e+03L},
+ {-689, 1.897568251224158043127819027361214e-830L, -1.910505053986392550429977690799808e+03L},
+ {-691, -2.746119032162312652862256190103059e-833L, -1.917043193810160220326585448869631e+03L},
+ {-693, 3.962653726063943222023457705776420e-836L, -1.923584223809350123558543235664884e+03L},
+ {-695, -5.701660037502076578451018281692691e-839L, -1.930128135654914915690332779916986e+03L},
+ {-697, 8.180286997850898964779079313762828e-842L, -1.936674921065675439574449077907897e+03L},
+ {-699, -1.170284262925736618709453406833023e-844L, -1.943224571807909249831146548019488e+03L},
+ {-701, 1.669449733132291895448578326437978e-847L, -1.949777079694943839921646896443516e+03L},
+ {-703, -2.374750687243658457252600748844919e-850L, -1.956332436586754504826024019546435e+03L},
+ {-705, 3.368440691125756676954043615382864e-853L, -1.962890634389566773478840974786356e+03L},
+ {-707, -4.764413990276883560048152214120034e-856L, -1.969451665055463346234830525796712e+03L},
+ {-709, 6.719906897428608688361286620761684e-859L, -1.976015520581995473733995722853511e+03L},
+ {-711, -9.451345847297621221323891168441187e-862L, -1.982582193011798714610959158868838e+03L},
+ {-713, 1.325574452636412513509662155461597e-864L, -1.989151674432213010547695076025190e+03L},
+ {-715, -1.853950283407569948964562455191045e-867L, -1.995723956974907018202411266377947e+03L},
+ {-717, 2.585704718839009691721844428439393e-870L, -2.002299032815506638560769675209132e+03L},
+ {-719, -3.596251347481237401560284323281492e-873L, -2.008876894173227685249296161271018e+03L},
+ {-721, 4.987865946575918726158508076673360e-876L, -2.015457533310512634325170116329515e+03L},
+ {-723, -6.898846399136817048628641876450013e-879L, -2.022040942532671399012031772885148e+03L},
+ {-725, 9.515650205705954549832609484758638e-882L, -2.028627114187526073788416563583962e+03L},
+ {-727, -1.308892738061341753759643670530762e-884L, -2.035216040665059593154329016552806e+03L},
+ {-729, 1.795463289521730800767686790851525e-887L, -2.041807714397068251302700487974341e+03L},
+ {-731, -2.456174130672682353991363598976095e-890L, -2.048402127856818029806422865105560e+03L},
+ {-733, 3.350851474314709896304725237348014e-893L, -2.054999273558704681298692013804345e+03L},
+ {-735, -4.558981597707088294292143180065325e-896L, -2.061599144057917517974898723861380e+03L},
+ {-737, 6.185863768937704605552433080142911e-899L, -2.068201731950106854578630739435709e+03L},
+ {-739, -8.370586967439383769353766008312464e-902L, -2.074807029871055056352847898310789e+03L},
+ {-741, 1.129633868750254219885798381688592e-904L, -2.081415030496351143240305658421165e+03L},
+ {-743, -1.520368598587152382080482344130002e-907L, -2.088025726541068902405164277260800e+03L},
+ {-745, 2.040763219580070311517425965275171e-910L, -2.094639110759448461920757464869130e+03L},
+ {-747, -2.731945407737711260398160596084566e-913L, -2.101255175944581279227023427566267e+03L},
+ {-749, 3.647457153187865501199146323210368e-916L, -2.107873914928098498705433179126733e+03L},
+ {-751, -4.856800470290100534219901895087042e-919L, -2.114495320579862633449688692529600e+03L},
+ {-753, 6.449934223492829394714345146197931e-922L, -2.121119385807662527027302523005531e+03L},
+ {-755, -8.542959236414343569158073041321763e-925L, -2.127746103556911551730699518638241e+03L},
+ {-757, 1.128528300715236931196575038483720e-927L, -2.134375466810349000506981844410134e+03L},
+ {-759, -1.486862056278309527268214806961423e-930L, -2.141007468587744630433245786056832e+03L},
+ {-761, 1.953826617974125528604750074850753e-933L, -2.147642101945606316269601164804689e+03L},
+ {-763, -2.560716406257045253741481094168746e-936L, -2.154279359976890773275083834000341e+03L},
+ {-765, 3.347341707525549351296053717867642e-939L, -2.160919235810717309112724618425286e+03L},
+ {-767, -4.364200400945957433241269514820916e-942L, -2.167561722612084565299394156240570e+03L},
+ {-769, 5.675163070150789900183705480911464e-945L, -2.174206813581590209273926513086492e+03L},
+ {-771, -7.360782192154072503480811259288539e-948L, -2.180854501955153538763673552638175e+03L},
+ {-773, 9.522357299035022643571554022365510e-951L, -2.187504781003740960725289704199962e+03L},
+ {-775, -1.228691264391615824976974712563292e-953L, -2.194157644033094307720420387190957e+03L},
+ {-777, 1.581327238599248165993532448601405e-956L, -2.200813084383461955161289080842354e+03L},
+ {-779, -2.029945107316108043637397238255976e-959L, -2.207471095429332703425164871647280e+03L},
+ {-781, 2.599161469034709402864785196230442e-962L, -2.214131670579172389390556269757758e+03L},
+ {-783, -3.319491020478556070069968322133388e-965L, -2.220794803275163192491925277500887e+03L},
+ {-785, 4.228650981501345312191042448577564e-968L, -2.227460486992945600923950482070517e+03L},
+ {-787, -5.373127041297770409391413530594110e-971L, -2.234128715241363004151087059519001e+03L},
+ {-789, 6.810046947145463129773654664884803e-974L, -2.240799481562208878393568231020129e+03L},
+ {-791, -8.609414598161141756983128527035149e-977L, -2.247472779529976532267255715257188e+03L},
+ {-793, 1.085676494093460498989045211479842e-979L, -2.254148602751611380252060591802179e+03L},
+ {-795, -1.365630810180453457847855611924330e-982L, -2.260826944866265712152201065511357e+03L},
+ {-797, 1.713464002735826170449003277194893e-985L, -2.267507799545055927191516159314716e+03L},
+ {-799, -2.144510641721935131976224376964822e-988L, -2.274191160490822201858586644602362e+03L},
+ {-801, 2.677291687542990177248719571741351e-991L, -2.280877021437890561079694950616877e+03L},
+ {-803, -3.334111690589028863323436577511023e-994L, -2.287565376151837322752849003052281e+03L},
+ {-805, 4.141753652905625917171970903740400e-997L, -2.294256218429255886123361867960760e+03L},
+ {-807, -5.132284576091234098106531479232219e-1000L, -2.300949542097525834920977066378178e+03L},
+ {-809, 6.343985878975567488388790456405709e-1003L, -2.307645341014584326610412318840864e+03L},
+ {-811, -7.822424018465557938827115236011972e-1006L, -2.314343609068699739531612699514593e+03L},
+ {-813, 9.621677759490231167069022430519031e-1009L, -2.321044340178247550123104814824722e+03L},
+ {-815, -1.180573958219660265898039562026875e-1011L, -2.327747528291488412831770506524068e+03L},
+ {-817, 1.445010964773145980291358093056150e-1014L, -2.334453167386348415715252376469302e+03L},
+ {-819, -1.764360152348163590099338330959890e-1017L, -2.341161251470201485139201707128156e+03L},
+ {-821, 2.149037944394839939219656919561377e-1020L, -2.347871774579653913360816655357998e+03L},
+ {-823, -2.611224719799319488723762964230106e-1023L, -2.354584730780330983172726528323443e+03L},
+ {-825, 3.165120872484023622695470259672856e-1026L, -2.361300114166665664157385235804783e+03L},
+ {-827, -3.827232010258795190683760894404904e-1029L, -2.368017918861689355471869573651666e+03L},
+ {-829, 4.616685175221707105770519776121718e-1032L, -2.374738139016824650446459012391509e+03L},
+ {-831, -5.555577828184966432936846902673548e-1035L, -2.381460768811680098637723655177956e+03L},
+ {-833, 6.669361138277270627775326413773767e-1038L, -2.388185802453846941328183895282715e+03L},
+ {-835, -7.987258848236252248832726244040439e-1041L, -2.394913234178697796810044405392686e+03L},
+ {-837, 9.542722638275092292512217734815340e-1044L, -2.401643058249187272130159305427996e+03L},
+ {-839, -1.137392447946971667760693412969647e-1046L, -2.408375268955654478307365134236396e+03L},
+ {-841, 1.352428594467267143591787649191019e-1049L, -2.415109860615627426361731678301120e+03L},
+ {-843, -1.604304382523448568910780129526713e-1052L, -2.421846827573629281818233561862736e+03L},
+ {-845, 1.898585068075087063799739798256465e-1055L, -2.428586164200986455664941296079093e+03L},
+ {-847, -2.241540812367281067059905310810467e-1058L, -2.435327864895638510058170535978466e+03L},
+ {-849, 2.640212970986196780989287763027640e-1061L, -2.442071924081949857374211768362184e+03L},
+ {-851, -3.102482927128315841350514410138238e-1064L, -2.448818336210523231509386616865025e+03L},
+ {-853, 3.637142939189115874971294736387148e-1067L, -2.455567095758014910627336416778564e+03L},
+ {-855, -4.253968349928790497042449984078536e-1070L, -2.462318197226951670844736694017523e+03L},
+ {-857, 4.963790373312474325603792280138315e-1073L, -2.469071635145549450634138735925816e+03L},
+ {-859, -5.778568537034312369736661560114453e-1076L, -2.475827404067533706005455712362988e+03L},
+ {-861, 6.711461715487006236627946062850700e-1079L, -2.482585498571961436805823073716391e+03L},
+ {-863, -7.776896541699891351828442714774855e-1082L, -2.489345913263044864751256675621604e+03L},
+ {-865, 8.990631840115481331593575392803301e-1085L, -2.496108642769976744072790935343271e+03L},
+ {-867, -1.036981757798786774116906042999227e-1087L, -2.502873681746757285924685249815940e+03L},
+ {-869, 1.193304669503782248696094410816142e-1090L, -2.509641024872022677962920138935387e+03L},
+ {-871, -1.370039804252333236160843181189600e-1093L, -2.516410666848875180758643698373316e+03L},
+ {-873, 1.569346854813669228133840986471478e-1096L, -2.523182602404714782963550910468865e+03L},
+ {-875, -1.793539262644193403581532555967403e-1099L, -2.529956826291072397392458541211987e+03L},
+ {-877, 2.045084678043550061096388319233071e-1102L, -2.536733333283444580432650568821592e+03L},
+ {-879, -2.326603729287315200337188076488135e-1105L, -2.543512118181129757429985654321327e+03L},
+ {-881, 2.640866889088893530462188509067123e-1108L, -2.550293175807065936938349907152011e+03L},
+ {-883, -2.990789228866244088858650633145100e-1111L, -2.557076501007669896951874504032964e+03L},
+ {-885, 3.379422857475982021309209754966214e-1114L, -2.563862088652677826468486558976833e+03L},
+ {-887, -3.809946851720385593358748314505315e-1117L, -2.570649933634987405958889607629646e+03L},
+ {-889, 4.285654501372762197253935111929488e-1120L, -2.577440030870501310537042401180805e+03L},
+ {-891, -4.809937711978408751126750967373163e-1123L, -2.584232375297972119846685325706460e+03L},
+ {-893, 5.386268434466303192751120904113284e-1126L, -2.591026961878848618893515303808120e+03L},
+ {-895, -6.018177021750059433241475870517636e-1129L, -2.597823785597123474264293867571368e+03L},
+ {-897, 6.709227448996721776188936310499036e-1132L, -2.604622841459182270382549353081666e+03L},
+ {-899, -7.462989375969657148152320701333745e-1135L, -2.611424124493653890655661789438570e+03L},
+ {-901, 8.283007076547899165540866483167308e-1138L, -2.618227629751262228570055793195473e+03L},
+ {-903, -9.172765311791693428062975064415623e-1141L, -2.625033352304679213990029233689184e+03L},
+ {-905, 1.013565227822286566636792824797306e-1143L, -2.631841287248379140111469080061043e+03L},
+ {-907, -1.117491982163491253182792530096259e-1146L, -2.638651429698494276714405049015679e+03L},
+ {-909, 1.229364116791519530454117194825367e-1149L, -2.645463774792671755548079737756437e+03L},
+ {-911, -1.349466648508802997205397579391182e-1152L, -2.652278317689931713869023089143022e+03L},
+ {-913, 1.478057665398469876457171499880813e-1155L, -2.659095053570526682336560504944278e+03L},
+ {-915, -1.615363568741497132740078141946243e-1158L, -2.665913977635802203651307898617853e+03L},
+ {-917, 1.761574229816245510076421092634944e-1161L, -2.672735085108058668500562675372465e+03L},
+ {-919, -1.916838117319091958733864083389493e-1164L, -2.679558371230414355550135293406521e+03L},
+ {-921, 2.081257456372521127832642870129742e-1167L, -2.686383831266669662395129001210726e+03L},
+ {-923, -2.254883484693955718128540487681194e-1170L, -2.693211460501172514552511943184804e+03L},
+ {-925, 2.437711875344816992571395121817507e-1173L, -2.700041254238684939746081557522288e+03L},
+ {-927, -2.629678398430223292957276291065272e-1176L, -2.706873207804250794899640650311187e+03L},
+ {-929, 2.830654896049755966584796868746256e-1179L, -2.713707316543064633416931447058338e+03L},
+ {-931, -3.040445645595871070445539064174282e-1182L, -2.720543575820341700487151179977113e+03L},
+ {-933, 3.258784186062026870788359125588726e-1185L, -2.727381981021189044312742420779468e+03L},
+ {-935, -3.485330680280242642554394786725911e-1188L, -2.734222527550477731311654658308532e+03L},
+ {-937, 3.719669882903140493654636912194142e-1191L, -2.741065210832716153499450998905698e+03L},
+ {-939, -3.961309779449563891006003101378212e-1194L, -2.747910026311924416407525009451877e+03L},
+ {-941, 4.209680955844382455904360362782372e-1197L, -2.754756969451509796042336543353359e+03L},
+ {-943, -4.464136750630310133514698157775580e-1200L, -2.761606035734143253537010059558207e+03L},
+ {-945, 4.723954233471227654512908103466223e-1203L, -2.768457220661636996290901907345644e+03L},
+ {-947, -4.988336043792215052283957870608471e-1206L, -2.775310519754823074534871036028945e+03L},
+ {-949, 5.256413112531311962364549916341908e-1209L, -2.782165928553433002400016632327949e+03L},
+ {-951, -5.527248278161211316892271205406844e-1212L, -2.789023442615978392705611639734171e+03L},
+ {-953, 5.799840795552162976801963489409071e-1215L, -2.795883057519632594817897656044765e+03L},
+ {-955, -6.073131723091270132776925119800074e-1218L, -2.802744768860113325065348365330194e+03L},
+ {-957, 6.346010159969979240101280166980223e-1221L, -2.809608572251566279327988826177443e+03L},
+ {-959, -6.617320291939498686236997045860503e-1224L, -2.816474463326449717548409369048866e+03L},
+ {-961, 6.885869190363682295772109308907912e-1227L, -2.823342437735420010040267697697951e+03L},
+ {-963, -7.150435296327811314405097932406970e-1230L, -2.830212491147218135596362586988819e+03L},
+ {-965, 7.409777509147990999383521173478725e-1233L, -2.837084619248557121522818277375428e+03L},
+ {-967, -7.662644787123051705670652713007989e-1236L, -2.843958817744010415848570663101738e+03L},
+ {-969, 7.907786158021725186450621994848286e-1239L, -2.850835082355901182080224470388422e+03L},
+ {-971, -8.143961027828759203347705452984847e-1242L, -2.857713408824192506991484083735745e+03L},
+ {-973, 8.369949668888755604673900773879596e-1245L, -2.864593792906378512053778221398063e+03L},
+ {-975, -8.584563762962826261204000793722663e-1248L, -2.871476230377376359230428472743004e+03L},
+ {-977, 8.786656870995728005326510536051856e-1251L, -2.878360717029419141970781458411325e+03L},
+ {-979, -8.975134699689201231181318218643367e-1254L, -2.885247248671949652353161217529960e+03L},
+ {-981, 9.148965035361061397738346807995277e-1257L, -2.892135821131515015436329024456014e+03L},
+ {-983, -9.307187218068221157414391462863964e-1260L, -2.899026430251662181988388361725470e+03L},
+ {-985, 9.448921033571798129354712145039557e-1263L, -2.905919071892834270869768918387859e+03L},
+ {-987, -9.573374907367576625486030542086684e-1266L, -2.912813741932267752453090467037997e+03L},
+ {-989, 9.679853293597145222938352418692300e-1269L, -2.919710436263890464567370062383153e+03L},
+ {-991, -9.767763162055646037273816769618869e-1272L, -2.926609150798220452557218512631923e+03L},
+ {-993, 9.836619498545464287284810442717895e-1275L, -2.933509881462265625149398374708423e+03L},
+ {-995, -9.886049747281873655562623560520498e-1278L, -2.940412624199424217919409255333517e+03L},
+ {-997, 9.915797138697967558237335567222164e-1281L, -2.947317374969386056249649978808221e+03L},
+ {-999, -9.925722861559527085322658225447612e-1284L, -2.954224129748034609768203810190020e+03L},
+ {-1001, 9.915807054505022063259398826620990e-1287L, -2.961132884527349830353424593952994e+03L},
+ {-1003, -9.886148608678985107935592050469582e-1290L, -2.968043635315311765884290178944586e+03L},
+ {-1005, 9.836963789730333440731932388526948e-1293L, -2.974956378135804942009956255511099e+03L},
+ {-1007, -9.768583703803707488313736234882769e-1296L, -2.981871109028523504304109752082016e+03L},
+ {-1009, 9.681450647971959849666735614353587e-1299L, -2.988787824048877113260606872907396e+03L},
+ {-1011, -9.576113400565736745466602981556466e-1302L, -2.995706519267897584676506984698967e+03L},
+ {-1013, 9.453221520795396589799213209828694e-1305L, -3.002627190772146268056999795611655e+03L},
+ {-1015, -9.313518739699898118028781487515955e-1308L, -3.009549834663622155763889179720687e+03L},
+ {-1017, 9.157835535594786743391132239445383e-1311L, -3.016474447059670715715261801688148e+03L},
+ {-1019, -8.987080996658279434142426142733447e-1314L, -3.023401024092893440528751267655306e+03L},
+ {-1021, 8.802234080958158113753600531570466e-1317L, -3.030329561911058106084427414384290e+03L},
+ {-1023, -8.604334389988424353620332875435451e-1320L, -3.037260056677009732565813767523719e+03L},
+ {-1025, 8.394472575598462784019836951644343e-1323L, -3.044192504568582241118882049563209e+03L},
+ {-1027, -8.173780502043293850068000926625456e-1326L, -3.051126901778510799349108482546256e+03L},
+ {-1029, 7.943421284784542128345967858722503e-1329L, -3.058063244514344848955819786013508e+03L},
+ {-1031, -7.704579325688207689957291812533950e-1332L, -3.065001528998361808881124191118952e+03L},
+ {-1033, 7.458450460491972594343941735270039e-1335L, -3.071941751467481447427731155508592e+03L},
+ {-1035, -7.206232328977751298883035493014530e-1338L, -3.078883908173180916875929158147473e+03L},
+ {-1037, 6.949115071338236546656736251701572e-1341L, -3.085827995381410444204930081868771e+03L},
+ {-1039, -6.688272445946329688793778875554930e-1344L, -3.092774009372509671597717077795930e+03L},
+ {-1041, 6.424853454319240815363860591311171e-1347L, -3.099721946441124640481465999879238e+03L},
+ {-1043, -6.159974548724104329207920030020299e-1350L, -3.106671802896125412927563780897786e+03L},
+ {-1045, 5.894712486817324716945378019158181e-1353L, -3.113623575060524324306235511240865e+03L},
+ {-1047, -5.630097886167454361934458471020230e-1356L, -3.120577259271394861160830238000286e+03L},
+ {-1049, 5.367109519702053729203487579618903e-1359L, -3.127532851879791158335918130275245e+03L},
+ {-1051, -5.106669381257900788966210827420460e-1362L, -3.134490349250668109461532914339776e+03L},
+ {-1053, 4.849638538706458489046733929174226e-1365L, -3.141449747762802084963167382729031e+03L},
+ {-1055, -4.596813780764415629428183819122489e-1368L, -3.148411043808712251833510098327712e+03L},
+ {-1057, 4.348925052757252251114648835499044e-1371L, -3.155374233794582489467411687370640e+03L},
+ {-1059, -4.106633666437443107756986624644989e-1374L, -3.162339314140183895926202652724750e+03L},
+ {-1061, 3.870531259601737142089525565169641e-1377L, -3.169306281278797879061264523746790e+03L},
+ {-1063, -3.641139472814428167534831199595147e-1380L, -3.176275131657139826989695252491389e+03L},
+ {-1065, 3.418910303112139124445850891638635e-1383L, -3.183245861735283352477020711594051e+03L},
+ {-1067, -3.204227088202567126940816205846894e-1386L, -3.190218467986585105843199376793720e+03L},
+ {-1069, 2.997406069413065600505908518098123e-1389L, -3.197192946897610151068659007315391e+03L},
+ {-1071, -2.798698477509865173208131202705997e-1392L, -3.204169294968057899836804385150553e+03L},
+ {-1073, 2.608293082488224765338426097582477e-1395L, -3.211147508710688598308355752853946e+03L},
+ {-1075, -2.426319146500674200314814974495327e-1398L, -3.218127584651250361481030114033744e+03L},
+ {-1077, 2.252849718199326091285807775761678e-1401L, -3.225109519328406750045473452156271e+03L},
+ {-1079, -2.087905206857577471071184222207301e-1404L, -3.232093309293664884705002411821128e+03L},
+ {-1081, 1.931457175631431518104703258286125e-1407L, -3.239078951111304092982630115322711e+03L},
+ {-1083, -1.783432295135209157991415750956717e-1410L, -3.246066441358305083594043415423409e+03L},
+ {-1085, 1.643716401046275721651074424844901e-1413L, -3.253055776624279643519678691824620e+03L},
+ {-1087, -1.512158602618468925161981991577646e-1416L, -3.260046953511400852962820785835966e+03L},
+ {-1089, 1.388575392670770362866833784736130e-1419L, -3.267039968634333813433735163465741e+03L},
+ {-1091, -1.272754713722062660739536008007452e-1422L, -3.274034818620166884252247059282852e+03L},
+ {-1093, 1.164459939361447997016958836237376e-1425L, -3.281031500108343422812913172193420e+03L},
+ {-1095, -1.063433734576664837458409896107192e-1428L, -3.288030009750594024008001285621008e+03L},
+ {-1097, 9.694017635156470715208841350111144e-1432L, -3.295030344210869254253910632990574e+03L},
+ {-1099, -8.820762179396242688998035805378657e-1435L, -3.302032500165272875616440430970421e+03L},
+ {-1101, 8.011591443593317610352439423595511e-1438L, -3.309036474301995555579455108146502e+03L},
+ {-1103, -7.263455524563297924163589685943346e-1441L, -3.316042263321249058050011563481486e+03L},
+ {-1105, 6.573262918156830700600533652437417e-1444L, -3.323049863935200911240915344874150e+03L},
+ {-1107, -5.937906881803821771093526334631813e-1447L, -3.330059272867909548118967843957956e+03L},
+ {-1109, 5.354289343375853716044658552418227e-1450L, -3.337070486855259915153864214941207e+03L},
+ {-1111, -4.819342343272595604000592756452049e-1453L, -3.344083502644899545148810356786085e+03L},
+ {-1113, 4.330047028996042770890020446048562e-1456L, -3.351098316996175089979455423905480e+03L},
+ {-1115, -3.883450250220666162233202193765526e-1459L, -3.358114926680069309112692288448429e+03L},
+ {-1117, 3.476678827413309008266071793881402e-1462L, -3.365133328479138509821270370292175e+03L},
+ {-1119, -3.106951588394378023472807679965507e-1465L, -3.372153519187450435054001350134199e+03L},
+ {-1121, 2.771589284919159699797330669014726e-1468L, -3.379175495610522594964626427939806e+03L},
+ {-1123, -2.468022515511273107566634611767342e-1471L, -3.386199254565261038145161797406766e+03L},
+ {-1125, 2.193797791565576095614786321570971e-1474L, -3.393224792879899558651754565880290e+03L},
+ {-1127, -1.946581891362534246330777570160578e-1477L, -3.400252107393939334952772024198986e+03L},
+ {-1129, 1.724164651339711467077748069229918e-1480L, -3.407281194958088996970020407452300e+03L},
+ {-1131, -1.524460346012123313066090246887638e-1483L, -3.414312052434205117424652412163150e+03L},
+ {-1133, 1.345507807601167972697343554181499e-1486L, -3.421344676695233123739482958056169e+03L},
+ {-1135, -1.185469434009839623521888593992510e-1489L, -3.428379064625148626789097098966228e+03L},
+ {-1137, 1.042629229560105209781784163581803e-1492L, -3.435415213118899162828309580786804e+03L},
+ {-1139, -9.153900171730511060419527336100111e-1496L, -3.442453119082346344968229187401041e+03L},
+ {-1141, 8.022699537011841420174870583786249e-1499L, -3.449492779432208420607399472510605e+03L},
+ {-1143, -7.018984721795136850546693424134951e-1502L, -3.456534191096003231263237403792167e+03L},
+ {-1145, 6.130117660956451397857374169550176e-1505L, -3.463577351011991571286279398729325e+03L},
+ {-1147, -5.344479216178248821148538944681932e-1508L, -3.470622256129120941976576658724899e+03L},
+ {-1149, 4.651417942713880610225012136363735e-1511L, -3.477668903406969697657964958498974e+03L},
+ {-1151, -4.041197170038123901151183437327311e-1514L, -3.484717289815691580301874370753396e+03L},
+ {-1153, 3.504941170891694623721754932634268e-1517L, -3.491767412335960639327847953417242e+03L},
+ {-1155, -3.034581100339129544347839768514518e-1520L, -3.498819267958916533243011254308799e+03L},
+ {-1157, 2.622801296749463737552151917471493e-1523L, -3.505872853686110209817382557291035e+03L},
+ {-1159, -2.262986451034912629466912784703618e-1526L, -3.512928166529449961526142973826348e+03L},
+ {-1161, 1.949170069797513031409916265894589e-1529L, -3.519985203511147853023801552050462e+03L},
+ {-1163, -1.675984582800957034746273659410653e-1532L, -3.527043961663666517448599220381250e+03L},
+ {-1165, 1.438613375794812905361608291339616e-1535L, -3.534104438029666318388502204589145e+03L},
+ {-1167, -1.232744966405152446753734611259311e-1538L, -3.541166629661952874372746070059700e+03L},
+ {-1169, 1.054529483665656498506188717929265e-1541L, -3.548230533623424942785111173579888e+03L},
+ {-1171, -9.005375607734043539762499726125236e-1545L, -3.555296146987022660126944406759827e+03L},
+ {-1173, 7.677217056891767723582693713661753e-1548L, -3.562363466835676135589395939446433e+03L},
+ {-1175, -6.533801750546185296666122309499365e-1551L, -3.569432490262254394925418408782658e+03L},
+ {-1177, 5.551233432919443752477589048002858e-1554L, -3.576503214369514671642784751177646e+03L},
+ {-1179, -4.708425303578832699302450422394282e-1557L, -3.583575636270052042569724665662661e+03L},
+ {-1181, 3.986812280761077645472015598979070e-1560L, -3.590649753086249404874763476541430e+03L},
+ {-1183, -3.370086458800572819502971765831843e-1563L, -3.597725561950227791651975804168004e+03L},
+ {-1185, 2.843954817553226008019385456398180e-1566L, -3.604803060003797023212144754279634e+03L},
+ {-1187, -2.395918127677528229165446888288272e-1569L, -3.611882244398406691249250024918427e+03L},
+ {-1189, 2.015069913942412303755632370301322e-1572L, -3.618963112295097473080300060323826e+03L},
+ {-1191, -1.691914285426038878048389899497332e-1575L, -3.626045660864452773184778737590925e+03L},
+ {-1193, 1.418201412762815488724551466468845e-1578L, -3.633129887286550689297900569463099e+03L},
+ {-1195, -1.186779424906121747886653946835854e-1581L, -3.640215788750916300339464492390588e+03L},
+ {-1197, 9.914615078580799898802455696205962e-1585L, -3.647303362456474273487369363039764e+03L},
+ {-1199, -8.269070123920600416015392573983288e-1588L, -3.654392605611501787731808623069938e+03L},
+ {-1201, 6.885154141482598181528220294740456e-1591L, -3.661483515433581771272801460780156e+03L},
+ {-1203, -5.723320150858352603099102489393563e-1594L, -3.668576089149556450150047385104428e+03L},
+ {-1205, 4.749643278720624566887221982899222e-1597L, -3.675670323995481205520114555756365e+03L},
+ {-1207, -3.935081423960749434040780433222222e-1600L, -3.682766217216578737021693544906751e+03L},
+ {-1209, 3.254823344880686049661522277272309e-1603L, -3.689863766067193529695071441909781e+03L},
+ {-1211, -2.687715396268113996417442012611321e-1606L, -3.696962967810746621947110295041665e+03L},
+ {-1213, 2.215758776808008241069614190116505e-1609L, -3.704063819719690672077852696203994e+03L},
+ {-1215, -1.823669775150624066723962296392185e-1612L, -3.711166319075465320909429681721833e+03L},
+ {-1217, 1.498496117625820925820840013469339e-1615L, -3.718270463168452848082215813751332e+03L},
+ {-1219, -1.229283115361625041690598862567136e-1618L, -3.725376249297934119607167035722171e+03L},
+ {-1221, 1.006783878265049174193774662217146e-1621L, -3.732483674772044824286992320208090e+03L},
+ {-1223, -8.232084041414956452933562242168000e-1625L, -3.739592736907731996642253853285617e+03L},
+ {-1225, 6.720068605236699145251887544626939e-1628L, -3.746703433030710824001666077438955e+03L},
+ {-1227, -5.476828529125264177059403051855696e-1631L, -3.753815760475421735438774844885006e+03L},
+ {-1229, 4.456329153071817882066235192722291e-1634L, -3.760929716584987770259847663018353e+03L},
+ {-1231, -3.620088670245181057730491626906816e-1637L, -3.768045298711172223770197941242025e+03L},
+ {-1233, 2.936000543588954629140706915577304e-1640L, -3.775162504214336568068303621843850e+03L},
+ {-1235, -2.377328375375671764486402360791340e-1643L, -3.782281330463398645638966896050529e+03L},
+ {-1237, 1.921849939673138047280842652216119e-1646L, -3.789401774835791133538400121145037e+03L},
+ {-1239, -1.551129894812863637837645401304374e-1649L, -3.796523834717420275985516769499123e+03L},
+ {-1241, 1.249903219027287379401809348351631e-1652L, -3.803647507502624883194858412974434e+03L},
+ {-1243, -1.005553675806345437974102452414828e-1655L, -3.810772790594135594307502488046015e+03L},
+ {-1245, 8.076736351858196288948614075621108e-1659L, -3.817899681403034402296973964839455e+03L},
+ {-1247, -6.476933722420365909341310405470014e-1662L, -3.825028177348714438747630079385163e+03L},
+ {-1249, 5.185695534363783754476629628078474e-1665L, -3.832158275858840016423203961525892e+03L},
+ {-1251, -4.145240235302784775760695146345703e-1668L, -3.839289974369306927563183236918612e+03L},
+ {-1253, 3.308252382524169813057218791975820e-1671L, -3.846423270324202995864466394092077e+03L},
+ {-1255, -2.636057675318063596061528917909020e-1674L, -3.853558161175768880125285738664312e+03L},
+ {-1257, 2.097102366999255048577190865480525e-1677L, -3.860694644384359127547713917822919e+03L},
+ {-1259, -1.665688933279789554072431187832029e-1680L, -3.867832717418403474714184060034202e+03L},
+ {-1261, 1.320926989119579345021753519295820e-1683L, -3.874972377754368394272354269097471e+03L},
+ {-1263, -1.045864599461266306430525351778163e-1686L, -3.882113622876718885381338230562791e+03L},
+ {-1265, 8.267704343567322580478461278878762e-1690L, -3.889256450277880505990807686305793e+03L},
+ {-1267, -6.525417792870814980645983645523884e-1693L, -3.896400857458201645042752126087869e+03L},
+ {-1269, 5.142173201631847896490136836504243e-1696L, -3.903546841925916032703758812468409e+03L},
+ {-1271, -4.045769631496339808410807896541498e-1699L, -3.910694401197105486753554740165988e+03L},
+ {-1273, 3.178137966611421687675418614722307e-1702L, -3.917843532795662893273233839594240e+03L},
+ {-1275, -2.492657228714840539353269501742986e-1705L, -3.924994234253255419794080138115488e+03L},
+ {-1277, 1.951963374091496115390187550307742e-1708L, -3.932146503109287959085193127989679e+03L},
+ {-1279, -1.526163701400700637521647811030290e-1711L, -3.939300336910866801775227659160125e+03L},
+ {-1281, 1.191384622482982542952106019539649e-1714L, -3.946455733212763536020479646243917e+03L},
+ {-1283, -9.285928468300721301263491968352682e-1718L, -3.953612689577379172448283087463435e+03L},
+ {-1285, 7.226403477276825915380149391714150e-1721L, -3.960771203574708492621235641111423e+03L},
+ {-1287, -5.614921116765210501460877538239433e-1724L, -3.967931272782304619284141562604798e+03L},
+ {-1289, 4.356028795007921257921549680558133e-1727L, -3.975092894785243806671754410646060e+03L},
+ {-1291, -3.374150886915508333014368458991582e-1730L, -3.982256067176090449171419791636102e+03L},
+ {-1293, 2.609552116717330497304229279962554e-1733L, -3.989420787554862306650562703679350e+03L},
+ {-1295, -2.015098159627282237300563150550235e-1736L, -3.996587053528995944774636911427051e+03L},
+ {-1297, 1.553660878664057237702824325790466e-1739L, -4.003754862713312388656657346945880e+03L},
+ {-1299, -1.196043786500428974367070304688580e-1742L, -4.010924212729982988194772876756775e+03L},
+ {-1301, 9.193265076867248073536282126737744e-1746L, -4.018095101208495493469507959246674e+03L},
+ {-1303, -7.055460534817534975852864256897731e-1749L, -4.025267525785620338587309769444213e+03L},
+ {-1305, 5.406483168442555537052003261990599e-1752L, -4.032441484105377132371884291283646e+03L},
+ {-1307, -4.136559424975176386420813513382248e-1755L, -4.039616973819001354319492644986138e+03L},
+ {-1309, 3.160091233747269966708031713813788e-1758L, -4.046793992584911254248909475925419e+03L},
+ {-1311, -2.410443351447192957061809087577260e-1761L, -4.053972538068674954091120501426040e+03L},
+ {-1313, 1.835828904377146197305262062130434e-1764L, -4.061152607942977750278058187134518e+03L},
+ {-1315, -1.396067607891365929509704990213258e-1767L, -4.068334199887589615203744872731949e+03L},
+ {-1317, 1.060036148740596757410558079129277e-1770L, -4.075517311589332896245133330098614e+03L},
+ {-1319, -8.036665267176624392801804997189364e-1774L, -4.082701940742050210843707532714255e+03L},
+ {-1321, 6.083773858574280388192130959265226e-1777L, -4.089888085046572536162533135420420e+03L},
+ {-1323, -4.598468524999456075731013574652476e-1780L, -4.097075742210687491846929576618074e+03L},
+ {-1325, 3.470542283018457415646047980869793e-1783L, -4.104264909949107814430275564423556e+03L},
+ {-1327, -2.615329527519560976372304431702934e-1786L, -4.111455585983440021939658714485042e+03L},
+ {-1329, 1.967892797230670411115353221747881e-1789L, -4.118647768042153267269139966979810e+03L},
+ {-1331, -1.478506985147010075969461473890219e-1792L, -4.125841453860548378901325797713706e+03L},
+ {-1333, 1.109157528242318136511223911395513e-1795L, -4.133036641180727087570727804551594e+03L},
+ {-1335, -8.308296091702757576863100459891481e-1799L, -4.140233327751561437475041624662412e+03L},
+ {-1337, 6.214133202470274926599177606500734e-1802L, -4.147431511328663380652996927358058e+03L},
+ {-1339, -4.640876178095799048991170729276127e-1805L, -4.154631189674354553159819017114677e+03L},
+ {-1341, 3.460757776357791982842036338013518e-1808L, -4.161832360557636231683601935863626e+03L},
+ {-1343, -2.576885909425012645452000251685419e-1811L, -4.169035021754159469258024416022981e+03L},
+ {-1345, 1.915900304405213862789591265193620e-1814L, -4.176239171046195408738845128536702e+03L},
+ {-1347, -1.422346179959327292345650530952947e-1817L, -4.183444806222605772723493895564451e+03L},
+ {-1349, 1.054370778324186280463788384694550e-1820L, -4.190651925078813528604832377528851e+03L},
+ {-1351, -7.804372896552082016756390708323832e-1824L, -4.197860525416773727461792661325677e+03L},
+ {-1353, 5.768198740984539554143673842072308e-1827L, -4.205070605044944515501116613513602e+03L},
+ {-1355, -4.256973240578995980917840473854101e-1830L, -4.212282161778258316775814242920035e+03L},
+ {-1357, 3.137047340146644053734591358772367e-1833L, -4.219495193438093185917237046125564e+03L},
+ {-1359, -2.308349771999002247045321088132720e-1836L, -4.226709697852244329628823772898894e+03L},
+ {-1361, 1.696068899337988425455783312367906e-1839L, -4.233925672854895795700622614677425e+03L},
+ {-1363, -1.244364562977247560862643662779094e-1842L, -4.241143116286592328314626837379560e+03L},
+ {-1365, 9.116223904595220226099953573473219e-1846L, -4.248362025994211388421781682134717e+03L},
+ {-1367, -6.668781203068924817922423974742662e-1849L, -4.255582399830935337982230258316458e+03L},
+ {-1369, 4.871279184126314695341434605363523e-1852L, -4.262804235656223786870966449658521e+03L},
+ {-1371, -3.553084744074627786536422031629119e-1855L, -4.270027531335786101261554826276597e+03L},
+ {-1373, 2.587825742224783529888144232796154e-1858L, -4.277252284741554072310962466370012e+03L},
+ {-1375, -1.882055085254388021736832169306294e-1861L, -4.284478493751654743978826687947656e+03L},
+ {-1377, 1.366779292123738577877147544884745e-1864L, -4.291706156250383398824657203513219e+03L},
+ {-1379, -9.911379928380990412452121427735641e-1868L, -4.298935270128176700636542353585825e+03L},
+ {-1381, 7.176958673700934404382419571133701e-1871L, -4.306165833281585992754898046713977e+03L},
+ {-1383, -5.189413357701326395070440760038829e-1874L, -4.313397843613250750964666017144174e+03L},
+ {-1385, 3.746868850325867433263856144432368e-1877L, -4.320631299031872189839136174026924e+03L},
+ {-1387, -2.701419502758375943232772995264865e-1880L, -4.327866197452187021428237310316251e+03L},
+ {-1389, 1.944866452669817093760095748930788e-1883L, -4.335102536794941365193712402734432e+03L},
+ {-1391, -1.398178614428337234910205426981156e-1886L, -4.342340314986864808103070288993021e+03L},
+ {-1393, 1.003717598297442379691461182326745e-1889L, -4.349579529960644613803585763028333e+03L},
+ {-1395, -7.195108231522884442232696647503551e-1893L, -4.356820179654900079806906177159946e+03L},
+ {-1397, 5.150399593072930882056332603796386e-1896L, -4.364062262014157041624015561545628e+03L},
+ {-1399, -3.681486485398806920697878916223292e-1899L, -4.371305774988822522799408131914749e+03L},
+ {-1401, 2.627756235116921428049877884527689e-1902L, -4.378550716535159529802332908440407e+03L},
+ {-1403, -1.872955263803935444084018449413891e-1905L, -4.385797084615261990741891050375642e+03L},
+ {-1405, 1.333064244700309924614959750472520e-1908L, -4.393044877197029836881598448033562e+03L},
+ {-1407, -9.474514887706538199111298866187065e-1912L, -4.400294092254144225937769118010291e+03L},
+ {-1409, 6.724283099862695670057699692112892e-1915L, -4.407544727766042906154731018469884e+03L},
+ {-1411, -4.765615237322959369282565338138123e-1918L, -4.414796781717895720158456025311049e+03L},
+ {-1413, 3.372693020044557232330194860678077e-1921L, -4.422050252100580247598670961021297e+03L},
+ {-1415, -2.383528636073892036982469866203588e-1924L, -4.429305136910657585597917707501318e+03L},
+ {-1417, 1.682095014872189158068080357236124e-1927L, -4.436561434150348266034348511395093e+03L},
+ {-1419, -1.185408749029026890816124282759777e-1930L, -4.443819141827508308693278542723326e+03L},
+ {-1421, 8.342074236657472841774273629555084e-1934L, -4.451078257955605409330672520242574e+03L},
+ {-1423, -5.862314994137366719447838109314887e-1937L, -4.458338780553695261699816683580002e+03L},
+ {-1425, 4.113905259043766118910763585484131e-1940L, -4.465600707646398012600422474915265e+03L},
+ {-1427, -2.882904876695000784100044558853631e-1943L, -4.472864037263874849017324882500858e+03L},
+ {-1429, 2.017428185230931269489184435866782e-1946L, -4.480128767441804716423777374107387e+03L},
+ {-1431, -1.409803064452083346952609668670008e-1949L, -4.487394896221361167332107578957184e+03L},
+ {-1433, 9.838123269030588603995880451291055e-1953L, -4.494662421649189339182184219359353e+03L},
+ {-1435, -6.855835030683337006268906237833488e-1956L, -4.501931341777383060665757094809060e+03L},
+ {-1437, 4.770935999083741827605362726397695e-1959L, -4.509201654663462085592269017877382e+03L},
+ {-1439, -3.315452396861530109524227051006042e-1962L, -4.516473358370349453409202318443182e+03L},
+ {-1441, 2.300799720237009097518547571829314e-1965L, -4.523746450966348975497413686032317e+03L},
+ {-1443, -1.594455800580047884628238095515810e-1968L, -4.531020930525122846369230514381837e+03L},
+ {-1445, 1.103429619778579850953797989976339e-1971L, -4.538296795125669378904330342950809e+03L},
+ {-1447, -7.625636625974981692838963303222801e-1975L, -4.545574042852300862765603242170525e+03L},
+ {-1449, 5.262689182867482189674922914577502e-1978L, -4.552852671794621545144305838219623e+03L},
+ {-1451, -3.626939478199505299569209451810822e-1981L, -4.560132680047505732990855884852302e+03L},
+ {-1453, 2.496173075154511561988444220103800e-1984L, -4.567414065711076015894588620634650e+03L},
+ {-1455, -1.715582869522001073531576783576495e-1987L, -4.574696826890681608782701346826502e+03L},
+ {-1457, 1.177476231655457154105406165804046e-1990L, -4.581980961696876813615451461820817e+03L},
+ {-1459, -8.070433390373249856788253363975640e-1994L, -4.589266468245399599261446321148167e+03L},
+ {-1461, 5.523910602582648772613451994507625e-1997L, -4.596553344657150298743571477216341e+03L},
+ {-1463, -3.775742038675768128922386872527426e-2000L, -4.603841589058170423052747800969637e+03L},
+ {-1465, 2.577298319915200088001629264523841e-2003L, -4.611131199579621590733288400565675e+03L},
+ {-1467, -1.756849570494342254943169232804254e-2006L, -4.618422174357764572450143823405641e+03L},
+ {-1469, 1.195949333216026041486160131248641e-2009L, -4.625714511533938449754779442340822e+03L},
+ {-1471, -8.130179015744568602897077710731755e-2013L, -4.633008209254539887272822861151008e+03L},
+ {-1473, 5.519469800233923016223406456708592e-2016L, -4.640303265671002517542952296712946e+03L},
+ {-1475, -3.742013423887405434727733190988876e-2019L, -4.647599678939776437742769865753118e+03L},
+ {-1477, 2.533522968102508757432453074467756e-2022L, -4.654897447222307817543617174762016e+03L},
+ {-1479, -1.712997273902980904281577467523838e-2025L, -4.662196568685018617342445226649173e+03L},
+ {-1481, 1.156649070832532683512206257612315e-2028L, -4.669497041499286416124947053318012e+03L},
+ {-1483, -7.799386856591589234741781912422890e-2032L, -4.676798863841424348220200288087410e+03L},
+ {-1485, 5.252112361341137531812647752473326e-2035L, -4.684102033892661148213048726709369e+03L},
+ {-1487, -3.532019072858868548629890889356642e-2038L, -4.691406549839121303286377404034333e+03L},
+ {-1489, 2.372074595607030590080517722872157e-2041L, -4.698712409871805312271305441142524e+03L},
+ {-1491, -1.590928635551328363568422349344170e-2044L, -4.706019612186570050689135493655403e+03L},
+ {-1493, 1.065591852345163003059894406794487e-2047L, -4.713328154984109241074658647407807e+03L},
+ {-1495, -7.127704697960956542206651550464799e-2051L, -4.720638036469934027876119647014408e+03L},
+ {-1497, 4.761325783541053134406580862033934e-2054L, -4.727949254854353656232799983389316e+03L},
+ {-1499, -3.176334745524385012946351475673071e-2057L, -4.735261808352456253936776178323616e+03L},
+ {-1501, 2.116145733194127257126150216970734e-2060L, -4.742575695184089715890958151296986e+03L},
+ {-1503, -1.407947926276864442532368740499490e-2063L, -4.749890913573842690381008392547576e+03L},
+ {-1505, 9.355135722769863405530689305644452e-2067L, -4.757207461751025666484187347137591e+03L},
+ {-1507, -6.207787473636272996370729466253783e-2070L, -4.764525337949652161943564480843536e+03L},
+ {-1509, 4.113841930839147114891139473991904e-2073L, -4.771844540408420010841378487196094e+03L},
+ {-1511, -2.722595586260190016473288864322901e-2076L, -4.779165067370692750410624536519129e+03L},
+ {-1513, 1.799468331963113031376925885210113e-2079L, -4.786486917084481106329191886677672e+03L},
+ {-1515, -1.187767875883242925001271211359811e-2082L, -4.793810087802424575846072089514733e+03L},
+ {-1517, 7.829715727641680454853468763083788e-2086L, -4.801134577781773108094306948558802e+03L},
+ {-1519, -5.154519899698275480482862911839229e-2089L, -4.808460385284368880950446818370231e+03L},
+ {-1521, 3.388901972188215306037385214884437e-2092L, -4.815787508576628173805344283727207e+03L},
+ {-1523, -2.225149029670528762992373745820379e-2095L, -4.823115945929523335616116211680893e+03L},
+ {-1525, 1.459114117816740172454015571029757e-2098L, -4.830445695618564847614069119450771e+03L},
+ {-1527, -9.555429717201965765907109175047522e-2102L, -4.837776755923783480048299228543753e+03L},
+ {-1529, 6.249463516809657139245983763929053e-2105L, -4.845109125129712542349549957040594e+03L},
+ {-1531, -4.081948737302192775470923425165939e-2108L, -4.852442801525370226103736408768841e+03L},
+ {-1533, 2.662719332878142710679010714393959e-2111L, -4.859777783404242040229329115606646e+03L},
+ {-1535, -1.734670575164913818031928804165446e-2114L, -4.867114069064263337757528337507154e+03L},
+ {-1537, 1.128608051506124800281020692365287e-2117L, -4.874451656807801933618856078678546e+03L},
+ {-1539, -7.333385649812376869922161743764045e-2121L, -4.881790544941640812844446087058123e+03L},
+ {-1541, 4.758848572233859097937807750658043e-2124L, -4.889130731776960928594922911886297e+03L},
+ {-1543, -3.084153319659014321411411374373327e-2127L, -4.896472215629324089434330039739461e+03L},
+ {-1545, 1.996215740879620920007386002830632e-2130L, -4.903814994818655935271094646624663e+03L},
+ {-1547, -1.290378630174286308989906918442555e-2133L, -4.911159067669229001392503021427545e+03L},
+ {-1549, 8.330397870718439696513279008667235e-2137L, -4.918504432509645870023606657906879e+03L},
+ {-1551, -5.370985087503829591562397813454052e-2140L, -4.925851087672822408845884797391538e+03L},
+ {-1553, 3.458457879912317831012490543112719e-2143L, -4.933199031495971095915355246348419e+03L},
+ {-1555, -2.224088668753902142130218998786314e-2146L, -4.940548262320584430424152001247078e+03L},
+ {-1557, 1.428444873958832461226858701853766e-2149L, -4.947898778492418428753875992109364e+03L},
+ {-1559, -9.162571353167623227882352160704081e-2153L, -4.955250578361476205273274505587917e+03L},
+ {-1561, 5.869680559364268563665824574442076e-2156L, -4.962603660281991637337015963541083e+03L},
+ {-1563, -3.755393831966902471955102094972538e-2159L, -4.969958022612413113946500104484524e+03L},
+ {-1565, 2.399612672183324263230097185285966e-2162L, -4.977313663715387367537779629127007e+03L},
+ {-1567, -1.531341845681764048008996289269921e-2165L, -4.984670581957743388365768409126732e+03L},
+ {-1569, 9.759986269482243773161225553026904e-2169L, -4.992028775710476420957973797540569e+03L},
+ {-1571, -6.212594697315241103221658531525719e-2172L, -4.999388243348732042115016793161574e+03L},
+ {-1573, 3.949519833003967643497557871281449e-2175L, -5.006748983251790319939194167759069e+03L},
+ {-1575, -2.507631640002519138728608172242190e-2178L, -5.014110993803050053376291529642809e+03L},
+ {-1577, 1.590127863032669079726447794700184e-2181L, -5.021474273390013091759776029297989e+03L},
+ {-1579, -1.007047411673634629339105633122346e-2184L, -5.028838820404268733850382369300133e+03L},
+ {-1581, 6.369686348346835100184096351184982e-2188L, -5.036204633241478205867956313479471e+03L},
+ {-1583, -4.023806916201411939471949684892598e-2191L, -5.043571710301359218016236347517272e+03L},
+ {-1585, 2.538679442398367154240977719175140e-2194L, -5.050940049987670599005036869019797e+03L},
+ {-1587, -1.599671986388385100340880730419118e-2197L, -5.058309650708197008078045619920340e+03L},
+ {-1589, 1.006716165127995657860843757343687e-2200L, -5.065680510874733724058164354240617e+03L},
+ {-1591, -6.327568605455660954499332227175907e-2204L, -5.073052628903071510926005292424994e+03L},
+ {-1593, 3.972108352451764566540698196595045e-2207L, -5.080426003212981559450807078509481e+03L},
+ {-1595, -2.490350064233081232940876612285295e-2210L, -5.087800632228200504396653053453035e+03L},
+ {-1597, 1.559392651366988874728163188657041e-2213L, -5.095176514376415516830462008525488e+03L},
+ {-1599, -9.752299258079980454835291986598130e-2217L, -5.102553648089249471061777504577013e+03L},
+ {-1601, 6.091379923847583044869014357650300e-2220L, -5.109932031802246185747906650595145e+03L},
+ {-1603, -3.799987475887450433480358301715721e-2223L, -5.117311663954855738701453238942521e+03L},
+ {-1605, 2.367593442920529865096796449667115e-2226L, -5.124692542990419854940753642329693e+03L},
+ {-1607, -1.473300213391742293152953609002561e-2229L, -5.132074667356157367527157192736953e+03L},
+ {-1609, 9.156620344261916054399960279692735e-2233L, -5.139458035503149750736496185580324e+03L},
+ {-1611, -5.683811511025397923277442755861412e-2236L, -5.146842645886326725115464480484190e+03L},
+ {-1613, 3.523751711733042729868222415289158e-2239L, -5.154228496964451933976968196823835e+03L},
+ {-1615, -2.181889604788261752240385396463875e-2242L, -5.161615587200108690891827518206823e+03L},
+ {-1617, 1.349344220648275666196898822797696e-2245L, -5.169003915059685797737495412508597e+03L},
+ {-1619, -8.334430022534130118572568392820854e-2249L, -5.176393479013363432867717427005409e+03L},
+ {-1621, 5.141536102735428820834403696990040e-2252L, -5.183784277535099108970286912441074e+03L},
+ {-1623, -3.167921197002728786712509979661146e-2255L, -5.191176309102613700183252343290581e+03L},
+ {-1625, 1.949489967386294637976929218253013e-2258L, -5.198569572197377538043108108731824e+03L},
+ {-1627, -1.198211412038288038092765346191157e-2261L, -5.205964065304596575841647521554509e+03L},
+ {-1629, 7.355502836330804408181493837883101e-2265L, -5.213359786913198620971277099066987e+03L},
+ {-1631, -4.509811671570082408449720317524894e-2268L, -5.220756735515819634841684676685099e+03L},
+ {-1633, 2.761672793368084757164556226285912e-2271L, -5.228154909608790099953820884049422e+03L},
+ {-1635, -1.689096509705250616002786682743677e-2274L, -5.235554307692121453720194205071780e+03L},
+ {-1637, 1.031824379783292984729863581395038e-2277L, -5.242954928269492588623494514252379e+03L},
+ {-1639, -6.295450761337968180170003547254653e-2281L, -5.250356769848236418308548886105449e+03L},
+ {-1641, 3.836350250662990969024986927029039e-2284L, -5.257759830939326509205576863963969e+03L},
+ {-1643, -2.334966677214236743167977435805867e-2287L, -5.265164110057363777285650497427540e+03L},
+ {-1645, 1.419432630525371880345275036964053e-2290L, -5.272569605720563249552177560173981e+03L},
+ {-1647, -8.618291624319197816304037868634201e-2294L, -5.279976316450740889875114684988175e+03L},
+ {-1649, 5.226374544766038700002448677158400e-2297L, -5.287384240773300488777480941227752e+03L},
+ {-1651, -3.165581190046056147790701803245548e-2300L, -5.294793377217220616786581869477033e+03L},
+ {-1653, 1.915052141588660706467454206440138e-2303L, -5.302203724315041640965169414178206e+03L},
+ {-1655, -1.157131203376834263726558432894343e-2306L, -5.309615280602852804240554790351009e+03L},
+ {-1657, 6.983290304024346793763177024105873e-2310L, -5.317028044620279367152459315367895e+03L},
+ {-1659, -4.209337133227454366343084402716017e-2313L, -5.324442014910469811643132858889743e+03L},
+ {-1661, 2.534218623255541460772477063646007e-2316L, -5.331857190020083106515991038767192e+03L},
+ {-1663, -1.523883718133217955966612786317503e-2319L, -5.339273568499276034191720840814185e+03L},
+ {-1665, 9.152454763562870606406082800705723e-2323L, -5.346691148901690578393480186292288e+03L},
+ {-1667, -5.490374783181086146614326815060422e-2326L, -5.354109929784441372395470330754473e+03L},
+ {-1669, 3.289619402744808955430992699257293e-2329L, -5.361529909708103207471791067279586e+03L},
+ {-1671, -1.968653143473853354536799939711127e-2332L, -5.368951087236698601185097739453354e+03L},
+ {-1673, 1.176720348759027707433831404489616e-2335L, -5.376373460937685425157166255791059e+03L},
+ {-1675, -7.025196111994195268261680026803676e-2339L, -5.383797029381944591966037846453875e+03L},
+ {-1677, 4.189144968392483761634871810854905e-2342L, -5.391221791143767800816959421645709e+03L},
+ {-1679, -2.495023804879382824082711024928472e-2345L, -5.398647744800845341636858283334958e+03L},
+ {-1681, 1.484249735204867831102148140944957e-2348L, -5.406074888934253957244591810081032e+03L},
+ {-1683, -8.819071510427022169353227218924283e-2352L, -5.413503222128444763251693778750715e+03L},
+ {-1685, 5.233870332597639269645832177403136e-2355L, -5.420932742971231225350799404638590e+03L},
+ {-1687, -3.102472040662501048989823460227111e-2358L, -5.428363450053777193651371168700744e+03L},
+ {-1689, 1.836869177420071669028906726007762e-2361L, -5.435795341970584993724767250926284e+03L},
+ {-1691, -1.086262080082833630413309713783420e-2364L, -5.443228417319483574023094093898842e+03L},
+ {-1693, 6.416196574618036801023684074326163e-2368L, -5.450662674701616709338664469893972e+03L},
+ {-1695, -3.785366710689107257241111548275023e-2371L, -5.458098112721431259973242605957737e+03L},
+ {-1697, 2.230622693393699031962941395565718e-2374L, -5.465534729986665486288598619866005e+03L},
+ {-1699, -1.312903292168157170078246848478939e-2377L, -5.472972525108337418312215919255363e+03L},
+ {-1701, 7.718420294933316696521145493703345e-2381L, -5.480411496700733280074297498183419e+03L},
+ {-1703, -4.532249145586210626260214617559216e-2384L, -5.487851643381395968354500409636154e+03L},
+ {-1705, 2.658210642572557552058776901794262e-2387L, -5.495292963771113585519092276871887e+03L},
+ {-1707, -1.557241149720303193941872818860142e-2390L, -5.502735456493908026131469706918194e+03L},
+ {-1709, 9.112002046344664680759934574956943e-2394L, -5.510179120177023617021206060108426e+03L},
+ {-1711, -5.325541815514123133115099108683193e-2397L, -5.517623953450915810499005382514508e+03L},
+ {-1713, 3.108897732349167036261003566073084e-2400L, -5.525069954949239930407130593947370e+03L},
+ {-1715, -1.812768357054907892863558930654860e-2403L, -5.532517123308839970697047411510926e+03L},
+ {-1717, 1.055776562058769885185532283433232e-2406L, -5.539965457169737446228181144395713e+03L},
+ {-1719, -6.141806643739208174435906244521421e-2410L, -5.547414955175120295483821584821760e+03L},
+ {-1721, 3.568742965566070990375308683626625e-2413L, -5.554865615971331834902331906196105e+03L},
+ {-1723, -2.071237937066785252684450774014292e-2416L, -5.562317438207859764523920924339781e+03L},
+ {-1725, 1.200717644676397247933014941457560e-2419L, -5.569770420537325224655324441074966e+03L},
+ {-1727, -6.952620988282554996716936545787842e-2423L, -5.577224561615471903256810829889334e+03L},
+ {-1729, 4.021180444350812606545365266505403e-2426L, -5.584679860101155193757978697506230e+03L},
+ {-1731, -2.323038962652115890551915231949973e-2429L, -5.592136314656331403010850518050424e+03L},
+ {-1733, 1.340472569331861448673926850519315e-2432L, -5.599593923946047009090785741562702e+03L},
+ {-1735, -7.726066682028019877083151876192017e-2436L, -5.607052686638427968657740177742314e+03L},
+ {-1737, 4.447937065070823187727778857911351e-2439L, -5.614512601404669073592385599269543e+03L},
+ {-1739, -2.557755644089030010194237411104860e-2442L, -5.621973666919023356623574645610346e+03L},
+ {-1741, 1.469130180407254457320067438888489e-2445L, -5.629435881858791545665591385021257e+03L},
+ {-1743, -8.428744580649767397131769586279341e-2449L, -5.636899244904311566585567455224914e+03L},
+ {-1745, 4.830226120716199081450870823082717e-2452L, -5.644363754738948094123367696080639e+03L},
+ {-1747, -2.764868987244532960189393716704475e-2455L, -5.651829410049082150688157753209906e+03L},
+ {-1749, 1.580828466120373333441620192512564e-2458L, -5.659296209524100752757759411163823e+03L},
+ {-1751, -9.028146579785113269226842904126579e-2462L, -5.666764151856386604608777548096749e+03L},
+ {-1753, 5.150112139067377791914913236809229e-2465L, -5.674233235741307839107345729358974e+03L},
+ {-1755, -2.934536831377423243256360818694717e-2468L, -5.681703459877207805292185711844533e+03L},
+ {-1757, 1.670197399759489609138509287817141e-2471L, -5.689174822965394902483509649826985e+03L},
+ {-1759, -9.495152926432573104823816303679031e-2475L, -5.696647323710132460653112710498141e+03L},
+ {-1761, 5.391909668615884784113467520544594e-2478L, -5.704120960818628666792808256232632e+03L},
+ {-1763, -3.058371905057223360245869268601585e-2481L, -5.711595733001026537020147862119015e+03L},
+ {-1765, 1.732788614763299354246951426969737e-2484L, -5.719071638970393934162144341569430e+03L},
+ {-1767, -9.806387180324274783514156349574061e-2488L, -5.726548677442713630559477778562783e+03L},
+ {-1769, 5.543463640658154202099579621014166e-2491L, -5.734026847136873415835412439698570e+03L},
+ {-1771, -3.130131925837467081930874997749388e-2494L, -5.741506146774656249375386488851789e+03L},
+ {-1773, 1.765443838599812228951424138606536e-2497L, -5.748986575080730457264956776654797e+03L},
+ {-1775, -9.946162470984857627895347259755133e-2501L, -5.756468130782639973435487749853762e+03L},
+ {-1777, 5.597165149681968276812238187819434e-2504L, -5.763950812610794624768666844107423e+03L},
+ {-1779, -3.146242355076991723896704995963706e-2507L, -5.771434619298460459912608709087996e+03L},
+ {-1781, 1.766559435753504617572546320024540e-2510L, -5.778919549581750121563977386657541e+03L},
+ {-1783, -9.907792685100979347013720246912733e-2514L, -5.786405602199613261972209240066701e+03L},
+ {-1785, 5.550584137311473023537098177542147e-2517L, -5.793892775893827001423560131998167e+03L},
+ {-1787, -3.106090731567696151951369993028622e-2520L, -5.801381069408986429464328188112612e+03L},
+ {-1789, 1.736216171921574148659234205158537e-2523L, -5.808870481492495148624218575637925e+03L},
+ {-1791, -9.694115979461608870235813540807017e-2527L, -5.816361010894555860402419187403638e+03L},
+ {-1793, 5.406645833497829821659684071838827e-2530L, -5.823852656368160993280546063347724e+03L},
+ {-1795, -3.012058960165921906217094190439458e-2533L, -5.831345416669083372528194915566555e+03L},
+ {-1797, 1.676159688461837454767442509983004e-2536L, -5.838839290555866931568400359976359e+03L},
+ {-1799, -9.317174477275361060408240744763780e-2540L, -5.846334276789817464671857507034563e+03L},
+ {-1801, 5.173333968503809583791360768886052e-2543L, -5.853830374134993420750301534066573e+03L},
+ {-1803, -2.869292273157964272762817952793152e-2546L, -5.861327581358196738020969859810075e+03L},
+ {-1805, 1.589635608397764140034802189913104e-2549L, -5.868825897228963719315588674007077e+03L},
+ {-1807, -8.797097998880819812035429938644734e-2553L, -5.876325320519555947808830946367518e+03L},
+ {-1809, 4.862961856761094423457949109256349e-2556L, -5.883825850004951242942686754074650e+03L},
+ {-1811, -2.685235702242459648513500336419850e-2559L, -5.891327484462834656324668928243857e+03L},
+ {-1813, 1.481100773437650109494484465758329e-2562L, -5.898830222673589507379247729401774e+03L},
+ {-1815, -8.160334839876860107407627910514207e-2566L, -5.906334063420288458533367621127853e+03L},
+ {-1817, 4.491103379128706718441182119160268e-2569L, -5.913839005488684629718347319501145e+03L},
+ {-1819, -2.468995810406105947466290334887448e-2572L, -5.921345047667202751971901252936041e+03L},
+ {-1821, 1.355846134215324518103399415094700e-2575L, -5.928852188746930359925446470407811e+03L},
+ {-1823, -7.437444510232169600128356637930333e-2579L, -5.936360427521609022963273983029266e+03L},
+ {-1825, 4.075312060401188821988140623523470e-2582L, -5.943869762787625614841567610553157e+03L},
+ {-1827, -2.230603207663485945258971331977816e-2585L, -5.951380193344003621556646725802807e+03L},
+ {-1829, 1.219575291232086356073795151436750e-2588L, -5.958891717992394487253191940501070e+03L},
+ {-1831, -6.660706123605059290408493454051066e-2592L, -5.966404335537068997964584848772894e+03L},
+ {-1833, 3.633773117078592084238130635052409e-2595L, -5.973918044784908702978854532121154e+03L},
+ {-1835, -1.980257829470622389230588901935918e-2598L, -5.981432844545397373625074723393538e+03L},
+ {-1837, 1.077984664926849422553396244929732e-2601L, -5.988948733630612499276396417748249e+03L},
+ {-1839, -5.861798069205271465760719113266623e-2605L, -5.996465710855216820367231395578747e+03L},
+ {-1841, 3.184029369475975809755958236429453e-2608L, -6.003983775036449898223422674586395e+03L},
+ {-1843, -1.727633949797056869102527529261776e-2611L, -6.011502924994119721505548423639987e+03L},
+ {-1845, 9.363869646596514195677655985158676e-2615L, -6.019023159550594349066806436820096e+03L},
+ {-1847, -5.069772412883873414010642114325217e-2618L, -6.026544477530793589028216968351664e+03L},
+ {-1849, 2.741899628385004550573630132139111e-2621L, -6.034066877762180713875162653378355e+03L},
+ {-1851, -1.481307200640196947905796937946576e-2624L, -6.041590359074754211380555470293888e+03L},
+ {-1853, 7.994102539882336470079853955459123e-2628L, -6.049114920301039571161182321363970e+03L},
+ {-1855, -4.309489239828752814059220461163948e-2631L, -6.056640560276081106675032902579668e+03L},
+ {-1857, 2.320672719347739802939806387271916e-2634L, -6.064167277837433812468656183206741e+03L},
+ {-1859, -1.248344658067638409327491332583064e-2637L, -6.071695071825155256484825101667836e+03L},
+ {-1861, 6.707924008960980168336869062778419e-2641L, -6.079223941081797507242013087760499e+03L},
+ {-1863, -3.600603332775620058151835245721105e-2644L, -6.086753884452399095698400821539999e+03L},
+ {-1865, 1.930618408994970540563986726928207e-2647L, -6.094284900784477011614337315478327e+03L},
+ {-1867, -1.034075205674863706783067341686238e-2650L, -6.101816988928018734228376036983226e+03L},
+ {-1869, 5.532772636034583770909937622719305e-2654L, -6.109350147735474297063194450504262e+03L},
+ {-1871, -2.957120596490958723094568478203798e-2657L, -6.116884376061748386678884129000956e+03L},
+ {-1873, 1.578815054186310049703453538816763e-2660L, -6.124419672764192475192268539497637e+03L},
+ {-1875, -8.420346955660320265085085540356072e-2664L, -6.131956036702596986382066822067465e+03L},
+ {-1877, 4.486066572008694866854067949044257e-2667L, -6.139493466739183495200874430418595e+03L},
+ {-1879, -2.387475557215909987681781771710621e-2670L, -6.147031961738596960516075459128617e+03L},
+ {-1881, 1.269258669439611902010516625045519e-2673L, -6.154571520567897990902936920612315e+03L},
+ {-1883, -6.740619593412702612907682554676149e-2677L, -6.162112142096555143314262226536254e+03L},
+ {-1885, 3.575925513746791837086303742533766e-2680L, -6.169653825196437254452099745343407e+03L},
+ {-1887, -1.895032068758236267666297690796908e-2683L, -6.177196568741805804668112620869234e+03L},
+ {-1889, 1.003193260327282301570300524508686e-2686L, -6.184740371609307314220318117087064e+03L},
+ {-1891, -5.305093920292344270599156660543026e-2690L, -6.192285232677965771714998670515032e+03L},
+ {-1893, 2.802479619805781442471820739853685e-2693L, -6.199831150829175094563672653785620e+03L},
+ {-1895, -1.478881065860570682043177171426747e-2696L, -6.207378124946691621286090649702500e+03L},
+ {-1897, 7.795893863260783774608208600035566e-2700L, -6.214926153916626635491292872519148e+03L},
+ {-1899, -4.105262697872977237813695945253063e-2703L, -6.222475236627438921369825319258448e+03L},
+ {-1901, 2.159527984152013276072433427276729e-2706L, -6.230025371969927350531266355105530e+03L},
+ {-1903, -1.134801883421972294310264544023505e-2709L, -6.237576558837223500022261799071936e+03L},
+ {-1905, 5.956965267306941177481703643168004e-2713L, -6.245128796124784301361305244449801e+03L},
+ {-1907, -3.123736375095407014935345381839540e-2716L, -6.252682082730384720427531387636673e+03L},
+ {-1909, 1.636320783182507603423439173305155e-2719L, -6.260236417554110468041813612691774e+03L},
+ {-1911, -8.562641460923639996982936542674802e-2723L, -6.267791799498350741079473050857149e+03L},
+ {-1913, 4.476027946117950860942465521523681e-2726L, -6.275348227467790993954914867019734e+03L},
+ {-1915, -2.337351407894491311197109932910538e-2729L, -6.282905700369405740319508680890113e+03L},
+ {-1917, 1.219275643137449823264011441267887e-2732L, -6.290464217112451384815023871133393e+03L},
+ {-1919, -6.353703195088326332798392085814938e-2736L, -6.298023776608459084725917096832194e+03L},
+ {-1921, 3.307497759025677424673811601153013e-2739L, -6.305584377771227641374748762943683e+03L},
+ {-1923, -1.719967633398688208358716381254817e-2742L, -6.313146019516816421105977414718608e+03L},
+ {-1925, 8.934896796876302381084240941583465e-2746L, -6.320708700763538305704346229706468e+03L},
+ {-1927, -4.636687491892217115248697945813941e-2749L, -6.328272420431952672095033943749278e+03L},
+ {-1929, 2.403674179311672947251787426549477e-2752L, -6.335837177444858401173693757489748e+03L},
+ {-1931, -1.244782071109100438763224974909103e-2755L, -6.343402970727286915615448080068424e+03L},
+ {-1933, 6.439638236467151778392265778112274e-2759L, -6.350969799206495246512844434000853e+03L},
+ {-1935, -3.327978416778889807954659316853889e-2762L, -6.358537661811959128693708526321270e+03L},
+ {-1937, 1.718109662766592569930128712882751e-2765L, -6.366106557475366124570754442037939e+03L},
+ {-1939, -8.860802799208832232749503418683604e-2769L, -6.373676485130608776375729192330907e+03L},
+ {-1941, 4.565070993925209805641166109574242e-2772L, -6.381247443713777786631779506783487e+03L},
+ {-1943, -2.349496136863206281853405100141144e-2775L, -6.388819432163155226718632850812213e+03L},
+ {-1945, 1.207967165482368268305092596473596e-2778L, -6.396392449419207773386082230379072e+03L},
+ {-1947, -6.204248410284377341063649699402135e-2782L, -6.403966494424579973072155469567679e+03L},
+ {-1949, 3.183298312100757999519573986353071e-2785L, -6.411541566124087533883234365720056e+03L},
+ {-1951, -1.631623942645186058185327517351651e-2788L, -6.419117663464710645094267494111651e+03L},
+ {-1953, 8.354449271096702806888517753976706e-2792L, -6.426694785395587324028092501653481e+03L},
+ {-1955, -4.273375586238722663370085807660719e-2795L, -6.434272930868006790173749548436390e+03L},
+ {-1957, 2.183635966396894564828863468400981e-2798L, -6.441852098835402866404527178183331e+03L},
+ {-1959, -1.114668691371564351622697023175590e-2801L, -6.449432288253347407157335374491452e+03L},
+ {-1961, 5.684185065637758039891366767851045e-2805L, -6.457013498079543753435847939301513e+03L},
+ {-1963, -2.895662285093101395767379912303131e-2808L, -6.464595727273820214500697663042563e+03L},
+ {-1965, 1.473619483507939641611898174200066e-2811L, -6.472178974798123576110843091623881e+03L},
+ {-1967, -7.491710643151701279165725339095407e-2815L, -6.479763239616512635181055082692017e+03L},
+ {-1969, 3.804830189513306896478275946721893e-2818L, -6.487348520695151760721294830700004e+03L},
+ {-1971, -1.930405981488232824189891398641244e-2821L, -6.494934817002304480924572675268210e+03L},
+ {-1973, 9.784115466235341227520990363108183e-2825L, -6.502522127508327096270688837534246e+03L},
+ {-1975, -4.953982514549539862035944487649713e-2828L, -6.510110451185662318514063301742180e+03L},
+ {-1977, 2.505808049848022186158798425720644e-2831L, -6.517699787008832935424662420829923e+03L},
+ {-1979, -1.266199115638212322465284702233777e-2834L, -6.525290133954435501151824521434509e+03L},
+ {-1981, 6.391716888633075832737429087500134e-2838L, -6.532881491001134052081575861324747e+03L},
+ {-1983, -3.223256121347995881360276897377778e-2841L, -6.540473857129653848058811796150148e+03L},
+ {-1985, 1.623806610250879537209207504976211e-2844L, -6.548067231322775138846495987513552e+03L},
+ {-1987, -8.172152039511220620076535002396632e-2848L, -6.555661612565326955694802975274266e+03L},
+ {-1989, 4.108673725244454811501525893613188e-2851L, -6.563256999844180927893896487807550e+03L},
+ {-1991, -2.063623166873156610498003964647508e-2854L, -6.570853392148245124184797518424148e+03L},
+ {-1993, 1.035435608064805123180132445884349e-2857L, -6.578450788468457918903552497634620e+03L},
+ {-1995, -5.190153423883734953283871909194733e-2861L, -6.586049187797781882734662882380101e+03L},
+ {-1997, 2.598975174703923361684462648570222e-2864L, -6.593648589131197697950483207309507e+03L},
+};
+
+ /**
+ * @brief This returns Bernoulli numbers from a table or by summation
+ * for larger values.
+ *
+ * Upward recursion is unstable.
+ *
+ * @param __n the order n of the Bernoulli number.
+ * @return The Bernoulli number of order n.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __bernoulli_series(unsigned int __n)
+ {
+ constexpr unsigned long _S_num_bern_tab = 13;
+ constexpr _Tp
+ _S_bernoulli_2n[_S_num_bern_tab]
+ {
+ _Tp{1ULL},
+ _Tp{1ULL} / _Tp{6ULL},
+ -_Tp{1ULL} / _Tp{30ULL},
+ _Tp{1ULL} / _Tp{42ULL},
+ -_Tp{1ULL} / _Tp{30ULL},
+ _Tp{5ULL} / _Tp{66ULL},
+ -_Tp{691ULL} / _Tp{2730ULL},
+ _Tp{7ULL} / _Tp{6ULL},
+ -_Tp{3617ULL} / _Tp{510ULL},
+ _Tp{43867ULL} / _Tp{798ULL},
+ -_Tp{174611ULL} / _Tp{330ULL},
+ _Tp{854513ULL} / _Tp{138ULL},
+ -_Tp{23749461029ULL} / _Tp{2730ULL}
+ };
+ constexpr _Tp _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+
+ if (__n == 0)
+ return _Tp{1};
+ else if (__n == 1)
+ return -_Tp{1} / _Tp{2};
+ // Take care of the rest of the odd ones.
+ else if (__n % 2 == 1)
+ return _Tp{0};
+ // Take care of some small evens that are painful for the series.
+ else if (__n / 2 < _S_num_bern_tab)
+ return _S_bernoulli_2n[__n / 2];
+ else
+ {
+ auto __fact = _Tp{1};
+ if ((__n / 2) % 2 == 0)
+ __fact *= -_Tp{1};
+ for (unsigned int __k = 1; __k <= __n; ++__k)
+ __fact *= __k / _S_2pi;
+ __fact *= _Tp{2};
+
+ // Riemann zeta function minus-1 for even integer argument.
+ auto __sum = _Tp{0};
+ for (unsigned int __i = 2; __i < 1000; ++__i)
+ {
+ auto __term = std::pow(_Tp(__i), -_Tp(__n));
+ __sum += __term;
+ if (__term < __gnu_cxx::__epsilon<_Tp>() * __sum)
+ break;
+ }
+
+ return __fact + __fact * __sum;
+ }
+ }
+
+
+ /**
+ * @brief This returns Bernoulli number @f$ B_n @f$.
+ *
+ * @param __n the order n of the Bernoulli number.
+ * @return The Bernoulli number of order n.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __bernoulli(int __n)
+ { return __bernoulli_series<_Tp>(__n); }
+
+
+ /**
+ * @brief This returns Bernoulli number @f$ B_2n @f$ at even integer
+ * arguments @f$ 2n @f$.
+ *
+ * @param __n the half-order n of the Bernoulli number.
+ * @return The Bernoulli number of order 2n.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __bernoulli_2n(int __n)
+ { return __bernoulli_series<_Tp>(2 * __n); }
+
+
+ /**
+ * @brief Return @f$log(\Gamma(x))@f$ by asymptotic expansion
+ * with Bernoulli number coefficients. This is like
+ * Sterling's approximation.
+ *
+ * @param __x The argument of the log of the gamma function.
+ * @return The logarithm of the gamma function.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __log_gamma_bernoulli(_Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_eps = _Real{0.01L} * __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_ln2pi
+ = __gnu_cxx::__math_constants<_Real>::__ln_2
+ + __gnu_cxx::__math_constants<_Real>::__ln_pi;
+
+ auto __lg = (__x - _Real{0.5L}) * std::log(__x)
+ - __x + _Real{0.5L} * _S_ln2pi;
+
+ const auto __xx = _Real{1} / (__x * __x);
+ auto __xk = _Real{1} / __x;
+ for ( unsigned int __i = 1; __i < 100; ++__i )
+ {
+ const auto __2i = _Tp(2 * __i);
+ const auto __term = __bernoulli<_Tp>(__2i) * __xk
+ / (__2i * (__2i - _Tp{1}));
+ __lg += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__lg))
+ break;
+ __xk *= __xx;
+ }
+
+ return __lg;
+ }
+
+
+ /**
+ * A struct for Spouge algorithm Chebyshev arrays of coefficients.
+ */
+ template<typename _Tp>
+ struct _GammaSpouge
+ {
+ };
+
+ template<>
+ struct _GammaSpouge<float>
+ {
+ static constexpr std::array<float, 7>
+ _S_cheby
+ {
+ 2.901419e+03F,
+ -5.929168e+03F,
+ 4.148274e+03F,
+ -1.164761e+03F,
+ 1.174135e+02F,
+ -2.786588e+00F,
+ 3.775392e-03F,
+ };
+ };
+
+ template<>
+ struct _GammaSpouge<double>
+ {
+ static constexpr std::array<double, 18>
+ _S_cheby
+ {
+ 2.785716565770350e+08,
+ -1.693088166941517e+09,
+ 4.549688586500031e+09,
+ -7.121728036151557e+09,
+ 7.202572947273274e+09,
+ -4.935548868770376e+09,
+ 2.338187776097503e+09,
+ -7.678102458920741e+08,
+ 1.727524819329867e+08,
+ -2.595321377008346e+07,
+ 2.494811203993971e+06,
+ -1.437252641338402e+05,
+ 4.490767356961276e+03,
+ -6.505596924745029e+01,
+ 3.362323142416327e-01,
+ -3.817361443986454e-04,
+ 3.273137866873352e-08,
+ -7.642333165976788e-15,
+ };
+ };
+
+ template<>
+ struct _GammaSpouge<long double>
+ {
+ static constexpr std::array<long double, 22>
+ _S_cheby
+ {
+ 1.681473171108908244e+10L,
+ -1.269150315503303974e+11L,
+ 4.339449429013039995e+11L,
+ -8.893680202692714895e+11L,
+ 1.218472425867950986e+12L,
+ -1.178403473259353616e+12L,
+ 8.282455311246278274e+11L,
+ -4.292112878930625978e+11L,
+ 1.646988347276488710e+11L,
+ -4.661514921989111004e+10L,
+ 9.619972564515443397e+09L,
+ -1.419382551781042824e+09L,
+ 1.454145470816386107e+08L,
+ -9.923020719435758179e+06L,
+ 4.253557563919127284e+05L,
+ -1.053371059784341875e+04L,
+ 1.332425479537961437e+02L,
+ -7.118343974029489132e-01L,
+ 1.172051640057979518e-03L,
+ -3.323940885824119041e-07L,
+ 4.503801674404338524e-12L,
+ -5.320477002211632680e-20L,
+ };
+ };
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+ template<>
+ struct _GammaSpouge<__float128>
+ {
+ static constexpr std::array<__float128, 40>
+ _S_cheby
+ {
+ 1.488707141702962349642653219904701e+18Q,
+ -2.109024888057172629401888926607933e+19Q,
+ 1.417814156004491800291266261243181e+20Q,
+ -6.017978256631943800541949222618531e+20Q,
+ 1.810303371559858936645834474459794e+21Q,
+ -4.106765117367170106628989406117407e+21Q,
+ 7.299495565278381248758472830920901e+21Q,
+ -1.042658085606638732437326916809544e+22Q,
+ 1.218085331069918351049721248713456e+22Q,
+ -1.178425136120009375043789561151657e+22Q,
+ 9.524552911654596104822221145923981e+21Q,
+ -6.470848515795635226546940452396693e+21Q,
+ 3.710085524031367371144056238201665e+21Q,
+ -1.799208570324458717498947049552296e+21Q,
+ 7.385190850868692826830617550673786e+20Q,
+ -2.564085902302497902610094974644620e+20Q,
+ 7.515077439232198453710859556732366e+19Q,
+ -1.853282816124970754507275065198273e+19Q,
+ 3.827869971220176147395256318872661e+18Q,
+ -6.582119247090799001499961431273749e+17Q,
+ 9.351471019350666459087977506154173e+16Q,
+ -1.087561099332606693611359806619008e+16Q,
+ 1.023682895113200510083891964414548e+15Q,
+ -7.692392155137210713863610487671446e+13Q,
+ 4.538847752507923706006970038411543e+12Q,
+ -2.061098065296257001203592871224284e+11Q,
+ 7.029050529288024691234709461995537e+09Q,
+ -1.746978910485928115412705762596253e+08Q,
+ 3.048305382188066788914727298031581e+06Q,
+ -3.562744619669248206793629956902640e+04Q,
+ 2.625939669969919276517969162685481e+02Q,
+ -1.127892258247142779807411800956670e+00Q,
+ 2.538684230850237447901013114737673e-03Q,
+ -2.583211865372192597501314906164821e-06Q,
+ 9.590040155479072110068965236664741e-10Q,
+ -9.347057516377501180809930331336725e-14Q,
+ 1.386220962446620618073769872331415e-18Q,
+ -1.138134595144440607620794028391791e-24Q,
+ 5.491908932091769529804906638081618e-33Q,
+ -1.332629445370080503706686280760692e-46Q,
+ };
+ };
+#endif
+
+ /**
+ * @brief Return @f$\Gamma(z)@f$ by the Spouge algorithm:
+ * @f[
+ * \Gamma(z+1) = (z+a)^{z+1/2}e^{-z-a}\left[ \sqrt{2\pi} +
+ * \sum_{k=1}^{\lceil a \rceil + 1}\frac{c_k(a)}{z+k}\right]
+ * @f]
+ * where
+ * @f[
+ * c_k(a) = \frac{(-1)^{k-1}}{(k-1)!}(a-k)^{k-1/2}e^{a-k}
+ * @f]
+ * and the error is bounded by
+ * @f[
+ * \epsilon(a) < a^{-1/2}(2\pi)^{-a-1/2}
+ * @f]
+ * @see Spouge, J.L., Computation of the gamma, digamma,
+ * and trigamma functions.
+ * SIAM Journal on Numerical Analysis 31, 3 (1994), pp. 931-944
+ *
+ * @param __z The argument of the gamma function.
+ * @return The the gamma function.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __log_gamma1p_spouge(_Tp __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_ln_pi = __gnu_cxx::__math_constants<_Real>::__ln_pi;
+ constexpr auto _S_sqrt_pi = __gnu_cxx::__math_constants<_Real>::__root_pi;
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Real>::__root_2;
+ constexpr auto _S_sqrt_2pi = _S_sqrt_2 * _S_sqrt_pi;
+ auto __a = _Real{_GammaSpouge<_Real>::_S_cheby.size() + 1};
+ const auto& __c = _GammaSpouge<_Real>::_S_cheby;
+
+ // Reflection; move the transition upwards to prevent instability.
+ if (std::real(__z) < _Real{-0.5L})
+ return _S_ln_pi - std::log(__sin_pi(__z))
+ - __log_gamma1p_spouge(-_Real{1} - __z);
+ else
+ {
+ _Val __sum = _S_sqrt_2pi;
+ for (int __k = 0; __k < __c.size(); ++__k)
+ __sum += __c[__k] / (__z + _Real(__k + 1));
+ return std::log(__sum)
+ + (__z + _Real{0.5L}) * std::log(__z + __a)
+ - (__z + __a);
+ }
+ }
+
+
+ /**
+ * A struct for Lanczos algorithm Chebyshev arrays of coefficients.
+ */
+ template<typename _Tp>
+ struct _GammaLanczos
+ {
+ };
+
+ template<>
+ struct _GammaLanczos<float>
+ {
+ static constexpr float _S_g = 6.5F;
+ static constexpr std::array<float, 7>
+ _S_cheby
+ {
+ 3.307139e+02F,
+ -2.255998e+02F,
+ 6.989520e+01F,
+ -9.058929e+00F,
+ 4.110107e-01F,
+ -4.150391e-03F,
+ -3.417969e-03F,
+ };
+ };
+
+ template<>
+ struct _GammaLanczos<double>
+ {
+ static constexpr double _S_g = 9.5;
+ static constexpr std::array<double, 10>
+ _S_cheby
+ {
+ 5.557569219204146e+03,
+ -4.248114953727554e+03,
+ 1.881719608233706e+03,
+ -4.705537221412237e+02,
+ 6.325224688788239e+01,
+ -4.206901076213398e+00,
+ 1.202512485324405e-01,
+ -1.141081476816908e-03,
+ 2.055079676210880e-06,
+ 1.280568540096283e-09,
+ };
+ };
+
+ template<>
+ struct _GammaLanczos<long double>
+ {
+ static constexpr long double _S_g = 10.5L;
+ static constexpr std::array<long double, 11>
+ _S_cheby
+ {
+ 1.440399692024250728e+04L,
+ -1.128006201837065341e+04L,
+ 5.384108670160999829e+03L,
+ -1.536234184127325861e+03L,
+ 2.528551924697309561e+02L,
+ -2.265389090278717887e+01L,
+ 1.006663776178612579e+00L,
+ -1.900805731354182626e-02L,
+ 1.150508317664389324e-04L,
+ -1.208915136885480024e-07L,
+ -1.518856151960790157e-10L,
+ };
+ };
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+ template<>
+ struct _GammaLanczos<__float128>
+ {
+ static constexpr __float128 _S_g = 13.5Q;
+ static constexpr std::array<__float128, 14>
+ _S_cheby
+ {
+ 2.564476893267270739326759539239521e+05Q,
+ -2.115503710351143292058877626137631e+05Q,
+ 1.184019145386031178030546551084647e+05Q,
+ -4.454725318050137764345651484051269e+04Q,
+ 1.108444304734911694218772523380670e+04Q,
+ -1.779039702565864879298077142685014e+03Q,
+ 1.775917720477127714789670669062174e+02Q,
+ -1.046153541164985987873520383376722e+01Q,
+ 3.366596234159295518095091028749941e-01Q,
+ -5.260241043537793269590387229607226e-03Q,
+ 3.290526994052737279641248387319708e-05Q,
+ -5.791840871423216610203896349432783e-08Q,
+ 1.318192361117106013253744235732287e-11Q,
+ -3.352799410216973507737605805778536e-17Q,
+ };
+ };
+#endif
+
+ /**
+ * @brief Return @f$log(\Gamma(x))@f$ by the Lanczos method.
+ * This method dominates all others on the positive axis I think.
+ *
+ * @param __x The argument of the log of the gamma function.
+ * @return The logarithm of the gamma function.
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __log_gamma1p_lanczos(_Tp __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_ln_2 = __gnu_cxx::__math_constants<_Real>::__ln_2;
+ constexpr auto _S_ln_pi = __gnu_cxx::__math_constants<_Real>::__ln_pi;
+ constexpr auto _S_log_sqrt_2pi = (_S_ln_2 + _S_ln_pi) / _Real{2};
+ const auto& __c = _GammaLanczos<_Real>::_S_cheby;
+ auto __g = _GammaLanczos<_Real>::_S_g;
+ // Reflection; move the transition upwards to prevent instability.
+ if (std::real(__z) < _Real{-0.5L})
+ return _S_ln_pi - std::log(__sin_pi(__z))
+ - __log_gamma1p_lanczos(-_Real{1} - __z);
+ else
+ {
+ auto __fact = _Val{1};
+ auto __sum = _Val{0.5L} * __c[0];
+ for (unsigned int __k = 1, __n = __c.size(); __k < __n; ++__k)
+ {
+ __fact *= (__z - _Real(__k - 1)) / (__z + _Real(__k));
+ __sum += __fact * __c[__k];
+ }
+ return _S_log_sqrt_2pi + std::log(__sum)
+ + (__z + _Real{0.5L}) * std::log(__z + __g + _Real{0.5L})
+ - (__z + __g + _Real{0.5L});
+ }
+ }
+
+
+ /**
+ * @brief Return @f$ log(|\Gamma(x)|) @f$.
+ * This will return values even for @f$ x < 0 @f$.
+ * To recover the sign of @f$ \Gamma(x) @f$ for
+ * any argument use @a __log_gamma_sign.
+ *
+ * @param __x The argument of the log of the gamma function.
+ * @return The logarithm of the gamma function.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_gamma(_Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_logpi = __gnu_cxx::__math_constants<_Real>::__ln_pi;
+ if (std::real(__x) >= _Real{0.5L})
+ return __log_gamma1p_spouge(__x - _Real{1});
+ else
+ {
+ const auto __sin_fact = std::abs(__sin_pi(__x));
+ if (__sin_fact < _S_eps * std::abs(__x))
+ return __gnu_cxx::__infinity<_Real>();
+ else
+ return _S_logpi - std::log(__sin_fact) - __log_gamma(_Val{1} - __x);
+ }
+ }
+
+ /**
+ * @brief Return @f$ log(\Gamma(x)) @f$ for complex argument.
+ *
+ * @param __x The complex argument of the log of the gamma function.
+ * @return The complex logarithm of the gamma function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __log_gamma(std::complex<_Tp> __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ using _Cmplx = std::complex<_Real>;
+ constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_logpi = __gnu_cxx::__math_constants<_Real>::__ln_pi;
+ if (std::real(__x) >= _Real{0.5L})
+ return __log_gamma1p_spouge(__x - _Real{1});
+ else
+ {
+ const auto __sin_fact = __sin_pi(__x);
+ if (std::abs(__sin_fact) < _S_eps * std::abs(__x))
+ return _Cmplx(__gnu_cxx::__quiet_NaN<_Real>(), _Real{0});
+ else
+ return _S_logpi - std::log(__sin_fact) - __log_gamma(_Val{1} - __x);
+ }
+ }
+
+
+ /**
+ * @brief Return the sign of @f$ \Gamma(x) @f$.
+ * At nonpositive integers zero is returned indicating @f$ \Gamma(x) @f$
+ * is undefined.
+ *
+ * @param __x The argument of the gamma function.
+ * @return The sign of the gamma function.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_gamma_sign(_Tp __x)
+ {
+ if (__x >= _Tp{0})
+ return _Tp{1};
+ else if (__x == std::nearbyint(__x))
+ return _Tp{0};
+ else
+ return (int(-__x) % 2 == 0) ? -_Tp{1} : _Tp{1};
+ }
+
+ template<typename _Tp>
+ std::complex<_Tp>
+ __log_gamma_sign(std::complex<_Tp> __x)
+ { return std::complex<_Tp>{1}; }
+
+
+ /**
+ * @brief Return the logarithm of the binomial coefficient.
+ * The binomial coefficient is given by:
+ * @f[
+ * \binom{n}{k} = \frac{n!}{(n-k)! k!}
+ * @f]
+ * The binomial coefficients are generated by:
+ * @f[
+ * \left(1 + t\right)^n = \sum_{k=0}^n \binom{n}{k} t^k
+ * @f]
+ *
+ * @param __n The first argument of the binomial coefficient.
+ * @param __k The second argument of the binomial coefficient.
+ * @return The logarithm of the binomial coefficient.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_bincoef(unsigned int __n, unsigned int __k)
+ {
+ if (__k > __n)
+ return -__gnu_cxx::__infinity<_Tp>();
+ else if (__k == 0 || __k == __n)
+ return _Tp{0};
+ else
+ return __log_gamma(_Tp(1 + __n))
+ - __log_gamma(_Tp(1 + __k))
+ - __log_gamma(_Tp(1 + __n - __k));
+ }
+
+
+ /**
+ * @brief Return the logarithm of the binomial coefficient
+ * for non-integral degree.
+ * The binomial coefficient is given by:
+ * @f[
+ * \binom{\nu}{k} = \frac{\Gamma(\nu+1)}{\Gamma(\nu-k+1) \Gamma(k+1)}
+ * @f]
+ * The binomial coefficients are generated by:
+ * @f[
+ * \left(1 + t\right)^\nu = \sum_{k=0}^\infty \binom{\nu}{k} t^k
+ * @f]
+ *
+ * @param __nu The first argument of the binomial coefficient.
+ * @param __k The second argument of the binomial coefficient.
+ * @return The logarithm of the binomial coefficient.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_bincoef(_Tp __nu, unsigned int __k)
+ {
+ auto __n = std::nearbyint(__nu);
+ if (__n >= 0 && __nu == __n)
+ return __log_bincoef<_Tp>((unsigned int)__n, __k);
+ else
+ {
+ return __log_gamma(_Tp(1) + __nu)
+ - __log_gamma(_Tp(1 + __k))
+ - __log_gamma(_Tp(1 - __k) + __nu);
+ }
+ }
+
+ /**
+ * @brief Return the sign of @f$ \Gamma(x) @f$.
+ * At nonpositive integers zero is returned.
+ *
+ * @param __x The argument of the gamma function.
+ * @return The sign of the gamma function.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_bincoef_sign(_Tp __nu, unsigned int __k)
+ {
+ auto __n = std::nearbyint(__nu);
+ if (__n >= 0 && __nu == __n)
+ return _Tp{1};
+ else
+ {
+ return __log_gamma_sign(_Tp(1) + __nu)
+ * __log_gamma_sign(_Tp(1 + __k))
+ * __log_gamma_sign(_Tp(1 - __k) + __nu);
+ }
+ }
+
+ template<typename _Tp>
+ std::complex<_Tp>
+ __log_bincoef_sign(std::complex<_Tp> __nu, unsigned int __k)
+ { return std::complex<_Tp>{1}; }
+
+
+ /**
+ * @brief Return the binomial coefficient.
+ * The binomial coefficient is given by:
+ * @f[
+ * \binom{n}{k} = \frac{n!}{(n-k)! k!}
+ * @f]
+ * The binomial coefficients are generated by:
+ * @f[
+ * \left(1 + t\right)^n = \sum_{k=0}^n \binom{n}{k} t^k
+ * @f]
+ *
+ * @param __n The first argument of the binomial coefficient.
+ * @param __k The second argument of the binomial coefficient.
+ * @return The binomial coefficient.
+ */
+ template<typename _Tp>
+ _Tp
+ __bincoef(unsigned int __n, unsigned int __k)
+ {
+ // Max e exponent before overflow.
+ constexpr auto __max_bincoeff
+ = std::numeric_limits<_Tp>::max_exponent10
+ * std::log(_Tp(10)) - _Tp(1);
+
+ if (__k > __n)
+ return _Tp{0};
+ else if (__k == 0 || __k == __n)
+ return _Tp{1};
+ else
+ {
+ const auto __log_coeff = __log_bincoef<_Tp>(__n, __k);
+ if (__log_coeff > __max_bincoeff)
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ return std::exp(__log_coeff);
+ }
+ }
+
+
+ /**
+ * @brief Return the binomial coefficient for non-integral degree.
+ * The binomial coefficient is given by:
+ * @f[
+ * \binom{\nu}{k} = \frac{\Gamma(\nu+1)}{\Gamma(\nu-k+1) \Gamma(k+1)}
+ * @f]
+ * The binomial coefficients are generated by:
+ * @f[
+ * \left(1 + t\right)^\nu = \sum_{k=0}^\infty \binom{\nu}{k} t^k
+ * @f]
+ *
+ * @param __nu The real first argument of the binomial coefficient.
+ * @param __k The second argument of the binomial coefficient.
+ * @return The binomial coefficient.
+ */
+ template<typename _Tp>
+ _Tp
+ __bincoef(_Tp __nu, unsigned int __k)
+ {
+ // Max e exponent before overflow.
+ auto __n = std::nearbyint(__nu);
+ if (__n >= 0 && __nu == __n)
+ return __bincoef<_Tp>((unsigned int)__n, __k);
+ else
+ {
+ constexpr auto __max_bincoeff
+ = std::numeric_limits<_Tp>::max_exponent10
+ * std::log(_Tp(10)) - _Tp(1);
+
+ const auto __log_coeff = __log_bincoef(__nu, __k);
+ const auto __sign = __log_bincoef_sign(__nu, __k);
+ if (__log_coeff > __max_bincoeff || __sign == _Tp{0})
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ return std::exp(__log_coeff) * __sign;
+ }
+ }
+
+
+ /**
+ * @brief Return the gamma function @f$ \Gamma(x) @f$.
+ * The gamma function is defined by:
+ * @f[
+ * \Gamma(a) = \int_0^\infty e^{-t}t^{a-1}dt (a > 0)
+ * @f]
+ *
+ * @param __x The argument of the gamma function.
+ * @return The gamma function.
+ */
+ template<typename _Tp>
+ _Tp
+ __gamma(_Tp __x)
+ {
+ const auto __sign = __log_gamma_sign(__x);
+ if (__sign == _Tp{0})
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ return __sign * std::exp(__log_gamma(__x));
+ }
+
+
+ /**
+ * @brief Return the incomplete gamma function by series summation.
+ */
+ template<typename _Tp>
+ std::pair<_Tp, _Tp>
+ __gamma_series(_Tp __a, _Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>();
+ const auto _S_itmax = 10 * int(10 + std::sqrt(std::abs(__a)));
+
+ auto __lngam = __log_gamma(__a);
+
+ if (std::real(__x) < _Real{0})
+ std::__throw_domain_error(__N("__gamma_series: argument less than 0"));
+ else if (__x == _Real{0})
+ return std::make_pair(_Val{0}, __lngam);
+ else
+ {
+ auto __aa = __a;
+ _Val __term, __sum;
+ __term = __sum = _Tp{1} / __a;
+ for (unsigned int __n = 1; __n <= _S_itmax; ++__n)
+ {
+ __aa += _Real{1};
+ __term *= __x / __aa;
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ {
+ auto __gamser = std::exp(-__x + __a * std::log(__x) - __lngam)
+ * __sum;
+ return std::make_pair(__gamser, __lngam);
+ }
+ }
+ std::__throw_logic_error(__N("__gamma_series: "
+ "a too large, itmax too small in routine."));
+ }
+ }
+
+ /**
+ * @brief Return the incomplete gamma function by continued fraction.
+ */
+ template<typename _Tp>
+ std::pair<_Tp, _Tp>
+ __gamma_cont_frac(_Tp __a, _Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_fpmin = _Real{3} * __gnu_cxx::__min<_Real>();
+ constexpr auto _S_eps = _Real{3} * __gnu_cxx::__epsilon<_Real>();
+ const auto _S_itmax = 10 * int(10 + std::sqrt(std::abs(__a)));
+
+ auto __lngam = __log_gamma(__a);
+
+ auto __b = __x + _Real{1} - __a;
+ auto __c = _Real{1} / _S_fpmin;
+ auto __d = _Real{1} / __b;
+ auto __h = __d;
+ for (unsigned int __n = 1; __n <= _S_itmax; ++__n)
+ {
+ auto __an = -_Real{__n} * (_Real{__n} - __a);
+ __b += _Real{2};
+ __d = __an * __d + __b;
+ if (std::abs(__d) < _S_fpmin)
+ __d = _S_fpmin;
+ __c = __b + __an / __c;
+ if (std::abs(__c) < _S_fpmin)
+ __c = _S_fpmin;
+ __d = _Real{1} / __d;
+ auto __del = __d * __c;
+ __h *= __del;
+ if (std::abs(__del - _Real{1}) < _S_eps)
+ {
+ auto __gamcf = std::exp(-__x + __a * std::log(__x) - __lngam)
+ * __h;
+ return std::make_pair(__gamcf, __lngam);
+ }
+ }
+ std::__throw_logic_error(__N("__gamma_cont_fraction: "
+ "a too large, itmax too small in routine."));
+ }
+
+
+ /**
+ * @brief Return the regularized lower incomplete gamma function.
+ * The regularized lower incomplete gamma function is defined by
+ * @f[
+ * P(a,x) = \frac{\gamma(a,x)}{\Gamma(a)}
+ * @f]
+ * where @f$ \Gamma(a) @f$ is the gamma function and
+ * @f[
+ * \gamma(a,x) = \int_0^x e^{-t}t^{a-1}dt (a > 0)
+ * @f]
+ * is the lower incomplete gamma function.
+ */
+ template<typename _Tp>
+ _Tp
+ __pgamma(_Tp __a, _Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__a) || __isnan(__x))
+ return _S_NaN;
+
+ if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0})
+ std::__throw_domain_error("pgamma: invalid arguments");
+
+ if (std::real(__x) < std::real(__a + _Real{1}))
+ return __gamma_series(__a, __x).first;
+ else
+ return _Val{1} - __gamma_cont_frac(__a, __x).first;
+ }
+
+
+ /**
+ * @brief Return the regularized upper incomplete gamma function.
+ * The regularized upper incomplete gamma function is defined by
+ * @f[
+ * Q(a,x) = \frac{\Gamma(a,x)}{\Gamma(a)}
+ * @f]
+ * where @f$ \Gamma(a) @f$ is the gamma function and
+ * @f[
+ * \Gamma(a,x) = \int_x^\infty e^{-t}t^{a-1}dt (a > 0)
+ * @f]
+ * is the upper incomplete gamma function.
+ */
+ template<typename _Tp>
+ _Tp
+ __qgamma(_Tp __a, _Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__a) || __isnan(__x))
+ return _S_NaN;
+
+ if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0})
+ std::__throw_domain_error("__qgamma: invalid arguments");
+
+ if (std::real(__x) < std::real(__a + _Real{1}))
+ return _Val{1} - __gamma_series(__a, __x).first;
+ else
+ return __gamma_cont_frac(__a, __x).first;
+ }
+
+
+ /**
+ * @brief Return the lower incomplete gamma function.
+ * The lower incomplete gamma function is defined by
+ * @f[
+ * \gamma(a,x) = \int_0^x e^{-t}t^{a-1}dt (a > 0)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __tgamma_lower(_Tp __a, _Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__a) || __isnan(__x))
+ return _S_NaN;
+
+ if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0})
+ std::__throw_domain_error("__tgamma_lower: invalid arguments");
+
+ if (std::real(__x) < std::real(__a + _Real{1}))
+ {
+ std::pair<_Tp, _Tp> __gp = __gamma_series(__a, __x);
+ return std::exp(__gp.second) * __gp.first;
+ }
+ else
+ {
+ std::pair<_Tp, _Tp> __gp = __gamma_cont_frac(__a, __x);
+ return std::exp(__gp.second) * (_Tp{1} - __gp.first);
+ }
+ }
+
+
+ /**
+ * @brief Return the upper incomplete gamma function.
+ * The lower incomplete gamma function is defined by
+ * @f[
+ * \Gamma(a,x) = \int_x^\infty e^{-t}t^{a-1}dt (a > 0)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __tgamma(_Tp __a, _Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+
+ if (__isnan(__a) || __isnan(__x))
+ return _S_NaN;
+
+ if (std::real(__x) < _Real{0} || std::real(__a) <= _Real{0})
+ std::__throw_domain_error("__tgamma: invalid arguments");
+
+ if (std::real(__x) < std::real(__a + _Real{1}))
+ {
+ auto __gp = __gamma_series(__a, __x);
+ return std::exp(__gp.second) * (_Tp{1} - __gp.first);
+ }
+ else
+ {
+ auto __gp = __gamma_cont_frac(__a, __x);
+ return std::exp(__gp.second) * __gp.first;
+ }
+ }
+
+
+ /**
+ * @brief Return the logarithm of the (upper) Pochhammer symbol
+ * or the rising factorial function.
+ * The Pochammer symbol is defined for integer order by
+ * @f[
+ * (a)_n = \prod_{k=0}^{n-1} (a + k), (a)_0 = 1
+ * = \Gamma(a + n) / \Gamma(n)
+ * @f]
+ * Thus this function returns
+ * @f[
+ * ln[(a)_n] = \Gamma(a + n) - \Gamma(n), ln[(a)_0] = 0
+ * @f]
+ * Many notations exist: @f[ a^{\overline{n}} @f],
+ * @f[ \left[ \begin{array}{c}
+ * a \\
+ * n \end{array} \right] @f], and others.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_pochhammer(_Tp __a, _Tp __n)
+ {
+ if (__isnan(__n) || __isnan(__a))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__n == _Tp{0})
+ return _Tp{0};
+ else
+ return __log_gamma(__a + __n) - __log_gamma(__a);
+ }
+
+
+ /**
+ * @brief Return the (upper) Pochhammer function
+ * or the rising factorial function.
+ * The Pochammer symbol is defined by
+ * @f[
+ * (a)_n = \prod_{k=0}^{n-1} (a + k), (a)_0 = 1
+ * = \Gamma(a + n) / \Gamma(n)
+ * @f]
+ * Many notations exist: @f[ a^{\overline{n}} @f],
+ * @f[ \left[ \begin{array}{c}
+ * a \\
+ * n \end{array} \right] @f], and others.
+ */
+ template<typename _Tp>
+ _Tp
+ __pochhammer(_Tp __a, _Tp __n)
+ {
+ constexpr auto __log10{2.3025850929940456840179914546843642L};
+ if (__isnan(__n) || __isnan(__a))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__n == _Tp{0})
+ return _Tp{1};
+ else
+ {
+ _Tp __logpoch = __log_gamma(__a + __n) - __log_gamma(__a);
+ if (std::abs(__logpoch)
+ > std::numeric_limits<_Tp>::max_digits10 * __log10)
+ return __gnu_cxx::__infinity<_Tp>();
+ else
+ return std::exp(__logpoch);
+ }
+ }
+
+
+ /**
+ * @brief Return the logarithm of the lower Pochhammer symbol
+ * or the falling factorial function.
+ * The lower Pochammer symbol is defined by
+ * @f[
+ * (a)_n = \prod_{k=0}^{n-1} (a - k), (a)_0 = 1
+ * = \Gamma(a + 1) / \Gamma(a - n + 1)
+ * @f]
+ * In particular, $f[ (n)_n = n! $f].
+ * Thus this function returns
+ * @f[
+ * ln[(a)_n] = \Gamma(a + 1) - \Gamma(a - n + 1), ln[(a)_0] = 0
+ * @f]
+ * Many notations exist: @f[ a^{\underline{n}} @f],
+ * @f[ \{ \begin{array}{c}
+ * a \\
+ * n \end{array} \} @f], and others.
+ */
+ template<typename _Tp>
+ _Tp
+ __log_pochhammer_lower(_Tp __a, _Tp __n)
+ {
+ if (__isnan(__n) || __isnan(__a))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__n == _Tp{0})
+ return _Tp{0};
+ else
+ return __log_gamma(__a + _Tp{1}) - __log_gamma(__a - __n + _Tp{1});
+ }
+
+
+ /**
+ * @brief Return the logarithm of the lower Pochhammer symbol
+ * or the falling factorial function.
+ * The lower Pochammer symbol is defined by
+ * @f[
+ * (a)_n = \prod_{k=0}^{n-1} (a - k), (a)_0 = 1
+ * = \Gamma(a + 1) / \Gamma(a - n + 1)
+ * @f]
+ * In particular, $f[ (n)_n = n! $f].
+ */
+ template<typename _Tp>
+ _Tp
+ __pochhammer_lower(_Tp __a, _Tp __n)
+ {
+ constexpr auto __log10{2.3025850929940456840179914546843642L};
+ if (__isnan(__n) || __isnan(__a))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__n == _Tp{0})
+ return _Tp{1};
+ else
+ {
+ auto __logpoch = __log_gamma(__a + _Tp{1})
+ - __log_gamma(__a - __n + _Tp{1});
+ auto __sign = __log_gamma_sign(__a + _Tp{1})
+ * __log_gamma_sign(__a - __n + _Tp{1});
+ if (__sign == _Tp{0})
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__logpoch > __gnu_cxx::__log_max<_Tp>())
+ return __sign * __gnu_cxx::__infinity<_Tp>();
+ else
+ return __sign * std::exp(__logpoch);
+ }
+ }
+
+ constexpr unsigned long long
+ _S_num_harmonic_numer = 29;
+ constexpr unsigned long long
+ _S_harmonic_numer[_S_num_harmonic_numer]
+ {
+ 1ULL,
+ 3ULL,
+ 11ULL,
+ 25ULL,
+ 137ULL,
+ 49ULL,
+ 363ULL,
+ 761ULL,
+ 7129ULL,
+ 7381ULL,
+ 83711ULL,
+ 86021ULL,
+ 1145993ULL,
+ 1171733ULL,
+ 1195757ULL,
+ 2436559ULL,
+ 42142223ULL,
+ 14274301ULL,
+ 275295799ULL,
+ 55835135ULL,
+ 18858053ULL,
+ 19093197ULL,
+ 444316699ULL,
+ 1347822955ULL,
+ 34052522467ULL,
+ 34395742267ULL,
+ 312536252003ULL,
+ 315404588903ULL,
+ 9227046511387ULL
+ };
+ constexpr unsigned long long
+ _S_harmonic_denom[_S_num_harmonic_numer]
+ {
+ 1ULL,
+ 2ULL,
+ 6ULL,
+ 12ULL,
+ 60ULL,
+ 20ULL,
+ 140ULL,
+ 280ULL,
+ 2520ULL,
+ 2520ULL,
+ 27720ULL,
+ 27720ULL,
+ 360360ULL,
+ 360360ULL,
+ 360360ULL,
+ 720720ULL,
+ 12252240ULL,
+ 4084080ULL,
+ 77597520ULL,
+ 15519504ULL,
+ 5173168ULL,
+ 5173168ULL,
+ 118982864ULL,
+ 356948592ULL,
+ 8923714800ULL,
+ 8923714800ULL,
+ 80313433200ULL,
+ 80313433200ULL,
+ 2329089562800ULL
+ };
+
+ template<typename _Tp>
+ _Tp
+ __harmonic_number(unsigned int __n)
+ {
+ if (__n <= _S_num_harmonic_numer)
+ return _Tp(_S_harmonic_numer[__n - 1])
+ / _Tp(_S_harmonic_denom[__n - 1]);
+ else
+ {
+ unsigned int __k = _S_num_harmonic_numer - 1;
+ auto _H_k = _Tp(_S_harmonic_numer[__k]) / _Tp(_S_harmonic_denom[__k]);
+ for (__k = _S_num_harmonic_numer; __k <= __n; ++__k)
+ _H_k += _Tp{1} / _Tp(__k);
+ return _H_k;
+ }
+ }
+
+
+ /**
+ * @brief Return the digamma function of integral argument.
+ * The digamma or @f$ \psi(x) @f$ function is defined as the logarithmic
+ * derivative of the gamma function:
+ * @f[
+ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)}
+ * @f]
+ * The digamma series for integral argument is given by:
+ * @f[
+ * \psi(n) = -\gamma_E + \sum_{k=1}^{\infty} \frac{1}{k}
+ * @f]
+ * The latter sum is called the harmonic number, @f$ H_n @f$.
+ */
+ template<typename _Tp>
+ _Tp
+ __psi(unsigned int __n)
+ {
+ constexpr _Tp __gamma_E = __gnu_cxx::__math_constants<_Tp>::__gamma_e;
+ return -__gamma_E + __harmonic_number<_Tp>(__n);
+ }
+
+ /**
+ * @brief Return the digamma function by series expansion.
+ * The digamma or @f$ \psi(x) @f$ function is defined by
+ * @f[
+ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)}
+ * @f]
+ *
+ * The series is given by:
+ * @f[
+ * \psi(x) = -\gamma_E - \frac{1}{x}
+ * \sum_{k=1}^{\infty} \frac{x - 1}{(k + 1)(x + k)}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __psi_series(_Tp __x)
+ {
+ _Tp __sum = -__gnu_cxx::__math_constants<_Tp>::__gamma_e;
+ const unsigned int _S_max_iter = 100000;
+ for (unsigned int __k = 0; __k < _S_max_iter; ++__k)
+ {
+ const auto __term = (__x - _Tp{1})
+ / (_Tp(__k + 1) * (_Tp(__k) + __x));
+ __sum += __term;
+ if (std::abs(__term) < __gnu_cxx::__epsilon<_Tp>())
+ break;
+ }
+ return __sum;
+ }
+
+
+ /**
+ * @brief Return the digamma function for large argument.
+ * The digamma or @f$ \psi(x) @f$ function is defined by
+ * @f[
+ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)}
+ * @f]
+ *
+ * The asymptotic series is given by:
+ * @f[
+ * \psi(x) = \ln(x) - \frac{1}{2x}
+ * - \sum_{n=1}^{\infty} \frac{B_{2n}}{2 n x^{2n}}
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __psi_asymp(_Tp __x)
+ {
+ auto __sum = std::log(__x) - _Tp{0.5L} / __x;
+ const auto __xx = __x * __x;
+ auto __xp = __xx;
+ const unsigned int __max_iter = 100;
+ for (unsigned int __k = 1; __k < __max_iter; ++__k)
+ {
+ const _Tp __term = __bernoulli<_Tp>(2 * __k) / (2 * __k * __xp);
+ __sum -= __term;
+ if (std::abs(__term / __sum) < __gnu_cxx::__epsilon<_Tp>())
+ break;
+ __xp *= __xx;
+ }
+ return __sum;
+ }
+
+
+ /**
+ * @brief Return the digamma function.
+ * The digamma or @f$ \psi(x) @f$ function is defined by
+ * @f[
+ * \psi(x) = \frac{\Gamma'(x)}{\Gamma(x)}
+ * @f]
+ * For negative argument the reflection formula is used:
+ * @f[
+ * \psi(x) = \psi(1-x) - \pi \cot(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __psi(_Tp __x)
+ {
+ constexpr auto _S_eps = _Tp{4} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_x_asymp = _Tp{20};
+ constexpr auto __gamma_E = __gnu_cxx::__math_constants<_Tp>::__gamma_e;
+ constexpr auto __2_ln_2 = 2 * __gnu_cxx::__math_constants<_Tp>::__ln_2;
+
+ const auto __n = std::nearbyint(__x);
+ const bool __integral = (std::abs(__x - _Tp{__n}) < _S_eps);
+ const auto __m = std::nearbyint(2 * __x);
+ const bool __half_integral = !__integral
+ && (std::abs(2 * __x - _Tp{__m}) < _S_eps);
+ if (__integral)
+ {
+ if (__n <= 0)
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ {
+ _Tp __sum = -__gamma_E;
+ for (int __k = 1; __k < __n; ++__k)
+ __sum += _Tp{1} / __k;
+ return __sum;
+ }
+ }
+ if (__half_integral)
+ {
+ _Tp __sum = -__gamma_E - __2_ln_2;
+ for (int __k = 1; __k < __m / 2; ++__k)
+ __sum += _Tp{2} / (2 * __k - 1);
+ return __sum;
+ }
+ else if (__x < _Tp{0})
+ {
+ constexpr auto __pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ return __psi(_Tp{1} - __x) - __pi / std::tan(__pi * __x);
+ }
+ else if (__x > _S_x_asymp)
+ return __psi_asymp(__x);
+ else
+ {
+ //return __psi_series(__x);
+ // The series does not converge quickly enough.
+ // Reflect to larger argument and use asymptotic expansion.
+ auto __w = _Tp{0};
+ auto __y = __x;
+ while (__y <= _S_x_asymp)
+ {
+ __w += 1 / __y;
+ __y += 1;
+ }
+ return __psi_asymp(__y) - __w;
+ }
+ }
+
+
+ /**
+ * @brief Return the polygamma function @f$ \psi^{(n)}(x) @f$.
+ *
+ * The polygamma function is related to the Hurwitz zeta function:
+ * @f[
+ * \psi^{(n)}(x) = (-1)^{n+1} m! \zeta(m+1,x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __psi(unsigned int __n, _Tp __x)
+ {
+ if (__x <= _Tp{0})
+ std::__throw_domain_error(__N("__psi: argument out of range"));
+ else if (__n == 0)
+ return __psi(__x);
+ else
+ {
+ const auto __hzeta = __hurwitz_zeta(_Tp{__n + 1}, __x);
+ const auto __ln_nfact = __log_gamma(_Tp{__n + 1});
+ auto __result = std::exp(__ln_nfact) * __hzeta;
+ if (__n % 2 == 1)
+ __result = -__result;
+ return __result;
+ }
+ }
+
+ /**
+ * @brief Return the factorial of the integer n.
+ *
+ * The factorial is:
+ * @f[
+ * n! = 1 2 ... (n-1) n, 0! = 1
+ * @f]
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __factorial(unsigned int __n)
+ {
+ if (__n <= _S_num_factorials<_Tp>)
+ return _S_factorial_table[__n].__factorial;
+ else
+ return __gnu_cxx::__infinity<_Tp>();
+ }
+
+ /**
+ * @brief Return the logarithm of the factorial of the integer n.
+ *
+ * The factorial is:
+ * @f[
+ * n! = 1 2 ... (n-1) n, 0! = 1
+ * @f]
+ */
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __log_factorial(unsigned int __n)
+ {
+ if (__n <= _S_num_factorials<_Tp>)
+ return _S_factorial_table[__n].__log_factorial;
+ else
+ return __log_gamma(_Tp(__n + 1));
+ }
+
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __log_double_factorial(_Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ return (__x / _Tp{2}) * std::log(_Tp{2})
+ + (__cos_pi(__x) - _Tp{1})
+ * std::log(_S_pi / 2) / _Tp{4}
+ + __log_gamma(_Tp{1} + __x / _Tp{2});
+ }
+
+ /**
+ * @brief Return the double factorial of the integer n.
+ *
+ * The double factorial is defined for integral n by:
+ * @f[
+ * n!! = 1 3 5 ... (n-2) n, n odd
+ * n!! = 2 4 6 ... (n-2) n, n even
+ * -1!! = 1
+ * 0!! = 1
+ * @f]
+ * The double factorial is defined for odd negative integers
+ * in the obvious way:
+ * @f[
+ * (-2m - 1)!! = 1 / (1 (-1) (-3) ... (-2m + 1) (-2m - 1))
+ * = \frac{(-1)^m}{(2m-1)!!}
+ * @f]
+ * for $f[ n = -2m - 1 $f].
+ */
+ // I must watch neg log double factorial. Or do the log_t thing.
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __double_factorial(int __n)
+ {
+ if (__n < 0 && __n % 2 == 1)
+ {
+ if (-__n <= _S_num_neg_double_factorials<_Tp>)
+ return _S_neg_double_factorial_table[-(1 + __n) / 2].__factorial;
+ else
+ return std::exp(__log_double_factorial(_Tp(__n)));
+ }
+ else if (__n <= _S_num_double_factorials<_Tp>)
+ return _S_double_factorial_table[__n].__factorial;
+ else
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ }
+
+ /**
+ * @brief Return the logarithm of the double factorial of the integer n.
+ *
+ * The double factorial is defined for integral n by:
+ * @f[
+ * n!! = 1 3 5 ... (n-2) n, n odd
+ * n!! = 2 4 6 ... (n-2) n, n even
+ * -1!! = 1
+ * 0!! = 1
+ * @f]
+ * The double factorial is defined for odd negative integers
+ * in the obvious way:
+ * @f[
+ * (-2m - 1)!! = 1 / (1 (-1) (-3) ... (-2m + 1) (-2m - 1))
+ * = \frac{(-1)^m}{(2m-1)!!}
+ * @f]
+ * for $f[ n = -2m - 1 $f].
+ */
+ // I should do a signed version. Or do the log_t thing.
+ template<typename _Tp>
+ _GLIBCXX14_CONSTEXPR _Tp
+ __log_double_factorial(int __n)
+ {
+ if (__n < 0 && __n % 2 == 1)
+ {
+ if (-__n <= _S_num_neg_double_factorials<_Tp>)
+ return _S_neg_double_factorial_table[-(1 + __n) / 2]
+ .__log_factorial;
+ else
+ return __log_double_factorial(_Tp(__n));
+ }
+ else if (__n <= _S_num_double_factorials<_Tp>)
+ return _S_double_factorial_table[__n].__log_factorial;
+ else
+ return __log_double_factorial(_Tp(__n));
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_GAMMA_TCC
+
diff --git a/libstdc++-v3/include/bits/sf_gegenbauer.tcc b/libstdc++-v3/include/bits/sf_gegenbauer.tcc
new file mode 100644
index 00000000000..aa22b5d0a7e
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_gegenbauer.tcc
@@ -0,0 +1,93 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_gegenbauer.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_GEGENBAUER_TCC
+#define _GLIBCXX_BITS_SF_GEGENBAUER_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n
+ * and real order @f$ \alpha @f$ and argument @c x.
+ *
+ * The Gegenbauer polynomials are generated by a three-term recursion relation:
+ * @f[
+ * C_n^{\alpha}(x) = \frac{1}{n}\left[ 2x(n+\alpha-1)C_{n-1}^{\alpha}(x)
+ * - (n+2\alpha-2)C_{n-2}^{\alpha}(x) \right]
+ * @f]
+ * and @f$ C_0^{\alpha}(x) = 1 @f$, @f$ C_1^{\alpha}(x) = 2\alpha x @f$.
+ *
+ * @tparam _Talpha The real type of the order
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral degree
+ * @param __alpha The real order
+ * @param __x The real argument
+ */
+ template<typename _Tp>
+ _Tp
+ __gegenbauer_poly(unsigned int __n, _Tp __alpha, _Tp __x)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+ if (__isnan(__alpha) || __isnan(__x))
+ return _S_NaN;
+
+ auto _C0 = _Tp{1};
+ if (__n == 0)
+ return _C0;
+
+ auto _C1 = _Tp{2} * __alpha * __x;
+ if (__n == 1)
+ return _C1;
+
+ auto _Cn = _Tp{0};
+ for (unsigned int __nn = 2; __nn <= __n; ++__nn)
+ {
+ _Cn = (_Tp{2} * (_Tp{__nn} - _Tp{1} + __alpha) * __x * _C1
+ - (_Tp{__nn} - _Tp{2} + _Tp{2} * __alpha) * _C0)
+ / _Tp(__nn);
+ _C0 = _C1;
+ _C1 = _Cn;
+ }
+ return _Cn;
+ }
+
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_GEGENBAUER_TCC
diff --git a/libstdc++-v3/include/bits/sf_hankel.tcc b/libstdc++-v3/include/bits/sf_hankel.tcc
new file mode 100644
index 00000000000..f379720da41
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_hankel.tcc
@@ -0,0 +1,1304 @@
+// TR29124 math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_hankel.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_SF_HANKEL_TCC
+#define _GLIBCXX_BITS_SF_HANKEL_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <limits>
+#include <vector>
+
+#include <bits/specfun_util.h>
+#include <bits/complex_util.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+
+ /**
+ * Compute the Debye region in te complex plane.
+ */
+ template<typename _Tp>
+ void
+ __debye_region(std::complex<_Tp> __alpha, int& __indexr, char& __aorb)
+ {
+ static constexpr _Tp
+ _S_pi(3.141592653589793238462643383279502884195e+0L);
+
+ __aorb = ' ';
+
+ auto __alphar = std::real(__alpha);
+ auto __alphai = std::imag(__alpha);
+
+ auto __f1 = _Tp{1}
+ - __alphai * std::cos(__alphai) / std::sin(__alphai)
+ - __alphar * std::sinh(__alphar) / std::cosh(__alphar);
+
+ auto __f2 = _Tp{1}
+ + (_S_pi - __alphai) * std::cos(__alphai) / std::sin(__alphai)
+ - __alphar * std::sinh(__alphar) / std::cosh(__alphar);
+
+ if (__f1 > _Tp{0} && __f2 > _Tp{0})
+ __indexr = 1;
+ else if (__f2 > _Tp{0})
+ {
+ if (__alphar > _Tp{0})
+ __indexr = 2;
+ else
+ __indexr = 3;
+ }
+ else if (__f1 > _Tp{0})
+ {
+ if (__alphar > _Tp{0})
+ __indexr = 4;
+ else
+ __indexr = 5;
+ }
+ else
+ {
+ if (__alphar > _Tp{0})
+ __indexr = 6;
+ else
+ __indexr = 7;
+ if (__alphai <= (_S_pi / _Tp{2}))
+ __aorb = 'A';
+ else
+ __aorb = 'B';
+ }
+ return;
+ }
+
+
+ /**
+ * @brief Compute parameters depending on z and nu that appear
+ * in the uniform asymptotic expansions of the Hankel functions
+ * and their derivatives, except the arguments to the Airy functions.
+ */
+ template<typename _Tp>
+ void
+ __hankel_params(std::complex<_Tp> __nu, std::complex<_Tp> __zhat,
+ std::complex<_Tp>& __p, std::complex<_Tp>& __p2,
+ std::complex<_Tp>& __nup2, std::complex<_Tp>& __num2,
+ std::complex<_Tp>& __num1d3, std::complex<_Tp>& __num2d3,
+ std::complex<_Tp>& __num4d3, std::complex<_Tp>& __zeta,
+ std::complex<_Tp>& __zetaphf, std::complex<_Tp>& __zetamhf,
+ std::complex<_Tp>& __zetam3hf, std::complex<_Tp>& __zetrat)
+ {
+ using __cmplx = std::complex<_Tp>;
+
+ static constexpr auto _S_inf = __gnu_cxx::__max<_Tp>();
+
+ static constexpr auto _S_1d4 = _Tp{0.25L};
+ static constexpr auto _S_1d3 = _Tp{1} / _Tp{3};
+ static constexpr auto _S_1d2 = _Tp{0.5L};
+ static constexpr auto _S_2d3 = _Tp{2} / _Tp{3};
+ static constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ static constexpr auto _S_lncon = _Tp{0.2703100720721095879853420769762327577152L}; // -(2/3)ln(2/3)
+ static constexpr auto _S_sqrt2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ static constexpr auto _S_4d3 = _Tp{4} / _Tp{3};
+
+ static constexpr __cmplx __zone{_Tp{1}, _Tp{0}};
+ static constexpr __cmplx _S_j{_Tp{0}, _Tp{1}};
+
+ static const auto _S_sqrt_max = __gnu_cxx::__sqrt_max<_Tp>();
+
+ // Separate real and imaginary parts of zhat.
+ auto __rezhat = std::real(__zhat);
+ auto __imzhat = std::imag(__zhat);
+
+ // Compute 1 - zhat^2 and related constants.
+ auto __w = __cmplx{_Tp{1}} - __safe_sqr(__zhat);
+ __w = std::sqrt(__w);
+ __p = _Tp{1} / __w;
+ __p2 = __p * __p;
+
+ __nup2 = __safe_sqr(__nu);
+ __num2 = _Tp{1} / __nup2;
+ // Compute nu^(-1/3), nu^(-2/3), nu^(-4/3).
+ __num4d3 = -std::log(__nu);
+ __num1d3 = std::exp(_S_1d3 * __num4d3);
+ __num2d3 = std::exp(_S_2d3 * __num4d3);
+ __num4d3 = std::exp(_S_4d3 * __num4d3);
+
+ // Compute xi = ln(1+(1-zhat^2)^(1/2)) - ln(zhat) - (1-zhat^2)^(1/2)
+ // using default branch of logarithm and square root.
+ auto __xi = std::log(__zone + __w) - std::log(__zhat) - __w;
+ __zetam3hf = _S_2d3 / __xi;
+
+ // Compute principal value of ln(xi) and then adjust imaginary part.
+ auto __lnxi = std::log(__xi);
+
+ // Prepare to adjust logarithm of xi to appropriate Riemann sheet.
+ auto __npi = _Tp{0};
+
+ // Find adjustment necessary to get on proper Riemann sheet.
+ if (__imzhat == _Tp{0}) // zhat is real.
+ {
+ if (__rezhat > _Tp{1})
+ __npi = _S_2pi;
+ }
+ else // zhat is not real.
+ {
+ // zhat is in upper half-plane.
+ if (__imzhat > _Tp{0})
+ {
+ // xi lies in upper half-plane.
+ if (std::imag(__xi) > _Tp{0})
+ __npi = -_S_2pi;
+ else
+ __npi = +_S_2pi;
+ }
+ }
+
+ // Adjust logarithm of xi.
+ __lnxi += __npi * _S_j;
+
+ // Compute ln(zeta), zeta, zeta^(+1/2), zeta^(-1/2).
+ auto __lnzeta = _S_2d3 * __lnxi + _S_lncon;
+ __zeta = std::exp(__lnzeta);
+ __zetaphf = std::sqrt(__zeta);
+ __zetamhf = _Tp{1} / __zetaphf;
+
+ // Compute (4 * zeta / (1 - zhat^2))^(1/4).
+ __w = std::log(__w);
+ __zetrat = _S_sqrt2 * std::exp(_S_1d4 * __lnzeta - _S_1d2 * __w);
+
+ return;
+ }
+
+
+ /**
+ * @brief Compute the arguments for the Airy function evaluations
+ * carefully to prevent premature overflow. Note that the
+ * major work here is in @c safe_div. A faster, but less safe
+ * implementation can be obtained without use of safe_div.
+ *
+ * @param[in] __num2d3 @f$ \nu^{-2/3} @f$ - output from hankel_params
+ * @param[in] __zeta zeta in the uniform asymptotic expansions - output
+ * from hankel_params
+ * @param[out] __argp @f$ e^{+i2\pi/3} \nu^{2/3} \zeta @f$
+ * @param[out] __argm @f$ e^{-i2\pi/3} \nu^{2/3} \zeta @f$
+ * @throws std::runtime_error if unable to compute Airy function arguments
+ */
+ template<typename _Tp>
+ void
+ __airy_arg(std::complex<_Tp> __num2d3, std::complex<_Tp> __zeta,
+ std::complex<_Tp>& __argp, std::complex<_Tp>& __argm)
+ {
+ using __cmplx = std::complex<_Tp>;
+
+ // expp and expm are exp(2*pi*i/3) and its reciprocal, respectively.
+ static constexpr auto _S_sqrt3d2
+ = __gnu_cxx::__math_constants<_Tp>::__root_3_div_2;
+ static constexpr auto __expp = __cmplx{-0.5L, _S_sqrt3d2};
+ static constexpr auto __expm = __cmplx{-0.5L, -_S_sqrt3d2};
+
+ try
+ {
+ __argm = __safe_div(__num2d3, __zeta);
+ __argp = __expp * __argm;
+ __argm = __expm * __argm;
+ }
+ catch (...)
+ {
+ std::__throw_runtime_error(__N("__airy_arg: unable to"
+ " compute Airy function arguments"));
+ }
+ }
+
+
+ /**
+ * @brief Compute outer factors and associated functions of @c z and @c nu
+ * appearing in Olver's uniform asymptotic expansions of the
+ * Hankel functions of the first and second kinds and their derivatives.
+ * The various functions of z and nu returned by @c hankel_uniform_outer
+ * are available for use in computing further terms in the expansions.
+ */
+ template<typename _Tp>
+ void
+ __hankel_uniform_outer(std::complex<_Tp> __nu, std::complex<_Tp> __z, _Tp __eps,
+ std::complex<_Tp>& __zhat, std::complex<_Tp>& __1dnsq,
+ std::complex<_Tp>& __num1d3, std::complex<_Tp>& __num2d3,
+ std::complex<_Tp>& __p, std::complex<_Tp>& __p2,
+ std::complex<_Tp>& __etm3h, std::complex<_Tp>& __etrat,
+ std::complex<_Tp>& _Aip, std::complex<_Tp>& __o4dp,
+ std::complex<_Tp>& _Aim, std::complex<_Tp>& __o4dm,
+ std::complex<_Tp>& __od2p, std::complex<_Tp>& __od0dp,
+ std::complex<_Tp>& __od2m, std::complex<_Tp>& __od0dm)
+ {
+ using __cmplx = std::complex<_Tp>;
+
+ static constexpr auto _S_sqrt3d2
+ = __gnu_cxx::__math_constants<_Tp>::__root_3_div_2;
+ static constexpr __cmplx __e2pd3{-0.5L, _S_sqrt3d2};
+ static constexpr __cmplx __d2pd3{-0.5L, -_S_sqrt3d2};
+
+ try
+ {
+ __zhat = __safe_div(__z, __nu);
+ // Try to compute other nu and z dependent parameters except args to Airy functions.
+ __cmplx __num4d3, __nup2, __zeta, __zetaphf, __zetamhf;
+ __hankel_params(__nu, __zhat, __p, __p2, __nup2,
+ __1dnsq, __num1d3, __num2d3, __num4d3,
+ __zeta, __zetaphf, __zetamhf, __etm3h, __etrat);
+
+
+ // Try to compute Airy function arguments.
+ __cmplx __argp, __argm;
+ __airy_arg(__num2d3, __zeta, __argp, __argm);
+
+ // Compute Airy functions and derivatives.
+ auto __airyp = _Airy<std::complex<_Tp>>()(__argp);
+ auto __airym = _Airy<std::complex<_Tp>>()(__argm);
+ // Compute partial outer terms in expansions.
+ __o4dp = -__zetamhf * __num4d3 * __e2pd3 * __airyp.Aip;
+ __o4dm = -__zetamhf * __num4d3 * __d2pd3 * __airym.Aip;
+ __od2p = -__zetaphf * __num2d3 * __airyp.Ai;
+ __od0dp = __e2pd3 * __airyp.Aip;
+ __od2m = -__zetaphf * __num2d3 * __airym.Ai;
+ __od0dm = __d2pd3 * __airym.Aip;
+ }
+ catch (...)
+ {
+ std::__throw_runtime_error(__N("__hankel_uniform_outer: "
+ "unable to compute z/nu"));
+ }
+
+ return;
+ }
+
+
+ /**
+ * @brief Compute the sums in appropriate linear combinations appearing
+ * in Olver's uniform asymptotic expansions for the Hankel functions
+ * of the first and second kinds and their derivatives, using up to
+ * nterms (less than 5) to achieve relative error @c eps.
+ *
+ * @param[in] __p
+ * @param[in] __p2
+ * @param[in] __num2
+ * @param[in] __zetam3hf
+ * @param[in] _Aip The Airy function value @f$ Ai() @f$.
+ * @param[in] __o4dp
+ * @param[in] _Aim The Airy function value @f$ Ai() @f$.
+ * @param[in] __o4dm
+ * @param[in] __od2p
+ * @param[in] __od0dp
+ * @param[in] __od2m
+ * @param[in] __od0dm
+ * @param[in] __eps The error tolerance
+ * @param[out] _H1sum The Hankel function of the first kind.
+ * @param[out] _H1psum The derivative of the Hankel function of the first kind.
+ * @param[out] _H2sum The Hankel function of the second kind.
+ * @param[out] _H2psum The derivative of the Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __hankel_uniform_sum(std::complex<_Tp> __p, std::complex<_Tp> __p2,
+ std::complex<_Tp> __num2, std::complex<_Tp> __zetam3hf,
+ std::complex<_Tp> _Aip, std::complex<_Tp> __o4dp,
+ std::complex<_Tp> _Aim, std::complex<_Tp> __o4dm,
+ std::complex<_Tp> __od2p, std::complex<_Tp> __od0dp,
+ std::complex<_Tp> __od2m, std::complex<_Tp> __od0dm,
+ _Tp __eps,
+ std::complex<_Tp>& _H1sum, std::complex<_Tp>& _H1psum,
+ std::complex<_Tp>& _H2sum, std::complex<_Tp>& _H2psum)
+ {
+ using __cmplx = std::complex<_Tp>;
+
+ int __nterms = 4;
+
+ static constexpr auto __zone = __cmplx{1, 0};
+
+ // Coefficients for u and v polynomials appearing in Olver's
+ // uniform asymptotic expansions for the Hankel functions
+ // and their derivatives.
+
+ static constexpr _Tp
+ _S_a[66]
+ {
+ 0.1000000000000000e+01,
+ -0.2083333333333333e+00,
+ 0.1250000000000000e+00,
+ 0.3342013888888889e+00,
+ -0.4010416666666667e+00,
+ 0.7031250000000000e-01,
+ -0.1025812596450617e+01,
+ 0.1846462673611111e+01,
+ -0.8912109136581421e+00,
+ 0.7324218750000000e-01,
+ 0.4669584423426247e+01,
+ -0.1120700261622299e+02,
+ 0.8789123535156250e+01,
+ -0.2364086866378784e+01,
+ 0.1121520996093750e+00,
+ -0.2821207255820024e+02,
+ 0.8463621767460073e+02,
+ -0.9181824154324002e+02,
+ 0.4253499984741211e+02,
+ -0.7368794441223145e+01,
+ 0.2271080017089844e+00,
+ 0.2125701300392171e+03,
+ -0.7652524681411816e+03,
+ 0.1059990452528000e+04,
+ -0.6995796273761325e+03,
+ 0.2181905059814453e+03,
+ -0.2649143028259277e+02,
+ 0.5725014209747314e+00,
+ -0.1919457662318407e+04,
+ 0.8061722181737309e+04,
+ -0.1358655000643414e+05,
+ 0.1165539333686453e+05,
+ -0.5305646972656250e+04,
+ 0.1200902954101563e+04,
+ -0.1080909194946289e+03,
+ 0.1727727532386780e+01,
+ 0.2020429133096615e+05,
+ -0.9698059838863751e+05,
+ 0.1925470012325315e+06,
+ -0.2034001772804155e+06,
+ 0.1222004649830175e+06,
+ -0.4119265625000000e+05,
+ 0.7109514160156250e+04,
+ -0.4939153137207031e+03,
+ 0.6074041843414307e+01,
+ -0.2429191879005513e+06,
+ 0.1311763614662977e+07,
+ -0.2998015918538107e+07,
+ 0.3763271297656404e+07,
+ -0.2813563226586534e+07,
+ 0.1268365250000000e+07,
+ -0.3316451875000000e+06,
+ 0.4521876953125000e+05,
+ -0.2499830566406250e+04,
+ 0.2438052940368652e+02,
+ 0.3284469853072038e+07,
+ -0.1970681911843223e+08,
+ 0.5095260249266464e+08,
+ -0.7410514821153266e+08,
+ 0.6634451227472903e+08,
+ -0.3756717666076335e+08,
+ 0.1328876700000000e+08,
+ -0.2785618250000000e+07,
+ 0.3081864062500000e+06,
+ -0.1388608984375000e+05,
+ 0.1100171432495117e+03
+ };
+
+ static constexpr _Tp
+ _S_b[66]
+ { 0.1000000000000000e+01,
+ 0.2916666666666667e+00,
+ -0.3750000000000000e+00,
+ -0.3949652777777778e+00,
+ 0.5156250000000000e+00,
+ -0.1171875000000000e+00,
+ 0.1146496431327160e+01,
+ -0.2130533854166667e+01,
+ 0.1089257836341858e+01,
+ -0.1025390625000000e+00,
+ -0.5075635242854617e+01,
+ 0.1238668710214120e+02,
+ -0.9961006673177083e+01,
+ 0.2793920993804932e+01,
+ -0.1441955566406250e+00,
+ 0.3015773273462785e+02,
+ -0.9140711508856879e+02,
+ 0.1005628359759295e+03,
+ -0.4753911590576172e+02,
+ 0.8502454757690430e+01,
+ -0.2775764465332031e+00,
+ -0.2247169946128867e+03,
+ 0.8146235951180321e+03,
+ -0.1138508263826370e+04,
+ 0.7604126384523180e+03,
+ -0.2411579284667969e+03,
+ 0.3002362060546875e+02,
+ -0.6765925884246826e+00,
+ 0.2013089743407110e+04,
+ -0.8497490948317704e+04,
+ 0.1440997727955136e+05,
+ -0.1245921356699312e+05,
+ 0.5730098632812500e+04,
+ -0.1315274658203125e+04,
+ 0.1208074951171875e+03,
+ -0.1993531703948975e+01,
+ -0.2106404840887960e+05,
+ 0.1014913238950858e+06,
+ -0.2024212064239434e+06,
+ 0.2150230445535821e+06,
+ -0.1300843659496637e+06,
+ 0.4424396093750000e+05,
+ -0.7727732910156250e+04,
+ 0.5459063720703125e+03,
+ -0.6883914470672607e+01,
+ 0.2520859497081193e+06,
+ -0.1365304986690037e+07,
+ 0.3131261070473134e+07,
+ -0.3946845507298180e+07,
+ 0.2965647725320941e+07,
+ -0.1345235875000000e+07,
+ 0.3545172500000000e+06,
+ -0.4883626953125000e+05,
+ 0.2737909667968750e+04,
+ -0.2724882698059082e+02,
+ -0.3395807814193124e+07,
+ 0.2042343072273885e+08,
+ -0.5295074376688679e+08,
+ 0.7725855877372554e+08,
+ -0.6943030354332107e+08,
+ 0.3949369854080250e+08,
+ -0.1404812500000000e+08,
+ 0.2965335500000000e+07,
+ -0.3310150312500000e+06,
+ 0.1509357617187500e+05,
+ -0.1215978927612305e+03
+ };
+
+ // lambda and mu coefficients appearing in the expansions.
+ static constexpr _Tp
+ _S_lambda[21]
+ {
+ 0.1041666666666667e+00,
+ 0.8355034722222222e-01,
+ 0.1282265745563272e+00,
+ 0.2918490264641405e+00,
+ 0.8816272674437577e+00,
+ 0.3321408281862768e+01,
+ 0.1499576298686255e+02,
+ 0.7892301301158652e+02,
+ 0.4744515388682643e+03,
+ 0.3207490090890662e+04,
+ 0.2408654964087401e+05,
+ 0.1989231191695098e+06,
+ 0.1791902007775344e+07,
+ 0.1748437718003412e+08,
+ 0.1837073796763307e+09,
+ 0.2067904032945155e+10,
+ 0.2482751937593589e+11,
+ 0.3166945498173489e+12,
+ 0.4277112686513472e+13,
+ 0.6097113241139256e+14,
+ 0.9148694223435640e+15
+ };
+
+ static constexpr _Tp
+ _S_mu[21]
+ {
+ -0.1458333333333333e+00,
+ -0.9874131944444445e-01,
+ -0.1433120539158951e+00,
+ -0.3172272026784136e+00,
+ -0.9424291479571203e+00,
+ -0.3511203040826354e+01,
+ -0.1572726362036805e+02,
+ -0.8228143909718595e+02,
+ -0.4923553705236705e+03,
+ -0.3316218568547973e+04,
+ -0.2482767424520859e+05,
+ -0.2045265873151298e+06,
+ -0.1838444917068210e+07,
+ -0.1790568747352892e+08,
+ -0.1878356353993943e+09,
+ -0.2111438854691369e+10,
+ -0.2531915342298413e+11,
+ -0.3226140741130003e+12,
+ -0.4352813796009286e+13,
+ -0.6199585732586975e+14,
+ -0.9295073331010611e+15
+ };
+
+ std::vector<__cmplx> __u;
+ __u.reserve(100);
+ std::vector<__cmplx> __v;
+ __v.reserve(100);
+
+ auto __xtsq = std::real(__p2);
+ auto __ytsq = std::imag(__p2);
+ auto __ytsq2 = __ytsq * __ytsq;
+ auto __dr = _Tp{2} * __xtsq;
+ auto __ds = std::norm(__p2);
+
+ // Compute Debye polynomials u_0,1,2 and v_0,1,2.
+ auto __pk = __p;
+ __u.push_back(__pk * (_S_a[1] * __p2 + _S_a[2]));
+ __v.push_back(__pk * (_S_b[1] * __p2 + _S_b[2]));
+ __pk *= __p;
+ __u.push_back(__pk * __cmplx((_S_a[3] * __xtsq + _S_a[4])
+ * __xtsq + _S_a[5] - _S_a[3] * __ytsq2,
+ (_Tp{2} * _S_a[3] * __xtsq + _S_a[4]) * __ytsq));
+ __v.push_back(__pk * __cmplx((_S_b[3] * __xtsq + _S_b[4])
+ * __xtsq + _S_b[5] - _S_b[3] * __ytsq2,
+ (_Tp{2} * _S_b[3] * __xtsq + _S_b[4]) * __ytsq));
+ __pk *= __p;
+ __u.push_back(__pk * __cmplx(((_S_a[6] * __xtsq + _S_a[7])
+ * __xtsq + _S_a[8]) * __xtsq
+ + _S_a[9] - (_Tp{3} * _S_a[6] * __xtsq + _S_a[7]) * __ytsq2,
+ ((_Tp{3} * _S_a[6] * __xtsq + _Tp{2} * _S_a[7]) * __xtsq + _S_a[8]
+ - _S_a[6] * __ytsq2) * __ytsq));
+ __v.push_back(__pk * __cmplx(((_S_b[6] * __xtsq + _S_b[7])
+ * __xtsq + _S_b[8]) * __xtsq
+ + _S_b[9] - (_Tp{3} * _S_b[6] * __xtsq + _S_b[7]) * __ytsq2,
+ ((_Tp{3} * _S_b[6] * __xtsq + _Tp{2} * _S_b[7]) * __xtsq + _S_b[8]
+ - _S_b[6] * __ytsq2) * __ytsq));
+
+ // Compute A_0,1, B_0,1, C_0,1, D_0,1 ... note that
+ // B_k and C_k are computed up to -zeta^(-1/2) -zeta^(1/2) factors,
+ // respectively. These recurring factors are included as appropriate
+ // in the outer factors, thus saving repeated multiplications by them.
+ auto _A0 = __zone;
+ auto _Ak = __u[1]
+ + __zetam3hf * (_S_mu[1] * __zetam3hf + _S_mu[0] * __u[0]);
+ auto _B0 = __u[0] + _S_lambda[0] * __zetam3hf;
+ auto _Bk = __u[2] + __zetam3hf * (__zetam3hf * (_S_lambda[2] * __zetam3hf
+ + _S_lambda[1] * __u[0])
+ + _S_lambda[0] * __u[1]);
+ auto _C0 = __v[0] + _S_mu[0] * __zetam3hf;
+ auto _Ck = __v[2] + __zetam3hf * (__zetam3hf * (_S_mu[2] * __zetam3hf
+ + _S_mu[1] * __v[0])
+ + _S_mu[0] * __v[1]);
+ auto _D0 = __zone;
+ auto _Dk = __v[1] + __zetam3hf * (_S_lambda[1] * __zetam3hf
+ + _S_lambda[0] * __v[0]);
+
+ // Compute sum of first two terms to initialize the Kahan summing scheme.
+ __gnu_cxx::_KahanSum<std::complex<_Tp>> _Asum;
+ __gnu_cxx::_KahanSum<std::complex<_Tp>> _Bsum;
+ __gnu_cxx::_KahanSum<std::complex<_Tp>> _Csum;
+ __gnu_cxx::_KahanSum<std::complex<_Tp>> _Dsum;
+ _Asum += _A0;
+ _Bsum += _B0;
+ _Csum += _C0;
+ _Dsum += _D0;
+ _Asum += _Ak * __num2;
+ _Bsum += _Bk * __num2;
+ _Csum += _Ck * __num2;
+ _Dsum += _Dk * __num2;
+
+ // Combine sums in form appearing in expansions.
+ _H1sum = _Aip * _Asum() + __o4dp * _Bsum();
+ _H2sum = _Aim * _Asum() + __o4dm * _Bsum();
+ _H1psum = __od2p * _Csum() + __od0dp * _Dsum();
+ _H2psum = __od2m * _Csum() + __od0dm * _Dsum();
+
+ auto _H1save = _Aip * _A0 + __o4dp * _B0;
+ auto _H2save = _Aim * _A0 + __o4dm * _B0;
+ auto _H1psave = __od2p * _C0 + __od0dp * _D0;
+ auto _H2psave = __od2m * _C0 + __od0dm * _D0;
+
+ auto __converged
+ = (__l1_norm(_H1sum - _H1save) < __eps * __l1_norm(_H1sum)
+ && __l1_norm(_H2sum - _H2save) < __eps * __l1_norm(_H2sum)
+ && __l1_norm(_H1psum - _H1psave) < __eps * __l1_norm(_H1psum)
+ && __l1_norm(_H2psum - _H2psave) < __eps * __l1_norm(_H2psum));
+
+ // Save current sums for next convergence test.
+ _H1save = _H1sum;
+ _H2save = _H2sum;
+ _H1psave = _H1psum;
+ _H2psave = _H2psum;
+
+ // Maintain index into u_k and v_k coefficients.
+ auto __index = 10;
+ auto __indexp = 15;
+ // Maintain power of nu^(-2).
+ auto __num2k = __num2;
+
+ for (auto __k = 2; __k <= __nterms; ++__k)
+ {
+ // Initialize for evaluation of two new u and v polynomials
+ // via Horner's rule modified for complex arguments
+ // and real coefficients.
+ auto __indexend = __indexp;
+ auto __ukta = _S_a[__index];
+ auto __vkta = _S_b[__index];
+ ++__index;
+ auto __uktb = _S_a[__index];
+ auto __vktb = _S_b[__index];
+ ++__index;
+ auto __ukpta = _S_a[__indexp];
+ auto __vkpta = _S_b[__indexp];
+ ++__indexp;
+ auto __ukptb = _S_a[__indexp];
+ auto __vkptb = _S_b[__indexp];
+ ++__indexp;
+
+ // Loop until quantities to evaluate lowest order u and v
+ // polynomials and partial quantities to evaluate
+ // next highest order polynomials computed.
+ for (; __index < __indexend; ++__index, ++__indexp)
+ {
+ auto __term = __ds * __ukta;
+ __ukta = __uktb + __dr * __ukta;
+ __uktb = _S_a[__index] - __term;
+ __term = __ds * __vkta;
+ __vkta = __vktb + __dr * __vkta;
+ __vktb = _S_b[__index] - __term;
+
+ __term = __ds * __ukpta;
+ __ukpta = __ukptb + __dr * __ukpta;
+ __ukptb = _S_a[__indexp] - __term;
+ __term = __ds * __vkpta;
+ __vkpta = __vkptb + __dr * __vkpta;
+ __vkptb = _S_b[__indexp] - __term;
+ }
+
+ // One more iteration for highest order polynomials.
+ auto __term = __ds * __ukpta;
+ __ukpta = __ukptb + __dr * __ukpta;
+ __ukptb = _S_a[__indexp] - __term;
+ __term = __ds * __vkpta;
+ __vkpta = __vkptb + __dr * __vkpta;
+ __vkptb = _S_b[__indexp] - __term;
+ ++__indexp;
+
+ // Post multiply and form new polynomials.
+ __pk *= __p;
+ __u.push_back(__pk * (__ukta * __p2 + __uktb));
+ __v.push_back(__pk * (__vkta * __p2 + __vktb));
+
+ __pk *= __p;
+ __u.push_back(__pk * (__ukpta * __p2 + __ukptb));
+ __v.push_back(__pk * (__vkpta * __p2 + __vkptb));
+
+ // Update indices in preparation for next iteration.
+ __index = __indexp;
+ auto __i2k = 2 * __k - 1;
+ auto __i2km1 = __i2k - 1;
+ auto __i2kp1 = __i2k + 1;
+ __indexp += __i2kp1 + 3;
+
+ // Start Horner's rule evaluation of A, B, C, and D polynomials.
+ _Ak = _S_mu[__i2k] * __zetam3hf + _S_mu[__i2km1] * __u[0];
+ _Dk = _S_lambda[__i2k] * __zetam3hf + _S_lambda[__i2km1] * __v[0];
+ _Bk = _S_lambda[__i2kp1] * __zetam3hf + _S_lambda[__i2k] * __u[0];
+ _Ck = _S_mu[__i2kp1] * __zetam3hf + _S_mu[__i2k] * __v[0];
+
+ // Do partial Horner's rule evaluations of A, B, C, and D.
+ for(auto __l = 1; __l <= __i2km1; ++__l)
+ {
+ auto __i2kl = __i2km1 - __l;
+ _Ak = _Ak * __zetam3hf + _S_mu[__i2kl] * __u[__l];
+ _Dk = _Dk * __zetam3hf + _S_lambda[__i2kl] * __v[__l];
+ __i2kl = __i2k - __l;
+ _Bk = _Bk * __zetam3hf + _S_lambda[__i2kl] * __u[__l];
+ _Ck = _Ck * __zetam3hf + _S_mu[__i2kl] * __v[__l];
+ }
+
+ // Complete the evaluations of A, B, C, and D.
+ _Ak = _Ak * __zetam3hf + __u[__i2k];
+ _Dk = _Dk * __zetam3hf + __v[__i2k];
+ _Bk = __zetam3hf
+ * (_Bk * __zetam3hf + _S_lambda[0] * __u[__i2k]) + __u[__i2kp1];
+ _Ck = __zetam3hf
+ * (_Ck * __zetam3hf + _S_mu[0] * __v[__i2k]) + __v[__i2kp1];
+
+ // Evaluate new terms for sums.
+ __num2k *= __num2;
+ _Asum += _Ak * __num2k;
+ _Bsum += _Bk * __num2k;
+ _Csum += _Ck * __num2k;
+ _Dsum += _Dk * __num2k;
+
+ // Combine sums in form appearing in expansions.
+ _H1sum = _Aip * _Asum() + __o4dp * _Bsum();
+ _H2sum = _Aim * _Asum() + __o4dm * _Bsum();
+ _H1psum = __od2p * _Csum() + __od0dp * _Dsum();
+ _H2psum = __od2m * _Csum() + __od0dm * _Dsum();
+
+ // If convergence criteria met this term, see if it was before.
+ if (__l1_norm(_H1sum - _H1save) < __eps * __l1_norm(_H1sum)
+ && __l1_norm(_H2sum - _H2save) < __eps * __l1_norm(_H2sum)
+ && __l1_norm(_H1psum - _H1psave) < __eps * __l1_norm(_H1psum)
+ && __l1_norm(_H2psum - _H2psave) < __eps * __l1_norm(_H2psum))
+ {
+ if (__converged) // Converged twice in a row - done!
+ return;
+ else // Converged once...
+ __converged = true;
+ }
+ else
+ __converged = false;
+ // Save combined sums for comparison next iteration.
+ _H1save = _H1sum;
+ _H2save = _H2sum;
+ _H1psave = _H1psum;
+ _H2psave = _H2psum;
+ }
+
+ std::__throw_runtime_error(__N("__hankel_uniform_sum: "
+ "all allowable terms used"));
+
+ return;
+ }
+
+
+ /**
+ * @brief Compute approximate values for the Hankel functions
+ * of the first and second kinds using Olver's uniform asymptotic
+ * expansion to of order @c nu along with their derivatives.
+ *
+ * @param[in] __nu The order for which the Hankel functions are evaluated.
+ * @param[in] __z The argument at which the Hankel functions are evaluated.
+ * @param[out] _H1 The Hankel function of the first kind.
+ * @param[out] _H1p The derivative of the Hankel function of the first kind.
+ * @param[out] _H2 The Hankel function of the second kind.
+ * @param[out] _H2p The derivative of the Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __hankel_uniform_olver(std::complex<_Tp> __nu, std::complex<_Tp> __z,
+ std::complex<_Tp>& _H1, std::complex<_Tp>& _H2,
+ std::complex<_Tp>& _H1p, std::complex<_Tp>& _H2p)
+ {
+ using namespace std::literals::complex_literals;
+ using __cmplx = std::complex<_Tp>;
+
+ static constexpr _Tp
+ _S_pi(3.141592653589793238462643383279502884195e+0L);
+ static constexpr _Tp
+ _S_pi_3(1.047197551196597746154214461093167628063e+0L);
+ static constexpr __cmplx _S_j{1il};
+ static constexpr __cmplx __con1p{ 1.0L, 1.732050807568877293527446341505872366945L}; // 2*exp( pi*j/3) (1,sqrt(3))
+ static constexpr __cmplx __con1m{ 1.0L,-1.732050807568877293527446341505872366945L}; // 2*exp(-pi*j/3)
+ static constexpr __cmplx __con2p{-2.0L, 3.464101615137754587054892683011744733891L}; // 4*exp( 2*pi*j/3) (-2,2sqrt(3))
+ static constexpr __cmplx __con2m{-2.0L,-3.464101615137754587054892683011744733891L}; // 4*exp(-2*pi*j/3)
+ static constexpr _Tp __eps = 1.0e-06L;
+ static constexpr _Tp __epsai = 1.0e-12L;
+
+ // Extended to accommodate negative real orders.
+ bool __nuswitch = false;
+ if (std::real(__nu) < _Tp{0})
+ {
+ __nuswitch = true;
+ __nu = -__nu;
+ }
+
+ // Compute outer factors in the uniform asymptotic expansions
+ // for the Hankel functions and their derivatives along with
+ // other important functions of nu and z.
+ __cmplx __p, __p2,
+ __1dnsq, __etm3h, _Aip, __o4dp, _Aim, __o4dm,
+ __od2p, __od0dp, __od0dm, __tmp, __zhat, __num1d3,
+ __num2d3, __etrat, __od2m, __r_factor;
+ __hankel_uniform_outer(__nu, __z, __epsai, __zhat, __1dnsq, __num1d3,
+ __num2d3, __p, __p2, __etm3h, __etrat,
+ _Aip, __o4dp, _Aim, __o4dm, __od2p,
+ __od0dp, __od2m, __od0dm);
+
+ // Compute further terms in the expansions in their appropriate linear combinations.
+
+ __hankel_uniform_sum(__p, __p2, __1dnsq, __etm3h,
+ _Aip, __o4dp, _Aim, __o4dm,
+ __od2p, __od0dp, __od2m, __od0dm, __eps,
+ _H1, _H1p, _H2, _H2p);
+
+ // Assemble approximations.
+ __tmp = __etrat * __num1d3;
+ _H1 = __con1m * __tmp * _H1;
+ _H2 = __con1p * __tmp * _H2;
+ __tmp = __num2d3 / (__zhat * __etrat);
+ _H1p = __con2p * __tmp * _H1p;
+ _H2p = __con2m * __tmp * _H2p;
+
+ if (__nuswitch)
+ {
+ __r_factor = std::exp(_S_j * __nu * _S_pi);
+ _H1 *= __r_factor;
+ _H1p *= __r_factor;
+ _H2 /= __r_factor;
+ _H2p /= __r_factor;
+ __nu = -__nu;
+ }
+
+ return;
+ }
+
+
+ /**
+ * @brief This routine computes the uniform asymptotic approximations
+ * of the Hankel functions and their derivatives including a patch
+ * for the case when the order equals or nearly equals the argument.
+ * At such points, Olver's expressions have zero denominators (and
+ * numerators) resulting in numerical problems. This routine
+ * averages results from four surrounding points in the complex plane
+ * to obtain the result in such cases.
+ *
+ * @param[in] __nu The order for which the Hankel functions are evaluated.
+ * @param[in] __z The argument at which the Hankel functions are evaluated.
+ * @param[out] _H1 The Hankel function of the first kind.
+ * @param[out] _H1p The derivative of the Hankel function of the first kind.
+ * @param[out] _H2 The Hankel function of the second kind.
+ * @param[out] _H2p The derivative of the Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __hankel_uniform(std::complex<_Tp> __nu, std::complex<_Tp> __z,
+ std::complex<_Tp>& _H1, std::complex<_Tp>& _H2,
+ std::complex<_Tp>& _H1p, std::complex<_Tp>& _H2p)
+ {
+ using __cmplx = std::complex<_Tp>;
+ _Tp __test = std::pow(std::abs(__nu), _Tp{1} / _Tp{3}) / _Tp{5};
+
+ if (std::abs(__z - __nu) > __test)
+ __hankel_uniform_olver(__nu, __z, _H1, _H2, _H1p, _H2p);
+ else
+ {
+ _Tp __r = _Tp{2} * __test;
+ std::complex<_Tp> _S_anu[4]{__nu + __cmplx{__r, _Tp()},
+ __nu + __cmplx{_Tp(), __r},
+ __nu - __cmplx{__r, _Tp()},
+ __nu - __cmplx{_Tp(), __r}};
+
+ _H1 = __cmplx{};
+ _H2 = __cmplx{};
+ _H1p = __cmplx{};
+ _H2p = __cmplx{};
+ for (auto __tnu : _S_anu)
+ {
+ std::complex<_Tp> __th1, __th2, __th1p, __th2p;
+ __hankel_uniform_olver(__tnu, __z, __th1, __th2, __th1p, __th2p);
+ _H1 += __th1;
+ _H2 += __th2;
+ _H1p += __th1p;
+ _H2p += __th2p;
+ }
+ _H1 /= _Tp{4};
+ _H2 /= _Tp{4};
+ _H1p /= _Tp{4};
+ _H2p /= _Tp{4};
+ }
+
+ return;
+ }
+
+
+ /**
+ *
+ * @param[in] __nu The order for which the Hankel functions are evaluated.
+ * @param[in] __z The argument at which the Hankel functions are evaluated.
+ * @param[in] __alpha
+ * @param[in] __indexr
+ * @param[out] __aorb
+ * @param[out] __morn
+ * @param[out] _H1 The Hankel function of the first kind.
+ * @param[out] _H1p The derivative of the Hankel function of the first kind.
+ * @param[out] _H2 The Hankel function of the second kind.
+ * @param[out] _H2p The derivative of the Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __hankel_debye(std::complex<_Tp> __nu, std::complex<_Tp> __z,
+ std::complex<_Tp> __alpha,
+ int __indexr, char& __aorb, int& __morn,
+ std::complex<_Tp>& _H1, std::complex<_Tp>& _H2,
+ std::complex<_Tp>& _H1p, std::complex<_Tp>& _H2p)
+ {
+ using namespace std::literals::complex_literals;
+ using __cmplx = std::complex<_Tp>;
+
+ static constexpr _Tp
+ _S_pi(3.141592653589793238462643383279502884195e+0L);
+ static constexpr __cmplx _S_j{1.0il};
+ static constexpr _Tp _S_toler = _Tp{1.0e-8L};
+ const auto __maxexp
+ = std::floor(std::numeric_limits<_Tp>::max_exponent
+ * std::log(std::numeric_limits<_Tp>::radix));
+
+ auto __alphar = std::real(__alpha);
+ auto __alphai = std::imag(__alpha);
+ auto __thalpa = std::sinh(__alpha) / std::cosh(__alpha);
+ auto __snhalp = std::sinh(__alpha);
+ auto __denom = std::sqrt(_S_pi * __z / _Tp{2})
+ * std::sqrt(-_S_j * std::sinh(__alpha));
+ if (std::abs(std::real(__nu * (__thalpa - __alpha))) > __maxexp)
+ std::__throw_runtime_error(__N("__hankel_debye: argument would overflow"
+ " Hankel function evaluation"));
+ auto __s1 = std::exp(+__nu * (__thalpa - __alpha) - _S_j * _S_pi / _Tp{4})
+ / __denom;
+ auto __s2 = std::exp(-__nu * (__thalpa - __alpha) + _S_j * _S_pi / _Tp{4})
+ / __denom;
+ auto __exparg = __nu * (__thalpa - __alpha) - _S_j * _S_pi / _Tp{4};
+ if (__indexr == 0)
+ {
+ _H1 = _Tp{0.5L} * __s1 - __s2;
+ _H2 = _Tp{0.5L} * __s1 + __s2;
+ _H1p = __snhalp * (_Tp{0.5L} * __s1 + __s2);
+ _H2p = __snhalp * (_Tp{0.5L} * __s1 - __s2);
+ }
+ else if (__indexr == 1)
+ {
+ _H1 = __s1;
+ _H2 = __s2;
+ _H1p = +__snhalp * __s1;
+ _H2p = -__snhalp * __s2;
+ }
+ else if (__indexr == 2)
+ {
+ auto __jdbye = __s1 / _Tp{2};
+ _H2 = __s2;
+ _H1 = _Tp{2} * __jdbye - _H2;
+ _H1p = +__snhalp * (__s1 + __s2);
+ _H2p = -__snhalp * __s2;
+ }
+ else if (__indexr == 3)
+ {
+ _H1 = __s1;
+ _H2 = __s2 - __s1;
+ _H1p = +__snhalp * __s1;
+ _H2p = -__snhalp * (__s1 + __s2);
+ }
+ else if (__indexr == 4)
+ {
+ _H1 = __s1;
+ _H2 = __s2 - std::exp(+_Tp{2} * _S_j * __nu * _S_pi) * __s1;
+ _H1p = +__snhalp * __s1;
+ _H2p = -__snhalp
+ * (__s2 + std::exp(+_Tp{2} * _S_j * __nu * _S_pi) * __s1);
+ }
+ else if (__indexr == 5)
+ {
+ _H1 = __s1 - std::exp(-_Tp{2} * _S_j * __nu * _S_pi) * __s2;
+ _H2 = __s2;
+ _H1p = +__snhalp
+ * (__s1 + std::exp(-_Tp{2} * _S_j * __nu * _S_pi) * __s2);
+ _H2p = -__snhalp * __s2;
+ }
+ else if (__aorb == 'A')
+ {
+ __cmplx __sinrat;
+ if ((std::abs(std::imag(__nu)) < _S_toler)
+ && (std::abs(std::fmod(std::real(__nu), 1)) < _S_toler))
+ __sinrat = __morn;
+ else
+ __sinrat = __sin_pi(_Tp(__morn) * __nu) / __sin_pi(__nu);
+ if (__indexr == 6)
+ {
+ _H2 = __s2
+ - std::exp(_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat * __s1;
+ _H1 = __s1 - _H2;
+ _H2p = -__snhalp
+ * (__s2 + std::exp(_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat * __s1);
+ _H1p = +__snhalp
+ * ((_Tp{1} + std::exp(_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat) * __s1 + __s2);
+ }
+ else if (__indexr == 7)
+ {
+ _H1 = __s1
+ - std::exp(-_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat * __s2;
+ _H2 = __s2 - _H1;
+ _H1p = +__snhalp
+ * (__s1 + std::exp(-_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat * __s2);
+ _H2p = -__snhalp
+ * ((_Tp{1} + std::exp(-_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat) * __s2 + __s1);
+ }
+ else
+ std::__throw_runtime_error(__N("__hankel_debye: unexpected region"));
+ }
+ else
+ {
+ __cmplx __sinrat;
+ if ((std::abs(std::imag(__nu)) < _S_toler)
+ && (std::abs(std::fmod(std::real(__nu), 1)) < _S_toler))
+ __sinrat = -__morn;
+ else
+ __sinrat = __sin_pi(_Tp(__morn) * __nu) / __sin_pi(__nu);
+ if (__indexr == 6)
+ {
+ _H1 = __s1 - std::exp(_S_j * _Tp(__morn - 1) * __nu * _S_pi)
+ * __sinrat * __s2;
+ _H2 = __s2 - std::exp(_Tp{2} * _S_j * __nu * _S_pi) * _H2;
+ _H1p = +__snhalp
+ * (__s1 + std::exp(_S_j * _Tp(__morn - 1) * __nu * _S_pi)
+ * __sinrat * __s2);
+ _H2p = -__snhalp
+ * ((_Tp{1} + std::exp(_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat) * __s2
+ + std::exp(_Tp{2} * _S_j * __nu * _S_pi) * __s1);
+ }
+ else if (__indexr == 7)
+ {
+ _H2 = __s2
+ - std::exp(-_S_j * _Tp(__morn - 1) * __nu * _S_pi)
+ * __sinrat * __s1;
+ _H1 = __s1 - std::exp(-_Tp{2} * _S_j * __nu * _S_pi) * _H2;
+ _H2p = -__snhalp
+ * (__s2 + std::exp(-_S_j * _Tp(__morn - 1) * __nu * _S_pi)
+ * __sinrat * __s1);
+ _H1p = +__snhalp
+ * ((_Tp{1} + std::exp(-_S_j * _Tp(__morn + 1) * __nu * _S_pi)
+ * __sinrat) * __s1
+ + std::exp(-_Tp{2} * _S_j * __nu * _S_pi) * __s2);
+ }
+ else
+ std::__throw_runtime_error(__N("__hankel_debye: unexpected region"));
+ }
+
+ return;
+ }
+
+
+ /**
+ *
+ * @param[in] __nu The order for which the Hankel functions are evaluated.
+ * @param[in] __z The argument at which the Hankel functions are evaluated.
+ * @param[out] _H1 The Hankel function of the first kind.
+ * @param[out] _H1p The derivative of the Hankel function of the first kind.
+ * @param[out] _H2 The Hankel function of the second kind.
+ * @param[out] _H2p The derivative of the Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __hankel(std::complex<_Tp> __nu, std::complex<_Tp> __z,
+ std::complex<_Tp>& _H1, std::complex<_Tp>& _H2,
+ std::complex<_Tp>& _H1p, std::complex<_Tp>& _H2p)
+ {
+ static constexpr _Tp
+ _S_pi(3.141592653589793238462643383279502884195e+0L);
+
+ int __indexr;
+
+ auto __test = std::abs((__nu - __z) / std::pow(__nu, _Tp{1}/_Tp{3}));
+ if (__test < _Tp{4})
+ __hankel_uniform(__z, __nu, _H1, _H2, _H1p, _H2p);
+ else
+ {
+ auto __sqtrm = std::sqrt((__nu / __z) * (__nu / __z) - _Tp{1});
+ auto __alpha = std::log((__nu / __z) + __sqtrm);
+ if (std::imag(__alpha) < _Tp{0})
+ __alpha = -__alpha;
+ auto __alphar = std::real(__alpha);
+ auto __alphai = std::imag(__alpha);
+ char __aorb;
+ if (std::real(__nu) > std::real(__z)
+ && std::abs(std::imag(__nu / __z)) <= _Tp{0})
+ {
+ __indexr = 0;
+ __aorb = ' ';
+ }
+ else
+ __debye_region(__alpha, __indexr, __aorb);
+ auto __morn = 0;
+ if (__aorb == 'A')
+ {
+ auto __mfun = ((__alphar * std::tanh(__alphar) - _Tp{1})
+ * std::tan(__alphai) + __alphai) / _S_pi;
+ __morn = int(__mfun);
+ if (__mfun < 0 && std::fmod(__mfun, 1) != _Tp{0})
+ --__morn;
+ }
+ else if (__aorb == 'B')
+ {
+ auto __nfun = ((_Tp{1} - __alphar * std::tanh(__alphar))
+ * std::tan(__alphai) - __alphai) / _S_pi;
+ __morn = int(__nfun) + 1;
+ if (__nfun < _Tp{0} && std::fmod(__nfun, _Tp{1}) != _Tp{0})
+ --__morn;
+ }
+ __hankel_debye(__nu, __z, __alpha, __indexr, __aorb, __morn,
+ _H1, _H2, _H1p, _H2p);
+ }
+
+ return;
+ }
+
+
+ /**
+ * @brief Return the complex cylindrical Hankel function of the first kind.
+ *
+ * @param[in] __nu The order for which the cylindrical Hankel function of the first kind is evaluated.
+ * @param[in] __z The argument at which the cylindrical Hankel function of the first kind is evaluated.
+ * @return The complex cylindrical Hankel function of the first kind.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cyl_hankel_1(std::complex<_Tp> __nu, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __hankel(__nu, __z, _H1, _H1p, _H2, _H2p);
+ return _H1;
+ }
+
+ /**
+ * @brief Return the complex cylindrical Hankel function of the second kind.
+ *
+ * @param[in] __nu The order for which the cylindrical Hankel function of the second kind is evaluated.
+ * @param[in] __z The argument at which the cylindrical Hankel function of the second kind is evaluated.
+ * @return The complex cylindrical Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cyl_hankel_2(std::complex<_Tp> __nu, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __hankel(__nu, __z, _H1, _H1p, _H2, _H2p);
+ return _H2;
+ }
+
+ /**
+ * @brief Return the complex cylindrical Bessel function.
+ *
+ * @param[in] __nu The order for which the cylindrical Bessel function is evaluated.
+ * @param[in] __z The argument at which the cylindrical Bessel function is evaluated.
+ * @return The complex cylindrical Bessel function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cyl_bessel(std::complex<_Tp> __nu, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __hankel(__nu, __z, _H1, _H1p, _H2, _H2p);
+ return (_H1 + _H2) / _Tp{2};
+ }
+
+ /**
+ * @brief Return the complex cylindrical Neumann function.
+ *
+ * @param[in] __nu The order for which the cylindrical Neumann function is evaluated.
+ * @param[in] __z The argument at which the cylindrical Neumann function is evaluated.
+ * @return The complex cylindrical Neumann function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cyl_neumann(std::complex<_Tp> __nu, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __hankel(__nu, __z, _H1, _H1p, _H2, _H2p);
+ return (_H1 - _H2) / std::complex<_Tp>{0, 2};
+ }
+
+ /**
+ * @brief Helper to compute complex spherical Hankel functions
+ * and their derivatives.
+ *
+ * @param[in] __n The order for which the spherical Hankel functions are evaluated.
+ * @param[in] __z The argument at which the spherical Hankel functions are evaluated.
+ * @param[out] _H1 The spherical Hankel function of the first kind.
+ * @param[out] _H1p The derivative of the spherical Hankel function of the first kind.
+ * @param[out] _H2 The spherical Hankel function of the second kind.
+ * @param[out] _H2p The derivative of the spherical Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __sph_hankel(unsigned int __n, std::complex<_Tp> __z,
+ std::complex<_Tp>& _H1, std::complex<_Tp>& _H1p,
+ std::complex<_Tp>& _H2, std::complex<_Tp>& _H2p)
+ {
+ static constexpr _Tp
+ _S_pi(3.141592653589793238462643383279502884195e+0L);
+ std::complex<_Tp> __nu(__n + _Tp{0.5});
+ __hankel(__nu, __z, _H1, _H1p, _H2, _H2p);
+ std::complex<_Tp> __fact = std::sqrt(_S_pi / (_Tp{2} * __z));
+ _H1 *= __fact;
+ _H1p = __fact * _H1p - _H1 / (_Tp{2} * __z);
+ _H2 *= __fact;
+ _H2p = __fact * _H2p - _H2 / (_Tp{2} * __z);
+ }
+
+ /**
+ * @brief Return the complex spherical Hankel function of the first kind.
+ *
+ * @param[in] __n The order for which the spherical Hankel function of the first kind is evaluated.
+ * @param[in] __z The argument at which the spherical Hankel function of the first kind is evaluated.
+ * @return The complex spherical Hankel function of the first kind.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_hankel_1(unsigned int __n, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __sph_hankel(__n, __z, _H1, _H1p, _H2, _H2p);
+ return _H1;
+ }
+
+ /**
+ * @brief Return the complex spherical Hankel function of the second kind.
+ *
+ * @param[in] __n The order for which the spherical Hankel function of the second kind is evaluated.
+ * @param[in] __z The argument at which the spherical Hankel function of the second kind is evaluated.
+ * @return The complex spherical Hankel function of the second kind.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_hankel_2(unsigned int __n, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __sph_hankel(__n, __z, _H1, _H1p, _H2, _H2p);
+ return _H2;
+ }
+
+ /**
+ * @brief Return the complex spherical Bessel function.
+ *
+ * @param[in] __n The order for which the spherical Bessel function is evaluated.
+ * @param[in] __z The argument at which the spherical Bessel function is evaluated.
+ * @return The complex spherical Bessel function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_bessel(unsigned int __n, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __sph_hankel(__n, __z, _H1, _H1p, _H2, _H2p);
+ return (_H1 + _H2) / _Tp{2};
+ }
+
+ /**
+ * @brief Return the complex spherical Neumann function.
+ *
+ * @param[in] __n The order for which the spherical Neumann function is evaluated.
+ * @param[in] __z The argument at which the spherical Neumann function is evaluated.
+ * @return The complex spherical Neumann function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_neumann(unsigned int __n, std::complex<_Tp> __z)
+ {
+ std::complex<_Tp> _H1, _H1p, _H2, _H2p;
+ __sph_hankel(__n, __z, _H1, _H1p, _H2, _H2p);
+ return (_H1 - _H2) / std::complex<_Tp>{0, 2};
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_HANKEL_TCC
diff --git a/libstdc++-v3/include/bits/sf_hermite.tcc b/libstdc++-v3/include/bits/sf_hermite.tcc
new file mode 100644
index 00000000000..d0df077d5ae
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_hermite.tcc
@@ -0,0 +1,197 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_hermite.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// Reference:
+// (1) Handbook of Mathematical Functions,
+// Ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications, Section 22 pp. 773-802
+
+#ifndef _GLIBCXX_BITS_SF_HERMITE_TCC
+#define _GLIBCXX_BITS_SF_HERMITE_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This routine returns the Hermite polynomial
+ * of order n: @f$ H_n(x) @f$ by recursion on n.
+ *
+ * The Hermite polynomial is defined by:
+ * @f[
+ * H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
+ * @f]
+ *
+ * @param __n The order of the Hermite polynomial.
+ * @param __x The argument of the Hermite polynomial.
+ * @return The value of the Hermite polynomial of order n
+ * and argument x.
+ */
+ template<typename _Tp>
+ _Tp
+ __poly_hermite_recursion(unsigned int __n, _Tp __x)
+ {
+ // Compute H_0.
+ auto __H_nm2 = _Tp{1};
+ if (__n == 0)
+ return __H_nm2;
+
+ // Compute H_1.
+ auto __H_nm1 = _Tp{2} * __x;
+ if (__n == 1)
+ return __H_nm1;
+
+ // Compute H_n.
+ _Tp __H_n;
+ for (unsigned int __i = 2; __i <= __n; ++__i)
+ {
+ __H_n = _Tp{2} * (__x * __H_nm1 - _Tp(__i - 1) * __H_nm2);
+ __H_nm2 = __H_nm1;
+ __H_nm1 = __H_n;
+ }
+
+ return __H_n;
+ }
+
+ /**
+ * @brief This routine returns the Hermite polynomial
+ * of large order n: @f$ H_n(x) @f$. We assume here
+ * that x >= 0.
+ *
+ * The Hermite polynomial is defined by:
+ * @f[
+ * H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
+ * @f]
+ *
+ * see "Asymptotic analysis of the Hermite polynomials
+ * from their differential-difference equation",
+ * Diego Dominici, arXiv:math/0601078v1 [math.CA] 4 Jan 2006
+ * @param __n The order of the Hermite polynomial.
+ * @param __x The argument of the Hermite polynomial.
+ * @return The value of the Hermite polynomial of order n
+ * and argument x.
+ */
+ template<typename _Tp>
+ _Tp
+ __poly_hermite_asymp(unsigned int __n, _Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ constexpr auto _S_sqrt_2pi = _S_sqrt_2
+ * __gnu_cxx::__math_constants<_Tp>::__root_pi;
+ // __x >= 0 in this routine.
+ const auto __xturn = std::sqrt(_Tp(2 * __n));
+ if (std::abs(__x - __xturn) < _Tp{0.05L} * __xturn)
+ {
+ // Transition region x ~ sqrt(2n).
+ const auto __n_2 = _Tp(__n) / _Tp{2};
+ const auto __n6th = std::pow(_Tp(__n), _Tp{1} / _Tp{6});
+ const auto __exparg = __n * std::log(__xturn) - _Tp{3} * __n_2
+ + __xturn * __x;
+ const auto __airyarg = _S_sqrt_2 * (__x - __xturn) * __n6th;
+ _Tp _Ai, _Bi, _Aip, _Bip;
+ __airy(__airyarg, _Ai, _Bi, _Aip, _Bip);
+ return _S_sqrt_2pi * __n6th * std::exp(__exparg) * _Ai;
+ }
+ else if (__x < __xturn)
+ {
+ // Oscillatory region |x| < sqrt(2n).
+ const auto __theta = std::asin(__x / __xturn);
+ const auto __2theta = _Tp{2} * __theta;
+ const auto __n_2 = _Tp(__n) / _Tp{2};
+ const auto __exparg = __n_2 * (_Tp{2} * std::log(__xturn)
+ - std::cos(__2theta));
+ const auto __arg = __theta / _Tp{2}
+ + __n_2 * (std::sin(__2theta) + __2theta - _S_pi);
+ return std::sqrt(_Tp{2} / std::cos(__theta))
+ * std::exp(__exparg) * std::cos(__arg);
+ }
+ else
+ {
+ // Exponential region |x| > sqrt(2n).
+ const auto __sigma = std::sqrt((__x - __xturn) * (__x + __xturn));
+ const auto __exparg = _Tp{0.5L} * (__x * (__x - __sigma) - __n)
+ + __n * std::log(__sigma + __x);
+ return std::exp(__exparg)
+ * std::sqrt(_Tp{0.5L} * (_Tp{1} + __x / __sigma));
+ }
+ }
+
+
+ /**
+ * @brief This routine returns the Hermite polynomial
+ * of order n: @f$ H_n(x) @f$.
+ *
+ * The Hermite polynomial is defined by:
+ * @f[
+ * H_n(x) = (-1)^n e^{x^2} \frac{d^n}{dx^n} e^{-x^2}
+ * @f]
+ *
+ * The Hermite polynomial obeys a reflection formula:
+ * @f[
+ * H_n(-x) = (-1)^n H_n(x)
+ * @f]
+ *
+ * @param __n The order of the Hermite polynomial.
+ * @param __x The argument of the Hermite polynomial.
+ * @return The value of the Hermite polynomial of order n
+ * and argument x.
+ */
+ template<typename _Tp>
+ _Tp
+ __poly_hermite(unsigned int __n, _Tp __x)
+ {
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x < _Tp{0})
+ return (__n % 2 == 1 ? -1 : +1) * __poly_hermite(__n, -__x);
+ else if (__n > 100)
+ return __poly_hermite_asymp(__n, __x);
+ else
+ return __poly_hermite_recursion(__n, __x);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_HERMITE_TCC
diff --git a/libstdc++-v3/include/bits/sf_hydrogen.tcc b/libstdc++-v3/include/bits/sf_hydrogen.tcc
new file mode 100644
index 00000000000..6ed6abff0f2
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_hydrogen.tcc
@@ -0,0 +1,95 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_hydrogen.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_SF_HYDROGEN_TCC
+#define _GLIBCXX_BITS_SF_HYDROGEN_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Return the bound-state Coulomb wave-function.
+ */
+ template <typename _Tp>
+ std::complex<_Tp>
+ __hydrogen(unsigned int __n,
+ unsigned int __l, unsigned int __m,
+ _Tp __Z, _Tp __r, _Tp __theta, _Tp __phi)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+ if (__isnan(__Z) || __isnan(__r) || __isnan(__theta) || __isnan(__phi))
+ return std::complex<_Tp>{_S_NaN, _S_NaN};
+ else if(__n < 1)
+ std::__throw_domain_error(__N("__hydrogen: "
+ "level number less than one"));
+ else if(__l > __n - 1)
+ std::__throw_domain_error(__N("__hydrogen: "
+ "angular momentum number too large"));
+ else if(__Z <= _Tp(0))
+ std::__throw_domain_error(__N("__hydrogen: non-positive charge"));
+ else if(__r < _Tp(0))
+ std::__throw_domain_error(__N("__hydrogen: negative radius"));
+ else
+ {
+ const auto __A = _Tp(2) * __Z / __n;
+
+ const auto __pre = std::sqrt(__A * __A * __A / (_Tp(2) * __n));
+ const auto __ln_a = __log_gamma(__n + __l + 1);
+ const auto __ln_b = __log_gamma(__n - __l);
+ const auto __ex = std::exp((__ln_b - __ln_a) / _Tp(2));
+ const auto __norm = __pre * __ex;
+
+ const auto __rho = __A * __r;
+ const auto __ea = std::exp(-__rho / _Tp(2));
+ const auto __pp = std::pow(__rho, __l);
+ const auto __lag = __assoc_laguerre(__n - __l - 1, 2 * __l + 1,
+ __rho);
+ const auto __sphh = __sph_legendre(__l, __m, __theta)
+ * std::polar(_Tp(1), _Tp(__m) * __phi);
+
+ const auto __psi = __norm * __ea * __pp * __lag * __sphh;
+
+ return __psi;
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+}
+
+#endif // _GLIBCXX_BITS_SF_HYDROGEN_TCC
diff --git a/libstdc++-v3/include/bits/sf_hyperg.tcc b/libstdc++-v3/include/bits/sf_hyperg.tcc
new file mode 100644
index 00000000000..bd92f24dc8f
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_hyperg.tcc
@@ -0,0 +1,846 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_hyperg.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 6, pp. 555-566
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+
+#ifndef _GLIBCXX_BITS_SF_HYPERG_TCC
+#define _GLIBCXX_BITS_SF_HYPERG_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This routine returns the confluent hypergeometric limit function
+ * by series expansion.
+ *
+ * @f[
+ * _0F_1(-;c;x) = \Gamma(c)
+ * \sum_{n=0}^{\infty}
+ * \frac{1}{\Gamma(c+n)}
+ * \frac{x^n}{n!}
+ * @f]
+ *
+ * If a and b are integers and a < 0 and either b > 0 or b < a
+ * then the series is a polynomial with a finite number of
+ * terms.
+ *
+ * @param __c The "denominator" parameter.
+ * @param __x The argument of the confluent hypergeometric limit function.
+ * @return The confluent hypergeometric limit function.
+ */
+ template<typename _Tp>
+ _Tp
+ __conf_hyperg_lim_series(_Tp __c, _Tp __x)
+ {
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+
+ auto __term = _Tp{1};
+ auto __Fac = _Tp{1};
+ const unsigned int __max_iter = 100000;
+ unsigned int __i;
+ for (__i = 0; __i < __max_iter; ++__i)
+ {
+ __term *= __x / ((__c + _Tp(__i)) * _Tp(1 + __i));
+ if (std::abs(__term) < __eps)
+ break;
+ __Fac += __term;
+ }
+ if (__i == __max_iter)
+ std::__throw_runtime_error(__N("__conf_hyperg_lim_series: "
+ "series failed to converge"));
+
+ return __Fac;
+ }
+
+
+ /**
+ * @brief Return the confluent hypergeometric limit function
+ * @f$ _0F_1(-;c;x) @f$.
+ *
+ * @param __c The @a denominator parameter.
+ * @param __x The argument of the confluent hypergeometric limit function.
+ * @return The confluent limit hypergeometric function.
+ */
+ template<typename _Tp>
+ _Tp
+ __conf_hyperg_lim(_Tp __c, _Tp __x)
+ {
+ const _Tp __c_nint = std::nearbyint(__c);
+ if (__isnan(__c) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__c_nint == __c && __c_nint <= 0)
+ return __gnu_cxx::__infinity<_Tp>();
+ //else if (__x < _Tp{0})
+ //return __conf_hyperg_lim_luke(__c, __x);
+ else
+ return __conf_hyperg_lim_series(__c, __x);
+ }
+
+
+ /**
+ * @brief This routine returns the confluent hypergeometric function
+ * by series expansion.
+ *
+ * @f[
+ * _1F_1(a;c;x) = \frac{\Gamma(c)}{\Gamma(a)}
+ * \sum_{n=0}^{\infty}
+ * \frac{\Gamma(a+n)}{\Gamma(c+n)}
+ * \frac{x^n}{n!}
+ * @f]
+ *
+ * @param __a The "numerator" parameter.
+ * @param __c The "denominator" parameter.
+ * @param __x The argument of the confluent hypergeometric function.
+ * @return The confluent hypergeometric function.
+ */
+ template<typename _Tp>
+ _Tp
+ __conf_hyperg_series(_Tp __a, _Tp __c, _Tp __x)
+ {
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+
+ _Tp __term = _Tp{1};
+ _Tp __Fac = _Tp{1};
+ const unsigned int __max_iter = 100000;
+ unsigned int __i;
+ for (__i = 0; __i < __max_iter; ++__i)
+ {
+ __term *= (__a + _Tp(__i)) * __x
+ / ((__c + _Tp(__i)) * _Tp(1 + __i));
+ if (std::abs(__term) < __eps)
+ break;
+ __Fac += __term;
+ }
+ if (__i == __max_iter)
+ std::__throw_runtime_error(__N("__conf_hyperg_series: "
+ "series failed to converge"));
+
+ return __Fac;
+ }
+
+
+ /**
+ * @brief Return the hypergeometric function @f$ _1F_1(a;c;x) @f$
+ * by an iterative procedure described in
+ * Luke, Algorithms for the Computation of Mathematical Functions.
+ *
+ * Like the case of the 2F1 rational approximations, these are
+ * probably guaranteed to converge for x < 0, barring gross
+ * numerical instability in the pre-asymptotic regime.
+ */
+ template<typename _Tp>
+ _Tp
+ __conf_hyperg_luke(_Tp __a, _Tp __c, _Tp __xin)
+ {
+ const _Tp __big = __gnu_cxx::__root_max(_Tp{6});
+ const int __nmax = 20000;
+ const _Tp __eps = __gnu_cxx::__epsilon<_Tp>();
+ const _Tp __x = -__xin;
+ const _Tp __x3 = __x * __x * __x;
+ const _Tp __t0 = __a / __c;
+ const _Tp __t1 = (__a + _Tp{1}) / (_Tp{2} * __c);
+ const _Tp __t2 = (__a + _Tp{2}) / (_Tp{2} * (__c + _Tp{1}));
+ _Tp __F = _Tp{1};
+ _Tp __prec;
+
+ _Tp __Bnm3 = _Tp{1};
+ _Tp __Bnm2 = _Tp{1} + __t1 * __x;
+ _Tp __Bnm1 = _Tp{1} + __t2 * __x * (_Tp{1} + __t1 / _Tp{3} * __x);
+
+ _Tp __Anm3 = _Tp{1};
+ _Tp __Anm2 = __Bnm2 - __t0 * __x;
+ _Tp __Anm1 = __Bnm1 - __t0 * (_Tp{1} + __t2 * __x) * __x
+ + __t0 * __t1 * (__c / (__c + _Tp{1})) * __x * __x;
+
+ int __n = 3;
+ while(true)
+ {
+ _Tp __npam1 = _Tp(__n - 1) + __a;
+ _Tp __npcm1 = _Tp(__n - 1) + __c;
+ _Tp __npam2 = _Tp(__n - 2) + __a;
+ _Tp __npcm2 = _Tp(__n - 2) + __c;
+ _Tp __tnm1 = _Tp(2 * __n - 1);
+ _Tp __tnm3 = _Tp(2 * __n - 3);
+ _Tp __tnm5 = _Tp(2 * __n - 5);
+ _Tp __F1 = (_Tp(__n - 2) - __a) / (_Tp{2} * __tnm3 * __npcm1);
+ _Tp __F2 = (_Tp(__n) + __a) * __npam1
+ / (_Tp{4} * __tnm1 * __tnm3 * __npcm2 * __npcm1);
+ _Tp __F3 = -__npam2 * __npam1 * (_Tp(__n - 2) - __a)
+ / (_Tp{8} * __tnm3 * __tnm3 * __tnm5
+ * (_Tp(__n - 3) + __c) * __npcm2 * __npcm1);
+ _Tp __E = -__npam1 * (_Tp(__n - 1) - __c)
+ / (_Tp{2} * __tnm3 * __npcm2 * __npcm1);
+
+ _Tp __An = (_Tp{1} + __F1 * __x) * __Anm1
+ + (__E + __F2 * __x) * __x * __Anm2 + __F3 * __x3 * __Anm3;
+ _Tp __Bn = (_Tp{1} + __F1 * __x) * __Bnm1
+ + (__E + __F2 * __x) * __x * __Bnm2 + __F3 * __x3 * __Bnm3;
+ _Tp __r = __An / __Bn;
+
+ __prec = std::abs((__F - __r) / __F);
+ __F = __r;
+
+ if (__prec < __eps || __n > __nmax)
+ break;
+
+ if (std::abs(__An) > __big || std::abs(__Bn) > __big)
+ {
+ __An /= __big;
+ __Bn /= __big;
+ __Anm1 /= __big;
+ __Bnm1 /= __big;
+ __Anm2 /= __big;
+ __Bnm2 /= __big;
+ __Anm3 /= __big;
+ __Bnm3 /= __big;
+ }
+ else if (std::abs(__An) < _Tp{1} / __big
+ || std::abs(__Bn) < _Tp{1} / __big)
+ {
+ __An *= __big;
+ __Bn *= __big;
+ __Anm1 *= __big;
+ __Bnm1 *= __big;
+ __Anm2 *= __big;
+ __Bnm2 *= __big;
+ __Anm3 *= __big;
+ __Bnm3 *= __big;
+ }
+
+ ++__n;
+ __Bnm3 = __Bnm2;
+ __Bnm2 = __Bnm1;
+ __Bnm1 = __Bn;
+ __Anm3 = __Anm2;
+ __Anm2 = __Anm1;
+ __Anm1 = __An;
+ }
+
+ if (__n >= __nmax)
+ std::__throw_runtime_error(__N("__conf_hyperg_luke: "
+ "iteration failed to converge"));
+
+ return __F;
+ }
+
+
+ /**
+ * @brief Return the confluent hypergeometric function
+ * @f$ _1F_1(a;c;x) @f$.
+ *
+ * @param __a The @a numerator parameter.
+ * @param __c The @a denominator parameter.
+ * @param __x The argument of the confluent hypergeometric function.
+ * @return The confluent hypergeometric function.
+ */
+ template<typename _Tp>
+ _Tp
+ __conf_hyperg(_Tp __a, _Tp __c, _Tp __x)
+ {
+ const _Tp __c_nint = std::nearbyint(__c);
+ if (__isnan(__a) || __isnan(__c) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__c_nint == __c && __c_nint <= 0)
+ return __gnu_cxx::__infinity<_Tp>();
+ else if (__a == _Tp{0})
+ return _Tp{1};
+ else if (__c == __a)
+ return std::exp(__x);
+ else if (__x < _Tp{0})
+ return __conf_hyperg_luke(__a, __c, __x);
+ else
+ return __conf_hyperg_series(__a, __c, __x);
+ }
+
+
+ /**
+ * @brief Return the hypergeometric function @f$ _2F_1(a,b;c;x) @f$
+ * by series expansion.
+ *
+ * The hypergeometric function is defined by
+ * @f[
+ * _2F_1(a,b;c;x) = \frac{\Gamma(c)}{\Gamma(a)\Gamma(b)}
+ * \sum_{n=0}^{\infty}
+ * \frac{\Gamma(a+n)\Gamma(b+n)}{\Gamma(c+n)}
+ * \frac{x^n}{n!}
+ * @f]
+ *
+ * This works and it's pretty fast.
+ *
+ * @param __a The first @a numerator parameter.
+ * @param __b The second @a numerator parameter.
+ * @param __c The @a denominator parameter.
+ * @param __x The argument of the confluent hypergeometric function.
+ * @return The confluent hypergeometric function.
+ */
+ template<typename _Tp>
+ _Tp
+ __hyperg_series(_Tp __a, _Tp __b, _Tp __c, _Tp __x)
+ {
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+
+ auto __term = _Tp{1};
+ auto __Fabc = _Tp{1};
+ const unsigned int __max_iter = 100000;
+ unsigned int __i;
+ for (__i = 0; __i < __max_iter; ++__i)
+ {
+ __term *= (__a + _Tp(__i)) * (__b + _Tp(__i)) * __x
+ / ((__c + _Tp(__i)) * _Tp(1 + __i));
+ if (std::abs(__term) < __eps)
+ break;
+ __Fabc += __term;
+ }
+ if (__i == __max_iter)
+ std::__throw_runtime_error(__N("Series failed to converge "
+ "in __hyperg_series."));
+
+ return __Fabc;
+ }
+
+
+ /**
+ * @brief Return the hypergeometric function @f$ _2F_1(a,b;c;x) @f$
+ * by an iterative procedure described in
+ * Luke, Algorithms for the Computation of Mathematical Functions.
+ */
+ template<typename _Tp>
+ _Tp
+ __hyperg_luke(_Tp __a, _Tp __b, _Tp __c, _Tp __xin)
+ {
+ const auto __big = __gnu_cxx::__root_max(_Tp{6});
+ const int __nmax = 20000;
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+ const auto __x = -__xin;
+ const auto __x3 = __x * __x * __x;
+ const auto __t0 = __a * __b / __c;
+ const auto __t1 = (__a + _Tp{1}) * (__b + _Tp{1}) / (_Tp{2} * __c);
+ const auto __t2 = (__a + _Tp{2}) * (__b + _Tp{2})
+ / (_Tp{2} * (__c + _Tp{1}));
+
+ auto __F = _Tp{1};
+
+ auto __Bnm3 = _Tp{1};
+ auto __Bnm2 = _Tp{1} + __t1 * __x;
+ auto __Bnm1 = _Tp{1} + __t2 * __x * (_Tp{1} + __t1 / _Tp{3} * __x);
+
+ auto __Anm3 = _Tp{1};
+ auto __Anm2 = __Bnm2 - __t0 * __x;
+ auto __Anm1 = __Bnm1 - __t0 * (_Tp{1} + __t2 * __x) * __x
+ + __t0 * __t1 * (__c / (__c + _Tp{1})) * __x * __x;
+
+ int __n = 3;
+ while (true)
+ {
+ const auto __npam1 = _Tp(__n - 1) + __a;
+ const auto __npbm1 = _Tp(__n - 1) + __b;
+ const auto __npcm1 = _Tp(__n - 1) + __c;
+ const auto __npam2 = _Tp(__n - 2) + __a;
+ const auto __npbm2 = _Tp(__n - 2) + __b;
+ const auto __npcm2 = _Tp(__n - 2) + __c;
+ const auto __tnm1 = _Tp(2 * __n - 1);
+ const auto __tnm3 = _Tp(2 * __n - 3);
+ const auto __tnm5 = _Tp(2 * __n - 5);
+ const auto __n2 = __n * __n;
+ const auto __F1 = (_Tp{3} * __n2 + (__a + __b - _Tp{6}) * __n
+ + _Tp{2} - __a * __b - _Tp{2} * (__a + __b))
+ / (_Tp{2} * __tnm3 * __npcm1);
+ const auto __F2 = -(_Tp{3} * __n2 - (__a + __b + _Tp{6}) * __n
+ + _Tp{2} - __a * __b) * __npam1 * __npbm1
+ / (_Tp{4} * __tnm1 * __tnm3 * __npcm2 * __npcm1);
+ const auto __F3 = (__npam2 * __npam1 * __npbm2 * __npbm1
+ * (_Tp(__n - 2) - __a) * (_Tp(__n - 2) - __b))
+ / (_Tp{8} * __tnm3 * __tnm3 * __tnm5
+ * (_Tp(__n - 3) + __c) * __npcm2 * __npcm1);
+ const auto __E = -__npam1 * __npbm1 * (_Tp(__n - 1) - __c)
+ / (_Tp{2} * __tnm3 * __npcm2 * __npcm1);
+
+ auto __An = (_Tp{1} + __F1 * __x) * __Anm1
+ + (__E + __F2 * __x) * __x * __Anm2 + __F3 * __x3 * __Anm3;
+ auto __Bn = (_Tp{1} + __F1 * __x) * __Bnm1
+ + (__E + __F2 * __x) * __x * __Bnm2 + __F3 * __x3 * __Bnm3;
+ const auto __r = __An / __Bn;
+
+ const auto __prec = std::abs((__F - __r) / __F);
+ __F = __r;
+
+ if (__prec < __eps || __n > __nmax)
+ break;
+
+ if (std::abs(__An) > __big || std::abs(__Bn) > __big)
+ {
+ __An /= __big;
+ __Bn /= __big;
+ __Anm1 /= __big;
+ __Bnm1 /= __big;
+ __Anm2 /= __big;
+ __Bnm2 /= __big;
+ __Anm3 /= __big;
+ __Bnm3 /= __big;
+ }
+ else if (std::abs(__An) < _Tp{1} / __big
+ || std::abs(__Bn) < _Tp{1} / __big)
+ {
+ __An *= __big;
+ __Bn *= __big;
+ __Anm1 *= __big;
+ __Bnm1 *= __big;
+ __Anm2 *= __big;
+ __Bnm2 *= __big;
+ __Anm3 *= __big;
+ __Bnm3 *= __big;
+ }
+
+ ++__n;
+ __Bnm3 = __Bnm2;
+ __Bnm2 = __Bnm1;
+ __Bnm1 = __Bn;
+ __Anm3 = __Anm2;
+ __Anm2 = __Anm1;
+ __Anm1 = __An;
+ }
+
+ if (__n >= __nmax)
+ std::__throw_runtime_error(__N("__hyperg_luke: "
+ "iteration failed to converge"));
+
+ return __F;
+ }
+
+
+ /**
+ * @brief Return the hypergeometric function @f$ _2F_1(a,b;c;x) @f$
+ * by the reflection formulae in Abramowitz & Stegun formula
+ * 15.3.6 for d = c - a - b not integral and formula 15.3.11 for
+ * d = c - a - b integral. This assumes a, b, c != negative
+ * integer.
+ *
+ * The hypergeometric function is defined by
+ * @f[
+ * _2F_1(a,b;c;x) = \frac{\Gamma(c)}{\Gamma(a)\Gamma(b)}
+ * \sum_{n=0}^{\infty}
+ * \frac{\Gamma(a+n)\Gamma(b+n)}{\Gamma(c+n)}
+ * \frac{x^n}{n!}
+ * @f]
+ *
+ * The reflection formula for nonintegral @f$ d = c - a - b @f$ is:
+ * @f[
+ * _2F_1(a,b;c;x) = \frac{\Gamma(c)\Gamma(d)}{\Gamma(c-a)\Gamma(c-b)}
+ * _2F_1(a,b;1-d;1-x)
+ * + \frac{\Gamma(c)\Gamma(-d)}{\Gamma(a)\Gamma(b)}
+ * _2F_1(c-a,c-b;1+d;1-x)
+ * @f]
+ *
+ * The reflection formula for integral @f$ m = c - a - b @f$ is:
+ * @f[
+ * _2F_1(a,b;a+b+m;x) = \frac{\Gamma(m)\Gamma(a+b+m)}{\Gamma(a+m)\Gamma(b+m)}
+ * \sum_{k=0}^{m-1} \frac{(m+a)_k(m+b)_k}{k!(1-m)_k}
+ * -
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __hyperg_reflect(_Tp __a, _Tp __b, _Tp __c, _Tp __x)
+ {
+ const auto _S_log_max = __gnu_cxx::__log_max<_Tp>();
+ const auto __d = __c - __a - __b;
+ const int __intd = std::floor(__d + _Tp{0.5L});
+ constexpr auto __eps = __gnu_cxx::__epsilon<_Tp>();
+ const auto __toler = _Tp{1000} * __eps;
+ const bool __d_integer = (std::abs(__d - __intd) < __toler);
+
+ if (__d_integer)
+ {
+ const auto __ln_omx = std::log1p(-__x);
+ const auto __ad = std::abs(__d);
+ _Tp __F1, __F2;
+
+ _Tp __d1, __d2;
+ if (__d >= _Tp{0})
+ {
+ __d1 = __d;
+ __d2 = _Tp{0};
+ }
+ else
+ {
+ __d1 = _Tp{0};
+ __d2 = __d;
+ }
+
+ const _Tp __lng_c = __log_gamma(__c);
+
+ // Evaluate F1.
+ if (__ad < __eps)
+ {
+ // d = c - a - b = 0.
+ __F1 = _Tp{0};
+ }
+ else
+ {
+
+ bool __ok_d1 = true;
+ _Tp __lng_ad, __lng_ad1, __lng_bd1;
+ __try
+ {
+ __lng_ad = __log_gamma(__ad);
+ __lng_ad1 = __log_gamma(__a + __d1);
+ __lng_bd1 = __log_gamma(__b + __d1);
+ }
+ __catch(...)
+ {
+ __ok_d1 = false;
+ }
+
+ if (__ok_d1)
+ {
+ /* Gamma functions in the denominator are ok.
+ * Proceed with evaluation.
+ */
+ auto __sum1 = _Tp{1};
+ auto __term = _Tp{1};
+ auto __ln_pre1 = __lng_ad + __lng_c + __d2 * __ln_omx
+ - __lng_ad1 - __lng_bd1;
+
+ /* Do F1 sum.
+ */
+ for (int __i = 1; __i < __ad; ++__i)
+ {
+ const int __j = __i - 1;
+ __term *= (__a + __d2 + __j) * (__b + __d2 + __j)
+ / (_Tp{1} + __d2 + __j) / __i * (_Tp{1} - __x);
+ __sum1 += __term;
+ }
+
+ if (__ln_pre1 > _S_log_max)
+ std::__throw_runtime_error(__N("__hyperg_luke: "
+ "overflow of gamma functions"));
+ else
+ __F1 = std::exp(__ln_pre1) * __sum1;
+ }
+ else
+ {
+ // Gamma functions in the denominator were not ok.
+ // So the F1 term is zero.
+ __F1 = _Tp{0};
+ }
+ } // end F1 evaluation
+
+ // Evaluate F2.
+ bool __ok_d2 = true;
+ _Tp __lng_ad2, __lng_bd2;
+ __try
+ {
+ __lng_ad2 = __log_gamma(__a + __d2);
+ __lng_bd2 = __log_gamma(__b + __d2);
+ }
+ __catch(...)
+ {
+ __ok_d2 = false;
+ }
+
+ if (__ok_d2)
+ {
+ // Gamma functions in the denominator are ok.
+ // Proceed with evaluation.
+ const int __maxiter = 2000;
+ const auto __psi_1 = -__gnu_cxx::__math_constants<_Tp>::__gamma_e;
+ const auto __psi_1pd = __psi(_Tp{1} + __ad);
+ const auto __psi_apd1 = __psi(__a + __d1);
+ const auto __psi_bpd1 = __psi(__b + __d1);
+
+ auto __psi_term = __psi_1 + __psi_1pd - __psi_apd1
+ - __psi_bpd1 - __ln_omx;
+ auto __fact = _Tp{1};
+ auto __sum2 = __psi_term;
+ auto __ln_pre2 = __lng_c + __d1 * __ln_omx
+ - __lng_ad2 - __lng_bd2;
+
+ // Do F2 sum.
+ int __j;
+ for (__j = 1; __j < __maxiter; ++__j)
+ {
+ // Values for psi functions use recurrence;
+ // Abramowitz & Stegun 6.3.5
+ const auto __term1 = _Tp{1} / _Tp{__j}
+ + _Tp{1} / (__ad + __j);
+ const auto __term2 = _Tp{1} / (__a + __d1 + _Tp{__j - 1})
+ + _Tp{1} / (__b + __d1 + _Tp{__j - 1});
+ __psi_term += __term1 - __term2;
+ __fact *= (__a + __d1 + _Tp(__j - 1))
+ * (__b + __d1 + _Tp(__j - 1))
+ / ((__ad + __j) * __j) * (_Tp{1} - __x);
+ const auto __delta = __fact * __psi_term;
+ __sum2 += __delta;
+ if (std::abs(__delta) < __eps * std::abs(__sum2))
+ break;
+ }
+ if (__j == __maxiter)
+ std::__throw_runtime_error(__N("__hyperg_reflect: "
+ "sum F2 failed to converge"));
+
+ if (__sum2 == _Tp{0})
+ __F2 = _Tp{0};
+ else
+ __F2 = std::exp(__ln_pre2) * __sum2;
+ }
+ else
+ {
+ // Gamma functions in the denominator not ok.
+ // So the F2 term is zero.
+ __F2 = _Tp{0};
+ } // end F2 evaluation
+
+ const auto __sgn_2 = (__intd % 2 == 1 ? -_Tp{1} : _Tp{1});
+ const auto __F = __F1 + __sgn_2 * __F2;
+
+ return __F;
+ }
+ else
+ {
+ // d = c - a - b not an integer.
+
+ // These gamma functions appear in the denominator, so we
+ // catch their harmless domain errors and set the terms to zero.
+ bool __ok1 = true;
+ auto __sgn_g1ca = _Tp{0}, __ln_g1ca = _Tp{0};
+ auto __sgn_g1cb = _Tp{0}, __ln_g1cb = _Tp{0};
+ __try
+ {
+ __sgn_g1ca = __log_gamma_sign(__c - __a);
+ __ln_g1ca = __log_gamma(__c - __a);
+ __sgn_g1cb = __log_gamma_sign(__c - __b);
+ __ln_g1cb = __log_gamma(__c - __b);
+ }
+ __catch(...)
+ {
+ __ok1 = false;
+ }
+
+ bool __ok2 = true;
+ auto __sgn_g2a = _Tp{0}, __ln_g2a = _Tp{0};
+ auto __sgn_g2b = _Tp{0}, __ln_g2b = _Tp{0};
+ __try
+ {
+ __sgn_g2a = __log_gamma_sign(__a);
+ __ln_g2a = __log_gamma(__a);
+ __sgn_g2b = __log_gamma_sign(__b);
+ __ln_g2b = __log_gamma(__b);
+ }
+ __catch(...)
+ {
+ __ok2 = false;
+ }
+
+ const auto __sgn_gc = __log_gamma_sign(__c);
+ const auto __ln_gc = __log_gamma(__c);
+ const auto __sgn_gd = __log_gamma_sign(__d);
+ const auto __ln_gd = __log_gamma(__d);
+ const auto __sgn_gmd = __log_gamma_sign(-__d);
+ const auto __ln_gmd = __log_gamma(-__d);
+
+ const auto __sgn1 = __sgn_gc * __sgn_gd * __sgn_g1ca * __sgn_g1cb;
+ const auto __sgn2 = __sgn_gc * __sgn_gmd * __sgn_g2a * __sgn_g2b;
+
+ _Tp __pre1, __pre2;
+ if (__ok1 && __ok2)
+ {
+ auto __ln_pre1 = __ln_gc + __ln_gd - __ln_g1ca - __ln_g1cb;
+ auto __ln_pre2 = __ln_gc + __ln_gmd - __ln_g2a - __ln_g2b
+ + __d * std::log(_Tp{1} - __x);
+ if (__ln_pre1 < _S_log_max && __ln_pre2 < _S_log_max)
+ {
+ __pre1 = std::exp(__ln_pre1);
+ __pre2 = std::exp(__ln_pre2);
+ __pre1 *= __sgn1;
+ __pre2 *= __sgn2;
+ }
+ else
+ {
+ std::__throw_runtime_error(__N("__hyperg_reflect: "
+ "overflow of gamma functions"));
+ }
+ }
+ else if (__ok1 && !__ok2)
+ {
+ auto __ln_pre1 = __ln_gc + __ln_gd - __ln_g1ca - __ln_g1cb;
+ if (__ln_pre1 < _S_log_max)
+ {
+ __pre1 = std::exp(__ln_pre1);
+ __pre1 *= __sgn1;
+ __pre2 = _Tp{0};
+ }
+ else
+ {
+ std::__throw_runtime_error(__N("__hyperg_reflect: "
+ "overflow of gamma functions"));
+ }
+ }
+ else if (!__ok1 && __ok2)
+ {
+ auto __ln_pre2 = __ln_gc + __ln_gmd - __ln_g2a - __ln_g2b
+ + __d * std::log(_Tp{1} - __x);
+ if (__ln_pre2 < _S_log_max)
+ {
+ __pre1 = _Tp{0};
+ __pre2 = std::exp(__ln_pre2);
+ __pre2 *= __sgn2;
+ }
+ else
+ {
+ std::__throw_runtime_error(__N("__hyperg_reflect: "
+ "overflow of gamma functions"));
+ }
+ }
+ else
+ {
+ __pre1 = _Tp{0};
+ __pre2 = _Tp{0};
+ std::__throw_runtime_error(__N("__hyperg_reflect: "
+ "underflow of gamma functions"));
+ }
+
+ const auto __F1 = __hyperg_series(__a, __b, _Tp{1} - __d,
+ _Tp{1} - __x);
+ const auto __F2 = __hyperg_series(__c - __a, __c - __b, _Tp{1} + __d,
+ _Tp{1} - __x);
+
+ const auto __F = __pre1 * __F1 + __pre2 * __F2;
+
+ return __F;
+ }
+ }
+
+
+ /**
+ * @brief Return the hypergeometric function @f$ _2F_1(a,b;c;x) @f$.
+ *
+ * The hypergeometric function is defined by
+ * @f[
+ * _2F_1(a,b;c;x) = \frac{\Gamma(c)}{\Gamma(a)\Gamma(b)}
+ * \sum_{n=0}^{\infty}
+ * \frac{\Gamma(a+n)\Gamma(b+n)}{\Gamma(c+n)}
+ * \frac{x^n}{n!}
+ * @f]
+ *
+ * @param __a The first @a numerator parameter.
+ * @param __b The second @a numerator parameter.
+ * @param __c The @a denominator parameter.
+ * @param __x The argument of the confluent hypergeometric function.
+ * @return The confluent hypergeometric function.
+ */
+ template<typename _Tp>
+ _Tp
+ __hyperg(_Tp __a, _Tp __b, _Tp __c, _Tp __x)
+ {
+ const auto _S_log_max = __gnu_cxx::__log_max<_Tp>();
+ const _Tp __a_nint = std::nearbyint(__a);
+ const _Tp __b_nint = std::nearbyint(__b);
+ const _Tp __c_nint = std::nearbyint(__c);
+ const _Tp __toler = _Tp{1000} * __gnu_cxx::__epsilon<_Tp>();
+ const bool __c_neg_integer
+ = (__c < _Tp{0} && std::abs(__c - __c_nint) < __toler );
+ if (std::abs(__x - _Tp{1}) < __toler && __c - __b - __a > _Tp{0}
+ && __c != _Tp{0} && !__c_neg_integer)
+ {
+ const auto __log_gamc = __log_gamma(__c);
+ const auto __sign_gamc = __log_gamma_sign(__c);
+ const auto __log_gamcab = __log_gamma(__c - __a - __b);
+ const auto __log_gamca = __log_gamma(__c - __a);
+ const auto __sign_gamca = __log_gamma_sign(__c - __a);
+ const auto __log_gamcb = __log_gamma(__c - __b);
+ const auto __sign_gamcb = __log_gamma_sign(__c - __b);
+ const auto __log_pre = __log_gamc + __log_gamcab
+ - __log_gamca - __log_gamcb;
+ const auto __sign = __sign_gamc * __sign_gamca * __sign_gamcb;
+ if (__sign == _Tp{0})
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__log_pre < _S_log_max)
+ return __sign * std::exp(__log_pre);
+ else
+ std::__throw_domain_error(__N("__hyperg: "
+ "overflow of gamma functions"));
+ }
+ else if (std::abs(__x) >= _Tp{1})
+ std::__throw_domain_error(__N("__hyperg: "
+ "argument outside unit circle"));
+ else if (__isnan(__a) || __isnan(__b)
+ || __isnan(__c) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__c_nint == __c && __c_nint <= _Tp{0})
+ return __gnu_cxx::__infinity<_Tp>();
+ else if (std::abs(__c - __b) < __toler || std::abs(__c - __a) < __toler)
+ return std::pow(_Tp{1} - __x, __c - __a - __b);
+ else if (__a >= _Tp{0} && __b >= _Tp{0} && __c >= _Tp{0}
+ && __x >= _Tp{0} && __x < _Tp{0.995L})
+ return __hyperg_series(__a, __b, __c, __x);
+ else if (std::abs(__a) < _Tp{10} && std::abs(__b) < _Tp{10})
+ {
+ // For integer a and b the hypergeometric function is a
+ // finite polynomial.
+ if (__a < _Tp{0} && std::abs(__a - __a_nint) < __toler)
+ return __hyperg_series(__a_nint, __b, __c, __x);
+ else if (__b < _Tp{0} && std::abs(__b - __b_nint) < __toler)
+ return __hyperg_series(__a, __b_nint, __c, __x);
+ else if (__x < -_Tp{0.25L})
+ return __hyperg_luke(__a, __b, __c, __x);
+ else if (__x < _Tp{0.5L})
+ return __hyperg_series(__a, __b, __c, __x);
+ else if (std::abs(__c) > _Tp{10})
+ return __hyperg_series(__a, __b, __c, __x);
+ else
+ return __hyperg_reflect(__a, __b, __c, __x);
+ }
+ else
+ return __hyperg_luke(__a, __b, __c, __x);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_HYPERG_TCC
diff --git a/libstdc++-v3/include/bits/sf_hypint.tcc b/libstdc++-v3/include/bits/sf_hypint.tcc
new file mode 100644
index 00000000000..cd0d69e63f7
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_hypint.tcc
@@ -0,0 +1,193 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_hypint.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_HYPINT_TCC
+#define _GLIBCXX_BITS_SF_HYPINT_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This function computes the hyperbolic cosine @f$ Chi(x) @f$
+ * and hyperbolic sine @f$ Shi(x) @f$ integrals
+ * by continued fraction for positive argument.
+ */
+ ////FIXME!!!!
+ template<typename _Tp>
+ void
+ __chshint_cont_frac(_Tp __t, _Tp& _Chi, _Tp& _Shi)
+ {
+ constexpr unsigned int _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_fp_min = __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+
+ // Evaluate Chi and Shi by Lentz's modified method of continued fracions.
+ std::complex<_Tp> __b(_Tp{1}, __t);
+ std::complex<_Tp> __c(_Tp{1} / _S_fp_min);
+ std::complex<_Tp> __d(_Tp{1} / __b);
+ std::complex<_Tp> __h(__d);
+ unsigned int __i = 2;
+ while (true)
+ {
+ _Tp __a = -(__i - 1) * (__i - 1);
+ __b += _Tp{2};
+ __d = _Tp{1} / (__a * __d + __b);
+ __c = __b + __a / __c;
+ auto __del = __c * __d;
+ __h *= __del;
+ if (std::abs(__del.real() - _Tp{1}) + std::abs(__del.imag()) < _S_eps)
+ break;
+ if (__i > _S_max_iter)
+ std::__throw_runtime_error(__N("__chshint_cont_frac: "
+ "Continued fraction evaluation failed"));
+ ++__i;
+ }
+ __h *= std::polar(_Tp{1}, -__t);
+ _Chi = -__h.real();
+ _Shi = _S_pi_2 + __h.imag();
+
+ return;
+ }
+
+
+ /**
+ * @brief This function computes the hyperbolic cosine @f$ Chi(x) @f$
+ * and hyperbolic sine @f$ Shi(x) @f$ integrals
+ * by series summation for positive argument.
+ */
+ template<typename _Tp>
+ void
+ __chshint_series(_Tp __t, _Tp& _Chi, _Tp& _Shi)
+ {
+ constexpr auto _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_fp_min = __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_gamma_e = __gnu_cxx::__math_constants<_Tp>::__gamma_e;
+
+ // Evaluate Chi and Shi by series simultaneously.
+ _Tp _Csum(0), _Ssum(0);
+ if (__t * __t < _S_fp_min)
+ {
+ // Avoid underflow.
+ _Csum = _Tp{0};
+ _Ssum = __t;
+ }
+ else
+ {
+ // Evaluate Shi and Chi by series expansion.
+ _Tp __sum(0);
+ _Tp __fact(1);
+ auto __odd = true;
+ auto __k = 1;
+ while (true)
+ {
+ __fact *= __t / __k;
+ _Tp __term = __fact / __k;
+ __sum += __term;
+ _Tp __err = __term / std::abs(__sum);
+ if (__odd)
+ {
+ _Ssum = __sum;
+ __sum = _Csum;
+ }
+ else
+ {
+ _Csum = __sum;
+ __sum = _Ssum;
+ }
+ if (__err < _S_eps)
+ break;
+ __odd = !__odd;
+ ++__k;
+ if (__k > _S_max_iter)
+ std::__throw_runtime_error(__N("__chshint_series: "
+ "Series evaluation failed"));
+ }
+ }
+ _Chi = _S_gamma_e + std::log(__t) + _Csum;
+ _Shi = _Ssum;
+
+ return;
+ }
+
+
+ /**
+ * @brief This function returns the hyperbolic cosine @f$ Ci(x) @f$
+ * and hyperbolic sine @f$ Si(x) @f$ integrals as a pair.
+ *
+ * The hyperbolic cosine integral is defined by:
+ * @f[
+ * Chi(x) = \gamma_E + \log(x) + \int_0^x dt \frac{\cosh(t) - 1}{t}
+ * @f]
+ *
+ * The hyperbolic sine integral is defined by:
+ * @f[
+ * Shi(x) = \int_0^x dt \frac{\sinh(t)}{t}
+ * @f]
+ */
+ template<typename _Tp>
+ std::pair<_Tp, _Tp>
+ __chshint(_Tp __x, _Tp& _Chi, _Tp& _Shi)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__isnan(__x))
+ return std::make_pair(_S_NaN, _S_NaN);
+
+ auto __t = std::abs(__x);
+ if (__t == _Tp{0})
+ {
+ _Chi = -__gnu_cxx::__infinity<_Tp>();
+ _Shi = _Tp{0};
+ }
+ else if (__t > _Tp{2})
+ __chshint_cont_frac(__t, _Chi, _Shi);
+ else
+ __chshint_series(__t, _Chi, _Shi);
+
+ if (__x < _Tp{0})
+ _Shi = -_Shi;
+
+ return std::make_pair(_Chi, _Shi);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+}
+
+#endif // _GLIBCXX_BITS_SF_HYPINT_TCC
diff --git a/libstdc++-v3/include/bits/sf_jacobi.tcc b/libstdc++-v3/include/bits/sf_jacobi.tcc
new file mode 100644
index 00000000000..6c2fb2a5504
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_jacobi.tcc
@@ -0,0 +1,208 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_jacobi.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_JACOBI_TCC
+#define _GLIBCXX_BITS_SF_JACOBI_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Compute the Jacobi polynomial by recursion on @c n:
+ * @f[
+ * 2 n(\alpha + \beta + n) (\alpha + \beta + 2n - 2)
+ * P^{(\alpha, \beta)}_{n}(x)
+ * = (\alpha + \beta + 2n - 1)
+ * ((\alpha^2 - \beta^2)
+ * + x(\alpha + \beta + 2n - 2)(\alpha + \beta + 2n))
+ * P^{(\alpha, \beta)}_{n-1}(x)
+ * - 2 (\alpha + n - 1)(\beta + n - 1)(\alpha + \beta + 2n)
+ * P^{(\alpha, \beta)}_{n-2}(x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __poly_jacobi(unsigned int __n, _Tp __alpha, _Tp __beta, _Tp __x)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+ if (__isnan(__alpha) || __isnan(__beta) || __isnan(__x))
+ return _S_NaN;
+
+ auto _Pm2 = _Tp{1};
+ if (__n == 0)
+ return _Pm2;
+
+ auto __apb = __alpha + __beta;
+ auto __amb = __alpha - __beta;
+ auto _Pm1 = (__amb + (_Tp{2} + __apb) * __x) / _Tp{2};
+ if (__n == 1)
+ return _Pm1;
+
+ auto _Pm0 = _Tp{0};
+ auto __a2mb2 = __amb * __apb;
+ for (auto __k = 2; __k <= __n; ++__k )
+ {
+ auto __apbpk = __apb + _Tp(__k);
+ auto __apbp2k = __apbpk + _Tp(__k);
+ auto __apbp2km1 = __apbp2k - _Tp{1};
+ auto __apbp2km2 = __apbp2km1 - _Tp{1};
+ auto __d = _Tp{2} * __k * __apbpk * __apbp2km2;
+ auto __a = __apbp2km2 * __apbp2km1 * __apbp2k;
+ auto __b = __apbp2km1 * __a2mb2;
+ auto __c = _Tp{2} * (__alpha + _Tp(__k - 1))
+ * (__beta + _Tp(__k - 1)) * __apbp2k;
+ if (__d == _Tp{0})
+ std::__throw_runtime_error(__N("__poly_jacobi: "
+ "Failure in recursion"));
+ _Pm0 = ((__b + __a * __x) * _Pm1 - __c * _Pm2) / __d;
+ _Pm2 = _Pm1;
+ _Pm1 = _Pm0;
+ }
+ return _Pm0;
+ }
+/*
+
+ P^{(a,b)}_{k}(z) =
+
+ (a+b+2k-1)((a-b)(a+b) + z(a+b+2k-2)(a+b+2k))
+ -------------------------------------------- P^{(a,b)}_{k-1}(z)
+ 2 k(a+b+k)(a+b+2k-2)
+
+ 2(a+k-1)(b+k-1)(a+b+2k)
+ - ----------------------- P^{(a,b)}_{k-2}(z)
+ 2 k(a+b+k)(a+b+2k-2)
+
+*/
+
+ /**
+ * Return the radial polynomial @f$ R_n^m(\rho) @f$ for non-negative
+ * degree @f$ n @f$, order @f$ m <= n @f$, and real radial
+ * argument @f$ \rho @f$.
+ *
+ * The radial polynomials are defined by
+ * @f[
+ * R_n^m(\rho) = \sum_{k=0}^{\frac{n-m}{2}}
+ * \frac{(-1)^k(n-k)!}{k!(\frac{n+m}{2}-k)!(\frac{n-m}{2}-k)!}
+ * \rho^{n-2k}
+ * @f]
+ * for @f$ n - m @f$ even and identically 0 for @f$ n - m @f$ odd.
+ * The radial polynomials can be related to the Zernike polynomials:
+ * @f[
+ * Z_n^m(\rho,\phi) = R_n^m(\rho) \cos(m\phi)
+ * @f]
+ * @f[
+ * Z_n^{-m}(\rho,\phi) = R_n^m(\rho) \sin(m\phi)
+ * @f]
+ * for non-negative @f$ m, n @f$.
+ * @see zernike for details on the Zernike polynomials.
+ *
+ * @see Principals of Optics, 7th edition, Max Born and Emil Wolf,
+ * Cambridge University Press, 1999, pp 523-525 and 905-910.
+ *
+ * @tparam _Tp The real type of the radial coordinate
+ * @param __n The non-negative degree.
+ * @param __m The non-negative azimuthal order
+ * @param __rho The radial argument
+ */
+ template<typename _Tp>
+ _Tp
+ __poly_radial_jacobi(unsigned int __n, unsigned int __m, _Tp __rho)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+ if (__isnan(__rho))
+ return _S_NaN;
+
+ if (__m > __n)
+ std::__throw_range_error(__N("poly_radial_jacobi: order > degree"));
+ else if ((__n - __m) % 2 == 1)
+ return _Tp{0};
+ else
+ {
+ auto __k = (__n - __m) / 2;
+ return (__k % 2 == 0 ? +1 : -1) * std::pow(__rho, __m)
+ * __poly_jacobi(__k, _Tp(__m), _Tp{0},
+ _Tp{1} - _Tp{2} * __rho * __rho);
+ }
+ }
+
+ /**
+ * Return the Zernicke polynomial @f$ Z_n^m(\rho,\phi) @f$
+ * for non-negative integral degree @f$ n @f$, signed integral order
+ * @f$ m @f$, and real radial argument @f$ \rho @f$ and azimuthal angle
+ * @f$ \phi @f$.
+ *
+ * The even Zernicke polynomials are defined by:
+ * @f[
+ * Z_n^m(\rho,\phi) = R_n^m(\rho)\cos(m\phi)
+ * @f]
+ * and the odd Zernicke polynomials are defined by:
+ * @f[
+ * Z_n^{-m}(\rho,\phi) = R_n^m(\rho)\sin(m\phi)
+ * @f]
+ * for non-negative degree @f$ m @f$ and @f$ m <= n @f$
+ * and where @f$ R_n^m(\rho) @f$ is the radial polynomial
+ * (@see __poly_radial_jacobi).
+ *
+ * @see Principals of Optics, 7th edition, Max Born and Emil Wolf,
+ * Cambridge University Press, 1999, pp 523-525 and 905-910.
+ *
+ * @tparam _Tp The real type of the radial coordinate and azimuthal angle
+ * @param __n The non-negative integral degree.
+ * @param __m The integral azimuthal order
+ * @param __rho The radial coordinate
+ * @param __phi The azimuthal angle
+ */
+ template<typename _Tp>
+ __gnu_cxx::__promote_fp_t<_Tp>
+ __zernike(unsigned int __n, int __m, _Tp __rho, _Tp __phi)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+ if (__isnan(__rho) || __isnan(__phi))
+ return _S_NaN;
+ else
+ return __poly_radial_jacobi(__n, std::abs(__m), __rho)
+ * (__m >= 0 ? std::cos(__m * __phi) : std::sin(__m * __phi));
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_JACOBI_TCC
diff --git a/libstdc++-v3/include/bits/sf_laguerre.tcc b/libstdc++-v3/include/bits/sf_laguerre.tcc
new file mode 100644
index 00000000000..644c5907bd7
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_laguerre.tcc
@@ -0,0 +1,330 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_laguerre.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// Ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 13, pp. 509-510, Section 22 pp. 773-802
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+
+#ifndef _GLIBCXX_BITS_SF_LAGUERRE_TCC
+#define _GLIBCXX_BITS_SF_LAGUERRE_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This routine returns the associated Laguerre polynomial
+ * of order @f$ n @f$, degree @f$ \alpha > -1 @f$ for large n.
+ * Abramowitz & Stegun, 13.5.21
+ *
+ * @tparam _Tpa The type of the degree.
+ * @tparam _Tp The type of the parameter.
+ * @param __n The order of the Laguerre function.
+ * @param __alpha1 The degree of the Laguerre function.
+ * @param __x The argument of the Laguerre function.
+ * @return The value of the Laguerre function of order n,
+ * degree @f$ \alpha @f$, and argument x.
+ *
+ * This is from the GNU Scientific Library.
+ */
+ template<typename _Tpa, typename _Tp>
+ _Tp
+ __poly_laguerre_large_n(unsigned __n, _Tpa __alpha1, _Tp __x)
+ {
+ const _Tp __a = -_Tp(__n);
+ const _Tp __b = _Tp(__alpha1) + _Tp{1};
+ const _Tp __eta = _Tp{2} * __b - _Tp{4} * __a;
+ const _Tp __cos2th = __x / __eta;
+ const _Tp __sin2th = _Tp{1} - __cos2th;
+ const _Tp __th = std::acos(std::sqrt(__cos2th));
+ const _Tp __pre_h = __gnu_cxx::__math_constants<_Tp>::__pi_half
+ * __gnu_cxx::__math_constants<_Tp>::__pi_half
+ * __eta * __eta * __cos2th * __sin2th;
+
+ const _Tp __lg_b = __log_gamma(_Tp(__n) + __b);
+ const _Tp __lnfact = __log_gamma(_Tp(__n + 1));
+
+ _Tp __pre_term1 = _Tp{0.5L} * (_Tp{1} - __b)
+ * std::log(_Tp{0.25L} * __x * __eta);
+ _Tp __pre_term2 = _Tp{0.25L} * std::log(__pre_h);
+ _Tp __lnpre = __lg_b - __lnfact + _Tp{0.5L} * __x
+ + __pre_term1 - __pre_term2;
+ _Tp __ser_term1 = __sin_pi(__a);
+ _Tp __ser_term2 = std::sin(_Tp{0.25L} * __eta
+ * (_Tp{2} * __th
+ - std::sin(_Tp{2} * __th))
+ + __gnu_cxx::__math_constants<_Tp>::__pi_quarter);
+ _Tp __ser = __ser_term1 + __ser_term2;
+
+ return std::exp(__lnpre) * __ser;
+ }
+
+
+ /**
+ * @brief Evaluate the polynomial based on the confluent hypergeometric
+ * function in a safe way, with no restriction on the arguments.
+ *
+ * The associated Laguerre function is defined by
+ * @f[
+ * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
+ * _1F_1(-n; \alpha + 1; x)
+ * @f]
+ * where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
+ * @f$ _1F_1(a; c; x) @f$ is the confluent hypergeometric function.
+ *
+ * This function assumes x != 0.
+ *
+ * This is from the GNU Scientific Library.
+ *
+ * @tparam _Tpa The type of the degree.
+ * @tparam _Tp The type of the parameter.
+ * @param __n The order of the Laguerre function.
+ * @param __alpha1 The degree of the Laguerre function.
+ * @param __x The argument of the Laguerre function.
+ * @return The value of the Laguerre function of order n,
+ * degree @f$ \alpha @f$, and argument x.
+ */
+ template<typename _Tpa, typename _Tp>
+ _Tp
+ __poly_laguerre_hyperg(unsigned int __n, _Tpa __alpha1, _Tp __x)
+ {
+ const _Tp __b = _Tp(__alpha1) + _Tp{1};
+ const _Tp __mx = -__x;
+ const _Tp __tc_sgn = (__x < _Tp{0} ? _Tp{1}
+ : ((__n % 2 == 1) ? -_Tp{1} : _Tp{1}));
+ // Get |x|^n/n!
+ _Tp __tc = _Tp{1};
+ const _Tp __ax = std::abs(__x);
+ for (unsigned int __k = 1; __k <= __n; ++__k)
+ __tc *= (__ax / __k);
+
+ _Tp __term = __tc * __tc_sgn;
+ _Tp __sum = __term;
+ for (int __k = int(__n) - 1; __k >= 0; --__k)
+ {
+ __term *= ((__b + _Tp(__k)) / _Tp{int(__n) - __k})
+ * _Tp(__k + 1) / __mx;
+ __sum += __term;
+ }
+
+ return __sum;
+ }
+
+
+ /**
+ * @brief This routine returns the associated Laguerre polynomial
+ * of order @c n, degree @c @f$ \alpha @f$: @f$ L_n^\alpha(x) @f$
+ * by recursion.
+ *
+ * The associated Laguerre function is defined by
+ * @f[
+ * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
+ * _1F_1(-n; \alpha + 1; x)
+ * @f]
+ * where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
+ * @f$ _1F_1(a; c; x) @f$ is the confluent hypergeometric function.
+ *
+ * The associated Laguerre polynomial is defined for integral
+ * @f$ \alpha = m @f$ by:
+ * @f[
+ * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * @f]
+ * where the Laguerre polynomial is defined by:
+ * @f[
+ * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
+ * @f]
+ *
+ * @tparam _Tpa The type of the degree.
+ * @tparam _Tp The type of the parameter.
+ * @param __n The order of the Laguerre function.
+ * @param __alpha1 The degree of the Laguerre function.
+ * @param __x The argument of the Laguerre function.
+ * @return The value of the Laguerre function of order n,
+ * degree @f$ \alpha @f$, and argument x.
+ */
+ template<typename _Tpa, typename _Tp>
+ _Tp
+ __poly_laguerre_recursion(unsigned int __n, _Tpa __alpha1, _Tp __x)
+ {
+ // Compute l_0.
+ _Tp __l_0 = _Tp{1};
+ if (__n == 0)
+ return __l_0;
+
+ // Compute l_1^alpha.
+ _Tp __l_1 = -__x + _Tp{1} + _Tp(__alpha1);
+ if (__n == 1)
+ return __l_1;
+
+ // Compute l_n^alpha by recursion on n.
+ _Tp __l_n2 = __l_0;
+ _Tp __l_n1 = __l_1;
+ _Tp __l_n = _Tp{0};
+ for (unsigned int __nn = 2; __nn <= __n; ++__nn)
+ {
+ __l_n = (_Tp(2 * __nn - 1) + _Tp(__alpha1) - __x)
+ * __l_n1 / _Tp(__nn)
+ - (_Tp(__nn - 1) + _Tp(__alpha1)) * __l_n2 / _Tp(__nn);
+ __l_n2 = __l_n1;
+ __l_n1 = __l_n;
+ }
+
+ return __l_n;
+ }
+
+
+ /**
+ * @brief This routine returns the associated Laguerre polynomial
+ * of order n, degree @f$ \alpha @f$: @f$ L_n^alpha(x) @f$.
+ *
+ * The associated Laguerre function is defined by
+ * @f[
+ * L_n^\alpha(x) = \frac{(\alpha + 1)_n}{n!}
+ * _1F_1(-n; \alpha + 1; x)
+ * @f]
+ * where @f$ (\alpha)_n @f$ is the Pochhammer symbol and
+ * @f$ _1F_1(a; c; x) @f$ is the confluent hypergeometric function.
+ *
+ * The associated Laguerre polynomial is defined for integral
+ * @f$ \alpha = m @f$ by:
+ * @f[
+ * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * @f]
+ * where the Laguerre polynomial is defined by:
+ * @f[
+ * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
+ * @f]
+ *
+ * @tparam _Tpa The type of the degree.
+ * @tparam _Tp The type of the parameter.
+ * @param __n The order of the Laguerre function.
+ * @param __alpha1 The degree of the Laguerre function.
+ * @param __x The argument of the Laguerre function.
+ * @return The value of the Laguerre function of order n,
+ * degree @f$ \alpha @f$, and argument x.
+ */
+ template<typename _Tpa, typename _Tp>
+ _Tp
+ __poly_laguerre(unsigned int __n, _Tpa __alpha1, _Tp __x)
+ {
+ const unsigned int __max_iter = 10000000;
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__poly_laguerre: negative argument"));
+ // Return NaN on NaN input.
+ else if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__n == 0)
+ return _Tp{1};
+ else if (__n == 1)
+ return _Tp{1} + _Tp(__alpha1) - __x;
+ else if (__x == _Tp{0})
+ {
+ _Tp __prod = _Tp(__alpha1) + _Tp{1};
+ for (unsigned int __k = 2; __k <= __n; ++__k)
+ __prod *= (_Tp(__alpha1) + _Tp(__k)) / _Tp(__k);
+ return __prod;
+ }
+ else if (__n > __max_iter && _Tp(__alpha1) > -_Tp{1}
+ && __x < _Tp{2} * (_Tp(__alpha1) + _Tp{1}) + _Tp(4 * __n))
+ return __poly_laguerre_large_n(__n, __alpha1, __x);
+ else if (_Tp(__alpha1) >= _Tp{0}
+ || (__x > _Tp{0} && _Tp(__alpha1) < -_Tp(__n + 1)))
+ return __poly_laguerre_recursion(__n, __alpha1, __x);
+ else
+ return __poly_laguerre_hyperg(__n, __alpha1, __x);
+ }
+
+
+ /**
+ * @brief This routine returns the associated Laguerre polynomial
+ * of order n, degree m: @f$ L_n^m(x) @f$.
+ *
+ * The associated Laguerre polynomial is defined for integral
+ * @f$ \alpha = m @f$ by:
+ * @f[
+ * L_n^m(x) = (-1)^m \frac{d^m}{dx^m} L_{n + m}(x)
+ * @f]
+ * where the Laguerre polynomial is defined by:
+ * @f[
+ * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
+ * @f]
+ *
+ * @tparam _Tp The type of the parameter
+ * @param __n The order
+ * @param __m The degree
+ * @param __x The argument
+ * @return The value of the associated Laguerre polynomial of order n,
+ * degree m, and argument x.
+ */
+ template<typename _Tp>
+ _Tp
+ __assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x)
+ { return __poly_laguerre<unsigned int, _Tp>(__n, __m, __x); }
+
+
+ /**
+ * @brief This routine returns the Laguerre polynomial
+ * of order n: @f$ L_n(x) @f$.
+ *
+ * The Laguerre polynomial is defined by:
+ * @f[
+ * L_n(x) = \frac{e^x}{n!} \frac{d^n}{dx^n} (x^ne^{-x})
+ * @f]
+ *
+ * @param __n The order of the Laguerre polynomial.
+ * @param __x The argument of the Laguerre polynomial.
+ * @return The value of the Laguerre polynomial of order n
+ * and argument x.
+ */
+ template<typename _Tp>
+ _Tp
+ __laguerre(unsigned int __n, _Tp __x)
+ { return __poly_laguerre<unsigned int, _Tp>(__n, 0, __x); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_LAGUERRE_TCC
diff --git a/libstdc++-v3/include/bits/sf_legendre.tcc b/libstdc++-v3/include/bits/sf_legendre.tcc
new file mode 100644
index 00000000000..fc35bec5851
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_legendre.tcc
@@ -0,0 +1,367 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_legendre.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 8, pp. 331-341
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 252-254
+
+#ifndef _GLIBCXX_BITS_SF_LEGENDRE_TCC
+#define _GLIBCXX_BITS_SF_LEGENDRE_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief Return the Legendre polynomial by upward recursion
+ * on order @f$ l @f$.
+ *
+ * The Legendre function of order @f$ l @f$ and argument @f$ x @f$,
+ * @f$ P_l(x) @f$, is defined by:
+ * @f[
+ * P_l(x) = \frac{1}{2^l l!}\frac{d^l}{dx^l}(x^2 - 1)^{l}
+ * @f]
+ *
+ * @param __l The order of the Legendre polynomial. @f$l >= 0@f$.
+ * @param __x The argument of the Legendre polynomial. @f$|x| <= 1@f$.
+ */
+ template<typename _Tp>
+ _Tp
+ __poly_legendre_p(unsigned int __l, _Tp __x)
+ {
+ if ((__x < -_Tp{1}) || (__x > +_Tp{1}))
+ std::__throw_domain_error(__N("__poly_legendre_p: argument out of range"));
+ else if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x == +_Tp{1})
+ return +_Tp{1};
+ else if (__x == -_Tp{1})
+ return (__l % 2 == 1 ? -_Tp{1} : +_Tp{1});
+ else
+ {
+ auto _P_lm2 = _Tp{1};
+ if (__l == 0)
+ return _P_lm2;
+
+ auto _P_lm1 = __x;
+ if (__l == 1)
+ return _P_lm1;
+
+ auto _P_l = _Tp{0};
+ for (unsigned int __ll = 2; __ll <= __l; ++__ll)
+ {
+ // This arrangement is supposed to be better for roundoff
+ // protection, Arfken, 2nd Ed, Eq 12.17a.
+ _P_l = _Tp{2} * __x * _P_lm1 - _P_lm2
+ - (__x * _P_lm1 - _P_lm2) / _Tp(__ll);
+ _P_lm2 = _P_lm1;
+ _P_lm1 = _P_l;
+ }
+
+ return _P_l;
+ }
+ }
+
+ /**
+ * @brief Return the Legendre function of the second kind
+ * by upward recursion on order @f$ l @f$.
+ *
+ * The Legendre function of the second kind of order @f$ l @f$
+ * and argument @f$ x @f$, @f$ Q_l(x) @f$, is defined by:
+ * @f[
+ * Q_l(x) = \frac{1}{2^l l!}\frac{d^l}{dx^l}(x^2 - 1)^{l}
+ * @f]
+ *
+ * @param __l The order of the Legendre function. @f$l >= 0@f$.
+ * @param __x The argument of the Legendre function. @f$|x| <= 1@f$.
+ */
+ template<typename _Tp>
+ _Tp
+ __legendre_q(unsigned int __l, _Tp __x)
+ {
+ if ((__x < -_Tp{1}) || (__x > +_Tp{1}))
+ std::__throw_domain_error(__N("__legendre_q: argument out of range"));
+ else if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x == +_Tp{1})
+ return +_Tp{1};
+ else if (__x == -_Tp{1})
+ return (__l % 2 == 1 ? -_Tp{1} : +_Tp{1});
+ else
+ {
+ auto _Q_lm2 = _Tp{0.5L} * std::log((_Tp{1} + __x) / (_Tp{1} - __x));
+ if (__l == 0)
+ return _Q_lm2;
+ auto _Q_lm1 = __x * _Q_lm2 - _Tp{1};
+ if (__l == 1)
+ return _Q_lm1;
+ auto _Q_l = _Tp{0};
+ for (unsigned int __ll = 2; __ll <= __l; ++__ll)
+ {
+ // This arrangement is supposed to be better for roundoff
+ // protection, Arfken, 2nd Ed, Eq 12.17a.
+ _Q_l = _Tp{2} * __x * _Q_lm1 - _Q_lm2
+ - (__x * _Q_lm1 - _Q_lm2) / _Tp(__ll);
+ _Q_lm2 = _Q_lm1;
+ _Q_lm1 = _Q_l;
+ }
+
+ return _Q_l;
+ }
+ }
+
+ /**
+ * @brief Return the associated Legendre function by recursion
+ * on @f$ l @f$ and downward recursion on m.
+ *
+ * The associated Legendre function is derived from the Legendre function
+ * @f$ P_l(x) @f$ by the Rodrigues formula:
+ * @f[
+ * P_l^m(x) = (1 - x^2)^{m/2}\frac{d^m}{dx^m}P_l(x)
+ * @f]
+ *
+ * @param __l The order of the associated Legendre function.
+ * @f$ l >= 0 @f$.
+ * @param __m The order of the associated Legendre function.
+ * @f$ m <= l @f$.
+ * @param __x The argument of the associated Legendre function.
+ * @f$ |x| <= 1 @f$.
+ */
+ template<typename _Tp>
+ _Tp
+ __assoc_legendre_p(unsigned int __l, unsigned int __m, _Tp __x)
+ {
+ if (__x < -_Tp{1} || __x > +_Tp{1})
+ std::__throw_domain_error(__N("__assoc_legendre_p: "
+ "argument out of range"));
+ else if (__m > __l)
+ std::__throw_domain_error(__N("__assoc_legendre_p: "
+ "degree out of range"));
+ else if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__m == 0)
+ return __poly_legendre_p(__l, __x);
+ else
+ {
+ _Tp _P_mm = _Tp{1};
+ if (__m > 0)
+ {
+ // Two square roots seem more accurate more of the time
+ // than just one.
+ _Tp __root = std::sqrt(_Tp{1} - __x) * std::sqrt(_Tp{1} + __x);
+ _Tp __fact = _Tp{1};
+ for (unsigned int __i = 1; __i <= __m; ++__i)
+ {
+ _P_mm *= -__fact * __root;
+ __fact += _Tp{2};
+ }
+ }
+ if (__l == __m)
+ return _P_mm;
+
+ _Tp _P_mp1m = _Tp(2 * __m + 1) * __x * _P_mm;
+ if (__l == __m + 1)
+ return _P_mp1m;
+
+ _Tp _P_lm2m = _P_mm;
+ _Tp _P_lm1m = _P_mp1m;
+ _Tp _P_lm = _Tp{0};
+ for (unsigned int __j = __m + 2; __j <= __l; ++__j)
+ {
+ _P_lm = (_Tp(2 * __j - 1) * __x * _P_lm1m
+ - _Tp(__j + __m - 1) * _P_lm2m) / _Tp(__j - __m);
+ _P_lm2m = _P_lm1m;
+ _P_lm1m = _P_lm;
+ }
+
+ return _P_lm;
+ }
+ }
+
+
+ /**
+ * @brief Return the spherical associated Legendre function.
+ *
+ * The spherical associated Legendre function of @f$ l @f$, @f$ m @f$,
+ * and @f$ \theta @f$ is defined as @f$ Y_l^m(\theta,0) @f$ where
+ * @f[
+ * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
+ * \frac{(l-m)!}{(l+m)!}]
+ * P_l^m(\cos\theta) \exp^{im\phi}
+ * @f]
+ * is the spherical harmonic function and @f$ P_l^m(x) @f$ is the
+ * associated Legendre function.
+ *
+ * This function differs from the associated Legendre function by
+ * argument (@f$x = \cos(\theta)@f$) and by a normalization factor
+ * but this factor is rather large for large @f$ l @f$ and @f$ m @f$
+ * and so this function is stable for larger differences of @f$ l @f$
+ * and @f$ m @f$.
+ *
+ * @param __l The order of the spherical associated Legendre function.
+ * @f$ l >= 0 @f$.
+ * @param __m The order of the spherical associated Legendre function.
+ * @f$ m <= l @f$.
+ * @param __theta The radian polar angle argument
+ * of the spherical associated Legendre function.
+ */
+ template<typename _Tp>
+ _Tp
+ __sph_legendre(unsigned int __l, unsigned int __m, _Tp __theta)
+ {
+ if (__isnan(__theta))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+
+ const auto __x = std::cos(__theta);
+
+ if (__l < __m)
+ std::__throw_domain_error(__N("__sph_legendre: bad argument"));
+ else if (__m == 0)
+ {
+ _Tp _P_l = __poly_legendre_p(__l, __x);
+ _Tp __fact = std::sqrt(_Tp(2 * __l + 1)
+ / (_Tp{4} * __gnu_cxx::__math_constants<_Tp>::__pi));
+ _P_l *= __fact;
+ return _P_l;
+ }
+ else if (__x == _Tp{1} || __x == -_Tp{1})
+ return _Tp{0}; // m > 0 here
+ else
+ {
+ // m > 0 and |x| < 1 here
+
+ // Starting value for recursion.
+ // Y_m^m(x) = sqrt( (2m+1)/(4pi m) gamma(m+1/2)/gamma(m) )
+ // (-1)^m (1-x^2)^(m/2) / pi^(1/4)
+ const auto __sgn = (__m % 2 == 1 ? -_Tp{1} : _Tp{1});
+ const auto _Y_mp1m_factor = __x * std::sqrt(_Tp(2 * __m + 3));
+ const auto __lncirc = std::log1p(-__x * __x);
+ // Gamma(m+1/2) / Gamma(m)
+ const auto __lnpoch = __log_gamma(_Tp(__m + 0.5L))
+ - __log_gamma(_Tp(__m));
+ const auto __lnpre_val =
+ -_Tp{0.25L} * __gnu_cxx::__math_constants<_Tp>::__ln_pi
+ + _Tp{0.5L} * (__lnpoch + __m * __lncirc);
+ _Tp __sr = std::sqrt((_Tp{2} + _Tp{1} / __m)
+ / (_Tp{4} * __gnu_cxx::__math_constants<_Tp>::__pi));
+ _Tp _Y_mm = __sgn * __sr * std::exp(__lnpre_val);
+ _Tp _Y_mp1m = _Y_mp1m_factor * _Y_mm;
+
+ if (__l == __m)
+ {
+ return _Y_mm;
+ }
+ else if (__l == __m + 1)
+ {
+ return _Y_mp1m;
+ }
+ else
+ {
+ _Tp _Y_lm = _Tp{0};
+
+ // Compute Y_l^m, l > m+1, upward recursion on l.
+ for ( int __ll = __m + 2; __ll <= __l; ++__ll)
+ {
+ const auto __rat1 = _Tp(__ll - __m) / _Tp(__ll + __m);
+ const auto __rat2 = _Tp(__ll - __m - 1) / _Tp(__ll + __m - 1);
+ const auto __fact1 = std::sqrt(__rat1 * _Tp(2 * __ll + 1)
+ * _Tp(2 * __ll - 1));
+ const auto __fact2 = std::sqrt(__rat1 * __rat2
+ * _Tp(2 * __ll + 1)
+ / _Tp(2 * __ll - 3));
+ _Y_lm = (__x * _Y_mp1m * __fact1
+ - _Tp(__ll + __m - 1) * _Y_mm * __fact2)
+ / _Tp(__ll - __m);
+ _Y_mm = _Y_mp1m;
+ _Y_mp1m = _Y_lm;
+ }
+
+ return _Y_lm;
+ }
+ }
+ }
+
+
+ /**
+ * @brief Return the spherical harmonic function.
+ *
+ * The spherical harmonic function of @f$ l @f$, @f$ m @f$,
+ * and @f$ \theta @f$, @f$ \phi @f$ is defined by:
+ * @f[
+ * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
+ * \frac{(l-m)!}{(l+m)!}]
+ * P_l^{|m|}(\cos\theta) \exp^{im\phi}
+ * @f]
+ *
+ * @param __l The order of the spherical harmonic function.
+ * @f$ l >= 0 @f$.
+ * @param __m The order of the spherical harmonic function.
+ * @f$ m <= l @f$.
+ * @param __theta The radian polar angle argument
+ * of the spherical harmonic function.
+ * @param __phi The radian azimuthal angle argument
+ * of the spherical harmonic function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sph_harmonic(unsigned int __l, int __m, _Tp __theta, _Tp __phi)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__isnan(__theta) || __isnan(__phi))
+ return std::complex<_Tp>{_S_NaN, _S_NaN};
+
+ return __sph_legendre(__l, std::abs(__m), __theta)
+ * std::polar(_Tp{1}, _Tp(__m) * __phi);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_LEGENDRE_TCC
diff --git a/libstdc++-v3/include/bits/sf_mod_bessel.tcc b/libstdc++-v3/include/bits/sf_mod_bessel.tcc
new file mode 100644
index 00000000000..a781949312f
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_mod_bessel.tcc
@@ -0,0 +1,602 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_mod_bessel.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland.
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// Ed. Milton Abramowitz and Irene A. Stegun,
+// Dover Publications,
+// Section 9, pp. 355-434, Section 10 pp. 435-478
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Numerical Recipes in C, by W. H. Press, S. A. Teukolsky,
+// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
+// 2nd ed, pp. 246-249.
+
+#ifndef _GLIBCXX_BITS_SF_MOD_BESSEL_TCC
+#define _GLIBCXX_BITS_SF_MOD_BESSEL_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <utility> // For exchange
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @brief This routine computes the asymptotic modified cylindrical
+ * Bessel and functions of order nu: @f$ I_{\nu}(x) @f$,
+ * @f$ N_{\nu}(x) @f$. Use this for @f$ x >> nu^2 + 1 @f$.
+ *
+ * References:
+ * (1) Handbook of Mathematical Functions,
+ * ed. Milton Abramowitz and Irene A. Stegun,
+ * Dover Publications,
+ * Section 9 p. 364, Equations 9.2.5-9.2.10
+ *
+ * @param __nu The order of the Bessel functions.
+ * @param __x The argument of the Bessel functions.
+ * @param _Inu The output regular modified Bessel function.
+ * @param _Knu The output irregular modified Bessel function.
+ * @param _Ipnu The output derivative of the regular
+ * modified Bessel function.
+ * @param _Kpnu The output derivative of the irregular
+ * modified Bessel function.
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_ik_asymp(_Tp __nu, _Tp __x,
+ _Tp & _Inu, _Tp & _Knu,
+ _Tp & _Ipnu, _Tp & _Kpnu)
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<long double>::__pi_half;
+ const auto __2nu = _Tp{2} * __nu;
+ const auto __4nu2 = __2nu * __2nu;
+ const auto __8x = _Tp{8} * __x;
+ auto __k = 0;
+ auto __bk_xk = _Tp{1};
+ auto _Rsum = __bk_xk;
+ auto __ak_xk = _Tp{1};
+ auto _Psum = __ak_xk;
+ ++__k;
+ auto __2km1 = 1;
+ __bk_xk *= (__4nu2 + __2km1 * (__2km1 + 2)) / __8x;
+ auto _Ssum = __bk_xk;
+ __ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / __8x;
+ auto _Qsum = __ak_xk;
+ do
+ {
+ ++__k;
+ __2km1 += 2;
+ __bk_xk = (__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
+ _Rsum += __bk_xk;
+ __ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ _Psum += __ak_xk;
+ auto __convP = std::abs(__ak_xk) < _S_eps * std::abs(_Psum);
+
+ ++__k;
+ __2km1 += 2;
+ __bk_xk = (__4nu2 + __2km1 * (__2km1 + 2)) * __ak_xk / (__k * __8x);
+ _Ssum += __bk_xk;
+ __ak_xk *= (__2nu - __2km1) * (__2nu + __2km1) / (__k * __8x);
+ _Qsum += __ak_xk;
+ auto __convQ = std::abs(__ak_xk) < _S_eps * std::abs(_Qsum);
+
+ if (__convP && __convQ && __k > (__nu / _Tp{2}))
+ break;
+ }
+ while (__k < _Tp{100} * __nu);
+
+ auto __coef = std::sqrt(_Tp{1} / (_Tp{2} * _S_pi * __x));
+ _Inu = __coef * std::exp(__x) * (_Psum - _Qsum);
+ _Knu = _S_pi * __coef * std::exp(-__x) * (_Psum + _Qsum);
+ _Ipnu = __coef * std::exp(__x) * (_Rsum - _Ssum);
+ _Kpnu = -_S_pi * __coef * std::exp(-__x) * (_Rsum + _Ssum);
+
+ return;
+ }
+
+ /**
+ * @brief Compute the modified Bessel functions @f$ I_\nu(x) @f$ and
+ * @f$ K_\nu(x) @f$ and their first derivatives
+ * @f$ I'_\nu(x) @f$ and @f$ K'_\nu(x) @f$ respectively.
+ * These four functions are computed together for numerical
+ * stability.
+ *
+ * @param __nu The order of the Bessel functions.
+ * @param __x The argument of the Bessel functions.
+ * @param _Inu The output regular modified Bessel function.
+ * @param _Knu The output irregular modified Bessel function.
+ * @param _Ipnu The output derivative of the regular
+ * modified Bessel function.
+ * @param _Kpnu The output derivative of the irregular
+ * modified Bessel function.
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_ik_steed(_Tp __nu, _Tp __x,
+ _Tp & _Inu, _Tp & _Knu, _Tp & _Ipnu, _Tp & _Kpnu)
+ {
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Tp>();
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_fp_min = _Tp{10} * _S_eps;
+ constexpr int _S_max_iter = 15000;
+ constexpr auto _S_x_min = _Tp{2};
+
+ const int __n = std::nearbyint(__nu);
+
+ const auto __mu = __nu - _Tp(__n);
+ const auto __mu2 = __mu * __mu;
+ const auto __xi = _Tp{1} / __x;
+ const auto __xi2 = _Tp{2} * __xi;
+ auto __h = __nu * __xi;
+ if (__h < _S_fp_min)
+ __h = _S_fp_min;
+ auto __b = __xi2 * __nu;
+ auto __d = _Tp{0};
+ auto __c = __h;
+ int __i;
+ for (__i = 1; __i <= _S_max_iter; ++__i)
+ {
+ __b += __xi2;
+ __d = _Tp{1} / (__b + __d);
+ __c = __b + _Tp{1} / __c;
+ const auto __del = __c * __d;
+ __h *= __del;
+ if (std::abs(__del - _Tp{1}) < _S_eps)
+ break;
+ }
+ if (__i > _S_max_iter)
+ {
+ // Don't throw with message "try asymptotic expansion" - Just do it!
+ __cyl_bessel_ik_asymp(__nu, __x, _Inu, _Knu, _Ipnu, _Kpnu);
+ return;
+ }
+
+ auto _Inul = _S_fp_min;
+ auto _Ipnul = __h * _Inul;
+ auto _Inul1 = _Inul;
+ auto _Ipnu1 = _Ipnul;
+ auto __fact = __nu * __xi;
+ for (int __l = __n; __l >= 1; --__l)
+ {
+ const auto _Inutemp = __fact * _Inul + _Ipnul;
+ __fact -= __xi;
+ _Ipnul = __fact * _Inutemp + _Inul;
+ _Inul = _Inutemp;
+ }
+
+ auto __f = _Ipnul / _Inul;
+ _Tp _Kmu, _Knu1;
+ if (__x < _S_x_min)
+ {
+ const auto __x2 = __x / _Tp{2};
+ const auto __pimu = _S_pi * __mu;
+ const auto __fact = (std::abs(__pimu) < _S_eps
+ ? _Tp{1}
+ : __pimu / std::sin(__pimu));
+ auto __d = -std::log(__x2);
+ auto __e = __mu * __d;
+ const auto __fact2 = (std::abs(__e) < _S_eps
+ ? _Tp{1}
+ : std::sinh(__e) / __e);
+ _Tp __gam1, __gam2, __gampl, __gammi;
+ __gamma_temme(__mu, __gam1, __gam2, __gampl, __gammi);
+ auto __ff = __fact
+ * (__gam1 * std::cosh(__e) + __gam2 * __fact2 * __d);
+ auto __sum = __ff;
+ __e = std::exp(__e);
+ auto __p = __e / (_Tp{2} * __gampl);
+ auto __q = _Tp{1} / (_Tp{2} * __e * __gammi);
+ auto __c = _Tp{1};
+ __d = __x2 * __x2;
+ auto __sum1 = __p;
+ int __i;
+ for (__i = 1; __i <= _S_max_iter; ++__i)
+ {
+ __ff = (__i * __ff + __p + __q) / (__i * __i - __mu2);
+ __c *= __d / _Tp(__i);
+ __p /= _Tp(__i) - __mu;
+ __q /= _Tp(__i) + __mu;
+ const auto __del = __c * __ff;
+ __sum += __del;
+ const auto __del1 = __c * (__p - _Tp(__i) * __ff);
+ __sum1 += __del1;
+ if (std::abs(__del) < _S_eps * std::abs(__sum))
+ break;
+ }
+ if (__i > _S_max_iter)
+ std::__throw_runtime_error(__N("__cyl_bessel_ik_steed: "
+ "K-series failed to converge"));
+ _Kmu = __sum;
+ _Knu1 = __sum1 * __xi2;
+ }
+ else
+ {
+ auto __b = _Tp{2} * (_Tp{1} + __x);
+ auto __d = _Tp{1} / __b;
+ auto __delh = __d;
+ auto __h = __delh;
+ auto __q1 = _Tp{0};
+ auto __q2 = _Tp{1};
+ auto __a1 = _Tp{0.25L} - __mu2;
+ auto __q = __c = __a1;
+ auto __a = -__a1;
+ auto __s = _Tp{1} + __q * __delh;
+ int __i;
+ for (__i = 2; __i <= _S_max_iter; ++__i)
+ {
+ __a -= _Tp{2 * (__i - 1)};
+ __c = -__a * __c / __i;
+ const auto __qnew = (__q1 - __b * __q2) / __a;
+ __q1 = __q2;
+ __q2 = __qnew;
+ __q += __c * __qnew;
+ __b += _Tp{2};
+ __d = _Tp{1} / (__b + __a * __d);
+ __delh = (__b * __d - _Tp{1}) * __delh;
+ __h += __delh;
+ const auto __dels = __q * __delh;
+ __s += __dels;
+ if (std::abs(__dels / __s) < _S_eps)
+ break;
+ }
+ if (__i > _S_max_iter)
+ std::__throw_runtime_error(__N("__cyl_bessel_ik_steed: "
+ "Steed's method failed"));
+ __h = __a1 * __h;
+ _Kmu = std::sqrt(_S_pi / (_Tp{2} * __x))
+ * std::exp(-__x) / __s;
+ _Knu1 = _Kmu * (__mu + __x + _Tp{0.5L} - __h) * __xi;
+ }
+
+ auto _Kpmu = __mu * __xi * _Kmu - _Knu1;
+ auto _Inumu = __xi / (__f * _Kmu - _Kpmu);
+ _Inu = _Inumu * _Inul1 / _Inul;
+ _Ipnu = _Inumu * _Ipnu1 / _Inul;
+ for (int __i = 1; __i <= __n; ++__i)
+ _Kmu = std::exchange(_Knu1, (__mu + _Tp(__i)) * __xi2 * _Knu1 + _Kmu);
+ _Knu = _Kmu;
+ _Kpnu = __nu * __xi * _Kmu - _Knu1;
+
+ return;
+ }
+
+ /**
+ * @brief Return the modified cylindrical Bessel functions
+ * and their derivatives of order @f$ \nu @f$ by various means.
+ *
+ * @param __nu The order of the Bessel functions.
+ * @param __x The argument of the Bessel functions.
+ * @param _Inu The output regular modified Bessel function.
+ * @param _Knu The output irregular modified Bessel function.
+ * @param _Ipnu The output derivative of the regular
+ * modified Bessel function.
+ * @param _Kpnu The output derivative of the irregular
+ * modified Bessel function.
+ */
+ template<typename _Tp>
+ void
+ __cyl_bessel_ik(_Tp __nu, _Tp __x,
+ _Tp & _Inu, _Tp & _Knu, _Tp & _Ipnu, _Tp & _Kpnu)
+ {
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (__nu < _Tp{0})
+ {
+ _Tp _I_mnu, _K_mnu, _Ip_mnu, _Kp_mnu;
+ __cyl_bessel_ik(-__nu, __x, _I_mnu, _K_mnu, _Ip_mnu, _Kp_mnu);
+ auto __arg = -__nu * _S_pi;
+ auto __sinnupi = std::sin(__arg);
+ if (std::abs(__sinnupi) < _S_eps)
+ { // Carefully preserve +-inf.
+ _Inu = _I_mnu;
+ _Knu = _K_mnu;
+ _Ipnu = _Ip_mnu;
+ _Kpnu = _Kp_mnu;
+ }
+ else
+ {
+ _Inu = _I_mnu + _Tp{2} * __sinnupi * _K_mnu / _S_pi;
+ _Knu = _K_mnu;
+ _Ipnu = _Ip_mnu + _Tp{2} * __sinnupi * _Kp_mnu / _S_pi;
+ _Kpnu = _Kp_mnu;
+ }
+ }
+ else if (__x == _Tp{0})
+ {
+ if (__nu == _Tp{0})
+ {
+ _Inu = _Tp{1};
+ _Ipnu = _Tp{0};
+ }
+ else if (__nu == _Tp{1})
+ {
+ _Inu = _Tp{0};
+ _Ipnu = _Tp{0.5L};
+ }
+ else
+ {
+ _Inu = _Tp{0};
+ _Ipnu = _Tp{0};
+ }
+ _Knu = _S_inf;
+ _Kpnu = -_S_inf;
+ return;
+ }
+ else if (__x > _Tp{1000})
+ __cyl_bessel_ik_asymp(__nu, __x, _Inu, _Knu, _Ipnu, _Kpnu);
+ else
+ __cyl_bessel_ik_steed(__nu, __x, _Inu, _Knu, _Ipnu, _Kpnu);
+ }
+
+ /**
+ * @brief Return the regular modified Bessel function of order
+ * @f$ \nu @f$: @f$ I_{\nu}(x) @f$.
+ *
+ * The regular modified cylindrical Bessel function is:
+ * @f[
+ * I_{\nu}(x) = \sum_{k=0}^{\infty}
+ * \frac{(x/2)^{\nu + 2k}}{k!\Gamma(\nu+k+1)}
+ * @f]
+ *
+ * @param __nu The order of the regular modified Bessel function.
+ * @param __x The argument of the regular modified Bessel function.
+ * @return The output regular modified Bessel function.
+ */
+ template<typename _Tp>
+ _Tp
+ __cyl_bessel_i(_Tp __nu, _Tp __x)
+ {
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__cyl_bessel_i: bad argument"));
+ else if (__isnan(__nu) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__nu >= _Tp{0} && __x * __x < _Tp{10} * (__nu + _Tp{1}))
+ return __cyl_bessel_ij_series(__nu, __x, +_Tp{1}, 200);
+ else
+ {
+ _Tp _I_nu, _K_nu, _Ip_nu, _Kp_nu;
+ __cyl_bessel_ik(__nu, __x, _I_nu, _K_nu, _Ip_nu, _Kp_nu);
+ return _I_nu;
+ }
+ }
+
+ /**
+ * @brief Return the irregular modified Bessel function
+ * @f$ K_{\nu}(x) @f$ of order @f$ \nu @f$.
+ *
+ * The irregular modified Bessel function is defined by:
+ * @f[
+ * K_{\nu}(x) = \frac{\pi}{2}
+ * \frac{I_{-\nu}(x) - I_{\nu}(x)}{\sin \nu\pi}
+ * @f]
+ * where for integral @f$ \nu = n @f$ a limit is taken:
+ * @f$ lim_{\nu \to n} @f$.
+ * For negative argument we have simply:
+ * @f[
+ * K_{-\nu}(x) = K_{\nu}(x)
+ * @f]
+ *
+ * @param __nu The order of the irregular modified Bessel function.
+ * @param __x The argument of the irregular modified Bessel function.
+ * @return The output irregular modified Bessel function.
+ */
+ template<typename _Tp>
+ _Tp
+ __cyl_bessel_k(_Tp __nu, _Tp __x)
+ {
+ if (__x < _Tp{0})
+ std::__throw_domain_error(__N("__cyl_bessel_k: Bad argument"));
+ else if (__isnan(__nu) || __isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else
+ {
+ _Tp _I_nu, _K_nu, _Ip_nu, _Kp_nu;
+ __cyl_bessel_ik(__nu, __x, _I_nu, _K_nu, _Ip_nu, _Kp_nu);
+ return _K_nu;
+ }
+ }
+
+ /**
+ * @brief Compute the spherical modified Bessel functions
+ * @f$ i_n(x) @f$ and @f$ k_n(x) @f$ and their first
+ * derivatives @f$ i'_n(x) @f$ and @f$ k'_n(x) @f$
+ * respectively.
+ *
+ * @param __n The order of the modified spherical Bessel function.
+ * @param __x The argument of the modified spherical Bessel function.
+ * @param __i_n The output regular modified spherical Bessel function.
+ * @param __k_n The output irregular modified spherical
+ * Bessel function.
+ * @param __ip_n The output derivative of the regular modified
+ * spherical Bessel function.
+ * @param __kp_n The output derivative of the irregular modified
+ * spherical Bessel function.
+ */
+ template<typename _Tp>
+ void
+ __sph_bessel_ik(unsigned int __n, _Tp __x,
+ _Tp & __i_n, _Tp & __k_n, _Tp & __ip_n, _Tp & __kp_n)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+
+ if (__isnan(__x))
+ __i_n = __k_n = __ip_n = __kp_n = _S_NaN;
+ else
+ {
+ const auto __nu = _Tp(__n + 0.5L);
+ _Tp _I_nu, _Ip_nu, _K_nu, _Kp_nu;
+ __cyl_bessel_ik(__nu, __x, _I_nu, _K_nu, _Ip_nu, _Kp_nu);
+
+ const auto __factor = __gnu_cxx::__math_constants<_Tp>::__root_pi_div_2
+ / std::sqrt(__x);
+
+ __i_n = __factor * _I_nu;
+ __k_n = __factor * _K_nu;
+ __ip_n = __factor * _Ip_nu - __i_n / (_Tp{2} * __x);
+ __kp_n = __factor * _Kp_nu - __k_n / (_Tp{2} * __x);
+ }
+ return;
+ }
+
+
+ /**
+ * @brief Compute the Airy functions
+ * @f$ Ai(x) @f$ and @f$ Bi(x) @f$ and their first
+ * derivatives @f$ Ai'(x) @f$ and @f$ Bi(x) @f$
+ * respectively.
+ *
+ * @param __z The argument of the Airy functions.
+ * @param _Ai The output Airy function of the first kind.
+ * @param _Bi The output Airy function of the second kind.
+ * @param _Aip The output derivative of the Airy function
+ * of the first kind.
+ * @param _Bip The output derivative of the Airy function
+ * of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __airy(_Tp __z, _Tp & _Ai, _Tp & _Bi, _Tp & _Aip, _Tp & _Bip)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Tp>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_sqrt3 = __gnu_cxx::__math_constants<_Tp>::__root_3;
+ const auto __absz = std::abs(__z);
+ const auto __rootz = std::sqrt(__absz);
+ const auto __xi = _Tp{2} * __absz * __rootz / _Tp{3};
+
+ if (__isnan(__z))
+ _Ai = _Bi = _Aip = _Bip = _S_NaN;
+ else if (__z == _S_inf)
+ {
+ _Ai = _Aip = _Tp{0};
+ _Bi = _Bip = _S_inf;
+ }
+ else if (__z == -_S_inf)
+ _Ai = _Bi = _Aip = _Bip = _Tp{0};
+ else if (__z > _Tp{0})
+ {
+ _Tp _I_nu, _K_nu, _Ip_nu, _Kp_nu;
+
+ __cyl_bessel_ik(_Tp{1} / _Tp{3}, __xi, _I_nu, _K_nu, _Ip_nu, _Kp_nu);
+ _Ai = __rootz * _K_nu / (_S_sqrt3 * _S_pi);
+ _Bi = __rootz * (_K_nu / _S_pi + _Tp{2} * _I_nu / _S_sqrt3);
+
+ __cyl_bessel_ik(_Tp{2} / _Tp{3}, __xi, _I_nu, _Ip_nu, _K_nu, _Kp_nu);
+ _Aip = -__z * _K_nu / (_S_sqrt3 * _S_pi);
+ _Bip = __z * (_K_nu / _S_pi + _Tp{2} * _I_nu / _S_sqrt3);
+ }
+ else if (__z < _Tp{0})
+ {
+ _Tp _J_nu, _N_nu, _Jp_nu, _Np_nu;
+
+ __cyl_bessel_jn(_Tp{1} / _Tp{3}, __xi, _J_nu, _N_nu, _Jp_nu, _Np_nu);
+ _Ai = +__rootz * (_J_nu - _N_nu / _S_sqrt3) / _Tp{2};
+ _Bi = -__rootz * (_N_nu + _J_nu / _S_sqrt3) / _Tp{2};
+
+ __cyl_bessel_jn(_Tp{2} / _Tp{3}, __xi, _J_nu, _N_nu, _Jp_nu, _Np_nu);
+ _Aip = __absz * (_N_nu / _S_sqrt3 + _J_nu) / _Tp{2};
+ _Bip = __absz * (_J_nu / _S_sqrt3 - _N_nu) / _Tp{2};
+ }
+ else
+ {
+ // Reference:
+ // Abramowitz & Stegun, page 446 section 10.4.4 on Airy functions.
+ // The number is Ai(0) = 3^{-2/3}/\Gamma(2/3).
+ _Ai = _Tp{0.3550280538878172392600631860041831763979791741991772L};
+ _Bi = _Ai * _S_sqrt3;
+
+ // Reference:
+ // Abramowitz & Stegun, page 446 section 10.4.5 on Airy functions.
+ // The number is Ai'(0) = -3^{-1/3}/\Gamma(1/3).
+ _Aip = -_Tp{0.25881940379280679840518356018920396347909113835493L};
+ _Bip = -_Aip * _S_sqrt3;
+ }
+
+ return;
+ }
+
+ /**
+ * @brief Compute the Fock-type Airy functions
+ * @f$ w_1(x) @f$ and @f$ w_2(x) @f$ and their first
+ * derivatives @f$ w_1'(x) @f$ and @f$ w_2'(x) @f$
+ * respectively.
+ * @f[
+ * w_1(x) = \sqrt{\pi}(Ai(x) + iBi(x))
+ * @f]
+ * @f[
+ * w_2(x) = \sqrt{\pi}(Ai(x) - iBi(x))
+ * @f]
+ *
+ * @param __x The argument of the Airy functions.
+ * @param __w1 The output Fock-type Airy function of the first kind.
+ * @param __w2 The output Fock-type Airy function of the second kind.
+ * @param __w1p The output derivative of the Fock-type Airy function
+ * of the first kind.
+ * @param __w2p The output derivative of the Fock-type Airy function
+ * of the second kind.
+ */
+ template<typename _Tp>
+ void
+ __fock_airy(_Tp __x,
+ std::complex<_Tp>& __w1, std::complex<_Tp>& __w2,
+ std::complex<_Tp>& __w1p, std::complex<_Tp>& __w2p)
+ {
+ constexpr auto _S_sqrtpi = __gnu_cxx::__math_constants<_Tp>::__root_pi;
+
+ _Tp _Ai, _Bi, _Aip, _Bip;
+ airy(__x, &_Ai, &_Bi, &_Aip, &_Bip);
+
+ __w1 = _S_sqrtpi * std::complex<_Tp>(_Ai, _Bi);
+ __w2 = _S_sqrtpi * std::complex<_Tp>(_Ai, -_Bi);
+ __w1p = _S_sqrtpi * std::complex<_Tp>(_Aip, _Bip);
+ __w2p = _S_sqrtpi * std::complex<_Tp>(_Aip, -_Bip);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_MOD_BESSEL_TCC
diff --git a/libstdc++-v3/include/bits/sf_owens_t.tcc b/libstdc++-v3/include/bits/sf_owens_t.tcc
new file mode 100644
index 00000000000..4fce8f0b6dd
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_owens_t.tcc
@@ -0,0 +1,396 @@
+// TR29124 math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_owens_t.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_SF_OWENS_T_TCC
+#define _GLIBCXX_BITS_SF_OWENS_T_TCC 1
+
+#pragma GCC system_header
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+/**
+ *
+ */
+template<typename _Tp>
+ _Tp
+ __znorm2(_Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ return _Tp{0.5L} * std::erfc(__x / _S_sqrt_2);
+ }
+
+/**
+ *
+ */
+template<typename _Tp>
+ _Tp
+ __znorm1(_Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ return _Tp{0.5L} * std::erf(__x / _S_sqrt_2);
+ }
+
+/**
+ * The CDF of the normal distribution.
+ * i.e. the integrated lower tail of the normal PDF.
+ */
+template<typename _Tp>
+ _Tp
+ __gauss(_Tp __x)
+ {
+ constexpr auto _S_sqrt_2 = __gnu_cxx::__math_constants<_Tp>::__root_2;
+ return _Tp{0.5L} * (_Tp{1} + std::erf(__x/_S_sqrt_2));
+ }
+
+/**
+ * Return the Owens T function:
+ * @f[
+ * T(h,a) = \frac{1}{2\pi}\int_0^a\frac{\exp[-\frac{1}{2}h^2(1+x^2)]}{1+x^2}dx
+ * @f]
+ *
+ * This implementation is a translation of the Fortran implementation in
+ * @see Patefield, M. and Tandy, D.
+ * "Fast and accurate Calculation of Owen's T-Function",
+ * Journal of Statistical Software, 5 (5), 1 - 25 (2000)
+ * @param[in] __h The scale parameter.
+ * @param[in] __a The integration limit.
+ * @return The owens T function.
+ */
+template<typename _Tp>
+ _Tp
+ __owens_t(_Tp __h, _Tp __a)
+ {
+ constexpr _Tp _S_eps = std::numeric_limits<_Tp>::epsilon();
+ constexpr _Tp _S_min = std::numeric_limits<_Tp>::min();
+
+ constexpr std::size_t _S_num_c2 = 21;
+ constexpr _Tp _S_c2[_S_num_c2]
+ {
+ 0.99999999999999987510L,
+ -0.99999999999988796462L,
+ 0.99999999998290743652L,
+ -0.99999999896282500134L,
+ 0.99999996660459362918L,
+ -0.99999933986272476760L,
+ 0.99999125611136965852L,
+ -0.99991777624463387686L,
+ 0.99942835555870132569L,
+ -0.99697311720723000295L,
+ 0.98751448037275303682L,
+ -0.95915857980572882813L,
+ 0.89246305511006708555L,
+ -0.76893425990463999675L,
+ 0.58893528468484693250L,
+ -0.38380345160440256652L,
+ 0.20317601701045299653L,
+ -0.82813631607004984866e-01L,
+ 0.24167984735759576523e-01L,
+ -0.44676566663971825242e-02L,
+ 0.39141169402373836468e-03L
+ };
+
+ constexpr _Tp _S_h_range[14]
+ {
+ 0.02L, 0.06L, 0.09L, 0.125L, 0.26L, 0.4L, 0.6L,
+ 1.6L, 1.7L, 2.33L, 2.4L, 3.36L, 3.4L, 4.8L
+ };
+
+ constexpr _Tp _S_a_range[7]
+ {
+ 0.025L,
+ 0.09L,
+ 0.15L,
+ 0.36L,
+ 0.5L,
+ 0.9L,
+ 0.99999L
+ };
+
+ constexpr int _S_select[8][15]
+ {
+ {0, 0, 1, 12, 12, 12, 12, 12, 12, 12, 12, 15, 15, 15, 8},
+ {0, 1, 1, 2, 2, 4, 4, 13, 13, 14, 14, 15, 15, 15, 8},
+ {1, 1, 2, 2, 2, 4, 4, 14, 14, 14, 14, 15, 15, 15, 9},
+ {1, 1, 2, 4, 4, 4, 4, 6, 6, 15, 15, 15, 15, 15, 9},
+ {1, 2, 2, 4, 4, 5, 5, 7, 7, 16, 16, 16, 11, 11, 10},
+ {1, 2, 4, 4, 4, 5, 5, 7, 7, 16, 16, 16, 11, 11, 11},
+ {1, 2, 3, 3, 5, 5, 7, 7, 16, 16, 16, 16, 16, 11, 11},
+ {1, 2, 3, 3, 5, 5, 17, 17, 17, 17, 16, 16, 16, 11, 11}
+ };
+
+ constexpr int _S_method[18]
+ {
+ 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 3, 4, 4, 4, 4, 5, 6
+ };
+
+ constexpr int _S_ord[18]
+ {
+ 2, 3, 4, 5, 7, 10, 12, 18, 10,
+ 20, 30, 20, 4, 7, 8, 20, 13, 0
+ };
+
+ constexpr std::size_t _S_num_GJ = 13;
+
+ constexpr _Tp _S_GJ_pts[_S_num_GJ]
+ {
+ 0.35082039676451715489e-02L,
+ 0.31279042338030753740e-01L,
+ 0.85266826283219451090e-01L,
+ 0.16245071730812277011L,
+ 0.25851196049125434828L,
+ 0.36807553840697533536L,
+ 0.48501092905604697475L,
+ 0.60277514152618576821L,
+ 0.71477884217753226516L,
+ 0.81475510988760098605L,
+ 0.89711029755948965867L,
+ 0.95723808085944261843L,
+ 0.99178832974629703586L
+ };
+
+ constexpr _Tp _S_GJ_wts[_S_num_GJ]
+ {
+ 0.18831438115323502887e-01L,
+ 0.18567086243977649478e-01L,
+ 0.18042093461223385584e-01L,
+ 0.17263829606398753364e-01L,
+ 0.16243219975989856730e-01L,
+ 0.14994592034116704829e-01L,
+ 0.13535474469662088392e-01L,
+ 0.11886351605820165233e-01L,
+ 0.10070377242777431897e-01L,
+ 0.81130545742299586629e-02L,
+ 0.60419009528470238773e-02L,
+ 0.38862217010742057883e-02L,
+ 0.16793031084546090448e-02L
+ };
+
+ constexpr _Tp _S_1_d_sqrt_2pi = 0.39894228040143267794L;
+ constexpr _Tp _S_1_d_2pi = 0.15915494309189533577L;
+
+ if (__isnan(__a) || __isnan(__h))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__h < _Tp{0})
+ return __owens_t(-__h, __a);
+ else if (__a < _Tp{0})
+ return -__owens_t(__h, -__a);
+ else if (__a > _Tp{1})
+ {
+ auto __normh = __znorm2(__h);
+ auto __normah = __znorm2(__a * __h);
+ return _Tp{0.5L} * __normh + _Tp{0.5L} * __normah
+ - __normh * __normah - __owens_t(__h * __a, _Tp{1} / __a);
+ }
+ if (__h == _Tp{0})
+ return std::atan(__a) * _S_1_d_2pi;
+ if (__a == _Tp{0})
+ return _Tp{0};
+ if (__a == _Tp{1})
+ return _Tp{0.5L} * __znorm2(-__h) * __znorm2(__h);
+ else
+ {
+ // Determine appropriate method from t1...t6
+
+ auto __iaint = 7;
+ for (int __i = 0; __i < 7; ++__i)
+ if (__a <= _S_a_range[__i])
+ {
+ __iaint = __i;
+ break;
+ }
+
+ auto __ihint = 14;
+ for (int __i = 0; __i < 14; ++__i)
+ if (__h <= _S_h_range[__i])
+ {
+ __ihint = __i;
+ break;
+ }
+
+ auto __icode = _S_select[__iaint][__ihint];
+ auto __m = _S_ord[__icode];
+
+ if (_S_method[__icode] == 1)
+ {
+ // t1(h, a, m) ; m = 2, 3, 4, 5, 7, 10, 12 or 18
+ // jj = 2j - 1 ; gj = exp(-h*h/2) * (-h*h/2)^j / j!
+ // aj = a^(2j-1) / (2*pi)
+ const auto __hh = - _Tp{0.5L} * __h * __h;
+ const auto __dhs = std::exp(__hh);
+ const auto __aa = __a * __a;
+ auto __j = 1;
+ auto __jj = _Tp{1};
+ auto __aj = _S_1_d_2pi * __a;
+ auto __dj = std::expm1(__hh);
+ auto __gj = __hh * __dhs;
+
+ auto __value = _S_1_d_2pi * std::atan(__a);
+ while (true)
+ {
+ auto __z = __dj * __aj / __jj;
+ __value += __z;
+
+ if (__j >= __m && std::abs(__z) < _S_eps * std::abs(__value))
+ return __value;
+
+ ++__j;
+ __jj += _Tp{2};
+ __aj *= __aa;
+ __dj = __gj - __dj;
+ __gj *= __hh / _Tp(__j);
+ }
+ }
+ else if (_S_method[__icode] == 2)
+ {
+ // t2(h, a, m) ; m = 10, 20 or 30
+ // z = (-1)^(i-1) * zi ; ii = 2i - 1
+ // vi = (-1)^(i-1) * a^(2i-1) * exp[-(a*h)^2/2] / sqrt(2*pi)
+ auto __maxii = __m + __m + 1;
+ auto __ii = 1;
+ const auto __hh = __h * __h;
+ const auto __aa = -__a * __a;
+ const auto __y = _Tp{1} / __hh;
+ auto __ah = __a * __h;
+ auto __vi = _S_1_d_sqrt_2pi * __a * std::exp(-_Tp{0.5} * __ah * __ah);
+ auto __z = __znorm1(__ah) / __h;
+ auto __z_prev = std::abs(__z) + _Tp{1};
+
+ auto __value = _Tp{0};
+ while (true)
+ {
+ __value += __z;
+
+ if (std::abs(__z) < _S_eps * std::abs(__value)
+ || (__ii >= __maxii && std::abs(__z) > __z_prev)
+ || std::abs(__z) < _S_eps)
+ {
+ __value *= _S_1_d_sqrt_2pi * std::exp(-_Tp{0.5} * __hh);
+ return __value;
+ }
+
+ __z_prev = std::abs(__z);
+ __z = __y * (__vi - _Tp(__ii) * __z);
+ __vi *= __aa;
+ __ii += 2;
+ }
+ }
+ else if (_S_method[__icode] == 3)
+ {
+ // t3(h, a, m) ; m = 20
+ // ii = 2i - 1
+ // vi = a^(2i-1) * exp[-(a*h)^2/2] / sqrt(2*pi)
+ const auto __hh = __h * __h;
+ const auto __aa = __a * __a;
+ const auto __ah = __a * __h;
+ const auto __y = _Tp{1} / __hh;
+ auto __ii = 1;
+ auto __vi = _S_1_d_sqrt_2pi * __a * std::exp(-_Tp{0.5L} * __ah * __ah);
+ auto __zi = __znorm1(__ah) / __h;
+
+ auto __value = _Tp{0};
+ for (int __i = 0; __i < _S_num_c2; ++__i)
+ {
+ __value += __zi * _S_c2[__i];
+ __zi = __y * (_Tp(__ii) * __zi - __vi);
+ __vi *= __aa;
+ __ii += 2;
+ }
+ __value *= _S_1_d_sqrt_2pi * std::exp(-_Tp{0.5L} * __hh);
+ return __value;
+ }
+ else if (_S_method[__icode] == 4)
+ {
+ // t4(h, a, m) ; m = 4, 7, 8 or 20; ii = 2i + 1
+ // ai = a * exp[-h*h*(1+a*a)/2] * (-a*a)^i / (2*pi)
+ const auto __maxii = __m + __m + 1;
+ const auto __hh = __h * __h;
+ const auto __aa = -__a * __a;
+ auto __ii = 1;
+ auto __ai = _S_1_d_2pi * __a
+ * std::exp(-_Tp{0.5L} * __hh * (_Tp{1} - __aa));
+ auto __yi = _Tp{1};
+
+ auto __value = __ai * __yi;
+ while (true)
+ {
+ __ii += 2;
+ __yi = (_Tp{1} - __hh * __yi) / _Tp(__ii);
+ __ai *= __aa;
+ auto __z = __ai * __yi;
+ __value += __z;
+
+ //if (__maxii <= __ii)
+ if (std::abs(__z) > _S_min && std::abs(__z) < _S_eps * std::abs(__value))
+ return __value;
+ }
+ }
+ else if (_S_method[__icode] == 5)
+ {
+ // t5(h, a, m) ; m = 13
+ // 2m - point Gaussian quadrature
+ const auto __aa = __a * __a;
+ const auto __hh = - _Tp{0.5L} * __h * __h;
+ auto __value = _Tp{0};
+ for (int __i = 0; __i < _S_num_GJ; ++__i)
+ {
+ auto __r = _Tp{1} + __aa * _S_GJ_pts[__i];
+ __value += _S_GJ_wts[__i] * std::exp(__hh * __r) / __r;
+ }
+ __value *= __a;
+ return __value;
+ }
+ else if (_S_method[__icode] == 6)
+ {
+ // t6(h, a); approximation for a near 1, (a<=1)
+ const auto __normh = __znorm2(__h);
+ auto __value = _Tp{0.5L} * __normh * (_Tp{1} - __normh);
+ const auto __y = _Tp{1} - __a;
+ const auto __r = std::atan2(__y, _Tp{1} + __a);
+
+ if (std::abs(__r) > _S_eps)
+ __value -= _S_1_d_2pi * __r
+ * std::exp (- _Tp{0.5L} * __y * __h * __h / __r);
+ return __value;
+ }
+
+ return _Tp{0};
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_OWENS_T_TCC
diff --git a/libstdc++-v3/include/bits/sf_polylog.tcc b/libstdc++-v3/include/bits/sf_polylog.tcc
new file mode 100644
index 00000000000..4c32ee646e1
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_polylog.tcc
@@ -0,0 +1,1446 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_polylog.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Florian Goth and Edward Smith-Rowland.
+//
+// References:
+// (1) David C. Wood, "The Computation of Polylogarithms."
+//
+
+#ifndef _GLIBCXX_BITS_SF_POLYLOG_TCC
+#define _GLIBCXX_BITS_SF_POLYLOG_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ext/math_const.h>
+#include <ext/math_util.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+
+ template<typename _Tp>
+ std::complex<_Tp>
+ __clamp_pi(std::complex<_Tp> __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_i2pi = std::complex<_Tp>{0, _Tp{2} * _S_pi};
+ while (__w.imag() > _S_pi)
+ __w -= _S_i2pi;
+ while (__w.imag() <= -_S_pi)
+ __w += _S_i2pi;
+ return __w;
+ }
+
+ template<typename _Tp>
+ std::complex<_Tp>
+ __clamp_0_m2pi(std::complex<_Tp> __w)
+ {
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_i2pi = std::complex<_Tp>{0, _S_2pi};
+ while (__w.imag() > _Tp{0})
+ __w = std::complex<_Tp>(__w.real(), __w.imag() - _S_2pi);
+ while (__w.imag() <= -_S_2pi)
+ __w = std::complex<_Tp>(__w.real(), __w.imag() + _S_2pi);
+ return __w;
+ }
+
+ /**
+ * A function to calculate the values of zeta at even positive integers.
+ * For values smaller than thirty a table is used.
+ *
+ * @param __k an integer at which we evaluate the Riemann zeta function.
+ * @return @f$ \zeta(k) @f$
+ */
+ template<typename _Tp = double>
+ _Tp
+ evenzeta(unsigned int __k)
+ {
+ // The following constants were calculated with Mathematica 8
+ constexpr _Tp
+ __data[]
+ {
+ -0.50000000000000000000000000,
+ 1.6449340668482264364724152,
+ 1.0823232337111381915160037,
+ 1.0173430619844491397145179,
+ 1.0040773561979443393786852,
+ 1.0009945751278180853371460,
+ 1.0002460865533080482986380,
+ 1.0000612481350587048292585,
+ 1.0000152822594086518717326,
+ 1.0000038172932649998398565,
+ 1.0000009539620338727961132,
+ 1.0000002384505027277329900,
+ 1.0000000596081890512594796,
+ 1.0000000149015548283650412,
+ 1.0000000037253340247884571,
+ };
+ constexpr auto __maxk = 2 * sizeof(__data) / sizeof(_Tp);
+ if (__k < __maxk)
+ return __data[__k / 2];
+ else
+ return std::__detail::__riemann_zeta(static_cast<_Tp>(__k));
+ }
+
+ /**
+ * This function treats the cases of positive integer index s.
+ *
+ * @f[
+ * Li_s(e^w) = \sum_{k=0, k != s-1} \zeta(s-k) \frac{w^k}{k!}
+ * + (H_{s-1} - \log(-w)) \frac{w^{s-1}}{(s-1)!}
+ * @f]
+ * The radius of convergence is @f$ |w| < 2 \pi @f$.
+ * Note that this series involves a @f$ \log(-x) @f$.
+ * gcc and Mathematica differ in their implementation
+ * of @f$ \log(e^{i \pi}) @f$:
+ * gcc: @f$ \log(e^{+- i * \pi}) = +- i \pi @f$
+ * whereas Mathematica doesn't preserve the sign in this case:
+ * @f$ \log(e^{+- i\pi}) = +i \pi @f$
+ *
+ * @param __s the index s.
+ * @param __w the argument w.
+ * @return the value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_pos(unsigned int __s, std::complex<_Tp> __w)
+ { // positive integer s
+ // Optimization possibility: s are positive integers
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pipio6
+ = __gnu_cxx::__math_constants<_Tp>::__pi_sqr_div_6;
+ std::complex<_Tp> __res = std::__detail::__riemann_zeta(_Tp(__s));
+ auto __wk = __w;
+ auto __fac = _Tp{1};
+ auto __harmonicN = _Tp{1}; // HarmonicNumber_1
+ for (unsigned int __k = 1; __k <= __s - 2; ++__k)
+ {
+ __res += __wk * __fac * std::__detail::__riemann_zeta(_Tp(__s - __k));
+ __wk *= __w;
+ _Tp __temp = _Tp{1}/(_Tp{1} + __k);
+ __fac *= __temp;
+ __harmonicN += __temp;
+ }
+ // harmonicN now contains H_{s-1}.
+ // fac should be 1/(n-1)!
+ __res += (__harmonicN - std::log(-__w)) * __wk * __fac;
+ __wk *= __w;
+ __fac /= __s;
+ __res -= __wk * __fac / _Tp{2};
+ __wk *= __w;
+ // Now comes the remainder of the series.
+ const auto __pref = __wk / _S_pi / _S_2pi;
+ const unsigned int __maxit = 200;
+ unsigned int __j = 1;
+ bool __terminate = false;
+ __fac /= (__s + _Tp{1}); // (1/(n+1)!)
+ __res -= _S_pipio6 * __fac * __pref; //subtract the zeroth order term.
+ // Remainder of series.
+ __fac *= _Tp{3} * _Tp{2} / (__s + _Tp{2}) / (__s + _Tp{3});
+ auto __upfac = -(__w / _S_2pi) * (__w / _S_2pi);
+ auto __w2 = __upfac;
+ while (!__terminate) // Assume uniform convergence.
+ {
+ auto __rzarg = 2 * __j + 2;
+ //auto __rz = std::__detail::__riemann_zeta(rzarg);
+ auto __rz = evenzeta<_Tp>(__rzarg);
+ auto __term = (__rz * __fac) * __w2;
+ __w2 *= __upfac;
+ __fac *= __rzarg / _Tp(__rzarg + __s)
+ * (__rzarg + 1) / _Tp(__rzarg + __s + 1);
+ ++__j;
+ __terminate = (__gnu_cxx::__fpequal(std::abs(__res - __pref * __term),
+ std::abs(__res)) || (__j > __maxit));
+ __res -= __pref * __term;
+ }
+ return __res;
+ }
+
+ /**
+ * This function treats the cases of positive integer index s for real w.
+ *
+ * This specialization is worthwhile to catch the differing behaviour
+ * of log(x).
+ * @f[
+ * Li_s(e^w) = \sum_{k=0, k != s-1} \zeta(s-k) \frac{w^k}{k!}
+ * + \left(H_{s-1} - \log(-w)\right) \frac{w^{s-1}}{(s-1)!}
+ * @f]
+ * The radius of convergence is @f$ |w| < 2 \pi @f$.
+ * Note that this series involves a @f$ \log(-x) @f$.
+ * The use of evenzeta yields a speedup of about 2.5.
+ * gcc and Mathematica differ in their implementation
+ * of @f$ \log(e^{i\pi}) @f$:
+ * gcc: @f$ \log(e^{+- i\pi}) = +- i\pi @f$
+ * whereas Mathematica doesn't preserve the sign in this case:
+ * @f$ \log(e^{+- i\pi}) = +i\pi @f$
+ *
+ * @param __s the index.
+ * @param __w the argument
+ * @return the value of the Polylogarithm
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_pos(unsigned int __s, _Tp __w)
+ { // positive integer s
+ // Optimization possibility: s are positive integers.
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ auto __res = std::__detail::__riemann_zeta(_Tp(__s));
+ auto __wk = __w;
+ auto __fac = _Tp{1};
+ auto __harmonicN = _Tp{1}; // HarmonicNumber_1
+ for (unsigned int __k = 1; __k <= __s - 2; ++__k)
+ {
+ __res += __wk * __fac * std::__detail::__riemann_zeta(_Tp(__s - __k));
+ __wk *= __w;
+ auto __temp = _Tp{1} / (_Tp{1} + __k);
+ __fac *= __temp;
+ __harmonicN += __temp;
+ }
+ // HarmonicN now contains H_{s-1}
+ // fac should be 1/(n-1)!
+ auto __imagtemp = __fac * __wk
+ * (__harmonicN - std::log(std::complex<_Tp>(-__w, _Tp{0})));
+ __res += real(__imagtemp);
+ __wk *= __w;
+ __fac /= __s;
+ __res -= __wk * __fac / _Tp{2};
+ __wk *= __w;
+ // Now comes the remainder of the series.
+ const auto __pref = __wk / _S_pi / _S_2pi;
+ const unsigned int __maxit = 200;
+ unsigned int __j = 1;
+ bool __terminate = false;
+ __fac /= (__s + _Tp{1}); // (1/(n+1)!)
+ // Subtract the zeroth order term.
+ __res -= _S_pi * _S_pi / _Tp{6} * __fac * __pref;
+ // Remainder of series.
+ __fac *= _Tp{3} * _Tp{2} / (__s + _Tp{2}) / (__s + _Tp{3});
+ auto __upfac = -(__w / _S_2pi) * (__w / _S_2pi);
+ auto __w2 = __upfac;
+ while (!__terminate) // Assume convergence
+ {
+ auto __rzarg = _Tp(2 * __j + 2);
+ auto __rz = evenzeta<_Tp>(__rzarg);
+ auto __term = __rz * __fac * __w2;
+ __w2 *= __upfac;
+ __fac *= __rzarg / (__rzarg + __s)
+ * (__rzarg + _Tp{1}) / (__rzarg + __s + _Tp{1});
+ ++__j;
+ __terminate
+ = (__gnu_cxx::__fpequal(std::abs(__res - __pref * __term),
+ std::abs(__res)) || (__j > __maxit));
+ __res -= __pref * __term;
+ }
+ return std::complex<_Tp>(__res, std::imag(__imagtemp));
+ }
+
+ /**
+ * This function treats the cases of negative real index s.
+ * Theoretical convergence is present for @f$ |w| < 2\pi @f$.
+ * We use an optimized version of
+ * @f[
+ * Li_s(e^w) = \Gamma(1-s)(-w)^{s-1} + \frac{(2\pi)^{-s}}{\pi} A_p(w)
+ * @f]
+ * @f[
+ * A_p(w) = \sum_k \frac{\Gamma(1+k-s)}{k!}
+ * \sin\left(\frac{\pi}{2} (s-k)\right)
+ * \left(\frac{w}{2\pi}\right)^k \zeta(1+k-s)
+ * @f]
+ * @param __s The real index
+ * @param __w The complex argument
+ * @return The value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_neg(_Tp __s, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ // Basic general loop, but s is a negative quantity here
+ // FIXME Large s makes problems.
+ // The series should be rearrangeable so that we only need
+ // the ratio Gamma(1-s)/(2 pi)^s
+ auto __ls = __log_gamma(_Tp{1} - __s);
+ auto __res = std::exp(__ls - (_Tp{1} - __s) * std::log(-__w));
+ const auto __wup = __w / _S_2pi;
+ auto __w2 = __wup;
+ auto __pref = _Tp{2} * std::pow(_S_2pi, -(_Tp{1} - __s));
+ // here we factor up the ratio of Gamma(1 - s + k)/k! .
+ // This ratio should be well behaved even for large k in the series
+ // afterwards
+ // Note that we have a problem for large s
+ // Since s is negative we evaluate the Gamma Function
+ // on the positive real axis where it is real.
+ auto __gam = std::exp(__ls);
+
+ auto __phase = std::polar(_Tp{1}, _S_pi_2 * __s);
+ auto __cp = std::real(__phase);
+ auto __sp = std::imag(__phase);
+ // Here we add the expression that would result from ignoring
+ // the zeta function in the series.
+ std::complex<_Tp> __expis(__cp, __sp);
+ auto __p = _S_2pi - _S_i * __w;
+ auto __q = _S_2pi + _S_i * __w;
+ // This can be optimized for real values of w
+ __res += _S_i * __gam * (std::conj(__expis) * std::pow(__p, __s - _Tp{1})
+ - __expis * std::pow(__q, __s - _Tp{1}));
+ // The above expression is the result of
+ // sum_k Gamma(1+k-s) /k! * sin(pi /2* (s-k)) * (w/2/pi)^k
+ // Therefore we only need to sample values of zeta(n) on the real axis
+ // that really differ from one
+ __res += __pref * (__sp * __gam *
+ (std::__detail::__riemann_zeta(_Tp{1} - __s) - _Tp{1}));
+ constexpr unsigned int __maxit = 200;
+ unsigned int __j = 1;
+ bool __terminate = false;
+ __gam *= (_Tp{1} - __s);
+ while (!__terminate) // Assume convergence
+ {
+ auto __rzarg = _Tp(1 + __j) - __s;
+ auto __rz = std::__detail::__riemann_zeta_m_1(__rzarg);
+ _Tp __sine;
+ // Save the repeated recalculation of the sines
+ if (__j & 1)
+ { // odd
+ __sine = __cp;
+ if (!((__j - 1) / 2 & 1))
+ __sine = -__sine;
+ }
+ else
+ { // even
+ __sine = __sp;
+ if ((__j / 2) & 1)
+ __sine = -__sine;
+ }
+ auto __term = __w2 * (__gam * __sine * __rz);
+ __w2 *= __wup;
+ ++__j;
+ __gam *= __rzarg / (__j); // == 1/(j+1) since we incremented j above.
+ __terminate
+ = (__gnu_cxx::__fpequal(std::abs(__res + __pref * __term),
+ std::abs(__res)) || (__j > __maxit));
+ __res += __pref * __term;
+ }
+ return __res;
+ }
+
+ /**
+ * This function treats the cases of negative integer index s
+ * which are multiples of two.
+ *
+ * In that case the sine occuring in the expansion occasionally
+ * takes on the value zero.
+ * We use that to provide an optimized series for p = 2n:
+ *
+ * In the template parameter sigma we transport
+ * whether @f$ p = 4k (\sigma = 1) @f$ or @f$ p = 4k + 2 (\sigma = -1) @f$.
+ * @f[
+ * Li_p(e^w) = \Gamma(1-p) (-w)^{p-1} - A_p(w) - \sigma B_p(w)
+ * @f]
+ * with
+ * @f[
+ * A_p(w) = 2 (2\pi)^{p-1} \frac{(-p)!}{(2\pi)^{-p/2}}
+ * \left(1 + \frac{w^2}{(4\pi^2}\right)^{(p-1)/2}
+ * \cos\left[(1 - p)ArcTan\left(\frac{2\pi}{w}\right)\right]
+ * @f]
+ * and
+ * @f[
+ * B_p(w) = - 2 (2 \pi)^{p-1} \sum_{k = 0}^{\infty}
+ * \frac{\Gamma(2 + 2k - p)}{(2k+1)!}
+ * (-1)^k \left(\frac{w}{2\pi}\right)^{2k+1} (\zeta(2 + 2k - p) - 1)
+ * @f]
+ * This is suitable for @f$ |w| < 2 \pi @f$
+ * The original series is (This might be worthwhile if we use
+ * the already present table of the Bernoullis)
+ * @f[
+ * Li_p(e^w) = \Gamma(1-p) (-w)^{p-1} - \sigma (2\pi)^p /\pi
+ * \sum_{k = 0}^{\infty}
+ * \frac{\Gamma(2 + 2k - p)}{(2k+1)!}
+ * (-1)^k \left(\frac{w}{2\pi}\right)^{2k+1} \zeta(2 + 2k - p)
+ * @f]
+ *
+ * @param __n the integral index @f$ n = 4k @f$.
+ * @param __w The complex argument w
+ * @return the value of the Polylogarithm.
+ */
+ template<typename _Tp, int __sigma>
+ std::complex<_Tp>
+ __polylog_exp_neg_even(unsigned int __n, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ const auto __np = 1 + __n;
+ auto __lnp = __log_gamma(_Tp(__np));
+ auto __res = std::exp(__lnp - _Tp(__np) * std::log(-__w));
+ auto __wup = __w / _S_2pi;
+ auto __wq = __wup * __wup;
+ auto __pref = _Tp{2} * std::pow(_S_2pi, -_Tp(1 + __n));
+ // Subtract the expression A_p(w)
+ __res -= std::exp(__lnp - _Tp{0.5L} * __np * std::log(_Tp{1} + __wq))
+ * __pref * std::cos(_Tp(__np) * std::atan(_Tp{1} / __wup));
+ unsigned int __k = 0;
+ bool __terminate = false;
+ constexpr unsigned int __maxit = 300;
+ auto __gam = __gamma(_Tp(2 + __n));
+ if (__sigma != 1)
+ __pref = -__pref;
+ while (!__terminate)
+ {
+ auto __term = __gam * __riemann_zeta_m_1<_Tp>(2 * __k + 2 + __n)
+ * __wup;
+ __gam *= - _Tp(2 * __k + 2 + __n + 1) / _Tp(2 * __k + 2 + 1)
+ * _Tp(2 * __k + 2 + __n) / _Tp(2 * __k + 1 + 1);
+ __wup *= __wq;
+ __terminate = (__k > __maxit)
+ || __gnu_cxx::__fpequal(std::abs(__res - __pref * __term),
+ std::abs(__res));
+ __res -= __pref * __term;
+ ++__k;
+ }
+ return __res;
+ }
+
+ /**
+ * This function treats the cases of negative integer index s which are odd.
+ *
+ * In that case the sine occuring in the expansion occasionally vanishes.
+ * We use that to provide an optimized series for @f$ p = 1 + 2k @f$:
+ * In the template parameter sigma we transport whether
+ * @f$ p = 1 + 4k (\sigma = 1) @f$ or @f$ p = 3 + 4k (\sigma = -1) @f$.
+ *
+ * @f[
+ * Li_p(e^w) = \Gamma(1-p) (-w)^{p-1} + \sigma A_p(w) - \sigma B_p(w)
+ * @f]
+ * with
+ * @f[
+ * A_p(w) = 2 (2\pi)^{p-1} \Gamma(1-p)
+ * \left(1 + \frac{w^2}{4\pi^2}\right)^{-1/2 + p/2}
+ * \cos((1 - p) ArcTan(2 \pi / w))
+ * @f]
+ * and
+ * @f[
+ * B_p(w) = 2(2\pi)^{p-1}\sum_{k=0}^{\infty}\frac{\Gamma(1 + 2k - p)}{(2k)!}
+ * \left(\frac{-w^2}{4 \pi^2}\right)^k \left(\zeta(1 + 2k - p) - 1\right)
+ * @f]
+ * This is suitable for @f$ |w| < 2 \pi @f$.
+ * The use of evenzeta gives a speedup of about 50
+ * The original series is (This might be worthwhile if we use
+ * the already present table of the Bernoullis)
+ * @f[
+ * Li_p(e^w) = \Gamma(1-p) (-w)^{p-1}
+ * - 2\sigma(2\pi)^{p-1} \sum_{k = 0}^{\infty}
+ * \frac{\Gamma(1 + 2k - p)}{(2k)!}
+ * (-1)^k \left(\frac{w}{2\pi}\right)^{2k} \zeta(1 + 2k - p)
+ * @f]
+ *
+ * @param __n the integral index n = 4k.
+ * @param __w The complex argument w.
+ * @return The value of the Polylogarithm.
+ */
+ template<typename _Tp, int __sigma>
+ std::complex<_Tp>
+ __polylog_exp_neg_odd(unsigned int __n, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ const unsigned int __np = 1 + __n;
+ auto __lnp = __log_gamma(_Tp(__np));
+ auto __res = std::exp(__lnp - _Tp(__np) * std::log(-__w));
+ constexpr auto __itp = _Tp{1} / (_Tp{2} * _S_pi);
+ auto __wq = -__w * __itp * __w * __itp;
+ auto __pref = _Tp{2} * std::pow(__itp, _Tp(__np));
+ // Subtract the expression A_p(w)
+ __res += std::exp(__lnp - _Tp{0.5L} * __np * std::log(_Tp{1} - __wq))
+ * __pref * std::cos(_Tp(__np)
+ * std::atan(std::complex<_Tp>{2 * _S_pi} / __w));
+ if (__sigma != 1)
+ __pref = -__pref;
+ bool __terminate = false;
+ constexpr unsigned int __maxit = 300;
+ _Tp __gam = std::exp(__lnp);
+ // zeroth order
+ __res -= __pref * __gam * (evenzeta<_Tp>(__np) - _Tp{1});
+ unsigned int __k = 0;
+ auto __wup = __wq;
+ while (!__terminate)
+ {
+ auto __zk = 2 * __k;
+ __gam *= _Tp(__zk + __np) / _Tp(1 + __zk)
+ * _Tp(1 + __zk + __np) / _Tp(__zk + 2);
+ auto __term = (__gam * __riemann_zeta_m_1<_Tp>(__zk + 2 + __np))
+ * __wup;
+ __wup *= __wq;
+ __terminate = __k > __maxit
+ || __gnu_cxx::__fpequal(std::abs(__res - __pref * __term),
+ std::abs(__res));
+ __res -= __pref * __term;
+ ++__k;
+ }
+ return __res;
+ }
+
+ /**
+ * This function treats the cases of negative integer index s
+ * and branches accordingly
+ *
+ * @param __s the integer index s.
+ * @param __w The Argument w
+ * @return The value of the Polylogarithm evaluated by a suitable function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_neg(int __s, std::complex<_Tp> __w)
+ { // negative integer __s
+ const auto __n = -__s;
+ switch (__n % 4)
+ {
+ case 0:
+ return __polylog_exp_neg_even<_Tp, 1>(__n, __w);
+ case 1:
+ return __polylog_exp_neg_odd<_Tp, 1>(__n, __w);
+ case 2:
+ return __polylog_exp_neg_even<_Tp, -1>(__n, __w);
+ case 3:
+ return __polylog_exp_neg_odd<_Tp, -1>(__n, __w);
+ break;
+ }
+ }
+
+ /**
+ * This function treats the cases of positive real index s.
+ *
+ * The defining series is
+ * @f[
+ * Li_s(e^w) = A_s(w) + B_s(w) + \Gamma(1-s)(-w)^{s-1}
+ * @f]
+ * with
+ * @f[
+ * A_s(w) = \sum_{k=0}^{m} \zeta(s-k)w^k/k!
+ * @f]
+ * @f[
+ * B_s(w) = \sum_{k=m+1}^{\infty} \sin(\pi/2(s-k))
+ * \Gamma(1-s+k)\zeta(1-s+k) (w/2/\pi)^k/k!
+ * @f]
+ *
+ * @param __s the positive real index s.
+ * @param __w The complex argument w.
+ * @return the value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_pos(_Tp __s, std::complex<_Tp> __w)
+ { // positive s
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ std::complex<_Tp> __res = std::__detail::__riemann_zeta(__s);
+ auto __wk = __w;
+ auto __phase = std::polar(_Tp{1}, _S_pi_2 * __s);
+ auto __cp = std::real(__phase);
+ auto __sp = std::imag(__phase);
+ // This is \Gamma(1-s)(-w)^{s-1}
+ __res += _S_pi / (_Tp{2} * __sp * __cp)
+ * std::exp(-__log_gamma(__s) + (__s - _Tp{1}) * std::log(-__w));
+ auto __fac = _Tp{1};
+ const auto __m = static_cast<unsigned int>(std::floor(__s));
+ for (unsigned int __k = 1; __k <= __m; ++__k)
+ {
+ __res += __wk * __fac
+ * std::__detail::__riemann_zeta(__s - _Tp(__k));
+ __wk *= __w;
+ __fac /= _Tp(1 + __k);
+ }
+ // fac should now be 1/(m+1)!
+ const auto __pref = _Tp{2} * std::pow(_S_2pi, __s - _Tp{1});
+ // Now comes the remainder of the series
+ constexpr unsigned int __maxit = 100;
+ unsigned int __j = 0;
+ bool __terminate = false;
+ auto __wup = __w / _S_2pi;
+ auto __w2 = std::pow(__wup, _Tp(__m + 1));
+ // It is 1 < 2 - s + m < 2 => Gamma(2-s+m) will not overflow
+ // Here we factor up the ratio of Gamma(1 - s + k) / k!.
+ // This ratio should be well behaved even for large k
+ auto __gam = __gamma(_Tp(2 + __m) - __s) * __fac;
+ while (!__terminate)
+ { // FIXME: optimize.
+ auto __idx = __m + 1 + __j;
+ auto __zetaarg = _Tp(1 + __idx) - __s;
+ auto __rz = std::__detail::__riemann_zeta(__zetaarg);
+ auto __sine = __cp;
+ if (__idx & 1) // Save the repeated calculation of the sines.
+ { // odd
+ __sine = __cp;
+ if (!((__idx - 1) / 2 & 1))
+ __sine = -__sine;
+ }
+ else
+ { // even
+ __sine = __sp;
+ if ((__idx / 2) & 1)
+ __sine = -__sine;
+ }
+ auto __term = __w2 * __sine * __gam * __rz;
+ __w2 *= __wup;
+ __gam *= __zetaarg / _Tp(1 + __idx);
+ ++__j;
+ __terminate = (__gnu_cxx::__fpequal(std::abs(__res + __pref * __term),
+ std::abs(__res))
+ || (__j > __maxit));
+ __res += __pref * __term;
+ }
+ return __res;
+ }
+
+ /**
+ * This function implements the asymptotic series for the polylog.
+ * It is given by
+ * @f[
+ * 2 \sum_{k=0}^{\infty} \zeta(2k) w^{s-2k}/\Gamma(s-2k+1)
+ * -i \pi w^{s-1}/\Gamma(s)
+ * @f]
+ * for @f$ Re(w) >> 1 @f$
+ *
+ * Don't check this against Mathematica 8.
+ * For real u the imaginary part of the polylog is given by
+ * @f$ Im(Li_s(e^u)) = - \pi u^{s-1}/\Gamma(s) @f$.
+ * Check this relation for any benchmark that you use.
+ * The use of evenzeta leads to a speedup of about 1000.
+ *
+ * @param __s the real index s.
+ * @param __w the large complex argument w.
+ * @return the value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_asymp(_Tp __s, std::complex<_Tp> __w)
+ { // asymptotic expansion
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ // wgamma = w^{s-1} / \Gamma(s)
+ auto __wgamma = std::exp((__s - _Tp{1}) * std::log(__w)
+ - __log_gamma(__s));
+ auto __res = std::complex<_Tp>(_Tp{0}, -_S_pi) * __wgamma;
+ // wgamma = w^s / Gamma(s+1)
+ __wgamma *= __w / __s;
+ constexpr unsigned int __maxiter = 100;
+ bool __terminate = false;
+ // zeta(0) * w^s / Gamma(s + 1)
+ std::complex<_Tp> __oldterm = -_Tp{0.5L} * __wgamma;
+ __res += _Tp{2} * __oldterm;
+ std::complex<_Tp> __term;
+ auto __wq = _Tp{1} / (__w * __w);
+ unsigned int __k = 1;
+ while (!__terminate)
+ {
+ __wgamma *= __wq * (__s + _Tp(1 - 2 * __k))
+ * (__s + _Tp(2 - 2 * __k));
+ __term = evenzeta<_Tp>(2 * __k) * __wgamma;
+ if (std::abs(__term) > std::abs(__oldterm))
+ __terminate = true; // Failure of asymptotic expansion.
+ if (__gnu_cxx::__fpequal(std::abs(__res + _Tp{2} * __term),
+ std::abs(__res)))
+ __terminate = true; // Precision goal reached.
+ if (__k > __maxiter)
+ __terminate = true; // Stop the iteration somewhen
+ if (!__terminate)
+ {
+ __res += _Tp{2} * __term;
+ __oldterm = __term;
+ ++__k;
+ }
+ }
+ return __res;
+ }
+
+ /**
+ * Theoretical convergence for Re(w) < 0.
+ *
+ * Seems to beat the other expansions for @f$ Re(w) < -\pi/2 - \pi/5 @f$.
+ * Note that this is an implementation of the basic series:
+ * @f[
+ * Li_s(e^z) = \sum_{k=1} e^{kz} * k^{-s}
+ * @f]
+ *
+ * @param __s is an arbitrary type, integral or float.
+ * @param __w something with a negative real part.
+ * @return the value of the polylogarithm.
+ */
+ template<typename _PowTp, typename _Tp>
+ _Tp
+ __polylog_exp_negative_real_part(_PowTp __s, _Tp __w)
+ {
+ auto __ew = std::exp(__w);
+ const auto __up = __ew;
+ auto __res = __ew;
+ unsigned int __maxiter = 500;
+ bool __terminate = false;
+ unsigned int __k = 2;
+ while (!__terminate)
+ {
+ __ew *= __up;
+ _Tp __temp = std::pow(__k, __s); // This saves us a type conversion
+ auto __term = __ew / __temp;
+ __terminate
+ = (__gnu_cxx::__fpequal(std::abs(__res + __term),
+ std::abs(__res))) || (__k > __maxiter);
+ __res += __term;
+ ++__k;
+ }
+ return __res;
+ }
+
+ /**
+ * Here s is a positive integer and the function descends
+ * into the different kernels depending on w.
+ *
+ * @param __s a positive integer.
+ * @param __w an arbitrary complex number.
+ * @return The value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_int_pos(unsigned int __s, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ auto __rw = __w.real();
+ auto __iw = __w.imag();
+ if (__fpreal(__w)
+ && __gnu_cxx::__fpequal(std::remainder(__iw, _S_2pi), _Tp{0}))
+ {
+ if (__s > 1)
+ return std::__detail::__riemann_zeta(_Tp(__s));
+ else
+ return std::numeric_limits<_Tp>::infinity();
+ }
+ else if (0 == __s)
+ {
+ auto __t = std::exp(__w);
+ return __t / (_Tp{1} - __t);
+ }
+ else if (1 == __s)
+ return -std::log(_Tp{1} - std::exp(__w));
+ else
+ {
+ if (__rw < -(_S_pi_2 + _S_pi / _Tp{5}) )
+ // Choose the exponentially converging series
+ return __polylog_exp_negative_real_part(__s, __w);
+ else if (__rw < _Tp{6})
+ // The transition point chosen here, is quite arbitrary
+ // and needs more testing.
+ // The reductions of the imaginary part yield the same results
+ // as Mathematica.
+ // Necessary to improve the speed of convergence
+ return __polylog_exp_pos(__s, __clamp_pi(__w));
+ else
+ // Wikipedia says that this is required for Wood's formula.
+ // FIXME: The series should terminate after a finite number
+ // of terms.
+ return __polylog_exp_asymp(static_cast<_Tp>(__s),
+ __clamp_0_m2pi(__w));
+ }
+ }
+
+ /**
+ * Here s is a positive integer and the function descends
+ * into the different kernels depending on w.
+ *
+ * @param __s a positive integer
+ * @param __w an arbitrary real argument w
+ * @return the value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_int_pos(unsigned int __s, _Tp __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ if (__gnu_cxx::__fpequal(__w, _Tp{0}))
+ {
+ if (__s > 1)
+ return std::__detail::__riemann_zeta(_Tp(__s));
+ else
+ return std::numeric_limits<_Tp>::infinity();
+ }
+ else if (__s == 0)
+ {
+ auto __t = std::exp(__w);
+ return __t / (_Tp{1} - __t);
+ }
+ else if (1 == __s)
+ return -std::log(_Tp{1} - std::exp(__w));
+ else
+ {
+ if (__w < -(_S_pi_2 + _S_pi / _Tp{5}))
+ // Choose the exponentially converging series
+ return __polylog_exp_negative_real_part(__s,
+ std::complex<_Tp>(__w));
+ else if (__w < _Tp{6})
+ // The transition point chosen here, is quite arbitrary
+ // and needs more testing.
+ return __polylog_exp_pos(__s, __w);
+ else
+ // FIXME: The series should terminate
+ // after a finite number of terms.
+ return __polylog_exp_asymp(static_cast<_Tp>(__s),
+ std::complex<_Tp>(__w));
+ }
+ }
+
+ /**
+ * This treats the case where s is a negative integer.
+ *
+ * @param __s a negative integer.
+ * @param __w an arbitrary complex number
+ * @return the value of the polylogarith,.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_int_neg(int __s, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ if ((((-__s) & 1) == 0) && __gnu_cxx::__fpequal(std::real(__w), _Tp{0}))
+ {
+ // Now s is odd and w on the unit-circle.
+ auto __iw = imag(__w); //get imaginary part
+ auto __rem = std::remainder(__iw, _S_2pi);
+ if (__gnu_cxx::__fpequal(std::abs(__rem), _Tp{0.5L}))
+ // Due to: Li_{-n}(-1) + (-1)^n Li_{-n}(1/-1) = 0.
+ return _Tp{0};
+ else
+ // No asymptotic expansion available... check the reduction.
+ return __polylog_exp_neg(__s, std::complex<_Tp>(__w.real(), __rem));
+ }
+ else
+ {
+ if (std::real(__w) < -(_S_pi_2 + _S_pi / _Tp{5}) )
+ // Choose the exponentially converging series
+ return __polylog_exp_negative_real_part(__s, __w);
+ else if (std::real(__w) < _Tp{6}) // Arbitrary transition point...
+ // The reductions of the imaginary part yield the same results
+ // as Mathematica.
+ // Necessary to improve the speed of convergence.
+ return __polylog_exp_neg(__s, __clamp_pi(__w));
+ else
+ // Wikipedia says that this clamping is required for Wood's formula.
+ // FIXME: The series should terminate
+ // after a finite number of terms.
+ return __polylog_exp_asymp(static_cast<_Tp>(__s),
+ __clamp_0_m2pi(__w));
+ }
+ }
+
+ /**
+ * This treats the case where s is a negative integer and w is a real.
+ *
+ * @param __s a negative integer.
+ * @param __w the argument.
+ * @return the value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_int_neg(const int __s, _Tp __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ if (__w < -(_S_pi_2 + _S_pi / _Tp{5})) // Choose exp'ly converging series.
+ return __polylog_exp_negative_real_part(__s, std::complex<_Tp>(__w));
+ else if (__gnu_cxx::__fpequal(__w, _Tp{0}))
+ return std::numeric_limits<_Tp>::infinity();
+ else if (__w < _Tp{6}) // Arbitrary transition point...
+ return __polylog_exp_neg(__s, std::complex<_Tp>(__w));
+ else
+ // FIXME: The series should terminate
+ // after a finite number of terms.
+ return __polylog_exp_asymp(static_cast<_Tp>(__s),
+ std::complex<_Tp>(__w));
+ }
+
+ /**
+ * Return the polylog where s is a positive real value
+ * and for complex argument.
+ *
+ * @param __s A positive real number.
+ * @param __w the complex argument.
+ * @return The value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_real_pos(_Tp __s, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ auto __rw = __w.real();
+ auto __iw = __w.imag();
+ if (__fpreal(__w)
+ && __gnu_cxx::__fpequal(std::remainder(__iw, _S_2pi), _Tp{0}))
+ {
+ if (__s > _Tp{1})
+ return std::__detail::__riemann_zeta(__s);
+ else
+ return std::numeric_limits<_Tp>::infinity();
+ }
+ if (__rw < -(_S_pi_2 + _S_pi/_Tp{5})) // Choose exp'ly converging series.
+ return __polylog_exp_negative_real_part(__s, __w);
+ if (__rw < _Tp{6}) // arbitrary transition point
+ // The reductions of the imaginary part yield the same results
+ // as Mathematica then.
+ // Branch cuts??
+ return __polylog_exp_pos(__s, __clamp_pi(__w));
+ else
+ // Wikipedia says that this is required for Wood's formula
+ return __polylog_exp_asymp(__s, __clamp_0_m2pi(__w));
+ }
+
+ /**
+ * Return the polylog where s is a positive real value and the argument
+ * is real.
+ *
+ * @param __s A positive real number tht does not reduce to an integer.
+ * @param __w The real argument w.
+ * @return The value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_real_pos(_Tp __s, _Tp __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ if (__gnu_cxx::__fpequal(__w, _Tp{0}))
+ {
+ if (__s > _Tp{1})
+ return std::__detail::__riemann_zeta(__s);
+ else
+ return std::numeric_limits<_Tp>::infinity();
+ }
+ if (__w < -(_S_pi_2 + _S_pi / _Tp{5})) // Choose exp'ly converging series.
+ return __polylog_exp_negative_real_part(__s, __w);
+ if (__w < _Tp{6}) // arbitrary transition point
+ return __polylog_exp_pos(__s, std::complex<_Tp>(__w));
+ else
+ return __polylog_exp_asymp(__s, std::complex<_Tp>(__w));
+ }
+
+ /**
+ * Return the polylog where s is a negative real value
+ * and for complex argument.
+ * Now we branch depending on the properties of w in the specific functions
+ *
+ * @param __s A negative real value that does not reduce
+ * to a negative integer.
+ * @param __w The complex argument.
+ * @return The value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_real_neg(_Tp __s, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ auto __rw = __w.real();
+ auto __iw = __w.imag();
+ if (__rw < -(_S_pi_2 + _S_pi/_Tp{5})) // Choose exp'ly converging series.
+ return __polylog_exp_negative_real_part(__s, __w);
+ else if (__rw < 6) // arbitrary transition point
+ // The reductions of the imaginary part yield the same results
+ // as Mathematica then.
+ // Necessary to improve the speed of convergence.
+ // Branch cuts??
+ return __polylog_exp_neg(__s, __clamp_pi(__w));
+ else
+ // Wikipedia says that this is required for Wood's formula
+ return __polylog_exp_asymp(__s, __clamp_0_m2pi(__w));
+ }
+
+ /**
+ * Return the polylog where s is a negative real value and for real argument.
+ * Now we branch depending on the properties of w in the specific functions.
+ *
+ * @param __s A negative real value.
+ * @param __w A real argument.
+ * @return The value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog_exp_real_neg(_Tp __s, _Tp __w)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ if (__w < -(_S_pi_2 + _S_pi / _Tp{5})) // Choose exp'ly converging series.
+ return __polylog_exp_negative_real_part(__s, std::complex<_Tp>(__w));
+ else if (__w < _Tp{6}) // arbitrary transition point
+ return __polylog_exp_neg(__s, std::complex<_Tp>(__w));
+ else
+ return __polylog_exp_asymp(__s, std::complex<_Tp>(__w));
+ }
+
+ /**
+ * This is the frontend function which calculates @f$ Li_s(e^w) @f$
+ * First we branch into different parts depending on the properties of s.
+ * This function is the same irrespective of a real or complex w,
+ * hence the template parameter ArgType.
+ *
+ * @note: I *really* wish we could return a variant<Tp, std::complex<Tp>>.
+ *
+ * @param __s The real order.
+ * @param __w The real or complex argument.
+ * @return The real or complex value of Li_s(e^w).
+ */
+ template<typename _Tp, typename ArgType>
+ __gnu_cxx::__promote_fp_t<std::complex<_Tp>, ArgType>
+ __polylog_exp(_Tp __s, ArgType __w)
+ {
+ if (__isnan(__s) || __isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__s > _Tp{25}) // Cutoff chosen by some testing on the real axis.
+ return __polylog_exp_negative_real_part(__s, __w);
+ else if (__gnu_cxx::__fpequal<_Tp>(std::rint(__s), __s))
+ {
+ // In this branch of the if statement, s is an integer
+ int __p = int(std::lrint(__s));
+ if (__p > 0)
+ return __polylog_exp_int_pos(__p, __w);
+ else
+ return __polylog_exp_int_neg(__p, __w);
+ }
+ else
+ {
+ if (__s > _Tp{0})
+ return __polylog_exp_real_pos(__s, __w);
+ else
+ return __polylog_exp_real_neg(__s, __w);
+ }
+ }
+
+ /**
+ * Return the polylog Li_s(x) for two real arguments.
+ *
+ * @param __s The real index.
+ * @param __x The real argument.
+ * @return The complex value of the polylogarithm.
+ */
+ template<typename _Tp>
+ _Tp
+ __polylog(_Tp __s, _Tp __x)
+ {
+ if (__isnan(__s) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__gnu_cxx::__fpequal(__x, _Tp{0}))
+ return _Tp{0}; // According to Mathematica
+ else if (__x < _Tp{0})
+ { // Use the reflection formula to access negative values.
+ auto __xp = -__x;
+ auto __y = std::log(__xp);
+ return std::real(__polylog_exp(__s, _Tp{2} * __y)
+ * std::pow(_Tp{2}, _Tp{1} - __s)
+ - __polylog_exp(__s, __y));
+ }
+ else
+ {
+ auto __y = std::log(__x);
+ return std::real(__polylog_exp(__s, __y));
+ }
+ }
+
+ /**
+ * Return the polylog in those cases where we can calculate it.
+ *
+ * @param __s The real index.
+ * @param __w The complex argument.
+ * @return The complex value of the polylogarithm.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __polylog(_Tp __s, std::complex<_Tp> __w)
+ {
+ if (__isnan(__s) || __isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__gnu_cxx::__fpequal(std::imag(__w), _Tp{0}))
+ return __polylog(__s, std::real(__w));
+ else
+ return __polylog_exp(__s, std::log(__w));
+ }
+
+ /**
+ * Return the Hurwitz Zeta function for real s and complex a.
+ * This uses Jonquiere's identity:
+ * @f[
+ * \frac{(i2\pi)^s}{\Gamma(s)}\zeta(a,1-s) =
+ * Li_s(e^{i2\pi a}) + (-1)^s Li_s(e^{-i2\pi a})
+ * @f]
+ * @param __s The real argument
+ * @param __a The complex parameter
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __hurwitz_zeta_polylog(_Tp __s, std::complex<_Tp> __a)
+ {
+ using _Cmplx = std::complex<_Tp>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_2pi = __gnu_cxx::__math_constants<_Tp>::__2_pi;
+ constexpr auto _S_i2pi = _Cmplx{0, _S_2pi};
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+ if ((__a.imag() >= _Tp{0}
+ && (__a.real() >= _Tp{0} && __a.real() < _Tp{1}))
+ || (__a.imag() < _Tp{0}
+ && (__a.real() > _Tp{0} && __a.real() <= _Tp{1})))
+ {
+ _Tp __t = _Tp{1} - __s;
+ auto __lpe = __polylog_exp(__t, _S_i2pi * __a);
+ /// @todo This __hurwitz_zeta_polylog prefactor is prone to overflow.
+ /// positive integer orders s?
+ auto __thing = std::exp(_Cmplx(_Tp{0}, -_S_pi_2 * __t));
+ return __gamma(__t)
+ * std::pow(_S_2pi, -__t)
+ * (__lpe * __thing + std::conj(__lpe * __thing));
+ }
+ else
+ std::__throw_domain_error(__N("__hurwitz_zeta_polylog: Bad argument"));
+ }
+
+ /**
+ * Return the Dirichlet eta function.
+ * Currently, w must be real (complex type but negligible imaginary part.)
+ * Otherwise std::domain_error is thrown.
+ *
+ * @param __w The complex (but on-real-axis) argument.
+ * @return The complex Dirichlet eta function.
+ * @throw std::domain_error if the argument has a significant imaginary part.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __dirichlet_eta(std::complex<_Tp> __w)
+ {
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__gnu_cxx::__fpequal(std::imag(__w), _Tp{0}))
+ return -__polylog(__w.real(), _Tp{-1});
+ else
+ std::__throw_domain_error(__N("__dirichlet_eta: Bad argument"));
+ }
+
+ /**
+ * Return the Dirichlet eta function for real argument.
+ *
+ * @param __w The real argument.
+ * @return The Dirichlet eta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __dirichlet_eta(_Tp __w)
+ {
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return -std::real(__polylog(__w, _Tp{-1}));
+ }
+
+ /**
+ * Return the Dirichlet beta function.
+ * Currently, w must be real (complex type but negligible imaginary part.)
+ * Otherwise std::domain_error is thrown.
+ *
+ * @param __w The complex (but on-real-axis) argument.
+ * @return The Dirichlet Beta function of real argument.
+ * @throw std::domain_error if the argument has a significant imaginary part.
+ */
+ template<typename _Tp>
+ _Tp
+ __dirichlet_beta(std::complex<_Tp> __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__gnu_cxx::__fpequal(std::imag(__w), _Tp{0}))
+ return std::imag(__polylog(__w.real(), _S_i));
+ else
+ std::__throw_domain_error(__N("__dirichlet_beta: Bad argument."));
+ }
+
+ /**
+ * Return the Dirichlet beta function for real argument.
+ *
+ * @param __w The real argument.
+ * @return The Dirichlet Beta function of real argument.
+ */
+ template<typename _Tp>
+ _Tp
+ __dirichlet_beta(_Tp __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return std::imag(__polylog(__w, _S_i));
+ }
+
+ /**
+ * Return the Dirichlet lambda function for real argument.
+ *
+ * @param __w The real argument.
+ * @return The Dirichlet lambda function.
+ */
+ template<typename _Tp>
+ _Tp
+ __dirichlet_lambda(_Tp __w)
+ {
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else
+ return (std::__detail::__riemann_zeta(__w)
+ + __dirichlet_eta(__w)) / _Tp{2};
+ }
+
+ /**
+ * Return Clausen's function of integer order m and complex argument @c w.
+ * The notation and connection to polylog is from Wikipedia
+ *
+ * @param __m The non-negative integral order.
+ * @param __w The complex argument.
+ * @return The complex Clausen function.
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __clausen(unsigned int __m, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __ple = __polylog_exp(_Tp(__m), _S_i * __w);
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__m == 0)
+ std::__throw_domain_error(__N("__clausen: Non-positive order"));
+ else if (__m & 1)
+ return __ple;
+ else
+ return _S_i * std::conj(__ple);
+ }
+
+ /**
+ * Return Clausen's function of integer order m and real argument w.
+ * The notation and connection to polylog is from Wikipedia
+ *
+ * @param __m The integer order m >= 1.
+ * @param __w The real argument.
+ * @return The Clausen function.
+ */
+ template<typename _Tp>
+ _Tp
+ __clausen(unsigned int __m, _Tp __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __ple = __polylog_exp(_Tp(__m), _S_i * __w);
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__m == 0)
+ std::__throw_domain_error(__N("__clausen: Non-positive order"));
+ else if (__m & 1)
+ return std::real(__ple);
+ else
+ return std::imag(__ple);
+ }
+
+ /**
+ * Return Clausen's sine sum Sl_m for positive integer order m
+ * and complex argument w.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ *
+ * @param __m The integer order m >= 1.
+ * @param __w The complex argument.
+ * @return The Clausen sine sum Sl_m(w),
+ */
+ template<typename _Tp>
+ _Tp
+ __clausen_s(unsigned int __m, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __ple = __polylog_exp(_Tp(__m), _S_i * __w);
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__m == 0)
+ std::__throw_domain_error(__N("__clausen_s: Non-positive order"));
+ else if (__m & 1)
+ return std::imag(__ple);
+ else
+ return std::real(__ple);
+ }
+
+ /**
+ * Return Clausen's sine sum Sl_m for positive integer order m
+ * and real argument w.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ *
+ * @param __m The integer order m >= 1.
+ * @param __w The complex argument.
+ * @return The Clausen sine sum Sl_m(w),
+ */
+ template<typename _Tp>
+ _Tp
+ __clausen_s(unsigned int __m, _Tp __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __ple = __polylog_exp(_Tp(__m), _S_i * __w);
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__m == 0)
+ std::__throw_domain_error(__N("__clausen_s: Non-positive order"));
+ else if (__m & 1)
+ return std::imag(__ple);
+ else
+ return std::real(__ple);
+ }
+
+ /**
+ * Return Clausen's cosine sum Cl_m for positive integer order m
+ * and complex argument w.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ *
+ * @param __m The integer order m >= 1.
+ * @param __w The real argument.
+ * @return The Clausen cosine sum Cl_m(w),
+ */
+ template<typename _Tp>
+ _Tp
+ __clausen_c(unsigned int __m, std::complex<_Tp> __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __ple = __polylog_exp(_Tp(__m), _S_i * __w);
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__m == 0)
+ std::__throw_domain_error(__N("__clausen_c: Non-positive order"));
+ else if (__m & 1)
+ return std::real(__ple);
+ else
+ return std::imag(__ple);
+ }
+
+ /**
+ * Return Clausen's cosine sum Cl_m for positive integer order m
+ * and real argument w.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ *
+ * @param __m The integer order m >= 1.
+ * @param __w The real argument.
+ * @return The real Clausen cosine sum Cl_m(w),
+ */
+ template<typename _Tp>
+ _Tp
+ __clausen_c(unsigned int __m, _Tp __w)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __ple = __polylog_exp(_Tp(__m), _S_i * __w);
+ if (__isnan(__w))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__m == 0)
+ std::__throw_domain_error(__N("__clausen_c: Non-positive order"));
+ else if (__m & 1)
+ return std::real(__ple);
+ else
+ return std::imag(__ple);
+ }
+
+ /**
+ * Return the Fermi-Dirac integral of integer or real order s
+ * and real argument x.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ * @see http://dlmf.nist.gov/25.12.16
+ *
+ * @f[
+ * F_s(x) = \frac{1}{\Gamma(s+1)}\int_0^\infty \frac{t^s}{e^{t-s} + 1}dt
+ * = -Li_{s+1}(-e^x)
+ * @f]
+ *
+ * @param __s The order s > -1.
+ * @param __x The real argument.
+ * @return The real Fermi-Dirac cosine sum F_s(x),
+ */
+ template<typename _Sp, typename _Tp>
+ _Tp
+ __fermi_dirac(_Sp __s, _Tp __x)
+ {
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (__isnan(__s) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__s <= _Sp{-1})
+ std::__throw_domain_error(__N("__fermi_dirac: "
+ "Order must be greater than -1"));
+ else
+ return -std::real(__polylog_exp(__s + _Sp{1}, __x + _S_i * _S_pi));
+ }
+
+ /**
+ * Return the Bose-Einstein integral of integer or real order s
+ * and real argument x.
+ * @see https://en.wikipedia.org/wiki/Clausen_function
+ * @see http://dlmf.nist.gov/25.12.16
+ *
+ * @f[
+ * G_s(x) = \frac{1}{\Gamma(s+1)}\int_0^\infty \frac{t^s}{e^{t-s} - 1}dt
+ * = Li_{s+1}(e^x)
+ * @f]
+ *
+ * @param __s The order s >= 0.
+ * @param __x The real argument.
+ * @return The real Fermi-Dirac cosine sum G_s(x),
+ */
+ template<typename _Sp, typename _Tp>
+ _Tp
+ __bose_einstein(_Sp __s, _Tp __x)
+ {
+ if (__isnan(__s) || __isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__s <= _Sp{0} && __x < _Tp{0})
+ std::__throw_domain_error(__N("__bose_einstein: "
+ "Order must be greater than -1"));
+ else
+ return std::real(__polylog_exp(__s + _Sp{1}, __x));
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_POLYLOG_TCC
diff --git a/libstdc++-v3/include/bits/sf_theta.tcc b/libstdc++-v3/include/bits/sf_theta.tcc
new file mode 100644
index 00000000000..eb7af57eab2
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_theta.tcc
@@ -0,0 +1,506 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_theta.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_THETA_TCC
+#define _GLIBCXX_BITS_SF_THETA_TCC 1
+
+#pragma GCC system_header
+
+#include <vector>
+#include <tuple>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Compute and return the @f$ \theta_1 @f$ function by series expansion.
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_2_sum(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Val>();
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+ auto __sum = std::exp(-__nu * __nu / __x);
+ auto __sign = _Tp{-1};
+ for (auto __k = 1; __k < 20; ++__k)
+ {
+ auto __nup = __nu + _Tp(__k);
+ auto __termp = __sign * std::exp(-__nup * __nup / __x);
+ auto __num = __nu - _Tp(__k);
+ auto __termm = __sign * std::exp(-__num * __num / __x);
+ __sum += __termp + __termm;
+ __sign = -__sign;
+ if (std::abs(__termp) < _S_eps * std::abs(__sum)
+ && std::abs(__termm) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return __sum / std::sqrt(_S_pi * __x);
+ }
+
+ /**
+ * Compute and return the @f$ \theta_3 @f$ function by series expansion.
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_3_sum(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Val>();
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+ auto __sum = std::exp(-__nu * __nu / __x);
+ for (auto __k = 1; __k < 20; ++__k)
+ {
+ auto __nup = __nu + _Tp(__k);
+ auto __termp = std::exp(-__nup * __nup / __x);
+ auto __num = __nu - _Tp(__k);
+ auto __termm = std::exp(-__num * __num / __x);
+ __sum += __termp + __termm;
+ if (std::abs(__termp) < _S_eps * std::abs(__sum)
+ && std::abs(__termm) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return __sum / std::sqrt(_S_pi * __x);
+ }
+
+ /**
+ * Compute and return the @f$ \theta_2 @f$ function by series expansion.
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_2_asymp(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Val>();
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+ auto __sum = _Tp{0};
+ for (auto __k = 0; __k < 20; ++__k)
+ {
+ auto __thing = _Tp(2 * __k + 1) * _S_pi;
+ auto __cosarg = __nu * __thing;
+ auto __exparg = __thing * __thing * __x / _Tp{4};
+ auto __term = std::exp(-__exparg) * std::cos(__cosarg);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return _Tp{2} * __sum;
+ }
+
+ /**
+ * Compute and return the @f$ \theta_3 @f$ function by asymptotic series expansion.
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_3_asymp(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Val>();
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+ auto __sum = _Tp{0};
+ for (auto __k = 1; __k < 20; ++__k)
+ {
+ auto __thing = _Tp(2 * __k) * _S_pi;
+ auto __cosarg = __nu * __thing;
+ auto __exparg = __thing * __thing * __x / _Tp{4};
+ auto __term = std::exp(-__exparg) * std::cos(__cosarg);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ }
+ return _Tp{1} + _Tp{2} * __sum;
+ }
+
+ /**
+ * Return the exponential theta-2 function of period @c nu and argument @c x.
+ *
+ * The exponential theta-2 function is defined by
+ * @f[
+ * \theta_2(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(\nu + j)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_2(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+
+ if (__isnan(__nu) || __isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__x) <= _Tp{1} / _S_pi)
+ return __theta_2_sum(__nu, __x);
+ else
+ return __theta_2_asymp(__nu, __x);
+ }
+
+ /**
+ * Return the exponential theta-1 function of period @c nu and argument @c x.
+ *
+ * The Neville theta-1 function is defined by
+ * @f[
+ * \theta_1(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(\nu + j - 1/2)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_1(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+
+ if (__isnan(__nu) || __isnan(__x))
+ return _S_NaN;
+ else
+ return __theta_2(__nu - _Tp{0.5L}, __x);
+ }
+
+ /**
+ * Return the exponential theta-3 function of period @c nu and argument @c x.
+ *
+ * The exponential theta-3 function is defined by
+ * @f[
+ * \theta_3(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * \exp\left( \frac{-(\nu+j)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 1) argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_3(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+
+ if (__isnan(__nu) || __isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__x) <= _Tp{1} / _S_pi)
+ return __theta_3_sum(__nu, __x);
+ else
+ return __theta_3_asymp(__nu, __x);
+ }
+
+ /**
+ * Return the exponential theta-2 function of period @c nu and argument @c x.
+ *
+ * The exponential theta-2 function is defined by
+ * @f[
+ * \theta_2(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(\nu + j)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_4(_Tp __nu, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Val>::__pi;
+
+ if (__isnan(__nu) || __isnan(__x))
+ return _S_NaN;
+ else
+ return __theta_3(__nu + _Tp{0.5L}, __x);
+ }
+
+ /**
+ * Use MacLaurin series to calculate the elliptic nome
+ * given the , k.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellnome_series(_Tp __k)
+ {
+ auto __m = __k * __k;
+ return __m * ((_Tp{1} / _Tp{16})
+ + __m * ((_Tp{1} / _Tp{32})
+ + __m * ((_Tp{21} / _Tp{1024})
+ + __m * ((_Tp{31} / _Tp{2048})
+ + __m * (_Tp{6257} / _Tp{524288})))));
+ }
+
+ /**
+ * Use the arithmetic-geometric mean to calculate the elliptic nome
+ * given the , k.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellnome_k(_Tp __k)
+ {
+ constexpr auto _S_pi = _Tp{3.1415926535897932384626433832795029L};
+ auto __kp = std::sqrt((_Tp{1} - __k) * (_Tp{1} + __k));
+ auto __K = __comp_ellint_1(__k);
+ auto __Kp = __comp_ellint_1(__kp);
+ return std::exp(-_S_pi * __Kp / __K);
+ }
+
+ /**
+ * Return the elliptic nome given the modulus @c k.
+ */
+ template<typename _Tp>
+ _Tp
+ __ellnome(_Tp __k)
+ {
+ constexpr auto _S_eps = std::numeric_limits<_Tp>::epsilon();
+ if (__isnan(__k))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__ellnome:"
+ " argument k out of range"));
+ else if (__k < std::pow(_Tp{67} * _S_eps, _Tp{0.125L}))
+ return __ellnome_series(__k);
+ else
+ return __ellnome_k(__k);
+ }
+
+ /**
+ * Return the Neville @f$ \theta_s @f$ function
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_s(_Tp __k, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Val>::__pi_half;
+
+ if (__isnan(__k) || __isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__theta_s:"
+ " argument k out of range"));
+ else
+ {
+ auto __kc = std::sqrt((_Tp{1} - __k) * (_Tp{1} + __k));
+ auto _Kk = __comp_ellint_1(__k);
+ auto __q = __ellnome(__k);
+ return std::sqrt(_S_pi_2 / (__k * __kc * _Kk))
+ * __theta_1(__q, _S_pi_2 * __x / _Kk);
+ }
+ }
+
+ /**
+ * Return the Neville @f$ \theta_c @f$ function
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_c(_Tp __k, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Val>::__pi_half;
+
+ if (__isnan(__k) || __isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__theta_c:"
+ " argument k out of range"));
+ else
+ {
+ auto _Kk = __comp_ellint_1(__k);
+ auto __q = __ellnome(__k);
+ return std::sqrt(_S_pi_2 / (__k * _Kk))
+ * __theta_2(__q, _S_pi_2 * __x / _Kk);
+ }
+ }
+
+ /**
+ * Return the Neville @f$ \theta_d @f$ function
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_d(_Tp __k, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Val>::__pi_half;
+
+ if (__isnan(__k) || __isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__theta_d:"
+ " argument k out of range"));
+ else
+ {
+ auto _Kk = __comp_ellint_1(__k);
+ auto __q = __ellnome(__k);
+ return std::sqrt(_S_pi_2 / _Kk)
+ * __theta_3(__q, _S_pi_2 * __x / _Kk);
+ }
+ }
+
+ /**
+ * Return the Neville @f$ \theta_n @f$ function
+ */
+ template<typename _Tp>
+ _Tp
+ __theta_n(_Tp __k, _Tp __x)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Val>::__pi_half;
+
+ if (__isnan(__k) || __isnan(__x))
+ return _S_NaN;
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__theta_n:"
+ " argument k out of range"));
+ else
+ {
+ auto __kc = std::sqrt((_Tp{1} - __k) * (_Tp{1} + __k));
+ auto _Kk = __comp_ellint_1(__k);
+ auto __q = __ellnome(__k);
+ return std::sqrt(_S_pi_2 / (__kc * _Kk))
+ * __theta_4(__q, _S_pi_2 * __x / _Kk);
+ }
+ }
+
+ /**
+ * Return a tuple of the three primary Jacobi elliptic functions:
+ * @f$ sn(k, u), cn(k, u), dn(k, u) @f$.
+ */
+ template<typename _Tp>
+ std::tuple<_Tp, _Tp, _Tp>
+ __jacobi_sncndn(_Tp __k, _Tp __u)
+ {
+ using _Val = __num_traits_t<_Tp>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Val>();
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Val>();
+
+ if (__isnan(__k) || __isnan(__u))
+ return std::make_tuple(_S_NaN, _S_NaN, _S_NaN);
+ else if (std::abs(__k) > _Tp{1})
+ std::__throw_domain_error(__N("__jacobi_sncndn:"
+ " argument k out of range"));
+ else if (std::abs(_Tp{1} - __k) < _Tp{2} * _S_eps)
+ {
+ auto __sn = std::tanh(__u);
+ auto __cn = _Tp{1} / std::cosh(__u);
+ auto __dn = __cn;
+ return std::make_tuple(__sn, __cn, __dn);
+ }
+ else if (std::abs(__k) < _Tp{2} * _S_eps)
+ {
+ auto __sn = std::sin(__u);
+ auto __cn = std::cos(__u);
+ auto __dn = _Tp{1};
+ return std::make_tuple(__sn, __cn, __dn);
+ }
+ else
+ {
+ constexpr auto _S_CA = std::sqrt(_S_eps);
+ constexpr auto _S_N = 100;
+ std::vector<_Tp> __m;
+ std::vector<_Tp> __n;
+ __m.reserve(20);
+ __n.reserve(20);
+ _Tp __c, __d;
+ auto __mc = _Tp{1} - __k * __k;
+ bool __bo = (__mc < _Tp{0});
+ if (__bo)
+ {
+ __d = _Tp{1} - __mc;
+ __mc /= -_Tp{1} / __d;
+ __u *= (__d = std::sqrt(__d));
+ }
+ auto __a = _Tp{1};
+ auto __dn = _Tp{1};
+ auto __l = _S_N;
+ for (auto __i = 0; __i < _S_N; ++__i)
+ {
+ __l = __i;
+ __m.push_back(__a);
+ __n.push_back(__mc = std::sqrt(__mc));
+ __c = 0.5 * (__a + __mc);
+ if (std::abs(__a - __mc) <= _S_CA * __a)
+ break;
+ __mc *= __a;
+ __a = __c;
+ }
+ __u *= __c;
+ auto __sn = std::sin(__u);
+ auto __cn = std::cos(__u);
+ if (__sn != _Tp{0})
+ {
+ __a = __cn / __sn;
+ __c *= __a;
+ for (auto __ii = __l; __ii + 1 >= 1; --__ii)
+ {
+ _Tp __b = __m[__ii];
+ __a *= __c;
+ __c *= (__dn);
+ __dn = (__n[__ii] + __a) / (__b + __a);
+ __a = __c / __b;
+ }
+ __a = _Tp{1} / std::hypot(_Tp{1}, __c);
+ __sn = std::copysign(__a, __sn);
+ __cn = __c * __sn;
+ }
+ if (__bo)
+ {
+ __a = __dn;
+ __dn = __cn;
+ __cn = __a;
+ __sn /= __d;
+ }
+ return std::make_tuple(__sn, __cn, __dn);
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_THETA_TCC
diff --git a/libstdc++-v3/include/bits/sf_trig.tcc b/libstdc++-v3/include/bits/sf_trig.tcc
new file mode 100644
index 00000000000..e6c60ab70d5
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_trig.tcc
@@ -0,0 +1,414 @@
+// TR29124 math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_trig.tcc
+ * This is an internal header file, included by other library headers.
+ * You should not attempt to use it directly.
+ */
+
+#ifndef _GLIBCXX_BITS_SF_TRIG_TCC
+#define _GLIBCXX_BITS_SF_TRIG_TCC 1
+
+#pragma GCC system_header
+
+#include <bits/complex_util.h>
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * A struct to store a cosine and a sine value.
+ */
+ template<typename _Tp>
+ struct __sincos_t
+ {
+ _Tp sin_value;
+ _Tp cos_value;
+ };
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Return the reperiodized sine of argument x:
+ * @f[
+ * \sin_\pi(x) = \sin(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __sin_pi(_Tp __x)
+ {
+ constexpr _Tp _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (std::isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return -__sin_pi(-__x);
+ else if (__x < _Tp{0.5L})
+ return std::sin(__x * _S_pi);
+ else if (__x < _Tp{1})
+ return std::sin((_Tp{1} - __x) * _S_pi);
+ else
+ {
+ auto __nu = std::floor(__x);
+ auto __arg = __x - __nu;
+ auto __sign = (int(__nu) & 1) == 1 ? -1 : +1;
+ auto __sinval = (__arg < _Tp{0.5L})
+ ? __sin_pi(__arg)
+ : __sin_pi(_Tp{1} - __arg);
+ return __sign * __sinval;
+ }
+ }
+
+ /**
+ * Return the reperiodized hyperbolic sine of argument x:
+ * @f[
+ * \sinh_\pi(x) = \sinh(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __sinh_pi(_Tp __x)
+ {
+ constexpr _Tp _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (std::isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return -__sinh_pi(-__x);
+ else
+ std::sinh(_S_pi * __x);
+ }
+
+ /**
+ * Return the reperiodized cosine of argument x:
+ * @f[
+ * \cos_\pi(x) = \cos(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __cos_pi(_Tp __x)
+ {
+ constexpr _Tp _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (std::isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return __cos_pi(-__x);
+ else if (__x < _Tp{0.5L})
+ return std::cos(__x * _S_pi);
+ else if (__x < _Tp{1})
+ return -std::cos((_Tp{1} - __x) * _S_pi);
+ else
+ {
+ auto __nu = std::floor(__x);
+ auto __arg = __x - __nu;
+ auto __sign = (int(__nu) & 1) == 1 ? -1 : +1;
+ return __sign * __cos_pi(__arg);
+ }
+ }
+
+ /**
+ * Return the reperiodized hyperbolic cosine of argument x:
+ * @f[
+ * \cosh_\pi(x) = \cosh(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __cosh_pi(_Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ if (std::isnan(__x))
+ return std::numeric_limits<_Tp>::quiet_NaN();
+ else if (__x < _Tp{0})
+ return __cosh_pi(-__x);
+ else
+ return std::cosh(_S_pi * __x);
+ }
+
+ /**
+ * Return the reperiodized tangent of argument x:
+ * @f[
+ * \tan_pi(x) = \tan(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __tan_pi(_Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ return std::tan(_S_pi * (__x - std::floor(__x)));
+ }
+
+ /**
+ * Return the reperiodized hyperbolic tangent of argument x:
+ * @f[
+ * \tanh_\pi(x) = \tanh(\pi x)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __tanh_pi(_Tp __x)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ return std::tanh(_S_pi * __x);
+ }
+
+ /**
+ * Return the reperiodized sine of complex argument z:
+ * @f[
+ * \sin_\pi(z) = \sin(\pi z)
+ * = \sin_\pi(x) \cosh_\pi(y) + i \cos_\pi(x) \sinh_\pi(y)
+ * @f]
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sin_pi(std::complex<_Tp> __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __x = std::real(__z);
+ auto __y = std::imag(__z);
+ return __sin_pi(__x) * std::cosh(_S_pi * __y)
+ + _S_i * __cos_pi(__x) * std::sinh(_S_pi * __y);
+ }
+
+ /**
+ * Return the reperiodized hyperbolic sine of complex argument z:
+ * @f[
+ * \sinh_\pi(z) = \sinh(\pi z)
+ * = \sinh(\pi x) \cos_\pi(y) + i \cosh(\pi x) \sin_\pi(y)
+ * @f]
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __sinh_pi(std::complex<_Tp> __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __x = std::real(__z);
+ auto __y = std::imag(__z);
+ return std::sinh(_S_pi * __x) * __cos_pi(__y)
+ + _S_i * std::cosh(_S_pi * __x) * __sin_pi(__y);
+ }
+
+ /**
+ * Return the reperiodized cosine of complex argument z:
+ * \cos_\pi(z) = \cos(\pi z)
+ * = \cos_\pi(x) \cosh_\pi(y) - i \sin_\pi(x) \sinh_\pi(y)
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cos_pi(std::complex<_Tp> __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __x = std::real(__z);
+ auto __y = std::imag(__z);
+ return __cos_pi(__x) * std::cosh(_S_pi * __y)
+ - _S_i * __sin_pi(__x) * std::sinh(_S_pi * __y);
+ }
+
+ /**
+ * Return the reperiodized hyperbolic cosine of complex argument z:
+ * \cosh_\pi(z) = \cosh_\pi(z)
+ * = \cosh_\pi(x) \cos_\pi(y) + i \sinh_\pi(x) \sin_\pi(y)
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __cosh_pi(std::complex<_Tp> __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __x = std::real(__z);
+ auto __y = std::imag(__z);
+ return std::cosh(_S_pi * __x) * __cos_pi(__y)
+ + _S_i * std::sinh(_S_pi * __x) * __sin_pi(__y);
+ }
+
+ /**
+ * Return the reperiodized tangent of complex argument z:
+ * @f[
+ * \tan_\pi(z) = \tan(\pi z)
+ * = \frac{\tan_\pi(x) + i \tanh_\pi(y)}{1 - i \tan_\pi(x) \tanh_\pi(y)}
+ * @f]
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __tan_pi(std::complex<_Tp> __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __x = std::real(__z);
+ auto __y = std::imag(__z);
+ auto __tan = __tan_pi(__x);
+ auto __tanh = std::tanh(_S_pi * __y);
+ return (__tan + _S_i * __tanh) / (1 - _S_i * __tan * __tanh);
+ }
+
+ /**
+ * Return the reperiodized hyperbolic tangent of complex argument z:
+ * @f[
+ * \tanh_\pi(z) = \tanh(\pi z)
+ * = \frac{\tanh_\pi(x) + i \tan_\pi(y)}{1 + i \tanh_\pi(x) \tan_\pi(y)}
+ * @f]
+ */
+ template<typename _Tp>
+ std::complex<_Tp>
+ __tanh_pi(std::complex<_Tp> __z)
+ {
+ using _Val = _Tp;
+ using _Real = std::__detail::__num_traits_t<_Val>;
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_i = std::complex<_Tp>{0, 1};
+ auto __x = std::real(__z);
+ auto __y = std::imag(__z);
+ auto __tanh = std::tanh(_S_pi * __x);
+ auto __tan = __tan_pi(__y);
+ return (__tanh + _S_i * __tan) / (1 + _S_i * __tanh * __tan);
+ }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__sincos_t<_Tp>
+ __sincos(_Tp __x)
+ { return __gnu_cxx::__sincos_t<_Tp>{std::sin(__x), std::cos(__x)}; }
+
+ /**
+ *
+ */
+ template<>
+ inline __gnu_cxx::__sincos_t<float>
+ __sincos(float __x)
+ {
+ float __sin, __cos;
+ __builtin_sincosf(__x, &__sin, &__cos);
+ return __gnu_cxx::__sincos_t<float>{__sin, __cos};
+ }
+
+ /**
+ *
+ */
+ template<>
+ inline __gnu_cxx::__sincos_t<double>
+ __sincos(double __x)
+ {
+ double __sin, __cos;
+ __builtin_sincos(__x, &__sin, &__cos);
+ return __gnu_cxx::__sincos_t<double>{__sin, __cos};
+ }
+
+ /**
+ *
+ */
+ template<>
+ inline __gnu_cxx::__sincos_t<long double>
+ __sincos(long double __x)
+ {
+ long double __sin, __cos;
+ __builtin_sincosl(__x, &__sin, &__cos);
+ return __gnu_cxx::__sincos_t<long double>{__sin, __cos};
+ }
+
+ /**
+ * Reperiodized sincos.
+ */
+ template<typename _Tp>
+ __gnu_cxx::__sincos_t<_Tp>
+ __sincos_pi(_Tp __x)
+ {
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Tp>::__pi;
+ constexpr auto _S_NaN = std::numeric_limits<_Tp>::quiet_NaN();
+ if (std::isnan(__x))
+ return __gnu_cxx::__sincos_t<_Tp>{_S_NaN, _S_NaN};
+ else if (__x < _Tp{0})
+ {
+ __gnu_cxx::__sincos_t<_Tp> __tempsc = __sincos_pi(-__x);
+ return __gnu_cxx::__sincos_t<_Tp>{-__tempsc.sin_value,
+ __tempsc.cos_value};
+ }
+ else if (__x < _Tp{0.5L})
+ return __sincos(_S_pi * __x);
+ else if (__x < _Tp{1})
+ {
+ __gnu_cxx::__sincos_t<_Tp>
+ __tempsc = __sincos(_S_pi * (_Tp{1} - __x));
+ return __gnu_cxx::__sincos_t<_Tp>{__tempsc.sin_value,
+ -__tempsc.cos_value};
+ }
+ else
+ {
+ auto __nu = std::floor(__x);
+ auto __arg = __x - __nu;
+ auto __sign = (int(__nu) & 1) == 1 ? _Tp{-1} : _Tp{+1};
+
+ auto __sinval = (__arg < _Tp{0.5L})
+ ? std::sin(_S_pi * __arg)
+ : std::sin(_S_pi * (_Tp{1} - __arg));
+ auto __cosval = std::cos(_S_pi * __arg);
+ return __gnu_cxx::__sincos_t<_Tp>{__sign * __sinval,
+ __sign * __cosval};
+ }
+ }
+
+ /**
+ * Reperiodized complex constructor.
+ */
+ template<typename _Tp>
+ inline std::complex<_Tp>
+ __polar_pi(_Tp __rho, _Tp __phi_pi)
+ {
+ __gnu_cxx::__sincos_t<_Tp> __sc = __sincos_pi(__phi_pi);
+ return std::complex<_Tp>(__rho * __sc.cos_value, __rho * __sc.sin_value);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_TRIG_TCC
diff --git a/libstdc++-v3/include/bits/sf_trigint.tcc b/libstdc++-v3/include/bits/sf_trigint.tcc
new file mode 100644
index 00000000000..dd11b27b59a
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_trigint.tcc
@@ -0,0 +1,261 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_trigint.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SF_TRIGINT_TCC
+#define _GLIBCXX_BITS_SF_TRIGINT_TCC 1
+
+#pragma GCC system_header
+
+#include <complex>
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ enum
+ {
+ SININT,
+ COSINT
+ };
+
+ /**
+ * @brief This function computes the sine @f$ Si(x) @f$
+ * and cosine @f$ Ci(x) @f$ integrals by continued fraction
+ * for positive argument.
+ */
+ template<typename _Tp>
+ void
+ __sincosint_cont_frac(_Tp __t, _Tp& _Si, _Tp& _Ci)
+ {
+ constexpr auto _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_fp_min = __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+
+ // Evaluate Ci and Si by Lentz's modified method of continued fractions.
+ std::complex<_Tp> __b(_Tp{1}, __t);
+ std::complex<_Tp> __c(_Tp{1} / _S_fp_min);
+ std::complex<_Tp> __d(_Tp{1} / __b);
+ std::complex<_Tp> __h(__d);
+ int __i = 2;
+ while (true)
+ {
+ auto __a = -_Tp(__i - 1) * _Tp(__i - 1);
+ __b += _Tp{2};
+ __d = _Tp{1} / (__a * __d + __b);
+ __c = __b + __a / __c;
+ std::complex<_Tp> __del = __c * __d;
+ __h *= __del;
+ if (std::abs(__del - _Tp{1}) < _S_eps)
+ break;
+ if (__i > _S_max_iter)
+ std::__throw_runtime_error(__N("__sincosint_cont_frac: "
+ "continued fraction evaluation failed"));
+ ++__i;
+ }
+ __h *= std::polar(_Tp{1}, -__t);
+ _Ci = -__h.real();
+ _Si = _S_pi_2 + __h.imag();
+
+ return;
+ }
+
+
+ /**
+ * @brief This function computes the sine @f$ Si(x) @f$
+ * and cosine @f$ Ci(x) @f$ integrals by series summation
+ * for positive argument.
+ */
+ template<typename _Tp>
+ void
+ __sincosint_series(_Tp __t, _Tp& _Si, _Tp& _Ci)
+ {
+ constexpr auto _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_fp_min = __gnu_cxx::__min<_Tp>();
+ constexpr auto _S_gamma_e
+ = __gnu_cxx::__math_constants<_Tp>::__gamma_e;
+
+ // Evaluate Ci and Si by series simultaneously.
+ _Tp __sumc(0), __sums(0);
+ if (__t * __t < _S_fp_min)
+ {
+ // Avoid underflow.
+ __sumc = _Tp{0};
+ __sums = __t;
+ }
+ else
+ {
+ // Evaluate Si and Ci by series expansion.
+ _Tp __sum(0);
+ _Tp __sign(1), __fact(1);
+ bool __odd = true;
+ unsigned int __k = 1;
+ while (true)
+ {
+ __fact *= __t / __k;
+ _Tp __term = __fact / __k;
+ __sum += __sign * __term;
+ _Tp __err = __term / std::abs(__sum);
+ if (__odd)
+ {
+ __sign = -__sign;
+ __sums = __sum;
+ __sum = __sumc;
+ }
+ else
+ {
+ __sumc = __sum;
+ __sum = __sums;
+ }
+ if (__err < _S_eps)
+ break;
+ __odd = !__odd;
+ ++__k;
+ if (__k > _S_max_iter)
+ std::__throw_runtime_error(__N("__sincosint_series: "
+ "series evaluation failed"));
+ }
+ }
+ _Si = __sums;
+ _Ci = _S_gamma_e + std::log(__t) + __sumc;
+
+ return;
+ }
+
+
+ /**
+ * @brief This function computes the sine @f$ Si(x) @f$
+ * and cosine @f$ Ci(x) @f$ integrals by asymptotic series summation
+ * for positive argument.
+ *
+ * The asymptotic series is very good for x > 50.
+ */
+ template<typename _Tp>
+ void
+ __sincosint_asymp(_Tp __t, _Tp& _Si, _Tp& _Ci)
+ {
+ constexpr auto _S_max_iter = 100;
+ constexpr auto _S_eps = _Tp{5} * __gnu_cxx::__epsilon<_Tp>();
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Tp>::__pi_half;
+
+ auto __invt = _Tp{1} / __t;
+ auto __term = _Tp{1}; // 0!
+ auto __sume = _Tp{__term};
+ __term *= __invt; // 1! / t
+ auto __sumo = _Tp{__term};
+ auto __sign = _Tp{1};
+ auto __even = true;
+ auto __k = 2;
+ while (true)
+ {
+ __term *= __k * __invt;
+
+ if (__even)
+ {
+ __sign = -__sign;
+ __sume += __sign * __term;
+
+ }
+ else
+ {
+ __sumo += __sign * __term;
+ if (__term / std::abs(__sumo) < _S_eps)
+ break;
+ }
+
+ __even = !__even;
+
+ if (__k > _S_max_iter)
+ std::__throw_runtime_error(__N("__sincosint_asymp: "
+ "Series evaluation failed"));
+ ++__k;
+ }
+
+ _Si = _S_pi_2
+ - std::cos(__t) * __invt * __sume
+ - std::sin(__t) * __invt * __sumo;
+ _Ci = std::sin(__t) * __invt * __sume
+ - std::cos(__t) * __invt * __sumo;
+
+ return;
+ }
+
+
+ /**
+ * @brief This function returns the sine @f$ Si(x) @f$
+ * and cosine @f$ Ci(x) @f$ integrals as a @c pair.
+ *
+ * The sine integral is defined by:
+ * @f[
+ * Si(x) = \int_0^x dt \frac{\sin(t)}{t}
+ * @f]
+ *
+ * The cosine integral is defined by:
+ * @f[
+ * Ci(x) = \gamma_E + \log(x) + \int_0^x dt \frac{\cos(t) - 1}{t}
+ * @f]
+ */
+ template<typename _Tp>
+ std::pair<_Tp, _Tp>
+ __sincosint(_Tp __x)
+ {
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Tp>();
+ if (__isnan(__x))
+ return std::make_pair(_S_NaN, _S_NaN);
+
+ auto __t = std::abs(__x);
+ _Tp _Ci, _Si;
+ if (__t == _Tp{0})
+ {
+ _Si = _Tp{0};
+ _Ci = -__gnu_cxx::__infinity<_Tp>();
+ }
+ else if (__t > _Tp{1000}) // Check this!
+ __sincosint_asymp(__t, _Si, _Ci);
+ else if (__t > _Tp{2})
+ __sincosint_cont_frac(__t, _Si, _Ci);
+ else
+ __sincosint_series(__t, _Si, _Ci);
+
+ if (__x < _Tp{0})
+ _Si = -_Si;
+
+ return std::make_pair(_Si, _Ci);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_TRIGINT_TCC
diff --git a/libstdc++-v3/include/bits/sf_zeta.tcc b/libstdc++-v3/include/bits/sf_zeta.tcc
new file mode 100644
index 00000000000..a324661855a
--- /dev/null
+++ b/libstdc++-v3/include/bits/sf_zeta.tcc
@@ -0,0 +1,761 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/sf_zeta.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+// Written by Edward Smith-Rowland and Florian Goth
+//
+// References:
+// (1) Handbook of Mathematical Functions,
+// Ed. by Milton Abramowitz and Irene A. Stegun,
+// Dover Publications, New-York, Section 5, pp. 807-808.
+// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
+// (3) Gamma, Exploring Euler's Constant, Julian Havil,
+// Princeton, 2003.
+// (4) David C. Wood, "The Computation of Polylogarithms."
+
+#ifndef _GLIBCXX_BITS_SF_ZETA_TCC
+#define _GLIBCXX_BITS_SF_ZETA_TCC 1
+
+#pragma GCC system_header
+
+#include <ext/math_const.h>
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+// Implementation-space details.
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+
+ /**
+ * Coefficients for Euler-Maclaurin summation of zeta functions.
+ * @f[
+ * B_{2j} / (2j)!
+ * @f]
+ * where @f$ B_k @f$ are the Bernoulli numbers.
+ */
+ constexpr size_t _Num_Euler_Maclaurin_zeta = 100;
+ constexpr long double
+ _S_Euler_Maclaurin_zeta[_Num_Euler_Maclaurin_zeta]
+ {
+ 1.00000000000000000000000000000000000L,
+ 8.33333333333333333333333333333333293e-02L,
+ -1.38888888888888888888888888888888875e-03L,
+ 3.30687830687830687830687830687830609e-05L,
+ -8.26719576719576719576719576719576597e-07L,
+ 2.08767569878680989792100903212014296e-08L,
+ -5.28419013868749318484768220217955604e-10L,
+ 1.33825365306846788328269809751291227e-11L,
+ -3.38968029632258286683019539124944218e-13L,
+ 8.58606205627784456413590545042562615e-15L,
+ -2.17486869855806187304151642386591768e-16L,
+ 5.50900282836022951520265260890225438e-18L,
+ -1.39544646858125233407076862640635480e-19L,
+ 3.53470703962946747169322997780379902e-21L,
+ -8.95351742703754684639940801672890898e-23L,
+ 2.26795245233768305922449726817928506e-24L,
+ -5.74479066887220244232839527972348697e-26L,
+ 1.45517247561486490107622443104134417e-27L,
+ -3.68599494066531017606286927671534186e-29L,
+ 9.33673425709504466636710365024250844e-31L,
+ -2.36502241570062993304902926977940878e-32L,
+ 5.99067176248213430064218240871649208e-34L,
+ -1.51745488446829026064464819837699250e-35L,
+ 3.84375812545418822940606216740290214e-37L,
+ -9.73635307264669102780496423687655647e-39L,
+ 2.46624704420068095513732412234574675e-40L,
+ -6.24707674182074368796151949260113716e-42L,
+ 1.58240302446449142838660289637807111e-43L,
+ -4.00827368594893596494573716493578672e-45L,
+ 1.01530758555695563022273865751378251e-46L,
+ -2.57180415824187174746079460115444631e-48L,
+ 6.51445603523381492510893884688687796e-50L,
+ -1.65013099068965245381972311645983560e-51L,
+ 4.17983062853947589044505904302589394e-53L,
+ -1.05876346677029087587739692698831756e-54L,
+ 2.68187919126077066314325024787533130e-56L,
+ -6.79327935110742120171687695308170512e-58L,
+ 1.72075776166814048850302218744398370e-59L,
+ -4.35873032934889383811051833724115685e-61L,
+ 1.10407929036846667370868730253333297e-62L,
+ -2.79666551337813450363217687544853825e-64L,
+ 7.08403650167947018923360554701085951e-66L,
+ -1.79440740828922406419836715043711635e-67L,
+ 4.54528706361109610084319503460215356e-69L,
+ -1.15133466319820517965514570874684656e-70L,
+ 2.91636477109236135051215065347539762e-72L,
+ -7.38723826349733755172097357215101415e-74L,
+ 1.87120931176379530341655669167307802e-75L,
+ -4.73982855776179939823365705874837915e-77L,
+ 1.20061259933545065010289119344900538e-78L,
+ -3.04118724151429237818089382050570806e-80L,
+ 7.70341727470510626032951412805395999e-82L,
+ -1.95129839090988306787181681770634078e-83L,
+ 4.94269656515946146653024823540482418e-85L,
+ -1.25199966591718479000903037235065000e-86L,
+ 3.17135220176351545507490909160914066e-88L,
+ -8.03312897073533444702820185587950603e-90L,
+ 2.03481533916614656707738578184657923e-91L,
+ -5.15424746644747384952223952829841139e-93L,
+ 1.30558613521494672211652811590429162e-94L,
+ -3.30708831417509124211476473245870569e-96L,
+ 8.37695256004909128671576487001515732e-98L,
+ -2.12190687174971376532740302523869392e-99L,
+ 5.37485289561228024546639030950850747e-101L,
+ -1.36146614321720693646766878619458764e-102L,
+ 3.44863402799339902711847245019887448e-104L,
+ -8.73549204163835504185857147126132564e-106L,
+ 2.21272598339254970369646016351296266e-107L,
+ -5.60490039283722415865004549966830368e-109L,
+ 1.41973785499917876418113219390120402e-110L,
+ -3.59623799825876265563506189711913868e-112L,
+ 9.10937726607823184392152343960921788e-114L,
+ -2.30743221710912328319788632553096580e-115L,
+ 5.84479408529900198086678715736051924e-117L,
+ -1.48050363717057449175295580276805879e-118L,
+ 3.75015952262271968009868219553161640e-120L,
+ -9.49926504199295827433414434212738749e-122L,
+ 2.40619194446751986855735721071770656e-123L,
+ -6.09495539710268473564828955326838575e-125L,
+ 1.54387023770424714174247152273407761e-126L,
+ -3.91066899685929231015496868644244724e-128L,
+ 9.90584028987942974230798861783873238e-130L,
+ -2.50917865785635531226030684021698888e-131L,
+ 6.35582378960245978851062983907498289e-133L,
+ -1.60994897346162503541124270943910111e-134L,
+ 4.07804838987246223591940353095558419e-136L,
+ -1.03298172453151901860990367375763718e-137L,
+ 2.61657327526092016567608044513104821e-139L,
+ -6.62785753340862278242754283133858879e-141L,
+ 1.67885592574436730038021560419761003e-142L,
+ -4.25259173903430060933988427590406140e-144L,
+ 1.07719407136645728953530432238003752e-145L,
+ -2.72856445808395795763235897809610861e-147L,
+ 6.91153451343701367068428806267885056e-149L,
+ -1.75071214421576824424282262560183841e-150L,
+ 4.43460566672391957275357495883452114e-152L,
+ -1.12329873784871496672434722468912147e-153L,
+ 2.84534894256939708475369589042384123e-155L,
+ -7.20735306841513677412535382503699916e-157L,
+ 1.82564385955014175253212078464905862e-158L
+ };
+
+ /**
+ * @brief Compute the dilogarithm function @f$ Li_2(x) @f$
+ * by summation for x <= 1.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * Li_2(x) = \sum_{k=1}^{\infty} \frac{1}{k^{s}} for s > 1
+ * @f]
+ * For |x| near 1 use the reflection formulae:
+ * @f[
+ * Li_2(-x) + Li_2(1-x) = \frac{\pi^2}{6} - \ln(x) \ln(1-x)
+ * @f]
+ * @f[
+ * Li_2(-x) - Li_2(1-x) - \frac{1}{2}Li_2(1-x^2)
+ * = -\frac{\pi^2}{12} - \ln(x) \ln(1-x)
+ * @f]
+ * For x < 1 use the reflection formula:
+ * @f[
+ * Li_2(1-x) - Li_2(1-\frac{1}{1-x}) - \frac{1}{2}(\ln(x))^2
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __dilog(_Tp __x)
+ {
+ constexpr unsigned long long _S_maxit = 100000ULL;
+ constexpr _Tp _S_eps = 10 * __gnu_cxx::__epsilon<_Tp>();
+ constexpr _Tp _S_pipio6
+ = __gnu_cxx::__math_constants<_Tp>::__pi_sqr_div_6;
+ if (__isnan(__x))
+ return __gnu_cxx::__quiet_NaN<_Tp>();
+ else if (__x > _Tp{+1})
+ std::__throw_range_error(__N("dilog: argument greater than one"));
+ else if (__x < _Tp{-1})
+ {
+ auto __lnfact = std::log(_Tp{1} - __x);
+ return -__dilog(_Tp{1} - _Tp{1} / (_Tp{1} - __x))
+ - _Tp{0.5L} * __lnfact * __lnfact;
+ }
+ else if (__x == _Tp{1})
+ return _S_pipio6;
+ else if (__x == -_Tp{1})
+ return -_Tp{0.5L} * _S_pipio6;
+ else if (__x > _Tp{0.5L})
+ return _S_pipio6 - std::log(__x) * std::log(_Tp{1} - __x)
+ - __dilog(_Tp{1} - __x);
+ else if (__x < -_Tp{0.5L})
+ return -_Tp{0.5L} * _S_pipio6 - std::log(_Tp{1} + __x) * std::log(-__x)
+ + __dilog(_Tp{1} + __x) - __dilog(_Tp{1} - __x * __x);
+ else
+ {
+ _Tp __sum = 0;
+ _Tp __fact = 1;
+ for (auto __i = 1ULL; __i < _S_maxit; ++__i)
+ {
+ __fact *= __x;
+ auto __term = __fact / (__i * __i);
+ __sum += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__sum))
+ break;
+ if (__i + 1 == _S_maxit)
+ std::__throw_runtime_error(__N("__dilog: sum failed"));
+ }
+ return __sum;
+ }
+ }
+
+
+ /**
+ * @brief Compute the Riemann zeta function @f$ \zeta(s) @f$
+ * by summation for s > 1.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} \frac{1}{k^{s}} for s > 1
+ * @f]
+ * For s < 1 use the reflection formula:
+ * @f[
+ * \zeta(s) = 2^s \pi^{s-1} \Gamma(1-s) \zeta(1-s)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_sum(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ // A user shouldn't get to this.
+ if (std::real(__s) < _Real{1})
+ std::__throw_domain_error(__N("__riemann_zeta_sum: "
+ "Bad argument in zeta sum."));
+
+ constexpr unsigned int _S_max_iter = 10000;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ auto __zeta = _Val{1};
+ for (unsigned int __k = 2; __k < _S_max_iter; ++__k)
+ {
+ auto __term = std::pow(_Val(__k), -__s);
+ __zeta += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__zeta)
+ || std::abs(__term) < _S_eps
+ && std::abs(__zeta) < _Real{100} * _S_eps)
+ break;
+ }
+
+ return __zeta;
+ }
+
+
+ /**
+ * @brief Evaluate the Riemann zeta function @f$ \zeta(s) @f$
+ * by an alternate series for s > 0.
+ *
+ * This is a specialization of the code for the Hurwitz zeta function.
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_euler_maclaurin(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr auto _S_N = 10 + __gnu_cxx::__digits10<_Real>() / _Tp{2};
+ constexpr auto _S_jmax = 99;
+
+ const auto __pmax = std::pow(_Val{_S_N + 1}, -__s);
+ const auto __denom = _Val{_S_N + 1} * _Val{_S_N + 1};
+ auto __ans = __pmax * (_Val{_S_N + 1} / (__s - _Val{1}) + _Val{0.5L});
+ for (auto __k = 0; __k < _S_N; ++__k)
+ __ans += std::pow(_Val(__k + 1), -__s);
+
+ auto __fact = __pmax * __s / _Val{_S_N + 1};
+ auto __delta_prev = __gnu_cxx::__max<_Real>();
+ for (auto __j = 0; __j <= _S_jmax; ++__j)
+ {
+ auto __delta = _S_Euler_Maclaurin_zeta[__j + 1] * __fact;
+ if (std::abs(__delta) > __delta_prev)
+ break;
+ __delta_prev = std::abs(__delta);
+ __ans += __delta;
+ if (std::abs(__delta) < _Real{0.5L} * _S_eps * std::abs(__ans)
+ || std::abs(__delta) < _S_eps
+ && std::abs(__ans) < _Real{100} * _S_eps)
+ break;
+ __fact *= (__s + _Val(2 * __j + 1)) * (__s + _Val(2 * __j + 2))
+ / __denom;
+ }
+
+ return __ans;
+ }
+
+
+ /**
+ * @brief Evaluate the Riemann zeta function @f$ \zeta(s) @f$
+ * by an alternate series for s > 0.
+ *
+ * The series is:
+ * @f[
+ * \zeta(s) = \frac{1}{1-2^{1-s}}
+ * \sum_{n=1}^{\infty} \frac{(-1)^{n-1}}{n^s}
+ * @f]
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} \frac{1}{k^{s}} for s > 1
+ * @f]
+ * For s < 1 use the reflection formula:
+ * @f[
+ * \zeta(s) = 2^s \pi^{s-1} \Gamma(1-s) \zeta(1-s)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_alt(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr unsigned int _S_max_iter = 10000000;
+ auto __sgn = _Real{1};
+ auto __zeta = _Val{0};
+ for (unsigned int __i = 1; __i < _S_max_iter; ++__i)
+ {
+ auto __term = __sgn / std::pow(_Val(__i), __s);
+ __zeta += __term;
+ __sgn = -__sgn;
+ if (std::abs(__term) < _S_eps * std::abs(__zeta)
+ || std::abs(__term) < _S_eps
+ && std::abs(__zeta) < _Real{100} * _S_eps)
+ break;
+ }
+ __zeta /= _Val{1} - std::pow(_Val{2}, _Val{1} - __s);
+
+ return __zeta;
+ }
+
+
+ /**
+ * @brief Evaluate the Riemann zeta function by series for all s != 1.
+ * Convergence is great until largish negative numbers.
+ * Then the convergence of the > 0 sum gets better.
+ *
+ * The series is:
+ * @f[
+ * \zeta(s) = \frac{1}{1-2^{1-s}}
+ * \sum_{n=0}^{\infty} \frac{1}{2^{n+1}}
+ * \sum_{k=0}^{n} (-1)^k \frac{n!}{(n-k)!k!} (k+1)^{-s}
+ * @f]
+ * Havil 2003, p. 206.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} \frac{1}{k^{s}} for s > 1
+ * @f]
+ * For s < 1 use the reflection formula:
+ * @f[
+ * \zeta(s) = 2^s \pi^{s-1} \Gamma(1-s) \zeta(1-s)
+ * @f]
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_glob(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+
+ auto __zeta = _Val{0};
+
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ // Max e exponent before overflow.
+ constexpr auto __max_bincoeff
+ = std::exp(std::numeric_limits<_Real>::max_exponent10
+ * std::log(_Real{10}) - _Real{1});
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ constexpr auto _S_pi_2 = __gnu_cxx::__math_constants<_Real>::__pi_half;
+ // This series works until the binomial coefficient blows up
+ // so use reflection.
+ if (std::real(__s) < _Real{0})
+ {
+ if (std::imag(__s) == _Real{0}
+ && std::fmod(std::real(__s), _Real{2}) == _Real{0})
+ return _Val{0};
+ else
+ {
+ auto __zeta = __riemann_zeta_glob(_Val{1} - __s);
+ __zeta *= std::pow(_Real{2} * _S_pi, __s)
+ * __sin_pi(_Real{0.5L} * __s)
+ * std::exp(__log_gamma(_Val{1} - __s)) / _S_pi;
+ return __zeta;
+ }
+ }
+
+ auto __num = _Real{0.25L};
+ const unsigned int __maxit = 10000;
+ __zeta = _Val{0.5L};
+ // This for loop starts at 1 because we already calculated the
+ // value of the zeroeth order in __zeta above
+ for (unsigned int __i = 1; __i < __maxit; ++__i)
+ {
+ bool __punt = false;
+ auto __term = _Val{1};
+ auto __bincoeff = _Real{1};
+ // This for loop starts at 1 because we already calculated the value
+ // of the zeroeth order in __term above.
+ for (unsigned int __j = 1; __j <= __i; ++__j)
+ {
+ auto __incr = _Real(__i - __j + 1) / _Real(__j);
+ __bincoeff *= -__incr;
+ if(std::abs(__bincoeff) > __max_bincoeff )
+ {
+ // This only gets hit for x << 0.
+ __punt = true;
+ break;
+ }
+ __term += __bincoeff * std::pow(_Val(1 + __j), -__s);
+ }
+ if (__punt)
+ break;
+ __term *= __num;
+ __zeta += __term;
+ if (std::abs(__term) < _S_eps * std::abs(__zeta)
+ || std::abs(__term) < _S_eps
+ && std::abs(__zeta) < _Real{100} * _S_eps)
+ break;
+ __num *= _Real{0.5L};
+ }
+
+ __zeta /= _Real{1} - std::pow(_Real{2}, _Val{1} - __s);
+
+ return __zeta;
+ }
+
+
+ /**
+ * @brief Compute the Riemann zeta function @f$ \zeta(s) @f$
+ * using the product over prime factors.
+ *
+ * @f[
+ * \zeta(s) = \Pi_{i=1}^\infty \frac{1}{1 - p_i^{-s}}
+ * @f]
+ * where @f$ {p_i} @f$ are the prime numbers.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} \frac{1}{k^{s}} for \Re s > 1
+ * @f]
+ * For \Re s < 1 use the reflection formula:
+ * @f[
+ * \zeta(s) = 2^s \pi^{s-1} \Gamma(1-s) \zeta(1-s)
+ * @f]
+ *
+ * @param __s The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_product(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ extern const unsigned long __prime_list[];
+
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr unsigned long
+ _S_num_primes = sizeof(unsigned long) != 8 ? 256 : 256 + 48;
+
+ auto __zeta = _Val{1};
+ for (unsigned long __i = 0; __i < _S_num_primes; ++__i)
+ {
+ const auto __fact = _Val{1}
+ - std::pow(_Real(__prime_list[__i]), -__s);
+ __zeta *= __fact;
+ if (std::abs(_Tp{1} - __fact) < _S_eps) // Assume zeta near 1.
+ break;
+ }
+
+ __zeta = _Tp{1} / __zeta;
+
+ return __zeta;
+ }
+
+
+ /**
+ * @brief Return the Riemann zeta function @f$ \zeta(s) @f$.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} k^{-s} \mbox{ for } \Re s > 1 \\
+ * \frac{(2\pi)^s}{\pi} \sin(\frac{\pi s}{2})
+ * \Gamma(1 - s) \zeta(1 - s) \mbox{ for } \Re s < 1
+ * @f]
+ *
+ * @param __s The argument
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Real>();
+ constexpr auto _S_pi = __gnu_cxx::__math_constants<_Real>::__pi;
+ if (__isnan(__s))
+ return _S_NaN;
+ else if (__s == _Val{1})
+ return _S_inf;
+ else if (std::real(__s) < -_Real{19})
+ {
+ auto __zeta = __riemann_zeta_product(_Val{1} - __s);
+ __zeta *= std::pow(_Real{2} * _S_pi, __s)
+ * __sin_pi(_Real{0.5L} * __s)
+ * std::exp(__log_gamma(_Val{1} - __s))
+ / _S_pi;
+ return __zeta;
+ }
+ else if (std::real(__s) < _Real{20})
+ {
+ // Global double sum or McLaurin?
+ bool __glob = true;
+ if (__glob)
+ return __riemann_zeta_glob(__s);
+ else
+ {
+ if (std::real(__s) > _Real{1})
+ return __riemann_zeta_sum(__s);
+ else
+ {
+ _Tp __zeta = std::pow(_Real{2} * _S_pi, __s)
+ * __sin_pi(_Real{0.5L} * __s)
+ * __gamma(_Val{1} - __s)
+ * __riemann_zeta_sum(_Val{1} - __s);
+ return __zeta;
+ }
+ }
+ }
+ else
+ return __riemann_zeta_product(__s);
+ }
+
+
+ /**
+ * @brief Return the Hurwitz zeta function @f$ \zeta(s,a) @f$
+ * for all s != 1 and a > -1.
+ * @see An efficient algorithm for accelerating the convergence
+ * of oscillatory series, useful for computing the
+ * polylogarithm and Hurwitz zeta functions, Linas Vep\u0160tas
+ *
+ * @param __s The argument @f$ s != 1 @f$
+ * @param __a The scale parameter @f$ a > -1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __hurwitz_zeta_euler_maclaurin(_Tp __s, _Tp __a)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ constexpr auto _S_eps = __gnu_cxx::__epsilon<_Real>();
+ constexpr int _S_N = 10 + std::numeric_limits<_Real>::digits10 / 2;
+ constexpr int _S_jmax = 99;
+
+ const auto __pmax = std::pow(_Val{_S_N} + __a, -__s);
+ auto __ans = __pmax
+ * ((_Val{_S_N} + __a) / (__s - _Val{1}) + _Real{0.5L});
+ for(auto __k = 0; __k < _S_N; ++__k)
+ __ans += std::pow(_Tp(__k) + __a, -__s);
+
+ auto __sfact = __s;
+ auto __pfact = __pmax / (_Val(_S_N) + __a);
+ for(auto __j = 0; __j <= _S_jmax; ++__j)
+ {
+ auto __delta = _Real(_S_Euler_Maclaurin_zeta[__j + 1])
+ * __sfact * __pfact;
+ __ans += __delta;
+ if (std::abs(__delta) < _Real{0.5L} * _S_eps * std::abs(__ans))
+ break;
+ __sfact *= (__s + _Val(2 * __j + 1)) * (__s + _Val(2 * __j + 2));
+ __pfact /= (_Val{_S_N} + __a) * (_Val{_S_N} + __a);
+ }
+
+ return __ans;
+ }
+
+ /**
+ * Table of zeta(n) - 1 from 2 - 32.
+ * MPFR - 128 bits.
+ */
+ constexpr size_t
+ _S_num_zetam1 = 41;
+
+ constexpr long double
+ _S_zetam1[_S_num_zetam1]
+ {
+ -1.5, // 0
+ std::numeric_limits<long double>::infinity(), // 1
+ 6.449340668482264364724151666460251892177e-1L, // 2
+ 2.020569031595942853997381615114499907647e-1L, // 3
+ 8.232323371113819151600369654116790277462e-2L, // 4
+ 3.692775514336992633136548645703416805713e-2L, // 5
+ 1.734306198444913971451792979092052790186e-2L, // 6
+ 8.349277381922826839797549849796759599843e-3L, // 7
+ 4.077356197944339378685238508652465258950e-3L, // 8
+ 2.008392826082214417852769232412060485604e-3L, // 9
+ 9.945751278180853371459589003190170060214e-4L, // 10
+ 4.941886041194645587022825264699364686068e-4L, // 11
+ 2.460865533080482986379980477396709604160e-4L, // 12
+ 1.227133475784891467518365263573957142749e-4L, // 13
+ 6.124813505870482925854510513533374748177e-5L, // 14
+ 3.058823630702049355172851064506258762801e-5L, // 15
+ 1.528225940865187173257148763672202323739e-5L, // 16
+ 7.637197637899762273600293563029213088257e-6L, // 17
+ 3.817293264999839856461644621939730454694e-6L, // 18
+ 1.908212716553938925656957795101353258569e-6L, // 19
+ 9.539620338727961131520386834493459437919e-7L, // 20
+ 4.769329867878064631167196043730459664471e-7L, // 21
+ 2.384505027277329900036481867529949350419e-7L, // 22
+ 1.192199259653110730677887188823263872549e-7L, // 23
+ 5.960818905125947961244020793580122750393e-8L, // 24
+ 2.980350351465228018606370506936601184471e-8L, // 25
+ 1.490155482836504123465850663069862886482e-8L, // 26
+ 7.450711789835429491981004170604119454712e-9L, // 27
+ 3.725334024788457054819204018402423232885e-9L, // 28
+ 1.862659723513049006403909945416948061669e-9L, // 29
+ 9.313274324196681828717647350212198135677e-10L, // 30
+ 4.656629065033784072989233251220071062704e-10L, // 31
+ 2.328311833676505492001455975940495024831e-10L, // 32
+ 1.164155017270051977592973835456309516528e-10L, // 33
+ 5.820772087902700889243685989106305417368e-11L, // 34
+ 2.910385044497099686929425227884046410669e-11L, // 35
+ 1.455192189104198423592963224531842098334e-11L, // 36
+ 7.275959835057481014520869012338059265263e-12L, // 37
+ 3.637979547378651190237236355873273513051e-12L, // 38
+ 1.818989650307065947584832100730085030987e-12L, // 39
+ 9.094947840263889282533118386949087534482e-13L // 40
+ };
+
+ /**
+ * @brief Return the Riemann zeta function @f$ \zeta(s) - 1 @f$
+ * by summation for \Re s > 1. This is a small remainder for large s.
+ *
+ * The Riemann zeta function is defined by:
+ * @f[
+ * \zeta(s) = \sum_{k=1}^{\infty} \frac{1}{k^{s}} for \Re s > 1
+ * @f]
+ *
+ * @param __s The argument @f$ s != 1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_m_1_sum(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ constexpr auto _S_eps = std::numeric_limits<_Real>::epsilon();
+ if (__s == _Real{1})
+ return std::numeric_limits<_Real>::quiet_NaN();
+ else
+ {
+ int __k_max = std::min(1000000,
+ int(std::pow(_Real{1} / _S_eps, _Real{1} / __s)));
+ auto __zeta_m_1 = _Val{0};
+ for (int __k = __k_max; __k >= 2; --__k)
+ {
+ auto __term = std::pow(_Real(__k), -__s);
+ __zeta_m_1 += __term;
+ }
+ return __zeta_m_1;
+ }
+ }
+
+
+ /**
+ * @brief Return the Riemann zeta function @f$ \zeta(s) - 1 @f$
+ *
+ *
+ * @param __s The argument @f$ s != 1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __riemann_zeta_m_1(_Tp __s)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ if (__s == _Real{1})
+ return std::numeric_limits<_Real>::quiet_NaN();
+
+ auto __n = int(std::nearbyint(__s));
+ if (__s == __n && __n >= 0 && __n < _S_num_zetam1)
+ return _S_zetam1[__n];
+ else
+ return __riemann_zeta_m_1_sum(__s);
+ }
+
+ /**
+ * @brief Return the Hurwitz zeta function @f$ \zeta(s,a) @f$
+ * for all s != 1 and a > -1.
+ *
+ * The Hurwitz zeta function is defined by:
+ * @f[
+ * \zeta(s,a) = \sum_{n=0}^{\infty} \frac{1}{(n+a)^s}
+ * @f]
+ * The Riemann zeta function is a special case:
+ * @f[
+ * \zeta(s) = \zeta(s,1)
+ * @f]
+ *
+ * @param __s The argument @f$ s != 1 @f$
+ * @param __a The scale parameter @f$ a > -1 @f$
+ */
+ template<typename _Tp>
+ _Tp
+ __hurwitz_zeta(_Tp __s, _Tp __a)
+ {
+ using _Val = _Tp;
+ using _Real = __num_traits_t<_Val>;
+ constexpr auto _S_NaN = __gnu_cxx::__quiet_NaN<_Real>();
+ constexpr auto _S_inf = __gnu_cxx::__infinity<_Real>();
+ if (__isnan(__s) || __isnan(__a))
+ return _S_NaN;
+ else if (__a == _Real{1} && __s == _Real{1})
+ return _S_inf;
+ else
+ return __hurwitz_zeta_euler_maclaurin(__s, __a);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+#endif // _GLIBCXX_BITS_SF_ZETA_TCC
diff --git a/libstdc++-v3/include/bits/specfun.h b/libstdc++-v3/include/bits/specfun.h
index 93e18522d58..b20dd97d1c6 100644
--- a/libstdc++-v3/include/bits/specfun.h
+++ b/libstdc++-v3/include/bits/specfun.h
@@ -1,4 +1,4 @@
-// Mathematical Special Functions for -*- C++ -*-
+// math special functions -*- C++ -*-
// Copyright (C) 2006-2016 Free Software Foundation, Inc.
//
@@ -7,12 +7,12 @@
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
-
+//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-
+//
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
@@ -23,8 +23,8 @@
// <http://www.gnu.org/licenses/>.
/** @file bits/specfun.h
- * This is an internal header file, included by other library headers.
- * Do not attempt to use it directly. @headername{cmath}
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
*/
#ifndef _GLIBCXX_BITS_SPECFUN_H
@@ -38,36 +38,73 @@
#define __cpp_lib_math_special_functions 201603L
-#if __cplusplus <= 201403L && __STDCPP_WANT_MATH_SPEC_FUNCS__ == 0
+#if __cplusplus <= 201402L && __STDCPP_WANT_MATH_SPEC_FUNCS__ == 0
# error include <cmath> and define __STDCPP_WANT_MATH_SPEC_FUNCS__
#endif
-#include <bits/stl_algobase.h>
+#pragma GCC system_header
+
#include <limits>
-#include <type_traits>
-
-#include <tr1/gamma.tcc>
-#include <tr1/bessel_function.tcc>
-#include <tr1/beta_function.tcc>
-#include <tr1/ell_integral.tcc>
-#include <tr1/exp_integral.tcc>
-#include <tr1/hypergeometric.tcc>
-#include <tr1/legendre_function.tcc>
-#include <tr1/modified_bessel_func.tcc>
-#include <tr1/poly_hermite.tcc>
-#include <tr1/poly_laguerre.tcc>
-#include <tr1/riemann_zeta.tcc>
+#include <bits/stl_algobase.h>
+#include <bits/specfun_util.h>
+
+#if __cplusplus >= 201103L
+# include <type_traits>
+# include <bits/numeric_limits.h>
+# include <bits/complex_util.h>
+# include <bits/sf_trig.tcc>
+# include <bits/sf_gamma.tcc>
+# include <bits/sf_bessel.tcc>
+# include <bits/sf_beta.tcc>
+# include <bits/sf_cardinal.tcc>
+# include <bits/sf_chebyshev.tcc>
+# include <bits/sf_dawson.tcc>
+# include <bits/sf_ellint.tcc>
+# include <bits/sf_expint.tcc>
+# include <bits/sf_fresnel.tcc>
+# include <bits/sf_gegenbauer.tcc>
+# include <bits/sf_hyperg.tcc>
+# include <bits/sf_hypint.tcc>
+# include <bits/sf_jacobi.tcc>
+# include <bits/sf_laguerre.tcc>
+# include <bits/sf_legendre.tcc>
+# include <bits/sf_hydrogen.tcc> // Needs __sph_legendre.
+# include <bits/sf_mod_bessel.tcc>
+# include <bits/sf_hermite.tcc>
+# include <bits/sf_theta.tcc>
+# include <bits/sf_trigint.tcc>
+# include <bits/sf_zeta.tcc>
+# include <bits/sf_owens_t.tcc>
+# include <bits/sf_polylog.tcc>
+# include <bits/sf_airy.tcc>
+# include <bits/sf_hankel.tcc>
+# include <bits/sf_distributions.tcc>
+#else
+# include <tr1/type_traits>
+# include <tr1/cmath>
+# define _GLIBCXX_MATH_NS ::std::tr1::
+# include <tr1/gamma.tcc>
+# include <tr1/bessel_function.tcc>
+# include <tr1/beta_function.tcc>
+# include <tr1/ell_integral.tcc>
+# include <tr1/exp_integral.tcc>
+# include <tr1/hypergeometric.tcc>
+# include <tr1/legendre_function.tcc>
+# include <tr1/modified_bessel_func.tcc>
+# include <tr1/poly_hermite.tcc>
+# include <tr1/poly_laguerre.tcc>
+# include <tr1/riemann_zeta.tcc>
+#endif
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
- * @defgroup mathsf Mathematical Special Functions
+ * @defgroup math_spec_func C++ Mathematical Special Functions
* @ingroup numerics
*
- * A collection of advanced mathematical special functions,
- * defined by ISO/IEC IS 29124.
+ * A collection of advanced mathematical special functions.
* @{
*/
@@ -92,34 +129,121 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* @section contents Contents
* The following functions are implemented in namespace @c std:
- * - @ref assoc_laguerre "assoc_laguerre - Associated Laguerre functions"
- * - @ref assoc_legendre "assoc_legendre - Associated Legendre functions"
- * - @ref beta "beta - Beta functions"
- * - @ref comp_ellint_1 "comp_ellint_1 - Complete elliptic functions of the first kind"
- * - @ref comp_ellint_2 "comp_ellint_2 - Complete elliptic functions of the second kind"
- * - @ref comp_ellint_3 "comp_ellint_3 - Complete elliptic functions of the third kind"
- * - @ref cyl_bessel_i "cyl_bessel_i - Regular modified cylindrical Bessel functions"
- * - @ref cyl_bessel_j "cyl_bessel_j - Cylindrical Bessel functions of the first kind"
- * - @ref cyl_bessel_k "cyl_bessel_k - Irregular modified cylindrical Bessel functions"
- * - @ref cyl_neumann "cyl_neumann - Cylindrical Neumann functions or Cylindrical Bessel functions of the second kind"
- * - @ref ellint_1 "ellint_1 - Incomplete elliptic functions of the first kind"
- * - @ref ellint_2 "ellint_2 - Incomplete elliptic functions of the second kind"
- * - @ref ellint_3 "ellint_3 - Incomplete elliptic functions of the third kind"
- * - @ref expint "expint - The exponential integral"
- * - @ref hermite "hermite - Hermite polynomials"
- * - @ref laguerre "laguerre - Laguerre functions"
- * - @ref legendre "legendre - Legendre polynomials"
- * - @ref riemann_zeta "riemann_zeta - The Riemann zeta function"
- * - @ref sph_bessel "sph_bessel - Spherical Bessel functions"
- * - @ref sph_legendre "sph_legendre - Spherical Legendre functions"
- * - @ref sph_neumann "sph_neumann - Spherical Neumann functions"
+ * - @ref std::assoc_laguerre "assoc_laguerre - Associated Laguerre functions"
+ * - @ref std::assoc_legendre "assoc_legendre - Associated Legendre functions"
+ * - @ref std::beta "beta - Beta functions"
+ * - @ref std::comp_ellint_1 "comp_ellint_1 - Complete elliptic functions of the first kind"
+ * - @ref std::comp_ellint_2 "comp_ellint_2 - Complete elliptic functions of the second kind"
+ * - @ref std::comp_ellint_3 "comp_ellint_3 - Complete elliptic functions of the third kind"
+ * - @ref std::cyl_bessel_i "cyl_bessel_i - Regular modified cylindrical Bessel functions"
+ * - @ref std::cyl_bessel_j "cyl_bessel_j - Cylindrical Bessel functions of the first kind"
+ * - @ref std::cyl_bessel_k "cyl_bessel_k - Irregular modified cylindrical Bessel functions"
+ * - @ref std::cyl_neumann "cyl_neumann - Cylindrical Neumann functions or Cylindrical Bessel functions of the second kind"
+ * - @ref std::ellint_1 "ellint_1 - Incomplete elliptic functions of the first kind"
+ * - @ref std::ellint_2 "ellint_2 - Incomplete elliptic functions of the second kind"
+ * - @ref std::ellint_3 "ellint_3 - Incomplete elliptic functions of the third kind"
+ * - @ref std::expint "expint - The exponential integral"
+ * - @ref std::hermite "hermite - Hermite polynomials"
+ * - @ref std::laguerre "laguerre - Laguerre functions"
+ * - @ref std::legendre "legendre - Legendre polynomials"
+ * - @ref std::riemann_zeta "riemann_zeta - The Riemann zeta function"
+ * - @ref std::sph_bessel "sph_bessel - Spherical Bessel functions"
+ * - @ref std::sph_legendre "sph_legendre - Spherical Legendre functions"
+ * - @ref std::sph_neumann "sph_neumann - Spherical Neumann functions"
*
* The hypergeometric functions were stricken from the TR29124 and C++17
* versions of this math library because of implementation concerns.
* However, since they were in the TR1 version and since they are popular
* we kept them as an extension in namespace @c __gnu_cxx:
- * - @ref conf_hyperg "conf_hyperg - Confluent hypergeometric functions"
- * - @ref hyperg "hyperg - Hypergeometric functions"
+ * - @ref __gnu_cxx::conf_hyperg "conf_hyperg - Confluent hypergeometric functions"
+ * - @ref __gnu_cxx::hyperg "hyperg - Hypergeometric functions"
+ *
+ * In addition a large number of new functions are added as extensions:
+ * - @ref __gnu_cxx::airy_ai "airy_ai - Airy functions of the first kind"
+ * - @ref __gnu_cxx::airy_bi "airy_bi - Airy functions of the second kind"
+ * - @ref __gnu_cxx::bincoef "bincoef - Binomial coefficients"
+ * - @ref __gnu_cxx::bose_einstein "bose_einstein - Bose-Einstein integrals"
+ * - @ref __gnu_cxx::chebyshev_t "chebyshev_t - Chebyshev polynomials of the first kind"
+ * - @ref __gnu_cxx::chebyshev_u "chebyshev_u - Chebyshev polynomials of the second kind"
+ * - @ref __gnu_cxx::chebyshev_v "chebyshev_v - Chebyshev polynomials of the third kind"
+ * - @ref __gnu_cxx::chebyshev_w "chebyshev_w - Chebyshev polynomials of the fourth kind"
+ * - @ref __gnu_cxx::clausen "clausen - Clausen integrals"
+ * - @ref __gnu_cxx::clausen_c "clausen_c - Clausen cosine integrals"
+ * - @ref __gnu_cxx::clausen_s "clausen_s - Clausen sine integrals"
+ * - @ref __gnu_cxx::comp_ellint_d "comp_ellint_d - Incomplete Legendre D elliptic integral"
+ * - @ref __gnu_cxx::conf_hyperg_lim "conf_hyperg_lim - Confluent hypergeometric limit functions"
+ * - @ref __gnu_cxx::cos_pi "cos_pi - Reperiodized cosine function."
+ * - @ref __gnu_cxx::cosh_pi "cosh_pi - Reperiodized hyperbolic cosine function."
+ * - @ref __gnu_cxx::coshint "coshint - Hyperbolic cosine integral"
+ * - @ref __gnu_cxx::cosint "cosint - Cosine integral"
+ * - @ref __gnu_cxx::cyl_hankel_1 "cyl_hankel_1 - Cylindrical Hankel functions of the first kind"
+ * - @ref __gnu_cxx::cyl_hankel_2 "cyl_hankel_2 - Cylindrical Hankel functions of the second kind"
+ * - @ref __gnu_cxx::dawson "dawson - Dawson integrals"
+ * - @ref __gnu_cxx::dilog "dilog - Dilogarithm functions"
+ * - @ref __gnu_cxx::dirichlet_beta "dirichlet_beta - Dirichlet beta function"
+ * - @ref __gnu_cxx::dirichlet_eta "dirichlet_eta - Dirichlet beta function"
+ * - @ref __gnu_cxx::dirichlet_lambda "dirichlet_lambda - Dirichlet lambda function"
+ * - @ref __gnu_cxx::double_factorial "double_factorial - "
+ * - @ref __gnu_cxx::ellint_d "ellint_d - Legendre D elliptic integrals"
+ * - @ref __gnu_cxx::ellint_rc "ellint_rc - Carlson elliptic functions R_C"
+ * - @ref __gnu_cxx::ellint_rd "ellint_rd - Carlson elliptic functions R_D"
+ * - @ref __gnu_cxx::ellint_rf "ellint_rf - Carlson elliptic functions R_F"
+ * - @ref __gnu_cxx::ellint_rg "ellint_rg - Carlson elliptic functions R_G"
+ * - @ref __gnu_cxx::ellint_rj "ellint_rj - Carlson elliptic functions R_J"
+ * - @ref __gnu_cxx::ellnome "ellnome - Elliptic nome"
+ * - @ref __gnu_cxx::expint "expint - Exponential integrals"
+ * - @ref __gnu_cxx::factorial "factorial - Factorials"
+ * - @ref __gnu_cxx::fermi_dirac "fermi_dirac - Fermi-Dirac integrals"
+ * - @ref __gnu_cxx::fresnel_c "fresnel_c - Fresnel cosine integrals"
+ * - @ref __gnu_cxx::fresnel_s "fresnel_s - Fresnel sine integrals"
+ * - @ref __gnu_cxx::pgamma "pgamma - Regularized lower incomplete gamma functions"
+ * - @ref __gnu_cxx::qgamma "qgamma - Regularized upper incomplete gamma functions"
+ * - @ref __gnu_cxx::gegenbauer "gegenbauer - Gegenbauer polynomials"
+ * - @ref __gnu_cxx::heuman_lambda "heuman_lambda - Heuman lambda functions"
+ * - @ref __gnu_cxx::hurwitz_zeta "hurwitz_zeta - Hurwitz zeta functions"
+ * - @ref __gnu_cxx::ibeta "ibeta - Regularized incomplete beta functions"
+ * - @ref __gnu_cxx::jacobi "jacobi - Jacobi polynomials"
+ * - @ref __gnu_cxx::jacobi_sn "jacobi_sn - Jacobi sine amplitude functions"
+ * - @ref __gnu_cxx::jacobi_cn "jacobi_cn - Jacobi cosine amplitude functions"
+ * - @ref __gnu_cxx::jacobi_dn "jacobi_dn - Jacobi delta amplitude functions"
+ * - @ref __gnu_cxx::jacobi_zeta "jacobi_zeta - Jacobi zeta functions"
+ * - @ref __gnu_cxx::lbincoef "lbincoef - Log binomial coefficients"
+ * - @ref __gnu_cxx::ldouble_factorial "ldouble_factorial - Log double factorials"
+ * - @ref __gnu_cxx::legendre_q "legendre_q - Legendre functions of the second kind"
+ * - @ref __gnu_cxx::lfactorial "lfactorial - Log factorials"
+ * - @ref __gnu_cxx::lgamma "lgamma - Log gamma for complex arguments"
+ * - @ref __gnu_cxx::lpochhammer_lower "lpochhammer_lower - Log lower Pochhammer functions"
+ * - @ref __gnu_cxx::lpochhammer "lpochhammer - Log upper Pochhammer functions"
+ * - @ref __gnu_cxx::owens_t "owens_t - Owens T functions"
+ * - @ref __gnu_cxx::pochhammer_lower "pochhammer_lower - Lower Pochhammer functions"
+ * - @ref __gnu_cxx::pochhammer "pochhammer - Upper Pochhammer functions"
+ * - @ref __gnu_cxx::psi "psi - Psi or digamma function"
+ * - @ref __gnu_cxx::radpoly "radpoly - Radial polynomials"
+ * - @ref __gnu_cxx::sinhc "sinhc - Hyperbolic sinus cardinal function"
+ * - @ref __gnu_cxx::sinhc_pi "sinhc_pi - "
+ * - @ref __gnu_cxx::sinc "sinc - Normalized sinus cardinal function"
+ * - @ref __gnu_cxx::sincos "sincos - Sine + cosine function"
+ * - @ref __gnu_cxx::sincos_pi "sincos_pi - Reperiodized sine + cosine function"
+ * - @ref __gnu_cxx::sin_pi "sin_pi - Reperiodized sine function."
+ * - @ref __gnu_cxx::sinh_pi "sinh_pi - Reperiodized hyperbolic sine function."
+ * - @ref __gnu_cxx::sinc_pi "sinc_pi - Sinus cardinal function"
+ * - @ref __gnu_cxx::sinhint "sinhint - Hyperbolic sine integral"
+ * - @ref __gnu_cxx::sinint "sinint - Sine integral"
+ * - @ref __gnu_cxx::sph_bessel_i "sph_bessel_i - Spherical regular modified Bessel functions"
+ * - @ref __gnu_cxx::sph_bessel_k "sph_bessel_k - Spherical iregular modified Bessel functions"
+ * - @ref __gnu_cxx::sph_hankel_1 "sph_hankel_1 - Spherical Hankel functions of the first kind"
+ * - @ref __gnu_cxx::sph_hankel_2 "sph_hankel_2 - Spherical Hankel functions of the first kind"
+ * - @ref __gnu_cxx::sph_harmonic "sph_harmonic - Spherical"
+ * - @ref __gnu_cxx::tan_pi "tan_pi - Reperiodized tangent function."
+ * - @ref __gnu_cxx::tanh_pi "tanh_pi - Reperiodized hyperbolic tangent function."
+ * - @ref __gnu_cxx::tgamma "tgamma - Gamma for complex arguments"
+ * - @ref __gnu_cxx::tgamma "tgamma - Upper incomplete gamma functions"
+ * - @ref __gnu_cxx::tgamma_lower "tgamma_lower - Lower incomplete gamma functions"
+ * - @ref __gnu_cxx::theta_1 "theta_1 - Exponential theta function 1"
+ * - @ref __gnu_cxx::theta_2 "theta_2 - Exponential theta function 2"
+ * - @ref __gnu_cxx::theta_3 "theta_3 - Exponential theta function 3"
+ * - @ref __gnu_cxx::theta_4 "theta_4 - Exponential theta function 4"
+ * - @ref __gnu_cxx::zernike "zernike - Zernike polynomials"
*
* @section general General Features
*
@@ -194,11 +318,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* by Yudell L. Luke, Academic Press, 1969
*/
+ /** @} */ // math_spec_func
+
+ /**
+ * @defgroup tr29124_math_spec_func C++17/IS29124 Mathematical Special Functions
+ * @ingroup math_spec_func
+ *
+ * A collection of advanced mathematical special functions for C++17
+ * and IS29124.
+ * @{
+ */
+
// Associated Laguerre polynomials
/**
- * Return the associated Laguerre polynomial of order @c n,
- * degree @c m: @f$ L_n^m(x) @f$ for @c float argument.
+ * Return the associated Laguerre polynomial @f$ L_n^m(x) @f$
+ * of order @f$ n @f$, degree @f$ m @f$, and @c float argument @f$ x @f$.
*
* @see assoc_laguerre for more details.
*/
@@ -207,8 +342,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __detail::__assoc_laguerre<float>(__n, __m, __x); }
/**
- * Return the associated Laguerre polynomial of order @c n,
- * degree @c m: @f$ L_n^m(x) @f$.
+ * Return the associated Laguerre polynomial @f$ L_n^m(x) @f$
+ * of order @f$ n @f$, degree @f$ m @f$ and <tt>long double</tt>
+ * argument @f$ x @f$.
*
* @see assoc_laguerre for more details.
*/
@@ -217,8 +353,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __detail::__assoc_laguerre<long double>(__n, __m, __x); }
/**
- * Return the associated Laguerre polynomial of nonnegative order @c n,
- * nonnegative degree @c m and real argument @c x: @f$ L_n^m(x) @f$.
+ * Return the associated Laguerre polynomial @f$ L_n^m(x) @f$
+ * of nonnegative order @f$ n @f$, nonnegative degree @f$ m @f$
+ * and real argument @f$ x @f$.
*
* The associated Laguerre function of real degree @f$ \alpha @f$,
* @f$ L_n^\alpha(x) @f$, is defined by
@@ -258,8 +395,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Associated Legendre functions
/**
- * Return the associated Legendre function of degree @c l and order @c m
- * for @c float argument.
+ * Return the associated Legendre function @f$ P_l^m(x) @f$
+ * of degree @f$ l @f$, order @f$ m @f$, and @c float argument @f$ x @f$.
*
* @see assoc_legendre for more details.
*/
@@ -268,7 +405,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __detail::__assoc_legendre_p<float>(__l, __m, __x); }
/**
- * Return the associated Legendre function of degree @c l and order @c m.
+ * Return the associated Legendre function @f$ P_l^m(x) @f$
+ * of degree @f$ l @f$, order @f$ m @f$, and @c <tt>long double</tt>
+ * argument @f$ x @f$.
*
* @see assoc_legendre for more details.
*/
@@ -276,9 +415,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
assoc_legendrel(unsigned int __l, unsigned int __m, long double __x)
{ return __detail::__assoc_legendre_p<long double>(__l, __m, __x); }
-
/**
- * Return the associated Legendre function of degree @c l and order @c m.
+ * Return the associated Legendre function @f$ P_l^m(x) @f$
+ * of degree @f$ l @f$, order @f$ m @f$, and real argument @f$ x @f$.
*
* The associated Legendre function is derived from the Legendre function
* @f$ P_l(x) @f$ by the Rodrigues formula:
@@ -304,7 +443,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Beta functions
/**
- * Return the beta function, @f$ B(a,b) @f$, for @c float parameters @c a, @c b.
+ * Return the beta function, @f$ B(a,b) @f$, for @c float parameters @f$ a @f$, @f$ b @f$.
*
* @see beta for more details.
*/
@@ -314,7 +453,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the beta function, @f$B(a,b)@f$, for long double
- * parameters @c a, @c b.
+ * parameters @f$ a @f$, @f$ b @f$.
*
* @see beta for more details.
*/
@@ -323,7 +462,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __detail::__beta<long double>(__a, __b); }
/**
- * Return the beta function, @f$B(a,b)@f$, for real parameters @c a, @c b.
+ * Return the beta function, @f$B(a,b)@f$, for real parameters @f$ a @f$, @f$ b @f$.
*
* The beta function is defined by
* @f[
@@ -350,7 +489,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the first kind @f$ E(k) @f$
- * for @c float modulus @c k.
+ * for @c float modulus @f$ k @f$.
*
* @see comp_ellint_1 for details.
*/
@@ -360,7 +499,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the first kind @f$ E(k) @f$
- * for long double modulus @c k.
+ * for <tt>long double</tt> modulus @f$ k @f$.
*
* @see comp_ellint_1 for details.
*/
@@ -370,7 +509,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the first kind
- * @f$ K(k) @f$ for real modulus @c k.
+ * @f$ K(k) @f$ for real modulus @f$ k @f$.
*
* The complete elliptic integral of the first kind is defined as
* @f[
@@ -398,7 +537,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the second kind @f$ E(k) @f$
- * for @c float modulus @c k.
+ * for @c float modulus @f$ k @f$.
*
* @see comp_ellint_2 for details.
*/
@@ -408,7 +547,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the second kind @f$ E(k) @f$
- * for long double modulus @c k.
+ * for <tt>long double</tt> modulus @f$ k @f$.
*
* @see comp_ellint_2 for details.
*/
@@ -418,7 +557,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the second kind @f$ E(k) @f$
- * for real modulus @c k.
+ * for real modulus @f$ k @f$.
*
* The complete elliptic integral of the second kind is defined as
* @f[
@@ -445,7 +584,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return the complete elliptic integral of the third kind
- * @f$ \Pi(k,\nu) @f$ for @c float modulus @c k.
+ * @f$ \Pi(k,\nu) @f$ for @c float modulus @f$ k @f$.
*
* @see comp_ellint_3 for details.
*/
@@ -455,7 +594,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return the complete elliptic integral of the third kind
- * @f$ \Pi(k,\nu) @f$ for <tt>long double</tt> modulus @c k.
+ * @f$ \Pi(k,\nu) @f$ for <tt>long double</tt> modulus @f$ k @f$.
*
* @see comp_ellint_3 for details.
*/
@@ -465,7 +604,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the complete elliptic integral of the third kind
- * @f$ \Pi(k,\nu) = \Pi(k,\nu,\pi/2) @f$ for real modulus @c k.
+ * @f$ \Pi(k,\nu) = \Pi(k,\nu,\pi/2) @f$ for real modulus @f$ k @f$.
*
* The complete elliptic integral of the third kind is defined as
* @f[
@@ -836,7 +975,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// Exponential integrals
/**
- * Return the exponential integral @f$ Ei(x) @f$ for @c float argument @c x.
+ * Return the exponential integral @f$ Ei(x) @f$ for @c float argument @f$ x @f$.
*
* @see expint for details.
*/
@@ -846,7 +985,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the exponential integral @f$ Ei(x) @f$
- * for <tt>long double</tt> argument @c x.
+ * for <tt>long double</tt> argument @f$ x @f$.
*
* @see expint for details.
*/
@@ -855,7 +994,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return __detail::__expint<long double>(__x); }
/**
- * Return the exponential integral @f$ Ei(x) @f$ for @c real argument @c x.
+ * Return the exponential integral @f$ Ei(x) @f$ for @c real argument @f$ x @f$.
*
* The exponential integral is given by
* \f[
@@ -877,7 +1016,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
- * and float argument @c x.
+ * and float argument @f$ x @f$.
*
* @see hermite for details.
*/
@@ -887,7 +1026,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the Hermite polynomial @f$ H_n(x) @f$ of nonnegative order n
- * and <tt>long double</tt> argument @c x.
+ * and <tt>long double</tt> argument @f$ x @f$.
*
* @see hermite for details.
*/
@@ -897,7 +1036,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the Hermite polynomial @f$ H_n(x) @f$ of order n
- * and @c real argument @c x.
+ * and @c real argument @f$ x @f$.
*
* The Hermite polynomial is defined by:
* @f[
@@ -945,7 +1084,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Returns the Laguerre polynomial @f$ L_n(x) @f$
- * of nonnegative degree @c n and real argument @f$ x >= 0 @f$.
+ * of nonnegative degree @f$ n @f$ and real argument @f$ x >= 0 @f$.
*
* The Laguerre polynomial is defined by:
* @f[
@@ -1038,12 +1177,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*
* The Riemann zeta function is defined by:
* @f[
- * \zeta(s) = \sum_{k=1}^{\infty} k^{-s} \hbox{ for } s > 1
+ * \zeta(s) = \sum_{k=1}^{\infty} k^{-s} \mbox{ for } s > 1
* @f]
* and
* @f[
* \zeta(s) = \frac{1}{1-2^{1-s}}\sum_{k=1}^{\infty}(-1)^{k-1}k^{-s}
- * \hbox{ for } 0 <= s <= 1
+ * \mbox{ for } 0 <= s <= 1
* @f]
* For s < 1 use the reflection formula:
* @f[
@@ -1109,7 +1248,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the spherical Legendre function of nonnegative integral
- * degree @c l and order @c m and float angle @f$ \theta @f$ in radians.
+ * degree @f$ l @f$ and order @f$ m @f$ and float angle @f$ \theta @f$ in radians.
*
* @see sph_legendre for details.
*/
@@ -1119,7 +1258,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the spherical Legendre function of nonnegative integral
- * degree @c l and order @c m and <tt>long double</tt> angle @f$ \theta @f$
+ * degree @f$ l @f$ and order @f$ m @f$ and <tt>long double</tt> angle @f$ \theta @f$
* in radians.
*
* @see sph_legendre for details.
@@ -1130,7 +1269,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* Return the spherical Legendre function of nonnegative integral
- * degree @c l and order @c m and real angle @f$ \theta @f$ in radians.
+ * degree @f$ l @f$ and order @f$ m @f$ and real angle @f$ \theta @f$ in radians.
*
* The spherical Legendre function is defined by
* @f[
@@ -1196,20 +1335,29 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __detail::__sph_neumann<__type>(__n, __x);
}
- // @} group mathsf
+ /** @} */ // tr29124_math_spec_func
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * @defgroup gnu_math_spec_func GNU Extended Mathematical Special Functions
+ * @ingroup math_spec_func
+ *
+ * An extended collection of advanced mathematical special functions for GNU.
+ * @{
+ */
// Confluent hypergeometric functions
/**
* Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
- * of @c float numeratorial parameter @c a, denominatorial parameter @c c,
- * and argument @c x.
+ * of @c float numeratorial parameter @f$ a @f$, denominatorial parameter @f$ c @f$,
+ * and argument @f$ x @f$.
*
* @see conf_hyperg for details.
*/
@@ -1219,8 +1367,8 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
/**
* Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
- * of <tt>long double</tt> numeratorial parameter @c a,
- * denominatorial parameter @c c, and argument @c x.
+ * of <tt>long double</tt> numeratorial parameter @f$ a @f$,
+ * denominatorial parameter @f$ c @f$, and argument @f$ x @f$.
*
* @see conf_hyperg for details.
*/
@@ -1230,8 +1378,8 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
/**
* Return the confluent hypergeometric function @f$ {}_1F_1(a;c;x) @f$
- * of real numeratorial parameter @c a, denominatorial parameter @c c,
- * and argument @c x.
+ * of real numeratorial parameter @f$ a @f$, denominatorial parameter @f$ c @f$,
+ * and argument @f$ x @f$.
*
* The confluent hypergeometric function is defined by
* @f[
@@ -1256,8 +1404,8 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
/**
* Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
- * of @ float numeratorial parameters @c a and @c b,
- * denominatorial parameter @c c, and argument @c x.
+ * of @ float numeratorial parameters @f$ a @f$ and @f$ b @f$,
+ * denominatorial parameter @f$ c @f$, and argument @f$ x @f$.
*
* @see hyperg for details.
*/
@@ -1267,8 +1415,8 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
/**
* Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
- * of <tt>long double</tt> numeratorial parameters @c a and @c b,
- * denominatorial parameter @c c, and argument @c x.
+ * of <tt>long double</tt> numeratorial parameters @f$ a @f$ and @f$ b @f$,
+ * denominatorial parameter @f$ c @f$, and argument @f$ x @f$.
*
* @see hyperg for details.
*/
@@ -1278,12 +1426,12 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
/**
* Return the hypergeometric function @f$ {}_2F_1(a,b;c;x) @f$
- * of real numeratorial parameters @c a and @c b,
- * denominatorial parameter @c c, and argument @c x.
+ * of real numeratorial parameters @f$ a @f$ and @f$ b @f$,
+ * denominatorial parameter @f$ c @f$, and argument @f$ x @f$.
*
* The hypergeometric function is defined by
* @f[
- * {}_2F_1(a;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n (b)_n x^n}{(c)_n n!}
+ * {}_2F_1(a,b;c;x) = \sum_{n=0}^{\infty} \frac{(a)_n (b)_n x^n}{(c)_n n!}
* @f]
* where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$,
* @f$ (x)_0 = 1 @f$
@@ -1302,6 +1450,4334 @@ namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
return std::__detail::__hyperg<__type>(__a, __b, __c, __x);
}
+#if __cplusplus >= 201103L
+
+ // Confluent hypergeometric limit functions
+
+ /**
+ * Return the confluent hypergeometric limit function @f$ {}_0F_1(;c;x) @f$
+ * of @c float numeratorial parameter @f$ c @f$ and argument @f$ x @f$.
+ *
+ * @see conf_hyperg_lim for details.
+ */
+ inline float
+ conf_hyperg_limf(float __c, float __x)
+ { return std::__detail::__conf_hyperg_lim<float>(__c, __x); }
+
+ /**
+ * Return the confluent hypergeometric limit function @f$ {}_0F_1(;c;x) @f$
+ * of <tt>long double</tt> numeratorial parameter @f$ c @f$ and argument @f$ x @f$.
+ *
+ * @see conf_hyperg_lim for details.
+ */
+ inline long double
+ conf_hyperg_liml(long double __c, long double __x)
+ { return std::__detail::__conf_hyperg_lim<long double>(__c, __x); }
+
+ /**
+ * Return the confluent hypergeometric limit function @f$ {}_0F_1(;c;x) @f$
+ * of real numeratorial parameter @f$ c @f$ and argument @f$ x @f$.
+ *
+ * The confluent hypergeometric limit function is defined by
+ * @f[
+ * {}_0F_1(;c;x) = \sum_{n=0}^{\infty} \frac{x^n}{(c)_n n!}
+ * @f]
+ * where the Pochhammer symbol is @f$ (x)_k = (x)(x+1)...(x+k-1) @f$,
+ * @f$ (x)_0 = 1 @f$
+ *
+ * @param __c The denominatorial parameter
+ * @param __x The argument
+ */
+ template<typename _Tpc, typename _Tp>
+ inline typename __gnu_cxx::__promote_2<_Tpc, _Tp>::__type
+ conf_hyperg_lim(_Tpc __c, _Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote_2<_Tpc, _Tp>::__type __type;
+ return std::__detail::__conf_hyperg_lim<__type>(__c, __x);
+ }
+
+ // Sinus cardinal functions
+
+ /**
+ * Return the sinus cardinal function @f$ sinc_\pi(x) @f$
+ * for @c float argument @c __x.
+ *
+ * @see sinc_pi for details.
+ */
+ inline float
+ sincf(float __x)
+ { return std::__detail::__sinc<float>(__x); }
+
+ /**
+ * Return the sinus cardinal function @f$ sinc_\pi(x) @f$
+ * for <tt>long double</tt> argument @c __x.
+ *
+ * @see sinc_pi for details.
+ */
+ inline long double
+ sincl(long double __x)
+ { return std::__detail::__sinc<long double>(__x); }
+
+ /**
+ * Return the sinus cardinal function @f$ sinc_\pi(x) @f$
+ * for real argument @c __x.
+ * The sinus cardinal function is defined by:
+ * @f[
+ * sinc(x) = \frac{sin(x)}{x}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sinc(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sinc<__type>(__x);
+ }
+
+ // Normalized sinus cardinal functions
+
+ /**
+ * Return the reperiodized sinus cardinal function @f$ sinc(x) @f$
+ * for @c float argument @c __x.
+ *
+ * @see sinc for details.
+ */
+ inline float
+ sinc_pif(float __x)
+ { return std::__detail::__sinc_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized sinus cardinal function @f$ sinc(x) @f$
+ * for <tt>long double</tt> argument @c __x.
+ *
+ * @see sinc for details.
+ */
+ inline long double
+ sinc_pil(long double __x)
+ { return std::__detail::__sinc_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized sinus cardinal function @f$ sinc(x) @f$
+ * for real argument @c __x.
+ * The normalized sinus cardinal function is defined by:
+ * @f[
+ * sinc_\pi(x) = \frac{sin(\pi x)}{\pi x}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sinc_pi(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sinc_pi<__type>(__x);
+ }
+
+ // Logarithmic integrals
+
+ /**
+ * Return the logarithmic integral of argument @f$ x @f$.
+ *
+ * @see logint for details.
+ */
+ inline float
+ logintf(float __x)
+ { return std::__detail::__logint<float>(__x); }
+
+ /**
+ * Return the logarithmic integral of argument @f$ x @f$.
+ *
+ * @see logint for details.
+ */
+ inline long double
+ logintl(long double __x)
+ { return std::__detail::__logint<long double>(__x); }
+
+ /**
+ * Return the logarithmic integral of argument @f$ x @f$.
+ *
+ * The logarithmic integral is defined by
+ * @f[
+ * li(x) = \int_0^x \frac{dt}{ln(t)}
+ * @f]
+ *
+ * @param __x The real upper integration limit
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ logint(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__logint<__type>(__x);
+ }
+
+ // Sine integrals
+
+ /**
+ * Return the sine integral @f$ Si(x) @f$ of @c float argument @f$ x @f$.
+ *
+ * @see sinint for details.
+ */
+ inline float
+ sinintf(float __x)
+ { return std::__detail::__sincosint<float>(__x).first; }
+
+ /**
+ * Return the sine integral @f$ Si(x) @f$ of <tt>long double</tt>
+ * argument @f$ x @f$.
+ *
+ * @see sinint for details.
+ */
+ inline long double
+ sinintl(long double __x)
+ { return std::__detail::__sincosint<long double>(__x).first; }
+
+ /**
+ * Return the sine integral @f$ Si(x) @f$ of real argument @f$ x @f$.
+ *
+ * The sine integral is defined by
+ * @f[
+ * Si(x) = \int_0^x \frac{sin(t)}{t}dt
+ * @f]
+ *
+ * @param __x The real upper integration limit
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sinint(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sincosint<__type>(__x).first;
+ }
+
+ // Cosine integrals
+
+ /**
+ * Return the cosine integral @f$ Ci(x) @f$ of @c float argument @f$ x @f$.
+ *
+ * @see cosint for details.
+ */
+ inline float
+ cosintf(float __x)
+ { return std::__detail::__sincosint<float>(__x).second; }
+
+ /**
+ * Return the cosine integral @f$ Ci(x) @f$ of <tt>long double</tt>
+ * argument @f$ x @f$.
+ *
+ * @see cosint for details.
+ */
+ inline long double
+ cosintl(long double __x)
+ { return std::__detail::__sincosint<long double>(__x).second; }
+
+ /**
+ * Return the cosine integral @f$ Ci(x) @f$ of real argument @f$ x @f$.
+ *
+ * The cosine integral is defined by
+ * @f[
+ * Ci(x) = -\int_x^\infty \frac{cos(t)}{t}dt
+ * = \gamma_E + ln(x) + \int_0^x \frac{cos(t)-1}{t}dt
+ * @f]
+ *
+ * @param __x The real upper integration limit
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ cosint(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sincosint<__type>(__x).second;
+ }
+
+ // Hyperbolic sine integrals
+
+ /**
+ * Return the hyperbolic sine integral of @c float argument @f$ x @f$.
+ *
+ * @see sinhint for details.
+ */
+ inline float
+ sinhintf(float __x)
+ { return std::__detail::__sinhint<float>(__x); }
+
+ /**
+ * Return the hyperbolic sine integral @f$ Shi(x) @f$ of <tt>long double</tt>
+ * argument @f$ x @f$.
+ *
+ * @see sinhint for details.
+ */
+ inline long double
+ sinhintl(long double __x)
+ { return std::__detail::__sinhint<long double>(__x); }
+
+ /**
+ * Return the hyperbolic sine integral @f$ Shi(x) @f$
+ * of real argument @f$ x @f$.
+ *
+ * The hyperbolic sine integral is defined by
+ * @f[
+ * Shi(x) = \int_0^x \frac{\sinh(t)}{t}dt
+ * @f]
+ *
+ * @tparam _Tp The type of the real argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sinhint(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sinhint<__type>(__x);
+ }
+
+ // Hyperbolic cosine integrals
+
+ /**
+ * Return the hyperbolic cosine integral of @c float argument @f$ x @f$.
+ *
+ * @see coshint for details.
+ */
+ inline float
+ coshintf(float __x)
+ { return std::__detail::__coshint<float>(__x); }
+
+ /**
+ * Return the hyperbolic cosine integral @f$ Chi(x) @f$
+ * of <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see coshint for details.
+ */
+ inline long double
+ coshintl(long double __x)
+ { return std::__detail::__coshint<long double>(__x); }
+
+ /**
+ * Return the hyperbolic cosine integral @f$ Chi(x) @f$
+ * of real argument @f$ x @f$.
+ *
+ * The hyperbolic cosine integral is defined by
+ * @f[
+ * Chi(x) = -\int_x^\infty \frac{cosh(t)}{t}dt
+ * = \gamma_E + ln(x) + \int_0^x \frac{cosh(t)-1}{t}dt
+ * @f]
+ *
+ * @tparam _Tp The type of the real argument
+ * @param __x The real argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ coshint(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__coshint<__type>(__x);
+ }
+
+ // Slots for Jacobi elliptic function tuple.
+ enum
+ {
+ _GLIBCXX_JACOBI_SN,
+ _GLIBCXX_JACOBI_CN,
+ _GLIBCXX_JACOBI_DN
+ };
+
+ // Jacobi elliptic sine amplitude functions.
+
+ /**
+ * Return the Jacobi elliptic @f$ sn(k,u) @f$ integral
+ * of @c float modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * @see jacobi_sn for details.
+ */
+ inline float
+ jacobi_snf(float __k, float __u)
+ {
+ return std::get<_GLIBCXX_JACOBI_SN>
+ (std::__detail::__jacobi_sncndn<float>(__k, __u));
+ }
+
+ /**
+ * Return the Jacobi elliptic @f$ sn(k,u) @f$ integral
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * @see jacobi_sn for details.
+ */
+ inline long double
+ jacobi_snl(long double __k, long double __u)
+ {
+ return std::get<_GLIBCXX_JACOBI_SN>
+ (std::__detail::__jacobi_sncndn<long double>(__k, __u));
+ }
+
+ /**
+ * Return the Jacobi elliptic @f$ sn(k,u) @f$ integral
+ * of real modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * The Jacobi elliptic @c sn integral is defined by
+ * @f[
+ * \sin(\phi) = sn(k, F(k,\phi))
+ * @f]
+ * where @f$ F(k,\phi) @f$ is the elliptic integral of the first kind.
+ *
+ * @tparam _Kp The type of the real modulus
+ * @tparam _Up The type of the real argument
+ * @param __k The real modulus
+ * @param __u The real argument
+ */
+ template<typename _Kp, typename _Up>
+ inline __gnu_cxx::__promote_fp_t<_Kp, _Up>
+ jacobi_sn(_Kp __k, _Up __u)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Kp, _Up>;
+ return std::get<_GLIBCXX_JACOBI_SN>
+ (std::__detail::__jacobi_sncndn<__type>(__k, __u));
+ }
+
+ // Jacobi elliptic cosine amplitude functions.
+
+ /**
+ * Return the Jacobi elliptic @f$ cn(k,u) @f$ integral
+ * of @c float modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * @see jacobi_cn for details.
+ */
+ inline float
+ jacobi_cnf(float __k, float __u)
+ {
+ return std::get<_GLIBCXX_JACOBI_CN>
+ (std::__detail::__jacobi_sncndn<float>(__k, __u));
+ }
+
+ /**
+ * Return the Jacobi elliptic @f$ cn(k,u) @f$ integral
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * @see jacobi_cn for details.
+ */
+ inline long double
+ jacobi_cnl(long double __k, long double __u)
+ {
+ return std::get<_GLIBCXX_JACOBI_CN>
+ (std::__detail::__jacobi_sncndn<long double>(__k, __u));
+ }
+
+ /**
+ * Return the Jacobi elliptic @f$ cn(k,u) @f$ integral
+ * of real modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * The Jacobi elliptic @c cn integral is defined by
+ * @f[
+ * \cos(\phi) = cn(k, F(k,\phi))
+ * @f]
+ * where @f$ F(k,\phi) @f$ is the elliptic integral of the first kind.
+ *
+ * @tparam _Kp The type of the real modulus
+ * @tparam _Up The type of the real argument
+ * @param __k The real modulus
+ * @param __u The real argument
+ */
+ template<typename _Kp, typename _Up>
+ inline __gnu_cxx::__promote_fp_t<_Kp, _Up>
+ jacobi_cn(_Kp __k, _Up __u)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Kp, _Up>;
+ return std::get<_GLIBCXX_JACOBI_CN>
+ (std::__detail::__jacobi_sncndn<__type>(__k, __u));
+ }
+
+ // Jacobi elliptic delta amplitude functions.
+
+ /**
+ * Return the Jacobi elliptic @f$ dn(k,u) @f$ integral
+ * of @c float modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * @see jacobi_dn for details.
+ */
+ inline float
+ jacobi_dnf(float __k, float __u)
+ {
+ return std::get<_GLIBCXX_JACOBI_DN>
+ (std::__detail::__jacobi_sncndn<float>(__k, __u));
+ }
+
+ /**
+ * Return the Jacobi elliptic @f$ dn(k,u) @f$ integral
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * @see jacobi_dn for details.
+ */
+ inline long double
+ jacobi_dnl(long double __k, long double __u)
+ {
+ return std::get<_GLIBCXX_JACOBI_DN>
+ (std::__detail::__jacobi_sncndn<long double>(__k, __u));
+ }
+
+ /**
+ * Return the Jacobi elliptic @f$ dn(k,u) @f$ integral
+ * of real modulus @f$ k @f$ and argument @f$ u @f$.
+ *
+ * The Jacobi elliptic @c dn integral is defined by
+ * @f[
+ * \sqrt{1 - k^2\sin(\phi)} = dn(k, F(k,\phi))
+ * @f]
+ * where @f$ F(k,\phi) @f$ is the elliptic integral of the first kind.
+ *
+ * @tparam _Kp The type of the real modulus
+ * @tparam _Up The type of the real argument
+ * @param __k The real modulus
+ * @param __u The real argument
+ */
+ template<typename _Kp, typename _Up>
+ inline __gnu_cxx::__promote_fp_t<_Kp, _Up>
+ jacobi_dn(_Kp __k, _Up __u)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Kp, _Up>;
+ return std::get<_GLIBCXX_JACOBI_DN>
+ (std::__detail::__jacobi_sncndn<__type>(__k, __u));
+ }
+
+ // Chebyshev polynomials of the first kind
+
+ /**
+ * Return the Chebyshev polynomials of the first kind @f$ T_n(x) @f$
+ * of non-negative order @f$ n @f$ and @c float argument @f$ x @f$.
+ *
+ * @see chebyshev_t for details.
+ */
+ inline float
+ chebyshev_tf(unsigned int __n, float __x)
+ { return std::__detail::__chebyshev_t<float>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomials of the first kind @f$ T_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * @see chebyshev_t for details.
+ */
+ inline long double
+ chebyshev_tl(unsigned int __n, long double __x)
+ { return std::__detail::__chebyshev_t<long double>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomial of the first kind @f$ T_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the first kind is defined by:
+ * @f[
+ * T_n(x) = \cos(n \theta)
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ chebyshev_t(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__chebyshev_t<__type>(__n, __x);
+ }
+
+ // Chebyshev polynomials of the second kind
+
+ /**
+ * Return the Chebyshev polynomials of the second kind @f$ U_n(x) @f$
+ * of non-negative order @f$ n @f$ and @c float argument @f$ x @f$.
+ *
+ * @see chebyshev_u for details.
+ */
+ inline float
+ chebyshev_uf(unsigned int __n, float __x)
+ { return std::__detail::__chebyshev_u<float>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomials of the second kind @f$ U_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * @see chebyshev_u for details.
+ */
+ inline long double
+ chebyshev_ul(unsigned int __n, long double __x)
+ { return std::__detail::__chebyshev_u<long double>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomial of the second kind @f$ U_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the second kind is defined by:
+ * @f[
+ * U_n(x) = \frac{\sin \left[(n+1)\theta \right]}{\sin(\theta)}
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ chebyshev_u(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__chebyshev_u<__type>(__n, __x);
+ }
+
+ // Chebyshev polynomials of the third kind
+
+ /**
+ * Return the Chebyshev polynomials of the third kind @f$ V_n(x) @f$
+ * of non-negative order @f$ n @f$ and @c float argument @f$ x @f$.
+ *
+ * @see chebyshev_v for details.
+ */
+ inline float
+ chebyshev_vf(unsigned int __n, float __x)
+ { return std::__detail::__chebyshev_v<float>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomials of the third kind @f$ V_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * @see chebyshev_v for details.
+ */
+ inline long double
+ chebyshev_vl(unsigned int __n, long double __x)
+ { return std::__detail::__chebyshev_v<long double>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomial of the third kind @f$ V_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the third kind is defined by:
+ * @f[
+ * V_n(x) = \frac{\cos \left[ \left(n+\frac{1}{2}\right)\theta \right]}
+ * {\cos \left(\frac{\theta}{2}\right)}
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ chebyshev_v(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__chebyshev_v<__type>(__n, __x);
+ }
+
+ // Chebyshev polynomials of the fourth kind
+
+ /**
+ * Return the Chebyshev polynomials of the fourth kind @f$ W_n(x) @f$
+ * of non-negative order @f$ n @f$ and @c float argument @f$ x @f$.
+ *
+ * @see chebyshev_w for details.
+ */
+ inline float
+ chebyshev_wf(unsigned int __n, float __x)
+ { return std::__detail::__chebyshev_w<float>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomials of the fourth kind @f$ W_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * @see chebyshev_w for details.
+ */
+ inline long double
+ chebyshev_wl(unsigned int __n, long double __x)
+ { return std::__detail::__chebyshev_w<long double>(__n, __x); }
+
+ /**
+ * Return the Chebyshev polynomial of the fourth kind @f$ W_n(x) @f$
+ * of non-negative order @f$ n @f$ and real argument @f$ x @f$.
+ *
+ * The Chebyshev polynomial of the fourth kind is defined by:
+ * @f[
+ * W_n(x) = \frac{\sin \left[ \left(n+\frac{1}{2}\right)\theta \right]}
+ * {\sin \left(\frac{\theta}{2}\right)}
+ * @f]
+ * where @f$ \theta = \arccos(x) @f$, @f$ -1 <= x <= +1 @f$.
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral order
+ * @param __x The real argument @f$ -1 <= x <= +1 @f$
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ chebyshev_w(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__chebyshev_w<__type>(__n, __x);
+ }
+
+ // Jacobi polynomials
+
+ /**
+ * Return the Jacobi polynomial @f$ P_n^{(\alpha,\beta)}(x) @f$
+ * of degree @f$ n @f$ and @c float orders @f$ \alpha, \beta > -1 @f$
+ * and argument @f$ x @f$.
+ *
+ * @see jacobi for details.
+ */
+ inline float
+ jacobif(unsigned __n, float __alpha, float __beta, float __x)
+ { return std::__detail::__poly_jacobi<float>(__n, __alpha, __beta, __x); }
+
+ /**
+ * Return the Jacobi polynomial @f$ P_n^{(\alpha,\beta)}(x) @f$
+ * of degree @f$ n @f$ and @c <tt>long double</tt> orders @f$ \alpha, \beta > -1 @f$
+ * and argument @f$ x @f$.
+ *
+ * @see jacobi for details.
+ */
+ inline long double
+ jacobil(unsigned __n, long double __alpha, long double __beta, long double __x)
+ { return std::__detail::__poly_jacobi<long double>(__n, __alpha, __beta, __x); }
+
+ /**
+ * Return the Jacobi polynomial @f$ P_n^{(\alpha,\beta)}(x) @f$
+ * of degree @f$ n @f$ and @c float orders @f$ \alpha, \beta > -1 @f$
+ * and argument @f$ x @f$.
+ *
+ * The Jacobi polynomials are generated by a three-term recursion relation:
+ * @f[
+ * 2 n(\alpha + \beta + n) (\alpha + \beta + 2n - 2)
+ * P^{(\alpha, \beta)}_{n}(x)
+ * = (\alpha + \beta + 2n - 1)
+ * ((\alpha^2 - \beta^2)
+ * + x(\alpha + \beta + 2n - 2)(\alpha + \beta + 2n))
+ * P^{(\alpha, \beta)}_{n-1}(x)
+ * - 2 (\alpha + n - 1)(\beta + n - 1)(\alpha + \beta + 2n)
+ * P^{(\alpha, \beta)}_{n-2}(x)
+ * @f]
+ * where @f$ P_0^{(\alpha,\beta)}(x) = 1 @f$ and
+ * @f$ P_1^{(\alpha,\beta)}(x)
+ * = ((\alpha-\beta) + (2 + (\alpha+\beta)) * x) / 2 @f$.
+ *
+ * @tparam _Talpha The real type of the order @f$ \alpha @f$
+ * @tparam _Tbeta The real type of the order @f$ \beta @f$
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral degree
+ * @param __alpha The real order
+ * @param __beta The real order
+ * @param __x The real argument
+ */
+ template<typename _Talpha, typename _Tbeta, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Talpha, _Tbeta, _Tp>
+ jacobi(unsigned __n, _Talpha __alpha, _Tbeta __beta, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Talpha, _Tbeta, _Tp>;
+ return std::__detail::__poly_jacobi<__type>(__n, __alpha, __beta, __x);
+ }
+
+ // Gegenbauer polynomials
+
+ /**
+ * Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n
+ * and @c float order @f$ \alpha > -1/2, \alpha \neq 0 @f$ and argument @f$ x @f$.
+ *
+ * @see gegenbauer for details.
+ */
+ inline float
+ gegenbauerf(unsigned int __n, float __alpha, float __x)
+ { return std::__detail::__gegenbauer_poly<float>(__n, __alpha, __x); }
+
+ /**
+ * Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n
+ * and <tt>long double</tt> order @f$ \alpha > -1/2, \alpha \neq 0 @f$
+ * and argument @f$ x @f$.
+ *
+ * @see gegenbauer for details.
+ */
+ inline long double
+ gegenbauerl(unsigned int __n, long double __alpha, long double __x)
+ { return std::__detail::__gegenbauer_poly<long double>(__n, __alpha, __x); }
+
+ /**
+ * Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n
+ * and real order @f$ \alpha > -1/2, \alpha \neq 0 @f$ and argument @f$ x @f$.
+ *
+ * The Gegenbauer polynomials are generated by a three-term recursion relation:
+ * @f[
+ * C_n^{\alpha}(x) = \frac{1}{n}\left[ 2x(n+\alpha-1)C_{n-1}^{\alpha}(x)
+ * - (n+2\alpha-2)C_{n-2}^{\alpha}(x) \right]
+ * @f]
+ * and @f$ C_0^{\alpha}(x) = 1 @f$, @f$ C_1^{\alpha}(x) = 2\alpha x @f$.
+ *
+ * @tparam _Talpha The real type of the order
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative integral degree
+ * @param __alpha The real order
+ * @param __x The real argument
+ */
+ template<typename _Talpha, typename _Tp>
+ inline typename __gnu_cxx::__promote_fp_t<_Talpha, _Tp>
+ gegenbauer(unsigned int __n, _Talpha __alpha, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Talpha, _Tp>;
+ return std::__detail::__gegenbauer_poly<__type>(__n, __alpha, __x);
+ }
+
+ // Zernike polynomials
+
+ /**
+ * Return the Zernicke polynomial @f$ Z_n^m(\rho,\phi) @f$
+ * for non-negative degree @f$ n @f$, signed order @f$ m @f$,
+ * and real radial argument @f$ \rho @f$ and azimuthal angle @f$ \phi @f$.
+ *
+ * @see zernike for details.
+ */
+ inline float
+ zernikef(unsigned int __n, int __m, float __rho, float __phi)
+ { return std::__detail::__zernike<float>(__n, __m, __rho, __phi); }
+
+ /**
+ * Return the Zernicke polynomial @f$ Z_n^m(\rho,\phi) @f$
+ * for non-negative degree @f$ n @f$, signed order @f$ m @f$,
+ * and real radial argument @f$ \rho @f$ and azimuthal angle @f$ \phi @f$.
+ *
+ * @see zernike for details.
+ */
+ inline long double
+ zernikel(unsigned int __n, int __m, long double __rho, long double __phi)
+ { return std::__detail::__zernike<long double>(__n, __m, __rho, __phi); }
+
+ /**
+ * Return the Zernicke polynomial @f$ Z_n^m(\rho,\phi) @f$
+ * for non-negative degree @f$ n @f$, signed order @f$ m @f$,
+ * and real radial argument @f$ \rho @f$ and azimuthal angle @f$ \phi @f$.
+ *
+ * The even Zernicke polynomials are defined by:
+ * @f[
+ * Z_n^m(\rho,\phi) = R_n^m(\rho)\cos(m\phi)
+ * @f]
+ * and the odd Zernicke polynomials are defined by:
+ * @f[
+ * Z_n^{-m}(\rho,\phi) = R_n^m(\rho)\sin(m\phi)
+ * @f]
+ * for non-negative degree @f$ m @f$ and @f$ m <= n @f$
+ * and where @f$ R_n^m(\rho) @f$ is the radial polynomial (@see radpoly).
+ *
+ * @tparam _Trho The real type of the radial coordinate
+ * @tparam _Tphi The real type of the azimuthal angle
+ * @param __n The non-negative degree.
+ * @param __m The (signed) azimuthal order
+ * @param __rho The radial coordinate
+ * @param __phi The azimuthal angle
+ */
+ template<typename _Trho, typename _Tphi>
+ inline __gnu_cxx::__promote_fp_t<_Trho, _Tphi>
+ zernike(unsigned int __n, int __m, _Trho __rho, _Tphi __phi)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Trho, _Tphi>;
+ return std::__detail::__zernike<__type>(__n, __m, __rho, __phi);
+ }
+
+ // Radial polynomials
+
+ /**
+ * Return the radial polynomial @f$ R_n^m(\rho) @f$ for non-negative
+ * degree @f$ n @f$, order @f$ m <= n @f$, and @c float radial
+ * argument @f$ \rho @f$.
+ *
+ * @see radpoly for details.
+ */
+ inline float
+ radpolyf(unsigned int __n, unsigned int __m, float __rho)
+ { return std::__detail::__poly_radial_jacobi(__n, __m, __rho); }
+
+ /**
+ * Return the radial polynomial @f$ R_n^m(\rho) @f$ for non-negative
+ * degree @f$ n @f$, order @f$ m <= n @f$, and <tt>long double</tt> radial
+ * argument @f$ \rho @f$.
+ *
+ * @see radpoly for details.
+ */
+ inline long double
+ radpolyl(unsigned int __n, unsigned int __m, long double __rho)
+ { return std::__detail::__poly_radial_jacobi(__n, __m, __rho); }
+
+ /**
+ * Return the radial polynomial @f$ R_n^m(\rho) @f$ for non-negative
+ * degree @f$ n @f$, order @f$ m <= n @f$, and real radial
+ * argument @f$ \rho @f$.
+ *
+ * The radial polynomials are defined by
+ * @f[
+ * R_n^m(\rho) = \sum_{k=0}^{\frac{n-m}{2}}
+ * \frac{(-1)^k(n-k)!}{k!(\frac{n+m}{2}-k)!(\frac{n-m}{2}-k)!}
+ * \rho^{n-2k}
+ * @f]
+ * for @f$ n - m @f$ even and identically 0 for @f$ n - m @f$ odd.
+ * The radial polynomials can be related to the Jacobi polynomials:
+ * @f[
+ * R_n^m(\rho) =
+ * @f]
+ * @see jacobi for details on the Jacobi polynomials.
+ *
+ * @tparam _Tp The real type of the radial coordinate
+ * @param __n The non-negative degree.
+ * @param __m The non-negative azimuthal order
+ * @param __rho The radial argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ radpoly(unsigned int __n, unsigned int __m, _Tp __rho)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__poly_radial_jacobi<__type>(__n, __m, __rho);
+ }
+
+ // Unnormalized hyperbolic sinus cardinal functions
+
+ /**
+ * Return the hyperbolic sinus cardinal function @f$ sinhc_\pi(x) @f$
+ * for @c float argument @c __x.
+ *
+ * @see sinhc_pi for details.
+ */
+ inline float
+ sinhc_pif(float __x)
+ { return std::__detail::__sinhc_pi<float>(__x); }
+
+ /**
+ * Return the hyperbolic sinus cardinal function @f$ sinhc_\pi(x) @f$
+ * for <tt>long double</tt> argument @c __x.
+ *
+ * @see sinhc_pi for details.
+ */
+ inline long double
+ sinhc_pil(long double __x)
+ { return std::__detail::__sinhc_pi<long double>(__x); }
+
+ /**
+ * Return the hyperbolic sinus cardinal function @f$ sinhc_\pi(x) @f$
+ * for real argument @c __x.
+ * The sinus cardinal function is defined by:
+ * @f[
+ * sinhc_\pi(x) = \frac{\sinh(x)}{x}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sinhc_pi(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sinhc_pi<__type>(__x);
+ }
+
+ // Normalized hyperbolic sinus cardinal functions
+
+ /**
+ * Return the normalized hyperbolic sinus cardinal function @f$ sinhc(x) @f$
+ * for @c float argument @c __x.
+ *
+ * @see sinhc for details.
+ */
+ inline float
+ sinhcf(float __x)
+ { return std::__detail::__sinhc<float>(__x); }
+
+ /**
+ * Return the normalized hyperbolic sinus cardinal function @f$ sinhc(x) @f$
+ * for <tt>long double</tt> argument @c __x.
+ *
+ * @see sinhc for details.
+ */
+ inline long double
+ sinhcl(long double __x)
+ { return std::__detail::__sinhc<long double>(__x); }
+
+ /**
+ * Return the normalized hyperbolic sinus cardinal function @f$ sinhc(x) @f$
+ * for real argument @c __x.
+ * The normalized hyperbolic sinus cardinal function is defined by:
+ * @f[
+ * sinhc(x) = \frac{\sinh(\pi x)}{\pi x}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sinhc(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sinhc<__type>(__x);
+ }
+
+ // Cylindrical Hankel functions of the first kind
+
+ /**
+ * Return the cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_\nu(x) @f$ of @c float order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_hankel_1 for details.
+ */
+ inline std::complex<float>
+ cyl_hankel_1f(float __nu, float __z)
+ { return std::__detail::__cyl_hankel_1<float>(__nu, __z); }
+
+ /**
+ * Return the cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_\nu(x) @f$ of <tt>long double</tt> order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_hankel_1 for details.
+ */
+ inline std::complex<long double>
+ cyl_hankel_1l(long double __nu, long double __z)
+ { return std::__detail::__cyl_hankel_1<long double>(__nu, __z); }
+
+ /**
+ * Return the cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_n(x) @f$ of real order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * The cylindrical Hankel function of the first kind is defined by:
+ * @f[
+ * H^{(1)}_\nu(x) = \left(\frac{\pi}{2x} \right) ^{1/2}
+ * \left[ J_{n+1/2}(x) + iN_{n+1/2}(x) \right]
+ * @f]
+ * where @f$ J_\nu(x) @f$ and @f$ N_\nu(x) @f$ are the cylindrical Bessel
+ * and Neumann functions respectively (@see cyl_bessel and cyl_neumann).
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __nu The real order
+ * @param __z The real argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tpnu, _Tp>>
+ cyl_hankel_1(_Tpnu __nu, _Tp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__cyl_hankel_1<__type>(__nu, __z);
+ }
+
+ // Cylindrical Hankel functions of the second kind
+
+ /**
+ * Return the cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_\nu(x) @f$ of @c float order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_hankel_2 for details.
+ */
+ inline std::complex<float>
+ cyl_hankel_2f(float __nu, float __z)
+ { return std::__detail::__cyl_hankel_2<float>(__nu, __z); }
+
+ /**
+ * Return the cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_\nu(x) @f$ of <tt>long double</tt> order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * @see cyl_hankel_2 for details.
+ */
+ inline std::complex<long double>
+ cyl_hankel_2l(long double __nu, long double __z)
+ { return std::__detail::__cyl_hankel_2<long double>(__nu, __z); }
+
+ /**
+ * Return the cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_n(x) @f$ of real order @f$ \nu @f$
+ * and argument @f$ x >= 0 @f$.
+ *
+ * The cylindrical Hankel function of the second kind is defined by:
+ * @f[
+ * H^{(2)}_\nu(x) = \left(\frac{\pi}{2x} \right) ^{1/2}
+ * \left[ J_{n+1/2}(x) - iN_{n+1/2}(x) \right]
+ * @f]
+ * where @f$ J_\nu(x) @f$ and @f$ N_\nu(x) @f$ are the cylindrical Bessel
+ * and Neumann functions respectively (@see cyl_bessel and cyl_neumann).
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __nu The real order
+ * @param __z The real argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tpnu, _Tp>>
+ cyl_hankel_2(_Tpnu __nu, _Tp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__cyl_hankel_2<__type>(__nu, __z);
+ }
+
+ // Spherical Hankel functions of the first kind
+
+ /**
+ * Return the spherical Hankel function of the first kind @f$ h^{(1)}_n(x) @f$
+ * of nonnegative order n and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see sph_hankel_1 for details.
+ */
+ inline std::complex<float>
+ sph_hankel_1f(unsigned int __n, float __z)
+ { return std::__detail::__sph_hankel_1<float>(__n, __z); }
+
+ /**
+ * Return the spherical Hankel function of the first kind @f$ h^{(1)}_n(x) @f$
+ * of nonnegative order n and @c <tt>long double</tt> argument @f$ x >= 0 @f$.
+ *
+ * @see sph_hankel_1 for details.
+ */
+ inline std::complex<long double>
+ sph_hankel_1l(unsigned int __n, long double __z)
+ { return std::__detail::__sph_hankel_1<long double>(__n, __z); }
+
+ /**
+ * Return the spherical Hankel function of the first kind @f$ h^{(1)}_n(x) @f$
+ * of nonnegative order @f$ n @f$ and real argument @f$ x >= 0 @f$.
+ *
+ * The spherical Hankel function of the first kind is defined by:
+ * @f[
+ * h^{(1)}_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} H^{(1)}_{n+1/2}(x)
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative order
+ * @param __z The real argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ sph_hankel_1(unsigned int __n, _Tp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sph_hankel_1<__type>(__n, __z);
+ }
+
+ // Spherical Hankel functions of the second kind
+
+ /**
+ * Return the spherical Hankel function of the second kind @f$ h^{(2)}_n(x)@f$
+ * of nonnegative order n and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see sph_hankel_2 for details.
+ */
+ inline std::complex<float>
+ sph_hankel_2f(unsigned int __n, float __z)
+ { return std::__detail::__sph_hankel_2<float>(__n, __z); }
+
+ /**
+ * Return the spherical Hankel function of the second kind @f$ h^{(2)}_n(x)@f$
+ * of nonnegative order n and @c <tt>long double</tt> argument @f$ x >= 0 @f$.
+ *
+ * @see sph_hankel_2 for details.
+ */
+ inline std::complex<long double>
+ sph_hankel_2l(unsigned int __n, long double __z)
+ { return std::__detail::__sph_hankel_2<long double>(__n, __z); }
+
+ /**
+ * Return the spherical Hankel function of the second kind @f$ h^{(2)}_n(x)@f$
+ * of nonnegative order @f$ n @f$ and real argument @f$ x >= 0 @f$.
+ *
+ * The spherical Hankel function of the second kind is defined by:
+ * @f[
+ * h^{(2)}_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} H^{(2)}_{n+1/2}(x)
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The non-negative order
+ * @param __z The real argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ sph_hankel_2(unsigned int __n, _Tp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sph_hankel_2<__type>(__n, __z);
+ }
+
+ // Modified spherical Bessel functions of the first kind
+
+ /**
+ * Return the regular modified spherical Bessel function @f$ i_n(x) @f$
+ * of nonnegative order n and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see sph_bessel_i for details.
+ */
+ inline float
+ sph_bessel_if(unsigned int __n, float __x)
+ {
+ float __i_n, __k_n, __ip_n, __kp_n;
+ std::__detail::__sph_bessel_ik<float>(__n, __x,
+ __i_n, __k_n, __ip_n, __kp_n);
+ return __i_n;
+ }
+
+ /**
+ * Return the regular modified spherical Bessel function @f$ i_n(x) @f$
+ * of nonnegative order n and <tt>long double</tt> argument @f$ x >= 0 @f$.
+ *
+ * @see sph_bessel_i for details.
+ */
+ inline long double
+ sph_bessel_il(unsigned int __n, long double __x)
+ {
+ long double __i_n, __k_n, __ip_n, __kp_n;
+ std::__detail::__sph_bessel_ik<long double>(__n, __x,
+ __i_n, __k_n, __ip_n, __kp_n);
+ return __i_n;
+ }
+
+ /**
+ * Return the regular modified spherical Bessel function @f$ i_n(x) @f$
+ * of nonnegative order n and real argument @f$ x >= 0 @f$.
+ *
+ * The spherical Bessel function is defined by:
+ * @f[
+ * i_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} I_{n+1/2}(x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The integral order <tt> n >= 0 </tt>
+ * @param __x The real argument <tt> x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sph_bessel_i(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ __type __i_n, __k_n, __ip_n, __kp_n;
+ std::__detail::__sph_bessel_ik<__type>(__n, __x,
+ __i_n, __k_n, __ip_n, __kp_n);
+ return __i_n;
+ }
+
+ // Modified spherical Bessel functions of the second kind
+
+ /**
+ * Return the irregular modified spherical Bessel function @f$ k_n(x) @f$
+ * of nonnegative order n and @c float argument @f$ x >= 0 @f$.
+ *
+ * @see sph_bessel_k for more details.
+ */
+ inline float
+ sph_bessel_kf(unsigned int __n, float __x)
+ {
+ float __i_n, __k_n, __ip_n, __kp_n;
+ std::__detail::__sph_bessel_ik<float>(__n, __x,
+ __i_n, __k_n, __ip_n, __kp_n);
+ return __k_n;
+ }
+
+ /**
+ * Return the irregular modified spherical Bessel function @f$ k_n(x) @f$
+ * of nonnegative order n and <tt>long double</tt> argument @f$ x >= 0 @f$.
+ *
+ * @see sph_bessel_k for more details.
+ */
+ inline long double
+ sph_bessel_kl(unsigned int __n, long double __x)
+ {
+ long double __i_n, __k_n, __ip_n, __kp_n;
+ std::__detail::__sph_bessel_ik<long double>(__n, __x,
+ __i_n, __k_n, __ip_n, __kp_n);
+ return __k_n;
+ }
+
+ /**
+ * Return the irregular modified spherical Bessel function @f$ k_n(x) @f$
+ * of nonnegative order n and real argument @f$ x >= 0 @f$.
+ *
+ * The spherical Bessel function is defined by:
+ * @f[
+ * k_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} K_{n+1/2}(x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __n The integral order <tt> n >= 0 </tt>
+ * @param __x The real argument <tt> x >= 0 </tt>
+ * @throw std::domain_error if <tt> __x < 0 </tt>.
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ sph_bessel_k(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ __type __i_n, __k_n, __ip_n, __kp_n;
+ std::__detail::__sph_bessel_ik<__type>(__n, __x,
+ __i_n, __k_n, __ip_n, __kp_n);
+ return __k_n;
+ }
+
+ // Airy functions of the first kind
+
+ /**
+ * Return the Airy function @f$ Ai(x) @f$ for @c float argument @f$ x @f$.
+ *
+ * @see airy_ai for details.
+ */
+ inline float
+ airy_aif(float __x)
+ {
+ float __Ai, __Bi, __Aip, __Bip;
+ std::__detail::__airy<float>(__x, __Ai, __Bi, __Aip, __Bip);
+ return __Ai;
+ }
+
+ /**
+ * Return the Airy function @f$ Ai(x) @f$ for <tt>long double</tt>
+ * argument @f$ x @f$.
+ *
+ * @see airy_ai for details.
+ */
+ inline long double
+ airy_ail(long double __x)
+ {
+ long double __Ai, __Bi, __Aip, __Bip;
+ std::__detail::__airy<long double>(__x, __Ai, __Bi, __Aip, __Bip);
+ return __Ai;
+ }
+
+ /**
+ * Return the Airy function @f$ Ai(x) @f$ of real argument @f$ x @f$.
+ *
+ * The Airy function is defined by:
+ * @f[
+ * Ai(x) = \frac{1}{\pi}\int_0^\infty
+ * \cos \left(\frac{t^3}{3} + xt \right)dt
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ airy_ai(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ __type __Ai, __Bi, __Aip, __Bip;
+ std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip);
+ return __Ai;
+ }
+
+ /**
+ * Return the Airy function @f$ Ai(x) @f$ of complex argument @f$ x @f$.
+ *
+ * The Airy function is defined by:
+ * @f[
+ * Ai(x) = \frac{1}{\pi}\int_0^\infty
+ * \cos \left(\frac{t^3}{3} + xt \right)dt
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The complex argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ airy_ai(std::complex<_Tp> __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__airy_ai<__type>(__x);
+ }
+
+ // Airy functions of the second kind
+
+ /**
+ * Return the Airy function @f$ Bi(x) @f$ for @c float argument @f$ x @f$.
+ *
+ * @see airy_bi for details.
+ */
+ inline float
+ airy_bif(float __x)
+ {
+ float __Ai, __Bi, __Aip, __Bip;
+ std::__detail::__airy<float>(__x, __Ai, __Bi, __Aip, __Bip);
+ return __Bi;
+ }
+
+ /**
+ * Return the Airy function @f$ Bi(x) @f$ for <tt>long double</tt>
+ * argument @f$ x @f$.
+ *
+ * @see airy_bi for details.
+ */
+ inline long double
+ airy_bil(long double __x)
+ {
+ long double __Ai, __Bi, __Aip, __Bip;
+ std::__detail::__airy<long double>(__x, __Ai, __Bi, __Aip, __Bip);
+ return __Bi;
+ }
+
+ /**
+ * Return the Airy function @f$ Bi(x) @f$ of real argument @f$ x @f$.
+ *
+ * The Airy function is defined by:
+ * @f[
+ * Bi(x) = \frac{1}{\pi}\int_0^\infty \left[
+ * \exp \left(-\frac{t^3}{3} + xt \right)
+ * + \sin \left(\frac{t^3}{3} + xt \right) \right] dt
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ airy_bi(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ __type __Ai, __Bi, __Aip, __Bip;
+ std::__detail::__airy<__type>(__x, __Ai, __Bi, __Aip, __Bip);
+ return __Bi;
+ }
+
+ /**
+ * Return the Airy function @f$ Bi(x) @f$ of complex argument @f$ x @f$.
+ *
+ * The Airy function is defined by:
+ * @f[
+ * Bi(x) = \frac{1}{\pi}\int_0^\infty \left[
+ * \exp \left(-\frac{t^3}{3} + xt \right)
+ * + \sin \left(\frac{t^3}{3} + xt \right) \right] dt
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __x The complex argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ airy_bi(std::complex<_Tp> __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__airy_bi<__type>(__x);
+ }
+
+ // Log Gamma function for complex argument.
+
+ /**
+ * Return the logarithm of the gamma function for
+ * <tt> std::complex<float> </tt> argument.
+ *
+ * @see lgamma for details.
+ */
+ inline std::complex<float>
+ lgammaf(std::complex<float> __a)
+ { return std::__detail::__log_gamma<std::complex<float>>(__a); }
+
+ /**
+ * Return the logarithm of the gamma function for
+ * <tt> std::complex<long double> </tt> argument.
+ *
+ * @see lgamma for details.
+ */
+ inline std::complex<long double>
+ lgammal(std::complex<long double> __a)
+ { return std::__detail::__log_gamma<std::complex<long double>>(__a); }
+
+ /**
+ * Return the logarithm of the gamma function for complex argument.
+ */
+ template<typename _Ta>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Ta>>
+ lgamma(std::complex<_Ta> __a)
+ {
+ using __type = std::complex<__gnu_cxx::__promote_fp_t<_Ta>>;
+ return std::__detail::__log_gamma<__type>(__a);
+ }
+
+ // Gamma function for complex argument.
+
+ /**
+ * Return the gamma function for <tt> std::complex<float> </tt> argument.
+ *
+ * @see lgamma for details.
+ */
+ inline std::complex<float>
+ tgammaf(std::complex<float> __a)
+ { return std::__detail::__gamma<std::complex<float>>(__a); }
+
+ /**
+ * Return the gamma function for <tt> std::complex<long double> </tt>
+ * argument.
+ *
+ * @see lgamma for details.
+ */
+ inline std::complex<long double>
+ tgammal(std::complex<long double> __a)
+ { return std::__detail::__gamma<std::complex<long double>>(__a); }
+
+ /**
+ * Return the gamma function for complex argument.
+ */
+ template<typename _Ta>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Ta>>
+ tgamma(std::complex<_Ta> __a)
+ {
+ using __type = std::complex<__gnu_cxx::__promote_fp_t<_Ta>>;
+ return std::__detail::__gamma<__type>(__a);
+ }
+
+ // Upper incomplete gamma functions
+
+ /**
+ * Return the upper incomplete gamma function @f$ \Gamma(a,x) @f$
+ * for @c float argument.
+ *
+ * @see tgamma for details.
+ */
+ inline float
+ tgammaf(float __a, float __x)
+ { return std::__detail::__tgamma<float>(__a, __x); }
+
+ /**
+ * Return the upper incomplete gamma function @f$ \Gamma(a,x) @f$
+ * for <tt>long double</tt> argument.
+ *
+ * @see tgamma for details.
+ */
+ inline long double
+ tgammal(long double __a, long double __x)
+ { return std::__detail::__tgamma<long double>(__a, __x); }
+
+ /**
+ * Return the upper incomplete gamma function @f$ \Gamma(a,x) @f$.
+ * The (upper) incomplete gamma function is defined by
+ * @f[
+ * \Gamma(a,x) = \int_x^\infty t^{a-1}e^{-t}dt
+ * @f]
+ */
+ template<typename _Ta, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Ta, _Tp>
+ tgamma(_Ta __a, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ta, _Tp>;
+ return std::__detail::__tgamma<__type>(__a, __x);
+ }
+
+ // Lower incomplete gamma functions
+
+ /**
+ * Return the lower incomplete gamma function @f$ \gamma(a,x) @f$
+ * for @c float argument.
+ *
+ * @see tgamma_lower for details.
+ */
+ inline float
+ tgamma_lowerf(float __a, float __x)
+ { return std::__detail::__tgamma_lower<float>(__a, __x); }
+
+ /**
+ * Return the lower incomplete gamma function @f$ \gamma(a,x) @f$
+ * for <tt>long double</tt> argument.
+ *
+ * @see tgamma_lower for details.
+ */
+ inline long double
+ tgamma_lowerl(long double __a, long double __x)
+ { return std::__detail::__tgamma_lower<long double>(__a, __x); }
+
+ /**
+ * Return the lower incomplete gamma function @f$ \gamma(a,x) @f$.
+ * The lower incomplete gamma function is defined by
+ * @f[
+ * \gamma(a,x) = \int_0^x t^{a-1}e^{-t}dt
+ * @f]
+ */
+ template<typename _Ta, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Ta, _Tp>
+ tgamma_lower(_Ta __a, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ta, _Tp>;
+ return std::__detail::__tgamma_lower<__type>(__a, __x);
+ }
+
+ // Dilogarithm functions
+
+ /**
+ * Return the dilogarithm function @f$ \psi(z) @f$
+ * for @c float argument.
+ *
+ * @see dilog for details.
+ */
+ inline float
+ dilogf(float __x)
+ { return std::__detail::__dilog<float>(__x); }
+
+ /**
+ * Return the dilogarithm function @f$ \psi(z) @f$
+ * for <tt>long double</tt> argument.
+ *
+ * @see dilog for details.
+ */
+ inline long double
+ dilogl(long double __x)
+ { return std::__detail::__dilog<long double>(__x); }
+
+ /**
+ * Return the dilogarithm function @f$ \psi(z) @f$
+ * for real argument.
+ *
+ * The dilogarithm is defined by:
+ * @f[
+ * Li_2(x) = \sum_{k=1}^{\infty}\frac{x^k}{k^2}
+ * @f]
+ *
+ * @param __x The argument.
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ dilog(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__dilog<__type>(__x);
+ }
+
+ // Complete Carlson elliptic R_F functions
+
+ /**
+ * Return the complete Carlson elliptic function @f$ R_F(x,y,z) @f$
+ * for @c float arguments.
+ *
+ * @see comp_ellint_rf for details.
+ */
+ inline float
+ comp_ellint_rf(float __x, float __y)
+ { return std::__detail::__comp_ellint_rf<float>(__x, __y); }
+
+ /**
+ * Return the complete Carlson elliptic function @f$ R_F(x,y) @f$
+ * for <tt>long double</tt> arguments.
+ *
+ * @see comp_ellint_rf for details.
+ */
+ inline long double
+ comp_ellint_rf(long double __x, long double __y)
+ { return std::__detail::__comp_ellint_rf<long double>(__x, __y); }
+
+ /**
+ * Return the complete Carlson elliptic function @f$ R_F(x,y) @f$
+ * for real arguments.
+ *
+ * The complete Carlson elliptic function of the first kind is defined by:
+ * @f[
+ * R_F(x,y) = R_F(x,y,y) = \frac{1}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)}
+ * @f]
+ *
+ * @param __x The first argument.
+ * @param __y The second argument.
+ */
+ template<typename _Tx, typename _Ty>
+ inline __gnu_cxx::__promote_fp_t<_Tx, _Ty>
+ comp_ellint_rf(_Tx __x, _Ty __y)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tx, _Ty>;
+ return std::__detail::__comp_ellint_rf<__type>(__x, __y);
+ }
+
+ // Carlson elliptic R_F functions
+
+ /**
+ * Return the Carlson elliptic function @f$ R_F(x,y,z) @f$
+ * of the first kind for @c float arguments.
+ *
+ * @see ellint_rf for details.
+ */
+ inline float
+ ellint_rff(float __x, float __y, float __z)
+ { return std::__detail::__ellint_rf<float>(__x, __y, __z); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_F(x,y,z) @f$
+ * of the first kind for <tt>long double</tt> arguments.
+ *
+ * @see ellint_rf for details.
+ */
+ inline long double
+ ellint_rfl(long double __x, long double __y, long double __z)
+ { return std::__detail::__ellint_rf<long double>(__x, __y, __z); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_F(x,y,z) @f$
+ * of the first kind for real arguments.
+ *
+ * The Carlson elliptic function of the first kind is defined by:
+ * @f[
+ * R_F(x,y,z) = \frac{1}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)^{1/2}(t + z)^{1/2}}
+ * @f]
+ *
+ * @param __x The first of three symmetric arguments.
+ * @param __y The second of three symmetric arguments.
+ * @param __z The third of three symmetric arguments.
+ */
+ template<typename _Tp, typename _Up, typename _Vp>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp>
+ ellint_rf(_Tp __x, _Up __y, _Vp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp>;
+ return std::__detail::__ellint_rf<__type>(__x, __y, __z);
+ }
+
+ // Carlson elliptic R_C functions
+
+ /**
+ * Return the Carlson elliptic function @f$ R_C(x,y) @f$.
+ *
+ * @see ellint_rc for details.
+ */
+ inline float
+ ellint_rcf(float __x, float __y)
+ { return std::__detail::__ellint_rc<float>(__x, __y); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_C(x,y) @f$.
+ *
+ * @see ellint_rc for details.
+ */
+ inline long double
+ ellint_rcl(long double __x, long double __y)
+ { return std::__detail::__ellint_rc<long double>(__x, __y); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_C(x,y) = R_F(x,y,y) @f$
+ * where @f$ R_F(x,y,z) @f$ is the Carlson elliptic function
+ * of the first kind.
+ *
+ * The Carlson elliptic function is defined by:
+ * @f[
+ * R_C(x,y) = \frac{1}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)}
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first argument.
+ * @param __y The second argument.
+ */
+ template<typename _Tp, typename _Up>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Up>
+ ellint_rc(_Tp __x, _Up __y)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up>;
+ return std::__detail::__ellint_rc<__type>(__x, __y);
+ }
+
+ // Carlson elliptic R_J functions
+
+ /**
+ * Return the Carlson elliptic function @f$ R_J(x,y,z,p) @f$.
+ *
+ * @see ellint_rj for details.
+ */
+ inline float
+ ellint_rjf(float __x, float __y, float __z, float __p)
+ { return std::__detail::__ellint_rj<float>(__x, __y, __z, __p); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_J(x,y,z,p) @f$.
+ *
+ * @see ellint_rj for details.
+ */
+ inline long double
+ ellint_rjl(long double __x, long double __y, long double __z, long double __p)
+ { return std::__detail::__ellint_rj<long double>(__x, __y, __z, __p); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_J(x,y,z,p) @f$
+ * of the third kind.
+ *
+ * The Carlson elliptic function of the third kind is defined by:
+ * @f[
+ * R_J(x,y,z,p) = \frac{3}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)^{1/2}(t + z)^{1/2}(t + p)}
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first of three symmetric arguments.
+ * @param __y The second of three symmetric arguments.
+ * @param __z The third of three symmetric arguments.
+ * @param __p The fourth argument.
+ */
+ template<typename _Tp, typename _Up, typename _Vp, typename _Wp>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp, _Wp>
+ ellint_rj(_Tp __x, _Up __y, _Vp __z, _Wp __p)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp, _Wp>;
+ return std::__detail::__ellint_rj<__type>(__x, __y, __z, __p);
+ }
+
+ // Carlson elliptic R_D functions
+
+ /**
+ * Return the Carlson elliptic function @f$ R_D(x,y,z) @f$.
+ *
+ * @see ellint_rd for details.
+ */
+ inline float
+ ellint_rdf(float __x, float __y, float __z)
+ { return std::__detail::__ellint_rd<float>(__x, __y, __z); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_D(x,y,z) @f$.
+ *
+ * @see ellint_rd for details.
+ */
+ inline long double
+ ellint_rdl(long double __x, long double __y, long double __z)
+ { return std::__detail::__ellint_rd<long double>(__x, __y, __z); }
+
+ /**
+ * Return the Carlson elliptic function of the second kind
+ * @f$ R_D(x,y,z) = R_J(x,y,z,z) @f$ where
+ * @f$ R_J(x,y,z,p) @f$ is the Carlson elliptic function
+ * of the third kind.
+ *
+ * The Carlson elliptic function of the second kind is defined by:
+ * @f[
+ * R_D(x,y,z) = \frac{3}{2} \int_0^\infty
+ * \frac{dt}{(t + x)^{1/2}(t + y)^{1/2}(t + z)^{3/2}}
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first of two symmetric arguments.
+ * @param __y The second of two symmetric arguments.
+ * @param __z The third argument.
+ */
+ template<typename _Tp, typename _Up, typename _Vp>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp>
+ ellint_rd(_Tp __x, _Up __y, _Vp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp>;
+ return std::__detail::__ellint_rd<__type>(__x, __y, __z);
+ }
+
+ // Complete Carlson elliptic R_G functions
+
+ /**
+ * Return the Carlson complementary elliptic function @f$ R_G(x,y) @f$.
+ *
+ * @see comp_ellint_rg for details.
+ */
+ inline float
+ comp_ellint_rg(float __x, float __y)
+ { return std::__detail::__comp_ellint_rg<float>(__x, __y); }
+
+ /**
+ * Return the Carlson complementary elliptic function @f$ R_G(x,y) @f$.
+ *
+ * @see comp_ellint_rg for details.
+ */
+ inline long double
+ comp_ellint_rg(long double __x, long double __y)
+ { return std::__detail::__comp_ellint_rg<long double>(__x, __y); }
+
+ /**
+ * Return the complete Carlson elliptic function @f$ R_G(x,y) @f$
+ * for real arguments.
+ *
+ * The complete Carlson elliptic function is defined by:
+ * @f[
+ * R_G(x,y) = R_G(x,y,y) = \frac{1}{4} \int_0^\infty
+ * dt t (t + x)^{-1/2}(t + y)^{-1}
+ * (\frac{x}{t + x} + \frac{2y}{t + y})
+ * @f]
+ *
+ * @param __x The first argument.
+ * @param __y The second argument.
+ */
+ template<typename _Tx, typename _Ty>
+ inline __gnu_cxx::__promote_fp_t<_Tx, _Ty>
+ comp_ellint_rg(_Tx __x, _Ty __y)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tx, _Ty>;
+ return std::__detail::__comp_ellint_rg<__type>(__x, __y);
+ }
+
+ // Carlson elliptic R_G functions
+
+ /**
+ * Return the Carlson elliptic function @f$ R_G(x,y) @f$.
+ *
+ * @see ellint_rg for details.
+ */
+ inline float
+ ellint_rgf(float __x, float __y, float __z)
+ { return std::__detail::__ellint_rg<float>(__x, __y, __z); }
+
+ /**
+ * Return the Carlson elliptic function @f$ R_G(x,y) @f$.
+ *
+ * @see ellint_rg for details.
+ */
+ inline long double
+ ellint_rgl(long double __x, long double __y, long double __z)
+ { return std::__detail::__ellint_rg<long double>(__x, __y, __z); }
+
+ /**
+ * Return the symmetric Carlson elliptic function of the second kind
+ * @f$ R_G(x,y,z) @f$.
+ *
+ * The Carlson symmetric elliptic function of the second kind is defined by:
+ * @f[
+ * R_G(x,y,z) = \frac{1}{4} \int_0^\infty
+ * dt t [(t + x)(t + y)(t + z)]^{-1/2}
+ * (\frac{x}{t + x} + \frac{y}{t + y} + \frac{z}{t + z})
+ * @f]
+ *
+ * Based on Carlson's algorithms:
+ * - B. C. Carlson Numer. Math. 33, 1 (1979)
+ * - B. C. Carlson, Special Functions of Applied Mathematics (1977)
+ * - Numerical Recipes in C, 2nd ed, pp. 261-269,
+ * by Press, Teukolsky, Vetterling, Flannery (1992)
+ *
+ * @param __x The first of three symmetric arguments.
+ * @param __y The second of three symmetric arguments.
+ * @param __z The third of three symmetric arguments.
+ */
+ template<typename _Tp, typename _Up, typename _Vp>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp>
+ ellint_rg(_Tp __x, _Up __y, _Vp __z)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up, _Vp>;
+ return std::__detail::__ellint_rg<__type>(__x, __y, __z);
+ }
+
+ // Hurwitz zeta functions
+
+ /**
+ * Return the Hurwitz zeta function of @c float argument @f$ s @f$,
+ * and parameter @f$ a @f$.
+ *
+ * @see hurwitz_zeta for details.
+ */
+ inline float
+ hurwitz_zetaf(float __s, float __a)
+ { return std::__detail::__hurwitz_zeta<float>(__s, __a); }
+
+ /**
+ * Return the Hurwitz zeta function of <tt>long double</tt> argument @f$ s @f$,
+ * and parameter @f$ a @f$.
+ *
+ * @see hurwitz_zeta for details.
+ */
+ inline long double
+ hurwitz_zetal(long double __s, long double __a)
+ { return std::__detail::__hurwitz_zeta<long double>(__s, __a); }
+
+ /**
+ * Return the Hurwitz zeta function of real argument @f$ s @f$, and parameter @f$ a @f$.
+ *
+ * The the Hurwitz zeta function is defined by
+ * @f[
+ * \zeta(s, a) = \sum_{n=0}^{\infty}\frac{1}{(a + n)^s}
+ * @f]
+ *
+ * @param __s The argument
+ * @param __a The parameter
+ */
+ template<typename _Tp, typename _Up>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Up>
+ hurwitz_zeta(_Tp __s, _Up __a)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up>;
+ return std::__detail::__hurwitz_zeta<__type>(__s, __a);
+ }
+
+ /**
+ * Return the Hurwitz zeta function of real argument @f$ s @f$,
+ * and complex parameter @f$ a @f$.
+ *
+ * @see hurwitz_zeta for details.
+ */
+ template<typename _Tp, typename _Up>
+ std::complex<_Tp>
+ hurwitz_zeta(_Tp __s, std::complex<_Up> __a)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Up>;
+ return std::__detail::__hurwitz_zeta<__type>(__s, __a);
+ }
+
+ // Digamma or psi functions
+
+ /**
+ * Return the psi or digamma function of @c float argument @f$ x @f$.
+ *
+ * @see psi for details.
+ */
+ inline float
+ psif(float __x)
+ { return std::__detail::__psi<float>(__x); }
+
+ /**
+ * Return the psi or digamma function of <tt>long double</tt> argument
+ * @f$ x @f$.
+ *
+ * @see psi for details.
+ */
+ inline long double
+ psil(long double __x)
+ { return std::__detail::__psi<long double>(__x); }
+
+ /**
+ * Return the psi or digamma function of argument @f$ x @f$.
+ *
+ * The the psi or digamma function is defined by
+ * @f[
+ * \psi(x) = \frac{d}{dx}log\left(\Gamma(x)\right)
+ * = \frac{\Gamma'(x)}{\Gamma(x)}
+ * @f]
+ *
+ * @param __x The parameter
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ psi(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__psi<__type>(__x);
+ }
+
+ // Incomplete beta functions
+
+ /**
+ * Return the regularized incomplete beta function of parameters @f$ a @f$, @f$ b @f$,
+ * and argument @f$ x @f$.
+ *
+ * See ibeta for details.
+ */
+ inline float
+ ibetaf(float __a, float __b, float __x)
+ { return std::__detail::__beta_inc<float>(__a, __b, __x); }
+
+ /**
+ * Return the regularized incomplete beta function of parameters @f$ a @f$, @f$ b @f$,
+ * and argument @f$ x @f$.
+ *
+ * See ibeta for details.
+ */
+ inline long double
+ ibetal(long double __a, long double __b, long double __x)
+ { return std::__detail::__beta_inc<long double>(__a, __b, __x); }
+
+ /**
+ * Return the regularized incomplete beta function of parameters @f$ a @f$, @f$ b @f$,
+ * and argument @f$ x @f$.
+ *
+ * The regularized incomplete beta function is defined by
+ * @f[
+ * I_x(a, b) = \frac{B_x(a,b)}{B(a,b)}
+ * @f]
+ * where
+ * @f[
+ * B_x(a,b) = \int_0^x t^{a - 1} (1 - t)^{b - 1} dt
+ * @f]
+ * is the non-regularized incomplete beta function and @f$ B(a,b) @f$
+ * is the usual beta function.
+ *
+ * @param __a The first parameter
+ * @param __b The second parameter
+ * @param __x The argument
+ */
+ template<typename _Ta, typename _Tb, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Ta, _Tb, _Tp>
+ ibeta(_Ta __a, _Tb __b, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ta, _Tb, _Tp>;
+ return std::__detail::__beta_inc<__type>(__a, __b, __x);
+ }
+
+ // Complementary incomplete beta functions
+
+ inline float
+ ibetacf(float __a, float __b, float __x)
+ { return 1.0F - ibetaf(__a, __b, __x); }
+
+ inline long double
+ ibetacl(long double __a, long double __b, long double __x)
+ { return 1.0L - ibetal(__a, __b, __x); }
+
+ /**
+ * Return the regularized complementary incomplete beta function
+ * of parameters @f$ a @f$, @f$ b @f$, and argument @f$ x @f$.
+ *
+ * The regularized complementary incomplete beta function is defined by
+ * @f[
+ * I_x(a, b) = I_x(a, b)
+ * @f]
+ *
+ * @param __a The parameter
+ * @param __b The parameter
+ * @param __x The argument
+ */
+ template<typename _Ta, typename _Tb, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Ta, _Tb, _Tp>
+ ibetac(_Ta __a, _Tb __b, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ta, _Tb, _Tp>;
+ return __type(1) - ibeta<__type>(__a, __b, __x);
+ }
+
+ // Fresnel sine integral
+
+ inline float
+ fresnel_sf(float __x)
+ { return std::imag(std::__detail::__fresnel<float>(__x)); }
+
+ inline long double
+ fresnel_sl(long double __x)
+ { return std::imag(std::__detail::__fresnel<long double>(__x)); }
+
+ /**
+ * Return the Fresnel sine integral of argument @f$ x @f$.
+ *
+ * The Fresnel sine integral is defined by
+ * @f[
+ * S(x) = \int_0^x \sin(\frac{\pi}{2}t^2) dt
+ * @f]
+ *
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ fresnel_s(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::imag(std::__detail::__fresnel<__type>(__x));
+ }
+
+ // Fresnel cosine integral
+
+ inline float
+ fresnel_cf(float __x)
+ { return std::real(std::__detail::__fresnel<float>(__x)); }
+
+ inline long double
+ fresnel_cl(long double __x)
+ { return std::real(std::__detail::__fresnel<long double>(__x)); }
+
+ /**
+ * Return the Fresnel cosine integral of argument @f$ x @f$.
+ *
+ * The Fresnel cosine integral is defined by
+ * @f[
+ * C(x) = \int_0^x \cos(\frac{\pi}{2}t^2) dt
+ * @f]
+ *
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ fresnel_c(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::real(std::__detail::__fresnel<__type>(__x));
+ }
+
+ // Dawson integral
+
+ /**
+ * Return the Dawson integral, @f$ F(x) @f$, for @c float argument @f$ x @f$.
+ *
+ * @see dawson for details.
+ */
+ inline float
+ dawsonf(float __x)
+ { return std::__detail::__dawson<float>(__x); }
+
+ /**
+ * Return the Dawson integral, @f$ F(x) @f$, for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see dawson for details.
+ */
+ inline long double
+ dawsonl(long double __x)
+ { return std::__detail::__dawson<long double>(__x); }
+
+ /**
+ * Return the Dawson integral, @f$ F(x) @f$, for real argument @f$ x @f$.
+ *
+ * The Dawson integral is defined by:
+ * @f[
+ * F(x) = e^{-x^2}\int_0^x e^{y^2}dy
+ * @f]
+ * and it's derivative is:
+ * @f[
+ * F'(x) = 1 - 2xF(x)
+ * @f]
+ *
+ * @param __x The argument @f$ -inf < x < inf @f$.
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ dawson(_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__dawson<__type>(__x);
+ }
+
+ // Exponential integrals
+
+ /**
+ * Return the exponential integral @f$ E_n(x) @f$ for integral
+ * order @f$ n @f$ and @c float argument @f$ x @f$.
+ *
+ * @see expint for details.
+ */
+ inline float
+ expintf(unsigned int __n, float __x)
+ { return std::__detail::__expint<float>(__n, __x); }
+
+ /**
+ * Return the exponential integral @f$ E_n(x) @f$ for integral
+ * order @f$ n @f$ and <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see expint for details.
+ */
+ inline long double
+ expintl(unsigned int __n, long double __x)
+ { return std::__detail::__expint<long double>(__n, __x); }
+
+ /**
+ * Return the exponential integral @f$ E_n(x) @f$ of integral
+ * order @f$ n @f$ and real argument @f$ x @f$.
+ * The exponential integral is defined by:
+ * @f[
+ * E_n(x) = \int_1^\infty \frac{e^{-tx}}{t^n}dt
+ * @f]
+ * In particular
+ * @f[
+ * E_1(x) = \int_1^\infty \frac{e^{-tx}}{t}dt = -Ei(-x)
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __n The integral order
+ * @param __x The real argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ expint(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__expint<__type>(__n, __x);
+ }
+
+ // Log upper Pochhammer symbol
+
+ inline float
+ lpochhammerf(float __a, float __n)
+ { return std::__detail::__log_pochhammer<float>(__a, __n); }
+
+ inline long double
+ lpochhammerl(long double __a, long double __n)
+ { return std::__detail::__log_pochhammer<long double>(__a, __n); }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Tn>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Tn>
+ lpochhammer(_Tp __a, _Tn __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Tn>;
+ return std::__detail::__log_pochhammer<__type>(__a, __n);
+ }
+
+ // Log lower Pochhammer symbol
+
+ inline float
+ lpochhammer_lowerf(float __a, float __n)
+ { return std::__detail::__log_pochhammer_lower<float>(__a, __n); }
+
+ inline long double
+ lpochhammer_lowerl(long double __a, long double __n)
+ { return std::__detail::__log_pochhammer_lower<long double>(__a, __n); }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Tn>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Tn>
+ lpochhammer_lower(_Tp __a, _Tn __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Tn>;
+ return std::__detail::__log_pochhammer_lower<__type>(__a, __n);
+ }
+
+ // Upper Pochhammer symbols
+
+ inline float
+ pochhammerf(float __a, float __n)
+ { return std::__detail::__pochhammer<float>(__a, __n); }
+
+ inline long double
+ pochhammerl(long double __a, long double __n)
+ { return std::__detail::__pochhammer<long double>(__a, __n); }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Tn>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Tn>
+ pochhammer(_Tp __a, _Tn __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Tn>;
+ return std::__detail::__pochhammer<__type>(__a, __n);
+ }
+
+ // Lower Pochhammer symbols
+
+ inline float
+ pochhammer_lowerf(float __a, float __n)
+ { return std::__detail::__pochhammer_lower<float>(__a, __n); }
+
+ inline long double
+ pochhammer_lowerl(long double __a, long double __n)
+ { return std::__detail::__pochhammer_lower<long double>(__a, __n); }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Tn>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Tn>
+ pochhammer_lower(_Tp __a, _Tn __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Tn>;
+ return std::__detail::__pochhammer_lower<__type>(__a, __n);
+ }
+
+ // Factorial
+
+ inline float
+ factorialf(unsigned int __n)
+ { return std::__detail::__factorial<float>(__n); }
+
+ inline long double
+ factoriall(unsigned int __n)
+ { return std::__detail::__factorial<long double>(__n); }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ factorial(unsigned int __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__factorial<__type>(__n);
+ }
+
+ // Double factorial
+
+ inline float
+ double_factorialf(int __n)
+ { return std::__detail::__double_factorial<float>(__n); }
+
+ inline long double
+ double_factoriall(int __n)
+ { return std::__detail::__double_factorial<long double>(__n); }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ double_factorial(int __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__double_factorial<__type>(__n);
+ }
+
+ // Log factorial
+
+ inline float
+ lfactorialf(unsigned int __n)
+ { return std::__detail::__log_factorial<float>(__n); }
+
+ inline long double
+ lfactoriall(unsigned int __n)
+ { return std::__detail::__log_factorial<long double>(__n); }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ lfactorial(unsigned int __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__log_factorial<__type>(__n);
+ }
+
+ // Log double factorial
+
+ inline float
+ ldouble_factorialf(int __n)
+ { return std::__detail::__log_double_factorial<float>(__n); }
+
+ inline long double
+ ldouble_factoriall(int __n)
+ { return std::__detail::__log_double_factorial<long double>(__n); }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ ldouble_factorial(int __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__log_double_factorial<__type>(__n);
+ }
+
+ // Binomial coefficient
+
+ inline float
+ bincoeff(unsigned int __n, unsigned int __k)
+ { return std::__detail::__bincoef<float>(__n, __k); }
+
+ inline long double
+ bincoefl(unsigned int __n, unsigned int __k)
+ { return std::__detail::__bincoef<long double>(__n, __k); }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ bincoef(unsigned int __n, unsigned int __k)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__bincoef<__type>(__n, __k);
+ }
+
+ // Log binomial coefficient
+
+ inline float
+ lbincoeff(unsigned int __n, unsigned int __k)
+ { return std::__detail::__log_bincoef<float>(__n, __k); }
+
+ inline long double
+ lbincoefl(unsigned int __n, unsigned int __k)
+ { return std::__detail::__log_bincoef<long double>(__n, __k); }
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ lbincoef(unsigned int __n, unsigned int __k)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__log_bincoef<__type>(__n, __k);
+ }
+
+ // Bernoulli numbers
+
+ /**
+ * Return the Bernoulli number of integer order @f$ n @f$ as a @c float.
+ *
+ * @see bernoulli for details.
+ */
+ inline float
+ bernoullif(unsigned int __n)
+ { return std::__detail::__bernoulli<float>(__n); }
+
+ /**
+ * Return the Bernoulli number of integer order @f$ n @f$ as a
+ * <tt>long double</tt>.
+ *
+ * @see bernoulli for details.
+ */
+ inline long double
+ bernoullil(unsigned int __n)
+ { return std::__detail::__bernoulli<long double>(__n); }
+
+ /**
+ * Return the Bernoulli number of integer order @f$ n @f$.
+ *
+ * The Bernoulli numbers are defined by
+ * @f[
+ *
+ * @f]
+ *
+ * @param __n The order.
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ bernoulli(unsigned int __n)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__bernoulli<__type>(__n);
+ }
+
+ // Legendre functions of the second kind
+
+ /**
+ * Return the Legendre function of the second kind @f$ Q_l(x) @f$
+ * of nonnegative degree @f$ l @f$ and @c float argument.
+ *
+ * @see legendre_q for details.
+ */
+ inline float
+ legendre_qf(unsigned int __n, float __x)
+ { return std::__detail::__legendre_q<float>(__n, __x); }
+
+ /**
+ * Return the Legendre function of the second kind @f$ Q_l(x) @f$
+ * of nonnegative degree @f$ l @f$ and <tt>long double</tt> argument.
+ *
+ * @see legendre_q for details.
+ */
+ inline long double
+ legendre_ql(unsigned int __n, long double __x)
+ { return std::__detail::__legendre_q<long double>(__n, __x); }
+
+ /**
+ * Return the Legendre function of the second kind @f$ Q_l(x) @f$ of
+ * nonnegative degree @f$ l @f$ and real argument @f$ |x| <= 0 @f$.
+ *
+ * The Legendre function of the second kind of order @f$ l @f$
+ * and argument @f$ x @f$, @f$ Q_l(x) @f$, is defined by:
+ * @f[
+ * Q_l(x) = \frac{1}{2} \log{\frac{x+1}{x-1}} P_l(x)
+ * - \sum_{k=0}^{l-1}\frac{(l+k)!}{(l-k)!(k!)^2s^k}
+ * \left[\psi(l+1) - \psi(k+1)\right](x-1)^k
+ * @f]
+ * where @f$ P_l(x) @f$ is the Legendre polynomial of degree @f$ l @f$
+ * and @f$ \psi(x) @f$ is the psi or dilogarithm function.
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __l The degree @f$ l >= 0 @f$
+ * @param __x The argument @c abs(__x) <= 1
+ * @throw std::domain_error if @c abs(__x) > 1
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ legendre_q(unsigned int __n, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__legendre_q<__type>(__n, __x);
+ }
+
+ // Scaled lower incomplete gamma
+
+ inline float
+ pgammaf(float __a, float __x)
+ { return std::__detail::__pgamma<float>(__a, __x); }
+
+ inline long double
+ pgammal(long double __a, long double __x)
+ { return std::__detail::__pgamma<long double>(__a, __x); }
+
+ /**
+ *
+ */
+ template<typename _Ta, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Ta, _Tp>
+ pgamma(_Ta __a, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ta, _Tp>;
+ return std::__detail::__pgamma<__type>(__a, __x);
+ }
+
+ // Scaled upper incomplete gamma
+
+ inline float
+ qgammaf(float __a, float __x)
+ { return std::__detail::__qgamma<float>(__a, __x); }
+
+ inline long double
+ qgammal(long double __a, long double __x)
+ { return std::__detail::__qgamma<long double>(__a, __x); }
+
+ /**
+ *
+ */
+ template<typename _Ta, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Ta, _Tp>
+ qgamma(_Ta __a,_Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ta, _Tp>;
+ return std::__detail::__qgamma<__type>(__a, __x);
+ }
+
+ // Jacobi zeta functions.
+
+ inline float
+ jacobi_zetaf(float __k, float __phi)
+ { return std::__detail::__jacobi_zeta<float>(__k, __phi); }
+
+ inline long double
+ jacobi_zetal(long double __k, long double __phi)
+ { return std::__detail::__jacobi_zeta<long double>(__k, __phi); }
+
+ /**
+ * Return the Jacobi zeta function of @f$ k @f$ and @f$ \phi @f$.
+ *
+ * The Jacobi zeta function is defined by
+ * @f[
+ * Z(m,\phi) = E(m,\phi) - \frac{E(m)F(m,\phi)}{K(m)}
+ * @f]
+ * where @f$ E(m,\phi) @f$ is the elliptic function of the second kind,
+ * @f$ E(m) @f$ is the complete ellitic function of the second kind,
+ * and @f$ F(m,\phi) @f$ is the elliptic function of the first kind.
+ *
+ * @tparam _Tk the real type of the modulus
+ * @tparam _Tphi the real type of the angle limit
+ * @param __k The modulus
+ * @param __phi The angle
+ */
+ template<typename _Tk, typename _Tphi>
+ inline __gnu_cxx::__promote_fp_t<_Tk, _Tphi>
+ jacobi_zeta(_Tk __k, _Tphi __phi)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tk, _Tphi>;
+ return std::__detail::__jacobi_zeta<__type>(__k, __phi);
+ }
+
+ // Heuman lambda functions.
+
+ inline float
+ heuman_lambdaf(float __k, float __phi)
+ { return std::__detail::__heuman_lambda<float>(__k, __phi); }
+
+ inline long double
+ heuman_lambdal(long double __k, long double __phi)
+ { return std::__detail::__heuman_lambda<long double>(__k, __phi); }
+
+ /**
+ * Return the Heuman lambda function @f$ \Lambda(k,\phi) @f$
+ * of modulus @f$ k @f$ and angular limit @f$ \phi @f$.
+ *
+ * The complete Heuman lambda function is defined by
+ * @f[
+ * \Lambda(k,\phi) = \frac{F(1-m,\phi)}{K(1-m)}
+ * + \frac{2}{\pi} K(m) Z(1-m,\phi)
+ * @f]
+ * where @f$ m = k^2 @f$, @f$ K(k) @f$ is the complete elliptic function
+ * of the first kind, and @f$ Z(k,phi) @f$ is the Jacobi zeta function.
+ *
+ * @tparam _Tk the floating-point type of the modulus
+ * @tparam _Tphi the floating-point type of the angular limit argument
+ * @param __k The modulus
+ * @param __phi The angle
+ */
+ template<typename _Tk, typename _Tphi>
+ inline __gnu_cxx::__promote_fp_t<_Tk, _Tphi>
+ heuman_lambda(_Tk __k, _Tphi __phi)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tk, _Tphi>;
+ return std::__detail::__heuman_lambda<__type>(__k, __phi);
+ }
+
+ // Complete Legendre elliptic integral D.
+
+ /**
+ * Return the complete Legendre elliptic integral @f$ D(k) @f$
+ * of @c float modulus @f$ k @f$.
+ *
+ * @see comp_ellint_d for details.
+ */
+ inline float
+ comp_ellint_df(float __k)
+ { return std::__detail::__comp_ellint_d<float>(__k); }
+
+ /**
+ * Return the complete Legendre elliptic integral @f$ D(k) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$.
+ *
+ * @see comp_ellint_d for details.
+ */
+ inline long double
+ comp_ellint_dl(long double __k)
+ { return std::__detail::__comp_ellint_d<long double>(__k); }
+
+ /**
+ * Return the complete Legendre elliptic integral @f$ D(k) @f$
+ * of real modulus @f$ k @f$.
+ *
+ * The complete Legendre elliptic integral D is defined by
+ * @f[
+ * D(k) = \int_0^{\pi/2} \frac{\sin^2\theta d\theta}{\sqrt{1-k^2sin2\theta}}
+ * @f]
+ *
+ * @tparam _Tk The type of the modulus @c k
+ * @param __k The modulus <tt>-1 <= __k <= +1</tt>
+ */
+ template<typename _Tk>
+ inline __gnu_cxx::__promote_fp_t<_Tk>
+ comp_ellint_d(_Tk __k)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tk>;
+ return std::__detail::__comp_ellint_d<__type>(__k);
+ }
+
+ // Legendre elliptic integrals D.
+
+ /**
+ * Return the incomplete Legendre elliptic integral @f$ D(k, \phi) @f$
+ * of @c float modulus @f$ k @f$ and angular limit @f$ \phi @f$.
+ *
+ * @see ellint_d for details.
+ */
+ inline float
+ ellint_df(float __k, float __phi)
+ { return std::__detail::__ellint_d<float>(__k, __phi); }
+
+ /**
+ * Return the incomplete Legendre elliptic integral @f$ D(k, \phi) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$ and angular limit @f$ \phi @f$.
+ *
+ * @see ellint_d for details.
+ */
+ inline long double
+ ellint_dl(long double __k, long double __phi)
+ { return std::__detail::__ellint_d<long double>(__k, __phi); }
+
+ /**
+ * Return the incomplete Legendre elliptic integral @f$ D(k,\phi) @f$
+ * of real modulus @f$ k @f$ and angular limit @f$ \phi @f$.
+ *
+ * The Legendre elliptic integral D is defined by
+ * @f[
+ * D(k,\phi) = \int_0^\phi
+ * \frac{\sin^2\theta d\theta}{\sqrt{1-k^2sin^2\theta}}
+ * @f]
+ *
+ * @param __k The modulus <tt>-1 <= __k <= +1</tt>
+ * @param __phi The angle
+ */
+ template<typename _Tk, typename _Tphi>
+ inline __gnu_cxx::__promote_fp_t<_Tk, _Tphi>
+ ellint_d(_Tk __k, _Tphi __phi)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tk, _Tphi>;
+ return std::__detail::__ellint_d<__type>(__k, __phi);
+ }
+
+ // Bulirsch elliptic integrals of the first kind.
+
+ /**
+ * Return the Bulirsch elliptic integral @f$ el1(x,k_c) @f$
+ * of the first kind of @c float tangent limit @f$ x @f$
+ * and complementary modulus @f$ k_c @f$.
+ *
+ * @see ellint_el1 for details.
+ */
+ inline float
+ ellint_el1f(float __x, float __k_c)
+ { return std::__detail::__ellint_el1<float>(__x, __k_c); }
+
+ /**
+ * Return the Bulirsch elliptic integral @f$ el1(x,k_c) @f$
+ * of the first kind of real tangent limit @f$ x @f$
+ * and complementary modulus @f$ k_c @f$.
+ *
+ * @see ellint_el1 for details.
+ */
+ inline long double
+ ellint_el1l(long double __x, long double __k_c)
+ { return std::__detail::__ellint_el1<long double>(__x, __k_c); }
+
+ /**
+ * Return the Bulirsch elliptic integral @f$ el1(x,k_c) @f$
+ * of the first kind of real tangent limit @f$ x @f$
+ * and complementary modulus @f$ k_c @f$.
+ *
+ * The Bulirsch elliptic integral of the first kind is defined by
+ * @f[
+ * el1(x,k_c) = el2(x,k_c,1,1) = \int_0^{\arctan x} \frac{1+1\tan^2\theta}
+ * {\sqrt{(1+\tan^2\theta)(1+k_c^2\tan^2\theta)}}d\theta
+ * @f]
+ *
+ * @param __x The tangent of the angular integration limit
+ * @param __k_c The complementary modulus @f$ k_c = \sqrt{1 - k^2} @f$
+ */
+ template<typename _Tp, typename _Tk>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Tk>
+ ellint_el1(_Tp __x, _Tk __k_c)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Tk>;
+ return std::__detail::__ellint_el1<__type>(__x, __k_c);
+ }
+
+ // Bulirsch elliptic integrals of the second kind.
+
+ /**
+ * Return the Bulirsch elliptic integral of the second kind
+ * @f$ el2(x,k_c,a,b) @f$.
+ *
+ * @see ellint_el2 for details.
+ */
+ inline float
+ ellint_el2f(float __x, float __k_c, float __a, float __b)
+ { return std::__detail::__ellint_el2<float>(__x, __k_c, __a, __b); }
+
+ /**
+ * Return the Bulirsch elliptic integral of the second kind
+ * @f$ el2(x,k_c,a,b) @f$.
+ *
+ * @see ellint_el2 for details.
+ */
+ inline long double
+ ellint_el2l(long double __x, long double __k_c,
+ long double __a, long double __b)
+ { return std::__detail::__ellint_el2<long double>(__x, __k_c, __a, __b); }
+
+ /**
+ * Return the Bulirsch elliptic integral of the second kind
+ * @f$ el2(x,k_c,a,b) @f$.
+ *
+ * The Bulirsch elliptic integral of the second kind is defined by
+ * @f[
+ * el2(x,k_c,a,b) = \int_0^{\arctan x} \frac{a+b\tan^2\theta}
+ * {\sqrt{(1+\tan^2\theta)(1+k_c^2\tan^2\theta)}}d\theta
+ * @f]
+ *
+ * @param __x The tangent of the angular integration limit
+ * @param __k_c The complementary modulus @f$ k_c = \sqrt{1 - k^2} @f$
+ * @param __a The parameter
+ * @param __b The parameter
+ */
+ template<typename _Tp, typename _Tk, typename _Ta, typename _Tb>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Tk, _Ta, _Tb>
+ ellint_el2(_Tp __x, _Tk __k_c, _Ta __a, _Tb __b)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Tk, _Ta, _Tb>;
+ return std::__detail::__ellint_el2<__type>(__x, __k_c, __a, __b);
+ }
+
+ // Bulirsch elliptic integrals of the third kind.
+
+ /**
+ * Return the Bulirsch elliptic integral of the third kind
+ * @f$ el3(x,k_c,p) @f$ of @c float tangent limit @f$ x @f$,
+ * complementary modulus @f$ k_c @f$, and parameter @f$ p @f$.
+ *
+ * @see ellint_el3 for details.
+ */
+ inline float
+ ellint_el3f(float __x, float __k_c, float __p)
+ { return std::__detail::__ellint_el3<float>(__x, __k_c, __p); }
+
+ /**
+ * Return the Bulirsch elliptic integral of the third kind
+ * @f$ el3(x,k_c,p) @f$ of <tt>long double</tt> tangent limit @f$ x @f$,
+ * complementary modulus @f$ k_c @f$, and parameter @f$ p @f$.
+ *
+ * @see ellint_el3 for details.
+ */
+ inline long double
+ ellint_el3l(long double __x, long double __k_c, long double __p)
+ { return std::__detail::__ellint_el3<long double>(__x, __k_c, __p); }
+
+ /**
+ * Return the Bulirsch elliptic integral of the third kind
+ * @f$ el3(x,k_c,p) @f$ of real tangent limit @f$ x @f$,
+ * complementary modulus @f$ k_c @f$, and parameter @f$ p @f$.
+ *
+ * The Bulirsch elliptic integral of the third kind is defined by
+ * @f[
+ * el3(x,k_c,p) = \int_0^{\arctan x} \frac{d\theta}
+ * {(cos^2\theta+p\sin^2\theta)\sqrt{cos^2\theta+k_c^2\sin^2\theta}}
+ * @f]
+ *
+ * @param __x The tangent of the angular integration limit
+ * @param __k_c The complementary modulus @f$ k_c = \sqrt{1 - k^2} @f$
+ * @param __p The paramenter
+ */
+ template<typename _Tx, typename _Tk, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tx, _Tk, _Tp>
+ ellint_el3(_Tx __x, _Tk __k_c, _Tp __p)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tx, _Tk, _Tp>;
+ return std::__detail::__ellint_el3<__type>(__x, __k_c, __p);
+ }
+
+ // Bulirsch complete elliptic integrals.
+
+ /**
+ * Return the Bulirsch complete elliptic integral @f$ cel(k_c,p,a,b) @f$
+ * of real complementary modulus @f$ k_c @f$, and parameters @f$ p @f$,
+ * @f$ a @f$, and @f$ b @f$.
+ *
+ * @see ellint_cel for details.
+ */
+ inline float
+ ellint_celf(float __k_c, float __p, float __a, float __b)
+ { return std::__detail::__ellint_cel<float>(__k_c, __p, __a, __b); }
+
+ /**
+ * Return the Bulirsch complete elliptic integral @f$ cel(k_c,p,a,b) @f$.
+ *
+ * @see ellint_cel for details.
+ */
+ inline long double
+ ellint_cell(long double __k_c, long double __p,
+ long double __a, long double __b)
+ { return std::__detail::__ellint_cel<long double>(__k_c, __p, __a, __b); }
+
+ /**
+ * Return the Bulirsch complete elliptic integral @f$ cel(k_c,p,a,b) @f$
+ * of real complementary modulus @f$ k_c @f$, and parameters @f$ p @f$,
+ * @f$ a @f$, and @f$ b @f$.
+ *
+ * The Bulirsch complete elliptic integral is defined by
+ * @f[
+ * cel(k_c,p,a,b)=\int_0^{\pi/2}
+ * \frac{a\cos^2\theta + b\sin^2\theta}{cos^2\theta + p\sin^2\theta}
+ * \frac{d\theta}{\sqrt{cos^2\theta + k_c^2\sin^2\theta}}
+ * @f]
+ *
+ * @param __k_c The complementary modulus @f$ k_c = \sqrt{1 - k^2} @f$
+ * @param __p The parameter
+ * @param __a The parameter
+ * @param __b The parameter
+ */
+ template<typename _Tk, typename _Tp, typename _Ta, typename _Tb>
+ inline __gnu_cxx::__promote_fp_t<_Tk, _Tp, _Ta, _Tb>
+ ellint_cel(_Tk __k_c, _Tp __p, _Ta __a, _Tb __b)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tk, _Tp, _Ta, _Tb>;
+ return std::__detail::__ellint_cel<__type>(__k_c, __p, __a, __b);
+ }
+
+ // Cylindrical Hankel functions of the first kind.
+
+ /**
+ * Return the complex cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_\nu(x) @f$ of <tt>std::complex<float></tt> order @f$ \nu @f$
+ * and argument @f$ x @f$.
+ *
+ * @see cyl_hankel_1 for more details.
+ */
+ inline std::complex<float>
+ cyl_hankel_1f(std::complex<float> __nu, std::complex<float> __x)
+ { return std::__detail::__cyl_hankel_1<float>(__nu, __x); }
+
+ /**
+ * Return the complex cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_\nu(x) @f$ of <tt>std::complex<long double></tt>
+ * order @f$ \nu @f$ and argument @f$ x @f$.
+ *
+ * @see cyl_hankel_1 for more details.
+ */
+ inline std::complex<long double>
+ cyl_hankel_1l(std::complex<long double> __nu, std::complex<long double> __x)
+ { return std::__detail::__cyl_hankel_1<long double>(__nu, __x); }
+
+ /**
+ * Return the complex cylindrical Hankel function of the first kind
+ * @f$ H^{(1)}_\nu(x) @f$ of complex order @f$ \nu @f$
+ * and argument @f$ x @f$.
+ *
+ * The cylindrical Hankel function of the first kind is defined by
+ * @f[
+ * H^{(1)}_\nu(x) = J_\nu(x) + i N_\nu(x)
+ * @f]
+ *
+ * @tparam _Tpnu The complex type of the order
+ * @tparam _Tp The complex type of the argument
+ * @param __nu The complex order
+ * @param __x The complex argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tpnu, _Tp>>
+ cyl_hankel_1(std::complex<_Tpnu> __nu, std::complex<_Tp> __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__cyl_hankel_1<__type>(__nu, __x);
+ }
+
+ // Cylindrical Hankel functions of the second kind.
+
+ /**
+ * Return the complex cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_\nu(x) @f$ of <tt>std::complex<float></tt> order @f$ \nu @f$
+ * and argument @f$ x @f$.
+ *
+ * @see cyl_hankel_2 for more details.
+ */
+ inline std::complex<float>
+ cyl_hankel_2f(std::complex<float> __nu, std::complex<float> __x)
+ { return std::__detail::__cyl_hankel_2<float>(__nu, __x); }
+
+ /**
+ * Return the complex cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_\nu(x) @f$ of <tt>std::complex<long double></tt>
+ * order @f$ \nu @f$ and argument @f$ x @f$.
+ *
+ * @see cyl_hankel_2 for more details.
+ */
+ inline std::complex<long double>
+ cyl_hankel_2l(std::complex<long double> __nu, std::complex<long double> __x)
+ { return std::__detail::__cyl_hankel_2<long double>(__nu, __x); }
+
+ /**
+ * Return the complex cylindrical Hankel function of the second kind
+ * @f$ H^{(2)}_\nu(x) @f$ of complex order @f$ \nu @f$
+ * and argument @f$ x @f$.
+ *
+ * The cylindrical Hankel function of the second kind is defined by
+ * @f[
+ * H^{(2)}_\nu(x) = J_\nu(x) - i N_\nu(x)
+ * @f]
+ *
+ * @tparam _Tpnu The complex type of the order
+ * @tparam _Tp The complex type of the argument
+ * @param __nu The complex order
+ * @param __x The complex argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tpnu, _Tp>>
+ cyl_hankel_2(std::complex<_Tpnu> __nu, std::complex<_Tp> __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__cyl_hankel_2<__type>(__nu, __x);
+ }
+
+ // Spherical Hankel functions of the first kind.
+
+ /**
+ * Return the complex spherical Hankel function of the first kind
+ * @f$ h^{(1)}_n(x) @f$ of non-negative integral @f$ n @f$
+ * and <tt>std::complex<float></tt> argument @f$ x @f$.
+ *
+ * @see sph_hankel_1 for more details.
+ */
+ inline std::complex<float>
+ sph_hankel_1f(unsigned int __n, std::complex<float> __x)
+ { return std::__detail::__sph_hankel_1<float>(__n, __x); }
+
+ /**
+ * Return the complex spherical Hankel function of the first kind
+ * @f$ h^{(1)}_n(x) @f$ of non-negative integral @f$ n @f$
+ * and <tt>std::complex<long double></tt> argument @f$ x @f$.
+ *
+ * @see sph_hankel_1 for more details.
+ */
+ inline std::complex<long double>
+ sph_hankel_1l(unsigned int __n, std::complex<long double> __x)
+ { return std::__detail::__sph_hankel_1<long double>(__n, __x); }
+
+ /**
+ * Return the complex spherical Hankel function of the first kind
+ * @f$ h^{(1)}_n(x) @f$ of non-negative integral @f$ n @f$
+ * and complex argument @f$ x @f$.
+ *
+ * The spherical Hankel function of the first kind is defined by
+ * @f[
+ * h^{(1)}_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} H^{(1)}_{n+1/2}(x)
+ * = j_n(x) + i n_n(x)
+ * @f]
+ * where @f$ j_n(x) @f$ and @f$ n_n(x) @f$ are the spherical Bessel
+ * and Neumann functions respectively.
+ *
+ * @param __n The integral order >= 0
+ * @param __x The complex argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ sph_hankel_1(unsigned int __n, std::complex<_Tp> __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sph_hankel_1<__type>(__n, __x);
+ }
+
+ // Spherical Hankel functions of the second kind.
+
+ /**
+ * Return the complex spherical Hankel function of the second kind
+ * @f$ h^{(2)}_n(x) @f$ of non-negative integral @f$ n @f$
+ * and <tt>std::complex<float></tt> argument @f$ x @f$.
+ *
+ * @see sph_hankel_2 for more details.
+ */
+ inline std::complex<float>
+ sph_hankel_2f(unsigned int __n, std::complex<float> __x)
+ { return std::__detail::__sph_hankel_2<float>(__n, __x); }
+
+ /**
+ * Return the complex spherical Hankel function of the second kind
+ * @f$ h^{(2)}_n(x) @f$ of non-negative integral @f$ n @f$
+ * and <tt>std::complex<long double></tt> argument @f$ x @f$.
+ *
+ * @see sph_hankel_2 for more details.
+ */
+ inline std::complex<long double>
+ sph_hankel_2l(unsigned int __n, std::complex<long double> __x)
+ { return std::__detail::__sph_hankel_2<long double>(__n, __x); }
+
+ /**
+ * Return the complex spherical Hankel function of the second kind
+ * @f$ h^{(2)}_n(x) @f$ of nonnegative order @f$ n @f$
+ * and complex argument @f$ x @f$.
+ *
+ * The spherical Hankel function of the second kind is defined by
+ * @f[
+ * h^{(2)}_n(x) = \left(\frac{\pi}{2x} \right) ^{1/2} H^{(2)}_{n+1/2}(x)
+ * = j_n(x) - i n_n(x)
+ * @f]
+ * where @f$ j_n(x) @f$ and @f$ n_n(x) @f$ are the spherical Bessel
+ * and Neumann functions respectively.
+ *
+ * @param __n The integral order >= 0
+ * @param __x The complex argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ sph_hankel_2(unsigned int __n, std::complex<_Tp> __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__sph_hankel_2<__type>(__n, __x);
+ }
+
+ // Spherical harmonic functions
+
+ /**
+ * Return the complex spherical harmonic function of degree @f$ l @f$, order @f$ m @f$,
+ * and @c float zenith angle @f$ \theta @f$, and azimuth angle @f$ \phi @f$.
+ *
+ * @see sph_harmonic for details.
+ */
+ inline std::complex<float>
+ sph_harmonicf(unsigned int __l, int __m,
+ float __theta, float __phi)
+ { return std::__detail::__sph_harmonic<float>(__l, __m, __theta, __phi); }
+
+ /**
+ * Return the complex spherical harmonic function of degree @f$ l @f$, order @f$ m @f$,
+ * and <tt>long double</tt> zenith angle @f$ \theta @f$,
+ * and azimuth angle @f$ \phi @f$.
+ *
+ * @see sph_harmonic for details.
+ */
+ inline std::complex<long double>
+ sph_harmonicl(unsigned int __l, int __m,
+ long double __theta, long double __phi)
+ {
+ return std::__detail::__sph_harmonic<long double>(__l, __m, __theta, __phi);
+ }
+
+ /**
+ * Return the complex spherical harmonic function of degree @f$ l @f$, order @f$ m @f$,
+ * and real zenith angle @f$ \theta @f$, and azimuth angle @f$ \phi @f$.
+ *
+ * The spherical harmonic function is defined by:
+ * @f[
+ * Y_l^m(\theta,\phi) = (-1)^m[\frac{(2l+1)}{4\pi}
+ * \frac{(l-m)!}{(l+m)!}]
+ * P_l^{|m|}(\cos\theta) \exp^{im\phi}
+ * @f]
+ *
+ * @param __l The order
+ * @param __m The degree
+ * @param __theta The zenith angle in radians
+ * @param __phi The azimuth angle in radians
+ */
+ template<typename _Ttheta, typename _Tphi>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Ttheta, _Tphi>>
+ sph_harmonic(unsigned int __l, int __m, _Ttheta __theta, _Tphi __phi)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Ttheta, _Tphi>;
+ return std::__detail::__sph_harmonic<__type>(__l, __m, __theta, __phi);
+ }
+
+ // Polylogarithm functions
+
+ /**
+ * Return the real polylogarithm function of real thing @c s
+ * and real argument @f$ w @f$.
+ *
+ * @see polylog for details.
+ */
+ inline float
+ polylogf(float __s, float __w)
+ { return std::__detail::__polylog<float>(__s, __w); }
+
+ /**
+ * Return the complex polylogarithm function of real thing @c s
+ * and complex argument @f$ w @f$.
+ *
+ * @see polylog for details.
+ */
+ inline long double
+ polylogl(long double __s, long double __w)
+ { return std::__detail::__polylog<long double>(__s, __w); }
+
+ /**
+ * Return the complex polylogarithm function of real thing @c s
+ * and complex argument @f$ w @f$.
+ *
+ * The polylogarithm function is defined by
+ * @f[
+ *
+ * @f]
+ *
+ * @param __s
+ * @param __w
+ */
+ template<typename _Tp, typename _Wp>
+ inline __gnu_cxx::__promote_fp_t<_Tp, _Wp>
+ polylog(_Tp __s, _Wp __w)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Wp>;
+ return std::__detail::__polylog<__type>(__s, __w);
+ }
+
+ /**
+ * Return the complex polylogarithm function of real thing @c s
+ * and complex argument @f$ w @f$.
+ *
+ * @see polylog for details.
+ */
+ inline std::complex<float>
+ polylogf(float __s, std::complex<float> __w)
+ { return std::__detail::__polylog<float>(__s, __w); }
+
+ /**
+ * Return the complex polylogarithm function of real thing @c s
+ * and complex argument @f$ w @f$.
+ *
+ * @see polylog for details.
+ */
+ inline std::complex<long double>
+ polylogl(long double __s, std::complex<long double> __w)
+ { return std::__detail::__polylog<long double>(__s, __w); }
+
+ /**
+ * Return the complex polylogarithm function of real thing @c s
+ * and complex argument @f$ w @f$.
+ *
+ * The polylogarithm function is defined by
+ * @f[
+ *
+ * @f]
+ *
+ * @param __s
+ * @param __w
+ */
+ template<typename _Tp, typename _Wp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp, _Wp>>
+ polylog(_Tp __s, std::complex<_Tp> __w)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp, _Wp>;
+ return std::__detail::__polylog<__type>(__s, __w);
+ }
+
+ // Dirichlet eta function
+
+ /**
+ * Return the Dirichlet eta function of real argument @f$ s @f$.
+ *
+ * @see dirichlet_eta for details.
+ */
+ inline float
+ dirichlet_etaf(float __s)
+ { return std::__detail::__dirichlet_eta<float>(__s); }
+
+ /**
+ * Return the Dirichlet eta function of real argument @f$ s @f$.
+ *
+ * @see dirichlet_eta for details.
+ */
+ inline long double
+ dirichlet_etal(long double __s)
+ { return std::__detail::__dirichlet_eta<long double>(__s); }
+
+ /**
+ * Return the Dirichlet eta function of real argument @f$ s @f$.
+ *
+ * The Dirichlet eta function is defined by
+ * @f[
+ * \eta(s) = \sum_{k=1}^\infty \frac{(-1)^k}{k^s}
+ * = \left( 1 - 2^{1-s} \right) \zeta(s)
+ * @f]
+ * An important reflection formula is:
+ * @f[
+ * \eta(-s) = 2 \frac{1-2^{-s-1}}{1-2^{-s}} \pi^{-s-1}
+ * s \sin(\frac{\pi s}{2}) \Gamma(s) \eta(s+1)
+ * @f]
+ *
+ * @param __s
+ */
+ template<typename _Tp>
+ inline _Tp
+ dirichlet_eta(_Tp __s)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__dirichlet_eta<__type>(__s);
+ }
+
+ // Dirichlet beta function
+
+ /**
+ * Return the Dirichlet beta function of real argument @f$ s @f$.
+ *
+ * @see dirichlet_beta for details.
+ */
+ inline float
+ dirichlet_betaf(float __s)
+ { return std::__detail::__dirichlet_beta<float>(__s); }
+
+ /**
+ * Return the Dirichlet beta function of real argument @f$ s @f$.
+ *
+ * @see dirichlet_beta for details.
+ */
+ inline long double
+ dirichlet_betal(long double __s)
+ { return std::__detail::__dirichlet_beta<long double>(__s); }
+
+ /**
+ * Return the Dirichlet beta function of real argument @f$ s @f$.
+ *
+ * The Dirichlet beta function is defined by:
+ * @f[
+ * \beta(s) = \sum_{k=0}^\infty \frac{(-1)^k}{(2k+1)^s}
+ * @f]
+ * An important reflection formula is:
+ * @f[
+ * \beta(1-s) = \left( \frac{2}{\pi}\right)^s \sin(\frac{\pi s}{2})
+ * \Gamma(s) \beta(s)
+ * @f]
+ *
+ * @param __s
+ */
+ template<typename _Tp>
+ inline _Tp
+ dirichlet_beta(_Tp __s)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__dirichlet_beta<__type>(__s);
+ }
+
+ // Dirichlet lambda function
+
+ /**
+ * Return the Dirichlet lambda function of real argument @f$ s @f$.
+ *
+ * @see dirichlet_lambda for details.
+ */
+ inline float
+ dirichlet_lambdaf(float __s)
+ { return std::__detail::__dirichlet_lambda<float>(__s); }
+
+ /**
+ * Return the Dirichlet lambda function of real argument @f$ s @f$.
+ *
+ * @see dirichlet_lambda for details.
+ */
+ inline long double
+ dirichlet_lambdal(long double __s)
+ { return std::__detail::__dirichlet_lambda<long double>(__s); }
+
+ /**
+ * Return the Dirichlet lambda function of real argument @f$ s @f$.
+ *
+ * The Dirichlet lambda function is defined by
+ * @f[
+ * \lambda(s) = \sum_{k=0}^\infty \frac{1}{(2k+1)^s}
+ * = \left( 1 - 2^{-s} \right) \zeta(s)
+ * @f]
+ *
+ * @param __s
+ */
+ template<typename _Tp>
+ inline _Tp
+ dirichlet_lambda(_Tp __s)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__dirichlet_lambda<__type>(__s);
+ }
+
+ // Clausen S functions
+
+ /**
+ * Return the Clausen sine function @f$ S_n(w) @f$ of order @f$ m @f$
+ * and @c float argument @f$ w @f$.
+ *
+ * @see clausen_s for details.
+ */
+ inline float
+ clausen_sf(unsigned int __m, float __w)
+ { return std::__detail::__clausen_s<float>(__m, __w); }
+
+ /**
+ * Return the Clausen sine function @f$ S_n(w) @f$ of order @f$ m @f$
+ * and <tt>long double</tt> argument @f$ w @f$.
+ *
+ * @see clausen_s for details.
+ */
+ inline long double
+ clausen_sl(unsigned int __m, long double __w)
+ { return std::__detail::__clausen_s<long double>(__m, __w); }
+
+ /**
+ * Return the Clausen sine function @f$ S_n(w) @f$ of order @f$ m @f$
+ * and real argument @f$ w @f$.
+ *
+ * The Clausen sine function is defined by
+ * @f[
+ * S_n(w) = \sum_{k=1}^\infty\frac{\sin(kx)}{k^n}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __m The unsigned integer order
+ * @param __w The real argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ clausen_s(unsigned int __m, _Tp __w)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__clausen_s<__type>(__m, __w);
+ }
+
+ // Clausen C functions
+
+ /**
+ * Return the Clausen cosine function @f$ C_n(w) @f$ of order @f$ m @f$
+ * and @c float argument @f$ w @f$.
+ *
+ * @see clausen_c for details.
+ */
+ inline float
+ clausen_cf(unsigned int __m, float __w)
+ { return std::__detail::__clausen_c<float>(__m, __w); }
+
+ /**
+ * Return the Clausen cosine function @f$ C_n(w) @f$ of order @f$ m @f$
+ * and <tt>long double</tt> argument @f$ w @f$.
+ *
+ * @see clausen_c for details.
+ */
+ inline long double
+ clausen_cl(unsigned int __m, long double __w)
+ { return std::__detail::__clausen_c<long double>(__m, __w); }
+
+ /**
+ * Return the Clausen cosine function @f$ C_n(w) @f$ of order @f$ m @f$
+ * and real argument @f$ w @f$.
+ *
+ * The Clausen cosine function is defined by
+ * @f[
+ * C_n(w) = \sum_{k=1}^\infty\frac{\cos(kx)}{k^n}
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __m The unsigned integer order
+ * @param __w The real argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ clausen_c(unsigned int __m, _Tp __w)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__clausen_c<__type>(__m, __w);
+ }
+
+ // Clausen functions - real argument
+
+ /**
+ * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$
+ * and @c float argument @f$ w @f$.
+ *
+ * @see clausen for details.
+ */
+ inline float
+ clausenf(unsigned int __m, float __w)
+ { return std::__detail::__clausen<float>(__m, __w); }
+
+ /**
+ * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$
+ * and <tt>long double</tt> argument @f$ w @f$.
+ *
+ * @see clausen for details.
+ */
+ inline long double
+ clausenl(unsigned int __m, long double __w)
+ { return std::__detail::__clausen<long double>(__m, __w); }
+
+ /**
+ * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$
+ * and real argument @f$ w @f$.
+ *
+ * The Clausen function is defined by
+ * @f[
+ * Cl_n(w) = S_n(w) = \sum_{k=1}^\infty\frac{\sin(kx)}{k^n} \mbox{ for even } m
+ * = C_n(w) = \sum_{k=1}^\infty\frac{\cos(kx)}{k^n} \mbox{ for odd } m
+ * @f]
+ *
+ * @tparam _Tp The real type of the argument
+ * @param __m The integral order
+ * @param __w The complex argument
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tp>
+ clausen(unsigned int __m, _Tp __w)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__clausen<__type>(__m, __w);
+ }
+
+ // Clausen functions - complex argument
+
+ /**
+ * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$
+ * and <tt>std::complex<float></tt> argument @f$ w @f$.
+ *
+ * @see clausen for details.
+ */
+ inline std::complex<float>
+ clausenf(unsigned int __m, std::complex<float> __w)
+ { return std::__detail::__clausen<float>(__m, __w); }
+
+ /**
+ * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$
+ * and <tt>std::complex<long double></tt> argument @f$ w @f$.
+ *
+ * @see clausen for details.
+ */
+ inline std::complex<long double>
+ clausenl(unsigned int __m, std::complex<long double> __w)
+ { return std::__detail::__clausen<long double>(__m, __w); }
+
+ /**
+ * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$
+ * and complex argument @f$ w @f$.
+ *
+ * The Clausen function is defined by
+ * @f[
+ * Cl_n(w) = S_n(w) = \sum_{k=1}^\infty\frac{\sin(kx)}{k^n} \mbox{ for even } m
+ * = C_n(w) = \sum_{k=1}^\infty\frac{\cos(kx)}{k^n} \mbox{ for odd } m
+ * @f]
+ *
+ * @tparam _Tp The real type of the complex components
+ * @param __m The integral order
+ * @param __w The complex argument
+ */
+ template<typename _Tp>
+ inline std::complex<__gnu_cxx::__promote_fp_t<_Tp>>
+ clausen(unsigned int __m, std::complex<_Tp> __w)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__clausen<__type>(__m, __w);
+ }
+
+ // Exponential theta_1 functions.
+
+ /**
+ * Return the exponential theta-1 function @f$ \theta_1(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_1 for details.
+ */
+ inline float
+ theta_1f(float __nu, float __x)
+ { return std::__detail::__theta_1<float>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-1 function @f$ \theta_1(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_1 for details.
+ */
+ inline long double
+ theta_1l(long double __nu, long double __x)
+ { return std::__detail::__theta_1<long double>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-1 function @f$ \theta_1(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * The Neville theta-1 function is defined by
+ * @f[
+ * \theta_1(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(\nu + j - 1/2)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>
+ theta_1(_Tpnu __nu, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__theta_1<__type>(__nu, __x);
+ }
+
+ // Exponential theta_2 functions.
+
+ /**
+ * Return the exponential theta-2 function @f$ \theta_2(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_2 for details.
+ */
+ inline float
+ theta_2f(float __nu, float __x)
+ { return std::__detail::__theta_2<float>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-2 function @f$ \theta_2(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_2 for details.
+ */
+ inline long double
+ theta_2l(long double __nu, long double __x)
+ { return std::__detail::__theta_2<long double>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-2 function @f$ \theta_2(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * The exponential theta-2 function is defined by
+ * @f[
+ * \theta_2(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * (-1)^j \exp\left( \frac{-(\nu + j)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 2) argument
+ * @param __x The argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>
+ theta_2(_Tpnu __nu, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__theta_2<__type>(__nu, __x);
+ }
+
+ // Exponential theta_3 functions.
+
+ /**
+ * Return the exponential theta-3 function @f$ \theta_3(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_3 for details.
+ */
+ inline float
+ theta_3f(float __nu, float __x)
+ { return std::__detail::__theta_3<float>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-3 function @f$ \theta_3(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_3 for details.
+ */
+ inline long double
+ theta_3l(long double __nu, long double __x)
+ { return std::__detail::__theta_3<long double>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-3 function @f$ \theta_3(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * The exponential theta-3 function is defined by
+ * @f[
+ * \theta_3(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * \exp\left( \frac{-(\nu+j)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 1) argument
+ * @param __x The argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>
+ theta_3(_Tpnu __nu, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__theta_3<__type>(__nu, __x);
+ }
+
+ // Exponential theta_4 functions.
+
+ /**
+ * Return the exponential theta-4 function @f$ \theta_4(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_4 for details.
+ */
+ inline float
+ theta_4f(float __nu, float __x)
+ { return std::__detail::__theta_4<float>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-4 function @f$ \theta_4(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * @see theta_4 for details.
+ */
+ inline long double
+ theta_4l(long double __nu, long double __x)
+ { return std::__detail::__theta_4<long double>(__nu, __x); }
+
+ /**
+ * Return the exponential theta-4 function @f$ \theta_4(\nu,x) @f$
+ * of period @f$ nu @f$ and argument @f$ x @f$.
+ *
+ * The exponential theta-4 function is defined by
+ * @f[
+ * \theta_4(\nu,x) = \frac{1}{\sqrt{\pi x}} \sum_{j=-\infty}^{+\infty}
+ * \exp\left( \frac{-(\nu + j + 1/2)^2}{x} \right)
+ * @f]
+ *
+ * @param __nu The periodic (period = 1) argument
+ * @param __x The argument
+ */
+ template<typename _Tpnu, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>
+ theta_4(_Tpnu __nu, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpnu, _Tp>;
+ return std::__detail::__theta_4<__type>(__nu, __x);
+ }
+
+ // Elliptic nome function
+
+ /**
+ * Return the elliptic nome function @f$ q(k) @f$
+ * of modulus @f$ k @f$.
+ *
+ * @see ellnome for details.
+ */
+ inline float
+ ellnomef(float __k)
+ { return std::__detail::__ellnome<float>(__k); }
+
+ /**
+ * Return the elliptic nome function @f$ q(k) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$.
+ *
+ * @see ellnome for details.
+ */
+ inline long double
+ ellnomel(long double __k)
+ { return std::__detail::__ellnome<long double>(__k); }
+
+ /**
+ * Return the elliptic nome function @f$ q(k) @f$ of modulus @f$ k @f$.
+ *
+ * The elliptic nome function is defined by
+ * @f[
+ * q(k) = \exp \left(-\pi\frac{K(k)}{K(\sqrt{1-k^2})} \right)
+ * @f]
+ * where @f$ K(k) @f$ is the complete elliptic function of the first kind.
+ *
+ * @tparam _Tp The real type of the modulus
+ * @param __k The modulus @f$ -1 <= k <= +1 @f$
+ */
+ template<typename _Tp>
+ inline _Tp
+ ellnome(_Tp __k)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tp>;
+ return std::__detail::__ellnome<__type>(__k);
+ }
+
+ // Neville theta_s functions.
+
+ /**
+ * Return the Neville theta-s function @f$ \theta_s(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_s for details.
+ */
+ inline float
+ theta_sf(float __k, float __x)
+ { return std::__detail::__theta_s<float>(__k, __x); }
+
+ /**
+ * Return the Neville theta-s function @f$ \theta_s(k,x) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_s for details.
+ */
+ inline long double
+ theta_sl(long double __k, long double __x)
+ { return std::__detail::__theta_s<long double>(__k, __x); }
+
+ /**
+ * Return the Neville theta-s function @f$ \theta_s(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * The Neville theta-s function is defined by
+ * @f[
+ *
+ * @f]
+ *
+ * @param __k The modulus @f$ -1 <= k <= +1 @f$
+ * @param __x The argument
+ */
+ template<typename _Tpk, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpk, _Tp>
+ theta_s(_Tpk __k, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpk, _Tp>;
+ return std::__detail::__theta_s<__type>(__k, __x);
+ }
+
+ // Neville theta_c functions.
+
+ /**
+ * Return the Neville theta-c function @f$ \theta_c(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_c for details.
+ */
+ inline float
+ theta_cf(float __k, float __x)
+ { return std::__detail::__theta_c<float>(__k, __x); }
+
+ /**
+ * Return the Neville theta-c function @f$ \theta_c(k,x) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_c for details.
+ */
+ inline long double
+ theta_cl(long double __k, long double __x)
+ { return std::__detail::__theta_c<long double>(__k, __x); }
+
+ /**
+ * Return the Neville theta-c function @f$ \theta_c(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * The Neville theta-c function is defined by
+ * @f[
+ *
+ * @f]
+ *
+ * @param __k The modulus @f$ -1 <= k <= +1 @f$
+ * @param __x The argument
+ */
+ template<typename _Tpk, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpk, _Tp>
+ theta_c(_Tpk __k, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpk, _Tp>;
+ return std::__detail::__theta_c<__type>(__k, __x);
+ }
+
+ // Neville theta_d functions.
+
+ /**
+ * Return the Neville theta-d function @f$ \theta_d(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_d for details.
+ */
+ inline float
+ theta_df(float __k, float __x)
+ { return std::__detail::__theta_d<float>(__k, __x); }
+
+ /**
+ * Return the Neville theta-d function @f$ \theta_d(k,x) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_d for details.
+ */
+ inline long double
+ theta_dl(long double __k, long double __x)
+ { return std::__detail::__theta_d<long double>(__k, __x); }
+
+ /**
+ * Return the Neville theta-d function @f$ \theta_d(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * The Neville theta-d function is defined by
+ * @f[
+ * \theta_d(k,x) =
+ * @f]
+ *
+ * @param __k The modulus @f$ -1 <= k <= +1 @f$
+ * @param __x The argument
+ */
+ template<typename _Tpk, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpk, _Tp>
+ theta_d(_Tpk __k, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpk, _Tp>;
+ return std::__detail::__theta_d<__type>(__k, __x);
+ }
+
+ // Neville theta_n functions.
+
+ /**
+ * Return the Neville theta-n function @f$ \theta_n(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_n for details.
+ */
+ inline float
+ theta_nf(float __k, float __x)
+ { return std::__detail::__theta_n<float>(__k, __x); }
+
+ /**
+ * Return the Neville theta-n function @f$ \theta_n(k,x) @f$
+ * of <tt>long double</tt> modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * @see theta_n for details.
+ */
+ inline long double
+ theta_nl(long double __k, long double __x)
+ { return std::__detail::__theta_n<long double>(__k, __x); }
+
+ /**
+ * Return the Neville theta-n function @f$ \theta_n(k,x) @f$
+ * of modulus @f$ k @f$ and argument @f$ x @f$.
+ *
+ * The Neville theta-n function is defined by
+ * @f[
+ * \theta_n(k,x) =
+ * @f]
+ *
+ * @param __k The modulus @f$ -1 <= k <= +1 @f$
+ * @param __x The argument
+ */
+ template<typename _Tpk, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tpk, _Tp>
+ theta_n(_Tpk __k, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tpk, _Tp>;
+ return std::__detail::__theta_n<__type>(__k, __x);
+ }
+
+ // Owens T functions.
+
+ /**
+ * Return the Owens T function @f$ T(h,a) @f$
+ * of shape factor @f$ h @f$ and integration limit @f$ a @f$.
+ *
+ * @see owens_t for details.
+ */
+ inline float
+ owens_tf(float __h, float __a)
+ { return std::__detail::__owens_t<float>(__h, __a); }
+
+ /**
+ * Return the Owens T function @f$ T(h,a) @f$ of <tt>long double</tt>
+ * shape factor @f$ h @f$ and integration limit @f$ a @f$.
+ *
+ * @see owens_t for details.
+ */
+ inline long double
+ owens_tl(long double __h, long double __a)
+ { return std::__detail::__owens_t<long double>(__h, __a); }
+
+ /**
+ * Return the Owens T function @f$ T(h,a) @f$ of shape factor @f$ h @f$
+ * and integration limit @f$ a @f$.
+ *
+ * The Owens T function is defined by
+ * @f[
+ * T(h,a) = \frac{1}{2\pi}\int_0^a
+ * \frac{\exp\left[-\frac{1}{2}h^2(1+x^2)\right]}{1+x^2} dx
+ * @f]
+ *
+ * @param __h The shape factor
+ * @param __a The integration limit
+ */
+ template<typename _Tph, typename _Tpa>
+ inline __gnu_cxx::__promote_fp_t<_Tph, _Tpa>
+ owens_t(_Tph __h, _Tpa __a)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tph, _Tpa>;
+ return std::__detail::__owens_t<__type>(__h, __a);
+ }
+
+ // Fermi-Dirac integrals.
+
+ inline float
+ fermi_diracf(float __s, float __x)
+ { return std::__detail::__fermi_dirac<float>(__s, __x); }
+
+ inline long double
+ fermi_diracl(long double __s, long double __x)
+ { return std::__detail::__fermi_dirac<long double>(__s, __x); }
+
+ template<typename _Tps, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tps, _Tp>
+ fermi_dirac(_Tps __s, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tps, _Tp>;
+ return std::__detail::__fermi_dirac<__type>(__s, __x);
+ }
+
+ // Bose-Einstein integrals.
+
+ inline float
+ bose_einsteinf(float __s, float __x)
+ { return std::__detail::__bose_einstein<float>(__s, __x); }
+
+ inline long double
+ bose_einsteinl(long double __s, long double __x)
+ { return std::__detail::__bose_einstein<long double>(__s, __x); }
+
+ template<typename _Tps, typename _Tp>
+ inline __gnu_cxx::__promote_fp_t<_Tps, _Tp>
+ bose_einstein(_Tps __s, _Tp __x)
+ {
+ using __type = __gnu_cxx::__promote_fp_t<_Tps, _Tp>;
+ return std::__detail::__bose_einstein<__type>(__s, __x);
+ }
+
+ // Reperiodized sine function.
+
+ /**
+ * Return the reperiodized sine function @f$ \sin_\pi(x) @f$
+ * for @c float argument @f$ x @f$.
+ *
+ * @see sin_pi for more details.
+ */
+ inline float
+ sin_pif(float __x)
+ { return std::__detail::__sin_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized sine function @f$ \sin_\pi(x) @f$
+ * for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see sin_pi for more details.
+ */
+ inline long double
+ sin_pil(long double __x)
+ { return std::__detail::__sin_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized sine function @f$ \sin_\pi(x) @f$
+ * for real argument @f$ x @f$.
+ *
+ * The reperiodized sine function is defined by:
+ * @f[
+ * \sin_\pi(x) = \sin(\pi x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ sin_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__sin_pi<__type>(__x);
+ }
+
+ // Reperiodized hyperbolic sine function.
+
+ /**
+ * Return the reperiodized hyperbolic sine function @f$ \sinh_\pi(x) @f$
+ * for @c float argument @f$ x @f$.
+ *
+ * @see sinh_pi for more details.
+ */
+ inline float
+ sinh_pif(float __x)
+ { return std::__detail::__sinh_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized hyperbolic sine function @f$ \sinh_\pi(x) @f$
+ * for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see sinh_pi for more details.
+ */
+ inline long double
+ sinh_pil(long double __x)
+ { return std::__detail::__sinh_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized hyperbolic sine function @f$ \sinh_\pi(x) @f$
+ * for real argument @f$ x @f$.
+ *
+ * The reperiodized hyperbolic sine function is defined by:
+ * @f[
+ * \sinh_\pi(x) = \sinh(\pi x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ sinh_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__sinh_pi<__type>(__x);
+ }
+
+ // Reperiodized cosine function.
+
+ /**
+ * Return the reperiodized cosine function @f$ \cos_\pi(x) @f$
+ * for @c float argument @f$ x @f$.
+ *
+ * @see cos_pi for more details.
+ */
+ inline float
+ cos_pif(float __x)
+ { return std::__detail::__cos_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized cosine function @f$ \cos_\pi(x) @f$
+ * for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see cos_pi for more details.
+ */
+ inline long double
+ cos_pil(long double __x)
+ { return std::__detail::__cos_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized cosine function @f$ \cos_\pi(x) @f$
+ * for real argument @f$ x @f$.
+ *
+ * The reperiodized cosine function is defined by:
+ * @f[
+ * \cos_\pi(x) = \cos(\pi x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ cos_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__cos_pi<__type>(__x);
+ }
+
+ // Reperiodized hyperbolic cosine function.
+
+ /**
+ * Return the reperiodized hyperbolic cosine function @f$ \cosh_\pi(x) @f$
+ * for @c float argument @f$ x @f$.
+ *
+ * @see cosh_pi for more details.
+ */
+ inline float
+ cosh_pif(float __x)
+ { return std::__detail::__cosh_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized hyperbolic cosine function @f$ \cosh_\pi(x) @f$
+ * for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see cosh_pi for more details.
+ */
+ inline long double
+ cosh_pil(long double __x)
+ { return std::__detail::__cosh_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized hyperbolic cosine function @f$ \cosh_\pi(x) @f$
+ * for real argument @f$ x @f$.
+ *
+ * The reperiodized hyperbolic cosine function is defined by:
+ * @f[
+ * \cosh_\pi(x) = \cosh(\pi x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ cosh_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__cosh_pi<__type>(__x);
+ }
+
+ // Reperiodized tangent function.
+
+ /**
+ * Return the reperiodized tangent function @f$ \tan_\pi(x) @f$
+ * for @c float argument @f$ x @f$.
+ *
+ * @see tan_pi for more details.
+ */
+ inline float
+ tan_pif(float __x)
+ { return std::__detail::__tan_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized tangent function @f$ \tan_\pi(x) @f$
+ * for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see tan_pi for more details.
+ */
+ inline long double
+ tan_pil(long double __x)
+ { return std::__detail::__tan_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized tangent function @f$ \tan_\pi(x) @f$
+ * for real argument @f$ x @f$.
+ *
+ * The reperiodized tangent function is defined by:
+ * @f[
+ * \tan_\pi(x) = \tan(\pi x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ tan_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__tan_pi<__type>(__x);
+ }
+
+ // Reperiodized hyperbolic tangent function.
+
+ /**
+ * Return the reperiodized hyperbolic tangent function @f$ \tanh_\pi(x) @f$
+ * for @c float argument @f$ x @f$.
+ *
+ * @see tanh_pi for more details.
+ */
+ inline float
+ tanh_pif(float __x)
+ { return std::__detail::__tanh_pi<float>(__x); }
+
+ /**
+ * Return the reperiodized hyperbolic tangent function @f$ \tanh_\pi(x) @f$
+ * for <tt>long double</tt> argument @f$ x @f$.
+ *
+ * @see tanh_pi for more details.
+ */
+ inline long double
+ tanh_pil(long double __x)
+ { return std::__detail::__tanh_pi<long double>(__x); }
+
+ /**
+ * Return the reperiodized hyperbolic tangent function @f$ \tanh_\pi(x) @f$
+ * for real argument @f$ x @f$.
+ *
+ * The reperiodized hyperbolic tangent function is defined by:
+ * @f[
+ * \tanh_\pi(x) = \tanh(\pi x)
+ * @f]
+ *
+ * @tparam _Tp The floating-point type of the argument @c __x.
+ * @param __x The argument
+ */
+ template<typename _Tp>
+ inline typename __gnu_cxx::__promote<_Tp>::__type
+ tanh_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__tanh_pi<__type>(__x);
+ }
+
+ /**
+ * Return both the sine and the cosine of a @c float argument.
+ */
+ inline __gnu_cxx::__sincos_t<float>
+ sincosf(float __x)
+ { return std::__detail::__sincos<float>(__x); }
+
+ /**
+ * Return both the sine and the cosine of a <tt> long double </tt> argument.
+ *
+ * @see sincos for details.
+ */
+ inline __gnu_cxx::__sincos_t<long double>
+ sincosl(long double __x)
+ { return std::__detail::__sincos<long double>(__x); }
+
+ /**
+ * Return both the sine and the cosine of a @c double argument.
+ *
+ * @see sincos for details.
+ */
+ inline __gnu_cxx::__sincos_t<double>
+ sincos(double __x)
+ { return std::__detail::__sincos<double>(__x); }
+
+ /**
+ * Return both the sine and the cosine of a reperiodized argument.
+ * @f[
+ * sincos(x) = {\sin(x), \cos(x)}
+ * @f]
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__sincos_t<_Tp>
+ sincos(_Tp __x)
+ { return std::__detail::__sincos<_Tp>(__x); }
+
+ /**
+ * Return both the sine and the cosine of a reperiodized @c float argument.
+ *
+ * @see sincos_pi for details.
+ */
+ inline __gnu_cxx::__sincos_t<float>
+ sincos_pif(float __x)
+ { return std::__detail::__sincos_pi<float>(__x); }
+
+ /**
+ * Return both the sine and the cosine of a reperiodized
+ * <tt> long double </tt> argument.
+ *
+ * @see sincos_pi for details.
+ */
+ inline __gnu_cxx::__sincos_t<long double>
+ sincos_pil(long double __x)
+ { return std::__detail::__sincos_pi<long double>(__x); }
+
+ /**
+ * Return both the sine and the cosine of a reperiodized real argument.
+ *
+ * @f[
+ * sincos_\pi(x) = {\sin(\pi x), \cos(\pi x)}
+ * @f]
+ */
+ template<typename _Tp>
+ inline __gnu_cxx::__sincos_t<_Tp>
+ sincos_pi(_Tp __x)
+ {
+ typedef typename __gnu_cxx::__promote<_Tp>::__type __type;
+ return std::__detail::__sincos_pi<__type>(__x);
+ }
+
+#endif // __cplusplus >= 201103L
+
+ /** @} */ // gnu_math_spec_func
+
+_GLIBCXX_END_NAMESPACE_VERSION
} // namespace __gnu_cxx
#pragma GCC visibility pop
diff --git a/libstdc++-v3/include/bits/specfun_util.h b/libstdc++-v3/include/bits/specfun_util.h
new file mode 100644
index 00000000000..bcfec6f390a
--- /dev/null
+++ b/libstdc++-v3/include/bits/specfun_util.h
@@ -0,0 +1,208 @@
+// Special functions -*- C++ -*-
+
+// Copyright (C) 2006-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/specfun_util.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+//
+// ISO C++ 14882 TR29124: Mathematical Special Functions
+//
+
+#ifndef _GLIBCXX_BITS_SPECFUN_UTIL_H
+#define _GLIBCXX_BITS_SPECFUN_UTIL_H 1
+
+#pragma GCC system_header
+
+#if __cplusplus >= 201103L
+# include <ratio>
+# include <complex>
+#endif
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+# include <quadmath.h>
+#endif // __STRICT_ANSI__ && _GLIBCXX_USE_FLOAT128
+
+namespace std _GLIBCXX_VISIBILITY(default)
+{
+namespace __detail
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * A class to reach into compound numeric types to extract the
+ * value or element type. This will be specialized for complex
+ * and other types as appropriate.
+ */
+ template<typename _Tp>
+ struct __num_traits
+ {
+ using __value_type = _Tp;
+ };
+
+ template<typename _Tp>
+ using __num_traits_t = typename __num_traits<_Tp>::__value_type;
+
+
+#if __cplusplus >= 201103L
+ /**
+ * Return a fraction as a real number.
+ */
+ template<intmax_t _Num, intmax_t _Den = 1, typename _Tp = double>
+ inline constexpr _Tp
+ __frac()
+ {
+ using __rat_t = std::ratio<_Num, _Den>;
+ return _Tp(__rat_t::num) / _Tp(__rat_t::den);
+ }
+#endif
+
+
+ /**
+ * Create a NaN.
+ */
+ template<typename _Tp>
+ struct __make_NaN
+ {
+ constexpr _Tp
+ operator()()
+ { return std::numeric_limits<_Tp>::quiet_NaN(); }
+ };
+
+#if _GLIBCXX_USE_C99_MATH && !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+
+ /// This is a wrapper for the isnan function. Otherwise, for NaN,
+ /// all comparisons result in false. If/when we build a std::isnan
+ /// out of intrinsics, this will disappear completely in favor of
+ /// std::isnan.
+ template<typename _Tp>
+ inline bool
+ __isnan(_Tp __x)
+ { return std::isnan(__x); }
+
+#else
+
+ template<typename _Tp>
+ inline bool
+ __isnan(_Tp __x)
+ { return __builtin_isnan(__x); }
+
+ template<>
+ inline bool
+ __isnan<float>(float __x)
+ { return __builtin_isnanf(__x); }
+
+ template<>
+ inline bool
+ __isnan<long double>(long double __x)
+ { return __builtin_isnanl(__x); }
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+ template<>
+ inline bool
+ __isnan<__float128>(__float128 __x)
+ { return __builtin_isnanq(__x); }
+#endif // __STRICT_ANSI__ && _GLIBCXX_USE_FLOAT128
+
+#endif // _GLIBCXX_USE_C99_MATH && !_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC
+
+ /**
+ * Return true if the number is inf.
+ * This is overloaded elsewhere for complex.
+ */
+ template<typename _Tp>
+ inline bool
+ __isinf(const _Tp __x)
+ { return std::isinf(__x); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __detail
+} // namespace std
+
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#if __cplusplus >= 201103L
+
+ /**
+ * This is a more modern version of __promote_N in ext/type_traits.
+ * This is used for numeric argument promotion of complex and cmath.
+ */
+ template<typename _Tp, bool = std::is_integral<_Tp>::value>
+ struct __promote_fp_help
+ { using __type = double; };
+
+ // No nested __type member for non-integer non-floating point types,
+ // allows this type to be used for SFINAE to constrain overloads in
+ // <cmath> and <complex> to only the intended types.
+ template<typename _Tp>
+ struct __promote_fp_help<_Tp, false>
+ { };
+
+ template<>
+ struct __promote_fp_help<float>
+ { using __type = float; };
+
+ template<>
+ struct __promote_fp_help<double>
+ { using __type = double; };
+
+ template<>
+ struct __promote_fp_help<long double>
+ { using __type = long double; };
+
+#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128)
+ template<>
+ struct __promote_fp_help<__float128>
+ { using __type = __float128; };
+#endif
+
+ template<typename... _Tps>
+ using __promote_fp_help_t = typename __promote_fp_help<_Tps...>::__type;
+
+ // Decay refs and cv...
+ // Alternatively we could decay refs and propagate cv to promoted type.
+ template<typename _Tp, typename... _Tps>
+ struct __promote_fp
+ { using __type = decltype(__promote_fp_help_t<std::decay_t<_Tp>>{}
+ + typename __promote_fp<_Tps...>::__type{}); };
+
+ template<>
+ template<typename _Tp>
+ struct __promote_fp<_Tp>
+ { using __type = decltype(__promote_fp_help_t<std::decay_t<_Tp>>{}); };
+
+ template<typename... _Tps>
+ using __promote_fp_t = typename __promote_fp<_Tps...>::__type;
+
+#endif // __cplusplus >= 201103L
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // _GLIBCXX_BITS_SPECFUN_UTIL_H
+
diff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h
index ea0b56ca43f..0538a79a351 100644
--- a/libstdc++-v3/include/bits/stl_algo.h
+++ b/libstdc++-v3/include/bits/stl_algo.h
@@ -5615,6 +5615,86 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO
__gnu_cxx::__ops::__iter_comp_iter(__comp));
}
+#if __cplusplus >= 201402L
+ /// Reservoir sampling algorithm.
+ template<typename _InputIterator, typename _RandomAccessIterator,
+ typename _Size, typename _UniformRandomBitGenerator>
+ _RandomAccessIterator
+ __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag,
+ _RandomAccessIterator __out, random_access_iterator_tag,
+ _Size __n, _UniformRandomBitGenerator&& __g)
+ {
+ using __distrib_type = uniform_int_distribution<_Size>;
+ using __param_type = typename __distrib_type::param_type;
+ __distrib_type __d{};
+ _Size __sample_sz = 0;
+ while (__first != __last && __sample_sz != __n)
+ {
+ __out[__sample_sz++] = *__first;
+ ++__first;
+ }
+ for (auto __pop_sz = __sample_sz; __first != __last;
+ ++__first, (void) ++__pop_sz)
+ {
+ const auto __k = __d(__g, __param_type{0, __pop_sz});
+ if (__k < __n)
+ __out[__k] = *__first;
+ }
+ return __out + __sample_sz;
+ }
+
+ /// Selection sampling algorithm.
+ template<typename _ForwardIterator, typename _OutputIterator, typename _Cat,
+ typename _Size, typename _UniformRandomBitGenerator>
+ _OutputIterator
+ __sample(_ForwardIterator __first, _ForwardIterator __last,
+ forward_iterator_tag,
+ _OutputIterator __out, _Cat,
+ _Size __n, _UniformRandomBitGenerator&& __g)
+ {
+ using __distrib_type = uniform_int_distribution<_Size>;
+ using __param_type = typename __distrib_type::param_type;
+ __distrib_type __d{};
+ _Size __unsampled_sz = std::distance(__first, __last);
+ for (__n = std::min(__n, __unsampled_sz); __n != 0; ++__first)
+ if (__d(__g, __param_type{0, --__unsampled_sz}) < __n)
+ {
+ *__out++ = *__first;
+ --__n;
+ }
+ return __out;
+ }
+
+#if __cplusplus > 201402L
+#define __cpp_lib_sample 201603
+ /// Take a random sample from a population.
+ template<typename _PopulationIterator, typename _SampleIterator,
+ typename _Distance, typename _UniformRandomBitGenerator>
+ _SampleIterator
+ sample(_PopulationIterator __first, _PopulationIterator __last,
+ _SampleIterator __out, _Distance __n,
+ _UniformRandomBitGenerator&& __g)
+ {
+ using __pop_cat = typename
+ std::iterator_traits<_PopulationIterator>::iterator_category;
+ using __samp_cat = typename
+ std::iterator_traits<_SampleIterator>::iterator_category;
+
+ static_assert(
+ __or_<is_convertible<__pop_cat, forward_iterator_tag>,
+ is_convertible<__samp_cat, random_access_iterator_tag>>::value,
+ "output range must use a RandomAccessIterator when input range"
+ " does not meet the ForwardIterator requirements");
+
+ static_assert(is_integral<_Distance>::value,
+ "sample size must be an integer type");
+
+ return std::__sample(__first, __last, __pop_cat{}, __out, __samp_cat{},
+ __n, std::forward<_UniformRandomBitGenerator>(__g));
+ }
+#endif // C++17
+#endif // C++14
+
_GLIBCXX_END_NAMESPACE_ALGO
} // namespace std
diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h
index ef2e584c1b3..07370c90aab 100644
--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -705,8 +705,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _ForwardIterator, typename _Size>
static _ForwardIterator
__uninit_default_novalue_n(_ForwardIterator __first, _Size __n)
- {
- }
+ { return std::next(__first, __n); }
};
// __uninitialized_default_novalue
diff --git a/libstdc++-v3/include/bits/summation.h b/libstdc++-v3/include/bits/summation.h
new file mode 100644
index 00000000000..09852e43a4e
--- /dev/null
+++ b/libstdc++-v3/include/bits/summation.h
@@ -0,0 +1,1230 @@
+// math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/summation.h
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SUMMATION_H
+#define _GLIBCXX_BITS_SUMMATION_H 1
+
+#pragma GCC visibility push(default)
+
+#include <complex>
+#include <vector>
+#include <array>
+#include <bits/c++config.h>
+#include <bits/complex_util.h> // for complex __isnan, __isinf
+
+#pragma GCC system_header
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * A Sum is default constructable
+ * It has operator+=(Tp)
+ * It has operator-=(Tp)
+ * It has operator() const -> _Tp
+ * It has converged() const -> Tp
+ * It has operator bool() const // !converged() i.e. still needs work.
+ * It has num_terms() const -> std::size_t
+ * It has term() const -> _Tp // last term
+ *
+ */
+
+ /**
+ * This is a basic naive sum.
+ */
+ template<typename _Tp>
+ class _BasicSum
+ {
+ public:
+
+ using value_type = _Tp;
+
+ /// Default constructor.
+ _BasicSum()
+ : _M_sum{}, _M_term{}, _M_num_terms{0}, _M_converged{false}
+ { }
+
+ /// Add a new term to the sum.
+ _BasicSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_BasicSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_BasicSum: infinite term"));
+ ++this->_M_num_terms;
+ this->_M_term = __term;
+ this->_M_sum += this->_M_term;
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _BasicSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_num_terms; }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_term; }
+
+ /// Reset the sum to it's initial state.
+ _BasicSum&
+ reset()
+ {
+ this->_M_sum = value_type{};
+ this->_M_term = value_type{};
+ this->_M_num_terms = 0;
+ this->_M_converged = false;
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _BasicSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ value_type _M_sum;
+ value_type _M_term;
+ std::size_t _M_num_terms;
+ bool _M_converged;
+ };
+
+ /**
+ * This is a Kahan sum which tries to account for roundoff error.
+ */
+ template<typename _Tp>
+ class _KahanSum
+ {
+ public:
+
+ using value_type = _Tp;
+
+ /// Default constructor.
+ _KahanSum()
+ : _M_sum{}, _M_term{}, _M_temp{}, _M_num_terms{0}, _M_converged{false}
+ { }
+
+ /// Add a new term to the sum.
+ _KahanSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_KahanSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_KahanSum: infinite term"));
+ ++this->_M_num_terms;
+ this->_M_term = __term - this->_M_temp;
+ this->_M_temp = this->_M_sum;
+ this->_M_sum += this->_M_term;
+ this->_M_temp = this->_M_term - (this->_M_sum - this->_M_temp);
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _KahanSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_num_terms; }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_term; }
+
+ /// Reset the sum to it's initial state.
+ _KahanSum&
+ reset()
+ {
+ this->_M_sum = value_type{};
+ this->_M_term = value_type{};
+ this->_M_temp = value_type{};
+ this->_M_num_terms = 0;
+ this->_M_converged = false;
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _KahanSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ value_type _M_sum;
+ value_type _M_term;
+ value_type _M_temp;
+ std::size_t _M_num_terms;
+ bool _M_converged;
+ };
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ class _VanWijngaardenSum
+ {
+ public:
+
+ using value_type = _Tp;
+
+ /// Default constructor.
+ _VanWijngaardenSum()
+ : _M_sum{}, _M_term{}, _M_delta{}, _M_num_terms{0}, _M_converged{false}
+ { }
+
+ /// Add a new term to the sum.
+ _VanWijngaardenSum&
+ operator+=(value_type __term);
+
+ /// Subtract a new term from the sum.
+ _VanWijngaardenSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_num_terms; }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_term; }
+
+ /// Reset the sum to it's initial state.
+ _VanWijngaardenSum&
+ reset()
+ {
+ this->_M_sum = value_type{};
+ this->_M_term = value_type{};
+ this->_M_delta.clear();
+ this->_M_num_terms = 0;
+ this->_M_converged = false;
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _VanWijngaardenSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ value_type _M_sum;
+ value_type _M_term;
+ std::vector<value_type> _M_delta;
+ std::size_t _M_num_terms;
+ bool _M_converged;
+ };
+
+ /**
+ * This performs a series compression on a monotone series - converting
+ * it to an alternating series - for the regular van Wijngaarden sum.
+ * ADL for ctors anyone? I'd like to put a lambda in here*
+ */
+ template<typename _TermFn>
+ class _VanWijngaardenCompressor
+ {
+ public:
+
+ _VanWijngaardenCompressor(_TermFn __term_fn)
+ : _M_term_fn{__term_fn}
+ { }
+
+ auto
+ operator[](std::size_t __j) const;
+
+ private:
+
+ _TermFn _M_term_fn;
+ };
+
+ /**
+ * The Aitken's delta-squared summation process.
+ */
+ template<typename _Sum>
+ class _AitkenDeltaSquaredSum
+ {
+ public:
+
+ using value_type = typename _Sum::value_type;
+
+ /// Default constructor.
+ _AitkenDeltaSquaredSum()
+ : _M_part_sum{_Sum{}}, _M_a{}, _M_sum{}, _M_converged{false}
+ { }
+
+ /// Add a new term to the sum.
+ _AitkenDeltaSquaredSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_AitkenDeltaSquaredSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_AitkenDeltaSquaredSum: infinite term"));
+ this->_M_part_sum += __term;
+ this->_M_update();
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _AitkenDeltaSquaredSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_part_sum.num_terms(); }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_part_sum.term(); }
+
+ /// Reset the sum to it's initial state.
+ _AitkenDeltaSquaredSum&
+ reset()
+ {
+ this->_M_part_sum.reset();
+ this->_M_a.clear();
+ this->_M_sum = value_type{};
+ this->_M_converged = false;
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _AitkenDeltaSquaredSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ void _M_update();
+
+ _Sum _M_part_sum;
+ std::vector<value_type> _M_a;
+ value_type _M_sum;
+ bool _M_converged;
+ };
+
+ /**
+ * The Winn epsilon summation process.
+ */
+ template<typename _Sum>
+ class _WinnEpsilonSum
+ {
+ public:
+
+ using value_type = typename _Sum::value_type;
+
+ /// Default constructor.
+ _WinnEpsilonSum()
+ : _M_part_sum{_Sum{}}, _M_e{}, _M_sum{}, _M_converged{false}
+ { }
+
+ /// Add a new term to the sum.
+ _WinnEpsilonSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_WinnEpsilonSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_WinnEpsilonSum: infinite term"));
+ this->_M_part_sum += __term;
+ this->_M_update();
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _WinnEpsilonSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->_converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_part_sum.num_terms(); }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_part_sum.term(); }
+
+ /// Reset the sum to it's initial state.
+ _WinnEpsilonSum&
+ reset()
+ {
+ this->_M_part_sum.reset();
+ this->_M_e.clear();
+ this->_M_sum = value_type{};
+ this->_M_converged = false;
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _WinnEpsilonSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ void _M_update();
+
+ _Sum _M_part_sum;
+ std::vector<value_type> _M_e;
+ value_type _M_sum;
+ bool _M_converged;
+ };
+
+ /**
+ * The Brezinski theta summation process.
+ */
+ template<typename _Sum>
+ class _BrezinskiThetaSum
+ {
+ public:
+
+ using value_type = typename _Sum::value_type;
+
+ /// Default constructor.
+ _BrezinskiThetaSum()
+ : _M_part_sum{_Sum{}}, _M_arj{}, _M_sum{}, _M_converged{false}
+ { }
+
+ /// Add a new term to the sum.
+ _BrezinskiThetaSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_BrezinskiThetaSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_BrezinskiThetaSum: infinite term"));
+ this->_M_part_sum += __term;
+ this->_M_update();
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _BrezinskiThetaSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->_converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_part_sum.num_terms(); }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_part_sum.term(); }
+
+ /// Reset the sum to it's initial state.
+ _BrezinskiThetaSum&
+ reset()
+ {
+ this->_M_part_sum.reset();
+ this->_M_arj.clear();
+ this->_M_sum = value_type{};
+ this->_M_converged = false;
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _BrezinskiThetaSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ void _M_update();
+
+ _Sum _M_part_sum;
+ std::vector<value_type> _M_arj;
+ value_type _M_sum;
+ bool _M_converged;
+ };
+
+
+ // These sequence transformations depend on the provision of remainder
+ // estimates. The update methods do not depend on the remainder model
+ // and could be provided in CRTP derived classes.
+
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ struct _RemainderTerm
+ {
+ using value_type = _Tp;
+
+ value_type term = value_type{};
+ value_type remainder = value_type{};
+ };
+
+
+ /**
+ * This class implements an explicit remainder model where
+ * the caller supplies the corresponding ramainder estimate after the
+ * corresponding term.
+ */
+ template<typename _Tp>
+ class _ExplicitRemainderModel
+ {
+ public:
+
+ using value_type = _Tp;
+
+ constexpr _ExplicitRemainderModel()
+ : _M_n{0}
+ { }
+
+ void
+ operator<<(value_type __term)
+ {
+ if (this->_M_n < 2)
+ {
+ this->_M_term[this->_M_n] = __term;
+ ++this->_M_n;
+ }
+ else
+ /* error */;
+ }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr bool
+ ready() const
+ { return this->_M_n == 2; }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr operator
+ bool() const
+ { return this->ready(); }
+
+ _RemainderTerm<value_type>
+ operator()()
+ {
+ this->_M_n = 0;
+ return _RemainderTerm<value_type>{this->_M_term[0], this->_M_term[1]};
+ }
+
+ _ExplicitRemainderModel&
+ reset()
+ {
+ this->_M_n = 0;
+ return *this;
+ }
+
+ private:
+
+ int _M_n;
+ std::array<value_type, 2> _M_term;
+ };
+
+
+ /**
+ * This class implements the Levin U remainder model.
+ * The remainder for term @f$ s_n @f$ is @f$ (n + \beta)a_n @f$
+ * or in terms of the backward difference of the partial sums
+ * @f$ (n + \beta)(s_n - s_{n-1}) @f$.
+ */
+ template<typename _Tp>
+ class _URemainderModel
+ {
+ public:
+
+ using value_type = _Tp;
+
+ constexpr _URemainderModel(value_type __beta)
+ : _M_n{0}, _M_term{}, _M_beta{__beta}
+ { }
+
+ constexpr void
+ operator<<(value_type __term)
+ {
+ this->_M_term = __term;
+ ++this->_M_n;
+ }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr bool
+ ready() const
+ { return this->_M_n >= 2; }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr operator
+ bool() const
+ { return this->ready(); }
+
+ _RemainderTerm<value_type>
+ constexpr operator()()
+ {
+ this->_M_ok = false;
+ return _RemainderTerm<value_type>{this->_M_term,
+ (this->_M_n + this->_M_beta) * this->_M_term};
+ }
+
+ _URemainderModel&
+ reset()
+ {
+ this->_M_n = 0;
+ return *this;
+ }
+
+ private:
+
+ int _M_n;
+ value_type _M_term;
+ value_type _M_beta;
+ };
+
+
+ /**
+ * This class implements the Levin T remainder model.
+ * The remainder for term @f$ s_n @f$ is the current term @f$ a_n @f$
+ * or the backward difference of the partial sums @f$ s_n - s_{n-1} @f$.
+ */
+ template<typename _Tp>
+ class _TRemainderModel
+ {
+ public:
+
+ using value_type = _Tp;
+
+ constexpr _TRemainderModel()
+ : _M_ok{false}
+ { }
+
+ constexpr void
+ operator<<(value_type __term)
+ {
+ if (!this->_M_ok)
+ {
+ this->_M_term = __term;
+ this->_M_ok = true;
+ }
+ else
+ /* error */;
+ }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr bool
+ ready() const
+ { return this->_M_ok; }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr operator
+ bool() const
+ { return this->ready(); }
+
+ _RemainderTerm<value_type>
+ constexpr operator()()
+ {
+ this->_M_ok = false;
+ return _RemainderTerm<value_type>{this->_M_term, this->_M_term};
+ }
+
+ _TRemainderModel&
+ reset()
+ {
+ this->_M_ok = false;
+ return *this;
+ }
+
+ private:
+
+ bool _M_ok;
+ value_type _M_term;
+ };
+
+
+ /**
+ * This class implements the Levin D remainder model.
+ * The remainder for term @f$ s_n @f$ is simply the next term @f$ a_{n+1} @f$
+ * or the forward difference of the partial sums @f$ s_{n+1} - s_n @f$.
+ */
+ template<typename _Tp>
+ class _DRemainderModel
+ {
+ public:
+
+ using value_type = _Tp;
+
+ constexpr _DRemainderModel()
+ : _M_n{0}
+ { }
+
+ void
+ operator<<(value_type __term)
+ {
+ this->_M_term[(this->_M_n) % 2] = __term;
+ ++this->_M_n;
+ }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr bool
+ ready() const
+ { return this->_M_n >= 2; }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr operator
+ bool() const
+ { return this->ready(); }
+
+ _RemainderTerm<value_type>
+ operator()()
+ {
+ return _RemainderTerm<value_type>{this->_M_term[(this->_M_n) % 2],
+ this->_M_term[(this->_M_n + 1) % 2]};
+ }
+
+ _DRemainderModel&
+ reset()
+ {
+ this->_M_n = 0;
+ return *this;
+ }
+
+ private:
+
+ int _M_n;
+ std::array<value_type, 2> _M_term;
+ };
+
+
+ /**
+ * This class implements the Levin V remainder model.
+ * The remainder for term @f$ s_n @f$ is
+ * @f[
+ * r_n = \frac{a_n a_{n+1}}{a_n - a_{n+1}}
+ * @f]
+ */
+ template<typename _Tp>
+ class _VRemainderModel
+ {
+ public:
+
+ using value_type = _Tp;
+
+ constexpr _VRemainderModel()
+ : _M_n{0}
+ { }
+
+ void
+ operator<<(value_type __term)
+ {
+ this->_M_term[(this->_M_n) % 2] = __term;
+ ++this->_M_n;
+ }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr bool
+ ready() const
+ { return this->_M_n >= 2; }
+
+ // Return true if the remainder model has accumulated enough terms
+ // to start work on the sum.
+ constexpr operator
+ bool() const
+ { return this->ready(); }
+
+ _RemainderTerm<value_type>
+ operator()()
+ {
+ auto __anp1 = this->_M_term[(this->_M_n + 1) % 2];
+ auto __an = this->_M_term[(this->_M_n) % 2];
+ return _RemainderTerm<value_type>{__an,
+ __an * __anp1 / (__an - __anp1)};
+ }
+
+ _VRemainderModel&
+ reset()
+ {
+ this->_M_n = 0;
+ return *this;
+ }
+
+ private:
+
+ int _M_n;
+ std::array<value_type, 2> _M_term;
+ };
+
+
+ /**
+ * The Levin summation process.
+ */
+ template<typename _Sum,
+ typename _RemainderModel
+ = _ExplicitRemainderModel<typename _Sum::value_type>>
+ class _LevinSum
+ {
+ public:
+
+ using value_type = typename _Sum::value_type;
+
+ /// Default constructor.
+ _LevinSum(value_type __beta = value_type{1})
+ : _M_part_sum{_Sum{}}, _M_num{}, _M_den{},
+ _M_beta{__beta},
+ _M_sum{}, _M_converged{false}, _M_rem_mdl{}
+ { }
+
+ /// Get the beta parameter.
+ value_type
+ beta() const
+ { return this->_M_beta; }
+
+ /// Set the beta parameter.
+ _LevinSum&
+ beta(value_type __beta)
+ {
+ this->_M_beta = __beta;
+ return *this;
+ }
+
+ /// Add a new term to the sum.
+ _LevinSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_LevinSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_LevinSum: infinite term"));
+ this->_M_rem_mdl << __term;
+ if (this->_M_rem_mdl.ready())
+ {
+ auto __thing = this->_M_rem_mdl();
+ this->_M_part_sum += __thing.term;
+ this->_M_update(__thing.remainder);
+ }
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _LevinSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_part_sum.num_terms(); }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_part_sum.term(); }
+
+ /// Reset the sum to it's initial state.
+ /// The beta parameter is unchanged.
+ _LevinSum&
+ reset()
+ {
+ this->_M_part_sum.reset();
+ this->_M_num.clear();
+ this->_M_den.clear();
+ this->_M_sum = value_type{};
+ this->_M_converged = false;
+ this->_M_rem_mdl.reset();
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _LevinSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ const _RemainderModel&
+ _M_self() const
+ { return static_cast<const _RemainderModel&>(*this); }
+
+ _RemainderModel&
+ _M_self()
+ { return static_cast<_RemainderModel&>(*this); }
+
+ void _M_update(value_type __r_n);
+
+ _Sum _M_part_sum;
+ std::vector<value_type> _M_num;
+ std::vector<value_type> _M_den;
+ value_type _M_beta;
+ value_type _M_sum;
+ bool _M_converged;
+ _RemainderModel _M_rem_mdl;
+ };
+
+ /**
+ * The Weniger summation process.
+ */
+ template<typename _Sum,
+ typename _RemainderModel
+ = _ExplicitRemainderModel<typename _Sum::value_type>>
+ class _WenigerSum
+ {
+ public:
+
+ using value_type = typename _Sum::value_type;
+
+ /// Default constructor.
+ _WenigerSum(value_type __beta = value_type{1})
+ : _M_part_sum{_Sum{}}, _M_num{}, _M_den{},
+ _M_beta{__beta},
+ _M_sum{}, _M_converged{false}, _M_rem_mdl{}
+ { }
+
+ /// Get the beta parameter.
+ value_type
+ beta() const
+ { return this->_M_beta; }
+
+ /// Set the beta parameter.
+ _WenigerSum&
+ beta(value_type __beta)
+ {
+ this->_M_beta = __beta;
+ return *this;
+ }
+
+ /// Add a new term to the sum.
+ _WenigerSum&
+ operator+=(value_type __term)
+ {
+ if (!this->_M_converged)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_WenigerSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_WenigerSum: infinite term"));
+ this->_M_rem_mdl << __term;
+ if (this->_M_rem_mdl.ready())
+ {
+ auto __thing = this->_M_rem_mdl();
+ this->_M_part_sum += __thing.term;
+ this->_M_update(__thing.remainder);
+ }
+ }
+ return *this;
+ }
+
+ /// Subtract a new term from the sum.
+ _WenigerSum&
+ operator-=(value_type __term)
+ { return this->operator+=(-__term); }
+
+ /// Return true if the sum converged.
+ bool
+ converged() const
+ { return this->_M_converged; }
+
+ /// Return false if the sum converged.
+ operator
+ bool() const
+ { return !this->converged(); }
+
+ /// Return the current value of the sum.
+ value_type
+ operator()() const
+ { return this->_M_sum; }
+
+ /// Return the current number of terms contributing to the sum.
+ std::size_t
+ num_terms() const
+ { return this->_M_part_sum.num_terms(); }
+
+ /// Return the current last term contributing to the sum.
+ value_type
+ term() const
+ { return this->_M_part_sum.term(); }
+
+ /// Reset the sum to it's initial state.
+ /// The beta parameter is unchanged.
+ _WenigerSum&
+ reset()
+ {
+ this->_M_part_sum.reset();
+ this->_M_num.clear();
+ this->_M_den.clear();
+ this->_M_sum = value_type{};
+ this->_M_converged = false;
+ this->_M_rem_mdl.reset();
+ return *this;
+ }
+
+ /// Restart the sum with the first new term.
+ _WenigerSum&
+ reset(value_type __first_term)
+ {
+ this->reset();
+ this->operator+=(__first_term);
+ return *this;
+ }
+
+ private:
+
+ void _M_update(value_type __r_n);
+
+ _Sum _M_part_sum;
+ std::vector<value_type> _M_num;
+ std::vector<value_type> _M_den;
+ value_type _M_beta;
+ value_type _M_sum;
+ bool _M_converged;
+ _RemainderModel _M_rem_mdl;
+ };
+
+ // Specializations for specific remainder models.
+
+ /**
+ * The Levin T summation process.
+ */
+ template<typename _Sum>
+ using _LevinTSum
+ = _LevinSum<_Sum, _TRemainderModel<typename _Sum::value_type>>;
+
+ /**
+ * The Levin D summation process.
+ */
+ template<typename _Sum>
+ using _LevinDSum
+ = _LevinSum<_Sum, _DRemainderModel<typename _Sum::value_type>>;
+
+ /**
+ * The Levin V summation process.
+ */
+ template<typename _Sum>
+ using _LevinUSum
+ = _LevinSum<_Sum, _VRemainderModel<typename _Sum::value_type>>;
+
+ /**
+ * The Weniger Tau summation process.
+ */
+ template<typename _Sum>
+ using _WenigerTauSum
+ = _WenigerSum<_Sum, _TRemainderModel<typename _Sum::value_type>>;
+
+ /**
+ * The Weniger Delta summation process.
+ */
+ template<typename _Sum>
+ using _WenigerDeltaSum
+ = _WenigerSum<_Sum, _DRemainderModel<typename _Sum::value_type>>;
+
+ /**
+ * The Weniger Phi summation process.
+ */
+ template<typename _Sum>
+ using _WenigerPhiSum
+ = _WenigerSum<_Sum, _VRemainderModel<typename _Sum::value_type>>;
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#pragma GCC visibility pop
+
+#include <bits/summation.tcc>
+
+#endif // _GLIBCXX_BITS_SUMMATION_H
diff --git a/libstdc++-v3/include/bits/summation.tcc b/libstdc++-v3/include/bits/summation.tcc
new file mode 100644
index 00000000000..056bc2acea9
--- /dev/null
+++ b/libstdc++-v3/include/bits/summation.tcc
@@ -0,0 +1,352 @@
+// math special functions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file bits/summation.tcc
+ * This is an internal header file, included by other library headers.
+ * Do not attempt to use it directly. @headername{cmath}
+ */
+
+#ifndef _GLIBCXX_BITS_SUMMATION_TCC
+#define _GLIBCXX_BITS_SUMMATION_TCC 1
+
+#pragma GCC system_header
+
+#include <vector>
+#include <utility> // For exchange
+#include <bits/complex_util.h>
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Add a new term to a vanWijnGaarden sum.
+ */
+ template<typename _Tp>
+ _VanWijngaardenSum<_Tp>&
+ _VanWijngaardenSum<_Tp>::operator+=(value_type __term)
+ {
+ if (std::__detail::__isnan(__term))
+ std::__throw_runtime_error(__N("_VanWijngaardenSum: bad term"));
+ if (std::__detail::__isinf(__term))
+ std::__throw_runtime_error(__N("_VanWijngaardenSum: infinite term"));
+
+ ++this->_M_num_terms;
+ this->_M_term = __term;
+
+ if (this->_M_delta.size() == 0)
+ {
+ this->_M_delta.push_back(__term);
+ this->_M_sum += value_type{0.5L} * this->_M_delta.back();
+ }
+ else
+ {
+ auto __temp = this->_M_delta[0];
+ this->_M_delta[0] = __term;
+ auto __n = this->_M_delta.size();
+ for (auto __j = 0; __j < __n - 1; ++__j)
+ __temp = std::exchange(this->_M_delta[__j + 1],
+ value_type{0.5L} * (this->_M_delta[__j] + __temp));
+ auto __next = value_type{0.5L} * (this->_M_delta.back() + __temp);
+ if (std::abs(__next) < std::abs(this->_M_delta.back()))
+ {
+ this->_M_delta.push_back(__next);
+ this->_M_sum += value_type{0.5L} * this->_M_delta.back();
+ }
+ else
+ this->_M_sum += __next;
+ }
+/*
+ lasteps = std::abs(sum - lastval);
+ if (lasteps <= eps)
+ ++_M_num_convergences;
+ if (_M_num_convergences >= 2)
+ this->_M_converged = true;
+//return (lastval = sum);
+*/
+ return *this;
+ }
+
+ /**
+ * Perform a series compression on a monotone series - converting
+ * it to an alternating series - for the regular van Wijngaarden sum.
+ * ADL for ctors anyone? I'd like to put a lambda in here*
+ */
+ template<typename _TermFn>
+ auto
+ _VanWijngaardenCompressor<_TermFn>::operator[](std::size_t __j) const
+ {
+ using value_type = decltype(this->_M_term_fn(__j));
+ constexpr auto _S_min = std::numeric_limits<value_type>::min();
+ constexpr auto _S_eps = std::numeric_limits<value_type>::epsilon();
+ // Maximum number of iterations before 2^k overflow.
+ constexpr auto __k_max = std::numeric_limits<std::size_t>::digits;
+
+ auto __sum = value_type{};
+ auto __two2k = std::size_t{1};
+ for (auto __k = std::size_t{0}; __k < __k_max; __k += std::size_t{2})
+ {
+ // Index for the term in the original series.
+ auto __i = std::size_t{0};
+ if (__builtin_mul_overflow(__two2k, __j + 1, &__i))
+ std::__throw_runtime_error(__N("_VanWijngaardenCompressor: "
+ "index overflow"));
+ --__i;
+
+ // Increment the sum.
+ auto __term = __two2k * this->_M_term_fn(__i);
+ __sum += __term;
+
+ // Stop summation if either the sum is zero
+ // or if |term / sum| is below requested accuracy.
+ if (std::abs(__sum) <= _S_min
+ || std::abs(__term / __sum) < value_type{1.0e-2} * _S_eps)
+ break;
+
+ if (__builtin_mul_overflow(__two2k, std::size_t{2}, &__two2k))
+ std::__throw_runtime_error(__N("_VanWijngaardenCompressor: "
+ "index overflow"));
+ }
+
+ auto __sign = (__j % 2 == 1 ? -1 : +1);
+ return __sign * __sum;
+ }
+
+ /**
+ * Perform one step of the Aitken delta-squared process.
+ */
+ template<typename _Sum>
+ void
+ _AitkenDeltaSquaredSum<_Sum>::_M_update()
+ {
+ using _Tp = value_type;
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+ const/*expr*/ auto _S_huge = __gnu_cxx::__root_max(_Val{5}); // 1.0e+60
+ const/*expr*/ auto _S_tiny = __gnu_cxx::__root_min(_Val{5}); // 1.0e-60;
+
+ const auto __n = this->_M_part_sum.num_terms() - 1;
+ const auto __s_n = this->_M_part_sum();
+ auto& __a = this->_M_a;
+
+ __a.push_back(__s_n);
+ if (__n < 2)
+ this->_M_sum = __s_n;
+ else
+ {
+ auto __lowmax = __n / 2;
+ for (auto __j = 1; __j <= __lowmax; ++__j)
+ {
+ auto __m = __n - 2 * __j;
+ auto __denom = (__a[__m + 2] - __a[__m + 1])
+ - (__a[__m + 1] - __a[__m]);
+ if (std::abs(__denom) < _S_tiny)
+ __a[__m] = _S_huge;
+ else
+ {
+ auto __del = __a[__m] - __a[__m + 1];
+ __a[__m] -= __del * __del / __denom;
+ }
+ }
+ this->_M_sum = __a[__n % 2];
+ }
+ }
+
+ /**
+ * Perform one step of the Winn epsilon transformation.
+ */
+ template<typename _Sum>
+ void
+ _WinnEpsilonSum<_Sum>::_M_update()
+ {
+ using _Tp = value_type;
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+ const auto _S_huge = __gnu_cxx::__root_max(_Val{5}); // 1.0e+60
+ const auto _S_tiny = __gnu_cxx::__root_min(_Val{5}); // 1.0e-60;
+
+ const auto __n = this->_M_part_sum.num_terms() - 1;
+ const auto __s_n = this->_M_part_sum();
+ auto& __e = this->_M_e;
+
+ __e.push_back(__s_n);
+ if (__n == 0)
+ this->_M_sum = __s_n;
+ else
+ {
+ auto __aux2 = _Tp{0};
+ for (auto __j = __n; __j >= 1; --__j)
+ {
+ auto __aux1 = __aux2;
+ __aux2 = __e[__j - 1];
+ auto __diff = __e[__j] - __aux2;
+ if (std::abs(__diff) < _S_tiny)
+ __e[__j - 1] = _S_huge;
+ else
+ __e[__j - 1] = __aux1 + _Tp{1} / __diff;
+ }
+ this->_M_sum = __e[__n % 2];
+ }
+ return;
+ }
+
+ /**
+ * Perform one step of the Brezinski Theta transformation.
+ */
+ template<typename _Sum>
+ void
+ _BrezinskiThetaSum<_Sum>::_M_update()
+ {
+ using _Tp = value_type;
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+ const auto _S_huge = __gnu_cxx::__root_max(_Val{5}); // 1.0e+60
+ const auto _S_tiny = __gnu_cxx::__root_min(_Val{5}); // 1.0e-60;
+
+ const auto __n = this->_M_part_sum.num_terms() - 1;
+ const auto __s_n = this->_M_part_sum();
+ auto& __arj = this->_M_arj;
+
+ __arj.push_back(__s_n);
+ if (__n < 3)
+ this->_M_sum = __s_n;
+ else
+ {
+ auto __lmax = __n / 3;
+ auto __m = __n;
+ for (auto __l = 1; __l <= __lmax; ++__l)
+ {
+ __m -= 3;
+ auto __diff0 = __arj[__m + 1] - __arj[__m];
+ auto __diff1 = __arj[__m + 2] - __arj[__m + 1];
+ auto __diff2 = __arj[__m + 3] - __arj[__m + 2];
+ auto __denom = __diff2 * (__diff1 - __diff0)
+ - __diff0 * (__diff2 - __diff1);
+ if (std::abs(__denom) < _S_tiny)
+ __arj[__m] = _S_huge;
+ else
+ __arj[__m] = __arj[__m + 1]
+ - __diff0 * __diff1 * (__diff2 - __diff1) / __denom;
+ }
+ this->_M_sum = __arj[__n % 3];
+ }
+ }
+
+ /**
+ * Perform one step of the Levin summation process.
+ */
+ template<typename _Sum, typename _RemainderModel>
+ void
+ _LevinSum<_Sum, _RemainderModel>::_M_update(value_type __r_n)
+ {
+ using _Tp = value_type;
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+ const auto _S_huge = __gnu_cxx::__root_max(_Val{5}); // 1.0e+60
+ const auto _S_tiny = __gnu_cxx::__root_min(_Val{5}); // 1.0e-60;
+
+ const auto __n = this->_M_part_sum.num_terms() - 1;
+ const auto __s_n = this->_M_part_sum();
+ const auto __beta = this->_M_beta;
+ auto& __anum = this->_M_num;
+ auto& __aden = this->_M_den;
+
+ __anum.push_back(__s_n / __r_n);
+ __aden.push_back(value_type{1} / __r_n);
+ if (__n == 0)
+ this->_M_sum = __s_n;
+ else
+ {
+ __anum[__n - 1] = __anum[__n] - __anum[__n - 1];
+ __aden[__n - 1] = __aden[__n] - __aden[__n - 1];
+ if (__n > 1)
+ {
+ auto __bn1 = __beta + _Tp(__n - 1);
+ auto __bn2 = __beta + _Tp(__n);
+ auto __coef = __bn1 / __bn2;
+ auto __coefp = _Tp{1};
+ for (auto __j = 2; __j <= __n; ++__j)
+ {
+ auto __fact = (__beta + _Tp(__n - __j)) * __coefp / __bn2;
+ __anum[__n - __j] = __anum[__n - __j + 1]
+ - __fact * __anum[__n - __j];
+ __aden[__n - __j] = __aden[__n - __j + 1]
+ - __fact * __aden[__n - __j];
+ __coefp *= __coef;
+ }
+ }
+ if (std::abs(__aden[0]) < _S_tiny)
+ this->_M_sum = _S_huge;
+ else
+ this->_M_sum = __anum[0] / __aden[0];
+ }
+ }
+
+ /**
+ * Perform one step of the Weniger summation process.
+ */
+ template<typename _Sum, typename _RemainderModel>
+ void
+ _WenigerSum<_Sum, _RemainderModel>::_M_update(value_type __r_n)
+ {
+ using _Tp = value_type;
+ using _Val = std::__detail::__num_traits_t<_Tp>;
+ const/*expr*/ auto _S_huge = __gnu_cxx::__root_max(_Val{5}); // 1.0e+60
+ const/*expr*/ auto _S_tiny = __gnu_cxx::__root_min(_Val{5}); // 1.0e-60;
+
+ const auto __n = this->_M_part_sum.num_terms() - 1;
+ const auto __s_n = this->_M_part_sum();
+ const auto __beta = this->_M_beta;
+ auto& __anum = this->_M_num;
+ auto& __aden = this->_M_den;
+
+ __anum.push_back(__s_n / __r_n);
+ __aden.push_back(value_type{1} / __r_n);
+ if (__n == 0)
+ this->_M_sum = __s_n;
+ else
+ {
+ __anum[__n - 1] = __anum[__n] - __anum[__n - 1];
+ __aden[__n - 1] = __aden[__n] - __aden[__n - 1];
+ if (__n > 1)
+ {
+ auto __bn1 = __beta + _Tp(__n - 2);
+ auto __bn2 = __beta + _Tp(__n - 1);
+ for (auto __j = 2; __j <= __n; ++__j)
+ {
+ auto __fact = __bn1 * __bn2
+ / ((__bn1 + _Tp(__j - 1)) * (__bn2 + _Tp(__j - 1)));
+ __anum[__n - __j] = __anum[__n - __j + 1]
+ - __fact * __anum[__n - __j];
+ __aden[__n - __j] = __aden[__n - __j + 1]
+ - __fact * __aden[__n - __j];
+ }
+ }
+ if (std::abs(__aden[0]) < _S_tiny)
+ this->_M_sum = _S_huge;
+ else
+ this->_M_sum = __anum[0] / __aden[0];
+ }
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // _GLIBCXX_BITS_SUMMATION_TCC
diff --git a/libstdc++-v3/include/experimental/algorithm b/libstdc++-v3/include/experimental/algorithm
index 0ba6311e952..eb18dde198e 100644
--- a/libstdc++-v3/include/experimental/algorithm
+++ b/libstdc++-v3/include/experimental/algorithm
@@ -36,7 +36,6 @@
#else
#include <algorithm>
-#include <random>
#include <experimental/bits/lfts_config.h>
namespace std _GLIBCXX_VISIBILITY(default)
@@ -55,52 +54,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#define __cpp_lib_experimental_sample 201402
- /// Reservoir sampling algorithm.
- template<typename _InputIterator, typename _RandomAccessIterator,
- typename _Size, typename _UniformRandomNumberGenerator>
- _RandomAccessIterator
- __sample(_InputIterator __first, _InputIterator __last, input_iterator_tag,
- _RandomAccessIterator __out, random_access_iterator_tag,
- _Size __n, _UniformRandomNumberGenerator&& __g)
- {
- using __distrib_type = std::uniform_int_distribution<_Size>;
- using __param_type = typename __distrib_type::param_type;
- __distrib_type __d{};
- _Size __sample_sz = 0;
- while (__first != __last && __sample_sz != __n)
- __out[__sample_sz++] = *__first++;
- for (auto __pop_sz = __sample_sz; __first != __last;
- ++__first, ++__pop_sz)
- {
- const auto __k = __d(__g, __param_type{0, __pop_sz});
- if (__k < __n)
- __out[__k] = *__first;
- }
- return __out + __sample_sz;
- }
-
- /// Selection sampling algorithm.
- template<typename _ForwardIterator, typename _OutputIterator, typename _Cat,
- typename _Size, typename _UniformRandomNumberGenerator>
- _OutputIterator
- __sample(_ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag,
- _OutputIterator __out, _Cat,
- _Size __n, _UniformRandomNumberGenerator&& __g)
- {
- using __distrib_type = std::uniform_int_distribution<_Size>;
- using __param_type = typename __distrib_type::param_type;
- __distrib_type __d{};
- _Size __unsampled_sz = std::distance(__first, __last);
- for (__n = std::min(__n, __unsampled_sz); __n != 0; ++__first)
- if (__d(__g, __param_type{0, --__unsampled_sz}) < __n)
- {
- *__out++ = *__first;
- --__n;
- }
- return __out;
- }
-
/// Take a random sample from a population.
template<typename _PopulationIterator, typename _SampleIterator,
typename _Distance, typename _UniformRandomNumberGenerator>
@@ -123,9 +76,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static_assert(is_integral<_Distance>::value,
"sample size must be an integer type");
- return std::experimental::__sample(
- __first, __last, __pop_cat{}, __out, __samp_cat{},
- __n, std::forward<_UniformRandomNumberGenerator>(__g));
+ return std::__sample(__first, __last, __pop_cat{}, __out, __samp_cat{},
+ __n,
+ std::forward<_UniformRandomNumberGenerator>(__g));
}
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/ext/cmath b/libstdc++-v3/include/ext/cmath
index a95556ec0a0..8ce7afa0bdb 100644
--- a/libstdc++-v3/include/ext/cmath
+++ b/libstdc++-v3/include/ext/cmath
@@ -36,116 +36,8 @@
#else
#include <cmath>
-#include <type_traits>
-
-namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
-{
-_GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- // A class for math constants.
- template<typename _RealType>
- struct __math_constants
- {
- static_assert(std::is_floating_point<_RealType>::value,
- "template argument not a floating point type");
-
- // Constant @f$ \pi @f$.
- static constexpr _RealType __pi = 3.1415926535897932384626433832795029L;
- // Constant @f$ \pi / 2 @f$.
- static constexpr _RealType __pi_half = 1.5707963267948966192313216916397514L;
- // Constant @f$ \pi / 3 @f$.
- static constexpr _RealType __pi_third = 1.0471975511965977461542144610931676L;
- // Constant @f$ \pi / 4 @f$.
- static constexpr _RealType __pi_quarter = 0.7853981633974483096156608458198757L;
- // Constant @f$ \sqrt(\pi / 2) @f$.
- static constexpr _RealType __root_pi_div_2 = 1.2533141373155002512078826424055226L;
- // Constant @f$ 1 / \pi @f$.
- static constexpr _RealType __one_div_pi = 0.3183098861837906715377675267450287L;
- // Constant @f$ 2 / \pi @f$.
- static constexpr _RealType __two_div_pi = 0.6366197723675813430755350534900574L;
- // Constant @f$ 2 / \sqrt(\pi) @f$.
- static constexpr _RealType __two_div_root_pi = 1.1283791670955125738961589031215452L;
-
- // Constant Euler's number @f$ e @f$.
- static constexpr _RealType __e = 2.7182818284590452353602874713526625L;
- // Constant @f$ 1 / e @f$.
- static constexpr _RealType __one_div_e = 0.36787944117144232159552377016146087L;
- // Constant @f$ \log_2(e) @f$.
- static constexpr _RealType __log2_e = 1.4426950408889634073599246810018921L;
- // Constant @f$ \log_10(e) @f$.
- static constexpr _RealType __log10_e = 0.4342944819032518276511289189166051L;
- // Constant @f$ \ln(2) @f$.
- static constexpr _RealType __ln_2 = 0.6931471805599453094172321214581766L;
- // Constant @f$ \ln(3) @f$.
- static constexpr _RealType __ln_3 = 1.0986122886681096913952452369225257L;
- // Constant @f$ \ln(10) @f$.
- static constexpr _RealType __ln_10 = 2.3025850929940456840179914546843642L;
-
- // Constant Euler-Mascheroni @f$ \gamma_E @f$.
- static constexpr _RealType __gamma_e = 0.5772156649015328606065120900824024L;
- // Constant Golden Ratio @f$ \phi @f$.
- static constexpr _RealType __phi = 1.6180339887498948482045868343656381L;
-
- // Constant @f$ \sqrt(2) @f$.
- static constexpr _RealType __root_2 = 1.4142135623730950488016887242096981L;
- // Constant @f$ \sqrt(3) @f$.
- static constexpr _RealType __root_3 = 1.7320508075688772935274463415058724L;
- // Constant @f$ \sqrt(5) @f$.
- static constexpr _RealType __root_5 = 2.2360679774997896964091736687312762L;
- // Constant @f$ \sqrt(7) @f$.
- static constexpr _RealType __root_7 = 2.6457513110645905905016157536392604L;
- // Constant @f$ 1 / \sqrt(2) @f$.
- static constexpr _RealType __one_div_root_2 = 0.7071067811865475244008443621048490L;
- };
-
- // And the template definitions for the constants.
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__pi;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__pi_half;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__pi_third;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__pi_quarter;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__root_pi_div_2;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__one_div_pi;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__two_div_pi;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__two_div_root_pi;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__e;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__one_div_e;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__log2_e;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__log10_e;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__ln_2;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__ln_3;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__ln_10;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__gamma_e;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__phi;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__root_2;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__root_3;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__root_5;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__root_7;
- template<typename _RealType>
- constexpr _RealType __math_constants<_RealType>::__one_div_root_2;
-
-_GLIBCXX_END_NAMESPACE_VERSION
-} // namespace __gnu_cxx
+#include <ext/math_const.h>
+#include <ext/math_util.h>
#endif // C++11
diff --git a/libstdc++-v3/include/ext/math_const.h b/libstdc++-v3/include/ext/math_const.h
new file mode 100644
index 00000000000..b1381992998
--- /dev/null
+++ b/libstdc++-v3/include/ext/math_const.h
@@ -0,0 +1,426 @@
+// Math extensions -*- C++ -*-
+
+// Copyright (C) 2013-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ext/math_const.h
+ * This file is a GNU extension to the Standard C++ Library.
+ */
+
+#ifndef _EXT_MATH_CONST_H
+#define _EXT_MATH_CONST_H 1
+
+#pragma GCC system_header
+
+#if __cplusplus < 201103L
+# include <bits/c++0x_warning.h>
+#else
+
+#include <type_traits>
+#include <limits>
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ // A class for math constants.
+ template<typename _RealType>
+ struct __math_constants
+ {
+ static_assert(std::is_floating_point<_RealType>::value,
+ "template argument not a floating point type");
+
+ // Constant @f$ 4\pi @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __4_pi
+ = 12.56637061435917295385057353311801153678L;
+ // Constant @f$ 4\pi/3 @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __4_pi_div_3
+ = 4.188790204786390984616857844372670512253L;
+ // Constant @f$ 2\pi @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __2_pi
+ = 6.283185307179586476925286766559005768391L;
+ // Constant @f$ \pi @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __pi
+ = 3.141592653589793238462643383279502884195L;
+ // Constant @f$ \pi / 2 @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __pi_half
+ = 1.570796326794896619231321691639751442098L;
+ // Constant @f$ \pi / 3 @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __pi_third
+ = 1.047197551196597746154214461093167628063L;
+ // Constant @f$ \pi / 4 @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __pi_quarter
+ = 0.785398163397448309615660845819875721049L;
+ // Constant @f$ \sqrt(\pi / 2) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_pi
+ = 1.772453850905516027298167483341145182798L;
+ static _GLIBCXX_CONSTEXPR _RealType __cbrt_pi
+ = 1.464591887561523263020142527263790391736L;
+ // Constant @f$ \sqrt(\pi / 2) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_pi_div_2
+ = 1.253314137315500251207882642405522626505L;
+ // Constant @f$ 1 / \pi @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __one_div_pi
+ = 0.318309886183790671537767526745028724069L;
+ // Constant @f$ 2 / \pi @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __two_div_pi
+ = 0.636619772367581343075535053490057448138L;
+ // Constant @f$ 2 / \sqrt(\pi) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __two_div_root_pi
+ = 1.128379167095512573896158903121545171688L;
+ // Constant: @f$ \pi^2/6 @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __pi_sqr_div_6
+ = 1.644934066848226436472415166646025189221L;
+ // Constant: radians to degree conversion.
+ static _GLIBCXX_CONSTEXPR _RealType __deg
+ = _RealType{180} / __pi;
+ // Constant: degree to radians conversion.
+ static _GLIBCXX_CONSTEXPR _RealType __rad
+ = __pi / _RealType{180};
+
+ // Constant Euler's number @f$ e @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __e
+ = 2.718281828459045235360287471352662497759L;
+ // Constant @f$ 1 / e @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __one_div_e
+ = 0.367879441171442321595523770161460867446L;
+ // Constant @f$ \log_2(e) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __log2_e
+ = 1.442695040888963407359924681001892137427L;
+ // Constant @f$ \log_10(e) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __log10_e
+ = 0.434294481903251827651128918916605082294L;
+ // Constant @f$ \ln(2) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __ln_2
+ = 0.693147180559945309417232121458176568075L;
+ // Constant @f$ \ln(3) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __ln_3
+ = 1.098612288668109691395245236922525704648L;
+ // Constant @f$ \ln(10) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __ln_10
+ = 2.302585092994045684017991454684364207602L;
+ /// Constant @f$ \log(\pi) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __ln_pi
+ = 1.144729885849400174143427351353058711646L;
+
+ // Constant Euler-Mascheroni @f$ \gamma_E @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __gamma_e
+ = 0.577215664901532860606512090082402431043L;
+ // Constant Golden Ratio @f$ \phi @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __phi
+ = 1.618033988749894848204586834365638117720L;
+ // Catalan's constant.
+ static _GLIBCXX_CONSTEXPR _RealType __catalan
+ = 0.915965594177219015054603514932384110773L;
+ // Constant @f$ \sqrt(2) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_2
+ = 1.414213562373095048801688724209698078569L;
+ // Constant @f$ \sqrt(3) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_3
+ = 1.732050807568877293527446341505872366945L;
+ // Constant @f$ \sqrt(3) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_3_div_2
+ = 0.866025403784438646763723170752936183473L;
+ // Constant @f$ \sqrt(5) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_5
+ = 2.236067977499789696409173668731276235440L;
+ // Constant @f$ \sqrt(7) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __root_7
+ = 2.645751311064590590501615753639260425706L;
+ // Constant @f$ 1 / \sqrt(2) @f$.
+ static _GLIBCXX_CONSTEXPR _RealType __one_div_root_2
+ = 0.707106781186547524400844362104849039285L;
+ };
+
+ // And the template definitions for the constants.
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__4_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__4_pi_div_3;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__2_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_half;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_third;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_quarter;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__cbrt_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_pi_div_2;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__one_div_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__two_div_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__two_div_root_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_sqr_div_6;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__deg;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__rad;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__e;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__one_div_e;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__log2_e;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__log10_e;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_2;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_3;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_10;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_pi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__gamma_e;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__phi;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__catalan;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_2;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_3;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_5;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_7;
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__one_div_root_2;
+
+ // The following functions mirror the constants abobe but also
+ // admit generic programming with non-findamental types.
+ // For fundamental types, these constexpr functions return
+ // the appropriate constant above.
+ // Developers of multi-precision types are encouraged to overload
+ // these functions calling multiprecision "constant" functions as
+ // available.
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_4_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__4_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_4_pi_div_3(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__4_pi_div_3; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_2_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__const_2_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_pi_half(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__pi_half; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_pi_third(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__pi_third; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_pi_quarter(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__pi_quarter; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_root_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__root_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_cbrt_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__cbrt_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_root_pi_div_2(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__root_pi_div_2; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_one_div_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__one_div_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_two_div_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__two_div_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_two_div_root_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__two_div_root_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_pi_sqr_div_6(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__pi_sqr_div_6; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_deg(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__deg; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_rad(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__rad; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_e(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__e; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_one_div_e(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__one_div_e; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_log2_e(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__log2_e; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_log10_e(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__log10_e; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_ln_2(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__ln_2; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_ln_3(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__ln_3; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_ln_10(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__ln_10; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_ln_pi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__ln_pi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_gamma_e(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__gamma_e;
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_phi(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__phi; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_catalan(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__catalan; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_root_2(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__root_2; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_root_3(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__root_3; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_root_5(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__root_5; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_root_7(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__root_7; }
+
+ template<typename _RealType>
+ _GLIBCXX_CONSTEXPR _RealType
+ __const_one_div_root_2(_RealType = _RealType{})
+ _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value)
+ { return __math_constants<_RealType>::__one_div_root_2; }
+
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // C++11
+
+#endif // _EXT_MATH_CONST_H
diff --git a/libstdc++-v3/include/ext/math_util.h b/libstdc++-v3/include/ext/math_util.h
new file mode 100644
index 00000000000..283b86d8ae4
--- /dev/null
+++ b/libstdc++-v3/include/ext/math_util.h
@@ -0,0 +1,98 @@
+// Math extensions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ext/math_util.h
+ * This file is a GNU extension to the Standard C++ Library.
+ */
+
+#ifndef _EXT_MATH_UTIL_H
+#define _EXT_MATH_UTIL_H 1
+
+#pragma GCC system_header
+
+#if __cplusplus < 201103L
+# include <bits/c++0x_warning.h>
+#else
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * A function to reliably compare two floating point numbers.
+ *
+ * @param __a The left hand side
+ * @param __b The right hand side
+ * @param __mul The multiplier for numeric epsilon for comparison
+ * @return @c true if a and b are equal to zero
+ * or differ only by @f$ max(a,b) * mul * epsilon @f$
+ */
+ template<typename _Tp>
+ inline bool
+ __fpequal(_Tp __a, _Tp __b, _Tp __mul = _Tp{5})
+ {
+ const auto _S_eps = std::numeric_limits<_Tp>::epsilon();
+ const auto _S_tol = __mul * _S_eps;
+ bool __retval = true;
+ if ((__a != _Tp{0}) || (__b != _Tp{0}))
+ // Looks mean, but is necessary that the next line has sense.
+ __retval = (std::abs(__a - __b) < std::max(std::abs(__a),
+ std::abs(__b)) * _S_tol);
+ return __retval;
+ }
+
+ /**
+ * A function to reliably detect if a floating point number is an integer.
+ *
+ * @param __a The floating point number
+ * @return @c true if a is an integer within mul * epsilon.
+ */
+ template<typename _Tp>
+ inline bool
+ __fpinteger(_Tp __a, _Tp __mul = _Tp{5})
+ {
+ auto __n = std::nearbyint(__a);
+ return __fpequal(__a, _Tp(__n), __mul);
+ }
+
+ /**
+ * A function to reliably detect if a floating point number is a half-integer.
+ *
+ * @param __a The floating point number
+ * @return @c true if 2*a is an integer within mul * epsilon.
+ */
+ template<typename _Tp>
+ inline bool
+ __fp_half_integer(_Tp __a, _Tp __mul = _Tp{5})
+ {
+ auto __n = std::nearbyint(_Tp(2) * __a);
+ return __fpequal(_Tp(2) * __a, _Tp(__n), __mul);
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // C++11
+
+#endif // _EXT_MATH_UTIL_H
diff --git a/libstdc++-v3/include/ext/polynomial.h b/libstdc++-v3/include/ext/polynomial.h
new file mode 100644
index 00000000000..70aa86cd065
--- /dev/null
+++ b/libstdc++-v3/include/ext/polynomial.h
@@ -0,0 +1,820 @@
+// Math extensions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ext/polynomial.h
+ * This file is a GNU extension to the Standard C++ Library.
+ */
+
+#ifndef _EXT_POLYNOMIAL_H
+#define _EXT_POLYNOMIAL_H 1
+
+#pragma GCC system_header
+
+#if __cplusplus < 201103L
+# include <bits/c++0x_warning.h>
+#else
+
+#include <initializer_list>
+#include <vector>
+#include <iosfwd>
+#include <limits>
+#include <array>
+#include <utility> // For exchange
+
+namespace std {
+ template<typename _Tp>
+ class complex;
+}
+
+/**
+ * detail: Do we want this to always have a size of at least one? a_0 = _Tp{}? YES.
+ * detail: Should I punt on the initial power? YES.
+ *
+ * If high degree coefficients are zero, should I resize down? YES (or provide another word for order).
+ * How to access coefficients (bikeshed)?
+ * poly[i];
+ * coefficient(i);
+ * operator[](int i);
+ * begin(), end()?
+ * const _Tp* coefficients(); // Access for C, Fortran.
+ * How to set individual coefficients?
+ * poly[i] = c;
+ * coefficient(i, c);
+ * coefficient(i) = c;
+ * How to handle division?
+ * operator/ and throw out remainder?
+ * operator% to return the remainder?
+ * std::pair<> div(const _Polynomial& __a, const _Polynomial& __b) or remquo.
+ * void divmod(const _Polynomial& __a, const _Polynomial& __b,
+ * _Polynomial& __q, _Polynomial& __r);
+ * Should factory methods like derivative and integral be globals?
+ * I could have members:
+ * _Polynomial& integrate(_Tp c);
+ * _Polynomial& differentiate();
+ * Largest coefficient:
+ * Enforce coefficient of largest power be nonzero?
+ * Return an 'effective' order? Larest nonzero coefficient?
+ * Monic polynomial has largest coefficient as 1. Subclass?
+ */
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ *
+ */
+ template<typename _Tp>
+ class _Polynomial
+ {
+ public:
+ /**
+ * Typedefs.
+ * @todo Should we grab these from _M_coeff (i.e. std::vector<_Tp>)?
+ */
+ using value_type = typename std::vector<_Tp>::value_type;
+ using reference = typename std::vector<value_type>::reference;
+ using const_reference = typename std::vector<value_type>::const_reference;
+ using pointer = typename std::vector<value_type>::pointer;
+ using const_pointer = typename std::vector<value_type>::const_pointer;
+ using iterator = typename std::vector<value_type>::iterator;
+ using const_iterator = typename std::vector<value_type>::const_iterator;
+ using reverse_iterator = typename std::vector<value_type>::reverse_iterator;
+ using const_reverse_iterator = typename std::vector<value_type>::const_reverse_iterator;
+ using size_type = typename std::vector<_Tp>::size_type;
+ using difference_type = typename std::vector<_Tp>::difference_type;
+
+ /**
+ * Create a zero degree polynomial with value zero.
+ */
+ _Polynomial()
+ : _M_coeff(1)
+ { }
+
+ /**
+ * Copy ctor.
+ */
+ _Polynomial(const _Polynomial&) = default;
+
+ template<typename _Up>
+ _Polynomial(const _Polynomial<_Up>& __poly)
+ : _M_coeff{}
+ {
+ for (const auto __c : __poly)
+ this->_M_coeff.push_back(static_cast<value_type>(__c));
+ }
+
+ /**
+ * Create a polynomial of just one constant term.
+ */
+ explicit
+ _Polynomial(value_type __a, size_type __degree = 0)
+ : _M_coeff(__degree + 1)
+ { this->_M_coeff[__degree] = __a; }
+
+ /**
+ * Create a polynomial from an initializer list of coefficients.
+ */
+ _Polynomial(std::initializer_list<value_type> __ila)
+ : _M_coeff(__ila)
+ { }
+
+ /**
+ * Create a polynomial from an input iterator range of coefficients.
+ */
+ template<typename InIter,
+ typename = std::_RequireInputIter<InIter>>
+ _Polynomial(const InIter& __abegin, const InIter& __aend)
+ : _M_coeff(__abegin, __aend)
+ { }
+
+ /**
+ * Use Lagrange interpolation to construct a polynomial passing through
+ * the data points. The degree will be one less than the number of points.
+ */
+ template<typename InIter,
+ typename = std::_RequireInputIter<InIter>>
+ _Polynomial(const InIter& __xbegin, const InIter& __xend,
+ const InIter& __ybegin)
+ : _M_coeff()
+ {
+ std::vector<_Polynomial<value_type>> __numer;
+ std::vector<_Polynomial<value_type>> __denom;
+ for (auto __xi = __xbegin; __xi != __xend; ++__xi)
+ {
+ for (auto __xj = __xi + 1; __xj != __xend; ++__xj)
+ __denom.push_back(value_type(*__xj) - value_type(*__xi));
+ __numer.push_back({-value_type(*__xi), value_type{1}});
+ }
+ }
+
+ /**
+ * Swap the polynomial with another polynomial.
+ */
+ void
+ swap(_Polynomial& __poly)
+ { this->_M_coeff.swap(__poly._M_coeff); }
+
+ /**
+ * Evaluate the polynomial at the input point.
+ */
+ value_type
+ operator()(value_type __x) const
+ {
+ if (this->degree() > 0)
+ {
+ value_type __poly(this->coefficient(this->degree()));
+ for (int __i = this->degree() - 1; __i >= 0; --__i)
+ __poly = __poly * __x + this->coefficient(__i);
+ return __poly;
+ }
+ else
+ return value_type{};
+ }
+
+ /**
+ * Evaluate the polynomial at the input point.
+ */
+ template<typename _Up>
+ auto
+ operator()(_Up __x) const
+ -> decltype(value_type{} * _Up{})
+ {
+ if (this->degree() > 0)
+ {
+ auto __poly(_Up{1} * this->coefficient(this->degree()));
+ for (int __i = this->degree() - 1; __i >= 0; --__i)
+ __poly = __poly * __x + this->coefficient(__i);
+ return __poly;
+ }
+ else
+ return value_type{} * _Up{};
+ }
+
+ /**
+ * Evaluate the polynomial using a modification of Horner's rule which
+ * exploits the fact that the polynomial coefficients are all real.
+ *
+ * The algorithm is discussed in detail in:
+ * Knuth, D. E., The Art of Computer Programming: Seminumerical
+ * Algorithms (Vol. 2) Third Ed., Addison-Wesley, pp 486-488, 1998.
+ *
+ * If n is the degree of the polynomial,
+ * n - 3 multiplies and 4 * n - 6 additions are saved.
+ */
+ template<typename _Up>
+ auto
+ operator()(const std::complex<_Up>& __z) const
+ -> decltype(value_type{} * std::complex<_Up>{});
+
+ /**
+ * Evaluate the polynomial at a range of input points.
+ * The output is written to the output iterator which
+ * must be large enough to contain the results.
+ * The next available output iterator is returned.
+ */
+ template<typename InIter, typename OutIter,
+ typename = std::_RequireInputIter<InIter>>
+ OutIter
+ operator()(const InIter& __xbegin, const InIter& __xend,
+ OutIter& __pbegin) const
+ {
+ for (; __xbegin != __xend; ++__xbegin)
+ __pbegin++ = (*this)(__xbegin++);
+ return __pbegin;
+ }
+
+ // Could/should this be done by output iterator range?
+ template<size_type N>
+ void
+ eval(value_type __x, std::array<value_type, N>& __arr);
+
+ /**
+ * Evaluate the polynomial and its derivatives at the point x.
+ * The values are placed in the output range starting with the
+ * polynomial value and continuing through higher derivatives.
+ */
+ template<typename OutIter>
+ void
+ eval(value_type __x, OutIter __b, OutIter __e);
+
+ /**
+ * Evaluate the even part of the polynomial at the input point.
+ */
+ value_type
+ even(value_type __x) const;
+
+ /**
+ * Evaluate the odd part of the polynomial at the input point.
+ */
+ value_type
+ odd(value_type __x) const;
+
+ /**
+ * Evaluate the even part of the polynomial using a modification
+ * of Horner's rule which exploits the fact that the polynomial
+ * coefficients are all real.
+ *
+ * The algorithm is discussed in detail in:
+ * Knuth, D. E., The Art of Computer Programming: Seminumerical
+ * Algorithms (Vol. 2) Third Ed., Addison-Wesley, pp 486-488, 1998.
+ *
+ * If n is the degree of the polynomial,
+ * n - 3 multiplies and 4 * n - 6 additions are saved.
+ */
+ template<typename _Up>
+ auto
+ even(const std::complex<_Up>& __z) const
+ -> decltype(value_type{} * std::complex<_Up>{});
+
+ /**
+ * Evaluate the odd part of the polynomial using a modification
+ * of Horner's rule which exploits the fact that the polynomial
+ * coefficients are all real.
+ *
+ * The algorithm is discussed in detail in:
+ * Knuth, D. E., The Art of Computer Programming: Seminumerical
+ * Algorithms (Vol. 2) Third Ed., Addison-Wesley, pp 486-488, 1998.
+ *
+ * If n is the degree of the polynomial,
+ * n - 3 multiplies and 4 * n - 6 additions are saved.
+ */
+ template<typename _Up>
+ auto
+ odd(const std::complex<_Up>& __z) const
+ -> decltype(value_type{} * std::complex<_Up>{});
+
+ /**
+ * Return the derivative of the polynomial.
+ */
+ _Polynomial
+ derivative() const
+ {
+ _Polynomial __res(value_type{},
+ this->degree() > 0UL ? this->degree() - 1 : 0UL);
+ for (size_type __n = this->degree(), __i = 1; __i <= __n; ++__i)
+ __res._M_coeff[__i - 1] = __i * _M_coeff[__i];
+ return __res;
+ }
+
+ /**
+ * Return the integral of the polynomial with given integration constant.
+ */
+ _Polynomial
+ integral(value_type __c = value_type{}) const
+ {
+ _Polynomial __res(value_type{}, this->degree() + 1);
+ __res._M_coeff[0] = __c;
+ for (size_type __n = this->degree(), __i = 0; __i <= __n; ++__i)
+ __res._M_coeff[__i + 1] = _M_coeff[__i] / value_type(__i + 1);
+ return __res;
+ }
+
+ /**
+ * Unary plus.
+ */
+ _Polynomial
+ operator+() const
+ { return *this; }
+
+ /**
+ * Unary minus.
+ */
+ _Polynomial
+ operator-() const
+ { return _Polynomial(*this) *= value_type(-1); }
+
+ /**
+ * Assign from a scalar.
+ * The result is a zero degree polynomial equal to the scalar.
+ */
+ _Polynomial&
+ operator=(const value_type& __x)
+ {
+ _M_coeff = {__x};
+ return *this;
+ }
+
+ /**
+ * Copy assignment.
+ */
+ _Polynomial&
+ operator=(const _Polynomial&) = default;
+
+ template<typename _Up>
+ _Polynomial&
+ operator=(const _Polynomial<_Up>& __poly)
+ {
+ if (&__poly != this)
+ {
+ this->_M_coeff.clear();
+ for (const auto __c : __poly)
+ this->_M_coeff = static_cast<value_type>(__c);
+ return *this;
+ }
+ }
+
+ /**
+ * Assign from an initialiser list.
+ */
+ _Polynomial&
+ operator=(std::initializer_list<value_type> __ila)
+ {
+ _M_coeff = __ila;
+ return *this;
+ }
+
+ /**
+ * Add a scalar to the polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator+=(const _Up& __x)
+ {
+ degree(this->degree()); // Resize if necessary.
+ _M_coeff[0] += static_cast<value_type>(__x);
+ return *this;
+ }
+
+ /**
+ * Subtract a scalar from the polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator-=(const _Up& __x)
+ {
+ degree(this->degree()); // Resize if necessary.
+ _M_coeff[0] -= static_cast<value_type>(__x);
+ return *this;
+ }
+
+ /**
+ * Multiply the polynomial by a scalar.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator*=(const _Up& __x)
+ {
+ degree(this->degree()); // Resize if necessary.
+ for (size_type __i = 0; __i < _M_coeff.size(); ++__i)
+ _M_coeff[__i] *= static_cast<value_type>(__x);
+ return *this;
+ }
+
+ /**
+ * Divide the polynomial by a scalar.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator/=(const _Up& __x)
+ {
+ for (size_type __i = 0; __i < _M_coeff.size(); ++__i)
+ this->_M_coeff[__i] /= static_cast<value_type>(__x);
+ return *this;
+ }
+
+ /**
+ * Take the modulus of the polynomial relative to a scalar.
+ * The result is always null.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator%=(const _Up&)
+ {
+ degree(0UL); // Resize.
+ this->_M_coeff[0] = value_type{};
+ return *this;
+ }
+
+ /**
+ * Add another polynomial to the polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator+=(const _Polynomial<_Up>& __poly)
+ {
+ this->degree(std::max(this->degree(), __poly.degree()));
+ for (size_type __n = __poly.degree(), __i = 0; __i <= __n; ++__i)
+ this->_M_coeff[__i] += static_cast<value_type>(__poly._M_coeff[__i]);
+ return *this;
+ }
+
+ /**
+ * Subtract another polynomial from the polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator-=(const _Polynomial<_Up>& __poly)
+ {
+ this->degree(std::max(this->degree(), __poly.degree())); // Resize if necessary.
+ for (size_type __n = __poly.degree(), __i = 0; __i <= __n; ++__i)
+ this->_M_coeff[__i] -= static_cast<value_type>(__poly._M_coeff[__i]);
+ return *this;
+ }
+
+ /**
+ * Multiply the polynomial by another polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator*=(const _Polynomial<_Up>& __poly);
+
+ /**
+ * Divide the polynomial by another polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator/=(const _Polynomial<_Up>& __poly)
+ {
+ _Polynomial<value_type >__quo, __rem;
+ divmod(*this, __poly, __quo, __rem);
+ *this = __quo;
+ return *this;
+ }
+
+ /**
+ * Take the modulus of (modulate?) the polynomial relative to another polynomial.
+ */
+ template<typename _Up>
+ _Polynomial&
+ operator%=(const _Polynomial<_Up>& __poly)
+ {
+ _Polynomial<value_type >__quo, __rem;
+ divmod(*this, __poly, __quo, __rem);
+ *this = __rem;
+ return *this;
+ }
+
+ /**
+ * Return the degree or the power of the largest coefficient.
+ */
+ size_type
+ degree() const
+ { return (this->_M_coeff.size() > 0 ? this->_M_coeff.size() - 1 : 0); }
+
+ /**
+ * Set the degree or the power of the largest coefficient.
+ */
+ void
+ degree(size_type __degree)
+ { this->_M_coeff.resize(__degree + 1UL); }
+
+ /**
+ * Return the size of the coefficient sequence.
+ */
+ size_type
+ size() const
+ { return this->_M_coeff.size(); }
+
+
+ /**
+ * Return the @c ith coefficient with range checking.
+ */
+ value_type
+ coefficient(size_type __i) const
+ { return this->_M_coeff.at(__i); }
+
+ /**
+ * Set coefficient @c i to @c val with range checking.
+ */
+ void
+ coefficient(size_type __i, value_type __val)
+ { this->_M_coeff.at(__i) = __val; }
+
+ /**
+ * Return a @c const pointer to the coefficient sequence.
+ */
+ const value_type*
+ coefficients() const
+ { this->_M_coeff.data(); }
+
+ /**
+ * Return coefficient @c i.
+ */
+ value_type
+ operator[](size_type __i) const
+ { return this->_M_coeff[__i]; }
+
+ /**
+ * Return coefficient @c i as an lvalue.
+ */
+ reference
+ operator[](size_type __i)
+ { return this->_M_coeff[__i]; }
+
+ /**
+ * Return an iterator to the beginning of the coefficient sequence.
+ */
+ iterator
+ begin()
+ { return this->_M_coeff.begin(); }
+
+ /**
+ * Return an iterator to one past the end of the coefficient sequence.
+ */
+ iterator
+ end()
+ { return this->_M_coeff.end(); }
+
+ /**
+ * Return a @c const iterator the beginning
+ * of the coefficient sequence.
+ */
+ const_iterator
+ begin() const
+ { return this->_M_coeff.begin(); }
+
+ /**
+ * Return a @c const iterator to one past the end
+ * of the coefficient sequence.
+ */
+ const_iterator
+ end() const
+ { return this->_M_coeff.end(); }
+
+ /**
+ * Return a @c const iterator the beginning
+ * of the coefficient sequence.
+ */
+ const_iterator
+ cbegin() const
+ { return this->_M_coeff.cbegin(); }
+
+ /**
+ * Return a @c const iterator to one past the end
+ * of the coefficient sequence.
+ */
+ const_iterator
+ cend() const
+ { return this->_M_coeff.cend(); }
+
+ reverse_iterator
+ rbegin()
+ { return this->_M_coeff.rbegin(); }
+
+ reverse_iterator
+ rend()
+ { return this->_M_coeff.rend(); }
+
+ const_reverse_iterator
+ rbegin() const
+ { return this->_M_coeff.rbegin(); }
+
+ const_reverse_iterator
+ rend() const
+ { return this->_M_coeff.rend(); }
+
+ const_reverse_iterator
+ crbegin() const
+ { return this->_M_coeff.crbegin(); }
+
+ const_reverse_iterator
+ crend() const
+ { return this->_M_coeff.crend(); }
+
+ template<typename CharT, typename Traits, typename _Tp1>
+ friend std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>&, _Polynomial<_Tp1>&);
+
+ template<typename _Tp1>
+ friend bool
+ operator==(const _Polynomial<_Tp1>& __pa,
+ const _Polynomial<_Tp1>& __pb);
+
+ private:
+
+ std::vector<value_type> _M_coeff;
+ };
+
+ /**
+ * Return the sum of a polynomial with a scalar.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() + _Up())>
+ operator+(const _Polynomial<_Tp>& __poly, const _Up& __x)
+ { return _Polynomial<decltype(_Tp() + _Up())>(__poly) += __x; }
+
+ /**
+ * Return the difference of a polynomial with a scalar.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() - _Up())>
+ operator-(const _Polynomial<_Tp>& __poly, const _Up& __x)
+ { return _Polynomial<decltype(_Tp() - _Up())>(__poly) -= __x; }
+
+ /**
+ * Return the product of a polynomial with a scalar.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() * _Up())>
+ operator*(const _Polynomial<_Tp>& __poly, const _Up& __x)
+ { return _Polynomial<decltype(_Tp() * _Up())>(__poly) *= __x; }
+
+ /**
+ * Return the quotient of a polynomial with a scalar.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() / _Up())>
+ operator/(const _Polynomial<_Tp>& __poly, const _Up& __x)
+ { return _Polynomial<decltype(_Tp() / _Up())>(__poly) /= __x; }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() / _Up())>
+ operator%(const _Polynomial<_Tp>& __poly, const _Up& __x)
+ { return _Polynomial<decltype(_Tp() / _Up())>(__poly) %= __x; }
+
+ /**
+ * Return the sum of two polynomials.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() + _Up())>
+ operator+(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb)
+ { return _Polynomial<decltype(_Tp() + _Up())>(__pa) += __pb; }
+
+ /**
+ * Return the difference of two polynomials.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() - _Up())>
+ operator-(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb)
+ { return _Polynomial<decltype(_Tp() - _Up())>(__pa) -= __pb; }
+
+ /**
+ * Return the product of two polynomials.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() * _Up())>
+ operator*(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb)
+ { return _Polynomial<decltype(_Tp() * _Up())>(__pa) *= __pb; }
+
+ /**
+ * Return the quotient of two polynomials.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() / _Up())>
+ operator/(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb)
+ { return _Polynomial<decltype(_Tp() / _Up())>(__pa) /= __pb; }
+
+ /**
+ * Return the modulus or remainder of one polynomial relative to another one.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() / _Up())>
+ operator%(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb)
+ { return _Polynomial<decltype(_Tp() / _Up())>(__pa) %= __pb; }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() + _Up())>
+ operator+(const _Tp& __x, const _Polynomial<_Up>& __poly)
+ { return _Polynomial<decltype(_Tp() + _Up())>(__x) += __poly; }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() - _Up())>
+ operator-(const _Tp& __x, const _Polynomial<_Up>& __poly)
+ { return _Polynomial<decltype(_Tp() - _Up())>(__x) -= __poly; }
+
+ /**
+ *
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() * _Up())>
+ operator*(const _Tp& __x, const _Polynomial<_Up>& __poly)
+ { return _Polynomial<decltype(_Tp() * _Up())>(__x) *= __poly; }
+
+ /**
+ * Return the quotient of two polynomials.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() / _Up())>
+ operator/(const _Tp& __x, const _Polynomial<_Up>& __poly)
+ { return _Polynomial<decltype(_Tp() / _Up())>(__x) /= __poly; }
+
+ /**
+ * Return the modulus or remainder of one polynomial relative to another one.
+ */
+ template<typename _Tp, typename _Up>
+ inline _Polynomial<decltype(_Tp() / _Up())>
+ operator%(const _Tp& __x, const _Polynomial<_Up>& __poly)
+ { return _Polynomial<decltype(_Tp() / _Up())>(__x) %= __poly; }
+
+ /**
+ * Divide two polynomials returning the quotient and remainder.
+ */
+ template<typename _Tp>
+ void
+ divmod(const _Polynomial<_Tp>& __pa, const _Polynomial<_Tp>& __pb,
+ _Polynomial<_Tp>& __quo, _Polynomial<_Tp>& __rem);
+
+ /**
+ * Write a polynomial to a stream.
+ * The format is a parenthesized comma-delimited list of coefficients.
+ */
+ template<typename CharT, typename Traits, typename _Tp>
+ std::basic_ostream<CharT, Traits>&
+ operator<<(std::basic_ostream<CharT, Traits>& __os,
+ const _Polynomial<_Tp>& __poly);
+
+ /**
+ * Read a polynomial from a stream.
+ * The input format can be a plain scalar (zero degree polynomial)
+ * or a parenthesized comma-delimited list of coefficients.
+ */
+ template<typename CharT, typename Traits, typename _Tp>
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& __is,
+ _Polynomial<_Tp>& __poly);
+
+ /**
+ * Return true if two polynomials are equal.
+ */
+ template<typename _Tp>
+ inline bool
+ operator==(const _Polynomial<_Tp>& __pa, const _Polynomial<_Tp>& __pb)
+ { return __pa._M_coeff == __pb._M_coeff; }
+
+ /**
+ * Return false if two polynomials are equal.
+ */
+ template<typename _Tp>
+ inline bool
+ operator!=(const _Polynomial<_Tp>& __pa, const _Polynomial<_Tp>& __pb)
+ { return !(__pa == __pb); }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#include <ext/polynomial.tcc>
+
+#endif // C++11
+
+#endif // _EXT_POLYNOMIAL_H
+
diff --git a/libstdc++-v3/include/ext/polynomial.tcc b/libstdc++-v3/include/ext/polynomial.tcc
new file mode 100644
index 00000000000..03ad51974a9
--- /dev/null
+++ b/libstdc++-v3/include/ext/polynomial.tcc
@@ -0,0 +1,353 @@
+// Math extensions -*- C++ -*-
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License and
+// a copy of the GCC Runtime Library Exception along with this program;
+// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+// <http://www.gnu.org/licenses/>.
+
+/** @file ext/polynomial.tcc
+ * This file is a GNU extension to the Standard C++ Library.
+ */
+
+#ifndef _EXT_POLYNOMIAL_TCC
+#define _EXT_POLYNOMIAL_TCC 1
+
+#pragma GCC system_header
+
+#if __cplusplus < 201103L
+# include <bits/c++0x_warning.h>
+#else
+
+#include <ios>
+#include <complex>
+
+namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
+{
+_GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+ /**
+ * Evaluate the polynomial using a modification of Horner's rule which
+ * exploits the fact that the polynomial coefficients are all real.
+ *
+ * The algorithm is discussed in detail in:
+ * Knuth, D. E., The Art of Computer Programming: Seminumerical
+ * Algorithms (Vol. 2) Third Ed., Addison-Wesley, pp 486-488, 1998.
+ *
+ * If n is the degree of the polynomial,
+ * n - 3 multiplies and 4 * n - 6 additions are saved.
+ */
+ template<typename _Tp>
+ template<typename _Up>
+ auto
+ _Polynomial<_Tp>::operator()(const std::complex<_Up>& __z) const
+ -> decltype(_Polynomial<_Tp>::value_type{} * std::complex<_Up>{})
+ {
+ const auto __r = _Tp{2} * std::real(__z);
+ const auto __s = std::norm(__z);
+ size_type __n = this->degree();
+ auto __aa = this->coefficient(__n);
+ auto __bb = this->coefficient(__n - 1);
+ for (size_type __j = 2; __j <= __n; ++__j)
+ __bb = this->coefficient(__n - __j)
+ - __s * std::exchange(__aa, __bb + __r * __aa);
+ return __aa * __z + __bb;
+ };
+
+ // Could/should this be done by output iterator range?
+ template<typename _Tp>
+ template<typename _Polynomial<_Tp>::size_type N>
+ void
+ _Polynomial<_Tp>::eval(typename _Polynomial<_Tp>::value_type __x,
+ std::array<_Polynomial<_Tp>::value_type, N>& __arr)
+ {
+ if (__arr.size() > 0)
+ {
+ __arr.fill(value_type{});
+ const size_type __sz = _M_coeff.size();
+ __arr[0] = this->coefficient(__sz - 1);
+ for (int __i = __sz - 2; __i >= 0; --__i)
+ {
+ int __nn = std::min(__arr.size() - 1, __sz - 1 - __i);
+ for (int __j = __nn; __j >= 1; --__j)
+ __arr[__j] = __arr[__j] * __x + __arr[__j - 1];
+ __arr[0] = __arr[0] * __x + this->coefficient(__i);
+ }
+ // Now put in the factorials.
+ value_type __fact = value_type(1);
+ for (size_type __n = __arr.size(), __i = 2; __i < __n; ++__i)
+ {
+ __fact *= value_type(__i);
+ __arr[__i] *= __fact;
+ }
+ }
+ }
+
+ /**
+ * Evaluate the polynomial and its derivatives at the point x.
+ * The values are placed in the output range starting with the
+ * polynomial value and continuing through higher derivatives.
+ */
+ template<typename _Tp>
+ template<typename OutIter>
+ void
+ _Polynomial<_Tp>::eval(typename _Polynomial<_Tp>::value_type __x,
+ OutIter __b, OutIter __e)
+ {
+ if(__b != __e)
+ {
+ std::fill(__b, __e, value_type{});
+ const size_type __sz = _M_coeff.size();
+ *__b = _M_coeff[__sz - 1];
+ for (int __i = __sz - 2; __i >= 0; --__i)
+ {
+ for (auto __it = std::reverse_iterator<OutIter>(__e);
+ __it != std::reverse_iterator<OutIter>(__b) - 1; ++__it)
+ *__it = *__it * __x + *(__it + 1);
+ *__b = *__b * __x + _M_coeff[__i];
+ }
+ // Now put in the factorials.
+ int __i = 0;
+ value_type __fact = value_type(++__i);
+ for (auto __it = __b + 1; __it != __e; ++__it)
+ {
+ __fact *= value_type(__i);
+ *__it *= __fact;
+ ++__i;
+ }
+ }
+ }
+
+ /**
+ * Evaluate the even part of the polynomial at the input point.
+ */
+ template<typename _Tp>
+ typename _Polynomial<_Tp>::value_type
+ _Polynomial<_Tp>::even(typename _Polynomial<_Tp>::value_type __x) const
+ {
+ if (this->degree() > 0)
+ {
+ auto __odd = this->degree() % 2;
+ value_type __poly(this->coefficient(this->degree() - __odd));
+ for (int __i = this->degree() - __odd - 2; __i >= 0; __i -= 2)
+ __poly = __poly * __x * __x + this->coefficient(__i);
+ return __poly;
+ }
+ else
+ return value_type{};
+ }
+
+ /**
+ * Evaluate the odd part of the polynomial at the input point.
+ */
+ template<typename _Tp>
+ typename _Polynomial<_Tp>::value_type
+ _Polynomial<_Tp>::odd(typename _Polynomial<_Tp>::value_type __x) const
+ {
+ if (this->degree() > 0)
+ {
+ auto __even = (this->degree() % 2 == 0 ? 1 : 0);
+ value_type __poly(this->coefficient(this->degree() - __even));
+ for (int __i = this->degree() - __even - 2; __i >= 0; __i -= 2)
+ __poly = __poly * __x * __x + this->coefficient(__i);
+ return __poly * __x;
+ }
+ else
+ return value_type{};
+ }
+
+ /**
+ * Evaluate the even part of the polynomial using a modification
+ * of Horner's rule which exploits the fact that the polynomial
+ * coefficients are all real.
+ *
+ * The algorithm is discussed in detail in:
+ * Knuth, D. E., The Art of Computer Programming: Seminumerical
+ * Algorithms (Vol. 2) Third Ed., Addison-Wesley, pp 486-488, 1998.
+ *
+ * If n is the degree of the polynomial,
+ * n - 3 multiplies and 4 * n - 6 additions are saved.
+ */
+ template<typename _Tp>
+ template<typename _Up>
+ auto
+ _Polynomial<_Tp>::even(const std::complex<_Up>& __z) const
+ -> decltype(typename _Polynomial<_Tp>::value_type{} * std::complex<_Up>{})
+ {
+ if (this->degree() > 0)
+ {
+ const auto __zz = __z * __z;
+ const auto __r = _Tp{2} * std::real(__zz);
+ const auto __s = std::norm(__zz);
+ auto __odd = this->degree() % 2;
+ size_type __n = this->degree() - __odd;
+ auto __aa = this->coefficient(__n);
+ auto __bb = this->coefficient(__n - 2);
+ for (size_type __j = 4; __j <= __n; __j += 2)
+ __bb = this->coefficient(__n - __j)
+ - __s * std::exchange(__aa, __bb + __r * __aa);
+ return __aa * __zz + __bb;
+ }
+ else
+ return decltype(value_type{} * std::complex<_Up>{}){};
+ };
+
+ /**
+ * Evaluate the odd part of the polynomial using a modification
+ * of Horner's rule which exploits the fact that the polynomial
+ * coefficients are all real.
+ *
+ * The algorithm is discussed in detail in:
+ * Knuth, D. E., The Art of Computer Programming: Seminumerical
+ * Algorithms (Vol. 2) Third Ed., Addison-Wesley, pp 486-488, 1998.
+ *
+ * If n is the degree of the polynomial,
+ * n - 3 multiplies and 4 * n - 6 additions are saved.
+ */
+ template<typename _Tp>
+ template<typename _Up>
+ auto
+ _Polynomial<_Tp>::odd(const std::complex<_Up>& __z) const
+ -> decltype(_Polynomial<_Tp>::value_type{} * std::complex<_Up>{})
+ {
+ if (this->degree() > 0)
+ {
+ const auto __zz = __z * __z;
+ const auto __r = _Tp{2} * std::real(__zz);
+ const auto __s = std::norm(__zz);
+ auto __even = (this->degree() % 2 == 0 ? 1 : 0);
+ size_type __n = this->degree() - __even;
+ auto __aa = this->coefficient(__n);
+ auto __bb = this->coefficient(__n - 2);
+ for (size_type __j = 4; __j <= __n; __j += 2)
+ __bb = this->coefficient(__n - __j)
+ - __s * std::exchange(__aa, __bb + __r * __aa);
+ return __z * (__aa * __zz + __bb);
+ }
+ else
+ return decltype(value_type{} * std::complex<_Up>{}){};
+ };
+
+ /**
+ * Multiply the polynomial by another polynomial.
+ */
+ template<typename _Tp>
+ template<typename _Up>
+ _Polynomial<_Tp>&
+ _Polynomial<_Tp>::operator*=(const _Polynomial<_Up>& __poly)
+ {
+ // Test for zero size polys and do special processing?
+ const size_type __m = this->degree();
+ const size_type __n = __poly.degree();
+ std::vector<value_type> __new_coeff(__m + __n + 1);
+ for (size_type __i = 0; __i <= __m; ++__i)
+ for (size_type __j = 0; __j <= __n; ++__j)
+ __new_coeff[__i + __j] += this->_M_coeff[__i]
+ * static_cast<value_type>(__poly._M_coeff[__j]);
+ this->_M_coeff = __new_coeff;
+ return *this;
+ }
+
+ /**
+ * Divide two polynomials returning the quotient and remainder.
+ */
+ template<typename _Tp>
+ void
+ divmod(const _Polynomial<_Tp>& __pa, const _Polynomial<_Tp>& __pb,
+ _Polynomial<_Tp>& __quo, _Polynomial<_Tp>& __rem)
+ {
+ __rem = __pa;
+ __quo = _Polynomial<_Tp>(_Tp(), __pa.degree());
+ const std::size_t __na = __pa.degree();
+ const std::size_t __nb = __pb.degree();
+ if (__nb <= __na)
+ {
+ for (int __k = __na - __nb; __k >= 0; --__k)
+ {
+ __quo.coefficient(__k, __rem.coefficient(__nb + __k)
+ / __pb.coefficient(__nb));
+ for (int __j = __nb + __k - 1; __j >= __k; --__j)
+ __rem.coefficient(__j, __rem.coefficient(__j)
+ - __quo.coefficient(__k)
+ * __pb.coefficient(__j - __k));
+ }
+ for (int __j = __nb; __j <= __na; ++__j)
+ __rem.coefficient(__j, _Tp());
+ }
+ }
+
+ /**
+ * Write a polynomial to a stream.
+ * The format is a parenthesized comma-delimited list of coefficients.
+ */
+ template<typename CharT, typename Traits, typename _Tp>
+ std::basic_ostream<CharT, Traits>&
+ operator<<(std::basic_ostream<CharT, Traits>& __os,
+ const _Polynomial<_Tp>& __poly)
+ {
+ int __old_prec = __os.precision(std::numeric_limits<_Tp>::max_digits10);
+ __os << "(";
+ for (size_t __i = 0; __i < __poly.degree(); ++__i)
+ __os << __poly.coefficient(__i) << ",";
+ __os << __poly.coefficient(__poly.degree());
+ __os << ")";
+ __os.precision(__old_prec);
+ return __os;
+ }
+
+ /**
+ * Read a polynomial from a stream.
+ * The input format can be a plain scalar (zero degree polynomial)
+ * or a parenthesized comma-delimited list of coefficients.
+ */
+ template<typename CharT, typename Traits, typename _Tp>
+ std::basic_istream<CharT, Traits>&
+ operator>>(std::basic_istream<CharT, Traits>& __is,
+ _Polynomial<_Tp>& __poly)
+ {
+ _Tp __x;
+ CharT __ch;
+ __is >> __ch;
+ if (__ch == '(')
+ {
+ do
+ {
+ __is >> __x >> __ch;
+ __poly._M_coeff.push_back(__x);
+ }
+ while (__ch == ',');
+ if (__ch != ')')
+ __is.setstate(std::ios_base::failbit);
+ }
+ else
+ {
+ __is.putback(__ch);
+ __is >> __x;
+ __poly = __x;
+ }
+ return __is;
+ }
+
+_GLIBCXX_END_NAMESPACE_VERSION
+} // namespace __gnu_cxx
+
+#endif // C++11
+
+#endif // _EXT_POLYNOMIAL_TCC
+
diff --git a/libstdc++-v3/include/std/mutex b/libstdc++-v3/include/std/mutex
index 7a7bd2eb13e..e90006f43a0 100644
--- a/libstdc++-v3/include/std/mutex
+++ b/libstdc++-v3/include/std/mutex
@@ -579,13 +579,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef _GLIBCXX_HAVE_TLS
extern __thread void* __once_callable;
extern __thread void (*__once_call)();
-
- template<typename _Callable>
- inline void
- __once_call_impl()
- {
- (*(_Callable*)__once_callable)();
- }
#else
extern function<void()> __once_functor;
@@ -603,16 +596,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
call_once(once_flag& __once, _Callable&& __f, _Args&&... __args)
{
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 2442. call_once() shouldn't DECAY_COPY()
+ auto __callable = [&] {
+ std::__invoke(std::forward<_Callable>(__f),
+ std::forward<_Args>(__args)...);
+ };
#ifdef _GLIBCXX_HAVE_TLS
- auto __bound_functor = std::__bind_simple(std::forward<_Callable>(__f),
- std::forward<_Args>(__args)...);
- __once_callable = std::__addressof(__bound_functor);
- __once_call = &__once_call_impl<decltype(__bound_functor)>;
+ __once_callable = std::__addressof(__callable);
+ __once_call = []{ (*(decltype(__callable)*)__once_callable)(); };
#else
unique_lock<mutex> __functor_lock(__get_once_mutex());
- auto __callable = std::__bind_simple(std::forward<_Callable>(__f),
- std::forward<_Args>(__args)...);
- __once_functor = [&]() { __callable(); };
+ __once_functor = __callable;
__set_once_functor_lock_ptr(&__functor_lock);
#endif
diff --git a/libstdc++-v3/libsupc++/nested_exception.h b/libstdc++-v3/libsupc++/nested_exception.h
index 0c00d7487ac..078af0ea16f 100644
--- a/libstdc++-v3/libsupc++/nested_exception.h
+++ b/libstdc++-v3/libsupc++/nested_exception.h
@@ -122,7 +122,7 @@ namespace std
"throw_with_nested argument must be CopyConstructible");
using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
__not_<is_base_of<nested_exception, _Up>>>;
- return std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
+ std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
}
// Determine if dynamic_cast<const nested_exception&> would be well-formed.
diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
index 84a68579344..a86e61a2234 100644
--- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
+++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/memory_management_tools/1.cc
@@ -74,15 +74,17 @@ void test02()
void test03()
{
char test_data[] = "123456";
- std::uninitialized_default_construct_n(std::begin(test_data), 6);
+ auto end = std::uninitialized_default_construct_n(std::begin(test_data), 6);
VERIFY(std::string(test_data) == "123456");
+ VERIFY( end == test_data + 6 );
}
void test04()
{
char test_data[] = "123456";
- std::uninitialized_value_construct_n(std::begin(test_data), 6);
- VERIFY(std::string(test_data, 6) == std::string("\0\0\0\0\0\0", 6));
+ auto end = std::uninitialized_value_construct_n(std::begin(test_data), 5);
+ VERIFY(std::string(test_data, 6) == std::string("\0\0\0\0\0" "6", 6));
+ VERIFY( end == test_data + 5 );
}
void test05()
@@ -112,8 +114,9 @@ void test07()
del_count = 0;
DelCount* x = (DelCount*)malloc(sizeof(DelCount)*10);
for (int i = 0; i < 10; ++i) new (x+i) DelCount;
- std::destroy_n(x, 10);
+ auto end = std::destroy_n(x, 10);
VERIFY(del_count == 10);
+ VERIFY( end == x + 10 );
del_count = 0;
free(x);
}
@@ -127,7 +130,8 @@ void test08()
std::uninitialized_move(source.begin(), source.end(), target);
for (const auto& x : source) VERIFY(!x);
for (int i = 0; i < 10; ++i) VERIFY(bool(*(target+i)));
- std::destroy_n(target, 10);
+ auto end = std::destroy_n(target, 10);
+ VERIFY( end == target + 10 );
free(target);
}
@@ -137,10 +141,13 @@ void test09()
for (int i = 0; i < 10; ++i) source.push_back(std::make_unique<int>(i));
std::unique_ptr<int>* target =
(std::unique_ptr<int>*)malloc(sizeof(std::unique_ptr<int>)*10);
- std::uninitialized_move_n(source.begin(), 10, target);
+ auto end = std::uninitialized_move_n(source.begin(), 10, target);
+ VERIFY( end.first == source.begin() + 10 );
+ VERIFY( end.second == target + 10 );
for (const auto& x : source) VERIFY(!x);
for (int i = 0; i < 10; ++i) VERIFY(bool(*(target+i)));
- std::destroy_n(target, 10);
+ auto end2 = std::destroy_n(target, 10);
+ VERIFY( end2 == target + 10 );
free(target);
}
@@ -156,7 +163,8 @@ void test11()
{
char* x = (char*)malloc(sizeof(char)*10);
for (int i = 0; i < 10; ++i) new (x+i) char;
- std::destroy_n(x, 10);
+ auto end = std::destroy_n(x, 10);
+ VERIFY( end == x + 10 );
free(x);
}
@@ -285,10 +293,12 @@ void test19()
{
char test_source[] = "123456";
char test_target[] = "000000";
- std::uninitialized_move_n(std::begin(test_source),
- 6,
- test_target);
+ auto end = std::uninitialized_move_n(std::begin(test_source),
+ 6,
+ test_target);
VERIFY(std::string(test_target) == "123456");
+ VERIFY( end.first == test_source + 6 );
+ VERIFY( end.second == test_target + 6 );
}
int main()
diff --git a/libstdc++-v3/testsuite/25_algorithms/sample/1.cc b/libstdc++-v3/testsuite/25_algorithms/sample/1.cc
new file mode 100644
index 00000000000..10376e2add5
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/sample/1.cc
@@ -0,0 +1,110 @@
+// Copyright (C) 2014-2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17" }
+// { dg-do run { target c++1z } }
+
+#include <algorithm>
+#include <random>
+#include <testsuite_hooks.h>
+#include <testsuite_iterators.h>
+
+std::mt19937 rng;
+
+using std::sample;
+using __gnu_test::test_container;
+using __gnu_test::input_iterator_wrapper;
+using __gnu_test::output_iterator_wrapper;
+using __gnu_test::forward_iterator_wrapper;
+using __gnu_test::random_access_iterator_wrapper;
+
+void
+test01()
+{
+ const int in[] = { 1, 2 };
+ test_container<const int, random_access_iterator_wrapper> pop(in);
+ const int sample_size = 10;
+ int samp[sample_size] = { };
+
+ // population smaller than desired sample size
+ auto it = sample(pop.begin(), pop.end(), samp, sample_size, rng);
+ VERIFY( it == samp + std::distance(pop.begin(), pop.end()) );
+ const auto sum = std::accumulate(pop.begin(), pop.end(), 0);
+ VERIFY( std::accumulate(samp, samp + sample_size, 0) == sum );
+}
+
+void
+test02()
+{
+ const int in[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+ test_container<const int, random_access_iterator_wrapper> pop(in);
+ const int sample_size = 10;
+ int samp[sample_size] = { };
+
+ auto it = sample(pop.begin(), pop.end(), samp, sample_size, rng);
+ VERIFY( it == samp + sample_size );
+
+ // verify no duplicates
+ std::sort(samp, it);
+ auto it2 = std::unique(samp, it);
+ VERIFY( it2 == it );
+}
+
+void
+test03()
+{
+ const int in[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+ test_container<const int, input_iterator_wrapper> pop(in);
+ const int sample_size = 5;
+ int samp[sample_size] = { };
+
+ // input iterator for population
+ auto it = sample(pop.begin(), pop.end(), samp, sample_size, rng);
+ VERIFY( it == samp + sample_size );
+
+ // verify no duplicates
+ std::sort(samp, it);
+ auto it2 = std::unique(samp, it);
+ VERIFY( it2 == it );
+}
+
+void
+test04()
+{
+ const int in[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
+ test_container<const int, forward_iterator_wrapper> pop(in);
+ const int sample_size = 5;
+ int out[sample_size];
+ test_container<int, output_iterator_wrapper> samp(out);
+
+ // forward iterator for population and output iterator for result
+ auto res = sample(pop.begin(), pop.end(), samp.begin(), sample_size, rng);
+
+ // verify no duplicates
+ std::sort(std::begin(out), std::end(out));
+ auto it = std::unique(std::begin(out), std::end(out));
+ VERIFY( it == std::end(out) );
+}
+
+int
+main()
+{
+ test01();
+ test02();
+ test03();
+ test04();
+}
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
index eb0111d4dc1..4136944b162 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
@@ -27,5 +27,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 615 }
+// { dg-error "deleted" "" { target *-*-* } 620 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
index 546ac505119..ffc2dc24179 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
@@ -27,5 +27,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 654 }
+// { dg-error "deleted" "" { target *-*-* } 659 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
index c5b6103f4de..20f263c79bd 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
@@ -28,5 +28,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 615 }
+// { dg-error "deleted" "" { target *-*-* } 620 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
index 49e1eb18347..bf7cda86365 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
@@ -28,5 +28,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 654 }
+// { dg-error "deleted" "" { target *-*-* } 659 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
index db0c3c1e23e..731513b1ef5 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
@@ -26,10 +26,8 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 469 }
-// { dg-error "deleted" "" { target *-*-* } 470 }
-// { dg-error "operator" "" { target *-*-* } 471 }
-// { dg-error "operator" "" { target *-*-* } 472 }
-// { dg-error "operator" "" { target *-*-* } 473 }
+// { dg-error "operator" "" { target *-*-* } 476 }
+// { dg-error "operator" "" { target *-*-* } 477 }
+// { dg-error "operator" "" { target *-*-* } 478 }
// { dg-prune-output "declared here" }
diff --git a/libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc b/libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc
new file mode 100644
index 00000000000..5b6668798dc
--- /dev/null
+++ b/libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc
@@ -0,0 +1,45 @@
+// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-rtems* *-*-darwin* powerpc-ibm-aix* } }
+// { dg-options "-pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* powerpc-ibm-aix* } }
+// { dg-require-effective-target c++11 }
+// { dg-require-cstdint "" }
+// { dg-require-gthreads "" }
+
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <mutex>
+#include <testsuite_hooks.h>
+
+void f(int& a, int&& b) { a = 1; b = 2; }
+
+void
+test01()
+{
+ // LWG 2442. call_once() shouldn't DECAY_COPY()
+ std::once_flag once;
+ int i = 0;
+ int j = 0;
+ call_once(once, f, i, std::move(j));
+ VERIFY( i == 1 );
+ VERIFY( j == 2 );
+}
+
+int
+main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/ext/polynomial/compile.cc b/libstdc++-v3/testsuite/ext/polynomial/compile.cc
new file mode 100644
index 00000000000..53ddb5dbd2e
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/polynomial/compile.cc
@@ -0,0 +1,7 @@
+
+#include <ext/polynomial.h>
+
+int
+main()
+{
+}
diff --git a/libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc b/libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc
index d863ae8df93..fcd1de67c31 100644
--- a/libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc
+++ b/libstdc++-v3/testsuite/ext/special_functions/conf_hyperg/check_value.cc
@@ -1,5 +1,5 @@
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
//
// Copyright (C) 2016 Free Software Foundation, Inc.
//
@@ -41,3592 +41,3802 @@
// Test data for a=0.0000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data001[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data002[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data003[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data004[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data005[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data006[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data007[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data008[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data009[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler009 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data010[21] =
{
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler010 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 1.1823431123048067e-11
// max(|f - f_GSL| / |f_GSL|): 1.8179920344425603e-13
+// mean(f - f_GSL): -5.8836665698233256e-13
+// variance(f - f_GSL): 6.6269003617242792e-24
+// stddev(f - f_GSL): 2.5742766676727424e-12
const testcase_conf_hyperg<double>
data011[21] =
{
{ 0.18354081260932842, 0.50000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.19419827762834704, 0.50000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.20700192122398287, 0.50000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.22280243801078498, 0.50000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.24300035416182644, 0.50000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.27004644161220326, 0.50000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.30850832255367100, 0.50000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.36743360905415834, 0.50000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.46575960759364043, 0.50000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.64503527044915010, 0.50000000000000000, 1.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.7533876543770910, 0.50000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 3.4415238691253340, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 7.3801013214774045, 0.50000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 16.843983681258987, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 40.078445504076420, 0.50000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 98.033339697812693, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 244.33254130132138, 0.50000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 617.06403040562441, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1573.6049422133694, 0.50000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 4042.7554308904109, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler011 = 1.0000000000000006e-11;
// Test data for a=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.0231815394945443e-12
// max(|f - f_GSL| / |f_GSL|): 2.3738284297189904e-15
+// mean(f - f_GSL): -5.2558486663385687e-14
+// variance(f - f_GSL): 4.9460728311082100e-26
+// stddev(f - f_GSL): 2.2239768054339527e-13
const testcase_conf_hyperg<double>
data012[21] =
{
{ 0.34751307955387056, 0.50000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.36515709992587503, 0.50000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.38575276072642301, 0.50000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.41020241461382889, 0.50000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.43982706745912625, 0.50000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.47663109114346930, 0.50000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.52377761180260862, 0.50000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.58647299647508400, 0.50000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.67367002294334866, 0.50000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.80145607363402172, 0.50000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.3281918274866849, 0.50000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.9052621465543667, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.9805776178019903, 0.50000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 5.0906787293171654, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 9.4185650450425982, 0.50000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 18.627776225142014, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 38.823513069699622, 0.50000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 84.215287700426956, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 188.31125697734257, 0.50000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 431.02590173952319, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler012 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 2.4158453015843406e-13
// max(|f - f_GSL| / |f_GSL|): 2.5938546713928606e-15
+// mean(f - f_GSL): -1.2672402809650001e-14
+// variance(f - f_GSL): 2.7510400074856614e-27
+// stddev(f - f_GSL): 5.2450357553458695e-14
const testcase_conf_hyperg<double>
data013[21] =
{
{ 0.44148780381255504, 0.50000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.46154890030153722, 0.50000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.48454520771815751, 0.50000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.51124131917976301, 0.50000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.54269682032387934, 0.50000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.58041888164962119, 0.50000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.62661371932049892, 0.50000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.68461315644636744, 0.50000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.75961975369132639, 0.50000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.86004702726553350, 0.50000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.2039946674617061, 0.50000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.5161750470251780, 0.50000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.0187596221024697, 0.50000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.8698033217756134, 0.50000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 4.3821186043144449, 0.50000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 7.1913541951514235, 0.50000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 12.620107286909638, 0.50000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 23.478926483036361, 0.50000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 45.852981860749047, 0.50000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 93.137265099245838, 0.50000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler013 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 9.2370555648813024e-14
// max(|f - f_GSL| / |f_GSL|): 3.0116140491179400e-15
+// mean(f - f_GSL): -4.2188474935755949e-15
+// variance(f - f_GSL): 4.0796299166102303e-28
+// stddev(f - f_GSL): 2.0198093763051577e-14
const testcase_conf_hyperg<double>
data014[21] =
{
{ 0.50723143075298205, 0.50000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.52815420026166782, 0.50000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.55181651516426766, 0.50000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.57884767287882366, 0.50000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.61008828324275399, 0.50000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.64668451853659259, 0.50000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.69023479867386495, 0.50000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.74302365975861406, 0.50000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.80840402753201868, 0.50000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.89143814400301236, 0.50000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1467204168940972, 0.50000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.3525055369951857, 0.50000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.6530571499633475, 0.50000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.1112387416058045, 0.50000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 2.8410480336278199, 0.50000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 4.0550562221854713, 0.50000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 6.1601039044778583, 0.50000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 9.9538034144264511, 0.50000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 17.034704868473916, 0.50000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 30.671445325428429, 0.50000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler014 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 3.5527136788005009e-14
// max(|f - f_GSL| / |f_GSL|): 2.6053493022967024e-15
+// mean(f - f_GSL): -1.8503717077085944e-15
+// variance(f - f_GSL): 5.9541536579357277e-29
+// stddev(f - f_GSL): 7.7163162570851951e-15
const testcase_conf_hyperg<double>
data015[21] =
{
{ 0.55715239162383312, 0.50000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.57823135269518977, 0.50000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.60181688556797253, 0.50000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.62842688147829928, 0.50000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.65873434489521876, 0.50000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.69362872731932568, 0.50000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.73430741618153195, 0.50000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.78241503593870543, 0.50000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.84026013345254857, 0.50000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.91115976433208690, 0.50000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1141687602185972, 0.50000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.2651443108002267, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.4712624889419719, 0.50000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.7626460645467978, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 2.1901779328181084, 0.50000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2.8421796979457090, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 3.8760354586203540, 0.50000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 5.5792940156545541, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 8.4898429002463303, 0.50000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 13.636227878037948, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler015 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 2.1316282072803006e-14
// max(|f - f_GSL| / |f_GSL|): 2.8121163355193836e-15
+// mean(f - f_GSL): -1.1736643403180226e-15
+// variance(f - f_GSL): 2.1300565078643470e-29
+// stddev(f - f_GSL): 4.6152535226836097e-15
const testcase_conf_hyperg<double>
data016[21] =
{
{ 0.59687111919499192, 0.50000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.61774982278057033, 0.50000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.64090744485124451, 0.50000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.66677322792860194, 0.50000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.69589293014100995, 0.50000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.72897040032571048, 0.50000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.76692755408207181, 0.50000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.81099244559101891, 0.50000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.86283102401276535, 0.50000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.92474809223976406, 0.50000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0932912594628821, 0.50000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.2115798426781204, 0.50000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.3654106750890422, 0.50000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.5711704305419896, 0.50000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.8549798357448213, 0.50000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2.2595503871694826, 0.50000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 2.8565038772876932, 0.50000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 3.7689325736317838, 0.50000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 5.2134738554699531, 0.50000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 7.5801565545352858, 0.50000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler016 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 1.2434497875801753e-14
// max(|f - f_GSL| / |f_GSL|): 2.5039514520700816e-15
+// mean(f - f_GSL): -8.2473710400725917e-16
+// variance(f - f_GSL): 7.0762936218606606e-30
+// stddev(f - f_GSL): 2.6601303768538602e-15
const testcase_conf_hyperg<double>
data017[21] =
{
{ 0.62946736953754079, 0.50000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.64995830964827050, 0.50000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.67251910396276349, 0.50000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.69750870596083636, 0.50000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.72537539174856436, 0.50000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.75668588434835504, 0.50000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.79216623458879654, 0.50000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.83276010491326891, 0.50000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.87971323375878940, 0.50000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.93469794840150233, 0.50000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0788040971101556, 0.50000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.1756385516794761, 0.50000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.2970810749099917, 0.50000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.4529009687665237, 0.50000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.6579437149144023, 0.50000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.9353010489337754, 0.50000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 2.3217458547039813, 0.50000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2.8772254607646022, 0.50000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 3.7017478151936585, 0.50000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 4.9659500648552237, 0.50000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler017 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.0658141036401503e-14
// max(|f - f_GSL| / |f_GSL|): 2.9130420352995081e-15
+// mean(f - f_GSL): -7.0842802523700470e-16
+// variance(f - f_GSL): 5.1973314227381455e-30
+// stddev(f - f_GSL): 2.2797656508374156e-15
const testcase_conf_hyperg<double>
data018[21] =
{
{ 0.65682574389601267, 0.50000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.67683106084440448, 0.50000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.69871884883136481, 0.50000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.72279201131268422, 0.50000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.74942315553647221, 0.50000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.77907555763819503, 0.50000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.81233192258476394, 0.50000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.84993438521252052, 0.50000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.89284095871461888, 0.50000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.94230641231038748, 0.50000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0681796709163929, 0.50000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.1499542693515108, 0.50000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.2496850956712680, 0.50000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.3736119127266571, 0.50000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.5308465522192733, 0.50000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.7349787653671505, 0.50000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 2.0067188996039378, 0.50000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2.3783255204306939, 0.50000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 2.9011558746255748, 0.50000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 3.6587666457431234, 0.50000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler018 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 7.1054273576010019e-15
// max(|f - f_GSL| / |f_GSL|): 2.4278329545502228e-15
+// mean(f - f_GSL): -3.0663302584885275e-16
+// variance(f - f_GSL): 2.4267392291869206e-30
+// stddev(f - f_GSL): 1.5577994829845465e-15
const testcase_conf_hyperg<double>
data019[21] =
{
{ 0.68018654063475448, 0.50000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.69965870094538662, 0.50000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.72084701020942776, 0.50000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.74400928635822572, 0.50000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.76945859319172982, 0.50000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.79757868270124699, 0.50000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.82884476649794248, 0.50000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.86385180214855140, 0.50000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.90335351612716308, 0.50000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.94831697594473685, 0.50000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0600626000640645, 0.50000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.1307298999505393, 0.50000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.2150341092774180, 0.50000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.3171798023006840, 0.50000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.4431045594091672, 0.50000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.6013540635087158, 0.50000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.8044714074708206, 0.50000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2.0712406108144257, 0.50000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 2.4303714711293143, 0.50000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 2.9266541358556295, 0.50000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler019 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 5.3290705182007514e-15
// max(|f - f_GSL| / |f_GSL|): 2.1499735877560022e-15
+// mean(f - f_GSL): -3.7007434154171886e-16
+// variance(f - f_GSL): 1.2910612617062425e-30
+// stddev(f - f_GSL): 1.1362487675268310e-15
const testcase_conf_hyperg<double>
data020[21] =
{
{ 0.70040954461104099, 0.50000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.71933025737654444, 0.50000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.73981995758615027, 0.50000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.76209985272755054, 0.50000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.78643553963087975, 0.50000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.81314860510626796, 0.50000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.84263196565226672, 0.50000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.87537037798496642, 0.50000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.91196818568151450, 0.50000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.95318731786229316, 0.50000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0536628587304602, 0.50000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.1158225648376323, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.1886686247111011, 0.50000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.2751576744751334, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.3793478044961116, 0.50000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1.5069047234443802, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1.6658803233122232, 0.50000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1.8679295659745196, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 2.1302432955522050, 0.50000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 2.4786679001777303, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler020 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data021[21] =
{
{ 4.5399929762484854e-05, 1.0000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.00012340980408667956, 1.0000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.00033546262790251185, 1.0000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00091188196555451624, 1.0000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0024787521766663585, 1.0000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.0067379469990854670, 1.0000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.018315638888734179, 1.0000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.049787068367863944, 1.0000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.13533528323661270, 1.0000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.36787944117144233, 1.0000000000000000, 1.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.7182818284590451, 1.0000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 7.3890560989306504, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 20.085536923187668, 1.0000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 54.598150033144236, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 148.41315910257660, 1.0000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 403.42879349273511, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1096.6331584284585, 1.0000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2980.9579870417283, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 8103.0839275753842, 1.0000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 22026.465794806718, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler021 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.5474735088646412e-13
// max(|f - f_GSL| / |f_GSL|): 2.3593310407919961e-15
+// mean(f - f_GSL): 8.1389921257639453e-15
+// variance(f - f_GSL): 1.0471598871033630e-26
+// stddev(f - f_GSL): 1.0233083050104514e-13
const testcase_conf_hyperg<double>
data022[21] =
{
{ 0.099995460007023751, 1.0000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.11109739891065704, 1.0000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.12495806717151219, 1.0000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.14272687400492079, 1.0000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.16625354130388895, 1.0000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.19865241060018290, 1.0000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.24542109027781644, 1.0000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.31673764387737868, 1.0000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.43233235838169365, 1.0000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.63212055882855767, 1.0000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.7182818284590451, 1.0000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 3.1945280494653252, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 6.3618456410625557, 1.0000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 13.399537508286059, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 29.482631820515319, 1.0000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 67.071465582122514, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 156.51902263263693, 1.0000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 372.49474838021604, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 900.23154750837602, 1.0000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 2202.5465794806719, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler022 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 5.6843418860808015e-14
// max(|f - f_GSL| / |f_GSL|): 7.7098432236368283e-16
+// mean(f - f_GSL): 2.8879015581023418e-15
+// variance(f - f_GSL): 1.5283788698863500e-28
+// stddev(f - f_GSL): 1.2362762110007415e-14
const testcase_conf_hyperg<double>
data023[21] =
{
{ 0.18000090799859525, 1.0000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.19753391135318732, 1.0000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.21876048320712196, 1.0000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.24493517885573690, 1.0000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.27791548623203705, 1.0000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.32053903575992687, 1.0000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.37728945486109178, 1.0000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.45550823741508090, 1.0000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.56766764161830641, 1.0000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.73575888234288467, 1.0000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.4365636569180902, 1.0000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 2.1945280494653252, 1.0000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 3.5745637607083705, 1.0000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 6.1997687541430295, 1.0000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 11.393052728206127, 1.0000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 22.023821860707507, 1.0000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 44.434006466467693, 1.0000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 92.873687095054009, 1.0000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 199.82923277963911, 1.0000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 440.30931589613436, 1.0000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler023 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 8.5265128291212022e-14
// max(|f - f_GSL| / |f_GSL|): 8.2495029364968388e-16
+// mean(f - f_GSL): 4.6338594337330941e-15
+// variance(f - f_GSL): 3.4132357967227019e-28
+// stddev(f - f_GSL): 1.8474944645986633e-14
const testcase_conf_hyperg<double>
data024[21] =
{
{ 0.24599972760042138, 1.0000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.26748869621560417, 1.0000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.29296481879732927, 1.0000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.32359920906182715, 1.0000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.36104225688398156, 1.0000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.40767657854404388, 1.0000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.46703290885418114, 1.0000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.54449176258491916, 1.0000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.64849853757254050, 1.0000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.79272335297134611, 1.0000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.3096909707542714, 1.0000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.7917920741979876, 1.0000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.5745637607083705, 1.0000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 3.8998265656072717, 1.0000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 6.2358316369236775, 1.0000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 10.511910930353745, 1.0000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 18.614574199914728, 1.0000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 34.452632660645271, 1.0000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 66.276410926546333, 1.0000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 131.79279476884014, 1.0000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler024 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 6.3948846218409017e-14
// max(|f - f_GSL| / |f_GSL|): 1.3470358174143053e-15
+// mean(f - f_GSL): 4.2056305528062476e-15
+// variance(f - f_GSL): 1.8738572044850301e-28
+// stddev(f - f_GSL): 1.3688890402384812e-14
const testcase_conf_hyperg<double>
data025[21] =
{
{ 0.30160010895983153, 1.0000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.32556057945973133, 1.0000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.35351759060133559, 1.0000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.38651473767895589, 1.0000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.42597182874401246, 1.0000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.47385873716476473, 1.0000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.53296709114581886, 1.0000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.60734431655344123, 1.0000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.70300292485491900, 1.0000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.82910658811461568, 1.0000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.2387638830170857, 1.0000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.5835841483959754, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.0994183476111612, 1.0000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.8998265656072730, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 4.1886653095389432, 1.0000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 6.3412739535691678, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 10.065470971379844, 1.0000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 16.726316330322632, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 29.011738189576135, 1.0000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 52.317117907536058, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler025 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 8.1712414612411521e-14
// max(|f - f_GSL| / |f_GSL|): 3.1846065384904241e-15
+// mean(f - f_GSL): 6.0797927538996665e-15
+// variance(f - f_GSL): 3.0031540818261389e-28
+// stddev(f - f_GSL): 1.7329610733730109e-14
const testcase_conf_hyperg<double>
data026[21] =
{
{ 0.34919994552008421, 1.0000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.37468856696681579, 1.0000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.40405150587416555, 1.0000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.43820375880074558, 1.0000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.47835680937998981, 1.0000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.52614126283523510, 1.0000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.58379113606772659, 1.0000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.65442613907759817, 1.0000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.74249268786270239, 1.0000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.85446705942692136, 1.0000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1938194150854282, 1.0000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.4589603709899384, 1.0000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.8323639126852680, 1.0000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.3747832070090902, 1.0000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 3.1886653095389423, 1.0000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 4.4510616279743056, 1.0000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 6.4753364081284595, 1.0000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 9.8289477064516344, 1.0000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 15.562076771986721, 1.0000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 25.658558953767979, 1.0000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler026 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 4.6185277824406512e-14
// max(|f - f_GSL| / |f_GSL|): 3.1216529394518888e-15
+// mean(f - f_GSL): 1.1287267417022424e-15
+// variance(f - f_GSL): 1.0657987176208782e-28
+// stddev(f - f_GSL): 1.0323752794506841e-14
const testcase_conf_hyperg<double>
data027[21] =
{
{ 0.39048003268794934, 1.0000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.41687428868878917, 1.0000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.44696137059437591, 1.0000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.48153963531364674, 1.0000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.52164319062001030, 1.0000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.56863048459771781, 1.0000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.62431329589841034, 1.0000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.69114772184480389, 1.0000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.77252193641189282, 1.0000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.87319764343847150, 1.0000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1629164905125695, 1.0000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.3768811129698151, 1.0000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.6647278253705360, 1.0000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.0621748105136359, 1.0000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 2.6263983714467289, 1.0000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 3.4510616279743087, 1.0000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 4.6931454926815466, 1.0000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 6.6217107798387467, 1.0000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 9.7080511813245050, 1.0000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 14.795135372260791, 1.0000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler027 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.5099033134902129e-14
// max(|f - f_GSL| / |f_GSL|): 3.0695349768517519e-15
+// mean(f - f_GSL): -2.5112187461759493e-16
+// variance(f - f_GSL): 4.3790235989331514e-30
+// stddev(f - f_GSL): 2.0926116694057574e-15
const testcase_conf_hyperg<double>
data028[21] =
{
{ 0.42666397711843551, 1.0000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.45354221990871935, 1.0000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.48390880072992098, 1.0000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.51846036468635348, 1.0000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.55808294427665472, 1.0000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.60391732156319500, 1.0000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.65745173217778197, 1.0000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.72065531569545760, 1.0000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.79617322255837530, 1.0000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.88761649593069913, 1.0000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1404154335879861, 1.0000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.3190838953943527, 1.0000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.5510315925312508, 1.0000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.8588059183988626, 1.0000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 2.2769577200254218, 1.0000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2.8595718993033583, 1.0000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 3.6931454926815390, 1.0000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 4.9189969323589047, 1.0000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 6.7729286965857236, 1.0000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 9.6565947605825802, 1.0000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler028 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 2.1316282072803006e-14
// max(|f - f_GSL| / |f_GSL|): 3.0780408841975893e-15
+// mean(f - f_GSL): 1.6309704909374323e-15
+// variance(f - f_GSL): 2.0344353333944372e-29
+// stddev(f - f_GSL): 4.5104715201344935e-15
const testcase_conf_hyperg<double>
data029[21] =
{
{ 0.45866881830525147, 1.0000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.48574024897002727, 1.0000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.51609119927007907, 1.0000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.55033101178702448, 1.0000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.58922274096446048, 1.0000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.63373228549888794, 1.0000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.68509653564443607, 1.0000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.74491915814544640, 1.0000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.81530710976649901, 1.0000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.89906803255440670, 1.0000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1233234687038898, 1.0000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.2763355815774109, 1.0000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.4694175800833351, 1.0000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.7176118367977251, 1.0000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 2.0431323520406743, 1.0000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2.4794291990711450, 1.0000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 3.0778805630646149, 1.0000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 3.9189969323588909, 1.0000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 5.1314921747428537, 1.0000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 6.9252758084660471, 1.0000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler029 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 1.5987211554602254e-14
// max(|f - f_GSL| / |f_GSL|): 2.9979310614742812e-15
+// mean(f - f_GSL): 6.7935075554444098e-16
+// variance(f - f_GSL): 1.2302356617774873e-29
+// stddev(f - f_GSL): 3.5074715419764810e-15
const testcase_conf_hyperg<double>
data030[21] =
{
{ 0.48719806352527351, 1.0000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.51425975102997290, 1.0000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.54439740082116106, 1.0000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.57814584198811136, 1.0000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.61616588855330934, 1.0000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.65928188610200156, 1.0000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.70853279480001885, 1.0000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.76524252556366068, 1.0000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.83111800605075459, 1.0000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.90838770701033944, 1.0000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.1099112183350075, 1.0000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.2435101170983485, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.4082527402500060, 1.0000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1.6146266327948817, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1.8776382336732149, 1.0000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2.2191437986067180, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 2.6715607239402184, 1.0000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 3.2838715489037495, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 4.1314921747428688, 1.0000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 5.3327482276194447, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler030 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 1.8189894035458565e-12
// max(|f - f_GSL| / |f_GSL|): 1.2338590067901998e-14
+// mean(f - f_GSL): -1.4299262999801361e-13
+// variance(f - f_GSL): 1.1327918135040896e-27
+// stddev(f - f_GSL): 3.3656972732319370e-14
const testcase_conf_hyperg<double>
data031[20] =
{
{ -0.00040859936786236367, 2.0000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -0.00098727843269343649, 2.0000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -0.0023482383953175828, 2.0000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -0.0054712917933270972, 2.0000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -0.012393760883331793, 2.0000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.026951787996341868, 2.0000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.054946916666202536, 2.0000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.099574136735727889, 2.0000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.13533528323661270, 2.0000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 5.4365636569180902, 2.0000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 22.167168296791949, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 80.342147692750672, 2.0000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 272.99075016572118, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 890.47895461545954, 2.0000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2824.0015544491457, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 8773.0652674276680, 2.0000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 26828.621883375556, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 81030.839275753839, 2.0000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 242291.12374287390, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler031 = 1.0000000000000008e-12;
// Test data for a=2.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data032[21] =
{
{ 4.5399929762484854e-05, 2.0000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.00012340980408667956, 2.0000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.00033546262790251185, 2.0000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00091188196555451624, 2.0000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0024787521766663585, 2.0000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.0067379469990854670, 2.0000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.018315638888734179, 2.0000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.049787068367863944, 2.0000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.13533528323661270, 2.0000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.36787944117144233, 2.0000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.7182818284590451, 2.0000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 7.3890560989306504, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 20.085536923187668, 2.0000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 54.598150033144236, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 148.41315910257660, 2.0000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 403.42879349273511, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1096.6331584284585, 2.0000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2980.9579870417283, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 8103.0839275753842, 2.0000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 22026.465794806718, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler032 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 9.0949470177292824e-13
// max(|f - f_GSL| / |f_GSL|): 3.7963989072999328e-15
+// mean(f - f_GSL): -6.7962996341819348e-14
+// variance(f - f_GSL): 3.7179219590404008e-26
+// stddev(f - f_GSL): 1.9281913699216685e-13
const testcase_conf_hyperg<double>
data033[21] =
{
{ 0.019990012015452256, 2.0000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.024660886468126749, 2.0000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.031155651135902421, 2.0000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.040518569154104643, 2.0000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.054591596375740861, 2.0000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.076765785440438966, 2.0000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.11355272569454113, 2.0000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.17796705033967650, 2.0000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.29699707514508100, 2.0000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.52848223531423066, 2.0000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.0000000000000000, 2.0000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 4.1945280494653261, 2.0000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 9.1491275214167409, 2.0000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 20.599306262429089, 2.0000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 47.572210912824517, 2.0000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 112.11910930353754, 2.0000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 268.60403879880613, 2.0000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 652.11580966537815, 2.0000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1600.6338622371129, 2.0000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 3964.7838430652091, 2.0000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler033 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.2737367544323206e-12
// max(|f - f_GSL| / |f_GSL|): 2.1504262426495913e-15
+// mean(f - f_GSL): -1.3699392149780195e-13
+// variance(f - f_GSL): 2.3969767154009420e-25
+// stddev(f - f_GSL): 4.8958928862884065e-13
const testcase_conf_hyperg<double>
data034[21] =
{
{ 0.048003268794942940, 2.0000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.057624341628353531, 2.0000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.070351812026707330, 2.0000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.087607118443556703, 2.0000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.11166194492814813, 2.0000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.14626395019169278, 2.0000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.19780254687491294, 2.0000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.27754118707540443, 2.0000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.40600584970983811, 2.0000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.62182994108596168, 2.0000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.6903090292457283, 2.0000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 3.0000000000000000, 2.0000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 5.5745637607083705, 2.0000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 10.799653131214550, 2.0000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 21.707494910771043, 2.0000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 45.047643721415056, 2.0000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 96.072870999573695, 2.0000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 209.71579596387159, 2.0000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 466.93487648582493, 2.0000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1057.3423581507243, 2.0000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler034 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 2.8421709430404007e-13
// max(|f - f_GSL| / |f_GSL|): 2.6284159117427726e-15
+// mean(f - f_GSL): 1.8146859676313572e-14
+// variance(f - f_GSL): 3.7166519121298053e-27
+// stddev(f - f_GSL): 6.0964349517810853e-14
const testcase_conf_hyperg<double>
data035[21] =
{
{ 0.079198583522191404, 2.0000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.093273046483222530, 2.0000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.11130650338531098, 2.0000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.13485262321044020, 2.0000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.16625354130388895, 2.0000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.20913010268188095, 2.0000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.26923036197926808, 2.0000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.35593410067935288, 2.0000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.48498537572540468, 2.0000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.68357364754153715, 2.0000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.5224722339658285, 2.0000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 2.4164158516040235, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 4.0000000000000009, 2.0000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 6.8998265656072721, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 12.377330619077886, 2.0000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 23.023821860707503, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 44.261883885519374, 2.0000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 87.631581651613160, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 178.07042913745681, 2.0000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 370.21982535275242, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler035 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 5.1159076974727213e-13
// max(|f - f_GSL| / |f_GSL|): 3.2185367269036845e-15
+// mean(f - f_GSL): 3.2310133404745924e-14
+// variance(f - f_GSL): 1.2059771239577085e-26
+// stddev(f - f_GSL): 1.0981698975831146e-13
const testcase_conf_hyperg<double>
data036[21] =
{
{ 0.11120076271882003, 2.0000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.12904862943139384, 2.0000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.15138192951001525, 2.0000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.17975865319179699, 2.0000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.21643190620010283, 2.0000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.26472863448288397, 2.0000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.32967091145818839, 2.0000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.41901702645681349, 2.0000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.54504387282378575, 2.0000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.72766470286539298, 2.0000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.4185417547437151, 2.0000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 2.0820792580201224, 2.0000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 3.1676360873147318, 2.0000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 4.9999999999999982, 2.0000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 8.1886653095389406, 2.0000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 13.902123255948611, 2.0000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 24.426009224385378, 2.0000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 44.315790825806538, 2.0000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 82.810383859933609, 2.0000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 158.95135372260788, 2.0000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler036 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 2.1316282072803006e-13
// max(|f - f_GSL| / |f_GSL|): 2.6653456287428861e-15
+// mean(f - f_GSL): 7.3314370447568380e-15
+// variance(f - f_GSL): 2.2242443217209687e-27
+// stddev(f - f_GSL): 4.7161894806304896e-14
const testcase_conf_hyperg<double>
data037[21] =
{
{ 0.14279950968075855, 2.0000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.16375995835694801, 2.0000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.18950218227311263, 2.0000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.22152437623624174, 2.0000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.26192490317988687, 2.0000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.31369515402282139, 2.0000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.38118033691430731, 2.0000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.47081822524156886, 2.0000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.59234644511675072, 2.0000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.76081413936917086, 2.0000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.3483340379497220, 2.0000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.8693566610905543, 2.0000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.6705443492589280, 2.0000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 3.9378251894863650, 2.0000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 6.0000000000000018, 2.0000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 9.4510616279743118, 2.0000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 15.386290985363093, 2.0000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 25.865132339516240, 2.0000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 44.832204725298020, 2.0000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 79.975676861303953, 2.0000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler037 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 3.9079850466805510e-14
// max(|f - f_GSL| / |f_GSL|): 2.3209326942856951e-15
+// mean(f - f_GSL): -1.4221428267817482e-15
+// variance(f - f_GSL): 1.0618073653775602e-31
+// stddev(f - f_GSL): 3.2585385763829161e-16
const testcase_conf_hyperg<double>
data038[21] =
{
{ 0.17337636610503362, 2.0000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.19686670136921000, 2.0000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.22527678978110538, 2.0000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.26001525907740475, 2.0000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.30300466868014397, 2.0000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.35690946280485503, 2.0000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.42548267822218039, 2.0000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.51410215874088183, 2.0000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.63061421953299790, 2.0000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.78668452848510595, 2.0000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.2979228320600693, 2.0000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.7236644184225898, 2.0000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.3469052224062485, 2.0000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 3.2823881632022749, 2.0000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 4.7230422799745782, 2.0000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 7.0000000000000009, 2.0000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 10.693145492681536, 2.0000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 16.837993864717809, 2.0000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 27.318786089757172, 2.0000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 45.626379042330321, 2.0000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler038 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 6.3948846218409017e-14
// max(|f - f_GSL| / |f_GSL|): 2.2223112918020366e-15
+// mean(f - f_GSL): 5.1453550415068266e-15
+// variance(f - f_GSL): 1.8153715516608073e-28
+// stddev(f - f_GSL): 1.3473572472291108e-14
const testcase_conf_hyperg<double>
data039[21] =
{
{ 0.20263008881072142, 2.0000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.22815601647956382, 2.0000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.25863201094881560, 2.0000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.29536583498165569, 2.0000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.34010436746201422, 2.0000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.39521257401334392, 2.0000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.46393810791120338, 2.0000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.55080841854553553, 2.0000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.66223601210150940, 2.0000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.80745573956474603, 2.0000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.2600591877766618, 2.0000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.6183220921129462, 2.0000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2.1223296796666578, 2.0000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.8471644896068233, 2.0000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 3.9137352959186495, 2.0000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 5.5205708009288541, 2.0000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 7.9999999999999982, 2.0000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 11.918996932358892, 2.0000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 18.262984349485706, 2.0000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 28.775827425398141, 2.0000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler039 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 3.5527136788005009e-14
// max(|f - f_GSL| / |f_GSL|): 1.8065720775912871e-15
+// mean(f - f_GSL): 1.6653345369377348e-15
+// variance(f - f_GSL): 6.0197636713745199e-29
+// stddev(f - f_GSL): 7.7587135991570922e-15
const testcase_conf_hyperg<double>
data040[21] =
{
{ 0.23043485654507717, 2.0000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.25758423249046342, 2.0000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.28964158686142122, 2.0000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.32781237017833142, 2.0000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.37367756025366927, 2.0000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.42933548067397925, 2.0000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.49760646239977369, 2.0000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.58233221879973318, 2.0000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.68881993949245379, 2.0000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.82451063690694526, 2.0000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.2306214716549471, 2.0000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1.5389392974099088, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1.9587362987499699, 2.0000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2.5414934688204727, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 3.3670852989803555, 2.0000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 4.5617124027865650, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 6.3284392760597825, 2.0000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 9.0000000000000036, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 13.131492174742865, 2.0000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 19.665496455238888, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler040 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 1.1175870895385742e-08
// max(|f - f_GSL| / |f_GSL|): 5.3427429899548483e-12
+// mean(f - f_GSL): 7.1806275565748117e-10
+// variance(f - f_GSL): 5.7417019320867503e-18
+// stddev(f - f_GSL): 2.3961848701815040e-09
const testcase_conf_hyperg<double>
data041[21] =
{
{ 0.00049939922738733290, 5.0000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -0.00057077034390089253, 5.0000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -0.0032428054030576147, 5.0000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -0.0078649819529077025, 5.0000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -0.012393760883331793, 5.0000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.0087031815404853934, 5.0000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.018315638888832021, 5.0000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.068457219005814696, 5.0000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.045111761078875295, 5.0000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.22992465073215118, 5.0000000000000000, 1.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 23.671704256164183, 5.0000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 199.50451467112745, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1232.7498286606428, 5.0000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 6460.7810872554019, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 30480.352550691663, 5.0000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 133534.93064609537, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 553479.89366849652, 5.0000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2196966.0364497532, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 8422142.8572236635, 5.0000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 31373029.447069697, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler041 = 5.0000000000000034e-10;
// Test data for a=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.8626451492309570e-09
// max(|f - f_GSL| / |f_GSL|): 1.4711248979266200e-12
+// mean(f - f_GSL): -8.7549301033655602e-11
+// variance(f - f_GSL): 1.6542567669008309e-19
+// stddev(f - f_GSL): 4.0672555450829872e-10
const testcase_conf_hyperg<double>
data042[21] =
{
{ -0.00025726626865408078, 5.0000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -0.00029309828470586396, 5.0000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -0.00011182087596750400, 5.0000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00064591639226778245, 5.0000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0024787521766663585, 5.0000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.0053342080409426616, 5.0000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.0061052129629022966, 5.0000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.0062233835459823200, 5.0000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.045111761078871798, 5.0000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.015328310048810216, 5.0000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 8.2681072282295975, 5.0000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 46.797355293227440, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 223.45159827046285, 5.0000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 964.56731725221459, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 3889.6615448133625, 5.0000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 14926.865359231202, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 55151.509259297891, 5.0000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 197736.87980710136, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 691800.79031674843, 5.0000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 2371516.1505741901, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler042 = 1.0000000000000006e-10;
// Test data for a=5.0000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 7.8471940260477516e-13
+// mean(f - f_GSL): 4.8403879337339833e-12
+// variance(f - f_GSL): 1.4952345582790272e-22
+// stddev(f - f_GSL): 1.2227978403149996e-11
const testcase_conf_hyperg<double>
data043[21] =
{
{ 0.00012106647936662629, 5.0000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.00021596715715168925, 5.0000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.00033546262790251185, 5.0000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00037995081898104839, 5.0000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0000000000000000, 5.0000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.0016844867497713668, 5.0000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.0061052129629113917, 5.0000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.012446767091965986, 5.0000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.0000000000000000, 5.0000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.15328310048810101, 5.0000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.7569931998033290, 5.0000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 19.704149597148401, 5.0000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 75.320763461953760, 5.0000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 272.99075016572118, 5.0000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 952.31777090819992, 5.0000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 3227.4303479418809, 5.0000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 10692.173294677470, 5.0000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 34777.843182153498, 5.0000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 111417.40400416154, 5.0000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 352423.45271690749, 5.0000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler043 = 5.0000000000000028e-11;
// Test data for a=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 1.4551915228366852e-11
// max(|f - f_GSL| / |f_GSL|): 4.8846719461489400e-13
+// mean(f - f_GSL): -4.3554712641007491e-13
+// variance(f - f_GSL): 1.0461772040471995e-23
+// stddev(f - f_GSL): 3.2344662682538513e-12
const testcase_conf_hyperg<double>
data044[21] =
{
{ -6.8099894643727278e-05, 5.0000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -0.00015426225510834944, 5.0000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -0.00033546262790251185, 5.0000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -0.00068391147416588716, 5.0000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -0.0012393760883331792, 5.0000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.0016844867497713668, 5.0000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.0000000000000000, 5.0000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.012446767091965986, 5.0000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.067667641618306351, 5.0000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.27590958087858175, 5.0000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.3978522855738063, 5.0000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 11.083584148395975, 5.0000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 35.149689615578417, 5.0000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 109.19630006628847, 5.0000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 333.92960798079736, 5.0000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1008.5719837318378, 5.0000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 3015.7411856782610, 5.0000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 8942.8739611251840, 5.0000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 26335.022764620000, 5.0000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 77092.630281823513, 5.0000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler044 = 2.5000000000000014e-11;
// Test data for a=5.0000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data045[21] =
{
{ 4.5399929762484854e-05, 5.0000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.00012340980408667956, 5.0000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.00033546262790251185, 5.0000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00091188196555451624, 5.0000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0024787521766663585, 5.0000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.0067379469990854670, 5.0000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.018315638888734179, 5.0000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.049787068367863944, 5.0000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.13533528323661270, 5.0000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.36787944117144233, 5.0000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.7182818284590451, 5.0000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 7.3890560989306504, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 20.085536923187668, 5.0000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 54.598150033144236, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 148.41315910257660, 5.0000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 403.42879349273511, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1096.6331584284585, 5.0000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2980.9579870417283, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 8103.0839275753842, 5.0000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 22026.465794806718, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler045 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 9.0949470177292824e-13
// max(|f - f_GSL| / |f_GSL|): 1.4537973070007893e-13
+// mean(f - f_GSL): 4.0007514497054060e-14
+// variance(f - f_GSL): 4.7331609081834431e-26
+// stddev(f - f_GSL): 2.1755828892927622e-13
const testcase_conf_hyperg<double>
data046[21] =
{
{ 0.0011648967743076431, 5.0000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.0019205128456127479, 5.0000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.0032972446271226320, 5.0000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.0059047424914709006, 5.0000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.011033078698817415, 5.0000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.021485057853495849, 5.0000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.043495671658608563, 5.0000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.091228027395668113, 5.0000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.19744881503891684, 5.0000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.43918161928124549, 5.0000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.3226822806570353, 5.0000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 5.4863201236633126, 5.0000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 13.144500379942246, 5.0000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 31.873916035045458, 5.0000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 78.086286951596321, 5.0000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 192.98291046720357, 5.0000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 480.54877204888402, 5.0000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1204.4605636118315, 5.0000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 3036.1329048350581, 5.0000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 7691.6406555465046, 5.0000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler046 = 1.0000000000000006e-11;
// Test data for a=5.0000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 1.0004441719502211e-11
// max(|f - f_GSL| / |f_GSL|): 5.0762860793473551e-14
+// mean(f - f_GSL): 3.9375226376383469e-13
+// variance(f - f_GSL): 4.8491809702686422e-24
+// stddev(f - f_GSL): 2.2020855955817527e-12
const testcase_conf_hyperg<double>
data047[21] =
{
{ 0.0036308901122103932, 5.0000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.0055327336019229401, 5.0000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.0086767852656603455, 5.0000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.014030481266326614, 5.0000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.023426839582149212, 5.0000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.040427681994512799, 5.0000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.072123784177593755, 5.0000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.13295857409596740, 5.0000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.25298991319893882, 5.0000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.49602437239337821, 5.0000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.0681072498819240, 5.0000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 4.3768811129698140, 5.0000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 9.4566368471992224, 5.0000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 20.811741224531826, 5.0000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 46.556488803696276, 5.0000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 105.66804767556316, 5.0000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 242.93097638084433, 5.0000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 564.89804380887358, 5.0000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1326.9606865425994, 5.0000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 3145.3685154983905, 5.0000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler047 = 5.0000000000000029e-12;
// Test data for a=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 6.2527760746888816e-13
// max(|f - f_GSL| / |f_GSL|): 3.7668660800670828e-14
+// mean(f - f_GSL): -1.0866266550578816e-14
+// variance(f - f_GSL): 1.1381792138997471e-26
+// stddev(f - f_GSL): 1.0668548232537298e-13
const testcase_conf_hyperg<double>
data048[21] =
{
{ 0.0075295293831406113, 5.0000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.010936052508673187, 5.0000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.016247454253649721, 5.0000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.024729468107576008, 5.0000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.038615775445860964, 5.0000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.061937865588523586, 5.0000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.10213565389690644, 5.0000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.17324118243379236, 5.0000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.30228316551605494, 5.0000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.54238748802203829, 5.0000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.8922997283093959, 5.0000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 3.6699742831126270, 5.0000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 7.2831842359960941, 5.0000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 14.764676530664770, 5.0000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 30.522558591756702, 5.0000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 64.236147093730224, 5.0000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 137.40503032883331, 5.0000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 298.29153884828770, 5.0000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 656.29389355002752, 5.0000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1461.6183101433730, 5.0000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler048 = 2.5000000000000015e-12;
// Test data for a=5.0000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 1.4779288903810084e-12
// max(|f - f_GSL| / |f_GSL|): 1.3332193464342236e-14
+// mean(f - f_GSL): 1.0197547171765718e-13
+// variance(f - f_GSL): 9.9395510042396581e-26
+// stddev(f - f_GSL): 3.1527053468790352e-13
const testcase_conf_hyperg<double>
data049[21] =
{
{ 0.012801285049305222, 5.0000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.017955923031350202, 5.0000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.025661650371090718, 5.0000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.037414616710204310, 5.0000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.055720934057414885, 5.0000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.084862956151756000, 5.0000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.13230635170162319, 5.0000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.21132914572142125, 5.0000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.34601808641639625, 5.0000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.58092180965710882, 5.0000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.7643922061378634, 5.0000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 3.1888010096332451, 5.0000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 5.8981194929479273, 5.0000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 11.152835510393174, 5.0000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 21.533483453443495, 5.0000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 42.397145995355721, 5.0000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 85.010891404859976, 5.0000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 173.36225868739959, 5.0000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 359.10444177844266, 5.0000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 754.64844371961408, 5.0000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler049 = 1.0000000000000008e-12;
// Test data for a=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 5.1159076974727213e-13
// max(|f - f_GSL| / |f_GSL|): 7.5019093654907020e-15
+// mean(f - f_GSL): -5.0172663642758914e-14
+// variance(f - f_GSL): 1.1177600103656480e-26
+// stddev(f - f_GSL): 1.0572416991235486e-13
const testcase_conf_hyperg<double>
data050[21] =
{
{ 0.019313731161840469, 5.0000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.026361085775183927, 5.0000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.036556772070711910, 5.0000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.051563934048344140, 5.0000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.074056625794521824, 5.0000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.10841132531381445, 5.0000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.16192115120742598, 5.0000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.24696279814742436, 5.0000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.38492640633381947, 5.0000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.61345628229723270, 5.0000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.6675470647226096, 5.0000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 2.8442428103603667, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 4.9603804008438397, 5.0000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 8.8405953071624790, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 16.089667272320334, 5.0000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 29.876575194426895, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 56.546719856432318, 5.0000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 108.97420168465270, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 213.60609045832913, 5.0000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 425.41323880637168, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler050 = 5.0000000000000039e-13;
// Test data for a=10.000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 4.7683715820312500e-06
// max(|f - f_GSL| / |f_GSL|): 3.9070311524604618e-14
+// mean(f - f_GSL): 2.1263163114415406e-07
+// variance(f - f_GSL): 1.0896252412557099e-12
+// stddev(f - f_GSL): 1.0438511585737258e-06
const testcase_conf_hyperg<double>
data051[21] =
{
{ 0.00067155063653961294, 10.000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -0.00071555648905258684, 10.000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -0.0035372078786207375, 10.000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -0.0047884005574714370, 10.000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0024787521766663585, 10.000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.018136827242522881, 10.000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.0099686175680129968, 10.000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.052832081031434205, 10.000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.0010979582061523968, 10.000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.11394854824644544, 10.000000000000000, 1.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 131.63017574352619, 10.000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 2431.2913698755478, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 27127.328899791049, 10.000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 232066.49977835570, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1674401.3794931530, 10.000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 10707495.820386341, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 62515499.242815509, 10.000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 339773485.00937450, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 1742442474.2135217, 10.000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 8514625476.5462780, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler051 = 2.5000000000000015e-12;
// Test data for a=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.7881393432617188e-07
// max(|f - f_GSL| / |f_GSL|): 3.0525079910466156e-12
+// mean(f - f_GSL): 8.5256746544690346e-09
+// variance(f - f_GSL): 1.5223997975559080e-15
+// stddev(f - f_GSL): 3.9017941995393710e-08
const testcase_conf_hyperg<double>
data052[21] =
{
{ -0.00014116415550486912, 10.000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -0.00016988130843806985, 10.000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 6.6619209703391378e-05, 10.000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00072582919646365740, 10.000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0012039653429522313, 10.000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.00061450715370021329, 10.000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.0053557899960354968, 10.000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.00078903612815141473, 10.000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.023725444715554326, 10.000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.057297669024384767, 10.000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 34.432116659636534, 10.000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 432.53475371634494, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 3789.1768909683506, 10.000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 27089.676185774806, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 169243.72183073507, 10.000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 959019.40135397331, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 5043073.3458297960, 10.000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 24989309.819281481, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 117948708.50540228, 10.000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 534524325.69810420, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler052 = 2.5000000000000017e-10;
// Test data for a=10.000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 4.4703483581542969e-08
// max(|f - f_GSL| / |f_GSL|): 3.1351462019253111e-11
+// mean(f - f_GSL): -2.1241868994044322e-09
+// variance(f - f_GSL): 9.5182316562142624e-17
+// stddev(f - f_GSL): 9.7561425041940941e-09
const testcase_conf_hyperg<double>
data053[21] =
{
{ 1.4973169075105227e-05, 10.000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 5.7627971015476266e-05, 10.000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 9.5964794084281178e-05, 10.000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.5479477810339013e-05, 10.000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -0.00035410745380947978, 10.000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.00078393993138610137, 10.000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.00038117202625584330, 10.000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.0045341794406447526, 10.000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.0031029253652133403, 10.000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.028487137061611361, 10.000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 15.691485606063274, 10.000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 141.71088859081416, 10.000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 997.55177799313731, 10.000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 6038.6324280926056, 10.000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 32946.952425437150, 10.000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 166431.66712118863, 10.000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 791818.30272061308, 10.000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 3589678.0198700386, 10.000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 15637649.698874988, 10.000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 65871447.346678361, 10.000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler053 = 2.5000000000000013e-09;
// Test data for a=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 3.7252902984619141e-09
// max(|f - f_GSL| / |f_GSL|): 7.5580354912480585e-11
+// mean(f - f_GSL): -3.0836141820275865e-10
+// variance(f - f_GSL): 6.1295865606932701e-19
+// stddev(f - f_GSL): 7.8291676190341400e-10
const testcase_conf_hyperg<double>
data054[21] =
{
{ 6.9661267889527048e-06, 10.000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -3.0301514396282942e-06, 10.000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -3.7983599138168025e-05, 10.000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -9.3615660121163871e-05, 10.000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -7.0821490761895943e-05, 10.000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.00030692863727646260, 10.000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.0010659895649527829, 10.000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.00042230102633456049, 10.000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.010168047735237568, 10.000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.036903514708782073, 10.000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 9.3384756433214022, 10.000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 63.905561372021388, 10.000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 370.08498456728779, 10.000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1922.9526217493540, 10.000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 9245.0380014351485, 10.000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 41898.961838459785, 10.000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 181211.14084739226, 10.000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 754384.25570692308, 10.000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 3042060.4915799876, 10.000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 11939626.424402930, 10.000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler054 = 5.0000000000000026e-09;
// Test data for a=10.000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 1.1641532182693481e-10
// max(|f - f_GSL| / |f_GSL|): 4.6734083284321249e-11
+// mean(f - f_GSL): -5.7681446072290609e-12
+// variance(f - f_GSL): 1.7467533410200487e-24
+// stddev(f - f_GSL): 1.3216479641039246e-12
const testcase_conf_hyperg<double>
data055[21] =
{
{ -6.2454929831989742e-06, 10.000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -1.1459481808048817e-05, 10.000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -8.1646988801669512e-06, 10.000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 3.1240400671775088e-05, 10.000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.00014164298152379191, 10.000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.00023172833594738382, 10.000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.00036825094062005215, 10.000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.0030227862937631683, 10.000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.00028642387986584918, 10.000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.10617896040159881, 10.000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 6.4803694966028260, 10.000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 35.201619637445276, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 171.58787257237464, 10.000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 775.87148867205678, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 3317.4071019773678, 10.000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 13578.260535269774, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 53651.761875039716, 10.000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 205900.60390283042, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 770979.49612334219, 10.000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 2826613.2348531331, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler055 = 2.5000000000000013e-09;
// Test data for a=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 2.3283064365386963e-10
// max(|f - f_GSL| / |f_GSL|): 2.5542822249778647e-10
+// mean(f - f_GSL): -1.6360135292270048e-11
+// variance(f - f_GSL): 2.4601227519922909e-21
+// stddev(f - f_GSL): 4.9599624514630061e-11
const testcase_conf_hyperg<double>
data056[21] =
{
{ 9.6084507433830306e-07, 10.000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 7.7131127554174726e-06, 10.000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 2.3074149009167486e-05, 10.000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 4.0105919781332888e-05, 10.000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -1.0325734976052423e-20, 10.000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.00029188857701064686, 10.000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.0010659895649527829, 10.000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.00044452739614164207, 10.000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.020049671590609285, 10.000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.17092282236966813, 10.000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.9520550902714549, 10.000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 22.206263831706924, 10.000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 93.074943420842843, 10.000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 371.20964440523989, 10.000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1424.6976175888547, 10.000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 5302.2070001902330, 10.000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 19239.311823447424, 10.000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 68341.221999215923, 10.000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 238389.83519072225, 10.000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 818592.04096678528, 10.000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler056 = 2.5000000000000012e-08;
// Test data for a=10.000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 2.3283064365386963e-10
// max(|f - f_GSL| / |f_GSL|): 1.7003920117988582e-08
+// mean(f - f_GSL): -1.3064362941513496e-11
+// variance(f - f_GSL): 2.5356039522524612e-21
+// stddev(f - f_GSL): 5.0354780828164278e-11
const testcase_conf_hyperg<double>
data057[21] =
{
{ 3.9634859316455036e-06, 10.000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 4.4074930030956985e-06, 10.000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -5.3248036175001926e-06, 10.000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -5.0660109197473119e-05, 10.000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -0.00017705372690473989, 10.000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.00034759250392107574, 10.000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.00029072442680530428, 10.000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.0071124383382662791, 10.000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.046185850628367824, 10.000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.22919473120601763, 10.000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.0342754120781059, 10.000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 15.423188523958418, 10.000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 56.669907747565212, 10.000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 201.92649139242229, 10.000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 702.01780019948944, 10.000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2391.7564185640726, 10.000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 8011.5144629634615, 10.000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 26450.087535814702, 10.000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 86239.964657766584, 10.000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 278127.83396458329, 10.000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler057 = 1.0000000000000004e-06;
// Test data for a=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 2.9103830456733704e-11
// max(|f - f_GSL| / |f_GSL|): 3.9656315544900790e-11
+// mean(f - f_GSL): -2.2995230726669056e-12
+// variance(f - f_GSL): 3.7719721952825740e-23
+// stddev(f - f_GSL): 6.1416383769174927e-12
const testcase_conf_hyperg<double>
data058[21] =
{
{ -5.0444366402760974e-06, 10.000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -1.5426225510834945e-05, 10.000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -3.7273625322501334e-05, 10.000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -6.3325136496841588e-05, 10.000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0000000000000000, 10.000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.00065507818046664252, 10.000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.0040701419752742617, 10.000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.018670150637948978, 10.000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.075186268464784836, 10.000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.28101901756151842, 10.000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.4356061998579595, 10.000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 11.494087265003234, 10.000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 37.660381730976880, 10.000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 121.32922229587608, 10.000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 385.46195489141422, 10.000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 1210.2863804782053, 10.000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 3762.0609740531836, 10.000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 11592.614394051165, 10.000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 35450.992183142305, 10.000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 107684.94388572175, 10.000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler058 = 2.5000000000000013e-09;
// Test data for a=10.000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 9.0949470177292824e-12
// max(|f - f_GSL| / |f_GSL|): 3.7408279162146281e-11
+// mean(f - f_GSL): 4.8557420878620374e-13
+// variance(f - f_GSL): 1.2378571392513258e-26
+// stddev(f - f_GSL): 1.1125902836405348e-13
const testcase_conf_hyperg<double>
data059[21] =
{
{ -5.0444366402760974e-06, 10.000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.0000000000000000, 10.000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 3.7273625322501334e-05, 10.000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00020264043678989247, 10.000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.00082625072555545290, 10.000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.0029946431107046520, 10.000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.010175354938185655, 10.000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.033191378911909299, 10.000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.10526077585069878, 10.000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.32700394770794872, 10.000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.0203131427322725, 10.000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 9.0310685653596838, 10.000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 26.780715897583555, 10.000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 78.863994492319449, 10.000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 230.86491415956360, 10.000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 672.38132248789179, 10.000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1949.5700594283705, 10.000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 5630.6984199677090, 10.000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 16206.167855150768, 10.000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 46500.316677925293, 10.000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler059 = 2.5000000000000013e-09;
// Test data for a=10.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_conf_hyperg<double>
data060[21] =
{
{ 4.5399929762484854e-05, 10.000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.00012340980408667956, 10.000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.00033546262790251185, 10.000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 0.00091188196555451624, 10.000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.0024787521766663585, 10.000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.0067379469990854670, 10.000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.018315638888734179, 10.000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.049787068367863944, 10.000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.13533528323661270, 10.000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.36787944117144233, 10.000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.7182818284590451, 10.000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 7.3890560989306504, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 20.085536923187668, 10.000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 54.598150033144236, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 148.41315910257660, 10.000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 403.42879349273511, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1096.6331584284585, 10.000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 2980.9579870417283, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 8103.0839275753842, 10.000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 22026.465794806718, 10.000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler060 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, c=1.0000000000000000.
// max(|f - f_GSL|): 0.0039062500000000000
// max(|f - f_GSL| / |f_GSL|): 3.8043537688323639e-14
+// mean(f - f_GSL): -3.3615948355170079e-05
+// variance(f - f_GSL): 7.8735813272906564e-07
+// stddev(f - f_GSL): 0.00088733203071289252
const testcase_conf_hyperg<double>
data061[21] =
{
{ 0.00018021852293239509, 20.000000000000000, 1.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 0.0017726368057851866, 20.000000000000000, 1.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 0.00058280040382329280, 20.000000000000000, 1.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -0.0049657717020590141, 20.000000000000000, 1.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -0.0012360336087128597, 20.000000000000000, 1.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 0.014898894139255305, 20.000000000000000, 1.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.013800784612552078, 20.000000000000000, 1.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.012192213426039619, 20.000000000000000, 1.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.050311246773136212, 20.000000000000000, 1.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.025985814502838493, 20.000000000000000, 1.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1563.6577385252017, 20.000000000000000, 1.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 86377.091910766088, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2216718.8789979252, 20.000000000000000, 1.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 38045018.520647161, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 504376263.68346804, 20.000000000000000, 1.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 5565635666.7972050, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 53451562646.544518, 20.000000000000000, 1.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 460009135340.33832, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 3620401937301.4907, 20.000000000000000, 1.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 26446266822604.152, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler061 = 2.5000000000000015e-12;
// Test data for a=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.00097656250000000000
// max(|f - f_GSL| / |f_GSL|): 3.3638062074418344e-12
+// mean(f - f_GSL): 4.3034663379130458e-05
+// variance(f - f_GSL): 4.5752396641698786e-08
+// stddev(f - f_GSL): 0.00021389809873324911
const testcase_conf_hyperg<double>
data062[21] =
{
{ 6.6647681992684102e-05, 20.000000000000000, 2.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -3.7248253270227151e-05, 20.000000000000000, 2.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -0.00024392611307344034, 20.000000000000000, 2.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 2.4034559592246202e-05, 20.000000000000000, 2.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 0.00081645960584843073, 20.000000000000000, 2.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.00051326387116462039, 20.000000000000000, 2.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.0021786279856333920, 20.000000000000000, 2.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.0061029380625179973, 20.000000000000000, 2.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.011834301617155166, 20.000000000000000, 2.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.037622016973681061, 20.000000000000000, 2.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 303.10954080179744, 20.000000000000000, 2.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 11508.923130556599, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 234541.86023461280, 20.000000000000000, 2.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 3398931.2897027107, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 39382712.287920594, 20.000000000000000, 2.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 388350500.37087941, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 3385284070.5527182, 20.000000000000000, 2.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 26751585258.405773, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 195061928138.27676, 20.000000000000000, 2.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 1329571695324.3132, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler062 = 2.5000000000000017e-10;
// Test data for a=20.000000000000000, c=3.0000000000000000.
// max(|f - f_GSL|): 1.5258789062500000e-05
// max(|f - f_GSL| / |f_GSL|): 1.0636412229856690e-11
+// mean(f - f_GSL): 4.4497851428053690e-07
+// variance(f - f_GSL): 1.1521071605323705e-11
+// stddev(f - f_GSL): 3.3942704083976139e-06
const testcase_conf_hyperg<double>
data063[21] =
{
{ -8.6671962318505780e-06, 20.000000000000000, 3.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -1.8205565180535425e-05, 20.000000000000000, 3.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 1.5620588717927631e-05, 20.000000000000000, 3.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 7.6532767373103759e-05, 20.000000000000000, 3.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -5.2708600380172109e-05, 20.000000000000000, 3.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -0.00028546308121326275, 20.000000000000000, 3.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.00056490746026256267, 20.000000000000000, 3.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -5.0602588875468348e-07, 20.000000000000000, 3.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.0021376080642211692, 20.000000000000000, 3.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.0028873127225376104, 20.000000000000000, 3.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 3.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 106.38207299128948, 20.000000000000000, 3.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 2880.5734732831320, 20.000000000000000, 3.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 47353.756965165718, 20.000000000000000, 3.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 584732.27978148905, 20.000000000000000, 3.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 5957333.1101320982, 20.000000000000000, 3.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 52725595.633352734, 20.000000000000000, 3.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 418560160.03369552, 20.000000000000000, 3.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 3045067611.3150902, 20.000000000000000, 3.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 20614600690.354652, 20.000000000000000, 3.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 131344201933.74118, 20.000000000000000, 3.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler063 = 1.0000000000000007e-09;
// Test data for a=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 1.5258789062500000e-05
// max(|f - f_GSL| / |f_GSL|): 1.8743522900030841e-11
+// mean(f - f_GSL): -8.3223887278548778e-07
+// variance(f - f_GSL): 1.0926580894758549e-11
+// stddev(f - f_GSL): 3.3055379130723262e-06
const testcase_conf_hyperg<double>
data064[21] =
{
{ -1.1286669552452399e-06, 20.000000000000000, 4.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 3.9595188785137704e-06, 20.000000000000000, 4.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 8.6940153052790051e-06, 20.000000000000000, 4.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -1.0858814018067509e-05, 20.000000000000000, 4.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -4.1826023828710966e-05, 20.000000000000000, 4.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 6.6455893622436316e-05, 20.000000000000000, 4.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 0.00014238710517977906, 20.000000000000000, 4.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.00071796294700866132, 20.000000000000000, 4.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.0020884061677332645, 20.000000000000000, 4.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.012768833157321973, 20.000000000000000, 4.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 4.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 50.659916934657808, 20.000000000000000, 4.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 1014.3134442335910, 20.000000000000000, 4.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 13665.584449611577, 20.000000000000000, 4.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 145123.62797278623, 20.000000000000000, 4.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 1308144.4519382305, 20.000000000000000, 4.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 10438124.578674613, 20.000000000000000, 4.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 75719160.524424627, 20.000000000000000, 4.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 508510905.96310252, 20.000000000000000, 4.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 3203200954.5618095, 20.000000000000000, 4.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 19111993543.124691, 20.000000000000000, 4.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler064 = 1.0000000000000007e-09;
// Test data for a=20.000000000000000, c=5.0000000000000000.
// max(|f - f_GSL|): 3.3378601074218750e-06
// max(|f - f_GSL| / |f_GSL|): 1.7481076775232650e-09
+// mean(f - f_GSL): -1.3214810751857278e-07
+// variance(f - f_GSL): 5.3952094488201166e-13
+// stddev(f - f_GSL): 7.3452089478925757e-07
const testcase_conf_hyperg<double>
data065[21] =
{
{ 8.4755643455671027e-07, 20.000000000000000, 5.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 8.5721061862565697e-07, 20.000000000000000, 5.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -2.8228700837555599e-06, 20.000000000000000, 5.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -6.6486802159657585e-06, 20.000000000000000, 5.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 1.1816828026110384e-05, 20.000000000000000, 5.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 3.6173872819745774e-05, 20.000000000000000, 5.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.00011481934287296670, 20.000000000000000, 5.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 1.2650647218867087e-07, 20.000000000000000, 5.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.0010626537950495965, 20.000000000000000, 5.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ -0.0085499011205641944, 20.000000000000000, 5.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 29.126637808809392, 20.000000000000000, 5.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 446.26914983518060, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 5005.6470164856382, 20.000000000000000, 5.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 46145.715220935184, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 370342.18574452243, 20.000000000000000, 5.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 2676402.7371661114, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 17803174.102030005, 20.000000000000000, 5.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 110674464.63597310, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 650149739.34228492, 20.000000000000000, 5.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 3639417243.5150661, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler065 = 1.0000000000000005e-07;
// Test data for a=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 3.5762786865234375e-07
// max(|f - f_GSL| / |f_GSL|): 7.4494573571551227e-09
+// mean(f - f_GSL): -1.3194579652011325e-08
+// variance(f - f_GSL): 6.2283002550082923e-15
+// stddev(f - f_GSL): 7.8919580935331202e-08
const testcase_conf_hyperg<double>
data066[21] =
{
{ -1.9022359545310046e-08, 20.000000000000000, 6.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -7.4533809656234698e-07, 20.000000000000000, 6.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -9.7852420358724080e-07, 20.000000000000000, 6.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 3.0181569866746340e-06, 20.000000000000000, 6.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 7.9816910701457280e-06, 20.000000000000000, 6.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -2.0133163153966071e-05, 20.000000000000000, 6.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -4.7462368393259685e-05, 20.000000000000000, 6.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 0.00031910869938964821, 20.000000000000000, 6.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.0010380528468056441, 20.000000000000000, 6.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.0084752097558651058, 20.000000000000000, 6.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 6.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 19.002159564861387, 20.000000000000000, 6.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 229.93981298721295, 20.000000000000000, 6.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 2180.3120758940972, 20.000000000000000, 6.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 17610.732510305290, 20.000000000000000, 6.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 126633.20907014767, 20.000000000000000, 6.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 832692.83016874129, 20.000000000000000, 6.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 5097225.0940651651, 20.000000000000000, 6.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 29414585.342530526, 20.000000000000000, 6.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 161513229.88138971, 20.000000000000000, 6.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 849871092.10959554, 20.000000000000000, 6.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler066 = 5.0000000000000019e-07;
// Test data for a=20.000000000000000, c=7.0000000000000000.
// max(|f - f_GSL|): 1.7881393432617188e-07
// max(|f - f_GSL| / |f_GSL|): 2.3690711970375556e-09
+// mean(f - f_GSL): -7.4560448694733463e-09
+// variance(f - f_GSL): 1.5415851296503409e-15
+// stddev(f - f_GSL): 3.9263024968159817e-08
const testcase_conf_hyperg<double>
data067[21] =
{
{ -1.7754301607387146e-07, 20.000000000000000, 7.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -6.2128605089471266e-08, 20.000000000000000, 7.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 9.1338873372533148e-07, 20.000000000000000, 7.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.6657400269273180e-06, 20.000000000000000, 7.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -4.7904165143355465e-06, 20.000000000000000, 7.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -1.5503088351319618e-05, 20.000000000000000, 7.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 5.6425108496954337e-05, 20.000000000000000, 7.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 9.1083552345479015e-05, 20.000000000000000, 7.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.0018058773247853388, 20.000000000000000, 7.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.032850147696977743, 20.000000000000000, 7.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 7.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 13.551527852090807, 20.000000000000000, 7.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 133.23579819973105, 20.000000000000000, 7.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 1083.6769250393436, 20.000000000000000, 7.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 7739.1410905637622, 20.000000000000000, 7.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 50175.328973240226, 20.000000000000000, 7.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 301599.46814102860, 20.000000000000000, 7.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 1705051.1866143662, 20.000000000000000, 7.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 9159788.2353733145, 20.000000000000000, 7.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 47122070.398665302, 20.000000000000000, 7.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 233529421.53991735, 20.000000000000000, 7.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler067 = 2.5000000000000009e-07;
// Test data for a=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 5.9604644775390625e-08
// max(|f - f_GSL| / |f_GSL|): 1.2249590184458766e-09
+// mean(f - f_GSL): -2.6616967457028929e-09
+// variance(f - f_GSL): 1.7023121484136519e-16
+// stddev(f - f_GSL): 1.3047268481999027e-08
const testcase_conf_hyperg<double>
data068[21] =
{
{ 4.4385719622857099e-08, 20.000000000000000, 8.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ 2.7870855352561944e-07, 20.000000000000000, 8.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ 2.7221706037028333e-07, 20.000000000000000, 8.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -1.5211293805365477e-06, 20.000000000000000, 8.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ -4.2978336531553913e-06, 20.000000000000000, 8.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.1339557446266733e-05, 20.000000000000000, 8.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ 5.3526365220658988e-05, 20.000000000000000, 8.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.00029461053269513242, 20.000000000000000, 8.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ -0.00026793636646740143, 20.000000000000000, 8.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.061061258434452807, 20.000000000000000, 8.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 8.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 10.312756690132909, 20.000000000000000, 8.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 84.471824856846425, 20.000000000000000, 8.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 597.47335666854985, 20.000000000000000, 8.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 3805.9786364107408, 20.000000000000000, 8.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 22386.068461641658, 20.000000000000000, 8.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 123573.63516975302, 20.000000000000000, 8.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 647514.24141570868, 20.000000000000000, 8.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 3247628.2434586394, 20.000000000000000, 8.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 15690070.625286419, 20.000000000000000, 8.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 73379158.893325046, 20.000000000000000, 8.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler068 = 1.0000000000000005e-07;
// Test data for a=20.000000000000000, c=9.0000000000000000.
// max(|f - f_GSL|): 7.4505805969238281e-09
// max(|f - f_GSL| / |f_GSL|): 1.7712852063552690e-08
+// mean(f - f_GSL): 2.9817087070221235e-10
+// variance(f - f_GSL): 2.6857406568168521e-18
+// stddev(f - f_GSL): 1.6388229485874465e-09
const testcase_conf_hyperg<double>
data069[21] =
{
{ 7.3976263576568592e-08, 20.000000000000000, 9.0000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -9.0753238092548168e-09, 20.000000000000000, 9.0000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -5.5549484970396693e-07, 20.000000000000000, 9.0000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ -1.1104933512848787e-06, 20.000000000000000, 9.0000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 3.2483424385770483e-06, 20.000000000000000, 9.0000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ 1.7493431113569438e-05, 20.000000000000000, 9.0000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -3.9066110636117233e-05, 20.000000000000000, 9.0000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ -0.00040356155493308509, 20.000000000000000, 9.0000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.0037671531470534550, 20.000000000000000, 9.0000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.090944344485248435, 20.000000000000000, 9.0000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 9.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 8.2390942957149722, 20.000000000000000, 9.0000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 57.468054562166706, 20.000000000000000, 9.0000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 358.00109079775746, 20.000000000000000, 9.0000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 2051.3704389047002, 20.000000000000000, 9.0000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 11012.597503064209, 20.000000000000000, 9.0000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 56082.113308934473, 20.000000000000000, 9.0000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 273348.46918863337, 20.000000000000000, 9.0000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 1283674.4996444662, 20.000000000000000, 9.0000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 5838026.8730425332, 20.000000000000000, 9.0000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 25817349.972859699, 20.000000000000000, 9.0000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler069 = 1.0000000000000004e-06;
// Test data for a=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 1.8626451492309570e-09
// max(|f - f_GSL| / |f_GSL|): 3.6960743356593788e-09
+// mean(f - f_GSL): 1.6480220132168308e-10
+// variance(f - f_GSL): 1.5134021047767582e-19
+// stddev(f - f_GSL): 3.8902469134706065e-10
const testcase_conf_hyperg<double>
data070[21] =
{
{ -4.1157677792944960e-08, 20.000000000000000, 10.000000000000000,
- -10.000000000000000 },
+ -10.000000000000000, 0.0 },
{ -2.0187210039960914e-07, 20.000000000000000, 10.000000000000000,
- -9.0000000000000000 },
+ -9.0000000000000000, 0.0 },
{ -2.2272304939386817e-07, 20.000000000000000, 10.000000000000000,
- -8.0000000000000000 },
+ -8.0000000000000000, 0.0 },
{ 1.2925568212606171e-06, 20.000000000000000, 10.000000000000000,
- -7.0000000000000000 },
+ -7.0000000000000000, 0.0 },
{ 5.5744573775996210e-06, 20.000000000000000, 10.000000000000000,
- -6.0000000000000000 },
+ -6.0000000000000000, 0.0 },
{ -6.2568272011787289e-06, 20.000000000000000, 10.000000000000000,
- -5.0000000000000000 },
+ -5.0000000000000000, 0.0 },
{ -0.00011955177906335608, 20.000000000000000, 10.000000000000000,
- -4.0000000000000000 },
+ -4.0000000000000000, 0.0 },
{ 9.2475405516991146e-05, 20.000000000000000, 10.000000000000000,
- -3.0000000000000000 },
+ -3.0000000000000000, 0.0 },
{ 0.010123531287569976, 20.000000000000000, 10.000000000000000,
- -2.0000000000000000 },
+ -2.0000000000000000, 0.0 },
{ 0.12118937229909534, 20.000000000000000, 10.000000000000000,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 10.000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 6.8319857942415538, 20.000000000000000, 10.000000000000000,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
{ 41.356658140815220, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000 },
+ 2.0000000000000000, 0.0 },
{ 229.57496033810904, 20.000000000000000, 10.000000000000000,
- 3.0000000000000000 },
+ 3.0000000000000000, 0.0 },
{ 1192.7830549969501, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000 },
+ 4.0000000000000000, 0.0 },
{ 5878.6003887215920, 20.000000000000000, 10.000000000000000,
- 5.0000000000000000 },
+ 5.0000000000000000, 0.0 },
{ 27741.749322673899, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000 },
+ 6.0000000000000000, 0.0 },
{ 126220.54599305880, 20.000000000000000, 10.000000000000000,
- 7.0000000000000000 },
+ 7.0000000000000000, 0.0 },
{ 556592.10886612453, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000 },
+ 8.0000000000000000, 0.0 },
{ 2388555.2873243927, 20.000000000000000, 10.000000000000000,
- 9.0000000000000000 },
+ 9.0000000000000000, 0.0 },
{ 10008079.497419352, 20.000000000000000, 10.000000000000000,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
};
const double toler070 = 2.5000000000000009e-07;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_conf_hyperg<Tp> (&data)[Num], Tp toler)
+ test(const testcase_conf_hyperg<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = __gnu_cxx::conf_hyperg(data[i].a, data[i].c,
+ const Ret f = __gnu_cxx::conf_hyperg(data[i].a, data[i].c,
data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc b/libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc
index 5a7a4a6f670..d720754ebfe 100644
--- a/libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc
+++ b/libstdc++-v3/testsuite/ext/special_functions/hyperg/check_value.cc
@@ -1,7 +1,6 @@
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__ -ffp-contract=off" }
-// { dg-additional-options "-ffloat-store" { target { m68*-*-* || ia32 } } }
// { dg-do run { target c++11 } }
-
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
// Copyright (C) 2016 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -42,11538 +41,12274 @@
// Test data for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data001[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data002[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data003[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data004[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data005[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data006[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data007[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data008[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data009[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler009 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data010[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler010 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data011[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data012[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler012 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data013[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler013 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data014[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler014 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data015[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler015 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data016[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler016 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data017[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler017 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data018[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler018 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data019[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler019 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data020[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler020 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data021[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler021 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data022[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler022 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data023[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler023 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data024[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler024 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data025[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler025 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data026[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler026 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data027[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler027 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data028[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler028 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data029[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler029 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data030[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler030 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data031[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler031 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data032[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler032 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data033[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler033 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data034[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler034 = 2.5000000000000020e-13;
// Test data for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data035[19] =
{
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler035 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data036[19] =
{
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler036 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data037[19] =
{
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler037 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data038[19] =
{
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler038 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data039[19] =
{
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler039 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data040[19] =
{
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler040 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2734148235941270e-16
+// mean(f - f_GSL): -7.0119348923694093e-17
+// variance(f - f_GSL): 5.0056658723514899e-33
+// stddev(f - f_GSL): 7.0750730542881954e-17
const testcase_hyperg<double>
data041[19] =
{
{ 0.91383715388743736, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.92151232618202372, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.92955086110354845, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.93798900119104855, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.94686887307107392, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.95623987262143295, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.96616049387450131, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.96616049387450120, 0.50000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.97670078782187519, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98794573712298384, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0129947682256604, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0270980168168973, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0425304520063581, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0595915916161471, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0787052023767585, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.1005053642285867, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1260196351148746, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1571341977338991, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 1.1982111053717450, 0.50000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.1982111053717452, 0.50000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler041 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2341054918357306e-16
+// mean(f - f_GSL): -5.2589511692770570e-17
+// variance(f - f_GSL): 1.6218357426418827e-34
+// stddev(f - f_GSL): 1.2735131497718753e-17
const testcase_hyperg<double>
data042[19] =
{
{ 0.95255425675562699, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.95712841850078267, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.96184734120034554, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.96672141255196176, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.97176228710138646, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.97698311668286320, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.97698311668286308, 0.50000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.98239883902556036, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.98802654401961032, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99388594556732701, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0063957328951061, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0131053706824598, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0201679332118803, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0276315524377497, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0355569942816882, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0440233080381554, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0531375808028993, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0630536689840200, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0740149570414563, 0.50000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler042 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 5.5511151231257827e-16
// max(|f - f_GSL| / |f_GSL|): 5.5963253065363064e-16
+// mean(f - f_GSL): -5.8432790769745078e-17
+// variance(f - f_GSL): 1.5697768175694272e-33
+// stddev(f - f_GSL): 3.9620409104013895e-17
const testcase_hyperg<double>
data043[19] =
{
{ 0.96694084713323880, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.97024454918852632, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.97362815600391439, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.97709622064205104, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.98065374770570635, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.98430626119885511, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.98805988669621048, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.98430626119885523, 0.50000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.99192145185739655, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99589861079880937, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0042354366729904, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0086161755545404, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0131552481403503, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0178679218284707, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0227723400312978, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0278904483717863, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1.0332494012993472, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.0332494012993474, 0.50000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0388838453357794, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0448400142331342, 0.50000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler043 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.3511105824376917e-16
+// mean(f - f_GSL): -9.3492465231592125e-17
+// variance(f - f_GSL): 5.1258018532879257e-34
+// stddev(f - f_GSL): 2.2640233773722228e-17
const testcase_hyperg<double>
data044[19] =
{
{ 0.97456073259047449, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.97715689327833399, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.97980416868943110, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.98250498942832487, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.98526199049760810, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.98807803762902791, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.99095625840920321, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.99390007937387959, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99691327061866730, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0031648997547440, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0064131494767281, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0097505810668461, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0131838138968663, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0167204326938339, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0203692279382193, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0241405318057402, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0280467087844301, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0321029179180026, 0.50000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler044 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.1915128876304698e-16
+// mean(f - f_GSL): -5.8432790769745078e-17
+// variance(f - f_GSL): 1.5697768175694272e-33
+// stddev(f - f_GSL): 3.9620409104013895e-17
const testcase_hyperg<double>
data045[19] =
{
{ 0.97930223035212138, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.98144406855076427, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.98362155940297280, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.98583616201745783, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.98808944235385032, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.99038308530635433, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.99271890872975710, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.99509887982916734, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.99752513445413604, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0025260228440118, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0051060015613384, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0077430276253163, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0104405359789990, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0132023689128868, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0160328583559475, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0189369344885053, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0219202735809589, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0249895076611382, 0.50000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler045 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3839191144484910e-16
+// max(|f - f_GSL| / |f_GSL|): 4.3839191144484900e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 2.6021453470831987e-32
+// stddev(f - f_GSL): 1.6131166563777087e-16
const testcase_hyperg<double>
data046[19] =
{
{ 0.84089972268671531, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.85410196624968460, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.86811566011579955, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.88303688022450522, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89897948556635621, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.91607978309961580, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.93450283399425305, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.93450283399425327, 0.50000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95445115010332193, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97617696340303095, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0263340389897240, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.0557280900008410, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0557280900008412, 0.50000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0889331564394962, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1270166537925830, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1715728752538095, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2251482265544145, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1.2922212642709541, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.2922212642709543, 0.50000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3819660112501042, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 1.5194938532959119, 0.50000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5194938532959121, 0.50000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler046 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.1628301908162427e-16
+// mean(f - f_GSL): -6.4276069846719592e-17
+// variance(f - f_GSL): 2.4227422822181211e-34
+// stddev(f - f_GSL): 1.5565160719434032e-17
const testcase_hyperg<double>
data047[19] =
{
{ 0.90992197313391454, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.91822592662244484, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.92687104566419554, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.93588628166548848, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.94530459215552909, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.95516374875247456, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.96550736800511849, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.95516374875247434, 0.50000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.96550736800511816, 0.50000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.97638624595136270, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98786011482678993, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0128914530682316, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0266391040215350, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0413732738729464, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0572599536532992, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0745166004060953, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0934387388831386, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1144486980714641, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1381966011250106, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.1658171625342397, 0.50000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler047 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.5130734546221216e-16
+// mean(f - f_GSL): -1.1686558153949016e-17
+// variance(f - f_GSL): 2.5949371882270124e-33
+// stddev(f - f_GSL): 5.0940525990875012e-17
const testcase_hyperg<double>
data048[19] =
{
{ 0.93641908369732896, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.94256349654111271, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.94890138508461319, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.95544578858430029, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.96221121193620762, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.96921386948293542, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.97647198488394704, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.98400616412578656, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99183986544963032, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0085177124149158, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0174294150407122, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0267781897388850, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.0366157405967285, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.0366157405967287, 0.50000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0470052068648839, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0580253905513313, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0697774741209765, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0823965556448414, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0960739512057103, 0.50000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler048 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4952983921284566e-16
+// mean(f - f_GSL): -9.9335744308566638e-17
+// variance(f - f_GSL): 8.8299945988280282e-34
+// stddev(f - f_GSL): 2.9715306828010421e-17
const testcase_hyperg<double>
data049[19] =
{
{ 0.95069883346936235, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.95559618047704131, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.96061938755931664, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.96577553912851333, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.97107239473807716, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.97651848528588481, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.98212322830227150, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.98212322830227128, 0.50000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.98789706736195781, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99385164237825074, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0063568569383123, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0129389344715818, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0197653907773940, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0268583912277143, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0342438793937092, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0419526514766855, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0500219124976327, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0584976491907043, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0674385240268101, 0.50000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler049 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2314542629443562e-16
+// mean(f - f_GSL): -8.1805907077643109e-17
+// variance(f - f_GSL): 1.1533054169897833e-33
+// stddev(f - f_GSL): 3.3960350660583340e-17
const testcase_hyperg<double>
data050[19] =
{
{ 0.95968319138913905, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.96376169072755802, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.96792900082729372, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.97218942798115737, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.97654763592586835, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.98100869054353879, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.98100869054353890, 0.50000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 0.98557811238699278, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.99026193885795544, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.99506679842072221, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0050696417919618, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0102847452747090, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0156554225057022, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0211930882963096, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0269107343740711, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0328232917216298, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0389481230247195, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0453057164134614, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0519207114461246, 0.50000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler050 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 1.0379748752908049e-32
+// stddev(f - f_GSL): 1.0188105198175002e-16
const testcase_hyperg<double>
data051[19] =
{
{ 0.72547625011001171, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.74535599249992990, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.76696498884737041, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.79056941504209477, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.81649658092772603, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.84515425472851657, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.87705801930702920, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.87705801930702931, 0.50000000000000000, 2.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.91287092917527690, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.95346258924559224, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0540925533894598, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1180339887498949, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1952286093343938, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 1.2909944487358056, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2909944487358058, 0.50000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.4142135623730949, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.5811388300841900, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1.8257418583505536, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8257418583505542, 0.50000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.2360679774997898, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 3.1622776601683782, 0.50000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 3.1622776601683817, 0.50000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler051 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0893602609058104e-16
+// max(|f - f_GSL| / |f_GSL|): 3.0893602609058095e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 1.0379748752908049e-32
+// stddev(f - f_GSL): 1.0188105198175002e-16
const testcase_hyperg<double>
data052[19] =
{
{ 0.83664260086443765, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.85046584300227079, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.86509574979651649, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.88062082573041911, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89714464248521597, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.91478946588967591, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.93370105322348573, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91478946588967569, 0.50000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.93370105322348607, 0.50000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95405511057700887, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97606616007978142, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0261916902334731, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0550723519434702, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0872106588188091, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.1233801699379020, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.1233801699379022, 0.50000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1646752981725688, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2127272514219511, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.2701518651068637, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3416407864998725, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 1.4374795179111102, 0.50000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.4374795179111106, 0.50000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler052 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.3853500746952663e-16
+// mean(f - f_GSL): -5.2589511692770570e-17
+// variance(f - f_GSL): 1.6218357426418827e-34
+// stddev(f - f_GSL): 1.2735131497718753e-17
const testcase_hyperg<double>
data053[19] =
{
{ 0.88195381730235822, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.89265078469555081, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.90382937908303673, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.91553161389880600, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.92780530349281509, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.94070521140346008, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.95429450630523383, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.94070521140346020, 0.50000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.96864663325785849, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98384775588541795, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0172258496884334, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.0356742479163459, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0356742479163461, 0.50000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0555293036908924, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0770231491562379, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1004557416484888, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.1262270515731978, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1.1548932919125086, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.1548932919125088, 0.50000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1872757758134724, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.2247091713458949, 0.50000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler053 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2746445692007949e-16
+// mean(f - f_GSL): -4.6746232615796062e-17
+// variance(f - f_GSL): 1.2814504633219814e-34
+// stddev(f - f_GSL): 1.1320116886861114e-17
const testcase_hyperg<double>
data054[19] =
{
{ 0.90716919697107279, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.91592299407142508, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.92500027075874192, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.93442464185467122, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.94422248683737076, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.95442341810133324, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.96506085725516355, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.97617275213704069, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98780247986309799, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0128233505813447, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0263406246541855, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0406326381700366, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0557966239802845, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0719515075786321, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0892457392422055, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1078695188000958, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1280752258974340, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.1502152002706476, 0.50000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler054 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4848478782807992e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 5.0056658723514899e-35
+// stddev(f - f_GSL): 7.0750730542881960e-18
const testcase_hyperg<double>
data055[19] =
{
{ 0.92336416053263082, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.93078397248364542, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.93843714333600259, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.94633837784068098, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.95450388104967876, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.96295158125742752, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.97170139827854318, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.97170139827854329, 0.50000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.98077556918512687, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.99019904777750845, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0102104261941198, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0208669540935695, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0320118665407505, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0436944599504387, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0559728828278145, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0689166967761712, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0826105758119842, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0971599106346146, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.1126998828023964, 0.50000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler055 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.5474735088646412e-13
-// max(|f - f_GSL| / |f_GSL|): 1.5124797514980704e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5124797514980592e-15
+// mean(f - f_GSL): 2.5330614798684493e-14
+// variance(f - f_GSL): 1.0813505961152326e-26
+// stddev(f - f_GSL): 1.0398800873731705e-13
const testcase_hyperg<double>
data056[19] =
{
{ 0.52275983209457544, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.54700336898143009, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.57468955512602038, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.60665490543315048, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.64403057859056190, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.68838183648623730, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.74193265039311129, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.74193265039311118, 0.50000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.80794095908995300, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.89135275749639320, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1469266219310688, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.3552340708357489, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3552340708357493, 0.50000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.6690840478838305, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 2.1815415453174483, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.1815415453174500, 0.50000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 3.1156892546032235, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 5.1109077417760416, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 10.560352936466296, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 10.560352936466318, 0.50000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 33.541019662496815, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 300.66343065819501, 0.50000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 300.66343065819723, 0.50000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler056 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 8.8817841970012523e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3217255411112326e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3217255411112292e-15
+// mean(f - f_GSL): 6.4276069846719592e-16
+// variance(f - f_GSL): 3.9807057283287990e-30
+// stddev(f - f_GSL): 1.9951706013092712e-15
const testcase_hyperg<double>
data057[19] =
{
{ 0.68252041951139286, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.70394732624993395, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.72748884971552052, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.75351147371199667, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.78247589005573737, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.81497017420249807, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.85175826875009586, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.81497017420249795, 0.50000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.85175826875009608, 0.50000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.89385278481745867, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.94262778709507411, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0687327277420910, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1529725508983291, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2592587134058799, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.3985773194637892, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.3985773194637896, 0.50000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.5909902576697317, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.8776023607249752, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2.3582499003694646, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.3582499003694664, 0.50000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.3541019662496838, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 6.7198400278577859, 0.50000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 6.7198400278578028, 0.50000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler057 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 2.6645352591003757e-15
// max(|f - f_GSL| / |f_GSL|): 1.2228264607471081e-15
+// mean(f - f_GSL): 1.5776853507831172e-16
+// variance(f - f_GSL): 3.6849910112537625e-31
+// stddev(f - f_GSL): 6.0704126805792717e-16
const testcase_hyperg<double>
data058[19] =
{
{ 0.75755211927082600, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.77603550233010965, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.79596241913438504, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.81753360792105212, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.84099165409805532, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.86663303852180895, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.89482475828629970, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.86663303852180906, 0.50000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.89482475828629915, 0.50000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.92602774279590350, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.96083064727087386, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0445570841313008, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.0959004638926031, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0959004638926033, 0.50000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1560106261370562, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.2278121770678145, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2278121770678148, 0.50000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.3158640214709998, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.4278095344155000, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1.5778700502946612, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.5778700502946617, 0.50000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.7972173289196469, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 2.1789970569269732, 0.50000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler058 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2082370290419495e-16
+// max(|f - f_GSL| / |f_GSL|): 4.2082370290419485e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 2.5116429081110836e-32
+// stddev(f - f_GSL): 1.5848163641605558e-16
const testcase_hyperg<double>
data059[19] =
{
{ 0.80270093579329460, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.81884974572462765, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.83605266330015260, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.85443340762796027, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.87413762182790711, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.89533826626907287, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.91824276674115290, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.89533826626907298, 0.50000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.91824276674115313, 0.50000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.94310265050720576, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97022678857609712, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0329098673199812, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0695865684573389, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1108642103944570, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1578795055970506, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.2122394794169442, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2763274721556934, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.3539179650251021, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.4515986118197148, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1.5829284571614219, 0.50000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5829284571614224, 0.50000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler059 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2751041935095266e-16
+// mean(f - f_GSL): -5.8432790769745078e-18
+// variance(f - f_GSL): 3.0454471167386466e-33
+// stddev(f - f_GSL): 5.5185569823447931e-17
const testcase_hyperg<double>
data060[19] =
{
{ 0.83322694172301981, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.84753931604765675, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.86265784532195022, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.87866479300707090, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.89565516540263501, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.91373946207610512, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.93304721345881891, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.93304721345881914, 0.50000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.95373159512905148, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.97597554238828121, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0260752851887982, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0545371197996178, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0858099017045830, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.1204416568688709, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.1591587835964847, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.2029564720303347, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.2532588722007874, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.3122319926925459, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 1.3834948587364100, 0.50000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.3834948587364102, 0.50000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler060 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.8229127098648091e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8229127098647768e-15
+// mean(f - f_GSL): 7.8543415046726153e-10
+// variance(f - f_GSL): 1.1684633485497506e-17
+// stddev(f - f_GSL): 3.4182793164832956e-09
const testcase_hyperg<double>
data061[19] =
{
{ 0.37727530159464628, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.39816010922169059, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.42283703041362447, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.45255640448730527, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.48919507154431119, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.53569358917731924, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.59689778897029544, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.53569358917731902, 0.50000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.59689778897029577, 0.50000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.68128587569875765, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.80478739308790359, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3408664196153621, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 2.0175364359923860, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.0175364359923882, 0.50000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 3.6011214553736646, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 8.1799429939495312, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 8.1799429939495489, 0.50000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 25.644834637536000, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 123.13738891597615, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1088.7122410321333, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1088.7122410321385, 0.50000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 27358.291704709951, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 8174369.0266731177, 0.50000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 8174369.0266732639, 0.50000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler061 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.0008883439004421e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5684473872214654e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5684473872214445e-15
+// mean(f - f_GSL): 1.0626470463804301e-12
+// variance(f - f_GSL): 2.1050116035366066e-23
+// stddev(f - f_GSL): 4.5880405442155876e-12
const testcase_hyperg<double>
data062[19] =
{
{ 0.53905528308450823, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.56235533974376162, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.58887657983263575, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.61941227047262937, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.65504896640793864, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.69731666644529977, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.74844073299399139, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.74844073299399116, 0.50000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.81178446800105830, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.89266981277598045, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1497248473106778, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.3729717112654571, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3729717112654578, 0.50000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.7374982340374392, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 2.4134479340960580, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.4134479340960602, 0.50000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 3.9191255240471192, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 8.3316373077761270, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 28.323020339843335, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 28.323020339843417, 0.50000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 225.84286572747891, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 12757.127591286655, 0.50000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 12757.127591286826, 0.50000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler062 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 1.9895196601282805e-13
-// max(|f - f_GSL| / |f_GSL|): 1.4567107859209967e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4567107859209851e-15
+// mean(f - f_GSL): 1.0997051222866024e-14
+// variance(f - f_GSL): 2.0716479934578269e-27
+// stddev(f - f_GSL): 4.5515359972846821e-14
const testcase_hyperg<double>
data063[19] =
{
{ 0.62672622092226027, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.64931010269769840, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.67448067519076293, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.70276306239803643, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.73484179773087521, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.77162761412743874, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.81436116844816564, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.81436116844816553, 0.50000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.86477994787944579, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.92539820516603888, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0945599448210315, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.2190897395597264, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2190897395597269, 0.50000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.3916844336856475, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.6484497630432013, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6484497630432020, 0.50000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.0717772717131155, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.8893613630810924, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 4.9459404075413529, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 4.9459404075413573, 0.50000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 13.487394149998716, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 136.57616044013972, 0.50000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 136.57616044014080, 0.50000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler063 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.2434497875801753e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3245081211977836e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3245081211977792e-15
+// mean(f - f_GSL): 7.8299939631458406e-16
+// variance(f - f_GSL): 7.9610830849763719e-30
+// stddev(f - f_GSL): 2.8215391340501324e-15
const testcase_hyperg<double>
data064[19] =
{
{ 0.68421604440344319, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.70548098055548925, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.72884342311710337, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.75466953437856232, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.78342090924662589, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.81568884278645082, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.85224480241465239, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.81568884278645115, 0.50000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.85224480241465261, 0.50000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.89411692571131685, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.94270986892954811, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0688682849120232, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1537004376097553, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2615455028370031, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.4045541456153436, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.4045541456153443, 0.50000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.6057216489444517, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.9146603020550739, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 2.4617931307620298, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.4617931307620307, 0.50000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.7267799624996498, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 9.3880118036248401, 0.50000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 9.3880118036248721, 0.50000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler064 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 1.0379748752908049e-32
+// stddev(f - f_GSL): 1.0188105198175002e-16
const testcase_hyperg<double>
data065[19] =
{
{ 0.72547625011001171, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.74535599249992990, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.76696498884737041, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.79056941504209477, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.81649658092772603, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.84515425472851657, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.87705801930702920, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.87705801930702931, 0.50000000000000000, 10.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.91287092917527690, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.95346258924559224, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0540925533894598, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.1180339887498949, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.1952286093343938, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.2909944487358056, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2909944487358058, 0.50000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.4142135623730949, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.5811388300841900, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 1.8257418583505536, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8257418583505542, 0.50000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 2.2360679774997898, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 3.1622776601683782, 0.50000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 3.1622776601683817, 0.50000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler065 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 48.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8556481344875154e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8556481344874416e-15
+// mean(f - f_GSL): 2.5263190030329112
+// variance(f - f_GSL): 121.26314075575490
+// stddev(f - f_GSL): 11.011954447588080
const testcase_hyperg<double>
data066[19] =
{
{ 0.26690449940521549, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.28252302866181833, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.30123616141153836, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.32421384687602633, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.35334630811776774, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.39191793127467028, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.44620488618129195, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.39191793127466995, 0.50000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.44620488618129212, 0.50000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.52980896919265719, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.67754711477562324, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.9567557771780317, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 6.1816042148333086, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 6.1816042148333272, 0.50000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 35.653088618561227, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 377.51482843179906, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 377.51482843180133, 0.50000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 7645.8816551195359, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 354791.74537980522, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 57009889.966638684, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 57009889.966639392, 0.50000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 83771357024.863937, 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 25866972896376408., 0.50000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 25866972896377436., 0.50000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler066 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.011718750000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7519521419034139e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7519521419033478e-15
+// mean(f - f_GSL): 0.00061678102606401840
+// variance(f - f_GSL): 7.2278413174892161e-06
+// stddev(f - f_GSL): 0.0026884644906506046
const testcase_hyperg<double>
data067[19] =
{
{ 0.40342659436153389, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.42420571192034318, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.44852768286073041, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.47751245808592863, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.51283632632707765, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.55713468814894329, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.61481320817757334, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.61481320817757346, 0.50000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.69383483410097213, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.81012002526006044, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3622225506603911, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 2.2349513086109001, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.2349513086109027, 0.50000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 5.1864917536761723, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 21.020560423779411, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 21.020560423779497, 0.50000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 175.19649997100612, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 3467.1587803688708, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 225003.88683445856, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 225003.88683446089, 0.50000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 110837674.65652709, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 6688966964170.6807, 0.50000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 6688966964170.9326, 0.50000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler067 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 1.4305114746093750e-05
-// max(|f - f_GSL| / |f_GSL|): 1.9261147266354006e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9261147266353426e-15
+// mean(f - f_GSL): 7.5292535811914037e-07
+// variance(f - f_GSL): 1.0770292922663892e-11
+// stddev(f - f_GSL): 3.2818124447725363e-06
const testcase_hyperg<double>
data068[19] =
{
{ 0.48716309885816822, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.50965859152542337, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.53554809210658938, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.56576689207507136, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.60164849637133655, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.64516711595404364, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.69938278735493520, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.64516711595404408, 0.50000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.69938278735493553, 0.50000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.76931621518401860, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.86381808725530662, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.2152051956815531, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.6052546785425543, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.6052546785425557, 0.50000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.4765586046012635, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 5.1564492216997486, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 5.1564492216997611, 0.50000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 18.446158392136365, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 150.44577670123971, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 3862.6317400115768, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3862.6317400116104, 0.50000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 632428.34833625401, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 7426927663.3808765, 0.50000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 7426927663.3810987, 0.50000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler068 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 4.0978193283081055e-08
-// max(|f - f_GSL| / |f_GSL|): 1.7692881266931737e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7692881266931270e-15
+// mean(f - f_GSL): 2.1571346697195273e-09
+// variance(f - f_GSL): 8.8377831004256086e-17
+// stddev(f - f_GSL): 9.4009484098284519e-09
const testcase_hyperg<double>
data069[19] =
{
{ 0.54703266209548373, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.56997321774144960, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.59603026159654982, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.62596978851120511, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.66084565876898915, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.70215256667232873, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.75208916592008557, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.70215256667232862, 0.50000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.75208916592008568, 0.50000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.81403631111658625, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.89348608489854597, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1517793185139173, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.3878110313656598, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3878110313656606, 0.50000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.8061071794572381, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 2.7148594517859586, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.7148594517859612, 0.50000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 5.4529435709049361, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 19.487310275377109, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 191.69079165937470, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 191.69079165937592, 0.50000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 10218.543981792311, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 23160836.646583911, 0.50000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 23160836.646584522, 0.50000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler069 = 2.5000000000000020e-13;
// Test data for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.9103830456733704e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6694673196526831e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6694673196526424e-15
+// mean(f - f_GSL): 1.5333418745237732e-11
+// variance(f - f_GSL): 4.4575632631399987e-21
+// stddev(f - f_GSL): 6.6764985307719485e-11
const testcase_hyperg<double>
data070[19] =
{
{ 0.59292067298616025, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.61572496720679892, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.64135339122875590, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.67043457419280461, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.70380956268170969, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.74263251901495220, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.78853555445528256, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.74263251901495264, 0.50000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.78853555445528289, 0.50000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.84391122775673755, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.91242401018807373, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.1169059681274873, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.2825928301302667, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2825928301302669, 0.50000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.5385937789924939, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.9895771187893898, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.9895771187893914, 0.50000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 2.9707335806970168, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 6.0299506157180467, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 24.259090336955577, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 24.259090336955669, 0.50000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 406.27267173257223, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 174330.03997220192, 0.50000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 174330.03997220617, 0.50000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler070 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data071[19] =
{
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler071 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data072[19] =
{
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler072 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data073[19] =
{
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler073 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data074[19] =
{
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler074 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data075[19] =
{
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler075 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3839191144484910e-16
+// max(|f - f_GSL| / |f_GSL|): 4.3839191144484900e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 2.6021453470831987e-32
+// stddev(f - f_GSL): 1.6131166563777087e-16
const testcase_hyperg<double>
data076[19] =
{
{ 0.84089972268671531, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.85410196624968460, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.86811566011579955, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.88303688022450522, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89897948556635621, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.91607978309961580, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.93450283399425305, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.93450283399425327, 1.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95445115010332193, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97617696340303095, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0263340389897240, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.0557280900008410, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0557280900008412, 1.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0889331564394962, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1270166537925830, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1715728752538095, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2251482265544145, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1.2922212642709541, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.2922212642709543, 1.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3819660112501042, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 1.5194938532959119, 1.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5194938532959121, 1.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler076 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.1628301908162427e-16
+// mean(f - f_GSL): -6.4276069846719592e-17
+// variance(f - f_GSL): 2.4227422822181211e-34
+// stddev(f - f_GSL): 1.5565160719434032e-17
const testcase_hyperg<double>
data077[19] =
{
{ 0.90992197313391454, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.91822592662244484, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.92687104566419554, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.93588628166548848, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.94530459215552909, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.95516374875247456, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.96550736800511849, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.95516374875247434, 1.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.96550736800511816, 1.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.97638624595136270, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98786011482678993, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0128914530682316, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0266391040215350, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0413732738729464, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0572599536532992, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0745166004060953, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0934387388831386, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1144486980714641, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1381966011250106, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.1658171625342397, 1.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler077 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.5130734546221216e-16
+// mean(f - f_GSL): -1.1686558153949016e-17
+// variance(f - f_GSL): 2.5949371882270124e-33
+// stddev(f - f_GSL): 5.0940525990875012e-17
const testcase_hyperg<double>
data078[19] =
{
{ 0.93641908369732896, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.94256349654111271, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.94890138508461319, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.95544578858430029, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.96221121193620762, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.96921386948293542, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.97647198488394704, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.98400616412578656, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99183986544963032, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0085177124149158, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0174294150407122, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0267781897388850, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.0366157405967285, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.0366157405967287, 1.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0470052068648839, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0580253905513313, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0697774741209765, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0823965556448414, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0960739512057103, 1.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler078 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4952983921284566e-16
+// mean(f - f_GSL): -9.9335744308566638e-17
+// variance(f - f_GSL): 8.8299945988280282e-34
+// stddev(f - f_GSL): 2.9715306828010421e-17
const testcase_hyperg<double>
data079[19] =
{
{ 0.95069883346936235, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.95559618047704131, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.96061938755931664, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.96577553912851333, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.97107239473807716, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.97651848528588481, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.98212322830227150, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.98212322830227128, 1.0000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.98789706736195781, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.99385164237825074, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0063568569383123, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0129389344715818, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0197653907773940, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0268583912277143, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0342438793937092, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0419526514766855, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0500219124976327, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0584976491907043, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0674385240268101, 1.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler079 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2314542629443562e-16
+// mean(f - f_GSL): -8.1805907077643109e-17
+// variance(f - f_GSL): 1.1533054169897833e-33
+// stddev(f - f_GSL): 3.3960350660583340e-17
const testcase_hyperg<double>
data080[19] =
{
{ 0.95968319138913905, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.96376169072755802, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.96792900082729372, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.97218942798115737, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.97654763592586835, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.98100869054353879, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.98100869054353890, 1.0000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 0.98557811238699278, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.99026193885795544, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.99506679842072221, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0050696417919618, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0102847452747090, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0156554225057022, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0211930882963096, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0269107343740711, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0328232917216298, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0389481230247195, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0453057164134614, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0519207114461246, 1.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler080 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 3.5527136788005009e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3886315518367356e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3886315518367350e-15
+// mean(f - f_GSL): 2.3373116307898031e-16
+// variance(f - f_GSL): 6.4597917856061087e-31
+// stddev(f - f_GSL): 8.0372829896713905e-16
const testcase_hyperg<double>
data081[19] =
{
{ 0.71317098463599415, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.73473333112764883, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.75804035866024344, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.78333938207622589, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.81093021621632866, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.84118059155303193, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.87454754822497016, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.84118059155303215, 1.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.91160778396977304, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.95310179804324857, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0536051565782629, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1157177565710485, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1889164797957747, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 1.2770640594149765, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2770640594149769, 1.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.3862943611198899, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.5271512197902593, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.7199611490370503, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.0117973905426232, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 2.5584278811044912, 1.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.5584278811044925, 1.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler081 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.5503149336769291e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
const testcase_hyperg<double>
data082[19] =
{
{ 0.83165649828125487, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.84626246650116621, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.86165287670267476, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.87790681762615264, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89511583784087634, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.91338673957393834, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.93284521667332010, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95364066873549813, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97595268969924187, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0260530485179122, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0544523154103413, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0856358366643180, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1201824010510930, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1588830833596719, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2028682930536780, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.2538561433469468, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3147120107267418, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.3910528844853491, 1.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler082 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.5856134910670077e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 3.5319978395312113e-33
+// stddev(f - f_GSL): 5.9430613656020843e-17
const testcase_hyperg<double>
data083[19] =
{
{ 0.87917686994924560, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.89033956110358403, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.90196195126098355, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.91408080149514681, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.92673756761314952, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.93997926630123430, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.95385955885019325, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.96844012412988900, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98379242268046208, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0171615499181177, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.0353950776091037, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0353950776091039, 1.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0548437030651112, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0756840039415978, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0981384722661196, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.1224950318916129, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1491396357184527, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1786158344507012, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.2117500593515478, 1.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler083 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.4123997230344747e-16
+// mean(f - f_GSL): -4.0902953538821554e-17
+// variance(f - f_GSL): 1.9241779613319129e-33
+// stddev(f - f_GSL): 4.3865452936586813e-17
const testcase_hyperg<double>
data084[19] =
{
{ 0.90538259348578420, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.91444830598832061, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.92381915945973991, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.93351553488501793, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.94356001859234861, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.95397775039949584, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.96479684710618019, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.95397775039949628, 1.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.96479684710618008, 1.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.97604892281308531, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98776973540356938, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0127864273812119, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0261830717772533, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0402531144740719, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0550712790827002, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0707271945059007, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0873302420658923, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1050168587085545, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1239622188477687, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.1444006183097781, 1.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler084 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.3962402892941561e-16
+// mean(f - f_GSL): -6.4276069846719592e-17
+// variance(f - f_GSL): 2.4227422822181211e-34
+// stddev(f - f_GSL): 1.5565160719434032e-17
const testcase_hyperg<double>
data085[19] =
{
{ 0.92211295632330392, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.92975727737040625, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.93761992348333489, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.94571346180587790, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.95405164371146900, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.96264956879205976, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.96264956879205987, 1.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 0.97152388013493107, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.98069299877709348, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.99017740778385854, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0101865087004833, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0207660479892111, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0317718013185031, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0432419144892398, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0552206786504446, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0677601383233675, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0809223485579968, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0947826783002668, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.1094349304493603, 1.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler085 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.7763568394002505e-15
// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// mean(f - f_GSL): -1.1102230246251565e-16
+// variance(f - f_GSL): 1.6263408419269992e-31
+// stddev(f - f_GSL): 4.0327916409442719e-16
const testcase_hyperg<double>
data086[19] =
{
{ 0.52631578947368429, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.55555555555555558, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.58823529411764708, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.62500000000000000, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.66666666666666663, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.71428571428571430, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.76923076923076927, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.76923076923076938, 1.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.83333333333333337, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.90909090909090906, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1111111111111112, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.2500000000000000, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2500000000000002, 1.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.4285714285714286, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 1.6666666666666663, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6666666666666672, 1.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.5000000000000004, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 3.3333333333333330, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3.3333333333333353, 1.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 5.0000000000000009, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 9.9999999999999929, 1.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 10.000000000000016, 1.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler086 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.6645352591003757e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2228571846595251e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2228571846595245e-15
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 3.9117076299443059e-31
+// stddev(f - f_GSL): 6.2543645799907651e-16
const testcase_hyperg<double>
data087[19] =
{
{ 0.70351947549341554, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.72637503722092756, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.75099661564391240, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.77761647796730871, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.80651221621216473, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.83801894346580241, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.87254582050258456, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.91059888544083678, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.95281329145592386, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0532154477379738, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1138692114741471, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1838976095305187, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.2660586631630237, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2660586631630240, 1.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.3644676665613118, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.4856585347316102, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.6409590443536872, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.8528798927325769, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 2.1789423102929644, 1.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.1789423102929653, 1.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler087 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3538225385592644e-16
+// max(|f - f_GSL| / |f_GSL|): 4.3538225385592634e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 2.7879556642648860e-32
+// stddev(f - f_GSL): 1.6697172408120142e-16
const testcase_hyperg<double>
data088[19] =
{
{ 0.78068027379106275, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.79924541976981278, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.81891305585650975, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.83979799626213247, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.86203315303160111, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.88577352485361693, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.91120135738402230, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.93853291956703588, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.96802755388922956, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0348375559194773, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0730246119544820, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1151788396279341, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1621066403893472, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.2148922218710421, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2750496810838674, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.3448048570872917, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.4276833109859521, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 1.5299976259379788, 1.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5299976259379793, 1.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler088 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.3297369954770822e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
const testcase_hyperg<double>
data089[19] =
{
{ 0.82510759951857615, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.84072786892782070, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.85710884896562356, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.87431674418118244, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89242659229726995, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.91152392685930350, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.93170685950993570, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95308871926790661, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97580144325325802, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0258682619030324, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0536269616706000, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0835447330793833, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1159538758396654, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1512736659291880, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.1900463690116090, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.2329961591622411, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.2811334345669059, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1.3359629014132051, 1.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.3359629014132053, 1.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler089 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.6160879869309861e-16
+// mean(f - f_GSL): -9.9335744308566638e-17
+// variance(f - f_GSL): 5.7865497484383223e-34
+// stddev(f - f_GSL): 2.4055248384579866e-17
const testcase_hyperg<double>
data090[19] =
{
{ 0.85426123653345876, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.86774543390930414, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.88178859537254239, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.89643269097060951, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.91172456687216819, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.92771674975966123, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.94446842993888647, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.94446842993888669, 1.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.96204667481937678, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.98052794339012128, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0205643671068179, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0423395201078882, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0654651277885334, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0901078068101382, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.1164691415928940, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.1447972335326551, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 1.1754040384534161, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 1.1754040384534163, 1.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.2086928679893112, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.2452055640510711, 1.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler090 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.0927261579781771e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4735287697491276e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4735287697491136e-15
+// mean(f - f_GSL): 2.2384433488073944e-13
+// variance(f - f_GSL): 8.7776754524932496e-25
+// stddev(f - f_GSL): 9.3689249396572984e-13
const testcase_hyperg<double>
data091[19] =
{
{ 0.25646288779245086, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.28273129096174376, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.31438201170962982, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.35308837890625017, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.40123456790123452, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.46230737192836308, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.46230737192836352, 1.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.54156016946185348, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.64718364197530875, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.79246636158732342, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3103947568968148, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.8017578125000004, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.8017578125000016, 1.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.6374427321949185, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 4.1975308641975282, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 4.1975308641975335, 1.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 7.4999999999999964, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 15.859375000000012, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 43.734567901234513, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 43.734567901234662, 1.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 194.99999999999994, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 2777.4999999999832, 1.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2777.5000000000095, 1.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler091 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3117712044801915e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3117712044801870e-15
+// mean(f - f_GSL): 2.6586919800234010e-15
+// variance(f - f_GSL): 9.3704625500915006e-29
+// stddev(f - f_GSL): 9.6801149528771092e-15
const testcase_hyperg<double>
data092[19] =
{
{ 0.46398891966759009, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.49382716049382724, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.52768166089965407, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.56640625000000000, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.61111111111111094, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.66326530612244905, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.72485207100591698, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.66326530612244916, 1.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.72485207100591709, 1.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.79861111111111094, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.88842975206611552, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1419753086419753, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.3281249999999998, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3281250000000000, 1.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.5816326530612239, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.9444444444444444, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.9444444444444458, 1.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.5000000000000000, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 3.4374999999999996, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 5.2777777777777715, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 5.2777777777777786, 1.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 9.9999999999999947, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 32.499999999999837, 1.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 32.499999999999950, 1.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler092 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 6.2172489379008766e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2433022037532461e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2433022037532449e-15
+// mean(f - f_GSL): 4.7330560523493520e-16
+// variance(f - f_GSL): 1.9347679480514595e-30
+// stddev(f - f_GSL): 1.3909593624730594e-15
const testcase_hyperg<double>
data093[19] =
{
{ 0.57476744883397490, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.60302731682513966, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.63425708719096374, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.66895764182970430, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.70775063063963473, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.75141762103495924, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.80095569442603298, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.75141762103495946, 1.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.80095569442603320, 1.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.85765823887436754, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.92323549576335540, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0911622464839472, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.2013226178607666, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2013226178607672, 1.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.3373332072682687, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.5099074378209716, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.5099074378209718, 1.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.7368822229245819, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.0505871832661429, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 2.5172389775867967, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.5172389775867976, 1.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.3015631983556144, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 5.0005935155044519, 1.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.0005935155044563, 1.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler093 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 3.1086244689504383e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1989697058841889e-15
+// max(|f - f_GSL| / |f_GSL|): 1.1989697058841885e-15
+// mean(f - f_GSL): 1.8114165138620975e-16
+// variance(f - f_GSL): 5.0257085585043856e-31
+// stddev(f - f_GSL): 7.0892232003967721e-16
const testcase_hyperg<double>
data094[19] =
{
{ 0.64582752605387983, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.67184161997264191, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.70012779922368040, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.73100784656910278, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.76486919089091066, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.80218301124334557, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.84352883533234413, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.80218301124334590, 1.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.84352883533234391, 1.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.88962858902212572, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.94139473468584123, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0669812691939897, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1443996012177726, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2350966976721314, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.3431264370409088, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.4745266814162399, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.6388137104840066, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 1.8522074849776518, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8522074849776522, 1.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.1458016978417458, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 2.5927464669826339, 1.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.5927464669826348, 1.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler094 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 1.1102230246251565e-15
// max(|f - f_GSL| / |f_GSL|): 5.6896158687269898e-16
+// mean(f - f_GSL): 4.0902953538821554e-17
+// variance(f - f_GSL): 6.7053897759671623e-32
+// stddev(f - f_GSL): 2.5894767378694795e-16
const testcase_hyperg<double>
data095[19] =
{
{ 0.69583236336670584, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.71968920666899716, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.74533885416044232, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.77300145361503070, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.80293630810919447, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.83545132638592001, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.83545132638592057, 1.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 0.87091544744412497, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.90977522877919847, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.95257738192069130, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0528968282789379, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.1123617169062123, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.1798254572896132, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.2572069000522696, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2572069000522701, 1.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.3471600884974377, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.4535032279573519, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 1.5820245752814948, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 1.5820245752814950, 1.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.7421756366906538, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 1.9513145531098233, 1.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.9513145531098235, 1.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler095 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 2.0861625671386719e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6897916810721311e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6897916810721003e-15
+// mean(f - f_GSL): 1.0989192059253727e-08
+// variance(f - f_GSL): 2.2903477685061008e-15
+// stddev(f - f_GSL): 4.7857577963224392e-08
const testcase_hyperg<double>
data096[19] =
{
{ 0.12307420104127866, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.13818870041457434, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.15739165631811705, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.18249038606882081, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.21644171225027795, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.26433326159804132, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.33544459430654539, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.26433326159804149, 1.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.33544459430654527, 1.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.44788516696232511, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.63989153514168373, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.7568608796813312, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 3.5836558871799027, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.5836558871799102, 1.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 8.8077526749963226, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 27.285841702089190, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 27.285841702089265, 1.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 113.55555555555557, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 706.24023437500091, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 8064.1687976651992, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 8064.1687976652511, 1.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 271267.22222222196, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 123456789.99999890, 1.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 123456790.00000113, 1.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler096 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.6193447411060333e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6039867544159931e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6039867544159698e-15
+// mean(f - f_GSL): 1.3861181208677695e-11
+// variance(f - f_GSL): 3.6088481925089110e-21
+// stddev(f - f_GSL): 6.0073689686158877e-11
const testcase_hyperg<double>
data097[19] =
{
{ 0.28363728383055781, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.30933003169808387, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.33998437757128797, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.37713553224291113, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.42299736538419669, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.48086597727600067, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.55583495759293045, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.48086597727600089, 1.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.55583495759293033, 1.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.65612850114039678, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.79573668772968142, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3184712058058303, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.8576958065941214, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.8576958065941236, 1.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.8759509651764228, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 5.1046225531822182, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 5.1046225531822289, 1.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 11.095238095238095, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 32.797154017857174, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 158.01935680536477, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 158.01935680536548, 1.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1815.9523809523814, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 163302.14285714156, 1.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 163302.14285714392, 1.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler097 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 2.0463630789890885e-12
-// max(|f - f_GSL| / |f_GSL|): 1.5238873992472010e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5238873992471854e-15
+// mean(f - f_GSL): 1.1027436274066292e-13
+// variance(f - f_GSL): 2.1981589761266991e-25
+// stddev(f - f_GSL): 4.6884528110312674e-13
const testcase_hyperg<double>
data098[19] =
{
{ 0.39006633302741811, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.41898885698103278, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.45245557983812590, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.49160548618861627, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.53798419230517991, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.59373881442067322, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.66193391357076126, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.66193391357076092, 1.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.74708402736952118, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.85609281019430605, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1974451135148187, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.4820886036706347, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.4820886036706358, 1.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.9201183180477521, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 2.6569338297733336, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.6569338297733367, 1.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 4.0634920634920650, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 7.3102678571428568, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 17.512574302697733, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 17.512574302697782, 1.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 74.206349206349131, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 1342.8571428571363, 1.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1342.8571428571502, 1.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler098 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.8159700933611020e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4210854715202060e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4210854715201975e-15
+// mean(f - f_GSL): 4.6395635871177596e-15
+// variance(f - f_GSL): 3.1697222627622662e-28
+// stddev(f - f_GSL): 1.7803713833810816e-14
const testcase_hyperg<double>
data099[19] =
{
{ 0.46726928123633210, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.49687547629934464, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.53045208856322223, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.56884765624999989, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.61316872427983504, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.66488500161969566, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.72598998634501577, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.66488500161969544, 1.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.72598998634501621, 1.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.79925411522633760, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.88863845062192182, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1423563481176653, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.3302951388888888, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3302951388888891, 1.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.5889212827988335, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.9650205761316870, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.9650205761316886, 1.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.5555555555555549, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 3.5937500000000013, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 5.7818930041152203, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 5.7818930041152274, 1.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 12.222222222222220, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 54.999999999999780, 1.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 55.000000000000114, 1.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler099 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 1.7763568394002505e-15
// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// mean(f - f_GSL): -1.1102230246251565e-16
+// variance(f - f_GSL): 1.6263408419269992e-31
+// stddev(f - f_GSL): 4.0327916409442719e-16
const testcase_hyperg<double>
data100[19] =
{
{ 0.52631578947368429, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.55555555555555558, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.58823529411764708, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.62500000000000000, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.66666666666666663, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.71428571428571430, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.76923076923076927, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.76923076923076938, 1.0000000000000000, 10.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.83333333333333337, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.90909090909090906, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.1111111111111112, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.2500000000000000, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2500000000000002, 1.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.4285714285714286, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.6666666666666663, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6666666666666672, 1.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 2.0000000000000000, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 2.5000000000000004, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 3.3333333333333330, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 3.3333333333333353, 1.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 5.0000000000000009, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 9.9999999999999929, 1.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 10.000000000000016, 1.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler100 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1024.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7510400000000382e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7510399999999635e-15
+// mean(f - f_GSL): 53.894788252704814
+// variance(f - f_GSL): 55188.204676932175
+// stddev(f - f_GSL): 234.92169903381034
const testcase_hyperg<double>
data101[19] =
{
{ 0.058479236576646311, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.065788544763137821, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.075184824937824482, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.087707688693157121, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.10521567442213345, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.13135877960541550, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.17423854066297098, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.13135877960541509, 1.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.17423854066297137, 1.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.25492082527223520, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.44025895219654843, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.3698615820910360, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 17.997089220808483, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 17.997089220808562, 1.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 153.73298291118951, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 2159.1667587825627, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2159.1667587825768, 1.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 55188.105263157879, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 3191209.3921857267, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 646910975.29152656, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 646910975.29153574, 1.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1254834626850.2659, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 5.8479532163741414e+17, 1.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.8479532163743910e+17, 1.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler101 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.21875000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5452521875000274e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5452521874999694e-15
+// mean(f - f_GSL): 0.011513220685868108
+// variance(f - f_GSL): 0.0025185017633005862
+// stddev(f - f_GSL): 0.050184676578618956
const testcase_hyperg<double>
data102[19] =
{
{ 0.15519511120894958, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.17197165701692893, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.19276847315207329, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.21920107206179093, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.25386158960390576, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.30115970686600674, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.36916408142057106, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.30115970686600663, 1.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.36916408142057128, 1.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.47406175901569547, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.65237908266239919, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.8227213362622299, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 4.3716358339791332, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 4.3716358339791430, 1.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 15.670841312959222, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 94.742651122760179, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 94.742651122760662, 1.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1081.7275541795671, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 27809.787731465960, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2329811.1715181042, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2329811.1715181284, 1.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1537787532.6780224, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 141562653506999.88, 1.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 141562653507005.19, 1.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler102 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.00024414062500000000
-// max(|f - f_GSL| / |f_GSL|): 1.6763226855512825e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6763226855512285e-15
+// mean(f - f_GSL): 1.2849899481406474e-05
+// variance(f - f_GSL): 3.1370759089735494e-09
+// stddev(f - f_GSL): 5.6009605506319623e-05
const testcase_hyperg<double>
data103[19] =
{
{ 0.23253645591196551, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.25484220947068342, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.28181987881113812, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.31508211677735770, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.35706285886959610, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.41160053409238206, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.48508083111181960, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.41160053409238190, 1.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.48508083111181938, 1.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.58885194371375260, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.74482241684585782, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.4700356864367146, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 2.4955144453055143, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.4955144453055174, 1.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 5.3506594845833471, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 16.618413752184221, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 16.618413752184267, 1.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 89.310629514963878, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1029.3439900542960, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 35659.847863372350, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 35659.847863372670, 1.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 8009309.6233230168, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 145640590027.39731, 1.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 145640590027.40201, 1.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler103 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.1525573730468750e-07
-// max(|f - f_GSL| / |f_GSL|): 1.7237966704608456e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7237966704607975e-15
+// mean(f - f_GSL): 3.7648905688931523e-08
+// variance(f - f_GSL): 2.6925522675291747e-14
+// stddev(f - f_GSL): 1.6408998347032566e-07
const testcase_hyperg<double>
data104[19] =
{
{ 0.29614148314592509, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.32176277356430805, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.35217870475550511, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.38885270445515113, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.43389978380608418, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.49048612522269458, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.49048612522269414, 1.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.56355539635634599, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.66123153239117671, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.79773363961895416, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3245132157016595, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.9065148749742076, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.9065148749742094, 1.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 3.1328798652457452, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 6.4172532944033476, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 6.4172532944033636, 1.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 19.071683734222436, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 104.41989641582512, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 1510.5743992324240, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1510.5743992324351, 1.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 115518.14360562043, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 414930455.29173034, 1.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 414930455.29174191, 1.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler104 = 2.5000000000000020e-13;
// Test data for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.6566128730773926e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6665618165272271e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6665618165271877e-15
+// mean(f - f_GSL): 2.4523176471958370e-10
+// variance(f - f_GSL): 1.1411894517911952e-18
+// stddev(f - f_GSL): 1.0682646918208967e-09
const testcase_hyperg<double>
data105[19] =
{
{ 0.34954259539177701, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.37714038609235134, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.40942091659748781, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.44767109606846422, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.49368984777532227, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.55006638216982295, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.62065830207408890, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.55006638216982318, 1.0000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.62065830207408901, 1.0000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.71145554513583764, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.83223839666914623, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.2466748028187731, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.6386752725021749, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.6386752725021760, 1.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 2.3340068725479681, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 3.7848108613132054, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 3.7848108613132099, 1.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 7.6754638550304133, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 23.344217312927277, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 149.83491198246921, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 149.83491198246998, 1.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 3936.9253501916060, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 2794143.5036480185, 1.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 2794143.5036480846, 1.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler105 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data106[19] =
{
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler106 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data107[19] =
{
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler107 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data108[19] =
{
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler108 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data109[19] =
{
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler109 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data110[19] =
{
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler110 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 1.0379748752908049e-32
+// stddev(f - f_GSL): 1.0188105198175002e-16
const testcase_hyperg<double>
data111[19] =
{
{ 0.72547625011001171, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.74535599249992990, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.76696498884737041, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.79056941504209477, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.81649658092772603, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.84515425472851657, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.87705801930702920, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.87705801930702931, 2.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.91287092917527690, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.95346258924559224, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0540925533894598, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1180339887498949, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1952286093343938, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 1.2909944487358056, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2909944487358058, 2.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.4142135623730949, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.5811388300841900, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1.8257418583505536, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8257418583505542, 2.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.2360679774997898, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 3.1622776601683782, 2.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 3.1622776601683817, 2.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler111 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0893602609058104e-16
+// max(|f - f_GSL| / |f_GSL|): 3.0893602609058095e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 1.0379748752908049e-32
+// stddev(f - f_GSL): 1.0188105198175002e-16
const testcase_hyperg<double>
data112[19] =
{
{ 0.83664260086443765, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.85046584300227079, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.86509574979651649, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.88062082573041911, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89714464248521597, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.91478946588967591, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.93370105322348573, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91478946588967569, 2.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.93370105322348607, 2.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95405511057700887, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97606616007978142, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0261916902334731, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0550723519434702, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0872106588188091, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.1233801699379020, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.1233801699379022, 2.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1646752981725688, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2127272514219511, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.2701518651068637, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3416407864998725, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 1.4374795179111102, 2.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.4374795179111106, 2.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler112 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.3853500746952663e-16
+// mean(f - f_GSL): -5.2589511692770570e-17
+// variance(f - f_GSL): 1.6218357426418827e-34
+// stddev(f - f_GSL): 1.2735131497718753e-17
const testcase_hyperg<double>
data113[19] =
{
{ 0.88195381730235822, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.89265078469555081, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.90382937908303673, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.91553161389880600, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.92780530349281509, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.94070521140346008, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.95429450630523383, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.94070521140346020, 2.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.96864663325785849, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98384775588541795, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0172258496884334, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.0356742479163459, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0356742479163461, 2.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0555293036908924, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0770231491562379, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1004557416484888, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.1262270515731978, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1.1548932919125086, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.1548932919125088, 2.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1872757758134724, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.2247091713458949, 2.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler113 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2746445692007949e-16
+// mean(f - f_GSL): -4.6746232615796062e-17
+// variance(f - f_GSL): 1.2814504633219814e-34
+// stddev(f - f_GSL): 1.1320116886861114e-17
const testcase_hyperg<double>
data114[19] =
{
{ 0.90716919697107279, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.91592299407142508, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.92500027075874192, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.93442464185467122, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.94422248683737076, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.95442341810133324, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.96506085725516355, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.97617275213704069, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.98780247986309799, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0128233505813447, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0263406246541855, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0406326381700366, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0557966239802845, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0719515075786321, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0892457392422055, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.1078695188000958, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1280752258974340, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.1502152002706476, 2.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler114 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4848478782807992e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 5.0056658723514899e-35
+// stddev(f - f_GSL): 7.0750730542881960e-18
const testcase_hyperg<double>
data115[19] =
{
{ 0.92336416053263082, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.93078397248364542, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.93843714333600259, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.94633837784068098, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.95450388104967876, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.96295158125742752, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.97170139827854318, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.97170139827854329, 2.0000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.98077556918512687, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.99019904777750845, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0102104261941198, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0208669540935695, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0320118665407505, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0436944599504387, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0559728828278145, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0689166967761712, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0826105758119842, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0971599106346146, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.1126998828023964, 2.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler115 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.7763568394002505e-15
// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// mean(f - f_GSL): -1.1102230246251565e-16
+// variance(f - f_GSL): 1.6263408419269992e-31
+// stddev(f - f_GSL): 4.0327916409442719e-16
const testcase_hyperg<double>
data116[19] =
{
{ 0.52631578947368429, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.55555555555555558, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.58823529411764708, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.62500000000000000, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.66666666666666663, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.71428571428571430, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.76923076923076927, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.76923076923076938, 2.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.83333333333333337, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.90909090909090906, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1111111111111112, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.2500000000000000, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2500000000000002, 2.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.4285714285714286, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 1.6666666666666663, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6666666666666672, 2.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.5000000000000004, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 3.3333333333333330, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3.3333333333333353, 2.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 5.0000000000000009, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 9.9999999999999929, 2.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 10.000000000000016, 2.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler116 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.6645352591003757e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2228571846595251e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2228571846595245e-15
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 3.9117076299443059e-31
+// stddev(f - f_GSL): 6.2543645799907651e-16
const testcase_hyperg<double>
data117[19] =
{
{ 0.70351947549341554, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.72637503722092756, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.75099661564391240, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.77761647796730871, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.80651221621216473, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.83801894346580241, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.87254582050258456, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.91059888544083678, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.95281329145592386, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0532154477379738, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1138692114741471, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1838976095305187, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.2660586631630237, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2660586631630240, 2.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.3644676665613118, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.4856585347316102, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.6409590443536872, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.8528798927325769, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 2.1789423102929644, 2.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.1789423102929653, 2.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler117 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3538225385592644e-16
+// max(|f - f_GSL| / |f_GSL|): 4.3538225385592634e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 2.7879556642648860e-32
+// stddev(f - f_GSL): 1.6697172408120142e-16
const testcase_hyperg<double>
data118[19] =
{
{ 0.78068027379106275, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.79924541976981278, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.81891305585650975, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.83979799626213247, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.86203315303160111, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.88577352485361693, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.91120135738402230, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.93853291956703588, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.96802755388922956, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0348375559194773, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0730246119544820, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1151788396279341, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1621066403893472, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.2148922218710421, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2750496810838674, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.3448048570872917, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.4276833109859521, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 1.5299976259379788, 2.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5299976259379793, 2.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler118 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.3297369954770822e-16
+// mean(f - f_GSL): -2.9216395384872539e-17
+// variance(f - f_GSL): 3.7021904791911625e-33
+// stddev(f - f_GSL): 6.0845628266878486e-17
const testcase_hyperg<double>
data119[19] =
{
{ 0.82510759951857615, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.84072786892782070, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.85710884896562356, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.87431674418118244, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.89242659229726995, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.91152392685930350, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.93170685950993570, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.95308871926790661, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97580144325325802, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0258682619030324, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0536269616706000, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0835447330793833, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1159538758396654, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.1512736659291880, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.1900463690116090, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.2329961591622411, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.2811334345669059, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1.3359629014132051, 2.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.3359629014132053, 2.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler119 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.6160879869309861e-16
+// mean(f - f_GSL): -9.9335744308566638e-17
+// variance(f - f_GSL): 5.7865497484383223e-34
+// stddev(f - f_GSL): 2.4055248384579866e-17
const testcase_hyperg<double>
data120[19] =
{
{ 0.85426123653345876, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.86774543390930414, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.88178859537254239, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.89643269097060951, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.91172456687216819, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.92771674975966123, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.94446842993888647, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.94446842993888669, 2.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.96204667481937678, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.98052794339012128, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0205643671068179, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0423395201078882, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0654651277885334, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0901078068101382, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.1164691415928940, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.1447972335326551, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 1.1754040384534161, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 1.1754040384534163, 2.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.2086928679893112, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.2452055640510711, 2.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler120 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 4.2632564145606064e-16
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605876e-16
+// mean(f - f_GSL): -2.0334611187871286e-15
+// variance(f - f_GSL): 9.6658815324267986e-29
+// stddev(f - f_GSL): 9.8315215162388766e-15
const testcase_hyperg<double>
data121[19] =
{
{ 0.27700831024930750, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.30864197530864196, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.34602076124567477, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.39062499999999994, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.44444444444444442, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.51020408163265307, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.59171597633136097, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.59171597633136108, 2.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.69444444444444453, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.82644628099173545, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.2345679012345681, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.5624999999999998, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.5625000000000007, 2.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.0408163265306127, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 2.7777777777777768, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.7777777777777790, 2.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 4.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 6.2500000000000036, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 11.111111111111109, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 11.111111111111123, 2.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 25.000000000000007, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 99.999999999999872, 2.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 100.00000000000031, 2.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler121 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 7.9936057773011271e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3252801810681365e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3252801810681345e-15
+// mean(f - f_GSL): 6.0185774492837438e-16
+// variance(f - f_GSL): 3.2040766682334655e-30
+// stddev(f - f_GSL): 1.7899934827349136e-15
const testcase_hyperg<double>
data122[19] =
{
{ 0.50515448477320835, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.53674994210078020, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.57194655162437413, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.61137322330312327, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.65581297297972585, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.70625323977290944, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.70625323977290955, 2.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.76395739449542666, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.83056871002513311, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.90826553449323655, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1098784992198341, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.2437942741831700, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2437942741831702, 2.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.4105343768544543, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.6238435648986016, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6238435648986023, 2.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.9065970003160624, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.3001951284393627, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2.8891774744673464, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.8891774744673469, 2.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.8827206436045336, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 6.0316345867773542, 2.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 6.0316345867773640, 2.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler122 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 3.1086244689504383e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2095468681839719e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2095468681839713e-15
+// mean(f - f_GSL): 1.7529837230923525e-16
+// variance(f - f_GSL): 5.0457912899842598e-31
+// stddev(f - f_GSL): 7.1033733465053492e-16
const testcase_hyperg<double>
data123[19] =
{
{ 0.61824560969673270, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.64645665839161026, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.67712272792612116, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.71058076074636822, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.74723387423852838, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.78756892188863170, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.83218012557592713, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.83218012557592669, 2.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.88180144818204143, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.93735184459468934, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0712594799044883, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.1531330932162096, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.1531330932162098, 2.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2483404191094898, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.3606934909972501, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.3606934909972506, 2.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.4957544469027071, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.6620777107871287, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1.8738132387064506, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8738132387064512, 2.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.1570670242247409, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 2.5700735959225494, 2.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.5700735959225507, 2.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler123 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.1102230246251565e-15
// max(|f - f_GSL| / |f_GSL|): 6.1065577401595934e-16
+// mean(f - f_GSL): 2.3373116307898031e-17
+// variance(f - f_GSL): 6.9270406607948860e-32
+// stddev(f - f_GSL): 2.6319271761952090e-16
const testcase_hyperg<double>
data124[19] =
{
{ 0.68776713859043437, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.71280582849489893, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.73962983054724896, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.76844343025262063, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.79948476671182900, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.83303347721461263, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.86942060391338771, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.83303347721461252, 2.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.86942060391338805, 2.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.90904161711581655, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.95237381468647742, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0526413941912305, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1112045278881502, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1768500306393046, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.2510971588297888, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2510971588297890, 2.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.3359896747789315, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.4343740183432725, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.5504011881337365, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.6905307012604318, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1.8658920279264424, 2.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.8658920279264428, 2.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler124 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 2.7923027351444343e-16
+// max(|f - f_GSL| / |f_GSL|): 2.7923027351444333e-16
+// mean(f - f_GSL): -1.7529837230923523e-17
+// variance(f - f_GSL): 1.2496144283738261e-32
+// stddev(f - f_GSL): 1.1178615425775349e-16
const testcase_hyperg<double>
data125[19] =
{
{ 0.73530262886958797, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.75768898977673649, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.78143483544640080, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.80667428603297209, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.83356078772438313, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.86227093001346189, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.86227093001346156, 2.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 0.89300925500556971, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.92601438873425990, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.96156696230910810, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0417127776179342, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0871896789480930, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.1370264514689949, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.1919677804049154, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.1919677804049158, 2.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.2529628761065934, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.3212511796458866, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.3985017309668506, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.4870567523847895, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 1.5904049523738040, 2.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5904049523738044, 2.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler125 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
+// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// mean(f - f_GSL): -2.8272994325845583e-12
+// variance(f - f_GSL): 1.7985402567071545e-22
+// stddev(f - f_GSL): 1.3410966619551160e-11
const testcase_hyperg<double>
data126[19] =
{
{ 0.040386107340619266, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.052922149401344633, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.070429627772374270, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.095367431640624972, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.13168724279835387, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.18593443208187066, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.26932907434290437, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.26932907434290460, 2.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.40187757201646096, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.62092132305915493, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.6935087808430296, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 3.0517578124999991, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.0517578125000036, 2.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 5.9499018266198629, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 12.860082304526737, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 12.860082304526765, 2.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 32.000000000000000, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 97.656250000000114, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 411.52263374485580, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 411.52263374485722, 2.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 3124.9999999999991, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 99999.999999999665, 2.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 100000.00000000073, 2.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler126 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 6.8212102632969618e-13
-// max(|f - f_GSL| / |f_GSL|): 1.2402200478721823e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2402200478721734e-15
+// mean(f - f_GSL): 3.8805216350187710e-14
+// variance(f - f_GSL): 2.4269288259327869e-26
+// stddev(f - f_GSL): 1.5578603358237179e-13
const testcase_hyperg<double>
data127[19] =
{
{ 0.21140107887447138, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.24005486968449927, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.27478119275391810, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.31738281250000006, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.37037037037037024, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.43731778425655959, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.52344105598543467, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.63657407407407429, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.78888054094665638, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3031550068587108, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.7578125000000002, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.7578125000000011, 2.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.4781341107871717, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 3.7037037037037037, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 3.7037037037037073, 2.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 5.9999999999999982, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 10.937500000000005, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 24.074074074074076, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 24.074074074074115, 2.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 74.999999999999957, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 549.99999999999670, 2.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 550.00000000000068, 2.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler127 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 4.9737991503207013e-14
-// max(|f - f_GSL| / |f_GSL|): 1.6580642616864663e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6580642616864621e-15
+// mean(f - f_GSL): 3.1612139806432088e-15
+// variance(f - f_GSL): 1.2721767865228917e-28
+// stddev(f - f_GSL): 1.1279081463146242e-14
const testcase_hyperg<double>
data128[19] =
{
{ 0.33250915203252129, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.36566851047721943, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.40414812182437959, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.44916943268118498, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.50233081077479547, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.56575808728873334, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.64233106844971433, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.64233106844971455, 2.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.73603371116919514, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.85251256240112439, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1909065696197674, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.4447095285569311, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.4447095285569318, 2.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.7935243137840653, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 2.2937035820494454, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.2937035820494467, 2.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 3.0524711083016687, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 4.2976512669354259, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 6.5977107563194677, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 6.5977107563194739, 2.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 11.793747206577530, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 29.997625937982058, 2.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 29.997625937982132, 2.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler128 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.1546319456101628e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4852319937858947e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4852319937858925e-15
+// mean(f - f_GSL): 8.4143218708432912e-16
+// variance(f - f_GSL): 6.7200543747068026e-30
+// stddev(f - f_GSL): 2.5923067670911948e-15
const testcase_hyperg<double>
data129[19] =
{
{ 0.42108197362250294, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.45503172013983040, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.49345609813624314, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.53720880551221295, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.58736431524847466, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.64529222467897973, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.71276337354393937, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.64529222467897995, 2.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.71276337354393959, 2.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.79210466220795306, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.88643063455510596, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1387832139040652, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.3114025920844752, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3114025920844754, 2.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.5307655016768162, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.8170727950333345, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.8170727950333352, 2.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.2037865486700836, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.7506766056439380, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 3.5764534935716972, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3.5764534935716998, 2.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 4.9587762302155403, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 7.7740847924166800, 2.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 7.7740847924166907, 2.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler129 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-15
-// max(|f - f_GSL| / |f_GSL|): 1.0721199711322771e-15
+// max(|f - f_GSL| / |f_GSL|): 1.0721199711322765e-15
+// mean(f - f_GSL): 3.2722362831057244e-16
+// variance(f - f_GSL): 9.9235523879654241e-31
+// stddev(f - f_GSL): 9.9617028604377807e-16
const testcase_hyperg<double>
data130[19] =
{
{ 0.48860241312958436, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.52193382517068487, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.55902375003954219, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.60049055150230324, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.64709127927203469, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.69976233335368987, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.75967529501080999, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.75967529501080988, 2.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.82831498895254407, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.90759090169653933, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.1088712278667465, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.2387445478440853, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2387445478440855, 2.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.3959812720437546, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.5897930661091164, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.5897930661091169, 2.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.8340789380307454, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 2.1509548085970764, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 2.5782406951207504, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 2.5782406951207526, 2.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 3.1877847194242737, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 4.1421596631676900, 2.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 4.1421596631676918, 2.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler130 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.2888183593750000e-05
+// max(|f - f_GSL|): 1.3351440429687500e-05
// max(|f - f_GSL| / |f_GSL|): 2.8610229492187516e-15
+// mean(f - f_GSL): -7.0123832224240743e-07
+// variance(f - f_GSL): 9.3843353513115960e-12
+// stddev(f - f_GSL): 3.0633862556510231e-06
const testcase_hyperg<double>
data131[19] =
{
{ 0.0016310376661280216, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0028007538972582421, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0049603324681551939, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0090949470177292789, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.017341529915832606, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.034571613033607777, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.072538150286405714, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.072538150286405839, 2.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.16150558288984579, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.38554328942953148, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 2.8679719907924444, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 9.3132257461547816, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 9.3132257461548065, 2.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 35.401331746414378, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 165.38171687920172, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 165.38171687920246, 2.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1024.0000000000000, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 9536.7431640625200, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 169350.87808430271, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 169350.87808430390, 2.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 9765624.9999999944, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 9999999999.9999332, 2.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 10000000000.000147, 2.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler131 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.4958811384436855e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4958811384436608e-15
+// mean(f - f_GSL): 7.8582771868621203e-10
+// variance(f - f_GSL): 1.1683981923411271e-17
+// stddev(f - f_GSL): 3.4181840095891958e-09
const testcase_hyperg<double>
data132[19] =
{
{ 0.071191280690193537, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.085646504654238384, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.10478215656371109, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.13074816337653578, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.16701141666848118, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.21939323375313968, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.29813515331786616, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.21939323375313963, 2.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.29813515331786639, 2.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.42225974638874397, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.62942145962174878, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.7218685262373197, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 3.2855760483514689, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.2855760483514738, 2.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 7.1616652508907093, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 18.612326808485907, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 18.612326808485950, 2.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 61.476190476190474, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 286.27580915178623, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2274.9441142102296, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2274.9441142102414, 2.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 47229.761904761865, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 9961460.7142856438, 2.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 9961460.7142858077, 2.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler132 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 8.7311491370201111e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5843951771650368e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5843951771650161e-15
+// mean(f - f_GSL): 4.6467391338242840e-12
+// variance(f - f_GSL): 4.0072766661644994e-22
+// stddev(f - f_GSL): 2.0018183399510804e-11
const testcase_hyperg<double>
data133[19] =
{
{ 0.14747230019381058, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.17073600100690609, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.19982795745135354, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.23681776864188053, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.28475624360398011, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.34827500743063133, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.34827500743063161, 2.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.43464829159684687, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.55576053438064787, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.73195020913445530, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.4310223867822929, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 2.1742563399057540, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.1742563399057566, 2.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 3.5769231236256043, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 6.5620441134844363, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 6.5620441134844469, 2.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 14.063492063492063, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 38.085937500000036, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 150.92973632068282, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 150.92973632068330, 2.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1212.3015873015852, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 55107.142857142389, 2.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 55107.142857143110, 2.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler133 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.8189894035458565e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4848893090170350e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4848893090170230e-15
+// mean(f - f_GSL): 1.0025898240272861e-13
+// variance(f - f_GSL): 1.7323040416880815e-25
+// stddev(f - f_GSL): 4.1620956760844426e-13
const testcase_hyperg<double>
data134[19] =
{
{ 0.21658059714090577, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.24513539602702861, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.27967018274845046, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.32196044921875022, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.37448559670781911, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.44078856032208824, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.44078856032208802, 2.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.52606701446027793, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.63818158436213956, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.78944971882612769, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3044251384443430, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.7659505208333335, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.7659505208333344, 2.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.5093710953769270, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 3.8065843621399158, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 3.8065843621399202, 2.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 6.3333333333333313, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 12.109375000000004, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 29.115226337448540, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 29.115226337448608, 2.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 108.33333333333330, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1224.9999999999923, 2.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1225.0000000000023, 2.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler134 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 4.2632564145606064e-16
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605876e-16
+// mean(f - f_GSL): -2.0334611187871286e-15
+// variance(f - f_GSL): 9.6658815324267986e-29
+// stddev(f - f_GSL): 9.8315215162388766e-15
const testcase_hyperg<double>
data135[19] =
{
{ 0.27700831024930750, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.30864197530864196, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.34602076124567477, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.39062499999999994, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.44444444444444442, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.51020408163265307, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.59171597633136097, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.59171597633136108, 2.0000000000000000, 10.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.69444444444444453, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.82644628099173545, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.2345679012345681, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.5624999999999998, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.5625000000000007, 2.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 2.0408163265306127, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 2.7777777777777768, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 2.7777777777777790, 2.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 4.0000000000000000, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 6.2500000000000036, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 11.111111111111109, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 11.111111111111123, 2.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 25.000000000000007, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 99.999999999999872, 2.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 100.00000000000031, 2.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler135 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 245760.00000000000
// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): -12934.709704750463
+// variance(f - f_GSL): 3178841667.3467402
+// stddev(f - f_GSL): 56381.217327641483
const testcase_hyperg<double>
data136[19] =
{
{ 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.00030072865982171723, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.0011951964277455193, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.0052617832469731814, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0052617832469732005, 2.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.026084053304588847, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.14864362802414346, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 8.2252633399699757, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 86.736173798840269, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 86.736173798840738, 2.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1253.2542894196865, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 27351.112277912434, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 27351.112277912678, 2.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1048576.0000000000, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 90949470.177293226, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 28679719907.924358, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 28679719907.924767, 2.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 95367431640624.906, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 9.9999999999998657e+19, 2.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.0000000000000292e+20, 2.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler136 = 5.0000000000000039e-13;
// Test data for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 40.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8712609271523571e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8712609271522778e-15
+// mean(f - f_GSL): 2.1052671749403089
+// variance(f - f_GSL): 84.210508462254538
+// stddev(f - f_GSL): 9.1766283820504881
const testcase_hyperg<double>
data137[19] =
{
{ 0.018828092583720632, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.023381944060455365, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.029789623984280887, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.039191021482500567, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.053727813036721528, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.077762010061669079, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.12110505620123306, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.077762010061668857, 2.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.12110505620123323, 2.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.20870149809080582, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.41429234328785763, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.1308087404153113, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 13.586180626453050, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 13.586180626453100, 2.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 87.117304082784415, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 889.26474381242826, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 889.26474381243384, 2.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 16231.913312693494, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 653537.51168945129, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 87756230.793848589, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 87756230.793849647, 2.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 101493977171.74945, 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 21375960679556916., 2.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 21375960679557820., 2.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler137 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.031250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.6379336164122315e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6379336164121759e-15
+// mean(f - f_GSL): 0.0016447556893365942
+// variance(f - f_GSL): 5.1397960874034849e-05
+// stddev(f - f_GSL): 0.0071692371193896806
const testcase_hyperg<double>
data138[19] =
{
{ 0.049200410661854238, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.059460876757152607, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.073244762686653225, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.092334626017932769, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.11976760350696856, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.16102414609169408, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.22670456785796225, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.16102414609169405, 2.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.22670456785796236, 2.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.33912903252727361, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.55049794600858049, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 2.1254722872032232, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 5.6261213886736172, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 5.6261213886736314, 2.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 20.137315891130996, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 108.04381584643853, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 108.04381584643900, 2.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 992.41692466460245, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 19055.363816004465, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1105471.9504312086, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1105471.9504312191, 2.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 448521363.90608919, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 19078917293639.004, 2.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 19078917293639.652, 2.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler138 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 8.3923339843750000e-05
-// max(|f - f_GSL| / |f_GSL|): 1.8221514326727084e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8221514326726564e-15
+// mean(f - f_GSL): 4.4172143495227617e-06
+// variance(f - f_GSL): 3.7068906120670492e-10
+// stddev(f - f_GSL): 1.9253287023433297e-05
const testcase_hyperg<double>
data139[19] =
{
{ 0.083753547015334884, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.099238444687035743, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.11938294012867748, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.14622683905023329, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.18303556733713028, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.23527764069382412, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.31261681740827085, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.23527764069382415, 2.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.31261681740827069, 2.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.43327581880538862, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.63445840637296680, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.7438842395813297, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 3.5070840938209269, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.5070840938209331, 2.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 8.6573372006089713, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 28.779342118408906, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 28.779342118408998, 2.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 147.50178613955714, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1427.1686016136398, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 36780.643714655642, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 36780.643714655955, 2.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 5313869.6058585485, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 46057280607.381966, 2.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 46057280607.383286, 2.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler139 = 2.5000000000000020e-13;
// Test data for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 5.0663948059082031e-07
-// max(|f - f_GSL| / |f_GSL|): 1.9925479281070174e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9925479281069681e-15
+// mean(f - f_GSL): 2.6669880982017962e-08
+// variance(f - f_GSL): 1.3509399735876687e-14
+// stddev(f - f_GSL): 1.1622994337035826e-07
const testcase_hyperg<double>
data140[19] =
{
{ 0.11920045035073676, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.13907946814302777, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.16431439792559696, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.19698796016986989, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.24028510928790547, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.29926031296483113, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.38229327814229153, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.29926031296483130, 2.0000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.38229327814229175, 2.0000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.50402047283093132, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.69167261179586526, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.5503152253394308, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 2.6469548193635797, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 2.6469548193635828, 2.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 5.1882631330566813, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 12.476792759124516, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 12.476792759124546, 2.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 41.026391565091259, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 220.92584715988204, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 2677.0834450236207, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 2677.0834450236389, 2.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 141774.31260689779, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 254267148.83196995, 2.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 254267148.83197621, 2.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler140 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data141[19] =
{
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler141 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data142[19] =
{
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler142 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data143[19] =
{
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler143 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data144[19] =
{
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler144 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data145[19] =
{
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler145 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.5474735088646412e-13
-// max(|f - f_GSL| / |f_GSL|): 1.5124797514980704e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5124797514980592e-15
+// mean(f - f_GSL): 2.5330614798684493e-14
+// variance(f - f_GSL): 1.0813505961152326e-26
+// stddev(f - f_GSL): 1.0398800873731705e-13
const testcase_hyperg<double>
data146[19] =
{
{ 0.52275983209457544, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.54700336898143009, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.57468955512602038, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.60665490543315048, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.64403057859056190, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.68838183648623730, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.74193265039311129, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.74193265039311118, 5.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.80794095908995300, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.89135275749639320, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1469266219310688, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.3552340708357489, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3552340708357493, 5.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.6690840478838305, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 2.1815415453174483, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.1815415453174500, 5.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 3.1156892546032235, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 5.1109077417760416, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 10.560352936466296, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 10.560352936466318, 5.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 33.541019662496815, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 300.66343065819501, 5.0000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 300.66343065819723, 5.0000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler146 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 8.8817841970012523e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3217255411112326e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3217255411112292e-15
+// mean(f - f_GSL): 6.4276069846719592e-16
+// variance(f - f_GSL): 3.9807057283287990e-30
+// stddev(f - f_GSL): 1.9951706013092712e-15
const testcase_hyperg<double>
data147[19] =
{
{ 0.68252041951139286, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.70394732624993395, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.72748884971552052, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.75351147371199667, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.78247589005573737, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.81497017420249807, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.85175826875009586, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.81497017420249795, 5.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.85175826875009608, 5.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.89385278481745867, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.94262778709507411, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0687327277420910, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1529725508983291, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2592587134058799, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.3985773194637892, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.3985773194637896, 5.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.5909902576697317, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.8776023607249752, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2.3582499003694646, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.3582499003694664, 5.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.3541019662496838, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 6.7198400278577859, 5.0000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 6.7198400278578028, 5.0000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler147 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 2.6645352591003757e-15
// max(|f - f_GSL| / |f_GSL|): 1.2228264607471081e-15
+// mean(f - f_GSL): 1.5776853507831172e-16
+// variance(f - f_GSL): 3.6849910112537625e-31
+// stddev(f - f_GSL): 6.0704126805792717e-16
const testcase_hyperg<double>
data148[19] =
{
{ 0.75755211927082600, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.77603550233010965, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.79596241913438504, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.81753360792105212, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.84099165409805532, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.86663303852180895, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.89482475828629970, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.86663303852180906, 5.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.89482475828629915, 5.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.92602774279590350, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.96083064727087386, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0445570841313008, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.0959004638926031, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.0959004638926033, 5.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1560106261370562, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.2278121770678145, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2278121770678148, 5.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.3158640214709998, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.4278095344155000, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1.5778700502946612, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.5778700502946617, 5.0000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.7972173289196469, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 2.1789970569269732, 5.0000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler148 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2082370290419495e-16
+// max(|f - f_GSL| / |f_GSL|): 4.2082370290419485e-16
+// mean(f - f_GSL): 1.1686558153949016e-17
+// variance(f - f_GSL): 2.5116429081110836e-32
+// stddev(f - f_GSL): 1.5848163641605558e-16
const testcase_hyperg<double>
data149[19] =
{
{ 0.80270093579329460, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.81884974572462765, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.83605266330015260, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.85443340762796027, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.87413762182790711, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.89533826626907287, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.91824276674115290, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.89533826626907298, 5.0000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.91824276674115313, 5.0000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.94310265050720576, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.97022678857609712, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0329098673199812, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0695865684573389, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.1108642103944570, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.1578795055970506, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.2122394794169442, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.2763274721556934, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.3539179650251021, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.4515986118197148, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1.5829284571614219, 5.0000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5829284571614224, 5.0000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler149 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2751041935095266e-16
+// mean(f - f_GSL): -5.8432790769745078e-18
+// variance(f - f_GSL): 3.0454471167386466e-33
+// stddev(f - f_GSL): 5.5185569823447931e-17
const testcase_hyperg<double>
data150[19] =
{
{ 0.83322694172301981, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.84753931604765675, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.86265784532195022, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.87866479300707090, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.89565516540263501, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.91373946207610512, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.93304721345881891, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.93304721345881914, 5.0000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.95373159512905148, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.97597554238828121, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0260752851887982, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0545371197996178, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0858099017045830, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.1204416568688709, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.1591587835964847, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.2029564720303347, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.2532588722007874, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.3122319926925459, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 1.3834948587364100, 5.0000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.3834948587364102, 5.0000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler150 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 4.0927261579781771e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4735287697491276e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4735287697491136e-15
+// mean(f - f_GSL): 2.2384433488073944e-13
+// variance(f - f_GSL): 8.7776754524932496e-25
+// stddev(f - f_GSL): 9.3689249396572984e-13
const testcase_hyperg<double>
data151[19] =
{
{ 0.25646288779245086, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.28273129096174376, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.31438201170962982, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.35308837890625017, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.40123456790123452, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.46230737192836308, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.46230737192836352, 5.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.54156016946185348, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.64718364197530875, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.79246636158732342, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3103947568968148, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1.8017578125000004, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.8017578125000016, 5.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.6374427321949185, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 4.1975308641975282, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 4.1975308641975335, 5.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 7.4999999999999964, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 15.859375000000012, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 43.734567901234513, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 43.734567901234662, 5.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 194.99999999999994, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 2777.4999999999832, 5.0000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2777.5000000000095, 5.0000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler151 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3117712044801915e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3117712044801870e-15
+// mean(f - f_GSL): 2.6586919800234010e-15
+// variance(f - f_GSL): 9.3704625500915006e-29
+// stddev(f - f_GSL): 9.6801149528771092e-15
const testcase_hyperg<double>
data152[19] =
{
{ 0.46398891966759009, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.49382716049382724, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.52768166089965407, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.56640625000000000, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.61111111111111094, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.66326530612244905, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.72485207100591698, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.66326530612244916, 5.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.72485207100591709, 5.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.79861111111111094, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.88842975206611552, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1419753086419753, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.3281249999999998, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3281250000000000, 5.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.5816326530612239, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1.9444444444444444, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.9444444444444458, 5.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.5000000000000000, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 3.4374999999999996, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 5.2777777777777715, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 5.2777777777777786, 5.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 9.9999999999999947, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 32.499999999999837, 5.0000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 32.499999999999950, 5.0000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler152 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 6.2172489379008766e-15
-// max(|f - f_GSL| / |f_GSL|): 1.2433022037532461e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2433022037532449e-15
+// mean(f - f_GSL): 4.7330560523493520e-16
+// variance(f - f_GSL): 1.9347679480514595e-30
+// stddev(f - f_GSL): 1.3909593624730594e-15
const testcase_hyperg<double>
data153[19] =
{
{ 0.57476744883397490, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.60302731682513966, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.63425708719096374, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.66895764182970430, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.70775063063963473, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.75141762103495924, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.80095569442603298, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.75141762103495946, 5.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.80095569442603320, 5.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.85765823887436754, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.92323549576335540, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0911622464839472, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.2013226178607666, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2013226178607672, 5.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.3373332072682687, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.5099074378209716, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.5099074378209718, 5.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.7368822229245819, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.0505871832661429, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 2.5172389775867967, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.5172389775867976, 5.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.3015631983556144, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 5.0005935155044519, 5.0000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.0005935155044563, 5.0000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler153 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 3.1086244689504383e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1989697058841889e-15
+// max(|f - f_GSL| / |f_GSL|): 1.1989697058841885e-15
+// mean(f - f_GSL): 1.8114165138620975e-16
+// variance(f - f_GSL): 5.0257085585043856e-31
+// stddev(f - f_GSL): 7.0892232003967721e-16
const testcase_hyperg<double>
data154[19] =
{
{ 0.64582752605387983, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.67184161997264191, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.70012779922368040, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.73100784656910278, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.76486919089091066, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.80218301124334557, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.84352883533234413, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.80218301124334590, 5.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.84352883533234391, 5.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.88962858902212572, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.94139473468584123, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0669812691939897, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1443996012177726, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2350966976721314, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.3431264370409088, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.4745266814162399, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.6388137104840066, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 1.8522074849776518, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8522074849776522, 5.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.1458016978417458, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 2.5927464669826339, 5.0000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.5927464669826348, 5.0000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler154 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 1.1102230246251565e-15
// max(|f - f_GSL| / |f_GSL|): 5.6896158687269898e-16
+// mean(f - f_GSL): 4.0902953538821554e-17
+// variance(f - f_GSL): 6.7053897759671623e-32
+// stddev(f - f_GSL): 2.5894767378694795e-16
const testcase_hyperg<double>
data155[19] =
{
{ 0.69583236336670584, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.71968920666899716, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.74533885416044232, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.77300145361503070, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.80293630810919447, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.83545132638592001, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.83545132638592057, 5.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 0.87091544744412497, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.90977522877919847, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.95257738192069130, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0528968282789379, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.1123617169062123, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.1798254572896132, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.2572069000522696, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2572069000522701, 5.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.3471600884974377, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.4535032279573519, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 1.5820245752814948, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 1.5820245752814950, 5.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.7421756366906538, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 1.9513145531098233, 5.0000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.9513145531098235, 5.0000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler155 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
+// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// mean(f - f_GSL): -2.8272994325845583e-12
+// variance(f - f_GSL): 1.7985402567071545e-22
+// stddev(f - f_GSL): 1.3410966619551160e-11
const testcase_hyperg<double>
data156[19] =
{
{ 0.040386107340619266, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.052922149401344633, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.070429627772374270, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.095367431640624972, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.13168724279835387, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.18593443208187066, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.26932907434290437, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.26932907434290460, 5.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.40187757201646096, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.62092132305915493, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.6935087808430296, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 3.0517578124999991, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.0517578125000036, 5.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 5.9499018266198629, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 12.860082304526737, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 12.860082304526765, 5.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 32.000000000000000, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 97.656250000000114, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 411.52263374485580, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 411.52263374485722, 5.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 3124.9999999999991, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 99999.999999999665, 5.0000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 100000.00000000073, 5.0000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler156 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 6.8212102632969618e-13
-// max(|f - f_GSL| / |f_GSL|): 1.2402200478721823e-15
+// max(|f - f_GSL| / |f_GSL|): 1.2402200478721734e-15
+// mean(f - f_GSL): 3.8805216350187710e-14
+// variance(f - f_GSL): 2.4269288259327869e-26
+// stddev(f - f_GSL): 1.5578603358237179e-13
const testcase_hyperg<double>
data157[19] =
{
{ 0.21140107887447138, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.24005486968449927, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.27478119275391810, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.31738281250000006, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.37037037037037024, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.43731778425655959, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.52344105598543467, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.63657407407407429, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.78888054094665638, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3031550068587108, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.7578125000000002, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.7578125000000011, 5.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.4781341107871717, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 3.7037037037037037, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 3.7037037037037073, 5.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 5.9999999999999982, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 10.937500000000005, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 24.074074074074076, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 24.074074074074115, 5.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 74.999999999999957, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 549.99999999999670, 5.0000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 550.00000000000068, 5.0000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler157 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 4.9737991503207013e-14
-// max(|f - f_GSL| / |f_GSL|): 1.6580642616864663e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6580642616864621e-15
+// mean(f - f_GSL): 3.1612139806432088e-15
+// variance(f - f_GSL): 1.2721767865228917e-28
+// stddev(f - f_GSL): 1.1279081463146242e-14
const testcase_hyperg<double>
data158[19] =
{
{ 0.33250915203252129, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.36566851047721943, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.40414812182437959, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.44916943268118498, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.50233081077479547, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.56575808728873334, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.64233106844971433, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.64233106844971455, 5.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.73603371116919514, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.85251256240112439, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1909065696197674, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.4447095285569311, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.4447095285569318, 5.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.7935243137840653, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 2.2937035820494454, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.2937035820494467, 5.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 3.0524711083016687, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 4.2976512669354259, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 6.5977107563194677, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 6.5977107563194739, 5.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 11.793747206577530, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 29.997625937982058, 5.0000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 29.997625937982132, 5.0000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler158 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.1546319456101628e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4852319937858947e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4852319937858925e-15
+// mean(f - f_GSL): 8.4143218708432912e-16
+// variance(f - f_GSL): 6.7200543747068026e-30
+// stddev(f - f_GSL): 2.5923067670911948e-15
const testcase_hyperg<double>
data159[19] =
{
{ 0.42108197362250294, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.45503172013983040, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.49345609813624314, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.53720880551221295, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.58736431524847466, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.64529222467897973, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.71276337354393937, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.64529222467897995, 5.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.71276337354393959, 5.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.79210466220795306, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.88643063455510596, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1387832139040652, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.3114025920844752, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3114025920844754, 5.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.5307655016768162, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.8170727950333345, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.8170727950333352, 5.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.2037865486700836, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.7506766056439380, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 3.5764534935716972, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3.5764534935716998, 5.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 4.9587762302155403, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 7.7740847924166800, 5.0000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 7.7740847924166907, 5.0000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler159 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-15
-// max(|f - f_GSL| / |f_GSL|): 1.0721199711322771e-15
+// max(|f - f_GSL| / |f_GSL|): 1.0721199711322765e-15
+// mean(f - f_GSL): 3.2722362831057244e-16
+// variance(f - f_GSL): 9.9235523879654241e-31
+// stddev(f - f_GSL): 9.9617028604377807e-16
const testcase_hyperg<double>
data160[19] =
{
{ 0.48860241312958436, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.52193382517068487, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.55902375003954219, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.60049055150230324, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.64709127927203469, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.69976233335368987, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.75967529501080999, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.75967529501080988, 5.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.82831498895254407, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.90759090169653933, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.1088712278667465, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.2387445478440853, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2387445478440855, 5.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.3959812720437546, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.5897930661091164, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.5897930661091169, 5.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.8340789380307454, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 2.1509548085970764, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 2.5782406951207504, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 2.5782406951207526, 5.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 3.1877847194242737, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 4.1421596631676900, 5.0000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 4.1421596631676918, 5.0000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler160 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.3113021850585938e-06
// max(|f - f_GSL| / |f_GSL|): 2.8467351045253575e-14
+// mean(f - f_GSL): 6.9091057395743787e-08
+// variance(f - f_GSL): 9.0489756876848072e-14
+// stddev(f - f_GSL): 3.0081515400133695e-07
const testcase_hyperg<double>
data161[19] =
{
{ -0.0047236848832209926, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ -0.0073321496427104288, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ -0.010977302557845620, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -0.015692785382270882, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ -0.020728547477518663, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { -0.022767481479412880, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { -0.010634636868114181, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { -0.022767481479412773, 5.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.010634636868114097, 5.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.050699832580781923, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.27045765367659280, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.4387055868901171, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 12.052059173583981, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 12.052059173584013, 5.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 45.565319600798020, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 196.23532998018572, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 196.23532998018635, 5.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1032.0000000000002, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 7376.0986328125073, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 86964.639536655843, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 86964.639536656410, 5.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2596875.0000000009, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 766224999.99999273, 5.0000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 766225000.00000668, 5.0000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler161 = 2.5000000000000015e-12;
// Test data for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 1.8626451492309570e-09
-// max(|f - f_GSL| / |f_GSL|): 1.5205266524334494e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5205266524334267e-15
+// mean(f - f_GSL): 9.8838945799802727e-11
+// variance(f - f_GSL): 1.8243590784562416e-19
+// stddev(f - f_GSL): 4.2712516648591915e-10
const testcase_hyperg<double>
data162[19] =
{
{ 0.016473280625778776, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.023520955289486591, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.034179084066005165, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.050663948059081955, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.076817558299039870, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.11952927776691698, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.19163799520552802, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.11952927776691663, 5.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.19163799520552807, 5.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.31815307784636504, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.55036208180243285, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.9287183337378946, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 4.0054321289062473, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 4.0054321289062544, 5.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 9.1373492337376394, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 23.576817558299005, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 23.576817558299062, 5.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 71.999999999999972, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 280.76171875000023, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 1611.7969821673514, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1611.7969821673578, 5.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 18749.999999999996, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 1224999.9999999879, 5.0000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1225000.0000000061, 5.0000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler162 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 1.8189894035458565e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5011259042308369e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5011259042308243e-15
+// mean(f - f_GSL): 9.8915320378978322e-13
+// variance(f - f_GSL): 1.7350136475328751e-23
+// stddev(f - f_GSL): 4.1653495021821097e-12
const testcase_hyperg<double>
data163[19] =
{
{ 0.067462409738203527, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.084813629887172531, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.10799223563666395, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.13947766136095380, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.18305927261494301, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.24468431546783440, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.33397274564972929, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.24468431546783478, 5.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.33397274564972962, 5.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.46703323887436765, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.67194346197695642, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.5503148146900136, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 2.5278200136940998, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.5278200136941025, 5.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 4.3933515329658954, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 8.3000308946110888, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 8.3000308946111048, 5.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 17.570215556257921, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 43.847462183266167, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 141.86909082943853, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 141.86909082943893, 5.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 736.63489653168926, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 12117.500593515439, 5.0000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 12117.500593515540, 5.0000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler163 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 6.8212102632969618e-13
-// max(|f - f_GSL| / |f_GSL|): 1.3038469641917493e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3038469641917422e-15
+// mean(f - f_GSL): 3.9483036723116753e-14
+// variance(f - f_GSL): 2.4218173234648568e-26
+// stddev(f - f_GSL): 1.5562189188751231e-13
const testcase_hyperg<double>
data164[19] =
{
{ 0.12409443806004226, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.14886910375100415, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.18023328876836348, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.22044046981094723, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.27271160690708790, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.34174821195025828, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.43457788826160254, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.34174821195025845, 5.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.43457788826160282, 5.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.56199385898404552, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.74109892753745221, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3869229400096228, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.9890168748121255, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.9890168748121269, 5.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.9741205609307424, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 4.6924751038237300, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 4.6924751038237345, 5.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 7.9555939380658254, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 14.933102063314404, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 32.780461638447491, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 32.780461638447541, 5.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 94.848124287773530, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 523.16034401517425, 5.0000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 523.16034401517709, 5.0000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler164 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 9.9475983006414026e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3163001721303592e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3163001721303552e-15
+// mean(f - f_GSL): 6.1588161471311315e-15
+// variance(f - f_GSL): 5.1065981167352370e-28
+// stddev(f - f_GSL): 2.2597783335396499e-14
const testcase_hyperg<double>
data165[19] =
{
{ 0.17885405888526873, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.20861302518993391, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.24504033307244946, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.29007236051133489, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.34635542859732737, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.41756858504598376, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.50892615622124371, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.41756858504598410, 5.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.50892615622124393, 5.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.62798173270509761, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.78595487360378424, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.2972517637384813, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.7224028197396388, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.7224028197396399, 5.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 2.3527690438263305, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 3.3305218060101116, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 3.3305218060101147, 5.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 4.9383884076775466, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 7.8007604680775229, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 13.518663719271885, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 13.518663719271903, 5.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 27.285345906502567, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 75.572415101501988, 5.0000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 75.572415101502216, 5.0000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler165 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.81250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8182428501096805e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8182428501096257e-15
+// mean(f - f_GSL): 0.042765168793266639
+// variance(f - f_GSL): 0.034744884250260212
+// stddev(f - f_GSL): 0.18639979680852714
const testcase_hyperg<double>
data166[19] =
{
{ 0.00063586451658060813, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0010334743461763829, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0015326246054669763, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0019007018181583513, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0012845577715431562, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { -0.0027213806178057538, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { -0.015121744574954058, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { -0.0027213806178060305, 5.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.015121744574954044, 5.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.036637840562974290, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.019117849062621605, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 9.8116901852350615, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 84.255589172244044, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 84.255589172244427, 5.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 773.87517619421294, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 8556.9725363053585, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 8556.9725363054076, 5.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 129023.99999999996, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 3174543.3807373112, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 175133896.95814410, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 175133896.95814583, 5.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 43564453125.000061, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 446859999999993.50, 5.0000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 446860000000007.00, 5.0000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler166 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.00039672851562500000
-// max(|f - f_GSL| / |f_GSL|): 1.6882064494681041e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6882064494680641e-15
+// mean(f - f_GSL): 2.0884382210121993e-05
+// variance(f - f_GSL): 8.2836958019297269e-09
+// stddev(f - f_GSL): 9.1014810893226203e-05
const testcase_hyperg<double>
data167[19] =
{
{ -0.00030045430691814646, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ -0.00031119487747322054, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ -0.00014589213141656318, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.00056843418860824636, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0028902549859721747, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.0098776037238878477, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.030689217428863869, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.0098776037238877245, 5.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.030689217428863859, 5.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.094211590019076558, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.29791981455918370, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.6646308771236793, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 15.133991837501521, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 15.133991837501567, 5.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 73.331330046144089, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 441.01791167787133, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 441.01791167787303, 5.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 3583.9999999999991, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 45299.530029296984, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 1157231.0002427341, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1157231.0002427436, 5.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 107421875.00000016, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 234999999999.99734, 5.0000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 235000000000.00293, 5.0000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler167 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 9.5367431640625000e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6314276114917867e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6314276114917587e-15
+// mean(f - f_GSL): 5.0242811922592076e-08
+// variance(f - f_GSL): 4.7862904884501567e-14
+// stddev(f - f_GSL): 2.1877592391417655e-07
const testcase_hyperg<double>
data168[19] =
{
{ 0.0058530497315413248, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0088526869356855397, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.013770987983442959, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.022108932690960776, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.036786236450921550, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.063750669040426505, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.11577228680714462, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.063750669040426408, 5.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.11577228680714466, 5.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.22197573416125760, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.45361312968415324, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 2.4162889363082747, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 6.5381564791240399, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 6.5381564791240541, 5.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 20.415771011498428, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 76.870682056629221, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 76.870682056629448, 5.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 373.58730158730162, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 2626.2555803571477, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 33060.960671081048, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 33060.960671081237, 5.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1203521.8253968258, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 584564285.71427989, 5.0000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 584564285.71428990, 5.0000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler168 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.4505805969238281e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6196914341138888e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6196914341138665e-15
+// mean(f - f_GSL): 3.9331531014553140e-10
+// variance(f - f_GSL): 2.9206631889856577e-18
+// stddev(f - f_GSL): 1.7089947890457882e-09
const testcase_hyperg<double>
data169[19] =
{
{ 0.020248990107069573, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.027876687750502366, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.039154648888447607, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.056251883506774715, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.082914189910074473, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.12585357817786455, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.19761423206224954, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.12585357817786472, 5.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.19761423206224940, 5.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.32280443863359237, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.55250024062839420, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.9374297986599267, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 4.0849049886067696, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 4.0849049886067759, 5.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 9.5926988633258983, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 25.958314281359531, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 25.958314281359588, 5.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 85.333333333333300, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 372.31445312500028, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 2545.3436976070675, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2545.3436976070780, 5.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 39583.333333333343, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 4599999.9999999627, 5.0000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4600000.0000000261, 5.0000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler169 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
+// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// mean(f - f_GSL): -2.8272994325845583e-12
+// variance(f - f_GSL): 1.7985402567071545e-22
+// stddev(f - f_GSL): 1.3410966619551160e-11
const testcase_hyperg<double>
data170[19] =
{
{ 0.040386107340619266, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.052922149401344633, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.070429627772374270, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.095367431640624972, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.13168724279835387, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.18593443208187066, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.26932907434290437, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.26932907434290460, 5.0000000000000000, 10.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.40187757201646096, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.62092132305915493, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.6935087808430296, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 3.0517578124999991, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 3.0517578125000036, 5.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 5.9499018266198629, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 12.860082304526737, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 12.860082304526765, 5.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 32.000000000000000, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 97.656250000000114, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 411.52263374485580, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 411.52263374485722, 5.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 3124.9999999999991, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 99999.999999999665, 5.0000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 100000.00000000073, 5.0000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler170 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 60129542144.000000
-// max(|f - f_GSL| / |f_GSL|): 2.0181355730233454e-15
+// max(|f - f_GSL| / |f_GSL|): 2.0181355730232468e-15
+// mean(f - f_GSL): 3164712852.2154636
+// variance(f - f_GSL): 1.9029272767041847e+20
+// stddev(f - f_GSL): 13794663014.021708
const testcase_hyperg<double>
data171[19] =
{
{ -1.8650300348790099e-05, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ -3.6488008415371319e-05, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ -6.4614776410961038e-05, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -8.4495207102246549e-05, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 2.2276197023825424e-05, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.00070736115111447856, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.0027829732057273854, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.00070736115111457809, 5.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0027829732057272588, 5.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0013283545664371644, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.041767631015048774, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 61.311496556100003, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 2397.4420539085681, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2397.4420539085872, 5.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 103687.60998586559, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 6247196.6451068865, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 6247196.6451069508, 5.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 656408576.00000000, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 165334768098.54715, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 175097125520816.81, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 175097125520819.91, 5.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 2.9794599999999321e+25, 5.0000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.9794600000000777e+25, 5.0000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler171 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 9437184.0000000000
-// max(|f - f_GSL| / |f_GSL|): 2.0515617391304744e-15
+// max(|f - f_GSL| / |f_GSL|): 2.0515617391303805e-15
+// mean(f - f_GSL): 496693.97369064158
+// variance(f - f_GSL): 4687391593519.1660
+// stddev(f - f_GSL): 2165038.4739119918
const testcase_hyperg<double>
data172[19] =
{
{ -3.6403884516313627e-06, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ -9.5873829246491408e-06, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ -2.6052245147200097e-05, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ -7.2378303598384501e-05, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ -0.00020048577321417379, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { -0.00051222704046227391, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { -0.00080950511491898055, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { -0.00051222704046234439, 5.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.00080950511491888959, 5.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0043473422174314250, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.081078342558623853, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 12.794854084397739, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 195.15639104739046, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 195.15639104739174, 5.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 3938.7991953190131, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 118521.48653762060, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 118521.48653762160, 5.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 6291455.9999999972, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 773070496.50699198, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 363276452167.04102, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 363276452167.04718, 5.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 2002716064453133.0, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 4.5999999999999109e+21, 5.0000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4.6000000000001222e+21, 5.0000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler172 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 5120.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7944916193878923e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7944916193878173e-15
+// mean(f - f_GSL): 269.47388985302263
+// variance(f - f_GSL): 1379705.1461701661
+// stddev(f - f_GSL): 1174.6085076186730
const testcase_hyperg<double>
data173[19] =
{
{ 0.00014313323624053599, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.00025426183473118769, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.00048255612836437054, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.00099096904674794185, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0022347805521915616, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.0056271390060292845, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.016109059519227316, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.0056271390060294354, 5.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.016109059519227351, 5.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.053453465775609076, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.20995202901839263, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 5.9534372167648799, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 46.157632071205875, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 46.157632071206095, 5.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 494.32074431164915, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 7989.5277611775946, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 7989.5277611776519, 5.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 224179.55830753347, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 13848144.485282511, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 2948587692.8891716, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2948587692.8892150, 5.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 5940513286161.6602, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 2.8531757655945201e+18, 5.0000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.8531757655946394e+18, 5.0000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler173 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5351977183414298e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5351977183413728e-15
+// mean(f - f_GSL): 0.36842306154970872
+// variance(f - f_GSL): 2.5789458059294108
+// stddev(f - f_GSL): 1.6059096506122039
const testcase_hyperg<double>
data174[19] =
{
{ 0.0012492049968744917, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0019931241968014200, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0033203386861410844, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0058191894509856774, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.010830090368313864, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.021653062305192875, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.047180821280919043, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.021653062305193541, 5.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.047180821280919195, 5.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.11405637279736212, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.31275468794721017, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.8598904658643969, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 18.806301417906667, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 18.806301417906734, 5.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 122.77054465017432, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1168.4762146808946, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1168.4762146809012, 5.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 18437.511788521082, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 597441.79669264762, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 59390411.369227782, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 59390411.369228527, 5.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 44681668993.361603, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 4559673269683164.0, 5.0000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4559673269683333.0, 5.0000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler174 = 2.5000000000000020e-13;
// Test data for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.029296875000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8717083246628922e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8717083246628342e-15
+// mean(f - f_GSL): 0.0015419659355661440
+// variance(f - f_GSL): 4.5173964710879197e-05
+// stddev(f - f_GSL): 0.0067211579888348996
const testcase_hyperg<double>
data175[19] =
{
{ 0.0038867957051370739, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.0058484892597364235, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.0090987656053758189, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.014714392537270657, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.024900404542056772, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.044460184663785027, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.084638849196356780, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.044460184663785055, 5.0000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.084638849196357113, 5.0000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.17409058241291026, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.39357055823580767, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 2.9410794636226596, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 10.417226071414344, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 10.417226071414374, 5.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 46.930585873140835, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 290.76717121814852, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 290.76717121814988, 5.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 2788.1641083374830, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 50228.117718560752, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 2433042.3476752634, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 2433042.3476752895, 5.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 705345246.77141762, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 15652478868616.762, 5.0000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 15652478868617.246, 5.0000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler175 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data176[19] =
{
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler176 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data177[19] =
{
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler177 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data178[19] =
{
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler178 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data179[19] =
{
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler179 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data180[19] =
{
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler180 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.8229127098648091e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8229127098647768e-15
+// mean(f - f_GSL): 7.8543415046726153e-10
+// variance(f - f_GSL): 1.1684633485497506e-17
+// stddev(f - f_GSL): 3.4182793164832956e-09
const testcase_hyperg<double>
data181[19] =
{
{ 0.37727530159464628, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.39816010922169059, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.42283703041362447, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.45255640448730527, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.48919507154431119, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.53569358917731924, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.59689778897029544, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.53569358917731902, 10.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.59689778897029577, 10.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.68128587569875765, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.80478739308790359, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3408664196153621, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 2.0175364359923860, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.0175364359923882, 10.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 3.6011214553736646, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 8.1799429939495312, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 8.1799429939495489, 10.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 25.644834637536000, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 123.13738891597615, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1088.7122410321333, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1088.7122410321385, 10.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 27358.291704709951, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 8174369.0266731177, 10.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 8174369.0266732639, 10.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler181 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.0008883439004421e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5684473872214654e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5684473872214445e-15
+// mean(f - f_GSL): 1.0626470463804301e-12
+// variance(f - f_GSL): 2.1050116035366066e-23
+// stddev(f - f_GSL): 4.5880405442155876e-12
const testcase_hyperg<double>
data182[19] =
{
{ 0.53905528308450823, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.56235533974376162, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.58887657983263575, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.61941227047262937, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.65504896640793864, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.69731666644529977, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.74844073299399139, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.74844073299399116, 10.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.81178446800105830, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.89266981277598045, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1497248473106778, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.3729717112654571, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3729717112654578, 10.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.7374982340374392, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 2.4134479340960580, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.4134479340960602, 10.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 3.9191255240471192, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 8.3316373077761270, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 28.323020339843335, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 28.323020339843417, 10.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 225.84286572747891, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 12757.127591286655, 10.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 12757.127591286826, 10.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler182 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 1.9895196601282805e-13
-// max(|f - f_GSL| / |f_GSL|): 1.4567107859209967e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4567107859209851e-15
+// mean(f - f_GSL): 1.0997051222866024e-14
+// variance(f - f_GSL): 2.0716479934578269e-27
+// stddev(f - f_GSL): 4.5515359972846821e-14
const testcase_hyperg<double>
data183[19] =
{
{ 0.62672622092226027, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.64931010269769840, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.67448067519076293, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.70276306239803643, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.73484179773087521, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.77162761412743874, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.81436116844816564, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.81436116844816553, 10.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.86477994787944579, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.92539820516603888, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0945599448210315, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.2190897395597264, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2190897395597269, 10.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.3916844336856475, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 1.6484497630432013, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6484497630432020, 10.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.0717772717131155, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.8893613630810924, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 4.9459404075413529, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 4.9459404075413573, 10.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 13.487394149998716, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 136.57616044013972, 10.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 136.57616044014080, 10.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler183 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.2434497875801753e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3245081211977836e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3245081211977792e-15
+// mean(f - f_GSL): 7.8299939631458406e-16
+// variance(f - f_GSL): 7.9610830849763719e-30
+// stddev(f - f_GSL): 2.8215391340501324e-15
const testcase_hyperg<double>
data184[19] =
{
{ 0.68421604440344319, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.70548098055548925, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.72884342311710337, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.75466953437856232, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.78342090924662589, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.81568884278645082, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.85224480241465239, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.81568884278645115, 10.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.85224480241465261, 10.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.89411692571131685, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.94270986892954811, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0688682849120232, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.1537004376097553, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.2615455028370031, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.4045541456153436, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.4045541456153443, 10.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.6057216489444517, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.9146603020550739, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 2.4617931307620298, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.4617931307620307, 10.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 3.7267799624996498, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 9.3880118036248401, 10.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 9.3880118036248721, 10.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler184 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 1.5700924586837752e-16
+// mean(f - f_GSL): -2.3373116307898031e-17
+// variance(f - f_GSL): 1.0379748752908049e-32
+// stddev(f - f_GSL): 1.0188105198175002e-16
const testcase_hyperg<double>
data185[19] =
{
{ 0.72547625011001171, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.74535599249992990, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.76696498884737041, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.79056941504209477, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.81649658092772603, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.84515425472851657, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.87705801930702920, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.87705801930702931, 10.000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.91287092917527690, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.95346258924559224, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0540925533894598, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.1180339887498949, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.1952286093343938, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.2909944487358056, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.2909944487358058, 10.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.4142135623730949, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.5811388300841900, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 1.8257418583505536, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 1.8257418583505542, 10.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 2.2360679774997898, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 3.1622776601683782, 10.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 3.1622776601683817, 10.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler185 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 2.0861625671386719e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6897916810721311e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6897916810721003e-15
+// mean(f - f_GSL): 1.0989192059253727e-08
+// variance(f - f_GSL): 2.2903477685061008e-15
+// stddev(f - f_GSL): 4.7857577963224392e-08
const testcase_hyperg<double>
data186[19] =
{
{ 0.12307420104127866, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.13818870041457434, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.15739165631811705, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.18249038606882081, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.21644171225027795, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.26433326159804132, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.33544459430654539, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.26433326159804149, 10.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.33544459430654527, 10.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.44788516696232511, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.63989153514168373, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.7568608796813312, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 3.5836558871799027, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.5836558871799102, 10.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 8.8077526749963226, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 27.285841702089190, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 27.285841702089265, 10.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 113.55555555555557, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 706.24023437500091, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 8064.1687976651992, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 8064.1687976652511, 10.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 271267.22222222196, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 123456789.99999890, 10.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 123456790.00000113, 10.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler186 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 2.6193447411060333e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6039867544159931e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6039867544159698e-15
+// mean(f - f_GSL): 1.3861181208677695e-11
+// variance(f - f_GSL): 3.6088481925089110e-21
+// stddev(f - f_GSL): 6.0073689686158877e-11
const testcase_hyperg<double>
data187[19] =
{
{ 0.28363728383055781, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.30933003169808387, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.33998437757128797, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.37713553224291113, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.42299736538419669, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.48086597727600067, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.55583495759293045, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.48086597727600089, 10.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.55583495759293033, 10.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.65612850114039678, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.79573668772968142, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3184712058058303, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1.8576958065941214, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.8576958065941236, 10.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.8759509651764228, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 5.1046225531822182, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 5.1046225531822289, 10.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 11.095238095238095, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 32.797154017857174, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 158.01935680536477, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 158.01935680536548, 10.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1815.9523809523814, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 163302.14285714156, 10.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 163302.14285714392, 10.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler187 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 2.0463630789890885e-12
-// max(|f - f_GSL| / |f_GSL|): 1.5238873992472010e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5238873992471854e-15
+// mean(f - f_GSL): 1.1027436274066292e-13
+// variance(f - f_GSL): 2.1981589761266991e-25
+// stddev(f - f_GSL): 4.6884528110312674e-13
const testcase_hyperg<double>
data188[19] =
{
{ 0.39006633302741811, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.41898885698103278, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.45245557983812590, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.49160548618861627, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.53798419230517991, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.59373881442067322, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.66193391357076126, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.66193391357076092, 10.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.74708402736952118, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.85609281019430605, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1974451135148187, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.4820886036706347, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.4820886036706358, 10.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.9201183180477521, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 2.6569338297733336, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.6569338297733367, 10.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 4.0634920634920650, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 7.3102678571428568, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 17.512574302697733, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 17.512574302697782, 10.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 74.206349206349131, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 1342.8571428571363, 10.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1342.8571428571502, 10.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler188 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.8159700933611020e-14
-// max(|f - f_GSL| / |f_GSL|): 1.4210854715202060e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4210854715201975e-15
+// mean(f - f_GSL): 4.6395635871177596e-15
+// variance(f - f_GSL): 3.1697222627622662e-28
+// stddev(f - f_GSL): 1.7803713833810816e-14
const testcase_hyperg<double>
data189[19] =
{
{ 0.46726928123633210, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.49687547629934464, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.53045208856322223, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.56884765624999989, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.61316872427983504, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.66488500161969566, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.72598998634501577, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.66488500161969544, 10.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.72598998634501621, 10.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.79925411522633760, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.88863845062192182, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1423563481176653, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.3302951388888888, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3302951388888891, 10.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.5889212827988335, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1.9650205761316870, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.9650205761316886, 10.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 2.5555555555555549, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 3.5937500000000013, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 5.7818930041152203, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 5.7818930041152274, 10.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 12.222222222222220, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 54.999999999999780, 10.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 55.000000000000114, 10.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler189 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 1.7763568394002505e-15
// max(|f - f_GSL| / |f_GSL|): 2.1094237467877971e-16
+// mean(f - f_GSL): -1.1102230246251565e-16
+// variance(f - f_GSL): 1.6263408419269992e-31
+// stddev(f - f_GSL): 4.0327916409442719e-16
const testcase_hyperg<double>
data190[19] =
{
{ 0.52631578947368429, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.55555555555555558, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.58823529411764708, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.62500000000000000, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.66666666666666663, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.71428571428571430, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.76923076923076927, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.76923076923076938, 10.000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.83333333333333337, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.90909090909090906, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.1111111111111112, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.2500000000000000, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2500000000000002, 10.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.4285714285714286, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.6666666666666663, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.6666666666666672, 10.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 2.0000000000000000, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 2.5000000000000004, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 3.3333333333333330, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 3.3333333333333353, 10.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 5.0000000000000009, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 9.9999999999999929, 10.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 10.000000000000016, 10.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler190 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 2.2888183593750000e-05
+// max(|f - f_GSL|): 1.3351440429687500e-05
// max(|f - f_GSL| / |f_GSL|): 2.8610229492187516e-15
+// mean(f - f_GSL): -7.0123832224240743e-07
+// variance(f - f_GSL): 9.3843353513115960e-12
+// stddev(f - f_GSL): 3.0633862556510231e-06
const testcase_hyperg<double>
data191[19] =
{
{ 0.0016310376661280216, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0028007538972582421, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0049603324681551939, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0090949470177292789, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.017341529915832606, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.034571613033607777, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.072538150286405714, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.072538150286405839, 10.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.16150558288984579, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.38554328942953148, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 2.8679719907924444, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 9.3132257461547816, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 9.3132257461548065, 10.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 35.401331746414378, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 165.38171687920172, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 165.38171687920246, 10.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1024.0000000000000, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 9536.7431640625200, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 169350.87808430271, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 169350.87808430390, 10.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 9765624.9999999944, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 9999999999.9999332, 10.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 10000000000.000147, 10.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler191 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 1.4901161193847656e-08
-// max(|f - f_GSL| / |f_GSL|): 1.4958811384436855e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4958811384436608e-15
+// mean(f - f_GSL): 7.8582771868621203e-10
+// variance(f - f_GSL): 1.1683981923411271e-17
+// stddev(f - f_GSL): 3.4181840095891958e-09
const testcase_hyperg<double>
data192[19] =
{
{ 0.071191280690193537, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.085646504654238384, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.10478215656371109, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.13074816337653578, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.16701141666848118, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.21939323375313968, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.29813515331786616, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.21939323375313963, 10.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.29813515331786639, 10.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.42225974638874397, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.62942145962174878, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.7218685262373197, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 3.2855760483514689, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.2855760483514738, 10.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 7.1616652508907093, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 18.612326808485907, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 18.612326808485950, 10.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 61.476190476190474, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 286.27580915178623, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2274.9441142102296, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2274.9441142102414, 10.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 47229.761904761865, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 9961460.7142856438, 10.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 9961460.7142858077, 10.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler192 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 8.7311491370201111e-11
-// max(|f - f_GSL| / |f_GSL|): 1.5843951771650368e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5843951771650161e-15
+// mean(f - f_GSL): 4.6467391338242840e-12
+// variance(f - f_GSL): 4.0072766661644994e-22
+// stddev(f - f_GSL): 2.0018183399510804e-11
const testcase_hyperg<double>
data193[19] =
{
{ 0.14747230019381058, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.17073600100690609, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.19982795745135354, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.23681776864188053, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.28475624360398011, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.34827500743063133, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.34827500743063161, 10.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.43464829159684687, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.55576053438064787, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.73195020913445530, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.4310223867822929, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 2.1742563399057540, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.1742563399057566, 10.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 3.5769231236256043, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 6.5620441134844363, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 6.5620441134844469, 10.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 14.063492063492063, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 38.085937500000036, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 150.92973632068282, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 150.92973632068330, 10.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1212.3015873015852, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 55107.142857142389, 10.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 55107.142857143110, 10.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler193 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 1.8189894035458565e-12
-// max(|f - f_GSL| / |f_GSL|): 1.4848893090170350e-15
+// max(|f - f_GSL| / |f_GSL|): 1.4848893090170230e-15
+// mean(f - f_GSL): 1.0025898240272861e-13
+// variance(f - f_GSL): 1.7323040416880815e-25
+// stddev(f - f_GSL): 4.1620956760844426e-13
const testcase_hyperg<double>
data194[19] =
{
{ 0.21658059714090577, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.24513539602702861, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.27967018274845046, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.32196044921875022, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.37448559670781911, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.44078856032208824, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.44078856032208802, 10.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.52606701446027793, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.63818158436213956, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.78944971882612769, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3044251384443430, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.7659505208333335, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.7659505208333344, 10.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.5093710953769270, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 3.8065843621399158, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 3.8065843621399202, 10.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 6.3333333333333313, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 12.109375000000004, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 29.115226337448540, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 29.115226337448608, 10.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 108.33333333333330, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1224.9999999999923, 10.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1225.0000000000023, 10.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler194 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.2632564145606011e-14
-// max(|f - f_GSL| / |f_GSL|): 4.2632564145606064e-16
+// max(|f - f_GSL| / |f_GSL|): 4.2632564145605876e-16
+// mean(f - f_GSL): -2.0334611187871286e-15
+// variance(f - f_GSL): 9.6658815324267986e-29
+// stddev(f - f_GSL): 9.8315215162388766e-15
const testcase_hyperg<double>
data195[19] =
{
{ 0.27700831024930750, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.30864197530864196, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.34602076124567477, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.39062499999999994, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.44444444444444442, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.51020408163265307, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.59171597633136097, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.59171597633136108, 10.000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.69444444444444453, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.82644628099173545, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.2345679012345681, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.5624999999999998, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.5625000000000007, 10.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 2.0408163265306127, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 2.7777777777777768, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 2.7777777777777790, 10.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 4.0000000000000000, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 6.2500000000000036, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 11.111111111111109, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 11.111111111111123, 10.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 25.000000000000007, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 99.999999999999872, 10.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 100.00000000000031, 10.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler195 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.81250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8182428501096805e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8182428501096257e-15
+// mean(f - f_GSL): 0.042765168793266639
+// variance(f - f_GSL): 0.034744884250260212
+// stddev(f - f_GSL): 0.18639979680852714
const testcase_hyperg<double>
data196[19] =
{
{ 0.00063586451658060813, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0010334743461763829, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0015326246054669763, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0019007018181583513, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0012845577715431562, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { -0.0027213806178057538, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { -0.015121744574954058, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { -0.0027213806178060305, 10.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.015121744574954044, 10.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.036637840562974290, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.019117849062621605, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 9.8116901852350615, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 84.255589172244044, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 84.255589172244427, 10.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 773.87517619421294, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 8556.9725363053585, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 8556.9725363054076, 10.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 129023.99999999996, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 3174543.3807373112, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 175133896.95814410, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 175133896.95814583, 10.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 43564453125.000061, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 446859999999993.50, 10.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 446860000000007.00, 10.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler196 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.00039672851562500000
-// max(|f - f_GSL| / |f_GSL|): 1.6882064494681041e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6882064494680641e-15
+// mean(f - f_GSL): 2.0884382210121993e-05
+// variance(f - f_GSL): 8.2836958019297269e-09
+// stddev(f - f_GSL): 9.1014810893226203e-05
const testcase_hyperg<double>
data197[19] =
{
{ -0.00030045430691814646, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ -0.00031119487747322054, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ -0.00014589213141656318, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.00056843418860824636, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0028902549859721747, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.0098776037238878477, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.030689217428863869, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.0098776037238877245, 10.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.030689217428863859, 10.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.094211590019076558, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.29791981455918370, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.6646308771236793, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 15.133991837501521, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 15.133991837501567, 10.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 73.331330046144089, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 441.01791167787133, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 441.01791167787303, 10.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 3583.9999999999991, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 45299.530029296984, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 1157231.0002427341, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1157231.0002427436, 10.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 107421875.00000016, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 234999999999.99734, 10.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 235000000000.00293, 10.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler197 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 9.5367431640625000e-07
-// max(|f - f_GSL| / |f_GSL|): 1.6314276114917867e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6314276114917587e-15
+// mean(f - f_GSL): 5.0242811922592076e-08
+// variance(f - f_GSL): 4.7862904884501567e-14
+// stddev(f - f_GSL): 2.1877592391417655e-07
const testcase_hyperg<double>
data198[19] =
{
{ 0.0058530497315413248, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0088526869356855397, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.013770987983442959, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.022108932690960776, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.036786236450921550, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.063750669040426505, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.11577228680714462, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.063750669040426408, 10.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.11577228680714466, 10.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.22197573416125760, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.45361312968415324, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 2.4162889363082747, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 6.5381564791240399, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 6.5381564791240541, 10.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 20.415771011498428, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 76.870682056629221, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 76.870682056629448, 10.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 373.58730158730162, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 2626.2555803571477, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 33060.960671081048, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 33060.960671081237, 10.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1203521.8253968258, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 584564285.71427989, 10.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 584564285.71428990, 10.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler198 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.4505805969238281e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6196914341138888e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6196914341138665e-15
+// mean(f - f_GSL): 3.9331531014553140e-10
+// variance(f - f_GSL): 2.9206631889856577e-18
+// stddev(f - f_GSL): 1.7089947890457882e-09
const testcase_hyperg<double>
data199[19] =
{
{ 0.020248990107069573, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.027876687750502366, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.039154648888447607, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.056251883506774715, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.082914189910074473, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.12585357817786455, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.19761423206224954, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.12585357817786472, 10.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.19761423206224940, 10.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.32280443863359237, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.55250024062839420, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.9374297986599267, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 4.0849049886067696, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 4.0849049886067759, 10.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 9.5926988633258983, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 25.958314281359531, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 25.958314281359588, 10.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 85.333333333333300, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 372.31445312500028, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 2545.3436976070675, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2545.3436976070780, 10.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 39583.333333333343, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 4599999.9999999627, 10.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4600000.0000000261, 10.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler199 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 1.1641532182693481e-10
+// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 1.4551915228366856e-15
+// mean(f - f_GSL): -2.8272994325845583e-12
+// variance(f - f_GSL): 1.7985402567071545e-22
+// stddev(f - f_GSL): 1.3410966619551160e-11
const testcase_hyperg<double>
data200[19] =
{
{ 0.040386107340619266, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.052922149401344633, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.070429627772374270, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.095367431640624972, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.13168724279835387, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.18593443208187066, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.26932907434290437, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.26932907434290460, 10.000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.40187757201646096, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.62092132305915493, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.6935087808430296, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 3.0517578124999991, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 3.0517578125000036, 10.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 5.9499018266198629, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 12.860082304526737, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 12.860082304526765, 10.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 32.000000000000000, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 97.656250000000114, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 411.52263374485580, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 411.52263374485722, 10.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 3124.9999999999991, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 99999.999999999665, 10.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 100000.00000000073, 10.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler200 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 3407872.0000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8642431677286335e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8642431677285562e-15
+// mean(f - f_GSL): 179361.84215676156
+// variance(f - f_GSL): 611241601687.40417
+// stddev(f - f_GSL): 781819.41756866348
const testcase_hyperg<double>
data201[19] =
{
{ 2.3388730079478156e-05, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ -2.3204970759764180e-05, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ -0.00016219730505521665, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -0.00044366962360922366, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ -0.00071863577205453773, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 4.4378596544533363e-05, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.0044446568070623509, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 4.4378596544482927e-05, 10.000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0044446568070621991, 10.000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0071045155183571615, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.049961558159890306, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 51.305449964107403, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 1435.9545414461309, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1435.9545414461415, 10.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 39657.913058984115, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 1346016.4468570501, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1346016.4468570619, 10.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 68086556.444444403, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 6646235808.7301531, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1954852335479.9702, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1954852335479.9958, 10.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 4573796225043418.0, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 1.8280190368899683e+21, 10.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.8280190368900440e+21, 10.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler201 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 832.00000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7889121078953977e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7889121078953330e-15
+// mean(f - f_GSL): 43.789679427686345
+// variance(f - f_GSL): 36432.823085424323
+// stddev(f - f_GSL): 190.87384075725075
const testcase_hyperg<double>
data202[19] =
{
{ 1.3504013648914116e-05, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 3.1753432098506483e-05, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 6.2032098207654132e-05, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 8.8747213942816339e-05, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0478094697613739e-05, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { -0.00055998751005986670, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { -0.0024718654966575881, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { -0.00055998751006022351, 10.000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.0024718654966575221, 10.000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.0027000264053620069, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.066515394406810743, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 11.579200866389527, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 137.50750548795256, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 137.50750548795330, 10.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1901.3196072993419, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 34210.659507137796, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 34210.659507138007, 10.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 920588.19047619053, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 45876220.933028772, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 6234608574.0963297, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 6234608574.0964050, 10.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 5445391090029.7783, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 4.6508713107142163e+17, 10.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4.6508713107143840e+17, 10.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler202 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.93750000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8742262123209408e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8742262123208804e-15
+// mean(f - f_GSL): 0.049343110712039846
+// variance(f - f_GSL): 0.046258118950011272
+// stddev(f - f_GSL): 0.21507700702309224
const testcase_hyperg<double>
data203[19] =
{
{ -2.6846726901509877e-05, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ -4.7817237144298244e-05, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ -7.2908121941826117e-05, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ -6.0427853197636777e-05, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.00020559720946644960, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.0017056910683366346, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.0088037230970528183, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.0017056910683365867, 10.000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0088037230970524228, 10.000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.041510819735141528, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.19754880805677244, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 5.6130947302779246, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 36.475357196722442, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 36.475357196722619, 10.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 289.29483001400672, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 3010.8676549536503, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 3010.8676549536667, 10.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 45844.317460317419, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1221852.6431492427, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 79585968.928968787, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 79585968.928969592, 10.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 26733475942.460335, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 500206428571421.19, 10.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 500206428571437.38, 10.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler203 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0024414062500000000
-// max(|f - f_GSL| / |f_GSL|): 1.6580008488964534e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6580008488964090e-15
+// mean(f - f_GSL): 0.00012850766473236850
+// variance(f - f_GSL): 3.1370523903989881e-07
+// stddev(f - f_GSL): 0.00056009395554665537
const testcase_hyperg<double>
data204[19] =
{
{ 0.00025866179054283083, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.00053402577739226583, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0011390075227239291, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0025224267119482941, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0058340332124251458, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.014189256143045500, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.036590990011337692, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.014189256143045212, 10.000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.036590990011337789, 10.000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.10106560781146991, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.30278778538531392, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.7187249990350599, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 16.023275545901704, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 16.023275545901761, 10.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 83.265377219882822, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 553.31413918843987, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 553.31413918844225, 10.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 5148.4444444444416, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 78082.084655761908, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 2565874.8781353114, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2565874.8781353347, 10.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 346137152.77777809, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1472499999999.9834, 10.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1472500000000.0227, 10.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler204 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 2.2888183593750000e-05
+// max(|f - f_GSL|): 1.3351440429687500e-05
// max(|f - f_GSL| / |f_GSL|): 2.8610229492187516e-15
+// mean(f - f_GSL): -7.0123832224240743e-07
+// variance(f - f_GSL): 9.3843353513115960e-12
+// stddev(f - f_GSL): 3.0633862556510231e-06
const testcase_hyperg<double>
data205[19] =
{
{ 0.0016310376661280216, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.0028007538972582421, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.0049603324681551939, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.0090949470177292789, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.017341529915832606, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.034571613033607777, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.072538150286405714, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.072538150286405839, 10.000000000000000, 10.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.16150558288984579, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.38554328942953148, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 2.8679719907924444, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 9.3132257461547816, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 9.3132257461548065, 10.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 35.401331746414378, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 165.38171687920172, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 165.38171687920246, 10.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1024.0000000000000, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 9536.7431640625200, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 169350.87808430271, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 169350.87808430390, 10.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 9765624.9999999944, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 9999999999.9999332, 10.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 10000000000.000147, 10.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler205 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 2.5940733853654057e+18
-// max(|f - f_GSL| / |f_GSL|): 1.8312596334405405e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8312596334404269e-15
+// mean(f - f_GSL): 1.3653017829015250e+17
+// variance(f - f_GSL): 4.1617051640949032e+35
+// stddev(f - f_GSL): 6.4511279355589466e+17
const testcase_hyperg<double>
data206[19] =
{
{ -2.1776535312781759e-07, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ -2.9128833151630439e-06, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ -9.4755553429932710e-06, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -1.2844297353852837e-05, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 3.6576965483549205e-05, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.00020847453890689954, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { -0.00022868510398160936, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.00020847453890703339, 10.000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.00022868510398194936, 10.000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.0021855513841943421, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.014662111759334568, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 746.44776348798098, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 136080.48445225612, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 136080.48445225772, 10.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 23094279.597826406, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 5315913395.5545301, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 5315913395.5545979, 10.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 2261935718399.9990, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 2669150854828235.0, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1.7499363099365994e+19, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.7499363099366351e+19, 10.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 1.4165513933661626e+33, 10.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.4165513933662505e+33, 10.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler206 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 299067162755072.00
-// max(|f - f_GSL| / |f_GSL|): 2.1129345912024644e-15
+// max(|f - f_GSL| / |f_GSL|): 2.1129345912023457e-15
+// mean(f - f_GSL): 15740377042297.895
+// variance(f - f_GSL): 4.7074334083472640e+27
+// stddev(f - f_GSL): 68610738287437.656
const testcase_hyperg<double>
data207[19] =
{
{ 1.7149006966334498e-07, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 3.2399324906563845e-07, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.6015317699713284e-07, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ -2.0500917201273337e-06, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ -1.0175546788592665e-05, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { -1.1720101988158874e-05, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.00014199637113975139, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { -1.1720101988188077e-05, 10.000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.00014199637113982382, 10.000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.00021263363640641769, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.0072649256698439626, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 90.430293772869618, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 6248.1455940292308, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 6248.1455940292872, 10.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 501143.39852548984, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 58852027.356439680, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 58852027.356440276, 10.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 12942923093.333330, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 7618073993853.6592, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 22630251562549288., 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 22630251562549772., 10.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 1.4154113619999653e+29, 10.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.4154113620000448e+29, 10.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler207 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 103079215104.00000
-// max(|f - f_GSL| / |f_GSL|): 1.8869870511942065e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8869870511941024e-15
+// mean(f - f_GSL): 5425221928.4235201
+// variance(f - f_GSL): 5.5922760890380314e+20
+// stddev(f - f_GSL): 23647993760.651306
const testcase_hyperg<double>
data208[19] =
{
{ -1.6667473284194196e-08, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 8.6214843496406671e-08, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 5.7778331275185146e-07, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 2.1911400502042259e-06, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 4.7440049217199358e-06, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { -1.0564233315113883e-05, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { -0.00017990026051873263, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { -1.0564233314712615e-05, 10.000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.00017990026051847404, 10.000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.00027618146288724629, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.030606019577723666, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 27.832854169493341, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 874.00624088575228, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 874.00624088575910, 10.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 36049.199340831554, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 2270967.7298624986, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2270967.7298625209, 10.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 266979100.44444439, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 80311224337.493027, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 110111693103799.72, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 110111693103801.77, 10.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 5.4626349999998603e+25, 10.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.4626350000001618e+25, 10.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler208 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 100663296.00000000
-// max(|f - f_GSL| / |f_GSL|): 1.9414329026037087e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9414329026036117e-15
+// mean(f - f_GSL): 5298068.6316046715
+// variance(f - f_GSL): 533321003794731.12
+// stddev(f - f_GSL): 23093743.823701065
const testcase_hyperg<double>
data209[19] =
{
{ -1.5843795889906876e-07, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ -5.4877276002864784e-07, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ -1.7169507967699695e-06, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ -4.5236439749819329e-06, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ -5.5690492560381956e-06, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 5.6914115607022928e-05, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.00082507252097525810, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 5.6914115606653561e-05, 10.000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.00082507252097489250, 10.000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0085739249288230429, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.088244357683754687, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 13.387208440156897, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 226.77895441155110, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 226.77895441155252, 10.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 5281.5716482686785, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 189431.77762850464, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 189431.77762850633, 10.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 12408149.333333332, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1966782292.5839682, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 1274123112205.7495, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1274123112205.7700, 10.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 10903676350911508., 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 5.1849999999998819e+22, 10.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.1850000000001411e+22, 10.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler209 = 2.5000000000000020e-13;
// Test data for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 245760.00000000000
// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): -12934.709704750463
+// variance(f - f_GSL): 3178841667.3467402
+// stddev(f - f_GSL): 56381.217327641483
const testcase_hyperg<double>
data210[19] =
{
{ 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.00030072865982171723, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.0011951964277455193, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.0052617832469731814, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0052617832469732005, 10.000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.026084053304588847, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.14864362802414346, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 8.2252633399699757, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 86.736173798840269, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 86.736173798840738, 10.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1253.2542894196865, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 27351.112277912434, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 27351.112277912678, 10.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1048576.0000000000, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 90949470.177293226, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 28679719907.924358, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 28679719907.924767, 10.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 95367431640624.906, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 9.9999999999998657e+19, 10.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.0000000000000292e+20, 10.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler210 = 5.0000000000000039e-13;
// Test data for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data211[19] =
{
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler211 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data212[19] =
{
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler212 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data213[19] =
{
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler213 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data214[19] =
{
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler214 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hyperg<double>
data215[19] =
{
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler215 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 48.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8556481344875154e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8556481344874416e-15
+// mean(f - f_GSL): 2.5263190030329112
+// variance(f - f_GSL): 121.26314075575490
+// stddev(f - f_GSL): 11.011954447588080
const testcase_hyperg<double>
data216[19] =
{
{ 0.26690449940521549, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.28252302866181833, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.30123616141153836, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.32421384687602633, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.35334630811776774, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.39191793127467028, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.44620488618129195, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.39191793127466995, 20.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.44620488618129212, 20.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.52980896919265719, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.67754711477562324, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.9567557771780317, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 6.1816042148333086, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 6.1816042148333272, 20.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 35.653088618561227, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 377.51482843179906, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 377.51482843180133, 20.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 7645.8816551195359, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 354791.74537980522, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 57009889.966638684, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 57009889.966639392, 20.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 83771357024.863937, 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 25866972896376408., 20.000000000000000, 0.50000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 25866972896377436., 20.000000000000000, 0.50000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler216 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.011718750000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7519521419034139e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7519521419033478e-15
+// mean(f - f_GSL): 0.00061678102606401840
+// variance(f - f_GSL): 7.2278413174892161e-06
+// stddev(f - f_GSL): 0.0026884644906506046
const testcase_hyperg<double>
data217[19] =
{
{ 0.40342659436153389, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.42420571192034318, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.44852768286073041, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.47751245808592863, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.51283632632707765, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.55713468814894329, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.61481320817757334, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.61481320817757346, 20.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.69383483410097213, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.81012002526006044, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3622225506603911, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 2.2349513086109001, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.2349513086109027, 20.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 5.1864917536761723, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 21.020560423779411, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 21.020560423779497, 20.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 175.19649997100612, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 3467.1587803688708, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 225003.88683445856, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 225003.88683446089, 20.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 110837674.65652709, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 6688966964170.6807, 20.000000000000000, 0.50000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 6688966964170.9326, 20.000000000000000, 0.50000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler217 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 1.4305114746093750e-05
-// max(|f - f_GSL| / |f_GSL|): 1.9261147266354006e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9261147266353426e-15
+// mean(f - f_GSL): 7.5292535811914037e-07
+// variance(f - f_GSL): 1.0770292922663892e-11
+// stddev(f - f_GSL): 3.2818124447725363e-06
const testcase_hyperg<double>
data218[19] =
{
{ 0.48716309885816822, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.50965859152542337, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.53554809210658938, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.56576689207507136, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.60164849637133655, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.64516711595404364, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.69938278735493520, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.64516711595404408, 20.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.69938278735493553, 20.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.76931621518401860, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.86381808725530662, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.2152051956815531, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 1.6052546785425543, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.6052546785425557, 20.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 2.4765586046012635, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 5.1564492216997486, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 5.1564492216997611, 20.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 18.446158392136365, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 150.44577670123971, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 3862.6317400115768, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3862.6317400116104, 20.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 632428.34833625401, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 7426927663.3808765, 20.000000000000000, 0.50000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 7426927663.3810987, 20.000000000000000, 0.50000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler218 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 4.0978193283081055e-08
-// max(|f - f_GSL| / |f_GSL|): 1.7692881266931737e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7692881266931270e-15
+// mean(f - f_GSL): 2.1571346697195273e-09
+// variance(f - f_GSL): 8.8377831004256086e-17
+// stddev(f - f_GSL): 9.4009484098284519e-09
const testcase_hyperg<double>
data219[19] =
{
{ 0.54703266209548373, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.56997321774144960, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.59603026159654982, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.62596978851120511, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.66084565876898915, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.70215256667232873, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.75208916592008557, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.70215256667232862, 20.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.75208916592008568, 20.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.81403631111658625, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.89348608489854597, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.1517793185139173, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.3878110313656598, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.3878110313656606, 20.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 1.8061071794572381, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 2.7148594517859586, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2.7148594517859612, 20.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 5.4529435709049361, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 19.487310275377109, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 191.69079165937470, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 191.69079165937592, 20.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 10218.543981792311, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 23160836.646583911, 20.000000000000000, 0.50000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 23160836.646584522, 20.000000000000000, 0.50000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler219 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 2.9103830456733704e-10
-// max(|f - f_GSL| / |f_GSL|): 1.6694673196526831e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6694673196526424e-15
+// mean(f - f_GSL): 1.5333418745237732e-11
+// variance(f - f_GSL): 4.4575632631399987e-21
+// stddev(f - f_GSL): 6.6764985307719485e-11
const testcase_hyperg<double>
data220[19] =
{
{ 0.59292067298616025, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.61572496720679892, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.64135339122875590, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.67043457419280461, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.70380956268170969, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.74263251901495220, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.78853555445528256, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.74263251901495264, 20.000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.78853555445528289, 20.000000000000000, 0.50000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.84391122775673755, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.91242401018807373, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.1169059681274873, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.2825928301302667, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.2825928301302669, 20.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1.5385937789924939, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 1.9895771187893898, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 1.9895771187893914, 20.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 2.9707335806970168, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 6.0299506157180467, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 24.259090336955577, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 24.259090336955669, 20.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 406.27267173257223, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 174330.03997220192, 20.000000000000000, 0.50000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 174330.03997220617, 20.000000000000000, 0.50000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler220 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 1024.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7510400000000382e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7510399999999635e-15
+// mean(f - f_GSL): 53.894788252704814
+// variance(f - f_GSL): 55188.204676932175
+// stddev(f - f_GSL): 234.92169903381034
const testcase_hyperg<double>
data221[19] =
{
{ 0.058479236576646311, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.065788544763137821, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.075184824937824482, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.087707688693157121, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.10521567442213345, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.13135877960541550, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.17423854066297098, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.13135877960541509, 20.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.17423854066297137, 20.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.25492082527223520, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.44025895219654843, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.3698615820910360, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 17.997089220808483, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 17.997089220808562, 20.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 153.73298291118951, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 2159.1667587825627, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2159.1667587825768, 20.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 55188.105263157879, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 3191209.3921857267, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 646910975.29152656, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 646910975.29153574, 20.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 1254834626850.2659, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 5.8479532163741414e+17, 20.000000000000000, 1.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.8479532163743910e+17, 20.000000000000000, 1.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler221 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 0.21875000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5452521875000274e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5452521874999694e-15
+// mean(f - f_GSL): 0.011513220685868108
+// variance(f - f_GSL): 0.0025185017633005862
+// stddev(f - f_GSL): 0.050184676578618956
const testcase_hyperg<double>
data222[19] =
{
{ 0.15519511120894958, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.17197165701692893, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.19276847315207329, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.21920107206179093, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.25386158960390576, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.30115970686600674, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.36916408142057106, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.30115970686600663, 20.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.36916408142057128, 20.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.47406175901569547, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.65237908266239919, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.8227213362622299, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 4.3716358339791332, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 4.3716358339791430, 20.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 15.670841312959222, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 94.742651122760179, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 94.742651122760662, 20.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 1081.7275541795671, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 27809.787731465960, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2329811.1715181042, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2329811.1715181284, 20.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1537787532.6780224, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 141562653506999.88, 20.000000000000000, 1.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 141562653507005.19, 20.000000000000000, 1.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler222 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.00024414062500000000
-// max(|f - f_GSL| / |f_GSL|): 1.6763226855512825e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6763226855512285e-15
+// mean(f - f_GSL): 1.2849899481406474e-05
+// variance(f - f_GSL): 3.1370759089735494e-09
+// stddev(f - f_GSL): 5.6009605506319623e-05
const testcase_hyperg<double>
data223[19] =
{
{ 0.23253645591196551, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.25484220947068342, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.28181987881113812, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.31508211677735770, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.35706285886959610, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.41160053409238206, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.48508083111181960, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.41160053409238190, 20.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.48508083111181938, 20.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.58885194371375260, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.74482241684585782, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.4700356864367146, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 2.4955144453055143, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2.4955144453055174, 20.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 5.3506594845833471, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 16.618413752184221, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 16.618413752184267, 20.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 89.310629514963878, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1029.3439900542960, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 35659.847863372350, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 35659.847863372670, 20.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 8009309.6233230168, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 145640590027.39731, 20.000000000000000, 1.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 145640590027.40201, 20.000000000000000, 1.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler223 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.1525573730468750e-07
-// max(|f - f_GSL| / |f_GSL|): 1.7237966704608456e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7237966704607975e-15
+// mean(f - f_GSL): 3.7648905688931523e-08
+// variance(f - f_GSL): 2.6925522675291747e-14
+// stddev(f - f_GSL): 1.6408998347032566e-07
const testcase_hyperg<double>
data224[19] =
{
{ 0.29614148314592509, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.32176277356430805, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.35217870475550511, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.38885270445515113, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.43389978380608418, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.49048612522269458, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.49048612522269414, 20.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
{ 0.56355539635634599, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.66123153239117671, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.79773363961895416, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.3245132157016595, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 1.9065148749742076, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1.9065148749742094, 20.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 3.1328798652457452, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 6.4172532944033476, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 6.4172532944033636, 20.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 19.071683734222436, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 104.41989641582512, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 1510.5743992324240, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1510.5743992324351, 20.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 115518.14360562043, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 414930455.29173034, 20.000000000000000, 1.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 414930455.29174191, 20.000000000000000, 1.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler224 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 4.6566128730773926e-09
-// max(|f - f_GSL| / |f_GSL|): 1.6665618165272271e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6665618165271877e-15
+// mean(f - f_GSL): 2.4523176471958370e-10
+// variance(f - f_GSL): 1.1411894517911952e-18
+// stddev(f - f_GSL): 1.0682646918208967e-09
const testcase_hyperg<double>
data225[19] =
{
{ 0.34954259539177701, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.37714038609235134, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.40942091659748781, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.44767109606846422, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.49368984777532227, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.55006638216982295, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.62065830207408890, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.55006638216982318, 20.000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.62065830207408901, 20.000000000000000, 1.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.71145554513583764, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.83223839666914623, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.2466748028187731, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 1.6386752725021749, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 1.6386752725021760, 20.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 2.3340068725479681, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 3.7848108613132054, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 3.7848108613132099, 20.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 7.6754638550304133, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 23.344217312927277, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 149.83491198246921, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 149.83491198246998, 20.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 3936.9253501916060, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 2794143.5036480185, 20.000000000000000, 1.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 2794143.5036480846, 20.000000000000000, 1.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler225 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 245760.00000000000
// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): -12934.709704750463
+// variance(f - f_GSL): 3178841667.3467402
+// stddev(f - f_GSL): 56381.217327641483
const testcase_hyperg<double>
data226[19] =
{
{ 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.00030072865982171723, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
{ 0.0011951964277455193, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.0052617832469731814, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0052617832469732005, 20.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.026084053304588847, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.14864362802414346, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 8.2252633399699757, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 86.736173798840269, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 86.736173798840738, 20.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 1253.2542894196865, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 27351.112277912434, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 27351.112277912678, 20.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1048576.0000000000, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 90949470.177293226, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 28679719907.924358, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 28679719907.924767, 20.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 95367431640624.906, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 9.9999999999998657e+19, 20.000000000000000, 2.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.0000000000000292e+20, 20.000000000000000, 2.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler226 = 5.0000000000000039e-13;
// Test data for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 40.000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8712609271523571e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8712609271522778e-15
+// mean(f - f_GSL): 2.1052671749403089
+// variance(f - f_GSL): 84.210508462254538
+// stddev(f - f_GSL): 9.1766283820504881
const testcase_hyperg<double>
data227[19] =
{
{ 0.018828092583720632, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.023381944060455365, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.029789623984280887, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.039191021482500567, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.053727813036721528, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { 0.077762010061669079, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.12110505620123306, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.077762010061668857, 20.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.12110505620123323, 20.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.20870149809080582, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.41429234328785763, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.1308087404153113, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 13.586180626453050, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 13.586180626453100, 20.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 87.117304082784415, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 889.26474381242826, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 889.26474381243384, 20.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 16231.913312693494, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 653537.51168945129, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 87756230.793848589, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 87756230.793849647, 20.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 101493977171.74945, 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 21375960679556916., 20.000000000000000, 2.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 21375960679557820., 20.000000000000000, 2.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler227 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 0.031250000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.6379336164122315e-15
+// max(|f - f_GSL| / |f_GSL|): 1.6379336164121759e-15
+// mean(f - f_GSL): 0.0016447556893365942
+// variance(f - f_GSL): 5.1397960874034849e-05
+// stddev(f - f_GSL): 0.0071692371193896806
const testcase_hyperg<double>
data228[19] =
{
{ 0.049200410661854238, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.059460876757152607, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.073244762686653225, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.092334626017932769, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.11976760350696856, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.16102414609169408, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.22670456785796225, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.16102414609169405, 20.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.22670456785796236, 20.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.33912903252727361, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.55049794600858049, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 2.1254722872032232, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 5.6261213886736172, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 5.6261213886736314, 20.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 20.137315891130996, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 108.04381584643853, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 108.04381584643900, 20.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 992.41692466460245, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 19055.363816004465, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 1105471.9504312086, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1105471.9504312191, 20.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 448521363.90608919, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 19078917293639.004, 20.000000000000000, 2.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 19078917293639.652, 20.000000000000000, 2.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler228 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 8.3923339843750000e-05
-// max(|f - f_GSL| / |f_GSL|): 1.8221514326727084e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8221514326726564e-15
+// mean(f - f_GSL): 4.4172143495227617e-06
+// variance(f - f_GSL): 3.7068906120670492e-10
+// stddev(f - f_GSL): 1.9253287023433297e-05
const testcase_hyperg<double>
data229[19] =
{
{ 0.083753547015334884, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.099238444687035743, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.11938294012867748, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.14622683905023329, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.18303556733713028, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.23527764069382412, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.31261681740827085, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.23527764069382415, 20.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.31261681740827069, 20.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.43327581880538862, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.63445840637296680, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 1.7438842395813297, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 3.5070840938209269, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 3.5070840938209331, 20.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 8.6573372006089713, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 28.779342118408906, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 28.779342118408998, 20.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 147.50178613955714, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1427.1686016136398, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 36780.643714655642, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 36780.643714655955, 20.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 5313869.6058585485, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 46057280607.381966, 20.000000000000000, 2.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 46057280607.383286, 20.000000000000000, 2.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler229 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 5.0663948059082031e-07
-// max(|f - f_GSL| / |f_GSL|): 1.9925479281070174e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9925479281069681e-15
+// mean(f - f_GSL): 2.6669880982017962e-08
+// variance(f - f_GSL): 1.3509399735876687e-14
+// stddev(f - f_GSL): 1.1622994337035826e-07
const testcase_hyperg<double>
data230[19] =
{
{ 0.11920045035073676, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.13907946814302777, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.16431439792559696, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.19698796016986989, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.24028510928790547, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.29926031296483113, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.38229327814229153, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.29926031296483130, 20.000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.38229327814229175, 20.000000000000000, 2.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.50402047283093132, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.69167261179586526, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 1.5503152253394308, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 2.6469548193635797, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 2.6469548193635828, 20.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 5.1882631330566813, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 12.476792759124516, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 12.476792759124546, 20.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 41.026391565091259, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 220.92584715988204, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 2677.0834450236207, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 2677.0834450236389, 20.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 141774.31260689779, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 254267148.83196995, 20.000000000000000, 2.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 254267148.83197621, 20.000000000000000, 2.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler230 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 60129542144.000000
-// max(|f - f_GSL| / |f_GSL|): 2.0181355730233454e-15
+// max(|f - f_GSL| / |f_GSL|): 2.0181355730232468e-15
+// mean(f - f_GSL): 3164712852.2154636
+// variance(f - f_GSL): 1.9029272767041847e+20
+// stddev(f - f_GSL): 13794663014.021708
const testcase_hyperg<double>
data231[19] =
{
{ -1.8650300348790099e-05, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ -3.6488008415371319e-05, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ -6.4614776410961038e-05, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -8.4495207102246549e-05, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 2.2276197023825424e-05, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.00070736115111447856, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { 0.0027829732057273854, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.00070736115111457809, 20.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0027829732057272588, 20.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0013283545664371644, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.041767631015048774, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 61.311496556100003, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 2397.4420539085681, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 2397.4420539085872, 20.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 103687.60998586559, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 6247196.6451068865, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 6247196.6451069508, 20.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 656408576.00000000, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 165334768098.54715, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 175097125520816.81, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 175097125520819.91, 20.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 2.9794599999999321e+25, 20.000000000000000, 5.0000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.9794600000000777e+25, 20.000000000000000, 5.0000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler231 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 9437184.0000000000
-// max(|f - f_GSL| / |f_GSL|): 2.0515617391304744e-15
+// max(|f - f_GSL| / |f_GSL|): 2.0515617391303805e-15
+// mean(f - f_GSL): 496693.97369064158
+// variance(f - f_GSL): 4687391593519.1660
+// stddev(f - f_GSL): 2165038.4739119918
const testcase_hyperg<double>
data232[19] =
{
{ -3.6403884516313627e-06, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ -9.5873829246491408e-06, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ -2.6052245147200097e-05, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ -7.2378303598384501e-05, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ -0.00020048577321417379, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { -0.00051222704046227391, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { -0.00080950511491898055, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { -0.00051222704046234439, 20.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.00080950511491888959, 20.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0043473422174314250, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.081078342558623853, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 12.794854084397739, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 195.15639104739046, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 195.15639104739174, 20.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 3938.7991953190131, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 118521.48653762060, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 118521.48653762160, 20.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 6291455.9999999972, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 773070496.50699198, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 363276452167.04102, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 363276452167.04718, 20.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 2002716064453133.0, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 4.5999999999999109e+21, 20.000000000000000, 5.0000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4.6000000000001222e+21, 20.000000000000000, 5.0000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler232 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 5120.0000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.7944916193878923e-15
+// max(|f - f_GSL| / |f_GSL|): 1.7944916193878173e-15
+// mean(f - f_GSL): 269.47388985302263
+// variance(f - f_GSL): 1379705.1461701661
+// stddev(f - f_GSL): 1174.6085076186730
const testcase_hyperg<double>
data233[19] =
{
{ 0.00014313323624053599, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.00025426183473118769, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.00048255612836437054, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.00099096904674794185, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.0022347805521915616, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 0.0056271390060292845, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { 0.016109059519227316, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.0056271390060294354, 20.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.016109059519227351, 20.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.053453465775609076, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.20995202901839263, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 5.9534372167648799, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 46.157632071205875, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 46.157632071206095, 20.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 494.32074431164915, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 7989.5277611775946, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 7989.5277611776519, 20.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 224179.55830753347, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 13848144.485282511, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 2948587692.8891716, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2948587692.8892150, 20.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 5940513286161.6602, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 2.8531757655945201e+18, 20.000000000000000, 5.0000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 2.8531757655946394e+18, 20.000000000000000, 5.0000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler233 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 7.0000000000000000
-// max(|f - f_GSL| / |f_GSL|): 1.5351977183414298e-15
+// max(|f - f_GSL| / |f_GSL|): 1.5351977183413728e-15
+// mean(f - f_GSL): 0.36842306154970872
+// variance(f - f_GSL): 2.5789458059294108
+// stddev(f - f_GSL): 1.6059096506122039
const testcase_hyperg<double>
data234[19] =
{
{ 0.0012492049968744917, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 0.0019931241968014200, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 0.0033203386861410844, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ 0.0058191894509856774, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ 0.010830090368313864, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 0.021653062305192875, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.047180821280919043, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.021653062305193541, 20.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.047180821280919195, 20.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.11405637279736212, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.31275468794721017, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 3.8598904658643969, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 18.806301417906667, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 18.806301417906734, 20.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 122.77054465017432, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1168.4762146808946, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1168.4762146809012, 20.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 18437.511788521082, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 597441.79669264762, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 59390411.369227782, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 59390411.369228527, 20.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 44681668993.361603, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 4559673269683164.0, 20.000000000000000, 5.0000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 4559673269683333.0, 20.000000000000000, 5.0000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler234 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 0.029296875000000000
-// max(|f - f_GSL| / |f_GSL|): 1.8717083246628922e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8717083246628342e-15
+// mean(f - f_GSL): 0.0015419659355661440
+// variance(f - f_GSL): 4.5173964710879197e-05
+// stddev(f - f_GSL): 0.0067211579888348996
const testcase_hyperg<double>
data235[19] =
{
{ 0.0038867957051370739, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 0.0058484892597364235, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 0.0090987656053758189, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 0.014714392537270657, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.024900404542056772, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { 0.044460184663785027, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.084638849196356780, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { 0.044460184663785055, 20.000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.084638849196357113, 20.000000000000000, 5.0000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.17409058241291026, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.39357055823580767, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 2.9410794636226596, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 10.417226071414344, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 10.417226071414374, 20.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 46.930585873140835, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 290.76717121814852, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 290.76717121814988, 20.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 2788.1641083374830, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 50228.117718560752, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 2433042.3476752634, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 2433042.3476752895, 20.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 705345246.77141762, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 15652478868616.762, 20.000000000000000, 5.0000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 15652478868617.246, 20.000000000000000, 5.0000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler235 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 2.5940733853654057e+18
-// max(|f - f_GSL| / |f_GSL|): 1.8312596334405405e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8312596334404269e-15
+// mean(f - f_GSL): 1.3653017829015250e+17
+// variance(f - f_GSL): 4.1617051640949032e+35
+// stddev(f - f_GSL): 6.4511279355589466e+17
const testcase_hyperg<double>
data236[19] =
{
{ -2.1776535312781759e-07, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ -2.9128833151630439e-06, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ -9.4755553429932710e-06, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -1.2844297353852837e-05, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ 3.6576965483549205e-05, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 0.00020847453890689954, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { -0.00022868510398160936, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 0.00020847453890703339, 20.000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.00022868510398194936, 20.000000000000000, 10.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.0021855513841943421, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.014662111759334568, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 746.44776348798098, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 136080.48445225612, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 136080.48445225772, 20.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 23094279.597826406, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 5315913395.5545301, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 5315913395.5545979, 20.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 2261935718399.9990, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 2669150854828235.0, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 1.7499363099365994e+19, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.7499363099366351e+19, 20.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 1.4165513933661626e+33, 20.000000000000000, 10.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.4165513933662505e+33, 20.000000000000000, 10.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler236 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 299067162755072.00
-// max(|f - f_GSL| / |f_GSL|): 2.1129345912024644e-15
+// max(|f - f_GSL| / |f_GSL|): 2.1129345912023457e-15
+// mean(f - f_GSL): 15740377042297.895
+// variance(f - f_GSL): 4.7074334083472640e+27
+// stddev(f - f_GSL): 68610738287437.656
const testcase_hyperg<double>
data237[19] =
{
{ 1.7149006966334498e-07, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ 3.2399324906563845e-07, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.6015317699713284e-07, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ -2.0500917201273337e-06, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ -1.0175546788592665e-05, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { -1.1720101988158874e-05, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 0.00014199637113975139, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { -1.1720101988188077e-05, 20.000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.00014199637113982382, 20.000000000000000, 10.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.00021263363640641769, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.0072649256698439626, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 90.430293772869618, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 6248.1455940292308, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 6248.1455940292872, 20.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 501143.39852548984, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 58852027.356439680, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 58852027.356440276, 20.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 12942923093.333330, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 7618073993853.6592, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 22630251562549288., 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 22630251562549772., 20.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 1.4154113619999653e+29, 20.000000000000000, 10.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.4154113620000448e+29, 20.000000000000000, 10.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler237 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 103079215104.00000
-// max(|f - f_GSL| / |f_GSL|): 1.8869870511942065e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8869870511941024e-15
+// mean(f - f_GSL): 5425221928.4235201
+// variance(f - f_GSL): 5.5922760890380314e+20
+// stddev(f - f_GSL): 23647993760.651306
const testcase_hyperg<double>
data238[19] =
{
{ -1.6667473284194196e-08, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ 8.6214843496406671e-08, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ 5.7778331275185146e-07, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ 2.1911400502042259e-06, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 4.7440049217199358e-06, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { -1.0564233315113883e-05, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { -0.00017990026051873263, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { -1.0564233314712615e-05, 20.000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { -0.00017990026051847404, 20.000000000000000, 10.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ -0.00027618146288724629, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.030606019577723666, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 27.832854169493341, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 874.00624088575228, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 874.00624088575910, 20.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 36049.199340831554, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 2270967.7298624986, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 2270967.7298625209, 20.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 266979100.44444439, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 80311224337.493027, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 110111693103799.72, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 110111693103801.77, 20.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 5.4626349999998603e+25, 20.000000000000000, 10.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.4626350000001618e+25, 20.000000000000000, 10.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler238 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 100663296.00000000
-// max(|f - f_GSL| / |f_GSL|): 1.9414329026037087e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9414329026036117e-15
+// mean(f - f_GSL): 5298068.6316046715
+// variance(f - f_GSL): 533321003794731.12
+// stddev(f - f_GSL): 23093743.823701065
const testcase_hyperg<double>
data239[19] =
{
{ -1.5843795889906876e-07, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ -5.4877276002864784e-07, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ -1.7169507967699695e-06, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ -4.5236439749819329e-06, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ -5.5690492560381956e-06, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 5.6914115607022928e-05, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 0.00082507252097525810, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 5.6914115606653561e-05, 20.000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 0.00082507252097489250, 20.000000000000000, 10.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.0085739249288230429, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.088244357683754687, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 13.387208440156897, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 226.77895441155110, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 226.77895441155252, 20.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 5281.5716482686785, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 189431.77762850464, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 189431.77762850633, 20.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 12408149.333333332, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1966782292.5839682, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 1274123112205.7495, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1274123112205.7700, 20.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 10903676350911508., 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 5.1849999999998819e+22, 20.000000000000000, 10.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 5.1850000000001411e+22, 20.000000000000000, 10.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler239 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
-// max(|f - f_GSL|): 425984.00000000000
+// max(|f - f_GSL|): 245760.00000000000
// max(|f - f_GSL| / |f_GSL|): 5.4067200000000052e-15
+// mean(f - f_GSL): -12934.709704750463
+// variance(f - f_GSL): 3178841667.3467402
+// stddev(f - f_GSL): 56381.217327641483
const testcase_hyperg<double>
data240[19] =
{
{ 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 0.00030072865982171723, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
{ 0.0011951964277455193, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { 0.0052617832469731814, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { 0.0052617832469732005, 20.000000000000000, 10.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.026084053304588847, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.14864362802414346, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 8.2252633399699757, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 86.736173798840269, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 86.736173798840738, 20.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 1253.2542894196865, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 27351.112277912434, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 27351.112277912678, 20.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 1048576.0000000000, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 90949470.177293226, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 28679719907.924358, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 28679719907.924767, 20.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 95367431640624.906, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 9.9999999999998657e+19, 20.000000000000000, 10.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.0000000000000292e+20, 20.000000000000000, 10.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler240 = 5.0000000000000039e-13;
// Test data for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
// max(|f - f_GSL|): 8.1129638414606682e+31
-// max(|f - f_GSL| / |f_GSL|): 2.1657042453581189e-15
+// max(|f - f_GSL| / |f_GSL|): 2.1657042453579367e-15
+// mean(f - f_GSL): 4.2699809691927378e+30
+// variance(f - f_GSL): 3.3808552803188121e+96
+// stddev(f - f_GSL): 1.8387102219541860e+48
const testcase_hyperg<double>
data241[19] =
{
{ 7.4612991227725660e-09, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.90000000000000002 },
+ 2.0000000000000000, -0.90000000000000002, 0.0 },
{ 1.1006588952366092e-07, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.80000000000000004 },
+ 2.0000000000000000, -0.80000000000000004, 0.0 },
{ 2.0126933732744113e-07, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.69999999999999996 },
+ 2.0000000000000000, -0.69999999999999996, 0.0 },
{ -1.0013775379571396e-06, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.59999999999999998 },
+ 2.0000000000000000, -0.59999999999999998, 0.0 },
{ -3.0371956856925611e-06, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.50000000000000000 },
- { 2.2012669924734483e-05, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.40000000000000002 },
- { -6.2415598025480351e-05, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.30000000000000004 },
+ 2.0000000000000000, -0.50000000000000000, 0.0 },
+ { 2.2012669924829930e-05, 20.000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.39999999999999991, 0.0 },
+ { -6.2415598025411788e-05, 20.000000000000000, 20.000000000000000,
+ 2.0000000000000000, -0.29999999999999993, 0.0 },
{ 0.00033551320394368590, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.19999999999999996 },
+ 2.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.0062342152641436752, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, -0.099999999999999978 },
+ 2.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.0000000000000000 },
+ 2.0000000000000000, 0.0000000000000000, 0.0 },
{ 34830.688900741610, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.10000000000000009 },
- { 67626221.263030857, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.19999999999999996 },
+ 2.0000000000000000, 0.10000000000000009, 0.0 },
+ { 67626221.263031960, 20.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.20000000000000018, 0.0 },
{ 102764604848.69762, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.30000000000000004 },
- { 220278355222373.38, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.39999999999999991 },
+ 2.0000000000000000, 0.30000000000000004, 0.0 },
+ { 220278355222376.97, 20.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.40000000000000013, 0.0 },
{ 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.50000000000000000 },
+ 2.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.60000000000000009 },
- { 3.5234592919485287e+27, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.69999999999999996 },
+ 2.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3.5234592919486348e+27, 20.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.70000000000000018, 0.0 },
{ 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.80000000000000004 },
- { 3.7461088506658564e+46, 20.000000000000000, 20.000000000000000,
- 2.0000000000000000, 0.89999999999999991 },
+ 2.0000000000000000, 0.80000000000000004, 0.0 },
+ { 3.7461088506661713e+46, 20.000000000000000, 20.000000000000000,
+ 2.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler241 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
// max(|f - f_GSL|): 4.3327901374988310e+27
-// max(|f - f_GSL| / |f_GSL|): 2.2075464057601018e-15
+// max(|f - f_GSL| / |f_GSL|): 2.2075464057599215e-15
+// mean(f - f_GSL): 2.2804158618486009e+26
+// variance(f - f_GSL): 1.7798116217456159e+67
+// stddev(f - f_GSL): 4.2187813663967183e+33
const testcase_hyperg<double>
data242[19] =
{
{ -1.5895901122487120e-09, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.90000000000000002 },
+ 4.0000000000000000, -0.90000000000000002, 0.0 },
{ -2.4403576191590296e-09, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.80000000000000004 },
+ 4.0000000000000000, -0.80000000000000004, 0.0 },
{ 1.1622915284663225e-08, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.69999999999999996 },
+ 4.0000000000000000, -0.69999999999999996, 0.0 },
{ 6.3899796223275262e-08, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.59999999999999998 },
+ 4.0000000000000000, -0.59999999999999998, 0.0 },
{ -1.3503608350984134e-07, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.50000000000000000 },
- { -1.2198533623363349e-06, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.40000000000000002 },
- { 9.9086618119887468e-06, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.30000000000000004 },
+ 4.0000000000000000, -0.50000000000000000, 0.0 },
+ { -1.2198533624395468e-06, 20.000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.39999999999999991, 0.0 },
+ { 9.9086618121819025e-06, 20.000000000000000, 20.000000000000000,
+ 4.0000000000000000, -0.29999999999999993, 0.0 },
{ -7.6797020080190715e-05, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.19999999999999996 },
+ 4.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.0013196405087170897, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, -0.099999999999999978 },
+ 4.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.0000000000000000 },
+ 4.0000000000000000, 0.0000000000000000, 0.0 },
{ 2274.2044768143564, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.10000000000000009 },
- { 1611640.1560475440, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.19999999999999996 },
+ 4.0000000000000000, 0.10000000000000009, 0.0 },
+ { 1611640.1560475677, 20.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.20000000000000018, 0.0 },
{ 1147063984.7359734, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.30000000000000004 },
- { 1253162497163.8311, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.39999999999999991 },
+ 4.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1253162497163.8503, 20.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.40000000000000013, 0.0 },
{ 3071321673390476.0, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.50000000000000000 },
+ 4.0000000000000000, 0.50000000000000000, 0.0 },
{ 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.60000000000000009 },
- { 2.3658463807419519e+24, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.69999999999999996 },
+ 4.0000000000000000, 0.60000000000000009, 0.0 },
+ { 2.3658463807420230e+24, 20.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.80000000000000004 },
- { 1.9627175792062075e+42, 20.000000000000000, 20.000000000000000,
- 4.0000000000000000, 0.89999999999999991 },
+ 4.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.9627175792063675e+42, 20.000000000000000, 20.000000000000000,
+ 4.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler242 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
// max(|f - f_GSL|): 7.5557863725914323e+23
-// max(|f - f_GSL| / |f_GSL|): 1.9837376456390635e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9837376456389093e-15
+// mean(f - f_GSL): 3.9767296698428338e+22
+// variance(f - f_GSL): 4.6773832769218855e+49
+// stddev(f - f_GSL): 6.8391397682178457e+24
const testcase_hyperg<double>
data243[19] =
{
{ 8.0159783892777232e-11, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.90000000000000002 },
+ 6.0000000000000000, -0.90000000000000002, 0.0 },
{ -6.4422705184649393e-10, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.80000000000000004 },
+ 6.0000000000000000, -0.80000000000000004, 0.0 },
{ -3.7526132950808576e-09, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.69999999999999996 },
+ 6.0000000000000000, -0.69999999999999996, 0.0 },
{ -1.7692034036274638e-09, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.59999999999999998 },
+ 6.0000000000000000, -0.59999999999999998, 0.0 },
{ 7.9304558764774354e-08, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.50000000000000000 },
- { 5.9348070191507617e-08, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.40000000000000002 },
- { -3.5827694518409289e-06, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.30000000000000004 },
+ 6.0000000000000000, -0.50000000000000000, 0.0 },
+ { 5.9348070417710214e-08, 20.000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.39999999999999991, 0.0 },
+ { -3.5827694518623355e-06, 20.000000000000000, 20.000000000000000,
+ 6.0000000000000000, -0.29999999999999993, 0.0 },
{ 4.4951490418031519e-05, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.19999999999999996 },
+ 6.0000000000000000, -0.19999999999999996, 0.0 },
{ -0.0013716249406309328, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, -0.099999999999999978 },
+ 6.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.0000000000000000 },
+ 6.0000000000000000, 0.0000000000000000, 0.0 },
{ 415.32493304415505, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.10000000000000009 },
- { 121300.42991518594, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.19999999999999996 },
+ 6.0000000000000000, 0.10000000000000009, 0.0 },
+ { 121300.42991518755, 20.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.20000000000000018, 0.0 },
{ 42725673.833462097, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.30000000000000004 },
- { 24588915328.261719, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.39999999999999991 },
+ 6.0000000000000000, 0.30000000000000004, 0.0 },
+ { 24588915328.262096, 20.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.40000000000000013, 0.0 },
{ 31929082412503.652, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.50000000000000000 },
+ 6.0000000000000000, 0.50000000000000000, 0.0 },
{ 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.60000000000000009 },
- { 5.7726220597696125e+21, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.69999999999999996 },
+ 6.0000000000000000, 0.60000000000000009, 0.0 },
+ { 5.7726220597697614e+21, 20.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.70000000000000018, 0.0 },
{ 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.80000000000000004 },
- { 3.8088637321581534e+38, 20.000000000000000, 20.000000000000000,
- 6.0000000000000000, 0.89999999999999991 },
+ 6.0000000000000000, 0.80000000000000004, 0.0 },
+ { 3.8088637321584496e+38, 20.000000000000000, 20.000000000000000,
+ 6.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler243 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
// max(|f - f_GSL|): 3.3204139332677193e+20
-// max(|f - f_GSL| / |f_GSL|): 1.9148846081415644e-15
+// max(|f - f_GSL| / |f_GSL|): 1.9148846081414276e-15
+// mean(f - f_GSL): 1.7475862807802462e+19
+// variance(f - f_GSL): 6.4226791492038630e+39
+// stddev(f - f_GSL): 8.0141619332303634e+19
const testcase_hyperg<double>
data244[19] =
{
{ 1.0699067880816065e-10, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.90000000000000002 },
+ 8.0000000000000000, -0.90000000000000002, 0.0 },
{ 5.4297771645951943e-10, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.80000000000000004 },
+ 8.0000000000000000, -0.80000000000000004, 0.0 },
{ 9.7625476382187751e-10, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.69999999999999996 },
+ 8.0000000000000000, -0.69999999999999996, 0.0 },
{ -6.7257763949908548e-09, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.59999999999999998 },
+ 8.0000000000000000, -0.59999999999999998, 0.0 },
{ -5.4634571496409877e-08, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.50000000000000000 },
- { 1.4595644213797847e-07, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.40000000000000002 },
- { 3.3515966494792549e-06, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.30000000000000004 },
+ 8.0000000000000000, -0.50000000000000000, 0.0 },
+ { 1.4595644217972025e-07, 20.000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.39999999999999991, 0.0 },
+ { 3.3515966496921257e-06, 20.000000000000000, 20.000000000000000,
+ 8.0000000000000000, -0.29999999999999993, 0.0 },
{ -6.5848086985738461e-05, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.19999999999999996 },
+ 8.0000000000000000, -0.19999999999999996, 0.0 },
{ 0.0034800171306214847, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, -0.099999999999999978 },
+ 8.0000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.0000000000000000 },
+ 8.0000000000000000, 0.0000000000000000, 0.0 },
{ 130.93865856750304, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.10000000000000009 },
- { 17850.203502975532, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.19999999999999996 },
+ 8.0000000000000000, 0.10000000000000009, 0.0 },
+ { 17850.203502975721, 20.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.20000000000000018, 0.0 },
{ 3307058.5655149994, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.30000000000000004 },
- { 1041065396.2302787, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.39999999999999991 },
+ 8.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1041065396.2302928, 20.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.40000000000000013, 0.0 },
{ 735221357488.41736, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.50000000000000000 },
+ 8.0000000000000000, 0.50000000000000000, 0.0 },
{ 1785176805049585.2, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.60000000000000009 },
- { 3.2302829930269192e+19, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.69999999999999996 },
+ 8.0000000000000000, 0.60000000000000009, 0.0 },
+ { 3.2302829930269979e+19, 20.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.70000000000000018, 0.0 },
{ 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.80000000000000004 },
- { 1.7340021007794567e+35, 20.000000000000000, 20.000000000000000,
- 8.0000000000000000, 0.89999999999999991 },
+ 8.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.7340021007795807e+35, 20.000000000000000, 20.000000000000000,
+ 8.0000000000000000, 0.90000000000000013, 0.0 },
};
const double toler244 = 2.5000000000000020e-13;
// Test data for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
// max(|f - f_GSL|): 3.4227357168015770e+17
-// max(|f - f_GSL| / |f_GSL|): 2.2509396750115090e-15
+// max(|f - f_GSL| / |f_GSL|): 2.2509396750113666e-15
+// mean(f - f_GSL): 18014398513897048.
+// variance(f - f_GSL): 6.1659968607222131e+33
+// stddev(f - f_GSL): 78523861728281120.
const testcase_hyperg<double>
data245[19] =
{
{ -1.7945360901577764e-10, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.90000000000000002 },
+ 10.000000000000000, -0.90000000000000002, 0.0 },
{ -4.4440665776938741e-10, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.80000000000000004 },
+ 10.000000000000000, -0.80000000000000004, 0.0 },
{ 6.6171615263373664e-10, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.69999999999999996 },
+ 10.000000000000000, -0.69999999999999996, 0.0 },
{ 1.5453889374050929e-08, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.59999999999999998 },
+ 10.000000000000000, -0.59999999999999998, 0.0 },
{ 7.5754083909301490e-08, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.50000000000000000 },
- { -4.1113628642452120e-07, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.40000000000000002 },
- { -9.5300704264471230e-06, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.30000000000000004 },
+ 10.000000000000000, -0.50000000000000000, 0.0 },
+ { -4.1113628650335901e-07, 20.000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.39999999999999991, 0.0 },
+ { -9.5300704263777713e-06, 20.000000000000000, 20.000000000000000,
+ 10.000000000000000, -0.29999999999999993, 0.0 },
{ 0.00016081533175773833, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.19999999999999996 },
+ 10.000000000000000, -0.19999999999999996, 0.0 },
{ 0.017684650940379586, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, -0.099999999999999978 },
+ 10.000000000000000, -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.0000000000000000 },
+ 10.000000000000000, 0.0000000000000000, 0.0 },
{ 57.562247312454403, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.10000000000000009 },
- { 4124.4159820362511, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.19999999999999996 },
+ 10.000000000000000, 0.10000000000000009, 0.0 },
+ { 4124.4159820362947, 20.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.20000000000000018, 0.0 },
{ 428774.21436196787, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.30000000000000004 },
- { 76996819.900892526, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.39999999999999991 },
+ 10.000000000000000, 0.30000000000000004, 0.0 },
+ { 76996819.900893494, 20.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.40000000000000013, 0.0 },
{ 30473174828.943691, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.50000000000000000 },
+ 10.000000000000000, 0.50000000000000000, 0.0 },
{ 39291970835753.094, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.60000000000000009 },
- { 3.3890331048069018e+17, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.69999999999999996 },
+ 10.000000000000000, 0.60000000000000009, 0.0 },
+ { 3.3890331048069786e+17, 20.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.70000000000000018, 0.0 },
{ 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.80000000000000004 },
- { 1.5205808288860858e+32, 20.000000000000000, 20.000000000000000,
- 10.000000000000000, 0.89999999999999991 },
+ 10.000000000000000, 0.80000000000000004, 0.0 },
+ { 1.5205808288861820e+32, 20.000000000000000, 20.000000000000000,
+ 10.000000000000000, 0.90000000000000013, 0.0 },
};
const double toler245 = 2.5000000000000020e-13;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_hyperg<Tp> (&data)[Num], Tp toler)
+ test(const testcase_hyperg<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = __gnu_cxx::hyperg(data[i].a, data[i].b,
+ const Ret f = __gnu_cxx::hyperg(data[i].a, data[i].b,
data[i].c, data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
- max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
+ max_abs_diff = std::abs(diff);
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc b/libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc
index d6a4f55fb7c..da6e675bf76 100644
--- a/libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/01_assoc_laguerre/check_value.cc
@@ -41,2008 +41,2200 @@
// Test data for n=0, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data001[11] =
{
{ 1.0000000000000000, 0, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for n=0, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data002[11] =
{
{ 1.0000000000000000, 0, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for n=0, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data003[11] =
{
{ 1.0000000000000000, 0, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
// Test data for n=0, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data004[11] =
{
{ 1.0000000000000000, 0, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for n=0, m=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data005[11] =
{
{ 1.0000000000000000, 0, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for n=0, m=20.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data006[11] =
{
{ 1.0000000000000000, 0, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
// Test data for n=0, m=50.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data007[11] =
{
{ 1.0000000000000000, 0, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
// Test data for n=0, m=100.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data008[11] =
{
{ 1.0000000000000000, 0, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 0, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
// Test data for n=1, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data009[11] =
{
{ 1.0000000000000000, 1, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -9.0000000000000000, 1, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -19.000000000000000, 1, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -29.000000000000000, 1, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -39.000000000000000, 1, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -49.000000000000000, 1, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -59.000000000000000, 1, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -69.000000000000000, 1, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -79.000000000000000, 1, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -89.000000000000000, 1, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -99.000000000000000, 1, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler009 = 2.5000000000000020e-13;
// Test data for n=1, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data010[11] =
{
{ 2.0000000000000000, 1, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -8.0000000000000000, 1, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -18.000000000000000, 1, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -28.000000000000000, 1, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -38.000000000000000, 1, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -48.000000000000000, 1, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -58.000000000000000, 1, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -68.000000000000000, 1, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -78.000000000000000, 1, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -88.000000000000000, 1, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -98.000000000000000, 1, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler010 = 2.5000000000000020e-13;
// Test data for n=1, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data011[11] =
{
{ 3.0000000000000000, 1, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -7.0000000000000000, 1, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -17.000000000000000, 1, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -27.000000000000000, 1, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -37.000000000000000, 1, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -47.000000000000000, 1, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -57.000000000000000, 1, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -67.000000000000000, 1, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -77.000000000000000, 1, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -87.000000000000000, 1, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -97.000000000000000, 1, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
// Test data for n=1, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data012[11] =
{
{ 6.0000000000000000, 1, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -4.0000000000000000, 1, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -14.000000000000000, 1, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -24.000000000000000, 1, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -34.000000000000000, 1, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -44.000000000000000, 1, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -54.000000000000000, 1, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -64.000000000000000, 1, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -74.000000000000000, 1, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -84.000000000000000, 1, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -94.000000000000000, 1, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler012 = 2.5000000000000020e-13;
// Test data for n=1, m=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data013[11] =
{
{ 11.000000000000000, 1, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 1, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -9.0000000000000000, 1, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -19.000000000000000, 1, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -29.000000000000000, 1, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -39.000000000000000, 1, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -49.000000000000000, 1, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -59.000000000000000, 1, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -69.000000000000000, 1, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -79.000000000000000, 1, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -89.000000000000000, 1, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler013 = 2.5000000000000020e-13;
// Test data for n=1, m=20.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data014[11] =
{
{ 21.000000000000000, 1, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 11.000000000000000, 1, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.0000000000000000, 1, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -9.0000000000000000, 1, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -19.000000000000000, 1, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -29.000000000000000, 1, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -39.000000000000000, 1, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -49.000000000000000, 1, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -59.000000000000000, 1, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -69.000000000000000, 1, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -79.000000000000000, 1, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler014 = 2.5000000000000020e-13;
// Test data for n=1, m=50.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data015[11] =
{
{ 51.000000000000000, 1, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 41.000000000000000, 1, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 31.000000000000000, 1, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 21.000000000000000, 1, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 11.000000000000000, 1, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1.0000000000000000, 1, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -9.0000000000000000, 1, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -19.000000000000000, 1, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -29.000000000000000, 1, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -39.000000000000000, 1, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -49.000000000000000, 1, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler015 = 2.5000000000000020e-13;
// Test data for n=1, m=100.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data016[11] =
{
{ 101.00000000000000, 1, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 91.000000000000000, 1, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 81.000000000000000, 1, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 71.000000000000000, 1, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 61.000000000000000, 1, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 51.000000000000000, 1, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 41.000000000000000, 1, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 31.000000000000000, 1, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 21.000000000000000, 1, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 11.000000000000000, 1, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.0000000000000000, 1, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler016 = 2.5000000000000020e-13;
// Test data for n=2, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data017[11] =
{
{ 1.0000000000000000, 2, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 31.000000000000000, 2, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 161.00000000000000, 2, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 391.00000000000000, 2, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 721.00000000000000, 2, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1151.0000000000000, 2, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1681.0000000000000, 2, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 2311.0000000000000, 2, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 3041.0000000000000, 2, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 3871.0000000000000, 2, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4801.0000000000000, 2, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler017 = 2.5000000000000020e-13;
// Test data for n=2, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data018[11] =
{
{ 3.0000000000000000, 2, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 23.000000000000000, 2, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 143.00000000000000, 2, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 363.00000000000000, 2, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 683.00000000000000, 2, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1103.0000000000000, 2, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1623.0000000000000, 2, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 2243.0000000000000, 2, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 2963.0000000000000, 2, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 3783.0000000000000, 2, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4703.0000000000000, 2, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler018 = 2.5000000000000020e-13;
// Test data for n=2, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data019[11] =
{
{ 6.0000000000000000, 2, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 16.000000000000000, 2, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 126.00000000000000, 2, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 336.00000000000000, 2, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 646.00000000000000, 2, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1056.0000000000000, 2, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1566.0000000000000, 2, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 2176.0000000000000, 2, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 2886.0000000000000, 2, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 3696.0000000000000, 2, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4606.0000000000000, 2, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler019 = 2.5000000000000020e-13;
// Test data for n=2, m=5.
// max(|f - f_GSL|): 4.5519144009631418e-15
// max(|f - f_GSL| / |f_GSL|): 4.5519144009631623e-15
+// mean(f - f_GSL): 4.1381040008755832e-16
+// variance(f - f_GSL): 1.8836295194268761e-32
+// stddev(f - f_GSL): 1.3724538314372823e-16
const testcase_assoc_laguerre<double>
data020[11] =
{
{ 21.000000000000000, 2, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.99999999999999545, 2, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 81.000000000000000, 2, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 261.00000000000000, 2, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 541.00000000000000, 2, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 921.00000000000000, 2, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1401.0000000000000, 2, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1981.0000000000000, 2, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 2661.0000000000000, 2, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 3441.0000000000000, 2, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4321.0000000000000, 2, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler020 = 2.5000000000000020e-13;
// Test data for n=2, m=10.
// max(|f - f_GSL|): 3.5527136788005009e-14
// max(|f - f_GSL| / |f_GSL|): 2.4424906541753385e-15
+// mean(f - f_GSL): 4.1179181277005809e-15
+// variance(f - f_GSL): 1.8652974677089562e-30
+// stddev(f - f_GSL): 1.3657589346985639e-15
const testcase_assoc_laguerre<double>
data021[11] =
{
{ 66.000000000000000, 2, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -4.0000000000000098, 2, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 25.999999999999964, 2, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 156.00000000000000, 2, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 386.00000000000000, 2, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 716.00000000000000, 2, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1146.0000000000000, 2, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1676.0000000000000, 2, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 2306.0000000000000, 2, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 3036.0000000000000, 2, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 3866.0000000000000, 2, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler021 = 2.5000000000000020e-13;
// Test data for n=2, m=20.
// max(|f - f_GSL|): 5.6843418860808015e-13
// max(|f - f_GSL| / |f_GSL|): 5.9211894646674663e-15
+// mean(f - f_GSL): -6.0557619525008543e-14
+// variance(f - f_GSL): 4.0339478107892650e-28
+// stddev(f - f_GSL): 2.0084690216155350e-14
const testcase_assoc_laguerre<double>
data022[11] =
{
{ 231.00000000000000, 2, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 61.000000000000206, 2, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -9.0000000000000053, 2, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 21.000000000000124, 2, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 151.00000000000057, 2, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 381.00000000000000, 2, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 711.00000000000000, 2, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 1141.0000000000000, 2, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1670.9999999999998, 2, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2301.0000000000000, 2, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 3031.0000000000000, 2, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler022 = 5.0000000000000039e-13;
// Test data for n=2, m=50.
// max(|f - f_GSL|): 3.6379788070917130e-12
// max(|f - f_GSL| / |f_GSL|): 1.9243865760169750e-14
+// mean(f - f_GSL): 1.1085274112784562e-12
+// variance(f - f_GSL): 7.0379368001597960e-25
+// stddev(f - f_GSL): 8.3892412053533160e-13
const testcase_assoc_laguerre<double>
data023[11] =
{
{ 1326.0000000000000, 2, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 855.99999999999693, 2, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 485.99999999999835, 2, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 215.99999999999937, 2, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 45.999999999999829, 2, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -23.999999999999538, 2, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 6.0000000000001057, 2, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 135.99999999999963, 2, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 365.99999999999892, 2, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 695.99999999999784, 2, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1125.9999999999964, 2, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler023 = 1.0000000000000008e-12;
// Test data for n=2, m=100.
// max(|f - f_GSL|): 6.5483618527650833e-11
// max(|f - f_GSL| / |f_GSL|): 1.6416871873157281e-14
+// mean(f - f_GSL): -2.0930328177696950e-11
+// variance(f - f_GSL): 4.7796831888707054e-23
+// stddev(f - f_GSL): 6.9135252866180405e-12
const testcase_assoc_laguerre<double>
data024[11] =
{
{ 5151.0000000000000, 2, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4181.0000000000655, 2, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 3311.0000000000518, 2, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 2541.0000000000400, 2, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 1871.0000000000291, 2, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1301.0000000000207, 2, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 831.00000000001364, 2, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 461.00000000000682, 2, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 191.00000000000250, 2, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 21.000000000000046, 2, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -48.999999999999915, 2, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler024 = 1.0000000000000008e-12;
// Test data for n=5, m=0.
// max(|f - f_GSL|): 7.4505805969238281e-09
// max(|f - f_GSL| / |f_GSL|): 1.9501553136894460e-16
+// mean(f - f_GSL): -5.1328573714603078e-10
+// variance(f - f_GSL): 5.2938665968649395e-18
+// stddev(f - f_GSL): 2.3008404109944130e-09
const testcase_assoc_laguerre<double>
data025[11] =
{
{ 1.0000000000000000, 5, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 34.333333333333329, 5, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -4765.6666666666670, 5, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -74399.000000000000, 5, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -418865.66666666663, 5, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -1498165.6666666665, 5, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -4122299.0000000000, 5, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -9551265.6666666679, 5, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -19595065.666666664, 5, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -36713699.000000000, 5, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -64117165.666666664, 5, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler025 = 2.5000000000000020e-13;
// Test data for n=5, m=1.
// max(|f - f_GSL|): 3.7252902984619141e-09
// max(|f - f_GSL| / |f_GSL|): 3.1347473636475015e-16
+// mean(f - f_GSL): -3.6516147681388907e-10
+// variance(f - f_GSL): 1.4667719456379050e-20
+// stddev(f - f_GSL): 1.2111036064837331e-10
const testcase_assoc_laguerre<double>
data026[11] =
{
{ 6.0000000000000000, 5, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 22.666666666666661, 5, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -2960.6666666666661, 5, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -58944.000000000000, 5, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -357927.33333333326, 5, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -1329910.6666666665, 5, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -3744894.0000000000, 5, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -8812877.3333333321, 5, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -18283860.666666664, 5, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -34547844.000000000, 5, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -60734827.333333336, 5, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler026 = 2.5000000000000020e-13;
// Test data for n=5, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_laguerre<double>
data027[11] =
{
{ 21.000000000000000, 5, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.3333333333333339, 5, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -1679.0000000000000, 5, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -46029.000000000000, 5, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -304045.66666666669, 5, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -1176729.0000000002, 5, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -3395079.0000000000, 5, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -8120095.6666666660, 5, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -17042778.999999996, 5, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -32484129.000000000, 5, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -57495145.666666664, 5, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler027 = 2.5000000000000020e-13;
// Test data for n=5, m=5.
// max(|f - f_GSL|): 7.4505805969238281e-09
// max(|f - f_GSL| / |f_GSL|): 1.7763568394002536e-15
+// mean(f - f_GSL): -1.0450849882462617e-09
+// variance(f - f_GSL): 1.2014228959234583e-19
+// stddev(f - f_GSL): 3.4661547800458338e-10
const testcase_assoc_laguerre<double>
data028[11] =
{
{ 252.00000000000000, 5, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -14.666666666666654, 5, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 51.999999999999908, 5, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -19548.000000000000, 5, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -178814.66666666660, 5, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -797747.99999999977, 5, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -2496348.0000000000, 5, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -6294614.6666666660, 5, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -13712547.999999996, 5, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -26870147.999999993, 5, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -48587414.666666672, 5, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler028 = 2.5000000000000020e-13;
// Test data for n=5, m=10.
// max(|f - f_GSL|): 7.4505805969238281e-09
// max(|f - f_GSL| / |f_GSL|): 1.9556222085140405e-15
+// mean(f - f_GSL): -9.4849348577306296e-10
+// variance(f - f_GSL): 4.6504850481092197e-18
+// stddev(f - f_GSL): 2.1564983301892953e-09
const testcase_assoc_laguerre<double>
data029[11] =
{
{ 3003.0000000000000, 5, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 19.666666666666668, 5, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 36.333333333333272, 5, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -1947.0000000000000, 5, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -60930.333333333314, 5, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -381913.66666666651, 5, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -1419897.0000000000, 5, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -3979880.3333333330, 5, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -9316863.6666666642, 5, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -19235847.000000000, 5, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -36191830.333333328, 5, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler029 = 2.5000000000000020e-13;
// Test data for n=5, m=20.
// max(|f - f_GSL|): 1.8626451492309570e-09
// max(|f - f_GSL| / |f_GSL|): 2.8421709430404088e-15
+// mean(f - f_GSL): 1.8654330605469030e-10
+// variance(f - f_GSL): 3.8278245537195241e-21
+// stddev(f - f_GSL): 6.1869415333584047e-11
const testcase_assoc_laguerre<double>
data030[11] =
{
{ 53130.000000000000, 5, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1213.3333333333335, 5, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 129.99999999999963, 5, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -119.99999999999974, 5, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 463.33333333333320, 5, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -48120.000000000015, 5, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -345870.00000000017, 5, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -1342786.6666666667, 5, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -3838870.0000000009, 5, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -9084120.0000000000, 5, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -18878536.666666668, 5, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler030 = 2.5000000000000020e-13;
// Test data for n=5, m=50.
// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 8.3212917817998576e-15
+// mean(f - f_GSL): 2.5837917664003642e-12
+// variance(f - f_GSL): 7.3435778813301465e-25
+// stddev(f - f_GSL): 8.5694678255596164e-13
const testcase_assoc_laguerre<double>
data031[11] =
{
{ 3478761.0000000000, 5, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1154544.3333333335, 5, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 264661.00000000006, 5, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 24111.000000000033, 5, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -2105.6666666666665, 5, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1010.9999999999916, 5, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -1538.9999999999955, 5, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 5244.3333333333449, 5, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -13639.000000000011, 5, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -243189.00000000006, 5, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -1118405.6666666667, 5, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler031 = 5.0000000000000039e-13;
// Test data for n=5, m=100.
// max(|f - f_GSL|): 1.4901161193847656e-08
// max(|f - f_GSL| / |f_GSL|): 4.3934583843896481e-16
+// mean(f - f_GSL): 9.3181866263462735e-10
+// variance(f - f_GSL): 9.5511462203760402e-20
+// stddev(f - f_GSL): 3.0904928766098203e-10
const testcase_assoc_laguerre<double>
data032[11] =
{
{ 96560646.000000000, 5, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 57264262.666666649, 5, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 31841379.333333332, 5, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 16281996.000000000, 5, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 7426112.6666666670, 5, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 2863729.3333333330, 5, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 834846.00000000000, 5, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 129462.66666666663, 5, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -12420.666666666668, 5, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -804.00000000000000, 5, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4312.6666666666670, 5, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler032 = 2.5000000000000020e-13;
// Test data for n=10, m=0.
// max(|f - f_GSL|): 6.1035156250000000e-05
// max(|f - f_GSL| / |f_GSL|): 6.1315986390500118e-15
+// mean(f - f_GSL): -5.5892985322068194e-06
+// variance(f - f_GSL): 3.4364283890538241e-12
+// stddev(f - f_GSL): 1.8537606072667053e-06
const testcase_assoc_laguerre<double>
data033[11] =
{
{ 1.0000000000000000, 10, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 27.984126984126977, 10, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 3227.8077601410932, 10, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 15129.571428571455, 10, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 79724066.608465582, 10, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 2037190065.3738980, 10, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 21804200401.000000, 10, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 144688291819.51855, 10, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 703324772760.08276, 10, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2741055412243.8569, 10, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 9051283795429.5723, 10, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler033 = 5.0000000000000039e-13;
// Test data for n=10, m=1.
// max(|f - f_GSL|): 0.0019531250000000000
// max(|f - f_GSL| / |f_GSL|): 3.2082933888884751e-16
+// mean(f - f_GSL): -0.00017647174536266681
+// variance(f - f_GSL): 3.4721464659347714e-07
+// stddev(f - f_GSL): 0.00058924922281957846
const testcase_assoc_laguerre<double>
data034[11] =
{
{ 11.000000000000000, 10, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 14.791887125220455, 10, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 2704.6507936507933, 10, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -182924.71428571423, 10, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 48066036.749559075, 10, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1486264192.2169311, 10, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 17239562282.428574, 10, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 119837491630.13579, 10, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 600681375251.21167, 10, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2392908405632.4287, 10, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 8033035722509.2373, 10, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler034 = 2.5000000000000020e-13;
// Test data for n=10, m=2.
// max(|f - f_GSL|): 0.00012207031250000000
// max(|f - f_GSL| / |f_GSL|): 3.0884259455918855e-16
+// mean(f - f_GSL): 1.4045021730039894e-05
+// variance(f - f_GSL): 2.1698889894483716e-11
+// stddev(f - f_GSL): 4.6582067251769446e-06
const testcase_assoc_laguerre<double>
data035[11] =
{
{ 66.000000000000000, 10, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -14.511463844797181, 10, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1064.5890652557316, 10, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -194569.71428571429, 10, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 27343569.350970022, 10, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1067807661.6790125, 10, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 13529451580.285711, 10, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 98812724224.641937, 10, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 511482736187.34021, 10, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2084478393087.4285, 10, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 7117724862237.0752, 10, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler035 = 2.5000000000000020e-13;
// Test data for n=10, m=5.
// max(|f - f_GSL|): 0.0019531250000000000
// max(|f - f_GSL| / |f_GSL|): 5.4929549774030811e-15
+// mean(f - f_GSL): 0.00020540323628249655
+// variance(f - f_GSL): 3.3599844999940669e-07
+// stddev(f - f_GSL): 0.00057965373284350253
const testcase_assoc_laguerre<double>
data036[11] =
{
{ 3003.0000000000000, 10, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 11.641975308642031, 10, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -1137.5643738977069, 10, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -9254.1428571428605, 10, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 2121878.8377425023, 10, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 352060171.43033499, 10, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 6212028560.1428576, 10, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 53782171674.604919, 10, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 309720255837.56775, 10, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1359043035731.5713, 10, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4900625954398.9434, 10, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler036 = 5.0000000000000039e-13;
// Test data for n=10, m=10.
// max(|f - f_GSL|): 0.00048828125000000000
// max(|f - f_GSL| / |f_GSL|): 1.2999856205575476e-15
+// mean(f - f_GSL): 3.5049890987631279e-05
+// variance(f - f_GSL): 2.2596053129284716e-08
+// stddev(f - f_GSL): 0.00015031983611381671
const testcase_assoc_laguerre<double>
data037[11] =
{
{ 184756.00000000000, 10, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -210.84303350970018, 10, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 508.38095238095184, 10, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 2098.8571428571431, 10, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -536338.88536155177, 10, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 24865988.804232784, 10, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1343756013.1428571, 10, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 17298791247.358025, 10, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 124528450897.79892, 10, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 632674413641.71423, 10, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 2533008935405.0298, 10, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler037 = 2.5000000000000020e-13;
// Test data for n=10, m=20.
// max(|f - f_GSL|): 1.1444091796875000e-05
// max(|f - f_GSL| / |f_GSL|): 1.3165826881543491e-14
+// mean(f - f_GSL): -1.0290407937480433e-06
+// variance(f - f_GSL): 1.1648174507175886e-13
+// stddev(f - f_GSL): 3.4129422068320885e-07
const testcase_assoc_laguerre<double>
data038[11] =
{
{ 30045014.999999993, 10, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -23087.733686067022, 10, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 207.23985890652330, 10, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1407.8571428571508, 10, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -44618.156966490322, 10, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 158690.04409171100, 10, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -6870413.5714285728, 10, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 793841351.41975331, 10, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 13358288958.562618, 10, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 106073722407.85715, 10, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 566337213392.42493, 10, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler038 = 1.0000000000000008e-12;
// Test data for n=10, m=50.
// max(|f - f_GSL|): 1.7881393432617188e-07
// max(|f - f_GSL| / |f_GSL|): 1.9220038158581863e-14
+// mean(f - f_GSL): -1.7959874557246538e-08
+// variance(f - f_GSL): 1.5426792767859101e-17
+// stddev(f - f_GSL): 3.9276956052956932e-09
const testcase_assoc_laguerre<double>
data039[11] =
{
{ 75394027566.000000, 10, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 8048106183.3721361, 10, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 328045023.84832460, 10, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -2568769.7142857178, 10, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 6971.9964726631533, 10, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 136111.41446207993, 10, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -62462.571428570242, 10, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -248167.95061728527, 10, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1941270.4091710770, 10, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -8643512.5714285765, 10, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -140863522.18342152, 10, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler039 = 1.0000000000000008e-12;
// Test data for n=10, m=100.
// max(|f - f_GSL|): 0.0019531250000000000
// max(|f - f_GSL| / |f_GSL|): 8.5796208358610616e-15
+// mean(f - f_GSL): 0.00016085392880168828
+// variance(f - f_GSL): 2.8461549974308565e-09
+// stddev(f - f_GSL): 5.3349367357362886e-05
const testcase_assoc_laguerre<double>
data040[11] =
{
{ 46897636623981.000, 10, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 16444031323272.084, 10, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 5020343986463.5391, 10, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1270977490645.2859, 10, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 244835756822.62262, 10, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 29786827693.962959, 10, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1127612095.2857144, 10, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -66370555.419753075, 10, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 10420852.957671870, 10, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -3373097.5714285718, 10, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 2065423.6807760145, 10, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler040 = 5.0000000000000039e-13;
// Test data for n=20, m=0.
// max(|f - f_GSL|): 20.000000000000000
// max(|f - f_GSL| / |f_GSL|): 4.7350442720305269e-15
+// mean(f - f_GSL): -1.8323417989965736
+// variance(f - f_GSL): 2754690.9677631622
+// stddev(f - f_GSL): 1659.7261725246012
const testcase_assoc_laguerre<double>
data041[11] =
{
{ 1.0000000000000000, 20, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -11.961333867812119, 20, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 2829.4728613531743, 20, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -18439.424502520938, 20, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 24799805.877530713, 20, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 7551960453.7672548, 20, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -1379223608444.9155, 20, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 165423821874449.94, 20, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 29500368536981676., 20, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.1292309514432901e+18, 20, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 2.2061882785931735e+19, 20, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler041 = 2.5000000000000020e-13;
// Test data for n=20, m=1.
// max(|f - f_GSL|): 8192.0000000000000
// max(|f - f_GSL| / |f_GSL|): 2.0583579235866667e-15
+// mean(f - f_GSL): -744.54973777790485
+// variance(f - f_GSL): 6101096.7248424273
+// stddev(f - f_GSL): 2470.0398225215777
const testcase_assoc_laguerre<double>
data042[11] =
{
{ 21.000000000000000, 20, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 19.900488129734079, 20, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 2208.0318569557585, 20, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 263690.96303121914, 20, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 40667285.630564235, 20, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 1737442572.8115399, 20, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -588280953643.28125, 20, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 45617733778241.328, 20, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 17293487114876864., 20, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 7.6219135858585062e+17, 20, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.6037288204336759e+19, 20, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler042 = 2.5000000000000020e-13;
// Test data for n=20, m=2.
// max(|f - f_GSL|): 6144.0000000000000
// max(|f - f_GSL| / |f_GSL|): 9.3068805041852228e-15
+// mean(f - f_GSL): 610.73011506755233
+// variance(f - f_GSL): 995562063.33027601
+// stddev(f - f_GSL): 31552.528636074101
const testcase_assoc_laguerre<double>
data043[11] =
{
{ 231.00000000000003, 20, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 47.009338065112921, 20, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -652.51305461728589, 20, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 285388.25895069109, 20, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 28664069.685624730, 20, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -1399631966.3144732, 20, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -115357373248.28194, 20, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -3357730872975.8750, 20, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 9765808962855122.0, 20, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 5.0717292945559181e+17, 20, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.1564665701334456e+19, 20, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler043 = 5.0000000000000039e-13;
// Test data for n=20, m=5.
// max(|f - f_GSL|): 16.000000000000000
// max(|f - f_GSL| / |f_GSL|): 3.5731302592472765e-15
+// mean(f - f_GSL): -1.4092810048974798
+// variance(f - f_GSL): 598.27450725320409
+// stddev(f - f_GSL): 24.459650595484884
const testcase_assoc_laguerre<double>
data044[11] =
{
{ 53130.000000000000, 20, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -158.69554500944142, 20, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 334.08012288038952, 20, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -198372.47662554163, 20, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -13627144.088579426, 20, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -780579985.44731510, 20, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 116648634237.73535, 20, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -12347348707739.742, 20, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 1199516248034090.8, 20, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 1.3451503195078531e+17, 20, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4.1058904276111483e+18, 20, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler044 = 2.5000000000000020e-13;
// Test data for n=20, m=10.
// max(|f - f_GSL|): 64.000000000000000
// max(|f - f_GSL| / |f_GSL|): 1.0709209504860220e-15
+// mean(f - f_GSL): -5.5440786440316181
+// variance(f - f_GSL): 376.60778837733284
+// stddev(f - f_GSL): 19.406385247575933
const testcase_assoc_laguerre<double>
data045[11] =
{
{ 30045015.000000000, 20, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -1755.6226861258601, 20, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -9081.6726644737901, 20, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 95771.650912113109, 20, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 5089151.9272779236, 20, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 97400399.450206712, 20, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -16009352450.477026, 20, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 842271286905.01050, 20, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -79901725466796.938, 20, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 7944103675858637.0, 20, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 5.7429821893388288e+17, 20, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler045 = 2.5000000000000020e-13;
// Test data for n=20, m=20.
// max(|f - f_GSL|): 2.1250000000000000
// max(|f - f_GSL| / |f_GSL|): 1.1968937782285294e-14
+// mean(f - f_GSL): 0.19344895682429938
+// variance(f - f_GSL): 0.41039783756558101
+// stddev(f - f_GSL): 0.64062300736515931
const testcase_assoc_laguerre<double>
data046[11] =
{
{ 137846528819.99994, 20, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -136976.49571333229, 20, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 113878.49908041643, 20, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -342529.21778796182, 20, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -350112.66981443466, 20, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -10791735.172977809, 20, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -1038073940.0811402, 20, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 667312550.63616335, 20, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 741537869902.29028, 20, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -32378376755737.418, 20, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -601760332167937.62, 20, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler046 = 1.0000000000000008e-12;
// Test data for n=20, m=50.
// max(|f - f_GSL|): 0.25000000000000000
// max(|f - f_GSL| / |f_GSL|): 1.2103144092558234e-14
+// mean(f - f_GSL): -0.022849527272311123
+// variance(f - f_GSL): 5.7130155161570465e-05
+// stddev(f - f_GSL): 0.0075584492563997852
const testcase_assoc_laguerre<double>
data047[11] =
{
{ 1.6188460366265789e+17, 20, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1599011936804291.5, 20, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -131273880831.42432, 20, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -3133213093.6903548, 20, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -213935628.04985175, 20, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -47375578.495921060, 20, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -115731015.14034876, 20, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -737415147.29420292, 20, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -2123455626.8621769, 20, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 29801266858.608929, 20, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -132886631026.82553, 20, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler047 = 1.0000000000000008e-12;
// Test data for n=20, m=100.
// max(|f - f_GSL|): 1572864.0000000000
// max(|f - f_GSL| / |f_GSL|): 3.6621229371267356e-14
+// mean(f - f_GSL): 137262.28072981400
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_assoc_laguerre<double>
data048[11] =
{
{ 2.9462227291176643e+22, 20, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.5777890748701244e+21, 20, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 3.1584925521456759e+20, 20, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1.7389599388424864e+19, 20, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 4.1401342745980634e+17, 20, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -79359706102062.594, 20, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 22736203650743.145, 20, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 65679006380.095703, 20, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -236263257610.77792, 20, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -38072644585.303101, 20, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 68236474365.173973, 20, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler048 = 2.5000000000000015e-12;
// Test data for n=50, m=0.
// max(|f - f_GSL|): 196608.00000000000
// max(|f - f_GSL| / |f_GSL|): 4.2910775919271532e-15
+// mean(f - f_GSL): -17990.447398879332
+// variance(f - f_GSL): 27618453284.204639
+// stddev(f - f_GSL): 166188.00583737876
const testcase_assoc_laguerre<double>
data049[11] =
{
{ 1.0000000000000000, 50, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 17.534183446338233, 50, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 980.26961889791028, 50, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 293000.50735962362, 50, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -14896937.968694873, 50, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 2513677852.6916871, 50, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -883876565337.99219, 50, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -80967880733583.234, 50, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -8217471769564841.0, 50, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -2.1140031308048891e+18, 50, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -3.9710103487094692e+20, 50, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler049 = 2.5000000000000020e-13;
// Test data for n=50, m=1.
// max(|f - f_GSL|): 311296.00000000000
// max(|f - f_GSL| / |f_GSL|): 4.3113718426975911e-14
+// mean(f - f_GSL): 28417.096591423862
+// variance(f - f_GSL): 32927254885.825413
+// stddev(f - f_GSL): 181458.68644356879
const testcase_assoc_laguerre<double>
data050[11] =
{
{ 51.000000000000021, 50, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.4214573271639575, 50, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -2574.8072295127827, 50, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 35846.479728359205, 50, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -48263698.768318526, 50, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 6161525870.2738533, 50, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -382655486658.47125, 50, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -109635579833241.72, 50, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -14623805817283490., 50, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -2.0666847190878152e+18, 50, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -1.4385187953997626e+20, 50, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler050 = 2.5000000000000015e-12;
// Test data for n=50, m=2.
// max(|f - f_GSL|): 139264.00000000000
// max(|f - f_GSL| / |f_GSL|): 2.5437687254653283e-15
+// mean(f - f_GSL): 12649.078840684118
+// variance(f - f_GSL): 1765904219.6855280
+// stddev(f - f_GSL): 42022.663167456769
const testcase_assoc_laguerre<double>
data051[11] =
{
{ 1326.0000000000000, 50, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -87.860732516444529, 50, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -5203.2351191780917, 50, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -461059.50012538867, 50, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -30476695.327440590, 50, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 3720804977.9338136, 50, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 362262002434.51453, 50, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -52210917867820.227, 50, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -9567965136901914.0, 50, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -8.9171277517712883e+17, 50, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 5.7231129448806982e+19, 50, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler051 = 2.5000000000000020e-13;
// Test data for n=50, m=5.
// max(|f - f_GSL|): 81920.000000000000
// max(|f - f_GSL| / |f_GSL|): 2.6215979818234617e-15
+// mean(f - f_GSL): -7423.7222822287622
+// variance(f - f_GSL): 648926959.11275744
+// stddev(f - f_GSL): 25474.044812568685
const testcase_assoc_laguerre<double>
data052[11] =
{
{ 3478761.0000000000, 50, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1055.8381917651498, 50, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 15264.646660345055, 50, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 1229651.8966600848, 50, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 39270451.823656842, 50, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -4424062601.1152029, 50, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -186017434284.19223, 50, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 50972853949302.609, 50, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 6530702754012517.0, 50, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 6.8387592714678029e+17, 50, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 3.9198742504338391e+19, 50, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler052 = 2.5000000000000020e-13;
// Test data for n=50, m=10.
// max(|f - f_GSL|): 192.00000000000000
// max(|f - f_GSL| / |f_GSL|): 3.6229303412867937e-15
+// mean(f - f_GSL): -17.490024036237049
+// variance(f - f_GSL): 12219580.275082903
+// stddev(f - f_GSL): 3495.6516238153513
const testcase_assoc_laguerre<double>
data053[11] =
{
{ 75394027565.999985, 50, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 91833.924098770178, 50, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 330501.87929778261, 50, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 3625088.1635972536, 50, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 213954727.28632012, 50, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -9381006937.7517681, 50, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 535333683777.48615, 50, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 18824406573722.172, 50, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -533858276780013.12, 50, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -52995774666704016., 50, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 6.0504182862448783e+18, 50, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler053 = 2.5000000000000020e-13;
// Test data for n=50, m=20.
// max(|f - f_GSL|): 512.00000000000000
// max(|f - f_GSL| / |f_GSL|): 9.6616871455409171e-14
+// mean(f - f_GSL): -47.364405233074315
+// variance(f - f_GSL): 23782.450110032125
+// stddev(f - f_GSL): 154.21559619581973
const testcase_assoc_laguerre<double>
data054[11] =
{
{ 1.6188460366265779e+17, 50, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -307637087.25169408, 50, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 12524651.102974586, 50, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -315460483.86210561, 50, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -1889683587.3459988, 50, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 37457044404.200348, 50, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -843831858224.71802, 50, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -92231643172.307495, 50, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 904211757769501.00, 50, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 46508193600283272., 50, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 2.3216887928162719e+18, 50, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler054 = 5.0000000000000029e-12;
// Test data for n=50, m=50.
// max(|f - f_GSL|): 989855744.00000000
// max(|f - f_GSL| / |f_GSL|): 1.1139535389485780e-14
+// mean(f - f_GSL): 89986812.018465906
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_assoc_laguerre<double>
data055[11] =
{
{ 1.0089134454556417e+29, 50, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.3822795753070493e+23, 50, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 95817260381628336., 50, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -910798580856015.38, 50, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 50513254049166.922, 50, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 84159703903348.938, 50, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -138805244691822.72, 50, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 181046391269246.25, 50, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 2086884905317107.5, 50, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -2765620139862428.0, 50, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -1.3706751678146290e+17, 50, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler055 = 1.0000000000000008e-12;
// Test data for n=50, m=100.
// max(|f - f_GSL|): 1.8889465931478581e+22
// max(|f - f_GSL| / |f_GSL|): 2.2737143709403468e-14
+// mean(f - f_GSL): -1.7004551248566624e+21
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_assoc_laguerre<double>
data056[11] =
{
{ 2.0128660909731929e+40, 50, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 9.3675094807695474e+37, 50, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1.3009321481877196e+35, 50, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 7.3720026893233823e+30, 50, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -6.0824679079634667e+25, 50, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -6.0053188793543450e+23, 50, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 1.4178129287264692e+22, 50, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -5.4652099341566706e+20, 50, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -1.0817271759263274e+20, 50, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 3.8058734007924195e+19, 50, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4.7439240848028344e+19, 50, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler056 = 2.5000000000000015e-12;
// Test data for n=100, m=0.
// max(|f - f_GSL|): 98304.000000000000
// max(|f - f_GSL| / |f_GSL|): 3.8776197831393928e-15
+// mean(f - f_GSL): -8865.4606155926431
+// variance(f - f_GSL): 4058808072.1721206
+// stddev(f - f_GSL): 63708.775472238682
const testcase_assoc_laguerre<double>
data057[11] =
{
{ 1.0000000000000000, 100, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 13.277662844303450, 100, 0,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1854.0367283243388, 100, 0,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 170141.86987046551, 100, 0,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -7272442.3156006960, 100, 0,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 4847420871.2690506, 100, 0,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 693492765740.29688, 100, 0,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 17125518672239.770, 100, 0,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -13763178176383768., 100, 0,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2.1307220490380173e+18, 100, 0,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -2.6292260693068916e+20, 100, 0,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler057 = 2.5000000000000020e-13;
// Test data for n=100, m=1.
// max(|f - f_GSL|): 245760.00000000000
// max(|f - f_GSL| / |f_GSL|): 1.4500034612453474e-14
+// mean(f - f_GSL): 22224.249977270934
+// variance(f - f_GSL): 29644360933.494530
+// stddev(f - f_GSL): 172175.37841832824
const testcase_assoc_laguerre<double>
data058[11] =
{
{ 101.00000000000003, 100, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -14.650661983680420, 100, 1,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 1626.5010939361582, 100, 1,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 417884.77658268728, 100, 1,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -55617646.951649837, 100, 1,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 884829874.26626217, 100, 1,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 154466082750.32202, 100, 1,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -101423973484646.00, 100, 1,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -1388352348671756.8, 100, 1,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 7.8048705513268582e+17, 100, 1,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 1.6948925059042755e+19, 100, 1,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler058 = 1.0000000000000008e-12;
// Test data for n=100, m=2.
// max(|f - f_GSL|): 557056.00000000000
// max(|f - f_GSL| / |f_GSL|): 5.1603746667135714e-15
+// mean(f - f_GSL): 50294.883489425141
+// variance(f - f_GSL): 2009492413242.1035
+// stddev(f - f_GSL): 1417565.6645256698
const testcase_assoc_laguerre<double>
data059[11] =
{
{ 5151.0000000000055, 100, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -150.22012290951324, 100, 2,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ -7655.0593294049449, 100, 2,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -140996.69276179091, 100, 2,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -38645171.278549351, 100, 2,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -8889263688.2118931, 100, 2,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -1010338971533.3400, 100, 2,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -127582564332943.91, 100, 2,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 15970305694654312., 100, 2,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -1.6019844992862820e+18, 100, 2,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 2.8267024730962955e+20, 100, 2,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler059 = 5.0000000000000039e-13;
// Test data for n=100, m=5.
// max(|f - f_GSL|): 393216.00000000000
// max(|f - f_GSL| / |f_GSL|): 8.0946565190235238e-15
+// mean(f - f_GSL): 35883.277835871675
+// variance(f - f_GSL): 72845813363.438187
+// stddev(f - f_GSL): 269899.63572305575
const testcase_assoc_laguerre<double>
data060[11] =
{
{ 96560646.000000030, 100, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2430.6732236677612, 100, 5,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 111162.32026994647, 100, 5,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 4036708.2599413628, 100, 5,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -34055982.664405443, 100, 5,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 30110688343.562328, 100, 5,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 2651429940558.2974, 100, 5,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 192108556058943.09, 100, 5,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -25410533973455528., 100, 5,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2.1072955633564431e+18, 100, 5,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -2.9434005355877289e+20, 100, 5,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler060 = 5.0000000000000039e-13;
// Test data for n=100, m=10.
// max(|f - f_GSL|): 155648.00000000000
// max(|f - f_GSL| / |f_GSL|): 5.1685581852917721e-15
+// mean(f - f_GSL): 13707.238286828961
+// variance(f - f_GSL): 5037793089646.2549
+// stddev(f - f_GSL): 2244502.8602446141
const testcase_assoc_laguerre<double>
data061[11] =
{
{ 46897636623981.039, 100, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 529208.11550990329, 100, 10,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 7402892.1748803817, 100, 10,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ 88369632.083243579, 100, 10,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 822187797.59096563, 100, 10,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ 180231446033.06866, 100, 10,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ 7922942703798.1309, 100, 10,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ 784424250559042.12, 100, 10,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -16325634720239370., 100, 10,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -1.0879588307443162e+18, 100, 10,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 3.0114394463610642e+19, 100, 10,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler061 = 5.0000000000000039e-13;
// Test data for n=100, m=20.
// max(|f - f_GSL|): 524288.00000000000
// max(|f - f_GSL| / |f_GSL|): 3.7005989410347388e-14
+// mean(f - f_GSL): -46766.623212640938
+// variance(f - f_GSL): 55764004614002920.
+// stddev(f - f_GSL): 236144033.61932081
const testcase_assoc_laguerre<double>
data062[11] =
{
{ 2.9462227291176614e+22, 100, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 313694958939.90405, 100, 20,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 45396489338.096191, 100, 20,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -7215826758.0081253, 100, 20,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 825949194005.88855, 100, 20,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -2764742119971.0811, 100, 20,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -219802198273516.03, 100, 20,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -1699053306145262.0, 100, 20,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ 3.5495709345023846e+17, 100, 20,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ -9.6128675110292419e+18, 100, 20,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 4.3619868422072212e+20, 100, 20,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler062 = 2.5000000000000015e-12;
// Test data for n=100, m=50.
// max(|f - f_GSL|): 316659348799488.00
// max(|f - f_GSL| / |f_GSL|): 1.1554040570270351e-14
+// mean(f - f_GSL): -28787238841995.637
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_assoc_laguerre<double>
data063[11] =
{
{ 2.0128660909731931e+40, 100, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -4.0151443913473373e+28, 100, 50,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 3.2199632594551924e+22, 100, 50,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -2.7568702092659756e+20, 100, 50,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ 7.5553066015421563e+19, 100, 50,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -2.7651625252387734e+19, 100, 50,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -5.8963680147283804e+19, 100, 50,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -1.8082798163033106e+20, 100, 50,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -3.9044276986817249e+20, 100, 50,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 6.9926310700401904e+21, 100, 50,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ -5.5727272809923646e+22, 100, 50,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler063 = 1.0000000000000008e-12;
// Test data for n=100, m=100.
// max(|f - f_GSL|): 2.3819765684465692e+39
// max(|f - f_GSL| / |f_GSL|): 1.9897039067343855e-14
+// mean(f - f_GSL): 2.1654330573519588e+38
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_assoc_laguerre<double>
data064[11] =
{
{ 9.0548514656103225e+58, 100, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.3334078033060556e+54, 100, 100,
- 10.000000000000000 },
+ 10.000000000000000, 0.0 },
{ 2.1002639254211340e+46, 100, 100,
- 20.000000000000000 },
+ 20.000000000000000, 0.0 },
{ -1.1073158068796292e+39, 100, 100,
- 30.000000000000000 },
+ 30.000000000000000, 0.0 },
{ -8.3640937363981346e+35, 100, 100,
- 40.000000000000000 },
+ 40.000000000000000, 0.0 },
{ -6.5879339429312686e+32, 100, 100,
- 50.000000000000000 },
+ 50.000000000000000, 0.0 },
{ -2.4190645077698771e+30, 100, 100,
- 60.000000000000000 },
+ 60.000000000000000, 0.0 },
{ -7.9224960465662171e+29, 100, 100,
- 70.000000000000000 },
+ 70.000000000000000, 0.0 },
{ -2.8605772478408694e+29, 100, 100,
- 80.000000000000000 },
+ 80.000000000000000, 0.0 },
{ 2.4149589189609957e+28, 100, 100,
- 90.000000000000000 },
+ 90.000000000000000, 0.0 },
{ 5.1146476014859021e+28, 100, 100,
- 100.00000000000000 },
+ 100.00000000000000, 0.0 },
};
const double toler064 = 1.0000000000000008e-12;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_assoc_laguerre<Tp> (&data)[Num], Tp toler)
+ test(const testcase_assoc_laguerre<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::assoc_laguerre(data[i].n, data[i].m,
+ const Ret f = std::assoc_laguerre(data[i].n, data[i].m,
data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc b/libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
index 9028872c87e..1d3341ed179 100644
--- a/libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
@@ -1,6 +1,6 @@
// { dg-do run { target c++11 } }
-// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__ -ffp-contract=off" }
-
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
// Copyright (C) 2016 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -41,1860 +41,1968 @@
// Test data for l=0, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data001[21] =
{
{ 1.0000000000000000, 0, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.40000000000000002 },
+ -0.39999999999999991, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.30000000000000004 },
+ -0.29999999999999993, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 1.0000000000000000, 0, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.30000000000000004 },
+ 0.30000000000000004, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.39999999999999991 },
+ 0.40000000000000013, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.60000000000000009 },
+ 0.60000000000000009, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.69999999999999996 },
+ 0.70000000000000018, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.80000000000000004 },
+ 0.80000000000000004, 0.0 },
{ 1.0000000000000000, 0, 0,
- 0.89999999999999991 },
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 0, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for l=1, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data002[21] =
{
{ -1.0000000000000000, 1, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -0.90000000000000002, 1, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -0.80000000000000004, 1, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -0.69999999999999996, 1, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -0.59999999999999998, 1, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.50000000000000000, 1, 0,
- -0.50000000000000000 },
- { -0.40000000000000002, 1, 0,
- -0.40000000000000002 },
- { -0.30000000000000004, 1, 0,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -0.39999999999999991, 1, 0,
+ -0.39999999999999991, 0.0 },
+ { -0.29999999999999993, 1, 0,
+ -0.29999999999999993, 0.0 },
{ -0.19999999999999996, 1, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.099999999999999978, 1, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.0000000000000000, 1, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.10000000000000009, 1, 0,
- 0.10000000000000009 },
- { 0.19999999999999996, 1, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 0.20000000000000018, 1, 0,
+ 0.20000000000000018, 0.0 },
{ 0.30000000000000004, 1, 0,
- 0.30000000000000004 },
- { 0.39999999999999991, 1, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 0.40000000000000013, 1, 0,
+ 0.40000000000000013, 0.0 },
{ 0.50000000000000000, 1, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 0.60000000000000009, 1, 0,
- 0.60000000000000009 },
- { 0.69999999999999996, 1, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 0.70000000000000018, 1, 0,
+ 0.70000000000000018, 0.0 },
{ 0.80000000000000004, 1, 0,
- 0.80000000000000004 },
- { 0.89999999999999991, 1, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 0.90000000000000013, 1, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 1, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for l=1, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data003[21] =
{
{ -0.0000000000000000, 1, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -0.43588989435406728, 1, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -0.59999999999999987, 1, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -0.71414284285428509, 1, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -0.80000000000000004, 1, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.86602540378443860, 1, 1,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ -0.91651513899116799, 1, 1,
- -0.40000000000000002 },
- { -0.95393920141694577, 1, 1,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { -0.95393920141694555, 1, 1,
+ -0.29999999999999993, 0.0 },
{ -0.97979589711327120, 1, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.99498743710661997, 1, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -1.0000000000000000, 1, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.99498743710661997, 1, 1,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ -0.97979589711327120, 1, 1,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ -0.95393920141694577, 1, 1,
- 0.30000000000000004 },
- { -0.91651513899116799, 1, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -0.91651513899116788, 1, 1,
+ 0.40000000000000013, 0.0 },
{ -0.86602540378443860, 1, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -0.79999999999999993, 1, 1,
- 0.60000000000000009 },
- { -0.71414284285428509, 1, 1,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -0.71414284285428475, 1, 1,
+ 0.70000000000000018, 0.0 },
{ -0.59999999999999987, 1, 1,
- 0.80000000000000004 },
- { -0.43588989435406750, 1, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -0.43588989435406711, 1, 1,
+ 0.90000000000000013, 0.0 },
{ -0.0000000000000000, 1, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
// Test data for l=2, m=0.
// max(|f - f_GSL|): 1.1102230246251565e-16
// max(|f - f_GSL| / |f_GSL|): 1.3877787807814482e-15
+// mean(f - f_GSL): 1.8503717077085941e-17
+// variance(f - f_GSL): 1.7975346147614202e-35
+// stddev(f - f_GSL): 4.2397342071896678e-18
const testcase_assoc_legendre<double>
data004[21] =
{
{ 1.0000000000000000, 2, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 0.71500000000000008, 2, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 0.46000000000000019, 2, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 0.23499999999999988, 2, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 0.039999999999999925, 2, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.12500000000000000, 2, 0,
- -0.50000000000000000 },
- { -0.25999999999999995, 2, 0,
- -0.40000000000000002 },
- { -0.36499999999999999, 2, 0,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -0.26000000000000012, 2, 0,
+ -0.39999999999999991, 0.0 },
+ { -0.36500000000000005, 2, 0,
+ -0.29999999999999993, 0.0 },
{ -0.44000000000000006, 2, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.48499999999999999, 2, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.50000000000000000, 2, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.48499999999999999, 2, 0,
- 0.10000000000000009 },
- { -0.44000000000000006, 2, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -0.43999999999999989, 2, 0,
+ 0.20000000000000018, 0.0 },
{ -0.36499999999999999, 2, 0,
- 0.30000000000000004 },
- { -0.26000000000000012, 2, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -0.25999999999999984, 2, 0,
+ 0.40000000000000013, 0.0 },
{ -0.12500000000000000, 2, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 0.040000000000000147, 2, 0,
- 0.60000000000000009 },
- { 0.23499999999999988, 2, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 0.23500000000000032, 2, 0,
+ 0.70000000000000018, 0.0 },
{ 0.46000000000000019, 2, 0,
- 0.80000000000000004 },
- { 0.71499999999999986, 2, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 0.71500000000000030, 2, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 2, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for l=2, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data005[21] =
{
{ 0.0000000000000000, 2, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.1769027147559816, 2, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 1.4399999999999999, 2, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.4996999699939983, 2, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 1.4399999999999999, 2, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 1.2990381056766580, 2, 1,
- -0.50000000000000000 },
- { 1.0998181667894018, 2, 1,
- -0.40000000000000002 },
- { 0.85854528127525132, 2, 1,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 1.0998181667894014, 2, 1,
+ -0.39999999999999991, 0.0 },
+ { 0.85854528127525076, 2, 1,
+ -0.29999999999999993, 0.0 },
{ 0.58787753826796263, 2, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 0.29849623113198592, 2, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.0000000000000000, 2, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.29849623113198626, 2, 1,
- 0.10000000000000009 },
- { -0.58787753826796263, 2, 1,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -0.58787753826796330, 2, 1,
+ 0.20000000000000018, 0.0 },
{ -0.85854528127525132, 2, 1,
- 0.30000000000000004 },
- { -1.0998181667894014, 2, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -1.0998181667894018, 2, 1,
+ 0.40000000000000013, 0.0 },
{ -1.2990381056766580, 2, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -1.4400000000000002, 2, 1,
- 0.60000000000000009 },
+ 0.60000000000000009, 0.0 },
{ -1.4996999699939983, 2, 1,
- 0.69999999999999996 },
+ 0.70000000000000018, 0.0 },
{ -1.4399999999999999, 2, 1,
- 0.80000000000000004 },
- { -1.1769027147559821, 2, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -1.1769027147559812, 2, 1,
+ 0.90000000000000013, 0.0 },
{ -0.0000000000000000, 2, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for l=2, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data006[21] =
{
{ 0.0000000000000000, 2, 2,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 0.56999999999999984, 2, 2,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 1.0799999999999996, 2, 2,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.5300000000000005, 2, 2,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 1.9200000000000004, 2, 2,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 2.2500000000000000, 2, 2,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 2.5200000000000000, 2, 2,
- -0.40000000000000002 },
- { 2.7300000000000004, 2, 2,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { 2.7299999999999995, 2, 2,
+ -0.29999999999999993, 0.0 },
{ 2.8799999999999999, 2, 2,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 2.9700000000000002, 2, 2,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 3.0000000000000000, 2, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.9700000000000002, 2, 2,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ 2.8799999999999999, 2, 2,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ 2.7300000000000004, 2, 2,
- 0.30000000000000004 },
- { 2.5200000000000000, 2, 2,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 2.5199999999999991, 2, 2,
+ 0.40000000000000013, 0.0 },
{ 2.2500000000000000, 2, 2,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 1.9199999999999997, 2, 2,
- 0.60000000000000009 },
- { 1.5300000000000005, 2, 2,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 1.5299999999999989, 2, 2,
+ 0.70000000000000018, 0.0 },
{ 1.0799999999999996, 2, 2,
- 0.80000000000000004 },
- { 0.57000000000000040, 2, 2,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 0.56999999999999929, 2, 2,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 2, 2,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
// Test data for l=5, m=0.
// max(|f - f_GSL|): 2.0122792321330962e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8911475274404243e-15
+// max(|f - f_GSL| / |f_GSL|): 4.8911475274405560e-15
+// mean(f - f_GSL): -2.3129646346357427e-18
+// variance(f - f_GSL): 2.8086478355647191e-37
+// stddev(f - f_GSL): 5.2996677589870847e-19
const testcase_assoc_legendre<double>
data007[21] =
{
{ -1.0000000000000000, 5, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 0.041141250000000087, 5, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 0.39951999999999993, 5, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 0.36519874999999991, 5, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 0.15263999999999994, 5, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.089843750000000000, 5, 0,
- -0.50000000000000000 },
- { -0.27063999999999994, 5, 0,
- -0.40000000000000002 },
- { -0.34538625000000001, 5, 0,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -0.27064000000000010, 5, 0,
+ -0.39999999999999991, 0.0 },
+ { -0.34538624999999995, 5, 0,
+ -0.29999999999999993, 0.0 },
{ -0.30751999999999996, 5, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.17882874999999995, 5, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.0000000000000000, 5, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17882875000000015, 5, 0,
- 0.10000000000000009 },
- { 0.30751999999999996, 5, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 0.30752000000000013, 5, 0,
+ 0.20000000000000018, 0.0 },
{ 0.34538625000000001, 5, 0,
- 0.30000000000000004 },
- { 0.27064000000000010, 5, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 0.27063999999999988, 5, 0,
+ 0.40000000000000013, 0.0 },
{ 0.089843750000000000, 5, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -0.15264000000000016, 5, 0,
- 0.60000000000000009 },
- { -0.36519874999999991, 5, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -0.36519875000000024, 5, 0,
+ 0.70000000000000018, 0.0 },
{ -0.39951999999999993, 5, 0,
- 0.80000000000000004 },
- { -0.041141250000000261, 5, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -0.041141249999999151, 5, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 5, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
// Test data for l=5, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data008[21] =
{
{ 0.0000000000000000, 5, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -2.8099369608350981, 5, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -0.72180000000000089, 5, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.0951826834447254, 5, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 1.9775999999999998, 5, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 1.9282596881137892, 5, 1,
- -0.50000000000000000 },
- { 1.2070504380513685, 5, 1,
- -0.40000000000000002 },
- { 0.16079837663884422, 5, 1,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 1.2070504380513671, 5, 1,
+ -0.39999999999999991, 0.0 },
+ { 0.16079837663884300, 5, 1,
+ -0.29999999999999993, 0.0 },
{ -0.87005875663658538, 5, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -1.6083350053680323, 5, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -1.8750000000000000, 5, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -1.6083350053680314, 5, 1,
- 0.10000000000000009 },
- { -0.87005875663658538, 5, 1,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -0.87005875663658327, 5, 1,
+ 0.20000000000000018, 0.0 },
{ 0.16079837663884422, 5, 1,
- 0.30000000000000004 },
- { 1.2070504380513671, 5, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 1.2070504380513694, 5, 1,
+ 0.40000000000000013, 0.0 },
{ 1.9282596881137892, 5, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 1.9775999999999998, 5, 1,
- 0.60000000000000009 },
- { 1.0951826834447254, 5, 1,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 1.0951826834447216, 5, 1,
+ 0.70000000000000018, 0.0 },
{ -0.72180000000000089, 5, 1,
- 0.80000000000000004 },
- { -2.8099369608350973, 5, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -2.8099369608350999, 5, 1,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 5, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
// Test data for l=5, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data009[21] =
{
{ 0.0000000000000000, 5, 2,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -12.837825000000000, 5, 2,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -13.910400000000001, 5, 2,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -8.8089749999999967, 5, 2,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -1.6128000000000000, 5, 2,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 4.9218750000000000, 5, 2,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 9.1728000000000005, 5, 2,
- -0.40000000000000002 },
- { 10.462725000000001, 5, 2,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { 10.462724999999997, 5, 2,
+ -0.29999999999999993, 0.0 },
{ 8.8703999999999983, 5, 2,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 5.0415749999999990, 5, 2,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.0000000000000000, 5, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -5.0415750000000044, 5, 2,
- 0.10000000000000009 },
- { -8.8703999999999983, 5, 2,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -8.8704000000000054, 5, 2,
+ 0.20000000000000018, 0.0 },
{ -10.462725000000001, 5, 2,
- 0.30000000000000004 },
- { -9.1728000000000005, 5, 2,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -9.1727999999999970, 5, 2,
+ 0.40000000000000013, 0.0 },
{ -4.9218750000000000, 5, 2,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 1.6128000000000047, 5, 2,
- 0.60000000000000009 },
- { 8.8089749999999967, 5, 2,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 8.8089750000000109, 5, 2,
+ 0.70000000000000018, 0.0 },
{ 13.910400000000001, 5, 2,
- 0.80000000000000004 },
- { 12.837825000000004, 5, 2,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 12.837824999999990, 5, 2,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 5, 2,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler009 = 2.5000000000000020e-13;
// Test data for l=5, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data010[21] =
{
{ -0.0000000000000000, 5, 5,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -14.870165800941818, 5, 5,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -73.483199999999925, 5, 5,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -175.53238298794764, 5, 5,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -309.65760000000006, 5, 5,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -460.34662869916559, 5, 5,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ -611.12496255819883, 5, 5,
- -0.40000000000000002 },
- { -746.50941479523760, 5, 5,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { -746.50941479523703, 5, 5,
+ -0.29999999999999993, 0.0 },
{ -853.31600434671316, 5, 5,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -921.55189181724734, 5, 5,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -945.00000000000000, 5, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -921.55189181724734, 5, 5,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ -853.31600434671316, 5, 5,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ -746.50941479523760, 5, 5,
- 0.30000000000000004 },
- { -611.12496255819883, 5, 5,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -611.12496255819838, 5, 5,
+ 0.40000000000000013, 0.0 },
{ -460.34662869916559, 5, 5,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -309.65759999999989, 5, 5,
- 0.60000000000000009 },
- { -175.53238298794764, 5, 5,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -175.53238298794724, 5, 5,
+ 0.70000000000000018, 0.0 },
{ -73.483199999999925, 5, 5,
- 0.80000000000000004 },
- { -14.870165800941855, 5, 5,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -14.870165800941789, 5, 5,
+ 0.90000000000000013, 0.0 },
{ -0.0000000000000000, 5, 5,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler010 = 2.5000000000000020e-13;
// Test data for l=10, m=0.
-// max(|f - f_GSL|): 2.7755575615628914e-16
-// max(|f - f_GSL| / |f_GSL|): 1.0547610802636413e-15
+// max(|f - f_GSL|): 3.8857805861880479e-16
+// max(|f - f_GSL| / |f_GSL|): 1.4766655123690915e-15
+// mean(f - f_GSL): -2.5112187461759493e-17
+// variance(f - f_GSL): 3.3107652853513909e-35
+// stddev(f - f_GSL): 5.7539249954716919e-18
const testcase_assoc_legendre<double>
data011[21] =
{
{ 1.0000000000000000, 10, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -0.26314561785585960, 10, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 0.30052979560000004, 10, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 0.085805795531640333, 10, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -0.24366274560000001, 10, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.18822860717773438, 10, 0,
- -0.50000000000000000 },
- { 0.096839064399999925, 10, 0,
- -0.40000000000000002 },
+ -0.50000000000000000, 0.0 },
+ { 0.096839064400000258, 10, 0,
+ -0.39999999999999991, 0.0 },
{ 0.25147634951601561, 10, 0,
- -0.30000000000000004 },
+ -0.29999999999999993, 0.0 },
{ 0.12907202559999983, 10, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.12212499738710943, 10, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.24609375000000000, 10, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.12212499738710922, 10, 0,
- 0.10000000000000009 },
- { 0.12907202559999983, 10, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 0.12907202560000042, 10, 0,
+ 0.20000000000000018, 0.0 },
{ 0.25147634951601561, 10, 0,
- 0.30000000000000004 },
- { 0.096839064400000258, 10, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 0.096839064399999633, 10, 0,
+ 0.40000000000000013, 0.0 },
{ -0.18822860717773438, 10, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -0.24366274559999984, 10, 0,
- 0.60000000000000009 },
- { 0.085805795531640333, 10, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 0.085805795531641277, 10, 0,
+ 0.70000000000000018, 0.0 },
{ 0.30052979560000004, 10, 0,
- 0.80000000000000004 },
- { -0.26314561785585899, 10, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -0.26314561785586010, 10, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 10, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
// Test data for l=10, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data012[21] =
{
{ -0.0000000000000000, 10, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -3.0438748781479039, 10, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -0.87614260800000254, 10, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 2.9685359952934527, 10, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 1.2511825919999997, 10, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -2.0066877394361260, 10, 1,
- -0.50000000000000000 },
- { -2.4822196173476661, 10, 1,
- -0.40000000000000002 },
- { -0.12309508907433910, 10, 1,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -2.4822196173476647, 10, 1,
+ -0.39999999999999991, 0.0 },
+ { -0.12309508907433593, 10, 1,
+ -0.29999999999999993, 0.0 },
{ 2.2468221751958413, 10, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 2.2472659777983512, 10, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.0000000000000000, 10, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -2.2472659777983535, 10, 1,
- 0.10000000000000009 },
- { -2.2468221751958413, 10, 1,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -2.2468221751958377, 10, 1,
+ 0.20000000000000018, 0.0 },
{ 0.12309508907433910, 10, 1,
- 0.30000000000000004 },
- { 2.4822196173476647, 10, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 2.4822196173476669, 10, 1,
+ 0.40000000000000013, 0.0 },
{ 2.0066877394361260, 10, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -1.2511825920000037, 10, 1,
- 0.60000000000000009 },
- { -2.9685359952934527, 10, 1,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -2.9685359952934505, 10, 1,
+ 0.70000000000000018, 0.0 },
{ 0.87614260800000254, 10, 1,
- 0.80000000000000004 },
- { 3.0438748781479115, 10, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 3.0438748781478981, 10, 1,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 10, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler012 = 2.5000000000000020e-13;
// Test data for l=10, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data013[21] =
{
{ 0.0000000000000000, 10, 2,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 16.376387762496137, 10, 2,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -35.394657804000005, 10, 2,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -3.6191429423788648, 10, 2,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 28.679675904000014, 10, 2,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 18.388023376464844, 10, 2,
- -0.50000000000000000 },
- { -12.818955995999994, 10, 2,
- -0.40000000000000002 },
- { -27.739821675972664, 10, 2,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -12.818955996000021, 10, 2,
+ -0.39999999999999991, 0.0 },
+ { -27.739821675972646, 10, 2,
+ -0.29999999999999993, 0.0 },
{ -13.280661503999987, 10, 2,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 13.885467170308601, 10, 2,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 27.070312500000000, 10, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 13.885467170308573, 10, 2,
- 0.10000000000000009 },
- { -13.280661503999987, 10, 2,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -13.280661504000051, 10, 2,
+ 0.20000000000000018, 0.0 },
{ -27.739821675972664, 10, 2,
- 0.30000000000000004 },
- { -12.818955996000021, 10, 2,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -12.818955995999961, 10, 2,
+ 0.40000000000000013, 0.0 },
{ 18.388023376464844, 10, 2,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 28.679675904000000, 10, 2,
- 0.60000000000000009 },
- { -3.6191429423788648, 10, 2,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -3.6191429423789856, 10, 2,
+ 0.70000000000000018, 0.0 },
{ -35.394657804000005, 10, 2,
- 0.80000000000000004 },
- { 16.376387762496009, 10, 2,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 16.376387762496201, 10, 2,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 10, 2,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler013 = 2.5000000000000020e-13;
// Test data for l=10, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data014[21] =
{
{ 0.0000000000000000, 10, 5,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 21343.618518164680, 10, 5,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 40457.016407807983, 10, 5,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 20321.279317331315, 10, 5,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -14410.820616192004, 10, 5,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -30086.169706116176, 10, 5,
- -0.50000000000000000 },
- { -17177.549337582859, 10, 5,
- -0.40000000000000002 },
- { 9272.5119495412364, 10, 5,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -17177.549337582834, 10, 5,
+ -0.39999999999999991, 0.0 },
+ { 9272.5119495412546, 10, 5,
+ -0.29999999999999993, 0.0 },
{ 26591.511184414714, 10, 5,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 21961.951238504211, 10, 5,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.0000000000000000, 10, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -21961.951238504229, 10, 5,
- 0.10000000000000009 },
- { -26591.511184414714, 10, 5,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -26591.511184414703, 10, 5,
+ 0.20000000000000018, 0.0 },
{ -9272.5119495412364, 10, 5,
- 0.30000000000000004 },
- { 17177.549337582834, 10, 5,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 17177.549337582877, 10, 5,
+ 0.40000000000000013, 0.0 },
{ 30086.169706116176, 10, 5,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 14410.820616191972, 10, 5,
- 0.60000000000000009 },
- { -20321.279317331315, 10, 5,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -20321.279317331391, 10, 5,
+ 0.70000000000000018, 0.0 },
{ -40457.016407807983, 10, 5,
- 0.80000000000000004 },
- { -21343.618518164694, 10, 5,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -21343.618518164636, 10, 5,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 10, 5,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler014 = 2.5000000000000020e-13;
// Test data for l=10, m=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data015[21] =
{
{ 0.0000000000000000, 10, 10,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 162117.40078784220, 10, 10,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 3958896.3481267113, 10, 10,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 22589806.343887307, 10, 10,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 70300999.121633321, 10, 10,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 155370278.54003900, 10, 10,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 273815518.20150518, 10, 10,
- -0.40000000000000002 },
- { 408571989.13158917, 10, 10,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { 408571989.13158852, 10, 10,
+ -0.29999999999999993, 0.0 },
{ 533848212.07990247, 10, 10,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 622640835.70523083, 10, 10,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 654729075.00000000, 10, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 622640835.70523083, 10, 10,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ 533848212.07990247, 10, 10,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ 408571989.13158917, 10, 10,
- 0.30000000000000004 },
- { 273815518.20150518, 10, 10,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 273815518.20150483, 10, 10,
+ 0.40000000000000013, 0.0 },
{ 155370278.54003900, 10, 10,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 70300999.121633217, 10, 10,
- 0.60000000000000009 },
- { 22589806.343887307, 10, 10,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 22589806.343887202, 10, 10,
+ 0.70000000000000018, 0.0 },
{ 3958896.3481267113, 10, 10,
- 0.80000000000000004 },
- { 162117.40078784304, 10, 10,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 162117.40078784159, 10, 10,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 10, 10,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler015 = 2.5000000000000020e-13;
// Test data for l=20, m=0.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2307336678138069e-15
+// max(|f - f_GSL|): 3.6082248300317588e-16
+// max(|f - f_GSL| / |f_GSL|): 2.4166281401316513e-15
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 4.9424644697959907e-65
+// stddev(f - f_GSL): 7.0302663319365015e-33
const testcase_assoc_legendre<double>
data016[21] =
{
{ 1.0000000000000000, 20, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -0.14930823530984835, 20, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 0.22420460541741347, 20, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -0.20457394463834172, 20, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 0.15916752910098109, 20, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.048358381067373557, 20, 0,
- -0.50000000000000000 },
- { -0.10159261558628156, 20, 0,
- -0.40000000000000002 },
- { 0.18028715947998042, 20, 0,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -0.10159261558628112, 20, 0,
+ -0.39999999999999991, 0.0 },
+ { 0.18028715947998047, 20, 0,
+ -0.29999999999999993, 0.0 },
{ -0.098042194344594796, 20, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.082077130944527663, 20, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.17619705200195312, 20, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.082077130944528023, 20, 0,
- 0.10000000000000009 },
- { -0.098042194344594796, 20, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -0.098042194344594089, 20, 0,
+ 0.20000000000000018, 0.0 },
{ 0.18028715947998042, 20, 0,
- 0.30000000000000004 },
- { -0.10159261558628112, 20, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -0.10159261558628192, 20, 0,
+ 0.40000000000000013, 0.0 },
{ -0.048358381067373557, 20, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 0.15916752910098075, 20, 0,
- 0.60000000000000009 },
- { -0.20457394463834172, 20, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -0.20457394463834136, 20, 0,
+ 0.70000000000000018, 0.0 },
{ 0.22420460541741347, 20, 0,
- 0.80000000000000004 },
- { -0.14930823530984924, 20, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -0.14930823530984758, 20, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 20, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler016 = 2.5000000000000020e-13;
// Test data for l=20, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data017[21] =
{
{ 0.0000000000000000, 20, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 4.3838334818220499, 20, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -0.63138296146340844, 20, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 0.72274871413391395, 20, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -2.3203528743824910, 20, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 3.7399919228791405, 20, 1,
- -0.50000000000000000 },
- { -3.1692202279270041, 20, 1,
- -0.40000000000000002 },
- { 0.15804468835344135, 20, 1,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -3.1692202279270085, 20, 1,
+ -0.39999999999999991, 0.0 },
+ { 0.15804468835345031, 20, 1,
+ -0.29999999999999993, 0.0 },
{ 3.0366182393271171, 20, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -3.2115523815580209, 20, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.0000000000000000, 20, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.2115523815580169, 20, 1,
- 0.10000000000000009 },
- { -3.0366182393271171, 20, 1,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -3.0366182393271259, 20, 1,
+ 0.20000000000000018, 0.0 },
{ -0.15804468835344135, 20, 1,
- 0.30000000000000004 },
- { 3.1692202279270085, 20, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 3.1692202279269970, 20, 1,
+ 0.40000000000000013, 0.0 },
{ -3.7399919228791405, 20, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 2.3203528743824995, 20, 1,
- 0.60000000000000009 },
- { -0.72274871413391395, 20, 1,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -0.72274871413393793, 20, 1,
+ 0.70000000000000018, 0.0 },
{ 0.63138296146340844, 20, 1,
- 0.80000000000000004 },
- { -4.3838334818220339, 20, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -4.3838334818220686, 20, 1,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 20, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler017 = 2.5000000000000020e-13;
// Test data for l=20, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data018[21] =
{
{ 0.0000000000000000, 20, 2,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 80.812425587310102, 20, 2,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -95.849622172549374, 20, 2,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 87.337927630325510, 20, 2,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -70.330891533985834, 20, 2,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 24.629090735179489, 20, 2,
- -0.50000000000000000 },
- { 39.902576338912425, 20, 2,
- -0.40000000000000002 },
- { -75.621201471396603, 20, 2,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 39.902576338912247, 20, 2,
+ -0.39999999999999991, 0.0 },
+ { -75.621201471396546, 20, 2,
+ -0.29999999999999993, 0.0 },
{ 42.417415829726494, 20, 2,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 33.826848678871293, 20, 2,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -74.002761840820312, 20, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 33.826848678871464, 20, 2,
- 0.10000000000000009 },
- { 42.417415829726494, 20, 2,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 42.417415829726188, 20, 2,
+ 0.20000000000000018, 0.0 },
{ -75.621201471396603, 20, 2,
- 0.30000000000000004 },
- { 39.902576338912247, 20, 2,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 39.902576338912553, 20, 2,
+ 0.40000000000000013, 0.0 },
{ 24.629090735179489, 20, 2,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -70.330891533985721, 20, 2,
- 0.60000000000000009 },
- { 87.337927630325510, 20, 2,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 87.337927630325453, 20, 2,
+ 0.70000000000000018, 0.0 },
{ -95.849622172549374, 20, 2,
- 0.80000000000000004 },
- { 80.812425587310500, 20, 2,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 80.812425587309747, 20, 2,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 20, 2,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler018 = 2.5000000000000020e-13;
// Test data for l=20, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data019[21] =
{
{ -0.0000000000000000, 20, 5,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -315702.32715134218, 20, 5,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 503060.91484852589, 20, 5,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -298127.28360361955, 20, 5,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -114444.61447464029, 20, 5,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 543428.40914592845, 20, 5,
- -0.50000000000000000 },
- { -613842.07728185470, 20, 5,
- -0.40000000000000002 },
- { 143765.42411270936, 20, 5,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -613842.07728185481, 20, 5,
+ -0.39999999999999991, 0.0 },
+ { 143765.42411271061, 20, 5,
+ -0.29999999999999993, 0.0 },
{ 472600.45321372285, 20, 5,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -563861.76771496492, 20, 5,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.0000000000000000, 20, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 563861.76771496458, 20, 5,
- 0.10000000000000009 },
- { -472600.45321372285, 20, 5,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -472600.45321372483, 20, 5,
+ 0.20000000000000018, 0.0 },
{ -143765.42411270936, 20, 5,
- 0.30000000000000004 },
- { 613842.07728185481, 20, 5,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 613842.07728185353, 20, 5,
+ 0.40000000000000013, 0.0 },
{ -543428.40914592845, 20, 5,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 114444.61447464178, 20, 5,
- 0.60000000000000009 },
- { 298127.28360361955, 20, 5,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 298127.28360361519, 20, 5,
+ 0.70000000000000018, 0.0 },
{ -503060.91484852589, 20, 5,
- 0.80000000000000004 },
- { 315702.32715134491, 20, 5,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 315702.32715133618, 20, 5,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 20, 5,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler019 = 2.5000000000000020e-13;
// Test data for l=20, m=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data020[21] =
{
{ -0.0000000000000000, 20, 10,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 990017476694.99084, 20, 10,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 2392757933281.0498, 20, 10,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -1548364524949.5808, 20, 10,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -424471915195.05627, 20, 10,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 1744502295946.2073, 20, 10,
- -0.50000000000000000 },
- { -899973487310.55212, 20, 10,
- -0.40000000000000002 },
- { -1092420454297.7161, 20, 10,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -899973487310.55530, 20, 10,
+ -0.39999999999999991, 0.0 },
+ { -1092420454297.7119, 20, 10,
+ -0.29999999999999993, 0.0 },
{ 1466609267659.8816, 20, 10,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 356041756390.71674, 20, 10,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -1612052956674.3164, 20, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 356041756390.71985, 20, 10,
- 0.10000000000000009 },
- { 1466609267659.8816, 20, 10,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 1466609267659.8796, 20, 10,
+ 0.20000000000000018, 0.0 },
{ -1092420454297.7161, 20, 10,
- 0.30000000000000004 },
- { -899973487310.55530, 20, 10,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -899973487310.54810, 20, 10,
+ 0.40000000000000013, 0.0 },
{ 1744502295946.2073, 20, 10,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -424471915195.05896, 20, 10,
- 0.60000000000000009 },
- { -1548364524949.5808, 20, 10,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -1548364524949.5730, 20, 10,
+ 0.70000000000000018, 0.0 },
{ 2392757933281.0498, 20, 10,
- 0.80000000000000004 },
- { 990017476694.99316, 20, 10,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 990017476694.98828, 20, 10,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 20, 10,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler020 = 2.5000000000000020e-13;
// Test data for l=20, m=20.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data021[21] =
{
{ 0.0000000000000000, 20, 20,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 19609049712023808., 20, 20,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 1.1693527616833221e+19, 20, 20,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 3.8073455880620691e+20, 20, 20,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 3.6874002249007927e+21, 20, 20,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 1.8010806978179592e+22, 20, 20,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 5.5938832584012466e+22, 20, 20,
- -0.40000000000000002 },
- { 1.2454734132297811e+23, 20, 20,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { 1.2454734132297759e+23, 20, 20,
+ -0.29999999999999993, 0.0 },
{ 2.1263407800797497e+23, 20, 20,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 2.8924941146976873e+23, 20, 20,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 3.1983098677287775e+23, 20, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.8924941146976873e+23, 20, 20,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ 2.1263407800797497e+23, 20, 20,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ 1.2454734132297811e+23, 20, 20,
- 0.30000000000000004 },
- { 5.5938832584012466e+22, 20, 20,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 5.5938832584012366e+22, 20, 20,
+ 0.40000000000000013, 0.0 },
{ 1.8010806978179592e+22, 20, 20,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 3.6874002249007807e+21, 20, 20,
- 0.60000000000000009 },
- { 3.8073455880620691e+20, 20, 20,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 3.8073455880620343e+20, 20, 20,
+ 0.70000000000000018, 0.0 },
{ 1.1693527616833221e+19, 20, 20,
- 0.80000000000000004 },
- { 19609049712024020., 20, 20,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 19609049712023672., 20, 20,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 20, 20,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler021 = 2.5000000000000020e-13;
// Test data for l=50, m=0.
-// max(|f - f_GSL|): 3.6082248300317588e-16
-// max(|f - f_GSL| / |f_GSL|): 2.1700196856209138e-15
+// max(|f - f_GSL|): 1.6653345369377348e-16
+// max(|f - f_GSL| / |f_GSL|): 1.6665460706897444e-15
+// mean(f - f_GSL): -8.0953762212251003e-18
+// variance(f - f_GSL): 3.4405935985667807e-36
+// stddev(f - f_GSL): 1.8548837156454796e-18
const testcase_assoc_legendre<double>
data022[21] =
{
{ 1.0000000000000000, 50, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -0.17003765994383671, 50, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 0.13879737345093113, 50, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -0.014572731645892852, 50, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -0.058860798844002096, 50, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.031059099239609811, 50, 0,
- -0.50000000000000000 },
- { 0.041569033381825375, 50, 0,
- -0.40000000000000002 },
- { 0.10911051574714797, 50, 0,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 0.041569033381824674, 50, 0,
+ -0.39999999999999991, 0.0 },
+ { 0.10911051574714790, 50, 0,
+ -0.29999999999999993, 0.0 },
{ 0.083432272204197494, 50, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.038205812661313600, 50, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.11227517265921705, 50, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.038205812661314155, 50, 0,
- 0.10000000000000009 },
- { 0.083432272204197494, 50, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 0.083432272204196564, 50, 0,
+ 0.20000000000000018, 0.0 },
{ 0.10911051574714797, 50, 0,
- 0.30000000000000004 },
- { 0.041569033381824674, 50, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 0.041569033381826007, 50, 0,
+ 0.40000000000000013, 0.0 },
{ -0.031059099239609811, 50, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -0.058860798844001430, 50, 0,
- 0.60000000000000009 },
- { -0.014572731645892852, 50, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -0.014572731645890737, 50, 0,
+ 0.70000000000000018, 0.0 },
{ 0.13879737345093113, 50, 0,
- 0.80000000000000004 },
- { -0.17003765994383657, 50, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -0.17003765994383679, 50, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 50, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler022 = 2.5000000000000020e-13;
// Test data for l=50, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data023[21] =
{
{ 0.0000000000000000, 50, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -0.13424149984449490, 50, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 2.2011219672413018, 50, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 6.6622414993232004, 50, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 5.5772846936919249, 50, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 5.8787148815607608, 50, 1,
- -0.50000000000000000 },
- { 5.5473459458633974, 50, 1,
- -0.40000000000000002 },
- { 1.8444956647619930, 50, 1,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 5.5473459458634080, 50, 1,
+ -0.39999999999999991, 0.0 },
+ { 1.8444956647620248, 50, 1,
+ -0.29999999999999993, 0.0 },
{ -3.8722014306642127, 50, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -5.3488751322285628, 50, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.0000000000000000, 50, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 5.3488751322285522, 50, 1,
- 0.10000000000000009 },
- { 3.8722014306642127, 50, 1,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 3.8722014306642620, 50, 1,
+ 0.20000000000000018, 0.0 },
{ -1.8444956647619930, 50, 1,
- 0.30000000000000004 },
- { -5.5473459458634080, 50, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -5.5473459458633814, 50, 1,
+ 0.40000000000000013, 0.0 },
{ -5.8787148815607608, 50, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -5.5772846936919453, 50, 1,
- 0.60000000000000009 },
- { -6.6622414993232004, 50, 1,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -6.6622414993232182, 50, 1,
+ 0.70000000000000018, 0.0 },
{ -2.2011219672413018, 50, 1,
- 0.80000000000000004 },
- { 0.13424149984462019, 50, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 0.13424149984438935, 50, 1,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 50, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler023 = 2.5000000000000020e-13;
// Test data for l=50, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data024[21] =
{
{ 0.0000000000000000, 50, 2,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 433.04168483713511, 50, 2,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -348.06364372056424, 50, 2,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 50.221071418108444, 50, 2,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 158.46096409274352, 50, 2,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 85.988858299721457, 50, 2,
- -0.50000000000000000 },
- { -101.15891460879270, 50, 2,
- -0.40000000000000002 },
- { -277.07168105316617, 50, 2,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -101.15891460879088, 50, 2,
+ -0.39999999999999991, 0.0 },
+ { -277.07168105316526, 50, 2,
+ -0.29999999999999993, 0.0 },
{ -214.33311373510401, 50, 2,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 96.349657930951665, 50, 2,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 286.30169028100346, 50, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 96.349657930953242, 50, 2,
- 0.10000000000000009 },
- { -214.33311373510401, 50, 2,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -214.33311373510165, 50, 2,
+ 0.20000000000000018, 0.0 },
{ -277.07168105316617, 50, 2,
- 0.30000000000000004 },
- { -101.15891460879088, 50, 2,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -101.15891460879435, 50, 2,
+ 0.40000000000000013, 0.0 },
{ 85.988858299721457, 50, 2,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 158.46096409274153, 50, 2,
- 0.60000000000000009 },
- { 50.221071418108444, 50, 2,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 50.221071418103143, 50, 2,
+ 0.70000000000000018, 0.0 },
{ -348.06364372056424, 50, 2,
- 0.80000000000000004 },
- { 433.04168483713374, 50, 2,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 433.04168483713596, 50, 2,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 50, 2,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler024 = 2.5000000000000020e-13;
// Test data for l=50, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data025[21] =
{
{ -0.0000000000000000, 50, 5,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -27340473.952132829, 50, 5,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 27753716.768532373, 50, 5,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 40808153.913493633, 50, 5,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 32071189.035790090, 50, 5,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 36265736.218529105, 50, 5,
- -0.50000000000000000 },
- { 37089596.700204901, 50, 5,
- -0.40000000000000002 },
- { 14562029.629244499, 50, 5,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 37089596.700204931, 50, 5,
+ -0.39999999999999991, 0.0 },
+ { 14562029.629244687, 50, 5,
+ -0.29999999999999993, 0.0 },
{ -23686895.217517190, 50, 5,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -34878992.965676002, 50, 5,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -0.0000000000000000, 50, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 34878992.965675958, 50, 5,
- 0.10000000000000009 },
- { 23686895.217517190, 50, 5,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 23686895.217517529, 50, 5,
+ 0.20000000000000018, 0.0 },
{ -14562029.629244499, 50, 5,
- 0.30000000000000004 },
- { -37089596.700204931, 50, 5,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -37089596.700204782, 50, 5,
+ 0.40000000000000013, 0.0 },
{ -36265736.218529105, 50, 5,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -32071189.035790242, 50, 5,
- 0.60000000000000009 },
- { -40808153.913493633, 50, 5,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -40808153.913493834, 50, 5,
+ 0.70000000000000018, 0.0 },
{ -27753716.768532373, 50, 5,
- 0.80000000000000004 },
- { 27340473.952133428, 50, 5,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 27340473.952132136, 50, 5,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 50, 5,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler025 = 2.5000000000000020e-13;
// Test data for l=50, m=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data026[21] =
{
{ -0.0000000000000000, 50, 10,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -8994661710093155.0, 50, 10,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 932311375306569.62, 50, 10,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 12153535011507012., 50, 10,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 12176690755542240., 50, 10,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 9180035388465754.0, 50, 10,
- -0.50000000000000000 },
- { 889201701866910.38, 50, 10,
- -0.40000000000000002 },
- { -9451384032851604.0, 50, 10,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 889201701866984.00, 50, 10,
+ -0.39999999999999991, 0.0 },
+ { -9451384032851544.0, 50, 10,
+ -0.29999999999999993, 0.0 },
{ -9926439446673564.0, 50, 10,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 2794368162749970.5, 50, 10,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 11452238249246346., 50, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2794368162750031.0, 50, 10,
- 0.10000000000000009 },
- { -9926439446673564.0, 50, 10,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -9926439446673506.0, 50, 10,
+ 0.20000000000000018, 0.0 },
{ -9451384032851604.0, 50, 10,
- 0.30000000000000004 },
- { 889201701866984.00, 50, 10,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 889201701866835.25, 50, 10,
+ 0.40000000000000013, 0.0 },
{ 9180035388465754.0, 50, 10,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 12176690755542214., 50, 10,
- 0.60000000000000009 },
- { 12153535011507012., 50, 10,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 12153535011506908., 50, 10,
+ 0.70000000000000018, 0.0 },
{ 932311375306569.62, 50, 10,
- 0.80000000000000004 },
- { -8994661710093362.0, 50, 10,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -8994661710093013.0, 50, 10,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 50, 10,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler026 = 2.5000000000000020e-13;
// Test data for l=50, m=20.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data027[21] =
{
{ 0.0000000000000000, 50, 20,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 1.6630925158645501e+33, 50, 20,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 1.0622676657892052e+33, 50, 20,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 8.6022521164717112e+32, 50, 20,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 4.0860128756808466e+32, 50, 20,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -4.0169860814274459e+32, 50, 20,
- -0.50000000000000000 },
- { -8.2324325279774037e+32, 50, 20,
- -0.40000000000000002 },
- { -4.0054067236243731e+31, 50, 20,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -8.2324325279773994e+32, 50, 20,
+ -0.39999999999999991, 0.0 },
+ { -4.0054067236247267e+31, 50, 20,
+ -0.29999999999999993, 0.0 },
{ 7.9309266056434309e+32, 50, 20,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 5.4151358290898977e+31, 50, 20,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -7.8735935697332210e+32, 50, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 5.4151358290894924e+31, 50, 20,
- 0.10000000000000009 },
- { 7.9309266056434309e+32, 50, 20,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 7.9309266056434453e+32, 50, 20,
+ 0.20000000000000018, 0.0 },
{ -4.0054067236243731e+31, 50, 20,
- 0.30000000000000004 },
- { -8.2324325279773994e+32, 50, 20,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -8.2324325279773893e+32, 50, 20,
+ 0.40000000000000013, 0.0 },
{ -4.0169860814274459e+32, 50, 20,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 4.0860128756807846e+32, 50, 20,
- 0.60000000000000009 },
- { 8.6022521164717112e+32, 50, 20,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 8.6022521164716291e+32, 50, 20,
+ 0.70000000000000018, 0.0 },
{ 1.0622676657892052e+33, 50, 20,
- 0.80000000000000004 },
- { 1.6630925158645483e+33, 50, 20,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 1.6630925158645541e+33, 50, 20,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 50, 20,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler027 = 2.5000000000000020e-13;
// Test data for l=50, m=50.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data028[21] =
{
{ 0.0000000000000000, 50, 50,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 2.5366994974431341e+60, 50, 50,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 2.2028834403101213e+67, 50, 50,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.3325496559566651e+71, 50, 50,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 3.8898096431781969e+73, 50, 50,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 2.0509760257037188e+75, 50, 50,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 3.4866724533443283e+76, 50, 50,
- -0.40000000000000002 },
- { 2.5790740224150207e+77, 50, 50,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { 2.5790740224149893e+77, 50, 50,
+ -0.29999999999999993, 0.0 },
{ 9.8222237931680989e+77, 50, 50,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 2.1198682190366617e+78, 50, 50,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 2.7253921397507295e+78, 50, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.1198682190366617e+78, 50, 50,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ 9.8222237931680989e+77, 50, 50,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ 2.5790740224150207e+77, 50, 50,
- 0.30000000000000004 },
- { 3.4866724533443283e+76, 50, 50,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 3.4866724533443123e+76, 50, 50,
+ 0.40000000000000013, 0.0 },
{ 2.0509760257037188e+75, 50, 50,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 3.8898096431781724e+73, 50, 50,
- 0.60000000000000009 },
- { 1.3325496559566651e+71, 50, 50,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 1.3325496559566344e+71, 50, 50,
+ 0.70000000000000018, 0.0 },
{ 2.2028834403101213e+67, 50, 50,
- 0.80000000000000004 },
- { 2.5366994974431990e+60, 50, 50,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 2.5366994974430855e+60, 50, 50,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 50, 50,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler028 = 2.5000000000000020e-13;
// Test data for l=100, m=0.
// max(|f - f_GSL|): 3.4694469519536142e-16
// max(|f - f_GSL| / |f_GSL|): 6.8214063779431592e-15
+// mean(f - f_GSL): -4.1385545784018113e-17
+// variance(f - f_GSL): 8.9920078491655612e-35
+// stddev(f - f_GSL): 9.4826198116161765e-18
const testcase_assoc_legendre<double>
data029[21] =
{
{ 1.0000000000000000, 100, 0,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 0.10226582055871893, 100, 0,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 0.050861167913584228, 100, 0,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -0.077132507199778641, 100, 0,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -0.023747023905133141, 100, 0,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -0.060518025961861198, 100, 0,
- -0.50000000000000000 },
- { -0.072258202125684470, 100, 0,
- -0.40000000000000002 },
- { 0.057127392202801566, 100, 0,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -0.072258202125685025, 100, 0,
+ -0.39999999999999991, 0.0 },
+ { 0.057127392202801046, 100, 0,
+ -0.29999999999999993, 0.0 },
{ 0.014681835355659706, 100, 0,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -0.063895098434750205, 100, 0,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.079589237387178727, 100, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.063895098434749761, 100, 0,
- 0.10000000000000009 },
- { 0.014681835355659706, 100, 0,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 0.014681835355657875, 100, 0,
+ 0.20000000000000018, 0.0 },
{ 0.057127392202801566, 100, 0,
- 0.30000000000000004 },
- { -0.072258202125685025, 100, 0,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -0.072258202125684082, 100, 0,
+ 0.40000000000000013, 0.0 },
{ -0.060518025961861198, 100, 0,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -0.023747023905134217, 100, 0,
- 0.60000000000000009 },
- { -0.077132507199778641, 100, 0,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { -0.077132507199780501, 100, 0,
+ 0.70000000000000018, 0.0 },
{ 0.050861167913584228, 100, 0,
- 0.80000000000000004 },
- { 0.10226582055871711, 100, 0,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 0.10226582055872063, 100, 0,
+ 0.90000000000000013, 0.0 },
{ 1.0000000000000000, 100, 0,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler029 = 5.0000000000000039e-13;
// Test data for l=100, m=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data030[21] =
{
{ -0.0000000000000000, 100, 1,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 6.5200167187780345, 100, 1,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 9.0065170007027486, 100, 1,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -5.4690908541180976, 100, 1,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -8.6275439170430790, 100, 1,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -6.0909031663448454, 100, 1,
- -0.50000000000000000 },
- { 4.1160338699561212, 100, 1,
- -0.40000000000000002 },
- { 5.8491043010758013, 100, 1,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 4.1160338699560395, 100, 1,
+ -0.39999999999999991, 0.0 },
+ { 5.8491043010758634, 100, 1,
+ -0.29999999999999993, 0.0 },
{ -7.9435138723089826, 100, 1,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 4.7996285823989355, 100, 1,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.0000000000000000, 100, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -4.7996285823990101, 100, 1,
- 0.10000000000000009 },
- { 7.9435138723089826, 100, 1,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 7.9435138723090155, 100, 1,
+ 0.20000000000000018, 0.0 },
{ -5.8491043010758013, 100, 1,
- 0.30000000000000004 },
- { -4.1160338699560395, 100, 1,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -4.1160338699562162, 100, 1,
+ 0.40000000000000013, 0.0 },
{ 6.0909031663448454, 100, 1,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 8.6275439170430470, 100, 1,
- 0.60000000000000009 },
- { 5.4690908541180976, 100, 1,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 5.4690908541178693, 100, 1,
+ 0.70000000000000018, 0.0 },
{ -9.0065170007027486, 100, 1,
- 0.80000000000000004 },
- { -6.5200167187783542, 100, 1,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -6.5200167187777787, 100, 1,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 1,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler030 = 2.5000000000000020e-13;
// Test data for l=100, m=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data031[21] =
{
{ 0.0000000000000000, 100, 2,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ -1005.9604880761002, 100, 2,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -489.68041725865947, 100, 2,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 768.31676011669924, 100, 2,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 226.90362556627937, 100, 2,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 604.19889304940341, 100, 2,
- -0.50000000000000000 },
- { 733.40061037838029, 100, 2,
- -0.40000000000000002 },
- { -573.30774483996390, 100, 2,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 733.40061037838518, 100, 2,
+ -0.39999999999999991, 0.0 },
+ { -573.30774483995629, 100, 2,
+ -0.29999999999999993, 0.0 },
{ -151.52946305080880, 100, 2,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 646.30525583587985, 100, 2,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -803.85129761050518, 100, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 646.30525583587439, 100, 2,
- 0.10000000000000009 },
- { -151.52946305080880, 100, 2,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -151.52946305079013, 100, 2,
+ 0.20000000000000018, 0.0 },
{ -573.30774483996390, 100, 2,
- 0.30000000000000004 },
- { 733.40061037838518, 100, 2,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 733.40061037837552, 100, 2,
+ 0.40000000000000013, 0.0 },
{ 604.19889304940341, 100, 2,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 226.90362556629168, 100, 2,
- 0.60000000000000009 },
- { 768.31676011669924, 100, 2,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 768.31676011671766, 100, 2,
+ 0.70000000000000018, 0.0 },
{ -489.68041725865947, 100, 2,
- 0.80000000000000004 },
- { -1005.9604880760779, 100, 2,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -1005.9604880761161, 100, 2,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 2,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler031 = 2.5000000000000020e-13;
// Test data for l=100, m=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data032[21] =
{
{ 0.0000000000000000, 100, 5,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 900551126.09653807, 100, 5,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 988567431.55756140, 100, 5,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ -645646451.90344620, 100, 5,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -897114585.29920685, 100, 5,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -661710744.42483854, 100, 5,
- -0.50000000000000000 },
- { 380163158.51425636, 100, 5,
- -0.40000000000000002 },
- { 617391071.36632574, 100, 5,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 380163158.51424754, 100, 5,
+ -0.39999999999999991, 0.0 },
+ { 617391071.36633193, 100, 5,
+ -0.29999999999999993, 0.0 },
{ -805288801.85509109, 100, 5,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 481041740.16728652, 100, 5,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 0.0000000000000000, 100, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -481041740.16729391, 100, 5,
- 0.10000000000000009 },
- { 805288801.85509109, 100, 5,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 805288801.85509515, 100, 5,
+ 0.20000000000000018, 0.0 },
{ -617391071.36632574, 100, 5,
- 0.30000000000000004 },
- { -380163158.51424754, 100, 5,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -380163158.51426536, 100, 5,
+ 0.40000000000000013, 0.0 },
{ 661710744.42483854, 100, 5,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 897114585.29920483, 100, 5,
- 0.60000000000000009 },
- { 645646451.90344620, 100, 5,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 645646451.90342283, 100, 5,
+ 0.70000000000000018, 0.0 },
{ -988567431.55756140, 100, 5,
- 0.80000000000000004 },
- { -900551126.09655857, 100, 5,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { -900551126.09651637, 100, 5,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 5,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler032 = 2.5000000000000020e-13;
// Test data for l=100, m=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data033[21] =
{
{ 0.0000000000000000, 100, 10,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 2.5643395957658602e+17, 100, 10,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 1.5778673545673485e+18, 100, 10,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 4.4355048487496801e+18, 100, 10,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ -9.5936111659124288e+17, 100, 10,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 4.2387123021963438e+18, 100, 10,
- -0.50000000000000000 },
- { 8.2370834618426542e+18, 100, 10,
- -0.40000000000000002 },
- { -4.9089358388052941e+18, 100, 10,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 8.2370834618426767e+18, 100, 10,
+ -0.39999999999999991, 0.0 },
+ { -4.9089358388051978e+18, 100, 10,
+ -0.29999999999999993, 0.0 },
{ -2.3468810358091274e+18, 100, 10,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 6.8627855225034568e+18, 100, 10,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -8.2494597181670380e+18, 100, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 6.8627855225034056e+18, 100, 10,
- 0.10000000000000009 },
- { -2.3468810358091274e+18, 100, 10,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -2.3468810358089518e+18, 100, 10,
+ 0.20000000000000018, 0.0 },
{ -4.9089358388052941e+18, 100, 10,
- 0.30000000000000004 },
- { 8.2370834618426767e+18, 100, 10,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 8.2370834618426112e+18, 100, 10,
+ 0.40000000000000013, 0.0 },
{ 4.2387123021963438e+18, 100, 10,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ -9.5936111659112640e+17, 100, 10,
- 0.60000000000000009 },
- { 4.4355048487496801e+18, 100, 10,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 4.4355048487499668e+18, 100, 10,
+ 0.70000000000000018, 0.0 },
{ 1.5778673545673485e+18, 100, 10,
- 0.80000000000000004 },
- { 2.5643395957697341e+17, 100, 10,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 2.5643395957630058e+17, 100, 10,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 10,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler033 = 2.5000000000000020e-13;
// Test data for l=100, m=20.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data034[21] =
{
{ 0.0000000000000000, 100, 20,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 7.1604344878780134e+37, 100, 20,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -8.3963895116962231e+38, 100, 20,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 7.9022236853110145e+38, 100, 20,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 8.2680005574121013e+38, 100, 20,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 3.0750497039999552e+38, 100, 20,
- -0.50000000000000000 },
- { -7.6120586043843889e+38, 100, 20,
- -0.40000000000000002 },
- { 1.1474496891901797e+38, 100, 20,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { -7.6120586043843556e+38, 100, 20,
+ -0.39999999999999991, 0.0 },
+ { 1.1474496891900921e+38, 100, 20,
+ -0.29999999999999993, 0.0 },
{ 4.3966251307444241e+38, 100, 20,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ -7.0503266451702591e+38, 100, 20,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 7.7727439836159581e+38, 100, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -7.0503266451702213e+38, 100, 20,
- 0.10000000000000009 },
- { 4.3966251307444241e+38, 100, 20,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { 4.3966251307442783e+38, 100, 20,
+ 0.20000000000000018, 0.0 },
{ 1.1474496891901797e+38, 100, 20,
- 0.30000000000000004 },
- { -7.6120586043843556e+38, 100, 20,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { -7.6120586043844176e+38, 100, 20,
+ 0.40000000000000013, 0.0 },
{ 3.0750497039999552e+38, 100, 20,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 8.2680005574120394e+38, 100, 20,
- 0.60000000000000009 },
- { 7.9022236853110145e+38, 100, 20,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 7.9022236853108422e+38, 100, 20,
+ 0.70000000000000018, 0.0 },
{ -8.3963895116962231e+38, 100, 20,
- 0.80000000000000004 },
- { 7.1604344878812652e+37, 100, 20,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 7.1604344878751847e+37, 100, 20,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 20,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler034 = 2.5000000000000020e-13;
// Test data for l=100, m=50.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data035[21] =
{
{ 0.0000000000000000, 100, 50,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 9.3231278516893716e+96, 100, 50,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ -1.1029797977454281e+98, 100, 50,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.8089333903465606e+97, 100, 50,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 5.9364045925669405e+97, 100, 50,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ -8.2252620339727118e+97, 100, 50,
- -0.50000000000000000 },
- { 7.1431385093739863e+97, 100, 50,
- -0.40000000000000002 },
- { -3.3520602067479344e+97, 100, 50,
- -0.30000000000000004 },
+ -0.50000000000000000, 0.0 },
+ { 7.1431385093740728e+97, 100, 50,
+ -0.39999999999999991, 0.0 },
+ { -3.3520602067479935e+97, 100, 50,
+ -0.29999999999999993, 0.0 },
{ -2.7791149588121382e+97, 100, 50,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 9.0119338550180417e+97, 100, 50,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ -1.1712145031578381e+98, 100, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 9.0119338550181207e+97, 100, 50,
- 0.10000000000000009 },
- { -2.7791149588121382e+97, 100, 50,
- 0.19999999999999996 },
+ 0.10000000000000009, 0.0 },
+ { -2.7791149588123644e+97, 100, 50,
+ 0.20000000000000018, 0.0 },
{ -3.3520602067479344e+97, 100, 50,
- 0.30000000000000004 },
- { 7.1431385093740728e+97, 100, 50,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 7.1431385093738816e+97, 100, 50,
+ 0.40000000000000013, 0.0 },
{ -8.2252620339727118e+97, 100, 50,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 5.9364045925668024e+97, 100, 50,
- 0.60000000000000009 },
- { 1.8089333903465606e+97, 100, 50,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 1.8089333903469005e+97, 100, 50,
+ 0.70000000000000018, 0.0 },
{ -1.1029797977454281e+98, 100, 50,
- 0.80000000000000004 },
- { 9.3231278516894968e+96, 100, 50,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 9.3231278516892938e+96, 100, 50,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 50,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler035 = 2.5000000000000020e-13;
// Test data for l=100, m=100.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_assoc_legendre<double>
data036[21] =
{
{ 0.0000000000000000, 100, 100,
- -1.0000000000000000 },
+ -1.0000000000000000, 0.0 },
{ 5.7751792255758316e+150, 100, 100,
- -0.90000000000000002 },
+ -0.90000000000000002, 0.0 },
{ 4.3552236041585515e+164, 100, 100,
- -0.80000000000000004 },
+ -0.80000000000000004, 0.0 },
{ 1.5936546850595123e+172, 100, 100,
- -0.69999999999999996 },
+ -0.69999999999999996, 0.0 },
{ 1.3579510590289176e+177, 100, 100,
- -0.59999999999999998 },
+ -0.59999999999999998, 0.0 },
{ 3.7752749682889513e+180, 100, 100,
- -0.50000000000000000 },
+ -0.50000000000000000, 0.0 },
{ 1.0910627330458913e+183, 100, 100,
- -0.40000000000000002 },
- { 5.9697347526822483e+184, 100, 100,
- -0.30000000000000004 },
+ -0.39999999999999991, 0.0 },
+ { 5.9697347526821064e+184, 100, 100,
+ -0.29999999999999993, 0.0 },
{ 8.6585879147526714e+185, 100, 100,
- -0.19999999999999996 },
+ -0.19999999999999996, 0.0 },
{ 4.0331571908057011e+186, 100, 100,
- -0.099999999999999978 },
+ -0.099999999999999978, 0.0 },
{ 6.6663086700729543e+186, 100, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.0331571908057011e+186, 100, 100,
- 0.10000000000000009 },
+ 0.10000000000000009, 0.0 },
{ 8.6585879147526714e+185, 100, 100,
- 0.19999999999999996 },
+ 0.20000000000000018, 0.0 },
{ 5.9697347526822483e+184, 100, 100,
- 0.30000000000000004 },
- { 1.0910627330458913e+183, 100, 100,
- 0.39999999999999991 },
+ 0.30000000000000004, 0.0 },
+ { 1.0910627330458797e+183, 100, 100,
+ 0.40000000000000013, 0.0 },
{ 3.7752749682889513e+180, 100, 100,
- 0.50000000000000000 },
+ 0.50000000000000000, 0.0 },
{ 1.3579510590289000e+177, 100, 100,
- 0.60000000000000009 },
- { 1.5936546850595123e+172, 100, 100,
- 0.69999999999999996 },
+ 0.60000000000000009, 0.0 },
+ { 1.5936546850594382e+172, 100, 100,
+ 0.70000000000000018, 0.0 },
{ 4.3552236041585515e+164, 100, 100,
- 0.80000000000000004 },
- { 5.7751792255761289e+150, 100, 100,
- 0.89999999999999991 },
+ 0.80000000000000004, 0.0 },
+ { 5.7751792255756128e+150, 100, 100,
+ 0.90000000000000013, 0.0 },
{ 0.0000000000000000, 100, 100,
- 1.0000000000000000 },
+ 1.0000000000000000, 0.0 },
};
const double toler036 = 2.5000000000000020e-13;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_assoc_legendre<Tp> (&data)[Num], Tp toler)
+ test(const testcase_assoc_legendre<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::assoc_legendre(data[i].l, data[i].m,
+ const Ret f = std::assoc_legendre(data[i].l, data[i].m,
data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc b/libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc
index 93348810f79..e13315d10a7 100644
--- a/libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/03_beta/check_value.cc
@@ -39,215 +39,245 @@
// 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|): 7.7707014339346327e-17
+// max(|f - f_GSL| / |f_GSL|): 9.7017504401032555e-10
+// mean(f - f_GSL): -7.7938051002258226e-18
+// variance(f - f_GSL): 7.4991865016938964e-36
+// stddev(f - f_GSL): 2.7384642597072353e-18
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 = 5.0000000000000024e-08;
// 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|): 2.5195507868058946e-19
+// max(|f - f_GSL| / |f_GSL|): 1.5755574688509410e-10
+// mean(f - f_GSL): -2.5184035061512766e-20
+// variance(f - f_GSL): 7.8300694071554691e-41
+// stddev(f - f_GSL): 8.8487679408805091e-21
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.8857342309689050e-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;
+const double toler002 = 1.0000000000000005e-08;
// 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.1430776255782837e-20
+// max(|f - f_GSL| / |f_GSL|): 1.3624517337320060e-10
+// mean(f - f_GSL): 2.1431216846143432e-21
+// variance(f - f_GSL): 5.6703340185978029e-43
+// stddev(f - f_GSL): 7.5301620291981785e-22
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.0118197777273836e-24, 30.000000000000000, 50.000000000000000, 0.0 },
+ { 7.4279528553260165e-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 = 1.0000000000000005e-08;
// 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|): 5.0244436746634082e-22
+// max(|f - f_GSL| / |f_GSL|): 4.1289986460511602e-11
+// mean(f - f_GSL): 5.0243379525418262e-23
+// variance(f - f_GSL): 3.1165397359694066e-46
+// stddev(f - f_GSL): 1.7653724071621280e-23
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.5161712118557719e-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.9797337118812366e-37, 40.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler004 = 2.5000000000000015e-12;
+const double toler004 = 2.5000000000000013e-09;
// 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|): 1.1204316897292397e-21
+// max(|f - f_GSL| / |f_GSL|): 7.0394881417720306e-10
+// mean(f - f_GSL): -1.1204318293025886e-22
+// variance(f - f_GSL): 1.5498364001411668e-45
+// stddev(f - f_GSL): 3.9367961594946298e-23
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.0118197777273836e-24, 50.000000000000000, 30.000000000000000, 0.0 },
+ { 7.5161712118557719e-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.0939382296458962e-38, 50.000000000000000, 80.000000000000000, 0.0 },
+ { 1.0442781609881063e-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 = 5.0000000000000024e-08;
// 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.0985727438802444e-23
+// max(|f - f_GSL| / |f_GSL|): 3.0938099754905715e-10
+// mean(f - f_GSL): 9.0985743683683168e-24
+// variance(f - f_GSL): 1.0220253769966532e-47
+// stddev(f - f_GSL): 3.1969131627190834e-24
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.8857342309689050e-20, 60.000000000000000, 20.000000000000000, 0.0 },
+ { 7.4279528553260165e-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.2902663809722593e-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.5000000000000012e-08;
// 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|): 3.3337312341737893e-23
+// max(|f - f_GSL| / |f_GSL|): 4.8028419025367724e-10
+// mean(f - f_GSL): 3.3337311814398949e-24
+// variance(f - f_GSL): 1.3720695790252640e-48
+// stddev(f - f_GSL): 1.1713537377860130e-24
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.0453137143486369e-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.5000000000000012e-08;
// 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|): 1.9079086931087787e-23
+// max(|f - f_GSL| / |f_GSL|): 9.7017504401032555e-10
+// mean(f - f_GSL): -1.9079087043730904e-24
+// variance(f - f_GSL): 4.4939699064476602e-49
+// stddev(f - f_GSL): 6.7037078594220229e-25
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.0939382296458962e-38, 80.000000000000000, 50.000000000000000, 0.0 },
+ { 1.2902663809722593e-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 = 5.0000000000000024e-08;
// 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|): 4.3336941575312027e-25
+// max(|f - f_GSL| / |f_GSL|): 6.7515828260787790e-11
+// mean(f - f_GSL): -4.3336941085471556e-26
+// variance(f - f_GSL): 2.3186302007970768e-52
+// stddev(f - f_GSL): 1.5227048961624432e-26
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.0442781609881063e-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.4416737907558032e-55, 90.000000000000000, 90.000000000000000, 0.0 },
+ { 3.0238531916564246e-58, 90.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler009 = 2.5000000000000015e-12;
+const double toler009 = 5.0000000000000026e-09;
// 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|): 8.1625173357209578e-25
+// max(|f - f_GSL| / |f_GSL|): 3.4800251995234896e-10
+// mean(f - f_GSL): 8.1625173533399292e-26
+// variance(f - f_GSL): 8.2255172276019113e-52
+// stddev(f - f_GSL): 2.8680162530226204e-26
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.9797337118812366e-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.0238531916564246e-58, 100.00000000000000, 90.000000000000000, 0.0 },
+ { 2.2087606931991853e-61, 100.00000000000000, 100.00000000000000, 0.0 },
};
-const double toler010 = 5.0000000000000039e-13;
+const double toler010 = 2.5000000000000012e-08;
-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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc b/libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc
index f9e99528d44..2fb0cb2ae93 100644
--- a/libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/04_comp_ellint_1/check_value.cc
@@ -39,53 +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_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 2.7985267365680201e-16
+// mean(f - f_GSL): -1.5192525600133721e-16
+// variance(f - f_GSL): 5.0056658723514899e-33
+// stddev(f - f_GSL): 7.0750730542881954e-17
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.9953027776647296, -0.80000000000000004, 0.0 },
+ { 1.8456939983747236, -0.69999999999999996, 0.0 },
+ { 1.7507538029157526, -0.59999999999999998, 0.0 },
+ { 1.6857503548125963, -0.50000000000000000, 0.0 },
+ { 1.6399998658645112, -0.39999999999999991, 0.0 },
+ { 1.6080486199305128, -0.29999999999999993, 0.0 },
+ { 1.5868678474541660, -0.19999999999999996, 0.0 },
+ { 1.5747455615173562, -0.099999999999999978, 0.0 },
+ { 1.5707963267948966, 0.0000000000000000, 0.0 },
+ { 1.5747455615173562, 0.10000000000000009, 0.0 },
+ { 1.5868678474541660, 0.20000000000000018, 0.0 },
+ { 1.6080486199305128, 0.30000000000000004, 0.0 },
+ { 1.6399998658645112, 0.40000000000000013, 0.0 },
+ { 1.6857503548125963, 0.50000000000000000, 0.0 },
+ { 1.7507538029157526, 0.60000000000000009, 0.0 },
+ { 1.8456939983747238, 0.70000000000000018, 0.0 },
+ { 1.9953027776647296, 0.80000000000000004, 0.0 },
+ { 2.2805491384227712, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc b/libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc
index eda301254d0..eaee4d497c6 100644
--- a/libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/05_comp_ellint_2/check_value.cc
@@ -41,51 +41,54 @@
// Test data.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 4.4233707954398090e-16
+// mean(f - f_GSL): 8.1805907077643109e-17
+// variance(f - f_GSL): 1.6218357426418829e-32
+// stddev(f - f_GSL): 1.2735131497718752e-16
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.1716970527816140, -0.90000000000000002, 0.0 },
+ { 1.2763499431699064, -0.80000000000000004, 0.0 },
+ { 1.3556611355719554, -0.69999999999999996, 0.0 },
+ { 1.4180833944487241, -0.59999999999999998, 0.0 },
+ { 1.4674622093394274, -0.50000000000000000, 0.0 },
+ { 1.5059416123600404, -0.39999999999999991, 0.0 },
+ { 1.5348334649232491, -0.29999999999999993, 0.0 },
+ { 1.5549685462425291, -0.19999999999999996, 0.0 },
+ { 1.5668619420216685, -0.099999999999999978, 0.0 },
+ { 1.5707963267948966, 0.0000000000000000, 0.0 },
+ { 1.5668619420216685, 0.10000000000000009, 0.0 },
+ { 1.5549685462425289, 0.20000000000000018, 0.0 },
+ { 1.5348334649232491, 0.30000000000000004, 0.0 },
+ { 1.5059416123600402, 0.40000000000000013, 0.0 },
+ { 1.4674622093394274, 0.50000000000000000, 0.0 },
+ { 1.4180833944487241, 0.60000000000000009, 0.0 },
+ { 1.3556611355719554, 0.70000000000000018, 0.0 },
+ { 1.2763499431699064, 0.80000000000000004, 0.0 },
+ { 1.1716970527816144, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc b/libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc
index 6ac640fbe07..c07175bcb4d 100644
--- a/libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/06_comp_ellint_3/check_value.cc
@@ -39,386 +39,443 @@
// 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_GSL|): 2.2204460492503131e-16
+// max(|f - f_GSL| / |f_GSL|): 1.4291876864020436e-16
+// mean(f - f_GSL): -4.4408920985006264e-17
+// variance(f - f_GSL): 3.8956094084988237e-33
+// stddev(f - f_GSL): 6.2414817219141354e-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.1537868513875287, -0.90000000000000002, 0.10000000000000001, 0.0 },
+ { 2.0443194576468890, -0.90000000000000002, 0.20000000000000001, 0.0 },
+ { 1.9486280260314426, -0.90000000000000002, 0.30000000000000004, 0.0 },
+ { 1.8641114227238349, -0.90000000000000002, 0.40000000000000002, 0.0 },
+ { 1.7888013241937861, -0.90000000000000002, 0.50000000000000000, 0.0 },
+ { 1.7211781128919523, -0.90000000000000002, 0.60000000000000009, 0.0 },
+ { 1.6600480747670936, -0.90000000000000002, 0.70000000000000007, 0.0 },
+ { 1.6044591960982202, -0.90000000000000002, 0.80000000000000004, 0.0 },
+ { 1.5536420236310946, -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
+// mean(f - f_GSL): -4.4408920985006264e-17
+// variance(f - f_GSL): 3.8956094084988237e-33
+// stddev(f - f_GSL): 6.2414817219141354e-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.9953027776647296, -0.80000000000000004, 0.0000000000000000, 0.0 },
+ { 1.8910755418379521, -0.80000000000000004, 0.10000000000000001, 0.0 },
+ { 1.8007226661734588, -0.80000000000000004, 0.20000000000000001, 0.0 },
+ { 1.7214611048717301, -0.80000000000000004, 0.30000000000000004, 0.0 },
+ { 1.6512267838651289, -0.80000000000000004, 0.40000000000000002, 0.0 },
+ { 1.5884528947755532, -0.80000000000000004, 0.50000000000000000, 0.0 },
+ { 1.5319262547427863, -0.80000000000000004, 0.60000000000000009, 0.0 },
+ { 1.4806912324625330, -0.80000000000000004, 0.70000000000000007, 0.0 },
+ { 1.4339837018309471, -0.80000000000000004, 0.80000000000000004, 0.0 },
+ { 1.3911845406776222, -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
+// mean(f - f_GSL): 2.6645352591003756e-16
+// variance(f - f_GSL): 8.7651211691223537e-33
+// stddev(f - f_GSL): 9.3622225828712025e-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.8456939983747236, -0.69999999999999996, 0.0000000000000000, 0.0 },
+ { 1.7528050171757608, -0.69999999999999996, 0.10000000000000001, 0.0 },
+ { 1.6721098780092145, -0.69999999999999996, 0.20000000000000001, 0.0 },
+ { 1.6011813647733213, -0.69999999999999996, 0.30000000000000004, 0.0 },
+ { 1.5382162002954762, -0.69999999999999996, 0.40000000000000002, 0.0 },
+ { 1.4818433192178544, -0.69999999999999996, 0.50000000000000000, 0.0 },
+ { 1.4309994736080538, -0.69999999999999996, 0.60000000000000009, 0.0 },
+ { 1.3848459188329196, -0.69999999999999996, 0.70000000000000007, 0.0 },
+ { 1.3427110650397531, -0.69999999999999996, 0.80000000000000004, 0.0 },
+ { 1.3040500499695913, -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
+// mean(f - f_GSL): -4.2188474935755947e-16
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 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.6648615773343014, -0.59999999999999998, 0.10000000000000001, 0.0 },
+ { 1.5901418016279374, -0.59999999999999998, 0.20000000000000001, 0.0 },
+ { 1.5243814243493585, -0.59999999999999998, 0.30000000000000004, 0.0 },
+ { 1.4659345278069984, -0.59999999999999998, 0.40000000000000002, 0.0 },
+ { 1.4135484285693078, -0.59999999999999998, 0.50000000000000000, 0.0 },
+ { 1.3662507535812816, -0.59999999999999998, 0.60000000000000009, 0.0 },
+ { 1.3232737468822811, -0.59999999999999998, 0.70000000000000007, 0.0 },
+ { 1.2840021261752192, -0.59999999999999998, 0.80000000000000004, 0.0 },
+ { 1.2479362973851875, -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
+// mean(f - f_GSL): 6.6613381477509390e-17
+// variance(f - f_GSL): 5.4782007307014711e-34
+// stddev(f - f_GSL): 2.3405556457178006e-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.6857503548125963, -0.50000000000000000, 0.0000000000000000, 0.0 },
+ { 1.6045524936084892, -0.50000000000000000, 0.10000000000000001, 0.0 },
+ { 1.5338490483665983, -0.50000000000000000, 0.20000000000000001, 0.0 },
+ { 1.4715681939859637, -0.50000000000000000, 0.30000000000000004, 0.0 },
+ { 1.4161679518465340, -0.50000000000000000, 0.40000000000000002, 0.0 },
+ { 1.3664739530045971, -0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 1.3215740290190874, -0.50000000000000000, 0.60000000000000009, 0.0 },
+ { 1.2807475181182499, -0.50000000000000000, 0.70000000000000007, 0.0 },
+ { 1.2434165408189539, -0.50000000000000000, 0.80000000000000004, 0.0 },
+ { 1.2091116095504744, -0.50000000000000000, 0.90000000000000002, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002.
+// Test data for k=-0.39999999999999991.
// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.1925080711125793e-16
+// max(|f - f_GSL| / |f_GSL|): 6.8853630717730769e-16
+// mean(f - f_GSL): 7.1054273576010023e-16
+// variance(f - f_GSL): 2.4347558803117648e-34
+// stddev(f - f_GSL): 1.5603704304785339e-17
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.5620566886683604, -0.39999999999999991, 0.10000000000000001, 0.0 },
+ { 1.4941414344266770, -0.39999999999999991, 0.20000000000000001, 0.0 },
+ { 1.4342789859950078, -0.39999999999999991, 0.30000000000000004, 0.0 },
+ { 1.3809986210732901, -0.39999999999999991, 0.40000000000000002, 0.0 },
+ { 1.3331797176377398, -0.39999999999999991, 0.50000000000000000, 0.0 },
+ { 1.2899514672527022, -0.39999999999999991, 0.60000000000000009, 0.0 },
+ { 1.2506255923253344, -0.39999999999999991, 0.70000000000000007, 0.0 },
+ { 1.2146499565727209, -0.39999999999999991, 0.80000000000000004, 0.0 },
+ { 1.1815758115929846, -0.39999999999999991, 0.90000000000000002, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004.
+// Test data for k=-0.29999999999999993.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.8209844149902043e-16
+// mean(f - f_GSL): 4.4408920985006262e-16
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
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.5323534693557528, -0.29999999999999993, 0.10000000000000001, 0.0 },
+ { 1.4663658145259877, -0.29999999999999993, 0.20000000000000001, 0.0 },
+ { 1.4081767433479091, -0.29999999999999993, 0.30000000000000004, 0.0 },
+ { 1.3563643538969763, -0.29999999999999993, 0.40000000000000002, 0.0 },
+ { 1.3098448759814962, -0.29999999999999993, 0.50000000000000000, 0.0 },
+ { 1.2677758800420669, -0.29999999999999993, 0.60000000000000009, 0.0 },
+ { 1.2294913236274980, -0.29999999999999993, 0.70000000000000007, 0.0 },
+ { 1.1944567571590048, -0.29999999999999993, 0.80000000000000004, 0.0 },
+ { 1.1622376896064914, -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
+// mean(f - f_GSL): 4.4408920985006262e-16
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
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.5868678474541660, -0.19999999999999996, 0.0000000000000000, 0.0 },
+ { 1.5126513474261087, -0.19999999999999996, 0.10000000000000001, 0.0 },
+ { 1.4479323932249564, -0.19999999999999996, 0.20000000000000001, 0.0 },
+ { 1.3908453514752477, -0.19999999999999996, 0.30000000000000004, 0.0 },
+ { 1.3400002519661005, -0.19999999999999996, 0.40000000000000002, 0.0 },
+ { 1.2943374404397372, -0.19999999999999996, 0.50000000000000000, 0.0 },
+ { 1.2530330675914554, -0.19999999999999996, 0.60000000000000009, 0.0 },
+ { 1.2154356555075863, -0.19999999999999996, 0.70000000000000007, 0.0 },
+ { 1.1810223448909909, -0.19999999999999996, 0.80000000000000004, 0.0 },
+ { 1.1493679916141861, -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
+// mean(f - f_GSL): -4.2188474935755947e-16
+// variance(f - f_GSL): 6.0868897007794120e-35
+// stddev(f - f_GSL): 7.8018521523926693e-18
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.5747455615173562, -0.099999999999999978, 0.0000000000000000, 0.0 },
+ { 1.5013711111199950, -0.099999999999999978, 0.10000000000000001, 0.0 },
+ { 1.4373749386463430, -0.099999999999999978, 0.20000000000000001, 0.0 },
+ { 1.3809159606704959, -0.099999999999999978, 0.30000000000000004, 0.0 },
+ { 1.3306223265207477, -0.099999999999999978, 0.40000000000000002, 0.0 },
+ { 1.2854480708580160, -0.099999999999999978, 0.50000000000000000, 0.0 },
+ { 1.2445798942989252, -0.099999999999999978, 0.60000000000000009, 0.0 },
+ { 1.2073745911083185, -0.099999999999999978, 0.70000000000000007, 0.0 },
+ { 1.1733158866987732, -0.099999999999999978, 0.80000000000000004, 0.0 },
+ { 1.1419839485283374, -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_GSL| / |f_GSL|): 1.8430826426022675e-16
+// mean(f - f_GSL): 4.4408920985006264e-17
+// variance(f - f_GSL): 2.4347558803117648e-34
+// stddev(f - f_GSL): 1.5603704304785339e-17
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.4976955329233277, 0.0000000000000000, 0.10000000000000001, 0.0 },
+ { 1.4339343023863691, 0.0000000000000000, 0.20000000000000001, 0.0 },
+ { 1.3776795151134889, 0.0000000000000000, 0.30000000000000004, 0.0 },
+ { 1.3275651989026320, 0.0000000000000000, 0.40000000000000002, 0.0 },
+ { 1.2825498301618641, 0.0000000000000000, 0.50000000000000000, 0.0 },
+ { 1.2418235332245127, 0.0000000000000000, 0.60000000000000009, 0.0 },
+ { 1.2047457872617380, 0.0000000000000000, 0.70000000000000007, 0.0 },
+ { 1.1708024551734544, 0.0000000000000000, 0.80000000000000004, 0.0 },
+ { 1.1395754288497419, 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
+// mean(f - f_GSL): -4.2188474935755947e-16
+// variance(f - f_GSL): 6.0868897007794120e-35
+// stddev(f - f_GSL): 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.5747455615173562, 0.10000000000000009, 0.0000000000000000, 0.0 },
+ { 1.5013711111199950, 0.10000000000000009, 0.10000000000000001, 0.0 },
+ { 1.4373749386463430, 0.10000000000000009, 0.20000000000000001, 0.0 },
+ { 1.3809159606704959, 0.10000000000000009, 0.30000000000000004, 0.0 },
+ { 1.3306223265207477, 0.10000000000000009, 0.40000000000000002, 0.0 },
+ { 1.2854480708580160, 0.10000000000000009, 0.50000000000000000, 0.0 },
+ { 1.2445798942989252, 0.10000000000000009, 0.60000000000000009, 0.0 },
+ { 1.2073745911083185, 0.10000000000000009, 0.70000000000000007, 0.0 },
+ { 1.1733158866987732, 0.10000000000000009, 0.80000000000000004, 0.0 },
+ { 1.1419839485283374, 0.10000000000000009, 0.90000000000000002, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996.
+// Test data for k=0.20000000000000018.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.8637687241174905e-16
+// mean(f - f_GSL): 4.4408920985006262e-16
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
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.5868678474541660, 0.20000000000000018, 0.0000000000000000, 0.0 },
+ { 1.5126513474261087, 0.20000000000000018, 0.10000000000000001, 0.0 },
+ { 1.4479323932249564, 0.20000000000000018, 0.20000000000000001, 0.0 },
+ { 1.3908453514752477, 0.20000000000000018, 0.30000000000000004, 0.0 },
+ { 1.3400002519661005, 0.20000000000000018, 0.40000000000000002, 0.0 },
+ { 1.2943374404397372, 0.20000000000000018, 0.50000000000000000, 0.0 },
+ { 1.2530330675914554, 0.20000000000000018, 0.60000000000000009, 0.0 },
+ { 1.2154356555075863, 0.20000000000000018, 0.70000000000000007, 0.0 },
+ { 1.1810223448909909, 0.20000000000000018, 0.80000000000000004, 0.0 },
+ { 1.1493679916141861, 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
+// mean(f - f_GSL): 4.4408920985006262e-16
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
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.5323534693557528, 0.30000000000000004, 0.10000000000000001, 0.0 },
+ { 1.4663658145259877, 0.30000000000000004, 0.20000000000000001, 0.0 },
+ { 1.4081767433479091, 0.30000000000000004, 0.30000000000000004, 0.0 },
+ { 1.3563643538969763, 0.30000000000000004, 0.40000000000000002, 0.0 },
+ { 1.3098448759814962, 0.30000000000000004, 0.50000000000000000, 0.0 },
+ { 1.2677758800420669, 0.30000000000000004, 0.60000000000000009, 0.0 },
+ { 1.2294913236274980, 0.30000000000000004, 0.70000000000000007, 0.0 },
+ { 1.1944567571590048, 0.30000000000000004, 0.80000000000000004, 0.0 },
+ { 1.1622376896064914, 0.30000000000000004, 0.90000000000000002, 0.0 },
};
const double toler013 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991.
+// Test data for k=0.40000000000000013.
// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.1925080711125793e-16
+// max(|f - f_GSL| / |f_GSL|): 7.1018730557776478e-16
+// mean(f - f_GSL): 7.1054273576010023e-16
+// variance(f - f_GSL): 2.4347558803117648e-34
+// stddev(f - f_GSL): 1.5603704304785339e-17
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.5620566886683604, 0.40000000000000013, 0.10000000000000001, 0.0 },
+ { 1.4941414344266770, 0.40000000000000013, 0.20000000000000001, 0.0 },
+ { 1.4342789859950078, 0.40000000000000013, 0.30000000000000004, 0.0 },
+ { 1.3809986210732901, 0.40000000000000013, 0.40000000000000002, 0.0 },
+ { 1.3331797176377398, 0.40000000000000013, 0.50000000000000000, 0.0 },
+ { 1.2899514672527022, 0.40000000000000013, 0.60000000000000009, 0.0 },
+ { 1.2506255923253342, 0.40000000000000013, 0.70000000000000007, 0.0 },
+ { 1.2146499565727209, 0.40000000000000013, 0.80000000000000004, 0.0 },
+ { 1.1815758115929846, 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
+// mean(f - f_GSL): 6.6613381477509390e-17
+// variance(f - f_GSL): 5.4782007307014711e-34
+// stddev(f - f_GSL): 2.3405556457178006e-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.6857503548125963, 0.50000000000000000, 0.0000000000000000, 0.0 },
+ { 1.6045524936084892, 0.50000000000000000, 0.10000000000000001, 0.0 },
+ { 1.5338490483665983, 0.50000000000000000, 0.20000000000000001, 0.0 },
+ { 1.4715681939859637, 0.50000000000000000, 0.30000000000000004, 0.0 },
+ { 1.4161679518465340, 0.50000000000000000, 0.40000000000000002, 0.0 },
+ { 1.3664739530045971, 0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 1.3215740290190874, 0.50000000000000000, 0.60000000000000009, 0.0 },
+ { 1.2807475181182499, 0.50000000000000000, 0.70000000000000007, 0.0 },
+ { 1.2434165408189539, 0.50000000000000000, 0.80000000000000004, 0.0 },
+ { 1.2091116095504744, 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
+// mean(f - f_GSL): -4.4408920985006262e-16
+// variance(f - f_GSL): 6.0868897007794117e-33
+// stddev(f - f_GSL): 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.6648615773343014, 0.60000000000000009, 0.10000000000000001, 0.0 },
+ { 1.5901418016279374, 0.60000000000000009, 0.20000000000000001, 0.0 },
+ { 1.5243814243493585, 0.60000000000000009, 0.30000000000000004, 0.0 },
+ { 1.4659345278069984, 0.60000000000000009, 0.40000000000000002, 0.0 },
+ { 1.4135484285693078, 0.60000000000000009, 0.50000000000000000, 0.0 },
+ { 1.3662507535812813, 0.60000000000000009, 0.60000000000000009, 0.0 },
+ { 1.3232737468822811, 0.60000000000000009, 0.70000000000000007, 0.0 },
+ { 1.2840021261752192, 0.60000000000000009, 0.80000000000000004, 0.0 },
+ { 1.2479362973851873, 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_GSL|): 2.2204460492503131e-16
+// max(|f - f_GSL| / |f_GSL|): 1.7027306960358546e-16
+// mean(f - f_GSL): 1.7763568394002506e-16
+// variance(f - f_GSL): 2.4347558803117648e-34
+// stddev(f - f_GSL): 1.5603704304785339e-17
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.7528050171757610, 0.70000000000000018, 0.10000000000000001, 0.0 },
+ { 1.6721098780092147, 0.70000000000000018, 0.20000000000000001, 0.0 },
+ { 1.6011813647733215, 0.70000000000000018, 0.30000000000000004, 0.0 },
+ { 1.5382162002954765, 0.70000000000000018, 0.40000000000000002, 0.0 },
+ { 1.4818433192178546, 0.70000000000000018, 0.50000000000000000, 0.0 },
+ { 1.4309994736080540, 0.70000000000000018, 0.60000000000000009, 0.0 },
+ { 1.3848459188329199, 0.70000000000000018, 0.70000000000000007, 0.0 },
+ { 1.3427110650397536, 0.70000000000000018, 0.80000000000000004, 0.0 },
+ { 1.3040500499695913, 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
+// mean(f - f_GSL): -4.4408920985006264e-17
+// variance(f - f_GSL): 3.8956094084988237e-33
+// stddev(f - f_GSL): 6.2414817219141354e-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.9953027776647296, 0.80000000000000004, 0.0000000000000000, 0.0 },
+ { 1.8910755418379521, 0.80000000000000004, 0.10000000000000001, 0.0 },
+ { 1.8007226661734588, 0.80000000000000004, 0.20000000000000001, 0.0 },
+ { 1.7214611048717301, 0.80000000000000004, 0.30000000000000004, 0.0 },
+ { 1.6512267838651289, 0.80000000000000004, 0.40000000000000002, 0.0 },
+ { 1.5884528947755532, 0.80000000000000004, 0.50000000000000000, 0.0 },
+ { 1.5319262547427863, 0.80000000000000004, 0.60000000000000009, 0.0 },
+ { 1.4806912324625330, 0.80000000000000004, 0.70000000000000007, 0.0 },
+ { 1.4339837018309471, 0.80000000000000004, 0.80000000000000004, 0.0 },
+ { 1.3911845406776222, 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_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.5356871764643691e-16
+// mean(f - f_GSL): -5.5511151231257827e-16
+// variance(f - f_GSL): 1.5217224251948529e-33
+// stddev(f - f_GSL): 3.9009260761963345e-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.2805491384227712, 0.90000000000000013, 0.0000000000000000, 0.0 },
+ { 2.1537868513875296, 0.90000000000000013, 0.10000000000000001, 0.0 },
+ { 2.0443194576468899, 0.90000000000000013, 0.20000000000000001, 0.0 },
+ { 1.9486280260314432, 0.90000000000000013, 0.30000000000000004, 0.0 },
+ { 1.8641114227238358, 0.90000000000000013, 0.40000000000000002, 0.0 },
+ { 1.7888013241937870, 0.90000000000000013, 0.50000000000000000, 0.0 },
+ { 1.7211781128919528, 0.90000000000000013, 0.60000000000000009, 0.0 },
+ { 1.6600480747670945, 0.90000000000000013, 0.70000000000000007, 0.0 },
+ { 1.6044591960982211, 0.90000000000000013, 0.80000000000000004, 0.0 },
+ { 1.5536420236310955, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::comp_ellint_3(data[i].k, data[i].nu);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f = std::comp_ellint_3(data[i].k, data[i].nu);
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc b/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc
index 923122118ec..8efcbd5d869 100644
--- a/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/check_value.cc
@@ -38,627 +38,891 @@
#include <specfun_testcase.h>
-// Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 2.8421709430404007e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3916073135966565e-15
+// Divergence at nu=-5.0000000000000000 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Divergence at nu=-5.0000000000000000 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Test data for nu=-5.0000000000000000.
+// max(|f - f_Boost|): 1.5268514955987655e-10
+// max(|f - f_Boost| / |f_Boost|): 0.00059882126574454153
+// mean(f - f_Boost): 7.9112750802374089e-12
+// variance(f - f_Boost): 3.4686623291699825e-24
+// stddev(f - f_Boost): 1.8624345167468256e-12
const testcase_cyl_bessel_i<double>
-data001[21] =
+data001[20] =
{
- { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
- { 1.0156861412236078, 0.0000000000000000, 0.25000000000000000 },
- { 1.0634833707413236, 0.0000000000000000, 0.50000000000000000 },
- { 1.1456467780440014, 0.0000000000000000, 0.75000000000000000 },
- { 1.2660658777520082, 0.0000000000000000, 1.0000000000000000 },
- { 1.4304687177218294, 0.0000000000000000, 1.2500000000000000 },
- { 1.6467231897728904, 0.0000000000000000, 1.5000000000000000 },
- { 1.9252521538585023, 0.0000000000000000, 1.7500000000000000 },
- { 2.2795853023360668, 0.0000000000000000, 2.0000000000000000 },
- { 2.7270783071907951, 0.0000000000000000, 2.2500000000000000 },
- { 3.2898391440501231, 0.0000000000000000, 2.5000000000000000 },
- { 3.9959131072376550, 0.0000000000000000, 2.7500000000000000 },
- { 4.8807925858650245, 0.0000000000000000, 3.0000000000000000 },
- { 5.9893359979395138, 0.0000000000000000, 3.2500000000000000 },
- { 7.3782034322254750, 0.0000000000000000, 3.5000000000000000 },
- { 9.1189458608445655, 0.0000000000000000, 3.7500000000000000 },
- { 11.301921952136325, 0.0000000000000000, 4.0000000000000000 },
- { 14.041263683000595, 0.0000000000000000, 4.2500000000000000 },
- { 17.481171855609272, 0.0000000000000000, 4.5000000000000000 },
- { 21.803898740902120, 0.0000000000000000, 4.7500000000000000 },
- { 27.239871823604439, 0.0000000000000000, 5.0000000000000000 },
+ { 2.5497616449882790e-07, -5.0000000000000000, 0.25000000000000000, 0.0 },
+ { 8.2231713131092646e-06, -5.0000000000000000, 0.50000000000000000, 0.0 },
+ { 6.3261122739811739e-05, -5.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.00027146315595697189, -5.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.00084793613616686813, -5.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.0021705595690975558, -5.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.0048504513371845385, -5.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.0098256793231317023, -5.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.018486577941045832, -5.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.032843475172023212, -5.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.055750882754221930, -5.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.091206477661513352, -5.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.14474880546308086, -5.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.22398495470190782, -5.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.33928899170999877, -5.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.50472436311316637, -5.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.73925961816682939, -5.0000000000000000, 4.2500000000000000, 0.0 },
+ { 1.0683677743764701, -5.0000000000000000, 4.5000000000000000, 0.0 },
+ { 1.5261268693599628, -5.0000000000000000, 4.7500000000000000, 0.0 },
+ { 2.1579745473225467, -5.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler001 = 2.5000000000000020e-13;
+const double toler001 = 0.050000000000000003;
-// Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 1.0658141036401503e-14
-// max(|f - f_GSL| / |f_GSL|): 1.1056193696204194e-15
+// Divergence at nu=-2.0000000000000000 x=0.0000000000000000 f=-inf f_Boost=0.0000000000000000
+// Divergence at nu=-2.0000000000000000 x=0.0000000000000000 f=-inf f_Boost=0.0000000000000000
+// Test data for nu=-2.0000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-15
+// max(|f - f_Boost| / |f_Boost|): 6.2578668762115046e-13
+// mean(f - f_Boost): -1.4655811286790055e-15
+// variance(f - f_Boost): 1.7622086141764911e-30
+// stddev(f - f_Boost): 1.3274820579489921e-15
const testcase_cyl_bessel_i<double>
-data002[21] =
+data002[20] =
{
- { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
- { 0.56650686557808660, 0.33333333333333331, 0.25000000000000000 },
- { 0.73897315642511863, 0.33333333333333331, 0.50000000000000000 },
- { 0.89532320365836804, 0.33333333333333331, 0.75000000000000000 },
- { 1.0646313978895285, 0.33333333333333331, 1.0000000000000000 },
- { 1.2623776732605250, 0.33333333333333331, 1.2500000000000000 },
- { 1.5014290000224382, 0.33333333333333331, 1.5000000000000000 },
- { 1.7951195525946044, 0.33333333333333331, 1.7500000000000000 },
- { 2.1587825813728614, 0.33333333333333331, 2.0000000000000000 },
- { 2.6109134564811405, 0.33333333333333331, 2.2500000000000000 },
- { 3.1743242297241938, 0.33333333333333331, 2.5000000000000000 },
- { 3.8774551722182107, 0.33333333333333331, 2.7500000000000000 },
- { 4.7559569371646946, 0.33333333333333331, 3.0000000000000000 },
- { 5.8546499652731825, 0.33333333333333331, 3.2500000000000000 },
- { 7.2299798619171147, 0.33333333333333331, 3.5000000000000000 },
- { 8.9531114355506318, 0.33333333333333331, 3.7500000000000000 },
- { 11.113838389991479, 0.33333333333333331, 4.0000000000000000 },
- { 13.825531136529117, 0.33333333333333331, 4.2500000000000000 },
- { 17.231403968478318, 0.33333333333333331, 4.5000000000000000 },
- { 21.512458099556554, 0.33333333333333331, 4.7500000000000000 },
- { 26.897553069268362, 0.33333333333333331, 5.0000000000000000 },
+ { 0.0078532696598645167, -2.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.031906149177738256, -2.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.073666880494875450, -2.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.13574766976703828, -2.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.22201844837663418, -2.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.33783461833568074, -2.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.49035213986973325, -2.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.68894844769873820, -2.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.94577390103115710, -2.0000000000000000, 2.2500000000000000, 0.0 },
+ { 1.2764661478191643, -2.0000000000000000, 2.5000000000000000, 0.0 },
+ { 1.7010693700601991, -2.0000000000000000, 2.7500000000000000, 0.0 },
+ { 2.2452124409299512, -2.0000000000000000, 3.0000000000000000, 0.0 },
+ { 2.9416152804573352, -2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 3.8320120480778423, -2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 4.9696044049382113, -2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 6.4221893752841055, -2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 8.2761461924550552, -2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 10.641517298393310, -2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 13.658483394577809, -2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 17.505614966624236, -2.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler002 = 2.5000000000000020e-13;
+const double toler002 = 5.0000000000000028e-11;
-// Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 1.4210854715202004e-14
-// max(|f - f_GSL| / |f_GSL|): 1.2805693909168510e-15
+// Test data for nu=-1.0000000000000000.
+// max(|f - f_Boost|): 1.5987211554602254e-14
+// max(|f - f_Boost| / |f_Boost|): 1.3049853164470476e-15
+// mean(f - f_Boost): -1.7234890763228620e-15
+// variance(f - f_Boost): 1.5206761323330726e-30
+// stddev(f - f_Boost): 1.2331569779768805e-15
const testcase_cyl_bessel_i<double>
data003[21] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
- { 0.40311093489975897, 0.50000000000000000, 0.25000000000000000 },
- { 0.58799308679041573, 0.50000000000000000, 0.50000000000000000 },
- { 0.75761498638991298, 0.50000000000000000, 0.75000000000000000 },
- { 0.93767488824548695, 0.50000000000000000, 1.0000000000000000 },
- { 1.1432089853159872, 0.50000000000000000, 1.2500000000000000 },
- { 1.3871617204034761, 0.50000000000000000, 1.5000000000000000 },
- { 1.6830217804556815, 0.50000000000000000, 1.7500000000000000 },
- { 2.0462368630890526, 0.50000000000000000, 2.0000000000000000 },
- { 2.4953405089360041, 0.50000000000000000, 2.2500000000000000 },
- { 3.0530935381967175, 0.50000000000000000, 2.5000000000000000 },
- { 3.7477882494879449, 0.50000000000000000, 2.7500000000000000 },
- { 4.6148229034075969, 0.50000000000000000, 3.0000000000000000 },
- { 5.6986505325335495, 0.50000000000000000, 3.2500000000000000 },
- { 7.0552194086911877, 0.50000000000000000, 3.5000000000000000 },
- { 8.7550467841188944, 0.50000000000000000, 3.7500000000000000 },
- { 10.887101798588422, 0.50000000000000000, 4.0000000000000000 },
- { 13.563718712579764, 0.50000000000000000, 4.2500000000000000 },
- { 16.926820080158183, 0.50000000000000000, 4.5000000000000000 },
- { 21.155804306570005, 0.50000000000000000, 4.7500000000000000 },
- { 26.477547497559065, 0.50000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, -1.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.12597910894546793, -1.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.25789430539089631, -1.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.40199246158092222, -1.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.56515910399248503, -1.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.75528141834074725, -1.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.98166642857790753, -1.0000000000000000, 1.5000000000000000, 0.0 },
+ { 1.2555375122401731, -1.0000000000000000, 1.7500000000000000, 0.0 },
+ { 1.5906368546373291, -1.0000000000000000, 2.0000000000000000, 0.0 },
+ { 2.0039674569295931, -1.0000000000000000, 2.2500000000000000, 0.0 },
+ { 2.5167162452886984, -1.0000000000000000, 2.5000000000000000, 0.0 },
+ { 3.1554101386190032, -1.0000000000000000, 2.7500000000000000, 0.0 },
+ { 3.9533702174026093, -1.0000000000000000, 3.0000000000000000, 0.0 },
+ { 4.9525461659085481, -1.0000000000000000, 3.2500000000000000, 0.0 },
+ { 6.2058349222583651, -1.0000000000000000, 3.5000000000000000, 0.0 },
+ { 7.7800152298244161, -1.0000000000000000, 3.7500000000000000, 0.0 },
+ { 9.7594651537044506, -1.0000000000000000, 4.0000000000000000, 0.0 },
+ { 12.250874667409308, -1.0000000000000000, 4.2500000000000000, 0.0 },
+ { 15.389222753735924, -1.0000000000000000, 4.5000000000000000, 0.0 },
+ { 19.345361447520226, -1.0000000000000000, 4.7500000000000000, 0.0 },
+ { 24.335642142450528, -1.0000000000000000, 5.0000000000000000, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
-// Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 1.2434497875801753e-14
-// max(|f - f_GSL| / |f_GSL|): 1.3900778397944649e-15
+// Divergence at nu=-0.66666666666666663 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Divergence at nu=-0.66666666666666663 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Test data for nu=-0.66666666666666663.
+// max(|f - f_Boost|): 1.0658141036401503e-14
+// max(|f - f_Boost| / |f_Boost|): 6.3909528633637202e-16
+// mean(f - f_Boost): -1.4543921622589550e-15
+// variance(f - f_Boost): 4.6930190215113691e-30
+// stddev(f - f_Boost): 2.1663376979389360e-15
const testcase_cyl_bessel_i<double>
-data004[21] =
+data004[20] =
{
- { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
- { 0.27953690613200438, 0.66666666666666663, 0.25000000000000000 },
- { 0.45628323113556879, 0.66666666666666663, 0.50000000000000000 },
- { 0.62594569838182612, 0.66666666666666663, 0.75000000000000000 },
- { 0.80752128860612948, 0.66666666666666663, 1.0000000000000000 },
- { 1.0139484513577168, 0.66666666666666663, 1.2500000000000000 },
- { 1.2572918396962991, 0.66666666666666663, 1.5000000000000000 },
- { 1.5505806938325577, 0.66666666666666663, 1.7500000000000000 },
- { 1.9089492968236206, 0.66666666666666663, 2.0000000000000000 },
- { 2.3506463490300331, 0.66666666666666663, 2.2500000000000000 },
- { 2.8981161894224892, 0.66666666666666663, 2.5000000000000000 },
- { 3.5792654911068720, 0.66666666666666663, 2.7500000000000000 },
- { 4.4290087213549505, 0.66666666666666663, 3.0000000000000000 },
- { 5.4911895720097688, 0.66666666666666663, 3.2500000000000000 },
- { 6.8209918044137305, 0.66666666666666663, 3.5000000000000000 },
- { 8.4879784249619767, 0.66666666666666663, 3.7500000000000000 },
- { 10.579932774013002, 0.66666666666666663, 4.0000000000000000 },
- { 13.207720355482458, 0.66666666666666663, 4.2500000000000000 },
- { 16.511448404200543, 0.66666666666666663, 4.5000000000000000 },
- { 20.668274532832392, 0.66666666666666663, 4.7500000000000000 },
- { 25.902310583215122, 0.66666666666666663, 5.0000000000000000 },
+ { 1.5635301197571894, -0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 1.1211475422053203, -0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 1.0369461345194857, -0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 1.0801396784096655, -0.66666666666666663, 1.0000000000000000, 0.0 },
+ { 1.2017475844106487, -0.66666666666666663, 1.2500000000000000, 0.0 },
+ { 1.3897433429553641, -0.66666666666666663, 1.5000000000000000, 0.0 },
+ { 1.6455069422807811, -0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 1.9777766048212930, -0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 2.4009911103527268, -0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 2.9351959919066104, -0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 3.6067269333835585, -0.66666666666666663, 2.7500000000000000, 0.0 },
+ { 4.4494393573039508, -0.66666666666666663, 3.0000000000000000, 0.0 },
+ { 5.5064472493750811, -0.66666666666666663, 3.2500000000000000, 0.0 },
+ { 6.8324230113293760, -0.66666666666666663, 3.5000000000000000, 0.0 },
+ { 8.4965664837172188, -0.66666666666666663, 3.7500000000000000, 0.0 },
+ { 10.586400303822455, -0.66666666666666663, 4.0000000000000000, 0.0 },
+ { 13.212601178849713, -0.66666666666666663, 4.2500000000000000, 0.0 },
+ { 16.515138624422015, -0.66666666666666663, 4.5000000000000000, 0.0 },
+ { 20.671069179975056, -0.66666666666666663, 4.7500000000000000, 0.0 },
+ { 25.904430125602399, -0.66666666666666663, 5.0000000000000000, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
-// Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 3.5527136788005009e-15
-// max(|f - f_GSL| / |f_GSL|): 2.2031887547040326e-16
+// Divergence at nu=-0.50000000000000000 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Divergence at nu=-0.50000000000000000 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Test data for nu=-0.50000000000000000.
+// max(|f - f_Boost|): 1.0658141036401503e-14
+// max(|f - f_Boost| / |f_Boost|): 7.4518593386874884e-16
+// mean(f - f_Boost): -2.9976021664879229e-16
+// variance(f - f_Boost): 4.9781821321512950e-33
+// stddev(f - f_Boost): 7.0556233829133023e-17
const testcase_cyl_bessel_i<double>
-data005[21] =
+data005[20] =
{
- { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
- { 0.12597910894546793, 1.0000000000000000, 0.25000000000000000 },
- { 0.25789430539089631, 1.0000000000000000, 0.50000000000000000 },
- { 0.40199246158092228, 1.0000000000000000, 0.75000000000000000 },
- { 0.56515910399248503, 1.0000000000000000, 1.0000000000000000 },
- { 0.75528141834074725, 1.0000000000000000, 1.2500000000000000 },
- { 0.98166642857790720, 1.0000000000000000, 1.5000000000000000 },
- { 1.2555375122401731, 1.0000000000000000, 1.7500000000000000 },
- { 1.5906368546373291, 1.0000000000000000, 2.0000000000000000 },
- { 2.0039674569295931, 1.0000000000000000, 2.2500000000000000 },
- { 2.5167162452886984, 1.0000000000000000, 2.5000000000000000 },
- { 3.1554101386190028, 1.0000000000000000, 2.7500000000000000 },
- { 3.9533702174026097, 1.0000000000000000, 3.0000000000000000 },
- { 4.9525461659085490, 1.0000000000000000, 3.2500000000000000 },
- { 6.2058349222583642, 1.0000000000000000, 3.5000000000000000 },
- { 7.7800152298244161, 1.0000000000000000, 3.7500000000000000 },
- { 9.7594651537044488, 1.0000000000000000, 4.0000000000000000 },
- { 12.250874667409304, 1.0000000000000000, 4.2500000000000000 },
- { 15.389222753735924, 1.0000000000000000, 4.5000000000000000 },
- { 19.345361447520226, 1.0000000000000000, 4.7500000000000000 },
- { 24.335642142450524, 1.0000000000000000, 5.0000000000000000 },
+ { 1.6458971764074704, -0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 1.2723896474148495, -0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 1.1928146673978171, -0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 1.2312002145929675, -0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 1.3476730323046746, -0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 1.5325243293765760, -0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 1.7878324979022524, -0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 2.1225916201776371, -0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 2.5514047849350114, -0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 3.0945158041163063, -0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 3.7785466600324913, -0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 4.6377577578615030, -0.50000000000000000, 3.0000000000000000, 0.0 },
+ { 5.7158114820930983, -0.50000000000000000, 3.2500000000000000, 0.0 },
+ { 7.0680982073190339, -0.50000000000000000, 3.5000000000000000, 0.0 },
+ { 8.7647367025337477, -0.50000000000000000, 3.7500000000000000, 0.0 },
+ { 10.894408681333701, -0.50000000000000000, 4.0000000000000000, 0.0 },
+ { 13.569239411315664, -0.50000000000000000, 4.2500000000000000, 0.0 },
+ { 16.930998466911880, -0.50000000000000000, 4.5000000000000000, 0.0 },
+ { 21.158971644981264, -0.50000000000000000, 4.7500000000000000, 0.0 },
+ { 26.479951764305952, -0.50000000000000000, 5.0000000000000000, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
-// Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 2.2089187702829171e-16
+// Divergence at nu=-0.33333333333333331 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Divergence at nu=-0.33333333333333331 x=0.0000000000000000 f=inf f_Boost=0.0000000000000000
+// Test data for nu=-0.33333333333333331.
+// max(|f - f_Boost|): 1.0658141036401503e-14
+// max(|f - f_Boost| / |f_Boost|): 1.0612745677890199e-15
+// mean(f - f_Boost): -6.6613381477509390e-17
+// variance(f - f_Boost): 6.7329059739586978e-31
+// stddev(f - f_Boost): 8.2054286749436181e-16
const testcase_cyl_bessel_i<double>
-data006[21] =
+data006[20] =
{
- { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
- { 0.0078532696598645167, 2.0000000000000000, 0.25000000000000000 },
- { 0.031906149177738249, 2.0000000000000000, 0.50000000000000000 },
- { 0.073666880494875436, 2.0000000000000000, 0.75000000000000000 },
- { 0.13574766976703831, 2.0000000000000000, 1.0000000000000000 },
- { 0.22201844837663415, 2.0000000000000000, 1.2500000000000000 },
- { 0.33783461833568068, 2.0000000000000000, 1.5000000000000000 },
- { 0.49035213986973319, 2.0000000000000000, 1.7500000000000000 },
- { 0.68894844769873831, 2.0000000000000000, 2.0000000000000000 },
- { 0.94577390103115722, 2.0000000000000000, 2.2500000000000000 },
- { 1.2764661478191643, 2.0000000000000000, 2.5000000000000000 },
- { 1.7010693700601991, 2.0000000000000000, 2.7500000000000000 },
- { 2.2452124409299512, 2.0000000000000000, 3.0000000000000000 },
- { 2.9416152804573357, 2.0000000000000000, 3.2500000000000000 },
- { 3.8320120480778415, 2.0000000000000000, 3.5000000000000000 },
- { 4.9696044049382113, 2.0000000000000000, 3.7500000000000000 },
- { 6.4221893752841046, 2.0000000000000000, 4.0000000000000000 },
- { 8.2761461924550552, 2.0000000000000000, 4.2500000000000000 },
- { 10.641517298393307, 2.0000000000000000, 4.5000000000000000 },
- { 13.658483394577813, 2.0000000000000000, 4.7500000000000000 },
- { 17.505614966624233, 2.0000000000000000, 5.0000000000000000 },
+ { 1.5117554361923495, -0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 1.2842545661273943, -0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 1.2493695272681207, -0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 1.3063508747439272, -0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 1.4321218744221786, -0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 1.6228082962163810, -0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 1.8830201956960131, -0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 2.2230371861512532, -0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 2.6582227735966377, -0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 3.2093570667114131, -0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 3.9035183383638015, -0.33333333333333331, 2.7500000000000000, 0.0 },
+ { 4.7754221027162744, -0.33333333333333331, 3.0000000000000000, 0.0 },
+ { 5.8692349229120637, -0.33333333333333331, 3.2500000000000000, 0.0 },
+ { 7.2409386602273953, -0.33333333333333331, 3.5000000000000000, 0.0 },
+ { 8.9613654981608502, -0.33333333333333331, 3.7500000000000000, 0.0 },
+ { 11.120068377605598, -0.33333333333333331, 4.0000000000000000, 0.0 },
+ { 13.830242129444379, -0.33333333333333331, 4.2500000000000000, 0.0 },
+ { 17.234972201133665, -0.33333333333333331, 4.5000000000000000, 0.0 },
+ { 21.515164757402577, -0.33333333333333331, 4.7500000000000000, 0.0 },
+ { 26.899608905856237, -0.33333333333333331, 5.0000000000000000, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
+// cyl_bessel_i
-// Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 1.6610041744866592e-15
+// Test data for nu=0.0000000000000000.
+// max(|f - f_GSL|): 5.2402526762307389e-14
+// max(|f - f_GSL| / |f_GSL|): 1.0747725055352992e-14
+// mean(f - f_GSL): -1.9296733523246767e-14
+// variance(f - f_GSL): 4.3714222285755038e-30
+// stddev(f - f_GSL): 2.0907946404598189e-15
const testcase_cyl_bessel_i<double>
data007[21] =
{
- { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
- { 2.5497616449882785e-07, 5.0000000000000000, 0.25000000000000000 },
- { 8.2231713131092646e-06, 5.0000000000000000, 0.50000000000000000 },
- { 6.3261122739811725e-05, 5.0000000000000000, 0.75000000000000000 },
- { 0.00027146315595697195, 5.0000000000000000, 1.0000000000000000 },
- { 0.00084793613616686856, 5.0000000000000000, 1.2500000000000000 },
- { 0.0021705595690975554, 5.0000000000000000, 1.5000000000000000 },
- { 0.0048504513371845394, 5.0000000000000000, 1.7500000000000000 },
- { 0.0098256793231317023, 5.0000000000000000, 2.0000000000000000 },
- { 0.018486577941045829, 5.0000000000000000, 2.2500000000000000 },
- { 0.032843475172023219, 5.0000000000000000, 2.5000000000000000 },
- { 0.055750882754221943, 5.0000000000000000, 2.7500000000000000 },
- { 0.091206477661513338, 5.0000000000000000, 3.0000000000000000 },
- { 0.14474880546308083, 5.0000000000000000, 3.2500000000000000 },
- { 0.22398495470190780, 5.0000000000000000, 3.5000000000000000 },
- { 0.33928899170999866, 5.0000000000000000, 3.7500000000000000 },
- { 0.50472436311316626, 5.0000000000000000, 4.0000000000000000 },
- { 0.73925961816682961, 5.0000000000000000, 4.2500000000000000 },
- { 1.0683677743764699, 5.0000000000000000, 4.5000000000000000 },
- { 1.5261268693599621, 5.0000000000000000, 4.7500000000000000 },
- { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000 },
+ { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+ { 1.0156861412236078, 0.0000000000000000, 0.25000000000000000, 0.0 },
+ { 1.0634833707413236, 0.0000000000000000, 0.50000000000000000, 0.0 },
+ { 1.1456467780440014, 0.0000000000000000, 0.75000000000000000, 0.0 },
+ { 1.2660658777520082, 0.0000000000000000, 1.0000000000000000, 0.0 },
+ { 1.4304687177218294, 0.0000000000000000, 1.2500000000000000, 0.0 },
+ { 1.6467231897728904, 0.0000000000000000, 1.5000000000000000, 0.0 },
+ { 1.9252521538585023, 0.0000000000000000, 1.7500000000000000, 0.0 },
+ { 2.2795853023360668, 0.0000000000000000, 2.0000000000000000, 0.0 },
+ { 2.7270783071907951, 0.0000000000000000, 2.2500000000000000, 0.0 },
+ { 3.2898391440501231, 0.0000000000000000, 2.5000000000000000, 0.0 },
+ { 3.9959131072376550, 0.0000000000000000, 2.7500000000000000, 0.0 },
+ { 4.8807925858650245, 0.0000000000000000, 3.0000000000000000, 0.0 },
+ { 5.9893359979395138, 0.0000000000000000, 3.2500000000000000, 0.0 },
+ { 7.3782034322254750, 0.0000000000000000, 3.5000000000000000, 0.0 },
+ { 9.1189458608445655, 0.0000000000000000, 3.7500000000000000, 0.0 },
+ { 11.301921952136325, 0.0000000000000000, 4.0000000000000000, 0.0 },
+ { 14.041263683000595, 0.0000000000000000, 4.2500000000000000, 0.0 },
+ { 17.481171855609272, 0.0000000000000000, 4.5000000000000000, 0.0 },
+ { 21.803898740902120, 0.0000000000000000, 4.7500000000000000, 0.0 },
+ { 27.239871823604439, 0.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler007 = 2.5000000000000020e-13;
+const double toler007 = 1.0000000000000008e-12;
-// Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 9.5409791178724390e-18
-// max(|f - f_GSL| / |f_GSL|): 3.9173270279899483e-15
+// Test data for nu=0.33333333333333331.
+// max(|f - f_GSL|): 1.5099033134902129e-14
+// max(|f - f_GSL| / |f_GSL|): 2.3783066949361429e-15
+// mean(f - f_GSL): -3.2407938766439093e-15
+// variance(f - f_GSL): 5.5139410992186457e-31
+// stddev(f - f_GSL): 7.4255916257350471e-16
const testcase_cyl_bessel_i<double>
data008[21] =
{
- { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
- { 2.5701232848571186e-16, 10.000000000000000, 0.25000000000000000 },
- { 2.6430419258812784e-13, 10.000000000000000, 0.50000000000000000 },
- { 1.5349659676120412e-11, 10.000000000000000, 0.75000000000000000 },
- { 2.7529480398368732e-10, 10.000000000000000, 1.0000000000000000 },
- { 2.5967897782035928e-09, 10.000000000000000, 1.2500000000000000 },
- { 1.6330924437799743e-08, 10.000000000000000, 1.5000000000000000 },
- { 7.7706676834614093e-08, 10.000000000000000, 1.7500000000000000 },
- { 3.0169638793506839e-07, 10.000000000000000, 2.0000000000000000 },
- { 1.0034459057774481e-06, 10.000000000000000, 2.2500000000000000 },
- { 2.9557436109680578e-06, 10.000000000000000, 2.5000000000000000 },
- { 7.8955603774082724e-06, 10.000000000000000, 2.7500000000000000 },
- { 1.9464393470612970e-05, 10.000000000000000, 3.0000000000000000 },
- { 4.4875369479742435e-05, 10.000000000000000, 3.2500000000000000 },
- { 9.7760848514528916e-05, 10.000000000000000, 3.5000000000000000 },
- { 0.00020289011210063493, 10.000000000000000, 3.7500000000000000 },
- { 0.00040378896132693047, 10.000000000000000, 4.0000000000000000 },
- { 0.00077478519551669892, 10.000000000000000, 4.2500000000000000 },
- { 0.0014397060684919682, 10.000000000000000, 4.5000000000000000 },
- { 0.0026004486016189452, 10.000000000000000, 4.7500000000000000 },
- { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+ { 0.56650686557808660, 0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 0.73897315642511863, 0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 0.89532320365836804, 0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 1.0646313978895285, 0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 1.2623776732605250, 0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 1.5014290000224382, 0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 1.7951195525946044, 0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 2.1587825813728614, 0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 2.6109134564811405, 0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 3.1743242297241938, 0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 3.8774551722182107, 0.33333333333333331, 2.7500000000000000, 0.0 },
+ { 4.7559569371646946, 0.33333333333333331, 3.0000000000000000, 0.0 },
+ { 5.8546499652731825, 0.33333333333333331, 3.2500000000000000, 0.0 },
+ { 7.2299798619171147, 0.33333333333333331, 3.5000000000000000, 0.0 },
+ { 8.9531114355506318, 0.33333333333333331, 3.7500000000000000, 0.0 },
+ { 11.113838389991479, 0.33333333333333331, 4.0000000000000000, 0.0 },
+ { 13.825531136529117, 0.33333333333333331, 4.2500000000000000, 0.0 },
+ { 17.231403968478318, 0.33333333333333331, 4.5000000000000000, 0.0 },
+ { 21.512458099556554, 0.33333333333333331, 4.7500000000000000, 0.0 },
+ { 26.897553069268362, 0.33333333333333331, 5.0000000000000000, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
-// Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 2.9080568410067379e-26
-// max(|f - f_GSL| / |f_GSL|): 2.1318627676504474e-15
+// Test data for nu=0.50000000000000000.
+// max(|f - f_GSL|): 9.9475983006414026e-14
+// max(|f - f_GSL| / |f_GSL|): 1.1927349998327766e-14
+// mean(f - f_GSL): -2.5416177099454475e-14
+// variance(f - f_GSL): 3.3914058063418791e-29
+// stddev(f - f_GSL): 5.8235777717326654e-15
const testcase_cyl_bessel_i<double>
data009[21] =
{
- { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
- { 3.5677858077910353e-37, 20.000000000000000, 0.25000000000000000 },
- { 3.7494538480790194e-31, 20.000000000000000, 0.50000000000000000 },
- { 1.2514356342425337e-27, 20.000000000000000, 0.75000000000000000 },
- { 3.9668359858190197e-25, 20.000000000000000, 1.0000000000000000 },
- { 3.4637832909868234e-23, 20.000000000000000, 1.2500000000000000 },
- { 1.3388331839683472e-21, 20.000000000000000, 1.5000000000000000 },
- { 2.9502376732679751e-20, 20.000000000000000, 1.7500000000000000 },
- { 4.3105605761095479e-19, 20.000000000000000, 2.0000000000000000 },
- { 4.6032451406433059e-18, 20.000000000000000, 2.2500000000000000 },
- { 3.8400317244170310e-17, 20.000000000000000, 2.5000000000000000 },
- { 2.6239115263043263e-16, 20.000000000000000, 2.7500000000000000 },
- { 1.5209660019426689e-15, 20.000000000000000, 3.0000000000000000 },
- { 7.6806450728249953e-15, 20.000000000000000, 3.2500000000000000 },
- { 3.4495528847222945e-14, 20.000000000000000, 3.5000000000000000 },
- { 1.4006589294850672e-13, 20.000000000000000, 3.7500000000000000 },
- { 5.2100734221993044e-13, 20.000000000000000, 4.0000000000000000 },
- { 1.7946903269488168e-12, 20.000000000000000, 4.2500000000000000 },
- { 5.7763830562279683e-12, 20.000000000000000, 4.5000000000000000 },
- { 1.7502433074548735e-11, 20.000000000000000, 4.7500000000000000 },
- { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+ { 0.40311093489975897, 0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 0.58799308679041573, 0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 0.75761498638991298, 0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 0.93767488824548695, 0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 1.1432089853159872, 0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 1.3871617204034761, 0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 1.6830217804556815, 0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 2.0462368630890526, 0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 2.4953405089360041, 0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 3.0530935381967175, 0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 3.7477882494879449, 0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 4.6148229034075969, 0.50000000000000000, 3.0000000000000000, 0.0 },
+ { 5.6986505325335495, 0.50000000000000000, 3.2500000000000000, 0.0 },
+ { 7.0552194086911877, 0.50000000000000000, 3.5000000000000000, 0.0 },
+ { 8.7550467841188944, 0.50000000000000000, 3.7500000000000000, 0.0 },
+ { 10.887101798588422, 0.50000000000000000, 4.0000000000000000, 0.0 },
+ { 13.563718712579764, 0.50000000000000000, 4.2500000000000000, 0.0 },
+ { 16.926820080158183, 0.50000000000000000, 4.5000000000000000, 0.0 },
+ { 21.155804306570005, 0.50000000000000000, 4.7500000000000000, 0.0 },
+ { 26.477547497559065, 0.50000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler009 = 1.0000000000000008e-12;
+
+// Test data for nu=0.66666666666666663.
+// max(|f - f_GSL|): 2.8421709430404007e-14
+// max(|f - f_GSL| / |f_GSL|): 2.8378769020897959e-15
+// mean(f - f_GSL): -6.7009889700589802e-15
+// variance(f - f_GSL): 5.2036095875130493e-31
+// stddev(f - f_GSL): 7.2136049153755633e-16
+const testcase_cyl_bessel_i<double>
+data010[21] =
+{
+ { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+ { 0.27953690613200438, 0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 0.45628323113556879, 0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 0.62594569838182612, 0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 0.80752128860612948, 0.66666666666666663, 1.0000000000000000, 0.0 },
+ { 1.0139484513577168, 0.66666666666666663, 1.2500000000000000, 0.0 },
+ { 1.2572918396962991, 0.66666666666666663, 1.5000000000000000, 0.0 },
+ { 1.5505806938325577, 0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 1.9089492968236206, 0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 2.3506463490300331, 0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 2.8981161894224892, 0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 3.5792654911068720, 0.66666666666666663, 2.7500000000000000, 0.0 },
+ { 4.4290087213549505, 0.66666666666666663, 3.0000000000000000, 0.0 },
+ { 5.4911895720097688, 0.66666666666666663, 3.2500000000000000, 0.0 },
+ { 6.8209918044137305, 0.66666666666666663, 3.5000000000000000, 0.0 },
+ { 8.4879784249619767, 0.66666666666666663, 3.7500000000000000, 0.0 },
+ { 10.579932774013002, 0.66666666666666663, 4.0000000000000000, 0.0 },
+ { 13.207720355482458, 0.66666666666666663, 4.2500000000000000, 0.0 },
+ { 16.511448404200543, 0.66666666666666663, 4.5000000000000000, 0.0 },
+ { 20.668274532832392, 0.66666666666666663, 4.7500000000000000, 0.0 },
+ { 25.902310583215122, 0.66666666666666663, 5.0000000000000000, 0.0 },
};
-const double toler009 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000020e-13;
+
+// Test data for nu=1.0000000000000000.
+// max(|f - f_GSL|): 3.0375701953744283e-13
+// max(|f - f_GSL| / |f_GSL|): 2.5183978700936576e-14
+// mean(f - f_GSL): -6.9256769631378818e-14
+// variance(f - f_GSL): 2.2664370585252591e-28
+// stddev(f - f_GSL): 1.5054690493415199e-14
+const testcase_cyl_bessel_i<double>
+data011[21] =
+{
+ { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.12597910894546793, 1.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.25789430539089631, 1.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.40199246158092228, 1.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.56515910399248503, 1.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.75528141834074725, 1.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.98166642857790720, 1.0000000000000000, 1.5000000000000000, 0.0 },
+ { 1.2555375122401731, 1.0000000000000000, 1.7500000000000000, 0.0 },
+ { 1.5906368546373291, 1.0000000000000000, 2.0000000000000000, 0.0 },
+ { 2.0039674569295931, 1.0000000000000000, 2.2500000000000000, 0.0 },
+ { 2.5167162452886984, 1.0000000000000000, 2.5000000000000000, 0.0 },
+ { 3.1554101386190028, 1.0000000000000000, 2.7500000000000000, 0.0 },
+ { 3.9533702174026097, 1.0000000000000000, 3.0000000000000000, 0.0 },
+ { 4.9525461659085490, 1.0000000000000000, 3.2500000000000000, 0.0 },
+ { 6.2058349222583642, 1.0000000000000000, 3.5000000000000000, 0.0 },
+ { 7.7800152298244161, 1.0000000000000000, 3.7500000000000000, 0.0 },
+ { 9.7594651537044488, 1.0000000000000000, 4.0000000000000000, 0.0 },
+ { 12.250874667409304, 1.0000000000000000, 4.2500000000000000, 0.0 },
+ { 15.389222753735924, 1.0000000000000000, 4.5000000000000000, 0.0 },
+ { 19.345361447520226, 1.0000000000000000, 4.7500000000000000, 0.0 },
+ { 24.335642142450524, 1.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler011 = 2.5000000000000015e-12;
+
+// Test data for nu=2.0000000000000000.
+// max(|f - f_GSL|): 9.6278540695493575e-13
+// max(|f - f_GSL| / |f_GSL|): 5.5222969257072931e-14
+// mean(f - f_GSL): 2.0000122589815460e-13
+// variance(f - f_GSL): 3.0546584610699378e-26
+// stddev(f - f_GSL): 1.7477581243038000e-13
+const testcase_cyl_bessel_i<double>
+data012[21] =
+{
+ { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.0078532696598645167, 2.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.031906149177738249, 2.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.073666880494875436, 2.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.13574766976703831, 2.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.22201844837663415, 2.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.33783461833568068, 2.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.49035213986973319, 2.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.68894844769873831, 2.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.94577390103115722, 2.0000000000000000, 2.2500000000000000, 0.0 },
+ { 1.2764661478191643, 2.0000000000000000, 2.5000000000000000, 0.0 },
+ { 1.7010693700601991, 2.0000000000000000, 2.7500000000000000, 0.0 },
+ { 2.2452124409299512, 2.0000000000000000, 3.0000000000000000, 0.0 },
+ { 2.9416152804573357, 2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 3.8320120480778415, 2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 4.9696044049382113, 2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 6.4221893752841046, 2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 8.2761461924550552, 2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 10.641517298393307, 2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 13.658483394577813, 2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 17.505614966624233, 2.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler012 = 5.0000000000000029e-12;
+
+// Test data for nu=5.0000000000000000.
+// max(|f - f_GSL|): 2.3590018827235326e-12
+// max(|f - f_GSL| / |f_GSL|): 1.0941258090284455e-12
+// mean(f - f_GSL): -3.6026976540008397e-13
+// variance(f - f_GSL): 2.0973382903306448e-25
+// stddev(f - f_GSL): 4.5796706107870301e-13
+const testcase_cyl_bessel_i<double>
+data013[21] =
+{
+ { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+ { 2.5497616449882785e-07, 5.0000000000000000, 0.25000000000000000, 0.0 },
+ { 8.2231713131092646e-06, 5.0000000000000000, 0.50000000000000000, 0.0 },
+ { 6.3261122739811725e-05, 5.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.00027146315595697195, 5.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.00084793613616686856, 5.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.0021705595690975554, 5.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.0048504513371845394, 5.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.0098256793231317023, 5.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.018486577941045829, 5.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.032843475172023219, 5.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.055750882754221943, 5.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.091206477661513338, 5.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.14474880546308083, 5.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.22398495470190780, 5.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.33928899170999866, 5.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.50472436311316626, 5.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.73925961816682961, 5.0000000000000000, 4.2500000000000000, 0.0 },
+ { 1.0683677743764699, 5.0000000000000000, 4.5000000000000000, 0.0 },
+ { 1.5261268693599621, 5.0000000000000000, 4.7500000000000000, 0.0 },
+ { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler013 = 1.0000000000000006e-10;
+
+// Test data for nu=10.000000000000000.
+// max(|f - f_GSL|): 4.2722769766356805e-14
+// max(|f - f_GSL| / |f_GSL|): 9.3297454465361457e-12
+// mean(f - f_GSL): -4.5201861398440624e-15
+// variance(f - f_GSL): 7.6620463276386727e-29
+// stddev(f - f_GSL): 8.7533115605687616e-15
+const testcase_cyl_bessel_i<double>
+data014[21] =
+{
+ { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+ { 2.5701232848571186e-16, 10.000000000000000, 0.25000000000000000, 0.0 },
+ { 2.6430419258812784e-13, 10.000000000000000, 0.50000000000000000, 0.0 },
+ { 1.5349659676120412e-11, 10.000000000000000, 0.75000000000000000, 0.0 },
+ { 2.7529480398368732e-10, 10.000000000000000, 1.0000000000000000, 0.0 },
+ { 2.5967897782035928e-09, 10.000000000000000, 1.2500000000000000, 0.0 },
+ { 1.6330924437799743e-08, 10.000000000000000, 1.5000000000000000, 0.0 },
+ { 7.7706676834614093e-08, 10.000000000000000, 1.7500000000000000, 0.0 },
+ { 3.0169638793506839e-07, 10.000000000000000, 2.0000000000000000, 0.0 },
+ { 1.0034459057774481e-06, 10.000000000000000, 2.2500000000000000, 0.0 },
+ { 2.9557436109680578e-06, 10.000000000000000, 2.5000000000000000, 0.0 },
+ { 7.8955603774082724e-06, 10.000000000000000, 2.7500000000000000, 0.0 },
+ { 1.9464393470612970e-05, 10.000000000000000, 3.0000000000000000, 0.0 },
+ { 4.4875369479742435e-05, 10.000000000000000, 3.2500000000000000, 0.0 },
+ { 9.7760848514528916e-05, 10.000000000000000, 3.5000000000000000, 0.0 },
+ { 0.00020289011210063493, 10.000000000000000, 3.7500000000000000, 0.0 },
+ { 0.00040378896132693047, 10.000000000000000, 4.0000000000000000, 0.0 },
+ { 0.00077478519551669892, 10.000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0014397060684919682, 10.000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0026004486016189452, 10.000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler014 = 5.0000000000000034e-10;
+
+// Test data for nu=20.000000000000000.
+// max(|f - f_GSL|): 1.9899057481184839e-21
+// max(|f - f_GSL| / |f_GSL|): 3.9607878360177660e-11
+// mean(f - f_GSL): 1.4337451737934756e-22
+// variance(f - f_GSL): 1.7900807326998696e-43
+// stddev(f - f_GSL): 4.2309345689810304e-22
+const testcase_cyl_bessel_i<double>
+data015[21] =
+{
+ { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+ { 3.5677858077910353e-37, 20.000000000000000, 0.25000000000000000, 0.0 },
+ { 3.7494538480790194e-31, 20.000000000000000, 0.50000000000000000, 0.0 },
+ { 1.2514356342425337e-27, 20.000000000000000, 0.75000000000000000, 0.0 },
+ { 3.9668359858190197e-25, 20.000000000000000, 1.0000000000000000, 0.0 },
+ { 3.4637832909868234e-23, 20.000000000000000, 1.2500000000000000, 0.0 },
+ { 1.3388331839683472e-21, 20.000000000000000, 1.5000000000000000, 0.0 },
+ { 2.9502376732679751e-20, 20.000000000000000, 1.7500000000000000, 0.0 },
+ { 4.3105605761095479e-19, 20.000000000000000, 2.0000000000000000, 0.0 },
+ { 4.6032451406433059e-18, 20.000000000000000, 2.2500000000000000, 0.0 },
+ { 3.8400317244170310e-17, 20.000000000000000, 2.5000000000000000, 0.0 },
+ { 2.6239115263043263e-16, 20.000000000000000, 2.7500000000000000, 0.0 },
+ { 1.5209660019426689e-15, 20.000000000000000, 3.0000000000000000, 0.0 },
+ { 7.6806450728249953e-15, 20.000000000000000, 3.2500000000000000, 0.0 },
+ { 3.4495528847222945e-14, 20.000000000000000, 3.5000000000000000, 0.0 },
+ { 1.4006589294850672e-13, 20.000000000000000, 3.7500000000000000, 0.0 },
+ { 5.2100734221993044e-13, 20.000000000000000, 4.0000000000000000, 0.0 },
+ { 1.7946903269488168e-12, 20.000000000000000, 4.2500000000000000, 0.0 },
+ { 5.7763830562279683e-12, 20.000000000000000, 4.5000000000000000, 0.0 },
+ { 1.7502433074548735e-11, 20.000000000000000, 4.7500000000000000, 0.0 },
+ { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler015 = 2.5000000000000013e-09;
// cyl_bessel_i
// Test data for nu=0.0000000000000000.
// max(|f - f_GSL|): 2.5687255815171641e+28
// max(|f - f_GSL| / |f_GSL|): 2.3922901025046178e-14
+// mean(f - f_GSL): -1.2169791340110775e+27
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data010[21] =
+data016[21] =
{
- { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
- { 27.239871823604439, 0.0000000000000000, 5.0000000000000000 },
- { 2815.7166284662558, 0.0000000000000000, 10.000000000000000 },
- { 339649.37329791381, 0.0000000000000000, 15.000000000000000 },
- { 43558282.559553474, 0.0000000000000000, 20.000000000000000 },
- { 5774560606.4663124, 0.0000000000000000, 25.000000000000000 },
- { 781672297823.97925, 0.0000000000000000, 30.000000000000000 },
- { 107338818494514.42, 0.0000000000000000, 35.000000000000000 },
- { 14894774793419918., 0.0000000000000000, 40.000000000000000 },
- { 2.0834140751773164e+18, 0.0000000000000000, 45.000000000000000 },
- { 2.9325537838493457e+20, 0.0000000000000000, 50.000000000000000 },
- { 4.1487895607332160e+22, 0.0000000000000000, 55.000000000000000 },
- { 5.8940770556098216e+24, 0.0000000000000000, 60.000000000000000 },
- { 8.4030398456255596e+26, 0.0000000000000000, 65.000000000000000 },
- { 1.2015889579125424e+29, 0.0000000000000000, 70.000000000000000 },
- { 1.7226390780357976e+31, 0.0000000000000000, 75.000000000000000 },
- { 2.4751784043341661e+33, 0.0000000000000000, 80.000000000000000 },
- { 3.5634776304081403e+35, 0.0000000000000000, 85.000000000000000 },
- { 5.1392383455086475e+37, 0.0000000000000000, 90.000000000000000 },
- { 7.4233258618752072e+39, 0.0000000000000000, 95.000000000000000 },
- { 1.0737517071310986e+42, 0.0000000000000000, 100.00000000000000 },
+ { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+ { 27.239871823604439, 0.0000000000000000, 5.0000000000000000, 0.0 },
+ { 2815.7166284662558, 0.0000000000000000, 10.000000000000000, 0.0 },
+ { 339649.37329791381, 0.0000000000000000, 15.000000000000000, 0.0 },
+ { 43558282.559553474, 0.0000000000000000, 20.000000000000000, 0.0 },
+ { 5774560606.4663124, 0.0000000000000000, 25.000000000000000, 0.0 },
+ { 781672297823.97925, 0.0000000000000000, 30.000000000000000, 0.0 },
+ { 107338818494514.42, 0.0000000000000000, 35.000000000000000, 0.0 },
+ { 14894774793419918., 0.0000000000000000, 40.000000000000000, 0.0 },
+ { 2.0834140751773164e+18, 0.0000000000000000, 45.000000000000000, 0.0 },
+ { 2.9325537838493457e+20, 0.0000000000000000, 50.000000000000000, 0.0 },
+ { 4.1487895607332160e+22, 0.0000000000000000, 55.000000000000000, 0.0 },
+ { 5.8940770556098216e+24, 0.0000000000000000, 60.000000000000000, 0.0 },
+ { 8.4030398456255596e+26, 0.0000000000000000, 65.000000000000000, 0.0 },
+ { 1.2015889579125424e+29, 0.0000000000000000, 70.000000000000000, 0.0 },
+ { 1.7226390780357976e+31, 0.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.4751784043341661e+33, 0.0000000000000000, 80.000000000000000, 0.0 },
+ { 3.5634776304081403e+35, 0.0000000000000000, 85.000000000000000, 0.0 },
+ { 5.1392383455086475e+37, 0.0000000000000000, 90.000000000000000, 0.0 },
+ { 7.4233258618752072e+39, 0.0000000000000000, 95.000000000000000, 0.0 },
+ { 1.0737517071310986e+42, 0.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler010 = 2.5000000000000015e-12;
+const double toler016 = 2.5000000000000015e-12;
// Test data for nu=0.33333333333333331.
// max(|f - f_GSL|): 1.0831975343747077e+28
// max(|f - f_GSL| / |f_GSL|): 1.2017640663876795e-14
+// mean(f - f_GSL): -5.1342897151611971e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data011[21] =
+data017[21] =
{
- { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
- { 26.897553069268362, 0.33333333333333331, 5.0000000000000000 },
- { 2799.2396097056790, 0.33333333333333331, 10.000000000000000 },
- { 338348.63146593666, 0.33333333333333331, 15.000000000000000 },
- { 43434263.927938424, 0.33333333333333331, 20.000000000000000 },
- { 5761474759.6213636, 0.33333333333333331, 25.000000000000000 },
- { 780201111830.30237, 0.33333333333333331, 30.000000000000000 },
- { 107166066959051.91, 0.33333333333333331, 35.000000000000000 },
- { 14873836574083764., 0.33333333333333331, 40.000000000000000 },
- { 2.0808143020217085e+18, 0.33333333333333331, 45.000000000000000 },
- { 2.9292639365644226e+20, 0.33333333333333331, 50.000000000000000 },
- { 4.1445621624120489e+22, 0.33333333333333331, 55.000000000000000 },
- { 5.8885758374365916e+24, 0.33333333333333331, 60.000000000000000 },
- { 8.3958047021083955e+26, 0.33333333333333331, 65.000000000000000 },
- { 1.2006287819446431e+29, 0.33333333333333331, 70.000000000000000 },
- { 1.7213548977150022e+31, 0.33333333333333331, 75.000000000000000 },
- { 2.4734492458444449e+33, 0.33333333333333331, 80.000000000000000 },
- { 3.5611354547857122e+35, 0.33333333333333331, 85.000000000000000 },
- { 5.1360491295551848e+37, 0.33333333333333331, 90.000000000000000 },
- { 7.4189629097600431e+39, 0.33333333333333331, 95.000000000000000 },
- { 1.0731523308358370e+42, 0.33333333333333331, 100.00000000000000 },
+ { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+ { 26.897553069268362, 0.33333333333333331, 5.0000000000000000, 0.0 },
+ { 2799.2396097056790, 0.33333333333333331, 10.000000000000000, 0.0 },
+ { 338348.63146593666, 0.33333333333333331, 15.000000000000000, 0.0 },
+ { 43434263.927938424, 0.33333333333333331, 20.000000000000000, 0.0 },
+ { 5761474759.6213636, 0.33333333333333331, 25.000000000000000, 0.0 },
+ { 780201111830.30237, 0.33333333333333331, 30.000000000000000, 0.0 },
+ { 107166066959051.91, 0.33333333333333331, 35.000000000000000, 0.0 },
+ { 14873836574083764., 0.33333333333333331, 40.000000000000000, 0.0 },
+ { 2.0808143020217085e+18, 0.33333333333333331, 45.000000000000000, 0.0 },
+ { 2.9292639365644226e+20, 0.33333333333333331, 50.000000000000000, 0.0 },
+ { 4.1445621624120489e+22, 0.33333333333333331, 55.000000000000000, 0.0 },
+ { 5.8885758374365916e+24, 0.33333333333333331, 60.000000000000000, 0.0 },
+ { 8.3958047021083955e+26, 0.33333333333333331, 65.000000000000000, 0.0 },
+ { 1.2006287819446431e+29, 0.33333333333333331, 70.000000000000000, 0.0 },
+ { 1.7213548977150022e+31, 0.33333333333333331, 75.000000000000000, 0.0 },
+ { 2.4734492458444449e+33, 0.33333333333333331, 80.000000000000000, 0.0 },
+ { 3.5611354547857122e+35, 0.33333333333333331, 85.000000000000000, 0.0 },
+ { 5.1360491295551848e+37, 0.33333333333333331, 90.000000000000000, 0.0 },
+ { 7.4189629097600431e+39, 0.33333333333333331, 95.000000000000000, 0.0 },
+ { 1.0731523308358370e+42, 0.33333333333333331, 100.00000000000000, 0.0 },
};
-const double toler011 = 1.0000000000000008e-12;
+const double toler017 = 1.0000000000000008e-12;
// Test data for nu=0.50000000000000000.
// max(|f - f_GSL|): 6.9634127209802640e+27
// max(|f - f_GSL| / |f_GSL|): 1.1904152155149629e-14
+// mean(f - f_GSL): -3.2737378017641015e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data012[21] =
+data018[21] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
- { 26.477547497559065, 0.50000000000000000, 5.0000000000000000 },
- { 2778.7846038745711, 0.50000000000000000, 10.000000000000000 },
- { 336729.88718706399, 0.50000000000000000, 15.000000000000000 },
- { 43279746.272428922, 0.50000000000000000, 20.000000000000000 },
- { 5745159748.3464680, 0.50000000000000000, 25.000000000000000 },
- { 778366068840.44580, 0.50000000000000000, 30.000000000000000 },
- { 106950522408567.66, 0.50000000000000000, 35.000000000000000 },
- { 14847705549021962., 0.50000000000000000, 40.000000000000000 },
- { 2.0775691824625661e+18, 0.50000000000000000, 45.000000000000000 },
- { 2.9251568529912984e+20, 0.50000000000000000, 50.000000000000000 },
- { 4.1392840094781220e+22, 0.50000000000000000, 55.000000000000000 },
- { 5.8817065760751945e+24, 0.50000000000000000, 60.000000000000000 },
- { 8.3867695787277258e+26, 0.50000000000000000, 65.000000000000000 },
- { 1.1994296461653203e+29, 0.50000000000000000, 70.000000000000000 },
- { 1.7197510246063334e+31, 0.50000000000000000, 75.000000000000000 },
- { 2.4712895036230794e+33, 0.50000000000000000, 80.000000000000000 },
- { 3.5582099086757769e+35, 0.50000000000000000, 85.000000000000000 },
- { 5.1320654031231128e+37, 0.50000000000000000, 90.000000000000000 },
- { 7.4135128383495239e+39, 0.50000000000000000, 95.000000000000000 },
- { 1.0724035825423179e+42, 0.50000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+ { 26.477547497559065, 0.50000000000000000, 5.0000000000000000, 0.0 },
+ { 2778.7846038745711, 0.50000000000000000, 10.000000000000000, 0.0 },
+ { 336729.88718706399, 0.50000000000000000, 15.000000000000000, 0.0 },
+ { 43279746.272428922, 0.50000000000000000, 20.000000000000000, 0.0 },
+ { 5745159748.3464680, 0.50000000000000000, 25.000000000000000, 0.0 },
+ { 778366068840.44580, 0.50000000000000000, 30.000000000000000, 0.0 },
+ { 106950522408567.66, 0.50000000000000000, 35.000000000000000, 0.0 },
+ { 14847705549021962., 0.50000000000000000, 40.000000000000000, 0.0 },
+ { 2.0775691824625661e+18, 0.50000000000000000, 45.000000000000000, 0.0 },
+ { 2.9251568529912984e+20, 0.50000000000000000, 50.000000000000000, 0.0 },
+ { 4.1392840094781220e+22, 0.50000000000000000, 55.000000000000000, 0.0 },
+ { 5.8817065760751945e+24, 0.50000000000000000, 60.000000000000000, 0.0 },
+ { 8.3867695787277258e+26, 0.50000000000000000, 65.000000000000000, 0.0 },
+ { 1.1994296461653203e+29, 0.50000000000000000, 70.000000000000000, 0.0 },
+ { 1.7197510246063334e+31, 0.50000000000000000, 75.000000000000000, 0.0 },
+ { 2.4712895036230794e+33, 0.50000000000000000, 80.000000000000000, 0.0 },
+ { 3.5582099086757769e+35, 0.50000000000000000, 85.000000000000000, 0.0 },
+ { 5.1320654031231128e+37, 0.50000000000000000, 90.000000000000000, 0.0 },
+ { 7.4135128383495239e+39, 0.50000000000000000, 95.000000000000000, 0.0 },
+ { 1.0724035825423179e+42, 0.50000000000000000, 100.00000000000000, 0.0 },
};
-const double toler012 = 1.0000000000000008e-12;
+const double toler018 = 1.0000000000000008e-12;
// Test data for nu=0.66666666666666663.
// max(|f - f_GSL|): 4.4875326424095035e+27
// max(|f - f_GSL| / |f_GSL|): 8.8432218147527708e-15
+// mean(f - f_GSL): -2.1641934534093327e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data013[21] =
+data019[21] =
{
- { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
- { 25.902310583215122, 0.66666666666666663, 5.0000000000000000 },
- { 2750.4090423459315, 0.66666666666666663, 10.000000000000000 },
- { 334476.98138574377, 0.66666666666666663, 15.000000000000000 },
- { 43064361.686912313, 0.66666666666666663, 20.000000000000000 },
- { 5722397441.9603882, 0.66666666666666663, 25.000000000000000 },
- { 775804343498.02661, 0.66666666666666663, 30.000000000000000 },
- { 106649495512800.88, 0.66666666666666663, 35.000000000000000 },
- { 14811199896983756., 0.66666666666666663, 40.000000000000000 },
- { 2.0730345814356961e+18, 0.66666666666666663, 45.000000000000000 },
- { 2.9194166755257467e+20, 0.66666666666666663, 50.000000000000000 },
- { 4.1319059569935374e+22, 0.66666666666666663, 55.000000000000000 },
- { 5.8721031476386222e+24, 0.66666666666666663, 60.000000000000000 },
- { 8.3741368248217844e+26, 0.66666666666666663, 65.000000000000000 },
- { 1.1977528777008688e+29, 0.66666666666666663, 70.000000000000000 },
- { 1.7175081240014333e+31, 0.66666666666666663, 75.000000000000000 },
- { 2.4682690458513916e+33, 0.66666666666666663, 80.000000000000000 },
- { 3.5541181975850724e+35, 0.66666666666666663, 85.000000000000000 },
- { 5.1264933963228892e+37, 0.66666666666666663, 90.000000000000000 },
- { 7.4058894880134064e+39, 0.66666666666666663, 95.000000000000000 },
- { 1.0713562154788124e+42, 0.66666666666666663, 100.00000000000000 },
+ { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+ { 25.902310583215122, 0.66666666666666663, 5.0000000000000000, 0.0 },
+ { 2750.4090423459315, 0.66666666666666663, 10.000000000000000, 0.0 },
+ { 334476.98138574377, 0.66666666666666663, 15.000000000000000, 0.0 },
+ { 43064361.686912313, 0.66666666666666663, 20.000000000000000, 0.0 },
+ { 5722397441.9603882, 0.66666666666666663, 25.000000000000000, 0.0 },
+ { 775804343498.02661, 0.66666666666666663, 30.000000000000000, 0.0 },
+ { 106649495512800.88, 0.66666666666666663, 35.000000000000000, 0.0 },
+ { 14811199896983756., 0.66666666666666663, 40.000000000000000, 0.0 },
+ { 2.0730345814356961e+18, 0.66666666666666663, 45.000000000000000, 0.0 },
+ { 2.9194166755257467e+20, 0.66666666666666663, 50.000000000000000, 0.0 },
+ { 4.1319059569935374e+22, 0.66666666666666663, 55.000000000000000, 0.0 },
+ { 5.8721031476386222e+24, 0.66666666666666663, 60.000000000000000, 0.0 },
+ { 8.3741368248217844e+26, 0.66666666666666663, 65.000000000000000, 0.0 },
+ { 1.1977528777008688e+29, 0.66666666666666663, 70.000000000000000, 0.0 },
+ { 1.7175081240014333e+31, 0.66666666666666663, 75.000000000000000, 0.0 },
+ { 2.4682690458513916e+33, 0.66666666666666663, 80.000000000000000, 0.0 },
+ { 3.5541181975850724e+35, 0.66666666666666663, 85.000000000000000, 0.0 },
+ { 5.1264933963228892e+37, 0.66666666666666663, 90.000000000000000, 0.0 },
+ { 7.4058894880134064e+39, 0.66666666666666663, 95.000000000000000, 0.0 },
+ { 1.0713562154788124e+42, 0.66666666666666663, 100.00000000000000, 0.0 },
};
-const double toler013 = 5.0000000000000039e-13;
+const double toler019 = 5.0000000000000039e-13;
// Test data for nu=1.0000000000000000.
// max(|f - f_GSL|): 5.7254726816948838e+27
// max(|f - f_GSL| / |f_GSL|): 7.0819761463168391e-15
+// mean(f - f_GSL): 2.7401452129581584e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data014[21] =
+data020[21] =
{
- { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
- { 24.335642142450524, 1.0000000000000000, 5.0000000000000000 },
- { 2670.9883037012560, 1.0000000000000000, 10.000000000000000 },
- { 328124.92197020649, 1.0000000000000000, 15.000000000000000 },
- { 42454973.385127783, 1.0000000000000000, 20.000000000000000 },
- { 5657865129.8787022, 1.0000000000000000, 25.000000000000000 },
- { 768532038938.95667, 1.0000000000000000, 30.000000000000000 },
- { 105794126051896.17, 1.0000000000000000, 35.000000000000000 },
- { 14707396163259354., 1.0000000000000000, 40.000000000000000 },
- { 2.0601334620815780e+18, 1.0000000000000000, 45.000000000000000 },
- { 2.9030785901035638e+20, 1.0000000000000000, 50.000000000000000 },
- { 4.1108986452992812e+22, 1.0000000000000000, 55.000000000000000 },
- { 5.8447515883904527e+24, 1.0000000000000000, 60.000000000000000 },
- { 8.3381485471501302e+26, 1.0000000000000000, 65.000000000000000 },
- { 1.1929750788892366e+29, 1.0000000000000000, 70.000000000000000 },
- { 1.7111160152965382e+31, 1.0000000000000000, 75.000000000000000 },
- { 2.4596595795675343e+33, 1.0000000000000000, 80.000000000000000 },
- { 3.5424536064404024e+35, 1.0000000000000000, 85.000000000000000 },
- { 5.1106068152566129e+37, 1.0000000000000000, 90.000000000000000 },
- { 7.3841518091360182e+39, 1.0000000000000000, 95.000000000000000 },
- { 1.0683693903381569e+42, 1.0000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+ { 24.335642142450524, 1.0000000000000000, 5.0000000000000000, 0.0 },
+ { 2670.9883037012560, 1.0000000000000000, 10.000000000000000, 0.0 },
+ { 328124.92197020649, 1.0000000000000000, 15.000000000000000, 0.0 },
+ { 42454973.385127783, 1.0000000000000000, 20.000000000000000, 0.0 },
+ { 5657865129.8787022, 1.0000000000000000, 25.000000000000000, 0.0 },
+ { 768532038938.95667, 1.0000000000000000, 30.000000000000000, 0.0 },
+ { 105794126051896.17, 1.0000000000000000, 35.000000000000000, 0.0 },
+ { 14707396163259354., 1.0000000000000000, 40.000000000000000, 0.0 },
+ { 2.0601334620815780e+18, 1.0000000000000000, 45.000000000000000, 0.0 },
+ { 2.9030785901035638e+20, 1.0000000000000000, 50.000000000000000, 0.0 },
+ { 4.1108986452992812e+22, 1.0000000000000000, 55.000000000000000, 0.0 },
+ { 5.8447515883904527e+24, 1.0000000000000000, 60.000000000000000, 0.0 },
+ { 8.3381485471501302e+26, 1.0000000000000000, 65.000000000000000, 0.0 },
+ { 1.1929750788892366e+29, 1.0000000000000000, 70.000000000000000, 0.0 },
+ { 1.7111160152965382e+31, 1.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.4596595795675343e+33, 1.0000000000000000, 80.000000000000000, 0.0 },
+ { 3.5424536064404024e+35, 1.0000000000000000, 85.000000000000000, 0.0 },
+ { 5.1106068152566129e+37, 1.0000000000000000, 90.000000000000000, 0.0 },
+ { 7.3841518091360182e+39, 1.0000000000000000, 95.000000000000000, 0.0 },
+ { 1.0683693903381569e+42, 1.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler014 = 5.0000000000000039e-13;
+const double toler020 = 5.0000000000000039e-13;
// Test data for nu=2.0000000000000000.
// max(|f - f_GSL|): 6.3444427013375739e+27
-// max(|f - f_GSL| / |f_GSL|): 6.0286366727804324e-15
+// max(|f - f_GSL| / |f_GSL|): 5.4998662360080369e-14
+// mean(f - f_GSL): 3.0240236282290255e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data015[21] =
+data021[21] =
{
- { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
- { 17.505614966624233, 2.0000000000000000, 5.0000000000000000 },
- { 2281.5189677260046, 2.0000000000000000, 10.000000000000000 },
- { 295899.38370188628, 2.0000000000000000, 15.000000000000000 },
- { 39312785.221040756, 2.0000000000000000, 20.000000000000000 },
- { 5321931396.0760155, 2.0000000000000000, 25.000000000000000 },
- { 730436828561.38013, 2.0000000000000000, 30.000000000000000 },
- { 101293439862977.19, 2.0000000000000000, 35.000000000000000 },
- { 14159404985256922., 2.0000000000000000, 40.000000000000000 },
- { 1.9918525879736883e+18, 2.0000000000000000, 45.000000000000000 },
- { 2.8164306402451938e+20, 2.0000000000000000, 50.000000000000000 },
- { 3.9993023372677540e+22, 2.0000000000000000, 55.000000000000000 },
- { 5.6992520026634433e+24, 2.0000000000000000, 60.000000000000000 },
- { 8.1464814287900378e+26, 2.0000000000000000, 65.000000000000000 },
- { 1.1675039556585663e+29, 2.0000000000000000, 70.000000000000000 },
- { 1.6770093176278926e+31, 2.0000000000000000, 75.000000000000000 },
- { 2.4136869148449879e+33, 2.0000000000000000, 80.000000000000000 },
- { 3.4801257808448186e+35, 2.0000000000000000, 85.000000000000000 },
- { 5.0256693051696307e+37, 2.0000000000000000, 90.000000000000000 },
- { 7.2678700343145818e+39, 2.0000000000000000, 95.000000000000000 },
- { 1.0523843193243042e+42, 2.0000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+ { 17.505614966624233, 2.0000000000000000, 5.0000000000000000, 0.0 },
+ { 2281.5189677260046, 2.0000000000000000, 10.000000000000000, 0.0 },
+ { 295899.38370188628, 2.0000000000000000, 15.000000000000000, 0.0 },
+ { 39312785.221040756, 2.0000000000000000, 20.000000000000000, 0.0 },
+ { 5321931396.0760155, 2.0000000000000000, 25.000000000000000, 0.0 },
+ { 730436828561.38013, 2.0000000000000000, 30.000000000000000, 0.0 },
+ { 101293439862977.19, 2.0000000000000000, 35.000000000000000, 0.0 },
+ { 14159404985256922., 2.0000000000000000, 40.000000000000000, 0.0 },
+ { 1.9918525879736883e+18, 2.0000000000000000, 45.000000000000000, 0.0 },
+ { 2.8164306402451938e+20, 2.0000000000000000, 50.000000000000000, 0.0 },
+ { 3.9993023372677540e+22, 2.0000000000000000, 55.000000000000000, 0.0 },
+ { 5.6992520026634433e+24, 2.0000000000000000, 60.000000000000000, 0.0 },
+ { 8.1464814287900378e+26, 2.0000000000000000, 65.000000000000000, 0.0 },
+ { 1.1675039556585663e+29, 2.0000000000000000, 70.000000000000000, 0.0 },
+ { 1.6770093176278926e+31, 2.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.4136869148449879e+33, 2.0000000000000000, 80.000000000000000, 0.0 },
+ { 3.4801257808448186e+35, 2.0000000000000000, 85.000000000000000, 0.0 },
+ { 5.0256693051696307e+37, 2.0000000000000000, 90.000000000000000, 0.0 },
+ { 7.2678700343145818e+39, 2.0000000000000000, 95.000000000000000, 0.0 },
+ { 1.0523843193243042e+42, 2.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler015 = 5.0000000000000039e-13;
+const double toler021 = 5.0000000000000029e-12;
// Test data for nu=5.0000000000000000.
// max(|f - f_GSL|): 7.7371252455336267e+26
-// max(|f - f_GSL| / |f_GSL|): 1.6729319922562276e-15
+// max(|f - f_GSL| / |f_GSL|): 1.0931555636976370e-12
+// mean(f - f_GSL): -3.7361998567447588e+25
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data016[21] =
+data022[21] =
{
- { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
- { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000 },
- { 777.18828640326012, 5.0000000000000000, 10.000000000000000 },
- { 144572.01120063409, 5.0000000000000000, 15.000000000000000 },
- { 23018392.213413671, 5.0000000000000000, 20.000000000000000 },
- { 3472466208.7419176, 5.0000000000000000, 25.000000000000000 },
- { 512151465476.93494, 5.0000000000000000, 30.000000000000000 },
- { 74756743552251.547, 5.0000000000000000, 35.000000000000000 },
- { 10858318337624280., 5.0000000000000000, 40.000000000000000 },
- { 1.5736087399245911e+18, 5.0000000000000000, 45.000000000000000 },
- { 2.2785483079112825e+20, 5.0000000000000000, 50.000000000000000 },
- { 3.2989391052963687e+22, 5.0000000000000000, 55.000000000000000 },
- { 4.7777652072561732e+24, 5.0000000000000000, 60.000000000000000 },
- { 6.9232165147172657e+26, 5.0000000000000000, 65.000000000000000 },
- { 1.0038643002095155e+29, 5.0000000000000000, 70.000000000000000 },
- { 1.4566328222327073e+31, 5.0000000000000000, 75.000000000000000 },
- { 2.1151488565944835e+33, 5.0000000000000000, 80.000000000000000 },
- { 3.0735883450768239e+35, 5.0000000000000000, 85.000000000000000 },
- { 4.4694790189230327e+37, 5.0000000000000000, 90.000000000000000 },
- { 6.5037505570430995e+39, 5.0000000000000000, 95.000000000000000 },
- { 9.4700938730355882e+41, 5.0000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+ { 2.1579745473225476, 5.0000000000000000, 5.0000000000000000, 0.0 },
+ { 777.18828640326012, 5.0000000000000000, 10.000000000000000, 0.0 },
+ { 144572.01120063409, 5.0000000000000000, 15.000000000000000, 0.0 },
+ { 23018392.213413671, 5.0000000000000000, 20.000000000000000, 0.0 },
+ { 3472466208.7419176, 5.0000000000000000, 25.000000000000000, 0.0 },
+ { 512151465476.93494, 5.0000000000000000, 30.000000000000000, 0.0 },
+ { 74756743552251.547, 5.0000000000000000, 35.000000000000000, 0.0 },
+ { 10858318337624280., 5.0000000000000000, 40.000000000000000, 0.0 },
+ { 1.5736087399245911e+18, 5.0000000000000000, 45.000000000000000, 0.0 },
+ { 2.2785483079112825e+20, 5.0000000000000000, 50.000000000000000, 0.0 },
+ { 3.2989391052963687e+22, 5.0000000000000000, 55.000000000000000, 0.0 },
+ { 4.7777652072561732e+24, 5.0000000000000000, 60.000000000000000, 0.0 },
+ { 6.9232165147172657e+26, 5.0000000000000000, 65.000000000000000, 0.0 },
+ { 1.0038643002095155e+29, 5.0000000000000000, 70.000000000000000, 0.0 },
+ { 1.4566328222327073e+31, 5.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.1151488565944835e+33, 5.0000000000000000, 80.000000000000000, 0.0 },
+ { 3.0735883450768239e+35, 5.0000000000000000, 85.000000000000000, 0.0 },
+ { 4.4694790189230327e+37, 5.0000000000000000, 90.000000000000000, 0.0 },
+ { 6.5037505570430995e+39, 5.0000000000000000, 95.000000000000000, 0.0 },
+ { 9.4700938730355882e+41, 5.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler016 = 2.5000000000000020e-13;
+const double toler022 = 1.0000000000000006e-10;
// Test data for nu=10.000000000000000.
// max(|f - f_GSL|): 2.3211375736600880e+26
-// max(|f - f_GSL| / |f_GSL|): 3.0834307473515225e-15
+// max(|f - f_GSL| / |f_GSL|): 9.3290008690264353e-12
+// mean(f - f_GSL): 1.1111285612658707e+25
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data017[21] =
+data023[21] =
{
- { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
- { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000 },
- { 21.891706163723381, 10.000000000000000, 10.000000000000000 },
- { 12267.475049806462, 10.000000000000000, 15.000000000000000 },
- { 3540200.2090195213, 10.000000000000000, 20.000000000000000 },
- { 771298871.17072666, 10.000000000000000, 25.000000000000000 },
- { 145831809975.96710, 10.000000000000000, 30.000000000000000 },
- { 25449470018534.777, 10.000000000000000, 35.000000000000000 },
- { 4228469210516757.5, 10.000000000000000, 40.000000000000000 },
- { 6.8049404557505165e+17, 10.000000000000000, 45.000000000000000 },
- { 1.0715971594776370e+20, 10.000000000000000, 50.000000000000000 },
- { 1.6618215752886714e+22, 10.000000000000000, 55.000000000000000 },
- { 2.5486246072566784e+24, 10.000000000000000, 60.000000000000000 },
- { 3.8764628702155481e+26, 10.000000000000000, 65.000000000000000 },
- { 5.8592538145409686e+28, 10.000000000000000, 70.000000000000000 },
- { 8.8135370711317444e+30, 10.000000000000000, 75.000000000000000 },
- { 1.3207418268325279e+33, 10.000000000000000, 80.000000000000000 },
- { 1.9732791360862190e+35, 10.000000000000000, 85.000000000000000 },
- { 2.9411893748384672e+37, 10.000000000000000, 90.000000000000000 },
- { 4.3754494922439984e+39, 10.000000000000000, 95.000000000000000 },
- { 6.4989755247201446e+41, 10.000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+ { 0.0045800444191760525, 10.000000000000000, 5.0000000000000000, 0.0 },
+ { 21.891706163723381, 10.000000000000000, 10.000000000000000, 0.0 },
+ { 12267.475049806462, 10.000000000000000, 15.000000000000000, 0.0 },
+ { 3540200.2090195213, 10.000000000000000, 20.000000000000000, 0.0 },
+ { 771298871.17072666, 10.000000000000000, 25.000000000000000, 0.0 },
+ { 145831809975.96710, 10.000000000000000, 30.000000000000000, 0.0 },
+ { 25449470018534.777, 10.000000000000000, 35.000000000000000, 0.0 },
+ { 4228469210516757.5, 10.000000000000000, 40.000000000000000, 0.0 },
+ { 6.8049404557505165e+17, 10.000000000000000, 45.000000000000000, 0.0 },
+ { 1.0715971594776370e+20, 10.000000000000000, 50.000000000000000, 0.0 },
+ { 1.6618215752886714e+22, 10.000000000000000, 55.000000000000000, 0.0 },
+ { 2.5486246072566784e+24, 10.000000000000000, 60.000000000000000, 0.0 },
+ { 3.8764628702155481e+26, 10.000000000000000, 65.000000000000000, 0.0 },
+ { 5.8592538145409686e+28, 10.000000000000000, 70.000000000000000, 0.0 },
+ { 8.8135370711317444e+30, 10.000000000000000, 75.000000000000000, 0.0 },
+ { 1.3207418268325279e+33, 10.000000000000000, 80.000000000000000, 0.0 },
+ { 1.9732791360862190e+35, 10.000000000000000, 85.000000000000000, 0.0 },
+ { 2.9411893748384672e+37, 10.000000000000000, 90.000000000000000, 0.0 },
+ { 4.3754494922439984e+39, 10.000000000000000, 95.000000000000000, 0.0 },
+ { 6.4989755247201446e+41, 10.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler017 = 2.5000000000000020e-13;
+const double toler023 = 5.0000000000000034e-10;
// Test data for nu=20.000000000000000.
// max(|f - f_GSL|): 1.9342813113834067e+25
-// max(|f - f_GSL| / |f_GSL|): 4.7061265485304859e-15
+// max(|f - f_GSL| / |f_GSL|): 3.9606109628538328e-11
+// mean(f - f_GSL): 1.0141861845472220e+24
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data018[21] =
+data024[21] =
{
- { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
- { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000 },
- { 0.00012507997356449481, 20.000000000000000, 10.000000000000000 },
- { 1.6470152535015836, 20.000000000000000, 15.000000000000000 },
- { 3188.7503288536154, 20.000000000000000, 20.000000000000000 },
- { 2449840.5422952301, 20.000000000000000, 25.000000000000000 },
- { 1126985104.4483771, 20.000000000000000, 30.000000000000000 },
- { 379617876611.88580, 20.000000000000000, 35.000000000000000 },
- { 104459633129479.89, 20.000000000000000, 40.000000000000000 },
- { 25039579987216524., 20.000000000000000, 45.000000000000000 },
- { 5.4420084027529984e+18, 20.000000000000000, 50.000000000000000 },
- { 1.1007498584335495e+21, 20.000000000000000, 55.000000000000000 },
- { 2.1091734863057236e+23, 20.000000000000000, 60.000000000000000 },
- { 3.8763618091286899e+25, 20.000000000000000, 65.000000000000000 },
- { 6.8946130527930870e+27, 20.000000000000000, 70.000000000000000 },
- { 1.1946319948836447e+30, 20.000000000000000, 75.000000000000000 },
- { 2.0265314377577587e+32, 20.000000000000000, 80.000000000000000 },
- { 3.3784665214179985e+34, 20.000000000000000, 85.000000000000000 },
- { 5.5516089411796646e+36, 20.000000000000000, 90.000000000000000 },
- { 9.0129310795305151e+38, 20.000000000000000, 95.000000000000000 },
- { 1.4483461256427176e+41, 20.000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+ { 5.0242393579718066e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+ { 0.00012507997356449481, 20.000000000000000, 10.000000000000000, 0.0 },
+ { 1.6470152535015836, 20.000000000000000, 15.000000000000000, 0.0 },
+ { 3188.7503288536154, 20.000000000000000, 20.000000000000000, 0.0 },
+ { 2449840.5422952301, 20.000000000000000, 25.000000000000000, 0.0 },
+ { 1126985104.4483771, 20.000000000000000, 30.000000000000000, 0.0 },
+ { 379617876611.88580, 20.000000000000000, 35.000000000000000, 0.0 },
+ { 104459633129479.89, 20.000000000000000, 40.000000000000000, 0.0 },
+ { 25039579987216524., 20.000000000000000, 45.000000000000000, 0.0 },
+ { 5.4420084027529984e+18, 20.000000000000000, 50.000000000000000, 0.0 },
+ { 1.1007498584335495e+21, 20.000000000000000, 55.000000000000000, 0.0 },
+ { 2.1091734863057236e+23, 20.000000000000000, 60.000000000000000, 0.0 },
+ { 3.8763618091286899e+25, 20.000000000000000, 65.000000000000000, 0.0 },
+ { 6.8946130527930870e+27, 20.000000000000000, 70.000000000000000, 0.0 },
+ { 1.1946319948836447e+30, 20.000000000000000, 75.000000000000000, 0.0 },
+ { 2.0265314377577587e+32, 20.000000000000000, 80.000000000000000, 0.0 },
+ { 3.3784665214179985e+34, 20.000000000000000, 85.000000000000000, 0.0 },
+ { 5.5516089411796646e+36, 20.000000000000000, 90.000000000000000, 0.0 },
+ { 9.0129310795305151e+38, 20.000000000000000, 95.000000000000000, 0.0 },
+ { 1.4483461256427176e+41, 20.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler018 = 2.5000000000000020e-13;
+const double toler024 = 2.5000000000000013e-09;
// Test data for nu=50.000000000000000.
// max(|f - f_GSL|): 4.5452777397620335e+22
-// max(|f - f_GSL| / |f_GSL|): 6.0191728870880627e-14
+// max(|f - f_GSL| / |f_GSL|): 2.3721930437630550e-10
+// mean(f - f_GSL): 2.1526674177600442e+21
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_i<double>
-data019[21] =
+data025[21] =
{
- { 0.0000000000000000, 50.000000000000000, 0.0000000000000000 },
- { 2.9314696468108517e-45, 50.000000000000000, 5.0000000000000000 },
- { 4.7568945607268442e-30, 50.000000000000000, 10.000000000000000 },
- { 5.5468372730667069e-21, 50.000000000000000, 15.000000000000000 },
- { 2.2551205757604056e-14, 50.000000000000000, 20.000000000000000 },
- { 4.5344251866130257e-09, 50.000000000000000, 25.000000000000000 },
- { 0.00014590106916468940, 50.000000000000000, 30.000000000000000 },
- { 1.3965549457254882, 50.000000000000000, 35.000000000000000 },
- { 5726.8656631289896, 50.000000000000000, 40.000000000000000 },
- { 12672593.113027781, 50.000000000000000, 45.000000000000000 },
- { 17650802430.016712, 50.000000000000000, 50.000000000000000 },
- { 17220231607789.926, 50.000000000000000, 55.000000000000000 },
- { 12704607933652176., 50.000000000000000, 60.000000000000000 },
- { 7.4989491942193725e+18, 50.000000000000000, 65.000000000000000 },
- { 3.6944034898904922e+21, 50.000000000000000, 70.000000000000000 },
- { 1.5691634774370186e+24, 50.000000000000000, 75.000000000000000 },
- { 5.8927749458163587e+26, 50.000000000000000, 80.000000000000000 },
- { 1.9958849054749339e+29, 50.000000000000000, 85.000000000000000 },
- { 6.1946050361781500e+31, 50.000000000000000, 90.000000000000000 },
- { 1.7845429728697119e+34, 50.000000000000000, 95.000000000000000 },
- { 4.8219580855940819e+36, 50.000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 50.000000000000000, 0.0000000000000000, 0.0 },
+ { 2.9314696468108517e-45, 50.000000000000000, 5.0000000000000000, 0.0 },
+ { 4.7568945607268442e-30, 50.000000000000000, 10.000000000000000, 0.0 },
+ { 5.5468372730667069e-21, 50.000000000000000, 15.000000000000000, 0.0 },
+ { 2.2551205757604056e-14, 50.000000000000000, 20.000000000000000, 0.0 },
+ { 4.5344251866130257e-09, 50.000000000000000, 25.000000000000000, 0.0 },
+ { 0.00014590106916468940, 50.000000000000000, 30.000000000000000, 0.0 },
+ { 1.3965549457254882, 50.000000000000000, 35.000000000000000, 0.0 },
+ { 5726.8656631289896, 50.000000000000000, 40.000000000000000, 0.0 },
+ { 12672593.113027781, 50.000000000000000, 45.000000000000000, 0.0 },
+ { 17650802430.016712, 50.000000000000000, 50.000000000000000, 0.0 },
+ { 17220231607789.926, 50.000000000000000, 55.000000000000000, 0.0 },
+ { 12704607933652176., 50.000000000000000, 60.000000000000000, 0.0 },
+ { 7.4989491942193725e+18, 50.000000000000000, 65.000000000000000, 0.0 },
+ { 3.6944034898904922e+21, 50.000000000000000, 70.000000000000000, 0.0 },
+ { 1.5691634774370186e+24, 50.000000000000000, 75.000000000000000, 0.0 },
+ { 5.8927749458163587e+26, 50.000000000000000, 80.000000000000000, 0.0 },
+ { 1.9958849054749339e+29, 50.000000000000000, 85.000000000000000, 0.0 },
+ { 6.1946050361781500e+31, 50.000000000000000, 90.000000000000000, 0.0 },
+ { 1.7845429728697119e+34, 50.000000000000000, 95.000000000000000, 0.0 },
+ { 4.8219580855940819e+36, 50.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler019 = 5.0000000000000029e-12;
+const double toler025 = 2.5000000000000012e-08;
// Test data for nu=100.00000000000000.
// max(|f - f_GSL|): 186646528.00000000
// max(|f - f_GSL| / |f_GSL|): 2.8278213985558577e-13
+// mean(f - f_GSL): 8905298.3965622503
+// variance(f - f_GSL): 4.2527187469120471e+19
+// stddev(f - f_GSL): 6521287255.5286560
const testcase_cyl_bessel_i<double>
-data020[21] =
+data026[21] =
{
- { 0.0000000000000000, 100.00000000000000, 0.0000000000000000 },
- { 7.0935514885313123e-119, 100.00000000000000, 5.0000000000000000 },
- { 1.0823442017492018e-88, 100.00000000000000, 10.000000000000000 },
- { 5.9887888536468904e-71, 100.00000000000000, 15.000000000000000 },
- { 2.8703193216428771e-58, 100.00000000000000, 20.000000000000000 },
- { 2.4426896913122370e-48, 100.00000000000000, 25.000000000000000 },
- { 3.9476420053334271e-40, 100.00000000000000, 30.000000000000000 },
- { 4.2836596180818780e-33, 100.00000000000000, 35.000000000000000 },
- { 6.6249380222596129e-27, 100.00000000000000, 40.000000000000000 },
- { 2.3702587262788900e-21, 100.00000000000000, 45.000000000000000 },
- { 2.7278879470966917e-16, 100.00000000000000, 50.000000000000000 },
- { 1.2763258878228082e-11, 100.00000000000000, 55.000000000000000 },
- { 2.8832770906491972e-07, 100.00000000000000, 60.000000000000000 },
- { 0.0035805902717061227, 100.00000000000000, 65.000000000000000 },
- { 27.017219102595387, 100.00000000000000, 70.000000000000000 },
- { 134001.44891209516, 100.00000000000000, 75.000000000000000 },
- { 465194832.85060996, 100.00000000000000, 80.000000000000000 },
- { 1189280653119.4814, 100.00000000000000, 85.000000000000000 },
- { 2334119331258728.0, 100.00000000000000, 90.000000000000000 },
- { 3.6399223078502436e+18, 100.00000000000000, 95.000000000000000 },
- { 4.6415349416162005e+21, 100.00000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 100.00000000000000, 0.0000000000000000, 0.0 },
+ { 7.0935514885313123e-119, 100.00000000000000, 5.0000000000000000, 0.0 },
+ { 1.0823442017492018e-88, 100.00000000000000, 10.000000000000000, 0.0 },
+ { 5.9887888536468904e-71, 100.00000000000000, 15.000000000000000, 0.0 },
+ { 2.8703193216428771e-58, 100.00000000000000, 20.000000000000000, 0.0 },
+ { 2.4426896913122370e-48, 100.00000000000000, 25.000000000000000, 0.0 },
+ { 3.9476420053334271e-40, 100.00000000000000, 30.000000000000000, 0.0 },
+ { 4.2836596180818780e-33, 100.00000000000000, 35.000000000000000, 0.0 },
+ { 6.6249380222596129e-27, 100.00000000000000, 40.000000000000000, 0.0 },
+ { 2.3702587262788900e-21, 100.00000000000000, 45.000000000000000, 0.0 },
+ { 2.7278879470966917e-16, 100.00000000000000, 50.000000000000000, 0.0 },
+ { 1.2763258878228082e-11, 100.00000000000000, 55.000000000000000, 0.0 },
+ { 2.8832770906491972e-07, 100.00000000000000, 60.000000000000000, 0.0 },
+ { 0.0035805902717061227, 100.00000000000000, 65.000000000000000, 0.0 },
+ { 27.017219102595387, 100.00000000000000, 70.000000000000000, 0.0 },
+ { 134001.44891209516, 100.00000000000000, 75.000000000000000, 0.0 },
+ { 465194832.85060996, 100.00000000000000, 80.000000000000000, 0.0 },
+ { 1189280653119.4814, 100.00000000000000, 85.000000000000000, 0.0 },
+ { 2334119331258728.0, 100.00000000000000, 90.000000000000000, 0.0 },
+ { 3.6399223078502436e+18, 100.00000000000000, 95.000000000000000, 0.0 },
+ { 4.6415349416162005e+21, 100.00000000000000, 100.00000000000000, 0.0 },
};
-const double toler020 = 2.5000000000000014e-11;
+const double toler026 = 2.5000000000000014e-11;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_cyl_bessel_i<Tp> (&data)[Num], Tp toler)
+ test(const testcase_cyl_bessel_i<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::cyl_bessel_i(data[i].nu, data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f = std::cyl_bessel_i(data[i].nu, data[i].x);
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
@@ -689,5 +953,11 @@ main()
test(data018, toler018);
test(data019, toler019);
test(data020, toler020);
+ test(data021, toler021);
+ test(data022, toler022);
+ test(data023, toler023);
+ test(data024, toler024);
+ test(data025, toler025);
+ test(data026, toler026);
return 0;
}
diff --git a/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc b/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc
index e4a2ef46281..aa53baf867e 100644
--- a/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc
+++ b/libstdc++-v3/testsuite/special_functions/07_cyl_bessel_i/pr56216.cc
@@ -1,6 +1,7 @@
// { dg-do run { target c++11 } }
// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
-// Copyright (C) 2015 Free Software Foundation, Inc.
+//
+// Copyright (C) 2013-2016 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
@@ -21,6 +22,7 @@
#include <testsuite_hooks.h>
#include <cmath>
+#include <iostream>
void
test01()
diff --git a/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_origin.cc b/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_origin.cc
new file mode 100644
index 00000000000..1c439406065
--- /dev/null
+++ b/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_origin.cc
@@ -0,0 +1,47 @@
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <testsuite_hooks.h>
+#include <cmath>
+#include <iostream>
+
+void
+test01()
+{
+ const double inf = std::numeric_limits<double>::infinity();
+ double jm1o2 = std::cyl_bessel_j(-0.5, 0.0);
+ double jm1 = std::cyl_bessel_j(-1.0, 0.0);
+ double jm3o2 = std::cyl_bessel_j(-1.5, 0.0);
+ double jm2 = std::cyl_bessel_j(-2.0, 0.0);
+
+ bool test [[gnu::unused]] = true;
+ VERIFY(jm1o2 == inf);
+ VERIFY(jm1 == 0.0);
+ VERIFY(jm3o2 == -inf);
+ VERIFY(jm2 == 0.0);
+}
+
+int
+main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc b/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
index 1c7c16a85b9..afd84cc2b72 100644
--- a/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_value.cc
@@ -38,627 +38,883 @@
#include <specfun_testcase.h>
-// Test data for nu=0.0000000000000000.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 6.5276306654894409e-16
+// Test data for nu=-5.0000000000000000.
+// max(|f - f_Boost|): 1.1102230246251565e-16
+// max(|f - f_Boost| / |f_Boost|): 1.1449301029630651e-15
+// mean(f - f_Boost): 1.5924219408380846e-18
+// variance(f - f_Boost): 1.7119294862359788e-34
+// stddev(f - f_Boost): 1.3084072325678955e-17
const testcase_cyl_bessel_j<double>
data001[21] =
{
- { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
- { 0.98443592929585266, 0.0000000000000000, 0.25000000000000000 },
- { 0.93846980724081297, 0.0000000000000000, 0.50000000000000000 },
- { 0.86424227516664853, 0.0000000000000000, 0.75000000000000000 },
- { 0.76519768655796661, 0.0000000000000000, 1.0000000000000000 },
- { 0.64590608527128535, 0.0000000000000000, 1.2500000000000000 },
- { 0.51182767173591814, 0.0000000000000000, 1.5000000000000000 },
- { 0.36903253018515075, 0.0000000000000000, 1.7500000000000000 },
- { 0.22389077914123562, 0.0000000000000000, 2.0000000000000000 },
- { 0.082749851288734022, 0.0000000000000000, 2.2500000000000000 },
- { -0.048383776468197998, 0.0000000000000000, 2.5000000000000000 },
- { -0.16414142780851368, 0.0000000000000000, 2.7500000000000000 },
- { -0.26005195490193334, 0.0000000000000000, 3.0000000000000000 },
- { -0.33275080217061132, 0.0000000000000000, 3.2500000000000000 },
- { -0.38012773998726335, 0.0000000000000000, 3.5000000000000000 },
- { -0.40140605493617426, 0.0000000000000000, 3.7500000000000000 },
- { -0.39714980986384740, 0.0000000000000000, 4.0000000000000000 },
- { -0.36919977029989554, 0.0000000000000000, 4.2500000000000000 },
- { -0.32054250898512149, 0.0000000000000000, 4.5000000000000000 },
- { -0.25512082749137405, 0.0000000000000000, 4.7500000000000000 },
- { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, -5.0000000000000000, 0.0000000000000000, 0.0 },
+ { -2.5365161587472413e-07, -5.0000000000000000, 0.25000000000000000, 0.0 },
+ { -8.0536272413574736e-06, -5.0000000000000000, 0.50000000000000000, 0.0 },
+ { -6.0364166510576438e-05, -5.0000000000000000, 0.75000000000000000, 0.0 },
+ { -0.00024975773021123444, -5.0000000000000000, 1.0000000000000000, 0.0 },
+ { -0.00074440885254749810, -5.0000000000000000, 1.2500000000000000, 0.0 },
+ { -0.0017994217673606111, -5.0000000000000000, 1.5000000000000000, 0.0 },
+ { -0.0037577257273157128, -5.0000000000000000, 1.7500000000000000, 0.0 },
+ { -0.0070396297558716851, -5.0000000000000000, 2.0000000000000000, 0.0 },
+ { -0.012121078633445755, -5.0000000000000000, 2.2500000000000000, 0.0 },
+ { -0.019501625134503219, -5.0000000000000000, 2.5000000000000000, 0.0 },
+ { -0.029664058320006174, -5.0000000000000000, 2.7500000000000000, 0.0 },
+ { -0.043028434877047585, -5.0000000000000000, 3.0000000000000000, 0.0 },
+ { -0.059903888098560426, -5.0000000000000000, 3.2500000000000000, 0.0 },
+ { -0.080441986647991778, -5.0000000000000000, 3.5000000000000000, 0.0 },
+ { -0.10459554742314070, -5.0000000000000000, 3.7500000000000000, 0.0 },
+ { -0.13208665604709827, -5.0000000000000000, 4.0000000000000000, 0.0 },
+ { -0.16238721643623680, -5.0000000000000000, 4.2500000000000000, 0.0 },
+ { -0.19471465863871368, -5.0000000000000000, 4.5000000000000000, 0.0 },
+ { -0.22804452118769436, -5.0000000000000000, 4.7500000000000000, 0.0 },
+ { -0.26114054612017007, -5.0000000000000000, 5.0000000000000000, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
-// Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 7.7715611723760958e-16
-// max(|f - f_GSL| / |f_GSL|): 1.2121143083098064e-15
+// Test data for nu=-2.0000000000000000.
+// max(|f - f_Boost|): 5.5511151231257827e-16
+// max(|f - f_Boost| / |f_Boost|): 1.6650269452322871e-15
+// mean(f - f_Boost): 5.1628674880262117e-18
+// variance(f - f_Boost): 9.8929694126678068e-35
+// stddev(f - f_Boost): 9.9463407405275467e-18
const testcase_cyl_bessel_j<double>
data002[21] =
{
- { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
- { 0.55338359549647709, 0.33333333333333331, 0.25000000000000000 },
- { 0.67283082949794537, 0.33333333333333331, 0.50000000000000000 },
- { 0.72490863199379008, 0.33333333333333331, 0.75000000000000000 },
- { 0.73087640216944760, 0.33333333333333331, 1.0000000000000000 },
- { 0.69953374433894455, 0.33333333333333331, 1.2500000000000000 },
- { 0.63713263706489176, 0.33333333333333331, 1.5000000000000000 },
- { 0.54956352730788460, 0.33333333333333331, 1.7500000000000000 },
- { 0.44293981814857586, 0.33333333333333331, 2.0000000000000000 },
- { 0.32366988946292502, 0.33333333333333331, 2.2500000000000000 },
- { 0.19832093341860796, 0.33333333333333331, 2.5000000000000000 },
- { 0.073389637874297489, 0.33333333333333331, 2.7500000000000000 },
- { -0.044963820940233351, 0.33333333333333331, 3.0000000000000000 },
- { -0.15118395956666372, 0.33333333333333331, 3.2500000000000000 },
- { -0.24056593952693625, 0.33333333333333331, 3.5000000000000000 },
- { -0.30946094681921288, 0.33333333333333331, 3.7500000000000000 },
- { -0.35542737345457609, 0.33333333333333331, 4.0000000000000000 },
- { -0.37731852825457068, 0.33333333333333331, 4.2500000000000000 },
- { -0.37530189159358079, 0.33333333333333331, 4.5000000000000000 },
- { -0.35080916720916927, 0.33333333333333331, 4.7500000000000000 },
- { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000 },
+ { 0.0000000000000000, -2.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.0077718892859626769, -2.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.030604023458682642, -2.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.067073997299650551, -2.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.11490348493190047, -2.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.17109113124052347, -2.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.23208767214421472, -2.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.29400312425941211, -2.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.35283402861563773, -2.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.40469757684189722, -2.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.44605905843961724, -2.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.47393946632335171, -2.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.48609126058589108, -2.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.48113214864150622, -2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.45862918419430748, -2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.41912837447200352, -2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.36412814585207282, -2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.29599826772185178, -2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.21784898368584560, -2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.13335796490311691, -2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.046565116277752214, -2.0000000000000000, 5.0000000000000000, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
-// Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 7.7715611723760958e-16
-// max(|f - f_GSL| / |f_GSL|): 1.1959227189513475e-15
+// Test data for nu=-1.0000000000000000.
+// max(|f - f_Boost|): 1.6653345369377348e-16
+// max(|f - f_Boost| / |f_Boost|): 7.1372564160719618e-16
+// mean(f - f_Boost): 1.6851599480917553e-17
+// variance(f - f_Boost): 1.7655790807139234e-33
+// stddev(f - f_Boost): 4.2018794374826171e-17
const testcase_cyl_bessel_j<double>
data003[21] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
- { 0.39479959874136972, 0.50000000000000000, 0.25000000000000000 },
- { 0.54097378993452760, 0.50000000000000000, 0.50000000000000000 },
- { 0.62800587637588623, 0.50000000000000000, 0.75000000000000000 },
- { 0.67139670714180244, 0.50000000000000000, 1.0000000000000000 },
- { 0.67724253810014312, 0.50000000000000000, 1.2500000000000000 },
- { 0.64983807475374655, 0.50000000000000000, 1.5000000000000000 },
- { 0.59348525447147382, 0.50000000000000000, 1.7500000000000000 },
- { 0.51301613656182721, 0.50000000000000000, 2.0000000000000000 },
- { 0.41387506064759982, 0.50000000000000000, 2.2500000000000000 },
- { 0.30200490606236535, 0.50000000000000000, 2.5000000000000000 },
- { 0.18363332138431521, 0.50000000000000000, 2.7500000000000000 },
- { 0.065008182877375753, 0.50000000000000000, 3.0000000000000000 },
- { -0.047885729975898544, 0.50000000000000000, 3.2500000000000000 },
- { -0.14960456964952620, 0.50000000000000000, 3.5000000000000000 },
- { -0.23549801845815513, 0.50000000000000000, 3.7500000000000000 },
- { -0.30192051329163944, 0.50000000000000000, 4.0000000000000000 },
- { -0.34638850218952444, 0.50000000000000000, 4.2500000000000000 },
- { -0.36767487332724025, 0.50000000000000000, 4.5000000000000000 },
- { -0.36583563802350400, 0.50000000000000000, 4.7500000000000000 },
- { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000 },
+ { -0.0000000000000000, -1.0000000000000000, 0.0000000000000000, 0.0 },
+ { -0.12402597732272692, -1.0000000000000000, 0.25000000000000000, 0.0 },
+ { -0.24226845767487390, -1.0000000000000000, 0.50000000000000000, 0.0 },
+ { -0.34924360217486217, -1.0000000000000000, 0.75000000000000000, 0.0 },
+ { -0.44005058574493350, -1.0000000000000000, 1.0000000000000000, 0.0 },
+ { -0.51062326031988048, -1.0000000000000000, 1.2500000000000000, 0.0 },
+ { -0.55793650791009963, -1.0000000000000000, 1.5000000000000000, 0.0 },
+ { -0.58015619763899251, -1.0000000000000000, 1.7500000000000000, 0.0 },
+ { -0.57672480775687340, -1.0000000000000000, 2.0000000000000000, 0.0 },
+ { -0.54837835664696011, -1.0000000000000000, 2.2500000000000000, 0.0 },
+ { -0.49709410246427405, -1.0000000000000000, 2.5000000000000000, 0.0 },
+ { -0.42597230295790234, -1.0000000000000000, 2.7500000000000000, 0.0 },
+ { -0.33905895852593648, -1.0000000000000000, 3.0000000000000000, 0.0 },
+ { -0.24111968801520389, -1.0000000000000000, 3.2500000000000000, 0.0 },
+ { -0.13737752736232720, -1.0000000000000000, 3.5000000000000000, 0.0 },
+ { -0.033229349129679731, -1.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.066043328023549133, -1.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.15555319297834272, -1.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.23106043192337064, -1.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.28918679864711039, -1.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.32757913759146523, -1.0000000000000000, 5.0000000000000000, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
+// Test data for nu=-0.66666666666666663.
+// max(|f - f_Boost|): 4.4408920985006262e-16
+// max(|f - f_Boost| / |f_Boost|): 1.8025646427620713e-14
+// mean(f - f_Boost): -6.5485811218124466e-18
+// variance(f - f_Boost): 9.6867517859090657e-34
+// stddev(f - f_Boost): 3.1123547011722596e-17
+const testcase_cyl_bessel_j<double>
+data004[20] =
+{
+ { 1.4235474737365985, -0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 0.76834417648223052, -0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 0.43064264315413986, -0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 0.18834029212239417, -0.66666666666666663, 1.0000000000000000, 0.0 },
+ { -0.0048599386373513786, -0.66666666666666663, 1.2500000000000000, 0.0 },
+ { -0.16232625678952617, -0.66666666666666663, 1.5000000000000000, 0.0 },
+ { -0.28788970994642382, -0.66666666666666663, 1.7500000000000000, 0.0 },
+ { -0.38231561504110478, -0.66666666666666663, 2.0000000000000000, 0.0 },
+ { -0.44567550811097650, -0.66666666666666663, 2.2500000000000000, 0.0 },
+ { -0.47837308180342863, -0.66666666666666663, 2.5000000000000000, 0.0 },
+ { -0.48161388774393621, -0.66666666666666663, 2.7500000000000000, 0.0 },
+ { -0.45759382375633201, -0.66666666666666663, 3.0000000000000000, 0.0 },
+ { -0.40951893219441726, -0.66666666666666663, 3.2500000000000000, 0.0 },
+ { -0.34151128676443632, -0.66666666666666663, 3.5000000000000000, 0.0 },
+ { -0.25843381967118489, -0.66666666666666663, 3.7500000000000000, 0.0 },
+ { -0.16565842960756882, -0.66666666666666663, 4.0000000000000000, 0.0 },
+ { -0.068798382347306120, -0.66666666666666663, 4.2500000000000000, 0.0 },
+ { 0.026575466741052389, -0.66666666666666663, 4.5000000000000000, 0.0 },
+ { 0.11521618911989888, -0.66666666666666663, 4.7500000000000000, 0.0 },
+ { 0.19246294934259364, -0.66666666666666663, 5.0000000000000000, 0.0 },
+};
+const double toler004 = 1.0000000000000008e-12;
+
+// Test data for nu=-0.50000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16
+// max(|f - f_Boost| / |f_Boost|): 4.7885925427521325e-15
+// mean(f - f_Boost): -7.4593109467002702e-18
+// variance(f - f_Boost): 9.7058233188536413e-34
+// stddev(f - f_Boost): 3.1154170377099825e-17
+const testcase_cyl_bessel_j<double>
+data005[20] =
+{
+ { 1.5461605241060770, -0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 0.99024588024340487, -0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 0.67411792914454471, -0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 0.43109886801837610, -0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 0.22502969244466500, -0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 0.046083165893097411, -0.50000000000000000, 1.5000000000000000, 0.0 },
+ { -0.10750804524368700, -0.50000000000000000, 1.7500000000000000, 0.0 },
+ { -0.23478571040624846, -0.50000000000000000, 2.0000000000000000, 0.0 },
+ { -0.33414002338271837, -0.50000000000000000, 2.2500000000000000, 0.0 },
+ { -0.40427830223905686, -0.50000000000000000, 2.5000000000000000, 0.0 },
+ { -0.44472115119490502, -0.50000000000000000, 2.7500000000000000, 0.0 },
+ { -0.45604882079463316, -0.50000000000000000, 3.0000000000000000, 0.0 },
+ { -0.43998859501924370, -0.50000000000000000, 3.2500000000000000, 0.0 },
+ { -0.39938682536304904, -0.50000000000000000, 3.5000000000000000, 0.0 },
+ { -0.33809163836693340, -0.50000000000000000, 3.7500000000000000, 0.0 },
+ { -0.26076607667717883, -0.50000000000000000, 4.0000000000000000, 0.0 },
+ { -0.17264962544644960, -0.50000000000000000, 4.2500000000000000, 0.0 },
+ { -0.079285862862978645, -0.50000000000000000, 4.5000000000000000, 0.0 },
+ { 0.013765943019497953, -0.50000000000000000, 4.7500000000000000, 0.0 },
+ { 0.10121770918510840, -0.50000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
+
+// Test data for nu=-0.33333333333333331.
+// max(|f - f_Boost|): 7.2164496600635175e-16
+// max(|f - f_Boost| / |f_Boost|): 4.7166481411966779e-14
+// mean(f - f_Boost): -8.0317696937726164e-17
+// variance(f - f_Boost): 8.5708050483041013e-34
+// stddev(f - f_Boost): 2.9275937300629849e-17
+const testcase_cyl_bessel_j<double>
+data006[20] =
+{
+ { 1.4425215418779371, -0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 1.0644204672306241, -0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 0.81701616765906016, -0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 0.60688750504652933, -0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 0.41413104907732662, -0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 0.23489952826470231, -0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 0.070550764264068255, -0.33333333333333331, 1.7500000000000000, 0.0 },
+ { -0.075749980285132301, -0.33333333333333331, 2.0000000000000000, 0.0 },
+ { -0.20047257190891474, -0.33333333333333331, 2.2500000000000000, 0.0 },
+ { -0.30047516075736330, -0.33333333333333331, 2.5000000000000000, 0.0 },
+ { -0.37344551235826595, -0.33333333333333331, 2.7500000000000000, 0.0 },
+ { -0.41816288522189576, -0.33333333333333331, 3.0000000000000000, 0.0 },
+ { -0.43463299794669852, -0.33333333333333331, 3.2500000000000000, 0.0 },
+ { -0.42412047664732527, -0.33333333333333331, 3.5000000000000000, 0.0 },
+ { -0.38909352797096675, -0.33333333333333331, 3.7500000000000000, 0.0 },
+ { -0.33309316424600427, -0.33333333333333331, 4.0000000000000000, 0.0 },
+ { -0.26053974866228535, -0.33333333333333331, 4.2500000000000000, 0.0 },
+ { -0.17649102926536425, -0.33333333333333331, 4.5000000000000000, 0.0 },
+ { -0.086367272351869390, -0.33333333333333331, 4.7500000000000000, 0.0 },
+ { 0.0043398906180296230, -0.33333333333333331, 5.0000000000000000, 0.0 },
+};
+const double toler006 = 2.5000000000000015e-12;
+// cyl_bessel_j
+
+// Test data for nu=0.0000000000000000.
+// max(|f - f_GSL|): 1.0547118733938987e-14
+// max(|f - f_GSL| / |f_GSL|): 1.0733293243042314e-14
+// mean(f - f_GSL): -2.4867674057526574e-15
+// variance(f - f_GSL): 3.1745380698957751e-31
+// stddev(f - f_GSL): 5.6343039231974124e-16
+const testcase_cyl_bessel_j<double>
+data007[21] =
+{
+ { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.98443592929585266, 0.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.93846980724081297, 0.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.86424227516664853, 0.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.76519768655796661, 0.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.64590608527128535, 0.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.51182767173591814, 0.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.36903253018515075, 0.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.22389077914123562, 0.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.082749851288734022, 0.0000000000000000, 2.2500000000000000, 0.0 },
+ { -0.048383776468197998, 0.0000000000000000, 2.5000000000000000, 0.0 },
+ { -0.16414142780851368, 0.0000000000000000, 2.7500000000000000, 0.0 },
+ { -0.26005195490193334, 0.0000000000000000, 3.0000000000000000, 0.0 },
+ { -0.33275080217061132, 0.0000000000000000, 3.2500000000000000, 0.0 },
+ { -0.38012773998726335, 0.0000000000000000, 3.5000000000000000, 0.0 },
+ { -0.40140605493617426, 0.0000000000000000, 3.7500000000000000, 0.0 },
+ { -0.39714980986384740, 0.0000000000000000, 4.0000000000000000, 0.0 },
+ { -0.36919977029989554, 0.0000000000000000, 4.2500000000000000, 0.0 },
+ { -0.32054250898512149, 0.0000000000000000, 4.5000000000000000, 0.0 },
+ { -0.25512082749137405, 0.0000000000000000, 4.7500000000000000, 0.0 },
+ { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler007 = 1.0000000000000008e-12;
+
+// Test data for nu=0.33333333333333331.
+// max(|f - f_GSL|): 1.5543122344752192e-15
+// max(|f - f_GSL| / |f_GSL|): 2.2691684891403014e-15
+// mean(f - f_GSL): -5.2173873686997683e-16
+// variance(f - f_GSL): 6.6239666428050577e-33
+// stddev(f - f_GSL): 8.1387754870158807e-17
+const testcase_cyl_bessel_j<double>
+data008[21] =
+{
+ { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+ { 0.55338359549647709, 0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 0.67283082949794537, 0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 0.72490863199379008, 0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 0.73087640216944760, 0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 0.69953374433894455, 0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 0.63713263706489176, 0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 0.54956352730788460, 0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 0.44293981814857586, 0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 0.32366988946292502, 0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 0.19832093341860796, 0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 0.073389637874297489, 0.33333333333333331, 2.7500000000000000, 0.0 },
+ { -0.044963820940233351, 0.33333333333333331, 3.0000000000000000, 0.0 },
+ { -0.15118395956666372, 0.33333333333333331, 3.2500000000000000, 0.0 },
+ { -0.24056593952693625, 0.33333333333333331, 3.5000000000000000, 0.0 },
+ { -0.30946094681921288, 0.33333333333333331, 3.7500000000000000, 0.0 },
+ { -0.35542737345457609, 0.33333333333333331, 4.0000000000000000, 0.0 },
+ { -0.37731852825457068, 0.33333333333333331, 4.2500000000000000, 0.0 },
+ { -0.37530189159358079, 0.33333333333333331, 4.5000000000000000, 0.0 },
+ { -0.35080916720916927, 0.33333333333333331, 4.7500000000000000, 0.0 },
+ { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000, 0.0 },
+};
+const double toler008 = 2.5000000000000020e-13;
+
+// Test data for nu=0.50000000000000000.
+// max(|f - f_GSL|): 7.8825834748386114e-15
+// max(|f - f_GSL| / |f_GSL|): 1.1789444757077570e-14
+// mean(f - f_GSL): -2.8717108056598913e-15
+// variance(f - f_GSL): 4.3295295494554859e-31
+// stddev(f - f_GSL): 6.5799160704795359e-16
+const testcase_cyl_bessel_j<double>
+data009[21] =
+{
+ { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+ { 0.39479959874136972, 0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 0.54097378993452760, 0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 0.62800587637588623, 0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 0.67139670714180244, 0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 0.67724253810014312, 0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 0.64983807475374655, 0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 0.59348525447147382, 0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 0.51301613656182721, 0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 0.41387506064759982, 0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 0.30200490606236535, 0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 0.18363332138431521, 0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 0.065008182877375753, 0.50000000000000000, 3.0000000000000000, 0.0 },
+ { -0.047885729975898544, 0.50000000000000000, 3.2500000000000000, 0.0 },
+ { -0.14960456964952620, 0.50000000000000000, 3.5000000000000000, 0.0 },
+ { -0.23549801845815513, 0.50000000000000000, 3.7500000000000000, 0.0 },
+ { -0.30192051329163944, 0.50000000000000000, 4.0000000000000000, 0.0 },
+ { -0.34638850218952444, 0.50000000000000000, 4.2500000000000000, 0.0 },
+ { -0.36767487332724025, 0.50000000000000000, 4.5000000000000000, 0.0 },
+ { -0.36583563802350400, 0.50000000000000000, 4.7500000000000000, 0.0 },
+ { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler009 = 1.0000000000000008e-12;
+
// Test data for nu=0.66666666666666663.
-// max(|f - f_GSL|): 7.7715611723760958e-16
-// max(|f - f_GSL| / |f_GSL|): 1.4163878424300161e-15
+// max(|f - f_GSL|): 1.6653345369377348e-15
+// max(|f - f_GSL| / |f_GSL|): 2.7451923323964903e-15
+// mean(f - f_GSL): -6.4366501546720383e-16
+// variance(f - f_GSL): 2.5664483884155641e-32
+// stddev(f - f_GSL): 1.6020138540023816e-16
const testcase_cyl_bessel_j<double>
-data004[21] =
+data010[21] =
{
- { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
- { 0.27434438998865135, 0.66666666666666663, 0.25000000000000000 },
- { 0.42331075068448321, 0.66666666666666663, 0.50000000000000000 },
- { 0.52870551548162792, 0.66666666666666663, 0.75000000000000000 },
- { 0.59794997367362801, 0.66666666666666663, 1.0000000000000000 },
- { 0.63338726889075891, 0.66666666666666663, 1.2500000000000000 },
- { 0.63673234502877385, 0.66666666666666663, 1.5000000000000000 },
- { 0.61022230460131899, 0.66666666666666663, 1.7500000000000000 },
- { 0.55696967691913712, 0.66666666666666663, 2.0000000000000000 },
- { 0.48101276749106114, 0.66666666666666663, 2.2500000000000000 },
- { 0.38721242477084306, 0.66666666666666663, 2.5000000000000000 },
- { 0.28105724771080542, 0.66666666666666663, 2.7500000000000000 },
- { 0.16841218049067044, 0.66666666666666663, 3.0000000000000000 },
- { 0.055235893475364915, 0.66666666666666663, 3.2500000000000000 },
- { -0.052711584404031925, 0.66666666666666663, 3.5000000000000000 },
- { -0.15015178042293029, 0.66666666666666663, 3.7500000000000000 },
- { -0.23254408502670390, 0.66666666666666663, 4.0000000000000000 },
- { -0.29630067002972543, 0.66666666666666663, 4.2500000000000000 },
- { -0.33894810189777724, 0.66666666666666663, 4.5000000000000000 },
- { -0.35922706960321099, 0.66666666666666663, 4.7500000000000000 },
- { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000 },
+ { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+ { 0.27434438998865135, 0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 0.42331075068448321, 0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 0.52870551548162792, 0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 0.59794997367362801, 0.66666666666666663, 1.0000000000000000, 0.0 },
+ { 0.63338726889075891, 0.66666666666666663, 1.2500000000000000, 0.0 },
+ { 0.63673234502877385, 0.66666666666666663, 1.5000000000000000, 0.0 },
+ { 0.61022230460131899, 0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 0.55696967691913712, 0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 0.48101276749106114, 0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 0.38721242477084306, 0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 0.28105724771080542, 0.66666666666666663, 2.7500000000000000, 0.0 },
+ { 0.16841218049067044, 0.66666666666666663, 3.0000000000000000, 0.0 },
+ { 0.055235893475364915, 0.66666666666666663, 3.2500000000000000, 0.0 },
+ { -0.052711584404031925, 0.66666666666666663, 3.5000000000000000, 0.0 },
+ { -0.15015178042293029, 0.66666666666666663, 3.7500000000000000, 0.0 },
+ { -0.23254408502670390, 0.66666666666666663, 4.0000000000000000, 0.0 },
+ { -0.29630067002972543, 0.66666666666666663, 4.2500000000000000, 0.0 },
+ { -0.33894810189777724, 0.66666666666666663, 4.5000000000000000, 0.0 },
+ { -0.35922706960321099, 0.66666666666666663, 4.7500000000000000, 0.0 },
+ { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000, 0.0 },
};
-const double toler004 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000020e-13;
// Test data for nu=1.0000000000000000.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 6.7783500059747526e-16
+// max(|f - f_GSL|): 1.4321877017664519e-14
+// max(|f - f_GSL| / |f_GSL|): 2.5003884028297190e-14
+// mean(f - f_GSL): -6.3623048628444612e-15
+// variance(f - f_GSL): 2.2760670404701110e-30
+// stddev(f - f_GSL): 1.5086639919047948e-15
const testcase_cyl_bessel_j<double>
-data005[21] =
+data011[21] =
{
- { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
- { 0.12402597732272694, 1.0000000000000000, 0.25000000000000000 },
- { 0.24226845767487390, 1.0000000000000000, 0.50000000000000000 },
- { 0.34924360217486222, 1.0000000000000000, 0.75000000000000000 },
- { 0.44005058574493355, 1.0000000000000000, 1.0000000000000000 },
- { 0.51062326031988059, 1.0000000000000000, 1.2500000000000000 },
- { 0.55793650791009952, 1.0000000000000000, 1.5000000000000000 },
- { 0.58015619763899240, 1.0000000000000000, 1.7500000000000000 },
- { 0.57672480775687363, 1.0000000000000000, 2.0000000000000000 },
- { 0.54837835664696011, 1.0000000000000000, 2.2500000000000000 },
- { 0.49709410246427416, 1.0000000000000000, 2.5000000000000000 },
- { 0.42597230295790256, 1.0000000000000000, 2.7500000000000000 },
- { 0.33905895852593648, 1.0000000000000000, 3.0000000000000000 },
- { 0.24111968801520400, 1.0000000000000000, 3.2500000000000000 },
- { 0.13737752736232706, 1.0000000000000000, 3.5000000000000000 },
- { 0.033229349129679724, 1.0000000000000000, 3.7500000000000000 },
- { -0.066043328023549230, 1.0000000000000000, 4.0000000000000000 },
- { -0.15555319297834286, 1.0000000000000000, 4.2500000000000000 },
- { -0.23106043192337070, 1.0000000000000000, 4.5000000000000000 },
- { -0.28918679864711044, 1.0000000000000000, 4.7500000000000000 },
- { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.12402597732272694, 1.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.24226845767487390, 1.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.34924360217486222, 1.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.44005058574493355, 1.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.51062326031988059, 1.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.55793650791009952, 1.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.58015619763899240, 1.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.57672480775687363, 1.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.54837835664696011, 1.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.49709410246427416, 1.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.42597230295790256, 1.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.33905895852593648, 1.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.24111968801520400, 1.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.13737752736232706, 1.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.033229349129679724, 1.0000000000000000, 3.7500000000000000, 0.0 },
+ { -0.066043328023549230, 1.0000000000000000, 4.0000000000000000, 0.0 },
+ { -0.15555319297834286, 1.0000000000000000, 4.2500000000000000, 0.0 },
+ { -0.23106043192337070, 1.0000000000000000, 4.5000000000000000, 0.0 },
+ { -0.28918679864711044, 1.0000000000000000, 4.7500000000000000, 0.0 },
+ { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler005 = 2.5000000000000020e-13;
+const double toler011 = 2.5000000000000015e-12;
// Test data for nu=2.0000000000000000.
-// max(|f - f_GSL|): 5.5511151231257827e-17
-// max(|f - f_GSL| / |f_GSL|): 2.4155555971238584e-16
+// max(|f - f_GSL|): 2.6756374893466273e-14
+// max(|f - f_GSL| / |f_GSL|): 5.5243203358509814e-14
+// mean(f - f_GSL): 1.4388581265609819e-14
+// variance(f - f_GSL): 7.3449938866288985e-30
+// stddev(f - f_GSL): 2.7101649187141541e-15
const testcase_cyl_bessel_j<double>
-data006[21] =
+data012[21] =
{
- { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
- { 0.0077718892859626760, 2.0000000000000000, 0.25000000000000000 },
- { 0.030604023458682638, 2.0000000000000000, 0.50000000000000000 },
- { 0.067073997299650551, 2.0000000000000000, 0.75000000000000000 },
- { 0.11490348493190047, 2.0000000000000000, 1.0000000000000000 },
- { 0.17109113124052350, 2.0000000000000000, 1.2500000000000000 },
- { 0.23208767214421472, 2.0000000000000000, 1.5000000000000000 },
- { 0.29400312425941216, 2.0000000000000000, 1.7500000000000000 },
- { 0.35283402861563773, 2.0000000000000000, 2.0000000000000000 },
- { 0.40469757684189717, 2.0000000000000000, 2.2500000000000000 },
- { 0.44605905843961718, 2.0000000000000000, 2.5000000000000000 },
- { 0.47393946632335160, 2.0000000000000000, 2.7500000000000000 },
- { 0.48609126058589119, 2.0000000000000000, 3.0000000000000000 },
- { 0.48113214864150627, 2.0000000000000000, 3.2500000000000000 },
- { 0.45862918419430765, 2.0000000000000000, 3.5000000000000000 },
- { 0.41912837447200352, 2.0000000000000000, 3.7500000000000000 },
- { 0.36412814585207293, 2.0000000000000000, 4.0000000000000000 },
- { 0.29599826772185189, 2.0000000000000000, 4.2500000000000000 },
- { 0.21784898368584549, 2.0000000000000000, 4.5000000000000000 },
- { 0.13335796490311685, 2.0000000000000000, 4.7500000000000000 },
- { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.0077718892859626760, 2.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.030604023458682638, 2.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.067073997299650551, 2.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.11490348493190047, 2.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.17109113124052350, 2.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.23208767214421472, 2.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.29400312425941216, 2.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.35283402861563773, 2.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.40469757684189717, 2.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.44605905843961718, 2.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.47393946632335160, 2.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.48609126058589119, 2.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.48113214864150627, 2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.45862918419430765, 2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.41912837447200352, 2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.36412814585207293, 2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.29599826772185189, 2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.21784898368584549, 2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.13335796490311685, 2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler006 = 2.5000000000000020e-13;
+const double toler012 = 5.0000000000000029e-12;
// Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 1.3877787807814457e-16
-// max(|f - f_GSL| / |f_GSL|): 1.4609680807504906e-15
+// max(|f - f_GSL|): 2.8543833963112775e-13
+// max(|f - f_GSL| / |f_GSL|): 1.0942312723364073e-12
+// mean(f - f_GSL): -6.9819221579109992e-14
+// variance(f - f_GSL): 2.4408092136503232e-27
+// stddev(f - f_GSL): 4.9404546487649526e-14
const testcase_cyl_bessel_j<double>
-data007[21] =
+data013[21] =
{
- { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
- { 2.5365161587472413e-07, 5.0000000000000000, 0.25000000000000000 },
- { 8.0536272413574753e-06, 5.0000000000000000, 0.50000000000000000 },
- { 6.0364166510576438e-05, 5.0000000000000000, 0.75000000000000000 },
- { 0.00024975773021123450, 5.0000000000000000, 1.0000000000000000 },
- { 0.00074440885254749821, 5.0000000000000000, 1.2500000000000000 },
- { 0.0017994217673606111, 5.0000000000000000, 1.5000000000000000 },
- { 0.0037577257273157133, 5.0000000000000000, 1.7500000000000000 },
- { 0.0070396297558716842, 5.0000000000000000, 2.0000000000000000 },
- { 0.012121078633445751, 5.0000000000000000, 2.2500000000000000 },
- { 0.019501625134503223, 5.0000000000000000, 2.5000000000000000 },
- { 0.029664058320006174, 5.0000000000000000, 2.7500000000000000 },
- { 0.043028434877047578, 5.0000000000000000, 3.0000000000000000 },
- { 0.059903888098560426, 5.0000000000000000, 3.2500000000000000 },
- { 0.080441986647991792, 5.0000000000000000, 3.5000000000000000 },
- { 0.10459554742314070, 5.0000000000000000, 3.7500000000000000 },
- { 0.13208665604709827, 5.0000000000000000, 4.0000000000000000 },
- { 0.16238721643623680, 5.0000000000000000, 4.2500000000000000 },
- { 0.19471465863871368, 5.0000000000000000, 4.5000000000000000 },
- { 0.22804452118769436, 5.0000000000000000, 4.7500000000000000 },
- { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+ { 2.5365161587472413e-07, 5.0000000000000000, 0.25000000000000000, 0.0 },
+ { 8.0536272413574753e-06, 5.0000000000000000, 0.50000000000000000, 0.0 },
+ { 6.0364166510576438e-05, 5.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.00024975773021123450, 5.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.00074440885254749821, 5.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.0017994217673606111, 5.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.0037577257273157133, 5.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.0070396297558716842, 5.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.012121078633445751, 5.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.019501625134503223, 5.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.029664058320006174, 5.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.043028434877047578, 5.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.059903888098560426, 5.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.080441986647991792, 5.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.10459554742314070, 5.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.13208665604709827, 5.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.16238721643623680, 5.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.19471465863871368, 5.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.22804452118769436, 5.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 1.0000000000000006e-10;
// Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 3.2526065174565133e-18
-// max(|f - f_GSL| / |f_GSL|): 3.9336732209858561e-15
+// max(|f - f_GSL|): 1.3691738715015944e-14
+// max(|f - f_GSL| / |f_GSL|): 9.3299164045590304e-12
+// mean(f - f_GSL): -1.6527097650992825e-15
+// variance(f - f_GSL): 7.6092564479889033e-30
+// stddev(f - f_GSL): 2.7584880728378911e-15
const testcase_cyl_bessel_j<double>
-data008[21] =
+data014[21] =
{
- { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
- { 2.5628321598050096e-16, 10.000000000000000, 0.25000000000000000 },
- { 2.6131773608228023e-13, 10.000000000000000, 0.50000000000000000 },
- { 1.4962171311759677e-11, 10.000000000000000, 0.75000000000000000 },
- { 2.6306151236874524e-10, 10.000000000000000, 1.0000000000000000 },
- { 2.4187548221114514e-09, 10.000000000000000, 1.2500000000000000 },
- { 1.4743269078039996e-08, 10.000000000000000, 1.5000000000000000 },
- { 6.7608502849897560e-08, 10.000000000000000, 1.7500000000000000 },
- { 2.5153862827167358e-07, 10.000000000000000, 2.0000000000000000 },
- { 7.9717051583730038e-07, 10.000000000000000, 2.2500000000000000 },
- { 2.2247284173983839e-06, 10.000000000000000, 2.5000000000000000 },
- { 5.5985475639210430e-06, 10.000000000000000, 2.7500000000000000 },
- { 1.2928351645715880e-05, 10.000000000000000, 3.0000000000000000 },
- { 2.7761691354244538e-05, 10.000000000000000, 3.2500000000000000 },
- { 5.6009495875078844e-05, 10.000000000000000, 3.5000000000000000 },
- { 0.00010703761729231951, 10.000000000000000, 3.7500000000000000 },
- { 0.00019504055466003446, 10.000000000000000, 4.0000000000000000 },
- { 0.00034068888474064193, 10.000000000000000, 4.2500000000000000 },
- { 0.00057300977667164505, 10.000000000000000, 4.5000000000000000 },
- { 0.00093142172588886810, 10.000000000000000, 4.7500000000000000 },
- { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+ { 2.5628321598050096e-16, 10.000000000000000, 0.25000000000000000, 0.0 },
+ { 2.6131773608228023e-13, 10.000000000000000, 0.50000000000000000, 0.0 },
+ { 1.4962171311759677e-11, 10.000000000000000, 0.75000000000000000, 0.0 },
+ { 2.6306151236874524e-10, 10.000000000000000, 1.0000000000000000, 0.0 },
+ { 2.4187548221114514e-09, 10.000000000000000, 1.2500000000000000, 0.0 },
+ { 1.4743269078039996e-08, 10.000000000000000, 1.5000000000000000, 0.0 },
+ { 6.7608502849897560e-08, 10.000000000000000, 1.7500000000000000, 0.0 },
+ { 2.5153862827167358e-07, 10.000000000000000, 2.0000000000000000, 0.0 },
+ { 7.9717051583730038e-07, 10.000000000000000, 2.2500000000000000, 0.0 },
+ { 2.2247284173983839e-06, 10.000000000000000, 2.5000000000000000, 0.0 },
+ { 5.5985475639210430e-06, 10.000000000000000, 2.7500000000000000, 0.0 },
+ { 1.2928351645715880e-05, 10.000000000000000, 3.0000000000000000, 0.0 },
+ { 2.7761691354244538e-05, 10.000000000000000, 3.2500000000000000, 0.0 },
+ { 5.6009495875078844e-05, 10.000000000000000, 3.5000000000000000, 0.0 },
+ { 0.00010703761729231951, 10.000000000000000, 3.7500000000000000, 0.0 },
+ { 0.00019504055466003446, 10.000000000000000, 4.0000000000000000, 0.0 },
+ { 0.00034068888474064193, 10.000000000000000, 4.2500000000000000, 0.0 },
+ { 0.00057300977667164505, 10.000000000000000, 4.5000000000000000, 0.0 },
+ { 0.00093142172588886810, 10.000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 5.0000000000000034e-10;
// Test data for nu=20.000000000000000.
-// max(|f - f_GSL|): 1.9387045606711586e-26
-// max(|f - f_GSL| / |f_GSL|): 2.1275572270326799e-15
+// max(|f - f_GSL|): 1.0972163084603778e-21
+// max(|f - f_GSL| / |f_GSL|): 3.9607740035628117e-11
+// mean(f - f_GSL): 8.1387896213733814e-23
+// variance(f - f_GSL): 5.4175136564195730e-44
+// stddev(f - f_GSL): 2.3275552961035260e-22
const testcase_cyl_bessel_j<double>
-data009[21] =
+data015[21] =
{
- { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
- { 3.5624805510586969e-37, 20.000000000000000, 0.25000000000000000 },
- { 3.7272019617047132e-31, 20.000000000000000, 0.50000000000000000 },
- { 1.2347870693633488e-27, 20.000000000000000, 0.75000000000000000 },
- { 3.8735030085246562e-25, 20.000000000000000, 1.0000000000000000 },
- { 3.3372897667043766e-23, 20.000000000000000, 1.2500000000000000 },
- { 1.2689972189332558e-21, 20.000000000000000, 1.5000000000000000 },
- { 2.7427715944032989e-20, 20.000000000000000, 1.7500000000000000 },
- { 3.9189728050907524e-19, 20.000000000000000, 2.0000000000000000 },
- { 4.0805232551365158e-18, 20.000000000000000, 2.2500000000000000 },
- { 3.3090793836587786e-17, 20.000000000000000, 2.5000000000000000 },
- { 2.1915404680645990e-16, 20.000000000000000, 2.7500000000000000 },
- { 1.2275946737992981e-15, 20.000000000000000, 3.0000000000000000 },
- { 5.9727663938305382e-15, 20.000000000000000, 3.2500000000000000 },
- { 2.5768553102807590e-14, 20.000000000000000, 3.5000000000000000 },
- { 1.0021112208287217e-13, 20.000000000000000, 3.7500000000000000 },
- { 3.5595116285938516e-13, 20.000000000000000, 4.0000000000000000 },
- { 1.1673622958555074e-12, 20.000000000000000, 4.2500000000000000 },
- { 3.5665470983611762e-12, 20.000000000000000, 4.5000000000000000 },
- { 1.0227564044880958e-11, 20.000000000000000, 4.7500000000000000 },
- { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000 },
+ { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+ { 3.5624805510586969e-37, 20.000000000000000, 0.25000000000000000, 0.0 },
+ { 3.7272019617047132e-31, 20.000000000000000, 0.50000000000000000, 0.0 },
+ { 1.2347870693633488e-27, 20.000000000000000, 0.75000000000000000, 0.0 },
+ { 3.8735030085246562e-25, 20.000000000000000, 1.0000000000000000, 0.0 },
+ { 3.3372897667043766e-23, 20.000000000000000, 1.2500000000000000, 0.0 },
+ { 1.2689972189332558e-21, 20.000000000000000, 1.5000000000000000, 0.0 },
+ { 2.7427715944032989e-20, 20.000000000000000, 1.7500000000000000, 0.0 },
+ { 3.9189728050907524e-19, 20.000000000000000, 2.0000000000000000, 0.0 },
+ { 4.0805232551365158e-18, 20.000000000000000, 2.2500000000000000, 0.0 },
+ { 3.3090793836587786e-17, 20.000000000000000, 2.5000000000000000, 0.0 },
+ { 2.1915404680645990e-16, 20.000000000000000, 2.7500000000000000, 0.0 },
+ { 1.2275946737992981e-15, 20.000000000000000, 3.0000000000000000, 0.0 },
+ { 5.9727663938305382e-15, 20.000000000000000, 3.2500000000000000, 0.0 },
+ { 2.5768553102807590e-14, 20.000000000000000, 3.5000000000000000, 0.0 },
+ { 1.0021112208287217e-13, 20.000000000000000, 3.7500000000000000, 0.0 },
+ { 3.5595116285938516e-13, 20.000000000000000, 4.0000000000000000, 0.0 },
+ { 1.1673622958555074e-12, 20.000000000000000, 4.2500000000000000, 0.0 },
+ { 3.5665470983611762e-12, 20.000000000000000, 4.5000000000000000, 0.0 },
+ { 1.0227564044880958e-11, 20.000000000000000, 4.7500000000000000, 0.0 },
+ { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 2.5000000000000013e-09;
// cyl_bessel_j
// Test data for nu=0.0000000000000000.
// max(|f - f_GSL|): 7.6709472107694410e-15
// max(|f - f_GSL| / |f_GSL|): 4.1048891312746575e-13
+// mean(f - f_GSL): -4.7824674115084406e-16
+// variance(f - f_GSL): 9.0417928596917864e-31
+// stddev(f - f_GSL): 9.5088342396383096e-16
const testcase_cyl_bessel_j<double>
-data010[21] =
+data016[21] =
{
- { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000 },
- { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000 },
- { -0.24593576445134835, 0.0000000000000000, 10.000000000000000 },
- { -0.014224472826780771, 0.0000000000000000, 15.000000000000000 },
- { 0.16702466434058319, 0.0000000000000000, 20.000000000000000 },
- { 0.096266783275958154, 0.0000000000000000, 25.000000000000000 },
- { -0.086367983581040142, 0.0000000000000000, 30.000000000000000 },
- { -0.12684568275631256, 0.0000000000000000, 35.000000000000000 },
- { 0.0073668905842374085, 0.0000000000000000, 40.000000000000000 },
- { 0.11581867067325631, 0.0000000000000000, 45.000000000000000 },
- { 0.055812327669251746, 0.0000000000000000, 50.000000000000000 },
- { -0.074548302648236808, 0.0000000000000000, 55.000000000000000 },
- { -0.091471804089061859, 0.0000000000000000, 60.000000000000000 },
- { 0.018687343227677979, 0.0000000000000000, 65.000000000000000 },
- { 0.094908726483013545, 0.0000000000000000, 70.000000000000000 },
- { 0.034643913805097008, 0.0000000000000000, 75.000000000000000 },
- { -0.069742165512210033, 0.0000000000000000, 80.000000000000000 },
- { -0.070940394796273273, 0.0000000000000000, 85.000000000000000 },
- { 0.026630016699969526, 0.0000000000000000, 90.000000000000000 },
- { 0.081811967783384135, 0.0000000000000000, 95.000000000000000 },
- { 0.019985850304223170, 0.0000000000000000, 100.00000000000000 },
+ { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0 },
+ { -0.17759677131433835, 0.0000000000000000, 5.0000000000000000, 0.0 },
+ { -0.24593576445134835, 0.0000000000000000, 10.000000000000000, 0.0 },
+ { -0.014224472826780771, 0.0000000000000000, 15.000000000000000, 0.0 },
+ { 0.16702466434058319, 0.0000000000000000, 20.000000000000000, 0.0 },
+ { 0.096266783275958154, 0.0000000000000000, 25.000000000000000, 0.0 },
+ { -0.086367983581040142, 0.0000000000000000, 30.000000000000000, 0.0 },
+ { -0.12684568275631256, 0.0000000000000000, 35.000000000000000, 0.0 },
+ { 0.0073668905842374085, 0.0000000000000000, 40.000000000000000, 0.0 },
+ { 0.11581867067325631, 0.0000000000000000, 45.000000000000000, 0.0 },
+ { 0.055812327669251746, 0.0000000000000000, 50.000000000000000, 0.0 },
+ { -0.074548302648236808, 0.0000000000000000, 55.000000000000000, 0.0 },
+ { -0.091471804089061859, 0.0000000000000000, 60.000000000000000, 0.0 },
+ { 0.018687343227677979, 0.0000000000000000, 65.000000000000000, 0.0 },
+ { 0.094908726483013545, 0.0000000000000000, 70.000000000000000, 0.0 },
+ { 0.034643913805097008, 0.0000000000000000, 75.000000000000000, 0.0 },
+ { -0.069742165512210033, 0.0000000000000000, 80.000000000000000, 0.0 },
+ { -0.070940394796273273, 0.0000000000000000, 85.000000000000000, 0.0 },
+ { 0.026630016699969526, 0.0000000000000000, 90.000000000000000, 0.0 },
+ { 0.081811967783384135, 0.0000000000000000, 95.000000000000000, 0.0 },
+ { 0.019985850304223170, 0.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler010 = 2.5000000000000014e-11;
+const double toler016 = 2.5000000000000014e-11;
// Test data for nu=0.33333333333333331.
// max(|f - f_GSL|): 7.9311557321659620e-15
// max(|f - f_GSL| / |f_GSL|): 4.2444155318123211e-12
+// mean(f - f_GSL): -3.9701934696172762e-16
+// variance(f - f_GSL): 1.2378475797488261e-30
+// stddev(f - f_GSL): 1.1125859875752644e-15
const testcase_cyl_bessel_j<double>
-data011[21] =
+data017[21] =
{
- { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000 },
- { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000 },
- { -0.18614516704869571, 0.33333333333333331, 10.000000000000000 },
- { 0.089740004221152650, 0.33333333333333331, 15.000000000000000 },
- { 0.17606058001293901, 0.33333333333333331, 20.000000000000000 },
- { 0.020097162141383233, 0.33333333333333331, 25.000000000000000 },
- { -0.13334053387426159, 0.33333333333333331, 30.000000000000000 },
- { -0.087118009397765497, 0.33333333333333331, 35.000000000000000 },
- { 0.069202942818858179, 0.33333333333333331, 40.000000000000000 },
- { 0.11387616964518317, 0.33333333333333331, 45.000000000000000 },
- { -0.00057226680771808045, 0.33333333333333331, 50.000000000000000 },
- { -0.10331600929280822, 0.33333333333333331, 55.000000000000000 },
- { -0.055618147270528003, 0.33333333333333331, 60.000000000000000 },
- { 0.064711954014113948, 0.33333333333333331, 65.000000000000000 },
- { 0.086879926462481605, 0.33333333333333331, 70.000000000000000 },
- { -0.012614484229891068, 0.33333333333333331, 75.000000000000000 },
- { -0.088199784400034537, 0.33333333333333331, 80.000000000000000 },
- { -0.036703611076564523, 0.33333333333333331, 85.000000000000000 },
- { 0.062916286828779547, 0.33333333333333331, 90.000000000000000 },
- { 0.069465244416806030, 0.33333333333333331, 95.000000000000000 },
- { -0.021271244853702364, 0.33333333333333331, 100.00000000000000 },
+ { 0.0000000000000000, 0.33333333333333331, 0.0000000000000000, 0.0 },
+ { -0.30642046380026405, 0.33333333333333331, 5.0000000000000000, 0.0 },
+ { -0.18614516704869571, 0.33333333333333331, 10.000000000000000, 0.0 },
+ { 0.089740004221152650, 0.33333333333333331, 15.000000000000000, 0.0 },
+ { 0.17606058001293901, 0.33333333333333331, 20.000000000000000, 0.0 },
+ { 0.020097162141383233, 0.33333333333333331, 25.000000000000000, 0.0 },
+ { -0.13334053387426159, 0.33333333333333331, 30.000000000000000, 0.0 },
+ { -0.087118009397765497, 0.33333333333333331, 35.000000000000000, 0.0 },
+ { 0.069202942818858179, 0.33333333333333331, 40.000000000000000, 0.0 },
+ { 0.11387616964518317, 0.33333333333333331, 45.000000000000000, 0.0 },
+ { -0.00057226680771808045, 0.33333333333333331, 50.000000000000000, 0.0 },
+ { -0.10331600929280822, 0.33333333333333331, 55.000000000000000, 0.0 },
+ { -0.055618147270528003, 0.33333333333333331, 60.000000000000000, 0.0 },
+ { 0.064711954014113948, 0.33333333333333331, 65.000000000000000, 0.0 },
+ { 0.086879926462481605, 0.33333333333333331, 70.000000000000000, 0.0 },
+ { -0.012614484229891068, 0.33333333333333331, 75.000000000000000, 0.0 },
+ { -0.088199784400034537, 0.33333333333333331, 80.000000000000000, 0.0 },
+ { -0.036703611076564523, 0.33333333333333331, 85.000000000000000, 0.0 },
+ { 0.062916286828779547, 0.33333333333333331, 90.000000000000000, 0.0 },
+ { 0.069465244416806030, 0.33333333333333331, 95.000000000000000, 0.0 },
+ { -0.021271244853702364, 0.33333333333333331, 100.00000000000000, 0.0 },
};
-const double toler011 = 2.5000000000000017e-10;
+const double toler017 = 2.5000000000000017e-10;
// Test data for nu=0.50000000000000000.
// max(|f - f_GSL|): 7.4246164771807344e-15
// max(|f - f_GSL| / |f_GSL|): 3.6725252809051799e-13
+// mean(f - f_GSL): -2.3939183968479938e-16
+// variance(f - f_GSL): 7.8283482088830102e-31
+// stddev(f - f_GSL): 8.8477953236289384e-16
const testcase_cyl_bessel_j<double>
-data012[21] =
+data018[21] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000 },
- { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000 },
- { -0.13726373575505049, 0.50000000000000000, 10.000000000000000 },
- { 0.13396768882243937, 0.50000000000000000, 15.000000000000000 },
- { 0.16288076385502984, 0.50000000000000000, 20.000000000000000 },
- { -0.021120283599650493, 0.50000000000000000, 25.000000000000000 },
- { -0.14392965337039987, 0.50000000000000000, 30.000000000000000 },
- { -0.057747757589458777, 0.50000000000000000, 35.000000000000000 },
- { 0.094000962389533649, 0.50000000000000000, 40.000000000000000 },
- { 0.10120783324271411, 0.50000000000000000, 45.000000000000000 },
- { -0.029605831888924641, 0.50000000000000000, 50.000000000000000 },
- { -0.10756039213265806, 0.50000000000000000, 55.000000000000000 },
- { -0.031397461182520438, 0.50000000000000000, 60.000000000000000 },
- { 0.081827430775628554, 0.50000000000000000, 65.000000000000000 },
- { 0.073802429539054554, 0.50000000000000000, 70.000000000000000 },
- { -0.035727009681702615, 0.50000000000000000, 75.000000000000000 },
- { -0.088661035811765460, 0.50000000000000000, 80.000000000000000 },
- { -0.015238065106312516, 0.50000000000000000, 85.000000000000000 },
- { 0.075189068550269425, 0.50000000000000000, 90.000000000000000 },
- { 0.055932643481494133, 0.50000000000000000, 95.000000000000000 },
- { -0.040402132716252127, 0.50000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 0.50000000000000000, 0.0000000000000000, 0.0 },
+ { -0.34216798479816180, 0.50000000000000000, 5.0000000000000000, 0.0 },
+ { -0.13726373575505049, 0.50000000000000000, 10.000000000000000, 0.0 },
+ { 0.13396768882243937, 0.50000000000000000, 15.000000000000000, 0.0 },
+ { 0.16288076385502984, 0.50000000000000000, 20.000000000000000, 0.0 },
+ { -0.021120283599650493, 0.50000000000000000, 25.000000000000000, 0.0 },
+ { -0.14392965337039987, 0.50000000000000000, 30.000000000000000, 0.0 },
+ { -0.057747757589458777, 0.50000000000000000, 35.000000000000000, 0.0 },
+ { 0.094000962389533649, 0.50000000000000000, 40.000000000000000, 0.0 },
+ { 0.10120783324271411, 0.50000000000000000, 45.000000000000000, 0.0 },
+ { -0.029605831888924641, 0.50000000000000000, 50.000000000000000, 0.0 },
+ { -0.10756039213265806, 0.50000000000000000, 55.000000000000000, 0.0 },
+ { -0.031397461182520438, 0.50000000000000000, 60.000000000000000, 0.0 },
+ { 0.081827430775628554, 0.50000000000000000, 65.000000000000000, 0.0 },
+ { 0.073802429539054554, 0.50000000000000000, 70.000000000000000, 0.0 },
+ { -0.035727009681702615, 0.50000000000000000, 75.000000000000000, 0.0 },
+ { -0.088661035811765460, 0.50000000000000000, 80.000000000000000, 0.0 },
+ { -0.015238065106312516, 0.50000000000000000, 85.000000000000000, 0.0 },
+ { 0.075189068550269425, 0.50000000000000000, 90.000000000000000, 0.0 },
+ { 0.055932643481494133, 0.50000000000000000, 95.000000000000000, 0.0 },
+ { -0.040402132716252127, 0.50000000000000000, 100.00000000000000, 0.0 },
};
-const double toler012 = 2.5000000000000014e-11;
+const double toler018 = 2.5000000000000014e-11;
// Test data for nu=0.66666666666666663.
// max(|f - f_GSL|): 6.3629657098829284e-15
// max(|f - f_GSL| / |f_GSL|): 1.2254869540384518e-12
+// mean(f - f_GSL): -1.2052197864048389e-16
+// variance(f - f_GSL): 5.5751072048512537e-31
+// stddev(f - f_GSL): 7.4666640508671969e-16
const testcase_cyl_bessel_j<double>
-data013[21] =
+data019[21] =
{
- { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000 },
- { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000 },
- { -0.080149603304315808, 0.66666666666666663, 10.000000000000000 },
- { 0.16918875175798079, 0.66666666666666663, 15.000000000000000 },
- { 0.13904826122116531, 0.66666666666666663, 20.000000000000000 },
- { -0.060770629698497600, 0.66666666666666663, 25.000000000000000 },
- { -0.14489851974205062, 0.66666666666666663, 30.000000000000000 },
- { -0.024604880159644394, 0.66666666666666663, 35.000000000000000 },
- { 0.11243936464912010, 0.66666666666666663, 40.000000000000000 },
- { 0.081776275512525309, 0.66666666666666663, 45.000000000000000 },
- { -0.056589908749367777, 0.66666666666666663, 50.000000000000000 },
- { -0.10455814523765931, 0.66666666666666663, 55.000000000000000 },
- { -0.0051030148548608456, 0.66666666666666663, 60.000000000000000 },
- { 0.093398227061639236, 0.66666666666666663, 65.000000000000000 },
- { 0.055763883611864913, 0.66666666666666663, 70.000000000000000 },
- { -0.056395322915757364, 0.66666666666666663, 75.000000000000000 },
- { -0.083131347805783087, 0.66666666666666663, 80.000000000000000 },
- { 0.0072315397874096648, 0.66666666666666663, 85.000000000000000 },
- { 0.082362798520905250, 0.66666666666666663, 90.000000000000000 },
- { 0.038630504403446168, 0.66666666666666663, 95.000000000000000 },
- { -0.056778819380529734, 0.66666666666666663, 100.00000000000000 },
+ { 0.0000000000000000, 0.66666666666666663, 0.0000000000000000, 0.0 },
+ { -0.35712533549168868, 0.66666666666666663, 5.0000000000000000, 0.0 },
+ { -0.080149603304315808, 0.66666666666666663, 10.000000000000000, 0.0 },
+ { 0.16918875175798079, 0.66666666666666663, 15.000000000000000, 0.0 },
+ { 0.13904826122116531, 0.66666666666666663, 20.000000000000000, 0.0 },
+ { -0.060770629698497600, 0.66666666666666663, 25.000000000000000, 0.0 },
+ { -0.14489851974205062, 0.66666666666666663, 30.000000000000000, 0.0 },
+ { -0.024604880159644394, 0.66666666666666663, 35.000000000000000, 0.0 },
+ { 0.11243936464912010, 0.66666666666666663, 40.000000000000000, 0.0 },
+ { 0.081776275512525309, 0.66666666666666663, 45.000000000000000, 0.0 },
+ { -0.056589908749367777, 0.66666666666666663, 50.000000000000000, 0.0 },
+ { -0.10455814523765931, 0.66666666666666663, 55.000000000000000, 0.0 },
+ { -0.0051030148548608456, 0.66666666666666663, 60.000000000000000, 0.0 },
+ { 0.093398227061639236, 0.66666666666666663, 65.000000000000000, 0.0 },
+ { 0.055763883611864913, 0.66666666666666663, 70.000000000000000, 0.0 },
+ { -0.056395322915757364, 0.66666666666666663, 75.000000000000000, 0.0 },
+ { -0.083131347805783087, 0.66666666666666663, 80.000000000000000, 0.0 },
+ { 0.0072315397874096648, 0.66666666666666663, 85.000000000000000, 0.0 },
+ { 0.082362798520905250, 0.66666666666666663, 90.000000000000000, 0.0 },
+ { 0.038630504403446168, 0.66666666666666663, 95.000000000000000, 0.0 },
+ { -0.056778819380529734, 0.66666666666666663, 100.00000000000000, 0.0 },
};
-const double toler013 = 1.0000000000000006e-10;
+const double toler019 = 1.0000000000000006e-10;
// Test data for nu=1.0000000000000000.
// max(|f - f_GSL|): 7.1435912740724916e-15
// max(|f - f_GSL| / |f_GSL|): 1.7857949645087573e-12
+// mean(f - f_GSL): 1.0036614396722955e-16
+// variance(f - f_GSL): 8.7888311603555535e-32
+// stddev(f - f_GSL): 2.9645962896076683e-16
const testcase_cyl_bessel_j<double>
-data014[21] =
+data020[21] =
{
- { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000 },
- { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000 },
- { 0.043472746168861459, 1.0000000000000000, 10.000000000000000 },
- { 0.20510403861352280, 1.0000000000000000, 15.000000000000000 },
- { 0.066833124175850078, 1.0000000000000000, 20.000000000000000 },
- { -0.12535024958028990, 1.0000000000000000, 25.000000000000000 },
- { -0.11875106261662294, 1.0000000000000000, 30.000000000000000 },
- { 0.043990942179625646, 1.0000000000000000, 35.000000000000000 },
- { 0.12603831803758500, 1.0000000000000000, 40.000000000000000 },
- { 0.028348854376424561, 1.0000000000000000, 45.000000000000000 },
- { -0.097511828125175129, 1.0000000000000000, 50.000000000000000 },
- { -0.078250038308684711, 1.0000000000000000, 55.000000000000000 },
- { 0.046598383758166370, 1.0000000000000000, 60.000000000000000 },
- { 0.097330172226126929, 1.0000000000000000, 65.000000000000000 },
- { 0.0099877887848385128, 1.0000000000000000, 70.000000000000000 },
- { -0.085139995044829081, 1.0000000000000000, 75.000000000000000 },
- { -0.056057296675712555, 1.0000000000000000, 80.000000000000000 },
- { 0.049151460334891130, 1.0000000000000000, 85.000000000000000 },
- { 0.079925646708868092, 1.0000000000000000, 90.000000000000000 },
- { -0.0023925612997269283, 1.0000000000000000, 95.000000000000000 },
- { -0.077145352014112129, 1.0000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0 },
+ { -0.32757913759146529, 1.0000000000000000, 5.0000000000000000, 0.0 },
+ { 0.043472746168861459, 1.0000000000000000, 10.000000000000000, 0.0 },
+ { 0.20510403861352280, 1.0000000000000000, 15.000000000000000, 0.0 },
+ { 0.066833124175850078, 1.0000000000000000, 20.000000000000000, 0.0 },
+ { -0.12535024958028990, 1.0000000000000000, 25.000000000000000, 0.0 },
+ { -0.11875106261662294, 1.0000000000000000, 30.000000000000000, 0.0 },
+ { 0.043990942179625646, 1.0000000000000000, 35.000000000000000, 0.0 },
+ { 0.12603831803758500, 1.0000000000000000, 40.000000000000000, 0.0 },
+ { 0.028348854376424561, 1.0000000000000000, 45.000000000000000, 0.0 },
+ { -0.097511828125175129, 1.0000000000000000, 50.000000000000000, 0.0 },
+ { -0.078250038308684711, 1.0000000000000000, 55.000000000000000, 0.0 },
+ { 0.046598383758166370, 1.0000000000000000, 60.000000000000000, 0.0 },
+ { 0.097330172226126929, 1.0000000000000000, 65.000000000000000, 0.0 },
+ { 0.0099877887848385128, 1.0000000000000000, 70.000000000000000, 0.0 },
+ { -0.085139995044829081, 1.0000000000000000, 75.000000000000000, 0.0 },
+ { -0.056057296675712555, 1.0000000000000000, 80.000000000000000, 0.0 },
+ { 0.049151460334891130, 1.0000000000000000, 85.000000000000000, 0.0 },
+ { 0.079925646708868092, 1.0000000000000000, 90.000000000000000, 0.0 },
+ { -0.0023925612997269283, 1.0000000000000000, 95.000000000000000, 0.0 },
+ { -0.077145352014112129, 1.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler014 = 1.0000000000000006e-10;
+const double toler020 = 1.0000000000000006e-10;
// Test data for nu=2.0000000000000000.
// max(|f - f_GSL|): 7.6050277186823223e-15
// max(|f - f_GSL| / |f_GSL|): 2.0010877493528614e-12
+// mean(f - f_GSL): 5.8992989065182701e-16
+// variance(f - f_GSL): 8.3279203009695635e-31
+// stddev(f - f_GSL): 9.1257439702029581e-16
const testcase_cyl_bessel_j<double>
-data015[21] =
+data021[21] =
{
- { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000 },
- { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000 },
- { 0.25463031368512068, 2.0000000000000000, 10.000000000000000 },
- { 0.041571677975250486, 2.0000000000000000, 15.000000000000000 },
- { -0.16034135192299820, 2.0000000000000000, 20.000000000000000 },
- { -0.10629480324238134, 2.0000000000000000, 25.000000000000000 },
- { 0.078451246073265299, 2.0000000000000000, 30.000000000000000 },
- { 0.12935945088086259, 2.0000000000000000, 35.000000000000000 },
- { -0.0010649746823579794, 2.0000000000000000, 40.000000000000000 },
- { -0.11455872158985966, 2.0000000000000000, 45.000000000000000 },
- { -0.059712800794258863, 2.0000000000000000, 50.000000000000000 },
- { 0.071702846709739240, 2.0000000000000000, 55.000000000000000 },
- { 0.093025083547667420, 2.0000000000000000, 60.000000000000000 },
- { -0.015692568697643128, 2.0000000000000000, 65.000000000000000 },
- { -0.094623361089161029, 2.0000000000000000, 70.000000000000000 },
- { -0.036914313672959179, 2.0000000000000000, 75.000000000000000 },
- { 0.068340733095317172, 2.0000000000000000, 80.000000000000000 },
- { 0.072096899745329540, 2.0000000000000000, 85.000000000000000 },
- { -0.024853891217550248, 2.0000000000000000, 90.000000000000000 },
- { -0.081862337494957332, 2.0000000000000000, 95.000000000000000 },
- { -0.021528757344505364, 2.0000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.046565116277751971, 2.0000000000000000, 5.0000000000000000, 0.0 },
+ { 0.25463031368512068, 2.0000000000000000, 10.000000000000000, 0.0 },
+ { 0.041571677975250486, 2.0000000000000000, 15.000000000000000, 0.0 },
+ { -0.16034135192299820, 2.0000000000000000, 20.000000000000000, 0.0 },
+ { -0.10629480324238134, 2.0000000000000000, 25.000000000000000, 0.0 },
+ { 0.078451246073265299, 2.0000000000000000, 30.000000000000000, 0.0 },
+ { 0.12935945088086259, 2.0000000000000000, 35.000000000000000, 0.0 },
+ { -0.0010649746823579794, 2.0000000000000000, 40.000000000000000, 0.0 },
+ { -0.11455872158985966, 2.0000000000000000, 45.000000000000000, 0.0 },
+ { -0.059712800794258863, 2.0000000000000000, 50.000000000000000, 0.0 },
+ { 0.071702846709739240, 2.0000000000000000, 55.000000000000000, 0.0 },
+ { 0.093025083547667420, 2.0000000000000000, 60.000000000000000, 0.0 },
+ { -0.015692568697643128, 2.0000000000000000, 65.000000000000000, 0.0 },
+ { -0.094623361089161029, 2.0000000000000000, 70.000000000000000, 0.0 },
+ { -0.036914313672959179, 2.0000000000000000, 75.000000000000000, 0.0 },
+ { 0.068340733095317172, 2.0000000000000000, 80.000000000000000, 0.0 },
+ { 0.072096899745329540, 2.0000000000000000, 85.000000000000000, 0.0 },
+ { -0.024853891217550248, 2.0000000000000000, 90.000000000000000, 0.0 },
+ { -0.081862337494957332, 2.0000000000000000, 95.000000000000000, 0.0 },
+ { -0.021528757344505364, 2.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler015 = 2.5000000000000017e-10;
+const double toler021 = 2.5000000000000017e-10;
// Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 6.8521577301083880e-15
-// max(|f - f_GSL| / |f_GSL|): 5.6813560677959848e-13
+// max(|f - f_GSL|): 2.8543833963112775e-13
+// max(|f - f_GSL| / |f_GSL|): 1.0930448904697336e-12
+// mean(f - f_GSL): -1.3553890153085645e-14
+// variance(f - f_GSL): 7.2822902751358853e-30
+// stddev(f - f_GSL): 2.6985718954913701e-15
const testcase_cyl_bessel_j<double>
-data016[21] =
+data022[21] =
{
- { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000 },
- { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000 },
- { -0.23406152818679371, 5.0000000000000000, 10.000000000000000 },
- { 0.13045613456502966, 5.0000000000000000, 15.000000000000000 },
- { 0.15116976798239498, 5.0000000000000000, 20.000000000000000 },
- { -0.066007995398422933, 5.0000000000000000, 25.000000000000000 },
- { -0.14324029551207709, 5.0000000000000000, 30.000000000000000 },
- { -0.0015053072953907251, 5.0000000000000000, 35.000000000000000 },
- { 0.12257346597711777, 5.0000000000000000, 40.000000000000000 },
- { 0.057984499200954109, 5.0000000000000000, 45.000000000000000 },
- { -0.081400247696569616, 5.0000000000000000, 50.000000000000000 },
- { -0.092569895786432765, 5.0000000000000000, 55.000000000000000 },
- { 0.027454744228344204, 5.0000000000000000, 60.000000000000000 },
- { 0.099110527701539025, 5.0000000000000000, 65.000000000000000 },
- { 0.026058129823895364, 5.0000000000000000, 70.000000000000000 },
- { -0.078523977013751398, 5.0000000000000000, 75.000000000000000 },
- { -0.065862349140031584, 5.0000000000000000, 80.000000000000000 },
- { 0.038669072284680979, 5.0000000000000000, 85.000000000000000 },
- { 0.082759319528415157, 5.0000000000000000, 90.000000000000000 },
- { 0.0079423372702472871, 5.0000000000000000, 95.000000000000000 },
- { -0.074195736964513898, 5.0000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 5.0000000000000000, 0.0000000000000000, 0.0 },
+ { 0.26114054612017007, 5.0000000000000000, 5.0000000000000000, 0.0 },
+ { -0.23406152818679371, 5.0000000000000000, 10.000000000000000, 0.0 },
+ { 0.13045613456502966, 5.0000000000000000, 15.000000000000000, 0.0 },
+ { 0.15116976798239498, 5.0000000000000000, 20.000000000000000, 0.0 },
+ { -0.066007995398422933, 5.0000000000000000, 25.000000000000000, 0.0 },
+ { -0.14324029551207709, 5.0000000000000000, 30.000000000000000, 0.0 },
+ { -0.0015053072953907251, 5.0000000000000000, 35.000000000000000, 0.0 },
+ { 0.12257346597711777, 5.0000000000000000, 40.000000000000000, 0.0 },
+ { 0.057984499200954109, 5.0000000000000000, 45.000000000000000, 0.0 },
+ { -0.081400247696569616, 5.0000000000000000, 50.000000000000000, 0.0 },
+ { -0.092569895786432765, 5.0000000000000000, 55.000000000000000, 0.0 },
+ { 0.027454744228344204, 5.0000000000000000, 60.000000000000000, 0.0 },
+ { 0.099110527701539025, 5.0000000000000000, 65.000000000000000, 0.0 },
+ { 0.026058129823895364, 5.0000000000000000, 70.000000000000000, 0.0 },
+ { -0.078523977013751398, 5.0000000000000000, 75.000000000000000, 0.0 },
+ { -0.065862349140031584, 5.0000000000000000, 80.000000000000000, 0.0 },
+ { 0.038669072284680979, 5.0000000000000000, 85.000000000000000, 0.0 },
+ { 0.082759319528415157, 5.0000000000000000, 90.000000000000000, 0.0 },
+ { 0.0079423372702472871, 5.0000000000000000, 95.000000000000000, 0.0 },
+ { -0.074195736964513898, 5.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler016 = 5.0000000000000028e-11;
+const double toler022 = 1.0000000000000006e-10;
// Test data for nu=10.000000000000000.
-// max(|f - f_GSL|): 7.2303274478713320e-15
-// max(|f - f_GSL| / |f_GSL|): 3.6974790630140835e-13
+// max(|f - f_GSL|): 1.9356460878583448e-12
+// max(|f - f_GSL| / |f_GSL|): 9.3290395162638844e-12
+// mean(f - f_GSL): -9.2222918290125423e-14
+// variance(f - f_GSL): 4.8900615676062557e-28
+// stddev(f - f_GSL): 2.2113483596227564e-14
const testcase_cyl_bessel_j<double>
-data017[21] =
+data023[21] =
{
- { 0.0000000000000000, 10.000000000000000, 0.0000000000000000 },
- { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000 },
- { 0.20748610663335865, 10.000000000000000, 10.000000000000000 },
- { -0.090071811047659087, 10.000000000000000, 15.000000000000000 },
- { 0.18648255802394512, 10.000000000000000, 20.000000000000000 },
- { -0.075179843948523312, 10.000000000000000, 25.000000000000000 },
- { -0.12987689399858882, 10.000000000000000, 30.000000000000000 },
- { 0.063546391343962866, 10.000000000000000, 35.000000000000000 },
- { 0.11938336278226094, 10.000000000000000, 40.000000000000000 },
- { -0.026971402475010831, 10.000000000000000, 45.000000000000000 },
- { -0.11384784914946940, 10.000000000000000, 50.000000000000000 },
- { -0.015773790303746080, 10.000000000000000, 55.000000000000000 },
- { 0.097177143328071064, 10.000000000000000, 60.000000000000000 },
- { 0.054617389951112129, 10.000000000000000, 65.000000000000000 },
- { -0.065870338561952013, 10.000000000000000, 70.000000000000000 },
- { -0.080417867891894437, 10.000000000000000, 75.000000000000000 },
- { 0.024043850978184747, 10.000000000000000, 80.000000000000000 },
- { 0.086824832700067869, 10.000000000000000, 85.000000000000000 },
- { 0.019554748856312299, 10.000000000000000, 90.000000000000000 },
- { -0.072341598669443757, 10.000000000000000, 95.000000000000000 },
- { -0.054732176935472096, 10.000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 10.000000000000000, 0.0000000000000000, 0.0 },
+ { 0.0014678026473104744, 10.000000000000000, 5.0000000000000000, 0.0 },
+ { 0.20748610663335865, 10.000000000000000, 10.000000000000000, 0.0 },
+ { -0.090071811047659087, 10.000000000000000, 15.000000000000000, 0.0 },
+ { 0.18648255802394512, 10.000000000000000, 20.000000000000000, 0.0 },
+ { -0.075179843948523312, 10.000000000000000, 25.000000000000000, 0.0 },
+ { -0.12987689399858882, 10.000000000000000, 30.000000000000000, 0.0 },
+ { 0.063546391343962866, 10.000000000000000, 35.000000000000000, 0.0 },
+ { 0.11938336278226094, 10.000000000000000, 40.000000000000000, 0.0 },
+ { -0.026971402475010831, 10.000000000000000, 45.000000000000000, 0.0 },
+ { -0.11384784914946940, 10.000000000000000, 50.000000000000000, 0.0 },
+ { -0.015773790303746080, 10.000000000000000, 55.000000000000000, 0.0 },
+ { 0.097177143328071064, 10.000000000000000, 60.000000000000000, 0.0 },
+ { 0.054617389951112129, 10.000000000000000, 65.000000000000000, 0.0 },
+ { -0.065870338561952013, 10.000000000000000, 70.000000000000000, 0.0 },
+ { -0.080417867891894437, 10.000000000000000, 75.000000000000000, 0.0 },
+ { 0.024043850978184747, 10.000000000000000, 80.000000000000000, 0.0 },
+ { 0.086824832700067869, 10.000000000000000, 85.000000000000000, 0.0 },
+ { 0.019554748856312299, 10.000000000000000, 90.000000000000000, 0.0 },
+ { -0.072341598669443757, 10.000000000000000, 95.000000000000000, 0.0 },
+ { -0.054732176935472096, 10.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler017 = 2.5000000000000014e-11;
+const double toler023 = 5.0000000000000034e-10;
// Test data for nu=20.000000000000000.
// max(|f - f_GSL|): 7.7177847446208148e-15
-// max(|f - f_GSL| / |f_GSL|): 1.1191513260854523e-12
+// max(|f - f_GSL| / |f_GSL|): 3.9605977909281575e-11
+// mean(f - f_GSL): 5.4535197027290536e-16
+// variance(f - f_GSL): 3.3751441852449851e-31
+// stddev(f - f_GSL): 5.8095991128863495e-16
const testcase_cyl_bessel_j<double>
-data018[21] =
+data024[21] =
{
- { 0.0000000000000000, 20.000000000000000, 0.0000000000000000 },
- { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000 },
- { 1.1513369247813403e-05, 20.000000000000000, 10.000000000000000 },
- { 0.0073602340792234934, 20.000000000000000, 15.000000000000000 },
- { 0.16474777377532665, 20.000000000000000, 20.000000000000000 },
- { 0.051994049228303307, 20.000000000000000, 25.000000000000000 },
- { 0.0048310199934040923, 20.000000000000000, 30.000000000000000 },
- { -0.10927417397178038, 20.000000000000000, 35.000000000000000 },
- { 0.12779393355084889, 20.000000000000000, 40.000000000000000 },
- { 0.0047633437900313621, 20.000000000000000, 45.000000000000000 },
- { -0.11670435275957974, 20.000000000000000, 50.000000000000000 },
- { 0.025389204574566639, 20.000000000000000, 55.000000000000000 },
- { 0.10266020557876326, 20.000000000000000, 60.000000000000000 },
- { -0.023138582263434154, 20.000000000000000, 65.000000000000000 },
- { -0.096058573489952365, 20.000000000000000, 70.000000000000000 },
- { 0.0068961047221522270, 20.000000000000000, 75.000000000000000 },
- { 0.090565405489918357, 20.000000000000000, 80.000000000000000 },
- { 0.015985497599497172, 20.000000000000000, 85.000000000000000 },
- { -0.080345344044422534, 20.000000000000000, 90.000000000000000 },
- { -0.040253075701614051, 20.000000000000000, 95.000000000000000 },
- { 0.062217458498338672, 20.000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 20.000000000000000, 0.0000000000000000, 0.0 },
+ { 2.7703300521289426e-11, 20.000000000000000, 5.0000000000000000, 0.0 },
+ { 1.1513369247813403e-05, 20.000000000000000, 10.000000000000000, 0.0 },
+ { 0.0073602340792234934, 20.000000000000000, 15.000000000000000, 0.0 },
+ { 0.16474777377532665, 20.000000000000000, 20.000000000000000, 0.0 },
+ { 0.051994049228303307, 20.000000000000000, 25.000000000000000, 0.0 },
+ { 0.0048310199934040923, 20.000000000000000, 30.000000000000000, 0.0 },
+ { -0.10927417397178038, 20.000000000000000, 35.000000000000000, 0.0 },
+ { 0.12779393355084889, 20.000000000000000, 40.000000000000000, 0.0 },
+ { 0.0047633437900313621, 20.000000000000000, 45.000000000000000, 0.0 },
+ { -0.11670435275957974, 20.000000000000000, 50.000000000000000, 0.0 },
+ { 0.025389204574566639, 20.000000000000000, 55.000000000000000, 0.0 },
+ { 0.10266020557876326, 20.000000000000000, 60.000000000000000, 0.0 },
+ { -0.023138582263434154, 20.000000000000000, 65.000000000000000, 0.0 },
+ { -0.096058573489952365, 20.000000000000000, 70.000000000000000, 0.0 },
+ { 0.0068961047221522270, 20.000000000000000, 75.000000000000000, 0.0 },
+ { 0.090565405489918357, 20.000000000000000, 80.000000000000000, 0.0 },
+ { 0.015985497599497172, 20.000000000000000, 85.000000000000000, 0.0 },
+ { -0.080345344044422534, 20.000000000000000, 90.000000000000000, 0.0 },
+ { -0.040253075701614051, 20.000000000000000, 95.000000000000000, 0.0 },
+ { 0.062217458498338672, 20.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler018 = 1.0000000000000006e-10;
+const double toler024 = 2.5000000000000013e-09;
// Test data for nu=50.000000000000000.
// max(|f - f_GSL|): 6.6543992538470320e-15
// max(|f - f_GSL| / |f_GSL|): 1.6466369526724007e-13
+// mean(f - f_GSL): -1.6455151712533431e-16
+// variance(f - f_GSL): 3.2708104724583124e-31
+// stddev(f - f_GSL): 5.7190999925323149e-16
const testcase_cyl_bessel_j<double>
-data019[21] =
+data025[21] =
{
- { 0.0000000000000000, 50.000000000000000, 0.0000000000000000 },
- { 2.2942476159525415e-45, 50.000000000000000, 5.0000000000000000 },
- { 1.7845136078715964e-30, 50.000000000000000, 10.000000000000000 },
- { 6.1060519495338733e-22, 50.000000000000000, 15.000000000000000 },
- { 4.4510392847006872e-16, 50.000000000000000, 20.000000000000000 },
- { 9.7561594280229808e-12, 50.000000000000000, 25.000000000000000 },
- { 2.0581656631564172e-08, 50.000000000000000, 30.000000000000000 },
- { 7.6069951699272960e-06, 50.000000000000000, 35.000000000000000 },
- { 0.00068185243531768309, 50.000000000000000, 40.000000000000000 },
- { 0.017284343240791214, 50.000000000000000, 45.000000000000000 },
- { 0.12140902189761507, 50.000000000000000, 50.000000000000000 },
- { 0.13594720957176012, 50.000000000000000, 55.000000000000000 },
- { -0.13798273148535209, 50.000000000000000, 60.000000000000000 },
- { 0.12116217746619409, 50.000000000000000, 65.000000000000000 },
- { -0.11394866738787145, 50.000000000000000, 70.000000000000000 },
- { 0.094076799581573348, 50.000000000000000, 75.000000000000000 },
- { -0.039457764590251347, 50.000000000000000, 80.000000000000000 },
- { -0.040412060734136383, 50.000000000000000, 85.000000000000000 },
- { 0.090802099838032266, 50.000000000000000, 90.000000000000000 },
- { -0.055979156267280165, 50.000000000000000, 95.000000000000000 },
- { -0.038698339728525440, 50.000000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 50.000000000000000, 0.0000000000000000, 0.0 },
+ { 2.2942476159525415e-45, 50.000000000000000, 5.0000000000000000, 0.0 },
+ { 1.7845136078715964e-30, 50.000000000000000, 10.000000000000000, 0.0 },
+ { 6.1060519495338733e-22, 50.000000000000000, 15.000000000000000, 0.0 },
+ { 4.4510392847006872e-16, 50.000000000000000, 20.000000000000000, 0.0 },
+ { 9.7561594280229808e-12, 50.000000000000000, 25.000000000000000, 0.0 },
+ { 2.0581656631564172e-08, 50.000000000000000, 30.000000000000000, 0.0 },
+ { 7.6069951699272960e-06, 50.000000000000000, 35.000000000000000, 0.0 },
+ { 0.00068185243531768309, 50.000000000000000, 40.000000000000000, 0.0 },
+ { 0.017284343240791214, 50.000000000000000, 45.000000000000000, 0.0 },
+ { 0.12140902189761507, 50.000000000000000, 50.000000000000000, 0.0 },
+ { 0.13594720957176012, 50.000000000000000, 55.000000000000000, 0.0 },
+ { -0.13798273148535209, 50.000000000000000, 60.000000000000000, 0.0 },
+ { 0.12116217746619409, 50.000000000000000, 65.000000000000000, 0.0 },
+ { -0.11394866738787145, 50.000000000000000, 70.000000000000000, 0.0 },
+ { 0.094076799581573348, 50.000000000000000, 75.000000000000000, 0.0 },
+ { -0.039457764590251347, 50.000000000000000, 80.000000000000000, 0.0 },
+ { -0.040412060734136383, 50.000000000000000, 85.000000000000000, 0.0 },
+ { 0.090802099838032266, 50.000000000000000, 90.000000000000000, 0.0 },
+ { -0.055979156267280165, 50.000000000000000, 95.000000000000000, 0.0 },
+ { -0.038698339728525440, 50.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler019 = 1.0000000000000006e-11;
+const double toler025 = 1.0000000000000006e-11;
// Test data for nu=100.00000000000000.
// max(|f - f_GSL|): 4.8138576458356397e-17
// max(|f - f_GSL| / |f_GSL|): 1.0835289187603112e-13
+// mean(f - f_GSL): -1.6372998234733199e-18
+// variance(f - f_GSL): 3.5813627343642796e-35
+// stddev(f - f_GSL): 5.9844487919642855e-18
const testcase_cyl_bessel_j<double>
-data020[21] =
+data026[21] =
{
- { 0.0000000000000000, 100.00000000000000, 0.0000000000000000 },
- { 6.2677893955418763e-119, 100.00000000000000, 5.0000000000000000 },
- { 6.5973160641553816e-89, 100.00000000000000, 10.000000000000000 },
- { 1.9660095611249536e-71, 100.00000000000000, 15.000000000000000 },
- { 3.9617550943362524e-59, 100.00000000000000, 20.000000000000000 },
- { 1.1064482655301687e-49, 100.00000000000000, 25.000000000000000 },
- { 4.5788015281752354e-42, 100.00000000000000, 30.000000000000000 },
- { 9.9210206714732606e-36, 100.00000000000000, 35.000000000000000 },
- { 2.3866062996027414e-30, 100.00000000000000, 40.000000000000000 },
- { 1.0329791804565538e-25, 100.00000000000000, 45.000000000000000 },
- { 1.1159273690838340e-21, 100.00000000000000, 50.000000000000000 },
- { 3.7899753451900682e-18, 100.00000000000000, 55.000000000000000 },
- { 4.7832744078781205e-15, 100.00000000000000, 60.000000000000000 },
- { 2.5375564579490517e-12, 100.00000000000000, 65.000000000000000 },
- { 6.1982452141641260e-10, 100.00000000000000, 70.000000000000000 },
- { 7.4479005905904457e-08, 100.00000000000000, 75.000000000000000 },
- { 4.6065530648234948e-06, 100.00000000000000, 80.000000000000000 },
- { 0.00015043869999501765, 100.00000000000000, 85.000000000000000 },
- { 0.0026021305819963472, 100.00000000000000, 90.000000000000000 },
- { 0.023150768009428030, 100.00000000000000, 95.000000000000000 },
- { 0.096366673295861571, 100.00000000000000, 100.00000000000000 },
+ { 0.0000000000000000, 100.00000000000000, 0.0000000000000000, 0.0 },
+ { 6.2677893955418763e-119, 100.00000000000000, 5.0000000000000000, 0.0 },
+ { 6.5973160641553816e-89, 100.00000000000000, 10.000000000000000, 0.0 },
+ { 1.9660095611249536e-71, 100.00000000000000, 15.000000000000000, 0.0 },
+ { 3.9617550943362524e-59, 100.00000000000000, 20.000000000000000, 0.0 },
+ { 1.1064482655301687e-49, 100.00000000000000, 25.000000000000000, 0.0 },
+ { 4.5788015281752354e-42, 100.00000000000000, 30.000000000000000, 0.0 },
+ { 9.9210206714732606e-36, 100.00000000000000, 35.000000000000000, 0.0 },
+ { 2.3866062996027414e-30, 100.00000000000000, 40.000000000000000, 0.0 },
+ { 1.0329791804565538e-25, 100.00000000000000, 45.000000000000000, 0.0 },
+ { 1.1159273690838340e-21, 100.00000000000000, 50.000000000000000, 0.0 },
+ { 3.7899753451900682e-18, 100.00000000000000, 55.000000000000000, 0.0 },
+ { 4.7832744078781205e-15, 100.00000000000000, 60.000000000000000, 0.0 },
+ { 2.5375564579490517e-12, 100.00000000000000, 65.000000000000000, 0.0 },
+ { 6.1982452141641260e-10, 100.00000000000000, 70.000000000000000, 0.0 },
+ { 7.4479005905904457e-08, 100.00000000000000, 75.000000000000000, 0.0 },
+ { 4.6065530648234948e-06, 100.00000000000000, 80.000000000000000, 0.0 },
+ { 0.00015043869999501765, 100.00000000000000, 85.000000000000000, 0.0 },
+ { 0.0026021305819963472, 100.00000000000000, 90.000000000000000, 0.0 },
+ { 0.023150768009428030, 100.00000000000000, 95.000000000000000, 0.0 },
+ { 0.096366673295861571, 100.00000000000000, 100.00000000000000, 0.0 },
};
-const double toler020 = 1.0000000000000006e-11;
+const double toler026 = 1.0000000000000006e-11;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_cyl_bessel_j<Tp> (&data)[Num], Tp toler)
+ test(const testcase_cyl_bessel_j<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::cyl_bessel_j(data[i].nu, data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f = std::cyl_bessel_j(data[i].nu, data[i].x);
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
@@ -689,5 +945,11 @@ main()
test(data018, toler018);
test(data019, toler019);
test(data020, toler020);
+ test(data021, toler021);
+ test(data022, toler022);
+ test(data023, toler023);
+ test(data024, toler024);
+ test(data025, toler025);
+ test(data026, toler026);
return 0;
}
diff --git a/libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc b/libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
index b3607aa7e5b..8007cedce94 100644
--- a/libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/09_cyl_bessel_k/check_value.cc
@@ -38,665 +38,924 @@
#include <specfun_testcase.h>
+// Test data for nu=-5.0000000000000000.
+// max(|f - f_Boost|): 5.8207660913467407e-11
+// max(|f - f_Boost| / |f_Boost|): 1.3495399473646698e-15
+// mean(f - f_Boost): -3.0143450235886606e-12
+// variance(f - f_Boost): 5.0339942306413013e-25
+// stddev(f - f_Boost): 7.0950646442730180e-13
+const testcase_cyl_bessel_k<double>
+data001[20] =
+{
+ { 391683.98962334893, -5.0000000000000000, 0.25000000000000000, 0.0 },
+ { 12097.979476096394, -5.0000000000000000, 0.50000000000000000, 0.0 },
+ { 1562.5870339691101, -5.0000000000000000, 0.75000000000000000, 0.0 },
+ { 360.96058960124071, -5.0000000000000000, 1.0000000000000000, 0.0 },
+ { 114.29321426334016, -5.0000000000000000, 1.2500000000000000, 0.0 },
+ { 44.067781159301077, -5.0000000000000000, 1.5000000000000000, 0.0 },
+ { 19.426568687730288, -5.0000000000000000, 1.7500000000000000, 0.0 },
+ { 9.4310491005964678, -5.0000000000000000, 2.0000000000000000, 0.0 },
+ { 4.9221270549918641, -5.0000000000000000, 2.2500000000000000, 0.0 },
+ { 2.7168842907865431, -5.0000000000000000, 2.5000000000000000, 0.0 },
+ { 1.5677685890536328, -5.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.93777360238680807, -5.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.57775534736785061, -5.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.36482440208451966, -5.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.23520290620082257, -5.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.15434254872599718, -5.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.10283347176876441, -5.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.069423643150881773, -5.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.047410616917942232, -5.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.032706273712031858, -5.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler001 = 2.5000000000000020e-13;
+
+// Test data for nu=-2.0000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16
+// max(|f - f_Boost| / |f_Boost|): 1.3486086083422038e-15
+// mean(f - f_Boost): -1.4224732503009817e-17
+// variance(f - f_Boost): 1.4111037958183487e-35
+// stddev(f - f_Boost): 3.7564661529399524e-18
+const testcase_cyl_bessel_k<double>
+data002[20] =
+{
+ { 31.517714546773995, -2.0000000000000000, 0.25000000000000000, 0.0 },
+ { 7.5501835512408695, -2.0000000000000000, 0.50000000000000000, 0.0 },
+ { 3.1427970006821715, -2.0000000000000000, 0.75000000000000000, 0.0 },
+ { 1.6248388986351774, -2.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.94100161673881855, -2.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.58365596325665081, -2.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.37878261635733845, -2.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.25375975456605587, -2.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.17401315870205833, -2.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.12146020627856384, -2.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.085959281497066095, -2.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.061510458471742038, -2.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.044412927437333487, -2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.032307121699467825, -2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.023647953146296120, -2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.017401425529487240, -2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.012863060974445659, -2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0095456772027753475, -2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0071081190074975698, -2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0053089437122234599, -2.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
+
+// Test data for nu=-1.0000000000000000.
+// max(|f - f_Boost|): 2.2204460492503131e-16
+// max(|f - f_Boost| / |f_Boost|): 1.3891095296869671e-15
+// mean(f - f_Boost): 1.3444106938820255e-18
+// variance(f - f_Boost): 1.2608072372254564e-38
+// stddev(f - f_Boost): 1.1228567304983555e-19
+const testcase_cyl_bessel_k<double>
+data003[20] =
+{
+ { 3.7470259744407115, -1.0000000000000000, 0.25000000000000000, 0.0 },
+ { 1.6564411200033009, -1.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.94958046696214027, -1.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.60190723019723458, -1.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.40212407978419540, -1.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.27738780045684380, -1.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.19547745347439302, -1.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.13986588181652243, -1.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.10121630256832526, -1.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.073890816347747065, -1.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.054318522758919845, -1.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.040156431128194184, -1.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.029825529796040123, -1.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.022239392925923834, -1.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.016638191754688909, -1.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.012483498887268431, -1.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.0093896806560432484, -1.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0070780949089680901, -1.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0053459218178228398, -1.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0040446134454521646, -1.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler003 = 2.5000000000000020e-13;
+
+// Test data for nu=-0.66666666666666663.
+// max(|f - f_Boost|): 1.6653345369377348e-16
+// max(|f - f_Boost| / |f_Boost|): 9.6722146483905255e-16
+// mean(f - f_Boost): 3.4911309954033243e-17
+// variance(f - f_Boost): 6.4209995021426178e-35
+// stddev(f - f_Boost): 8.0131139403746266e-18
+const testcase_cyl_bessel_k<double>
+data004[20] =
+{
+ { 2.3289060745544101, -0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 1.2059304647203357, -0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 0.74547232976647226, -0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 0.49447506210420827, -0.66666666666666663, 1.0000000000000000, 0.0 },
+ { 0.34062994813514275, -0.66666666666666663, 1.2500000000000000, 0.0 },
+ { 0.24024045240315572, -0.66666666666666663, 1.5000000000000000, 0.0 },
+ { 0.17217716908452291, -0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 0.12483892748812830, -0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 0.091315296079621008, -0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 0.067255322171623333, -0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 0.049809546542402217, -0.66666666666666663, 2.7500000000000000, 0.0 },
+ { 0.037057074495188497, -0.66666666666666663, 3.0000000000000000, 0.0 },
+ { 0.027674365504886719, -0.66666666666666663, 3.2500000000000000, 0.0 },
+ { 0.020733915836010908, -0.66666666666666663, 3.5000000000000000, 0.0 },
+ { 0.015577015510251332, -0.66666666666666663, 3.7500000000000000, 0.0 },
+ { 0.011730801456525332, -0.66666666666666663, 4.0000000000000000, 0.0 },
+ { 0.0088528343204658834, -0.66666666666666663, 4.2500000000000000, 0.0 },
+ { 0.0066933190915775542, -0.66666666666666663, 4.5000000000000000, 0.0 },
+ { 0.0050689292106255472, -0.66666666666666663, 4.7500000000000000, 0.0 },
+ { 0.0038444246344968213, -0.66666666666666663, 5.0000000000000000, 0.0 },
+};
+const double toler004 = 2.5000000000000020e-13;
+
+// Test data for nu=-0.50000000000000000.
+// max(|f - f_Boost|): 6.6613381477509392e-16
+// max(|f - f_Boost| / |f_Boost|): 1.5172850443872369e-15
+// mean(f - f_Boost): 1.8735013540549518e-17
+// variance(f - f_Boost): 1.9446023953715996e-35
+// stddev(f - f_Boost): 4.4097646143208139e-18
+const testcase_cyl_bessel_k<double>
+data005[20] =
+{
+ { 1.9521640631515478, -0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 1.0750476034999203, -0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 0.68361006034952465, -0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 0.46106850444789454, -0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 0.32117137397144768, -0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 0.22833505222826544, -0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 0.16463628997380864, -0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 0.11993777196806145, -0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 0.088065558803650454, -0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 0.065065943154009986, -0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 0.048315198301417825, -0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 0.036025985131764596, -0.50000000000000000, 3.0000000000000000, 0.0 },
+ { 0.026956356532443354, -0.50000000000000000, 3.2500000000000000, 0.0 },
+ { 0.020229969578139294, -0.50000000000000000, 3.5000000000000000, 0.0 },
+ { 0.015220888252975566, -0.50000000000000000, 3.7500000000000000, 0.0 },
+ { 0.011477624576608053, -0.50000000000000000, 4.0000000000000000, 0.0 },
+ { 0.0086718932956978342, -0.50000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0065633945646345407, -0.50000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0049752435421262292, -0.50000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0037766133746428825, -0.50000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
+
+// Test data for nu=-0.33333333333333331.
+// max(|f - f_Boost|): 8.8817841970012523e-16
+// max(|f - f_Boost| / |f_Boost|): 4.7003771333536692e-15
+// mean(f - f_Boost): 1.8069313406643416e-16
+// variance(f - f_Boost): 1.8001922696421079e-33
+// stddev(f - f_Boost): 4.2428672730149219e-17
+const testcase_cyl_bessel_k<double>
+data006[20] =
+{
+ { 1.7144912564234522, -0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 0.98903107424672432, -0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 0.64216899667282978, -0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 0.43843063344153438, -0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 0.30788192414945059, -0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 0.22015769026776688, -0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 0.15943413057311240, -0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 0.11654496129616525, -0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 0.085809609306439633, -0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 0.063542537454733372, -0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 0.047273354184795495, -0.33333333333333331, 2.7500000000000000, 0.0 },
+ { 0.035305904902162559, -0.33333333333333331, 3.0000000000000000, 0.0 },
+ { 0.026454186892773162, -0.33333333333333331, 3.2500000000000000, 0.0 },
+ { 0.019877061407943802, -0.33333333333333331, 3.5000000000000000, 0.0 },
+ { 0.014971213514760211, -0.33333333333333331, 3.7500000000000000, 0.0 },
+ { 0.011299947573672161, -0.33333333333333331, 4.0000000000000000, 0.0 },
+ { 0.0085447959546110456, -0.33333333333333331, 4.2500000000000000, 0.0 },
+ { 0.0064720581217078228, -0.33333333333333331, 4.5000000000000000, 0.0 },
+ { 0.0049093342803275264, -0.33333333333333331, 4.7500000000000000, 0.0 },
+ { 0.0037288750960535882, -0.33333333333333331, 5.0000000000000000, 0.0 },
+};
+const double toler006 = 2.5000000000000020e-13;
+// cyl_bessel_k
+
// Test data for nu=0.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 1.7863051312335036e-16
+// mean(f - f_GSL): 1.2945373939476924e-17
+// variance(f - f_GSL): 8.6727126587238423e-36
+// stddev(f - f_GSL): 2.9449469704434139e-18
const testcase_cyl_bessel_k<double>
-data001[20] =
+data007[20] =
{
- { 1.5415067512483025, 0.0000000000000000, 0.25000000000000000 },
- { 0.92441907122766565, 0.0000000000000000, 0.50000000000000000 },
- { 0.61058242211646430, 0.0000000000000000, 0.75000000000000000 },
- { 0.42102443824070829, 0.0000000000000000, 1.0000000000000000 },
- { 0.29760308908410588, 0.0000000000000000, 1.2500000000000000 },
- { 0.21380556264752565, 0.0000000000000000, 1.5000000000000000 },
- { 0.15537981238660362, 0.0000000000000000, 1.7500000000000000 },
- { 0.11389387274953360, 0.0000000000000000, 2.0000000000000000 },
- { 0.084043111974658191, 0.0000000000000000, 2.2500000000000000 },
- { 0.062347553200366168, 0.0000000000000000, 2.5000000000000000 },
- { 0.046454901308760774, 0.0000000000000000, 2.7500000000000000 },
- { 0.034739504386279256, 0.0000000000000000, 3.0000000000000000 },
- { 0.026058755255154966, 0.0000000000000000, 3.2500000000000000 },
- { 0.019598897170368501, 0.0000000000000000, 3.5000000000000000 },
- { 0.014774250877128706, 0.0000000000000000, 3.7500000000000000 },
- { 0.011159676085853026, 0.0000000000000000, 4.0000000000000000 },
- { 0.0084443877245429649, 0.0000000000000000, 4.2500000000000000 },
- { 0.0063998572432339747, 0.0000000000000000, 4.5000000000000000 },
- { 0.0048572045578879524, 0.0000000000000000, 4.7500000000000000 },
- { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000 },
+ { 1.5415067512483025, 0.0000000000000000, 0.25000000000000000, 0.0 },
+ { 0.92441907122766565, 0.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.61058242211646430, 0.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.42102443824070829, 0.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.29760308908410588, 0.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.21380556264752565, 0.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.15537981238660362, 0.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.11389387274953360, 0.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.084043111974658191, 0.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.062347553200366168, 0.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.046454901308760774, 0.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.034739504386279256, 0.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.026058755255154966, 0.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.019598897170368501, 0.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.014774250877128706, 0.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.011159676085853026, 0.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.0084443877245429649, 0.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0063998572432339747, 0.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0048572045578879524, 0.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler001 = 2.5000000000000020e-13;
+const double toler007 = 2.5000000000000020e-13;
// Test data for nu=0.33333333333333331.
// max(|f - f_GSL|): 1.3322676295501878e-15
// max(|f - f_GSL| / |f_GSL|): 4.3522010494015439e-15
+// mean(f - f_GSL): 2.0049066573601948e-16
+// variance(f - f_GSL): 2.2269532990178557e-33
+// stddev(f - f_GSL): 4.7190606046308156e-17
const testcase_cyl_bessel_k<double>
-data002[20] =
+data008[20] =
{
- { 1.7144912564234518, 0.33333333333333331, 0.25000000000000000 },
- { 0.98903107424672421, 0.33333333333333331, 0.50000000000000000 },
- { 0.64216899667282989, 0.33333333333333331, 0.75000000000000000 },
- { 0.43843063344153432, 0.33333333333333331, 1.0000000000000000 },
- { 0.30788192414945043, 0.33333333333333331, 1.2500000000000000 },
- { 0.22015769026776688, 0.33333333333333331, 1.5000000000000000 },
- { 0.15943413057311245, 0.33333333333333331, 1.7500000000000000 },
- { 0.11654496129616534, 0.33333333333333331, 2.0000000000000000 },
- { 0.085809609306439674, 0.33333333333333331, 2.2500000000000000 },
- { 0.063542537454733386, 0.33333333333333331, 2.5000000000000000 },
- { 0.047273354184795509, 0.33333333333333331, 2.7500000000000000 },
- { 0.035305904902162587, 0.33333333333333331, 3.0000000000000000 },
- { 0.026454186892773169, 0.33333333333333331, 3.2500000000000000 },
- { 0.019877061407943805, 0.33333333333333331, 3.5000000000000000 },
- { 0.014971213514760214, 0.33333333333333331, 3.7500000000000000 },
- { 0.011299947573672165, 0.33333333333333331, 4.0000000000000000 },
- { 0.0085447959546110473, 0.33333333333333331, 4.2500000000000000 },
- { 0.0064720581217078237, 0.33333333333333331, 4.5000000000000000 },
- { 0.0049093342803275264, 0.33333333333333331, 4.7500000000000000 },
- { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000 },
+ { 1.7144912564234518, 0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 0.98903107424672421, 0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 0.64216899667282989, 0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 0.43843063344153432, 0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 0.30788192414945043, 0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 0.22015769026776688, 0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 0.15943413057311245, 0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 0.11654496129616534, 0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 0.085809609306439674, 0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 0.063542537454733386, 0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 0.047273354184795509, 0.33333333333333331, 2.7500000000000000, 0.0 },
+ { 0.035305904902162587, 0.33333333333333331, 3.0000000000000000, 0.0 },
+ { 0.026454186892773169, 0.33333333333333331, 3.2500000000000000, 0.0 },
+ { 0.019877061407943805, 0.33333333333333331, 3.5000000000000000, 0.0 },
+ { 0.014971213514760214, 0.33333333333333331, 3.7500000000000000, 0.0 },
+ { 0.011299947573672165, 0.33333333333333331, 4.0000000000000000, 0.0 },
+ { 0.0085447959546110473, 0.33333333333333331, 4.2500000000000000, 0.0 },
+ { 0.0064720581217078237, 0.33333333333333331, 4.5000000000000000, 0.0 },
+ { 0.0049093342803275264, 0.33333333333333331, 4.7500000000000000, 0.0 },
+ { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000, 0.0 },
};
-const double toler002 = 2.5000000000000020e-13;
+const double toler008 = 2.5000000000000020e-13;
// Test data for nu=0.50000000000000000.
// max(|f - f_GSL|): 1.3322676295501878e-15
// max(|f - f_GSL| / |f_GSL|): 1.5172850443872369e-15
+// mean(f - f_GSL): 1.0547118733938987e-16
+// variance(f - f_GSL): 6.1629758220391551e-34
+// stddev(f - f_GSL): 2.4825341532472729e-17
const testcase_cyl_bessel_k<double>
-data003[20] =
+data009[20] =
{
- { 1.9521640631515476, 0.50000000000000000, 0.25000000000000000 },
- { 1.0750476034999195, 0.50000000000000000, 0.50000000000000000 },
- { 0.68361006034952421, 0.50000000000000000, 0.75000000000000000 },
- { 0.46106850444789454, 0.50000000000000000, 1.0000000000000000 },
- { 0.32117137397144746, 0.50000000000000000, 1.2500000000000000 },
- { 0.22833505222826550, 0.50000000000000000, 1.5000000000000000 },
- { 0.16463628997380864, 0.50000000000000000, 1.7500000000000000 },
- { 0.11993777196806145, 0.50000000000000000, 2.0000000000000000 },
- { 0.088065558803650454, 0.50000000000000000, 2.2500000000000000 },
- { 0.065065943154009986, 0.50000000000000000, 2.5000000000000000 },
- { 0.048315198301417825, 0.50000000000000000, 2.7500000000000000 },
- { 0.036025985131764589, 0.50000000000000000, 3.0000000000000000 },
- { 0.026956356532443351, 0.50000000000000000, 3.2500000000000000 },
- { 0.020229969578139294, 0.50000000000000000, 3.5000000000000000 },
- { 0.015220888252975564, 0.50000000000000000, 3.7500000000000000 },
- { 0.011477624576608052, 0.50000000000000000, 4.0000000000000000 },
- { 0.0086718932956978342, 0.50000000000000000, 4.2500000000000000 },
- { 0.0065633945646345407, 0.50000000000000000, 4.5000000000000000 },
- { 0.0049752435421262292, 0.50000000000000000, 4.7500000000000000 },
- { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000 },
+ { 1.9521640631515476, 0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 1.0750476034999195, 0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 0.68361006034952421, 0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 0.46106850444789454, 0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 0.32117137397144746, 0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 0.22833505222826550, 0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 0.16463628997380864, 0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 0.11993777196806145, 0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 0.088065558803650454, 0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 0.065065943154009986, 0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 0.048315198301417825, 0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 0.036025985131764589, 0.50000000000000000, 3.0000000000000000, 0.0 },
+ { 0.026956356532443351, 0.50000000000000000, 3.2500000000000000, 0.0 },
+ { 0.020229969578139294, 0.50000000000000000, 3.5000000000000000, 0.0 },
+ { 0.015220888252975564, 0.50000000000000000, 3.7500000000000000, 0.0 },
+ { 0.011477624576608052, 0.50000000000000000, 4.0000000000000000, 0.0 },
+ { 0.0086718932956978342, 0.50000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0065633945646345407, 0.50000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0049752435421262292, 0.50000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler003 = 2.5000000000000020e-13;
+const double toler009 = 2.5000000000000020e-13;
// Test data for nu=0.66666666666666663.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 8.1483075013172610e-16
+// mean(f - f_GSL): 4.7639843459013062e-17
+// variance(f - f_GSL): 1.2803677237205021e-34
+// stddev(f - f_GSL): 1.1315333506885699e-17
const testcase_cyl_bessel_k<double>
-data004[20] =
+data010[20] =
{
- { 2.3289060745544101, 0.66666666666666663, 0.25000000000000000 },
- { 1.2059304647203353, 0.66666666666666663, 0.50000000000000000 },
- { 0.74547232976647215, 0.66666666666666663, 0.75000000000000000 },
- { 0.49447506210420827, 0.66666666666666663, 1.0000000000000000 },
- { 0.34062994813514252, 0.66666666666666663, 1.2500000000000000 },
- { 0.24024045240315581, 0.66666666666666663, 1.5000000000000000 },
- { 0.17217716908452310, 0.66666666666666663, 1.7500000000000000 },
- { 0.12483892748812841, 0.66666666666666663, 2.0000000000000000 },
- { 0.091315296079621050, 0.66666666666666663, 2.2500000000000000 },
- { 0.067255322171623361, 0.66666666666666663, 2.5000000000000000 },
- { 0.049809546542402224, 0.66666666666666663, 2.7500000000000000 },
- { 0.037057074495188531, 0.66666666666666663, 3.0000000000000000 },
- { 0.027674365504886729, 0.66666666666666663, 3.2500000000000000 },
- { 0.020733915836010912, 0.66666666666666663, 3.5000000000000000 },
- { 0.015577015510251332, 0.66666666666666663, 3.7500000000000000 },
- { 0.011730801456525336, 0.66666666666666663, 4.0000000000000000 },
- { 0.0088528343204658851, 0.66666666666666663, 4.2500000000000000 },
- { 0.0066933190915775560, 0.66666666666666663, 4.5000000000000000 },
- { 0.0050689292106255480, 0.66666666666666663, 4.7500000000000000 },
- { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000 },
+ { 2.3289060745544101, 0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 1.2059304647203353, 0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 0.74547232976647215, 0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 0.49447506210420827, 0.66666666666666663, 1.0000000000000000, 0.0 },
+ { 0.34062994813514252, 0.66666666666666663, 1.2500000000000000, 0.0 },
+ { 0.24024045240315581, 0.66666666666666663, 1.5000000000000000, 0.0 },
+ { 0.17217716908452310, 0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 0.12483892748812841, 0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 0.091315296079621050, 0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 0.067255322171623361, 0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 0.049809546542402224, 0.66666666666666663, 2.7500000000000000, 0.0 },
+ { 0.037057074495188531, 0.66666666666666663, 3.0000000000000000, 0.0 },
+ { 0.027674365504886729, 0.66666666666666663, 3.2500000000000000, 0.0 },
+ { 0.020733915836010912, 0.66666666666666663, 3.5000000000000000, 0.0 },
+ { 0.015577015510251332, 0.66666666666666663, 3.7500000000000000, 0.0 },
+ { 0.011730801456525336, 0.66666666666666663, 4.0000000000000000, 0.0 },
+ { 0.0088528343204658851, 0.66666666666666663, 4.2500000000000000, 0.0 },
+ { 0.0066933190915775560, 0.66666666666666663, 4.5000000000000000, 0.0 },
+ { 0.0050689292106255480, 0.66666666666666663, 4.7500000000000000, 0.0 },
+ { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000, 0.0 },
};
-const double toler004 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000020e-13;
// Test data for nu=1.0000000000000000.
// max(|f - f_GSL|): 5.5511151231257827e-17
// max(|f - f_GSL| / |f_GSL|): 2.7422040631145076e-16
+// mean(f - f_GSL): -3.9031278209478161e-19
+// variance(f - f_GSL): 8.4401145632447902e-39
+// stddev(f - f_GSL): 9.1870096131683624e-20
const testcase_cyl_bessel_k<double>
-data005[20] =
+data011[20] =
{
- { 3.7470259744407115, 1.0000000000000000, 0.25000000000000000 },
- { 1.6564411200033007, 1.0000000000000000, 0.50000000000000000 },
- { 0.94958046696214016, 1.0000000000000000, 0.75000000000000000 },
- { 0.60190723019723458, 1.0000000000000000, 1.0000000000000000 },
- { 0.40212407978419540, 1.0000000000000000, 1.2500000000000000 },
- { 0.27738780045684375, 1.0000000000000000, 1.5000000000000000 },
- { 0.19547745347439310, 1.0000000000000000, 1.7500000000000000 },
- { 0.13986588181652262, 1.0000000000000000, 2.0000000000000000 },
- { 0.10121630256832535, 1.0000000000000000, 2.2500000000000000 },
- { 0.073890816347747038, 1.0000000000000000, 2.5000000000000000 },
- { 0.054318522758919859, 1.0000000000000000, 2.7500000000000000 },
- { 0.040156431128194198, 1.0000000000000000, 3.0000000000000000 },
- { 0.029825529796040143, 1.0000000000000000, 3.2500000000000000 },
- { 0.022239392925923845, 1.0000000000000000, 3.5000000000000000 },
- { 0.016638191754688912, 1.0000000000000000, 3.7500000000000000 },
- { 0.012483498887268435, 1.0000000000000000, 4.0000000000000000 },
- { 0.0093896806560432589, 1.0000000000000000, 4.2500000000000000 },
- { 0.0070780949089680901, 1.0000000000000000, 4.5000000000000000 },
- { 0.0053459218178228390, 1.0000000000000000, 4.7500000000000000 },
- { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000 },
+ { 3.7470259744407115, 1.0000000000000000, 0.25000000000000000, 0.0 },
+ { 1.6564411200033007, 1.0000000000000000, 0.50000000000000000, 0.0 },
+ { 0.94958046696214016, 1.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.60190723019723458, 1.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.40212407978419540, 1.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.27738780045684375, 1.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.19547745347439310, 1.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.13986588181652262, 1.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.10121630256832535, 1.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.073890816347747038, 1.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.054318522758919859, 1.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.040156431128194198, 1.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.029825529796040143, 1.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.022239392925923845, 1.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.016638191754688912, 1.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.012483498887268435, 1.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.0093896806560432589, 1.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0070780949089680901, 1.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0053459218178228390, 1.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler005 = 2.5000000000000020e-13;
+const double toler011 = 2.5000000000000020e-13;
// Test data for nu=2.0000000000000000.
// max(|f - f_GSL|): 3.5527136788005009e-15
// max(|f - f_GSL| / |f_GSL|): 1.9937716861613039e-16
+// mean(f - f_GSL): -2.2195786875123247e-16
+// variance(f - f_GSL): 2.7507525397548148e-33
+// stddev(f - f_GSL): 5.2447617102732272e-17
const testcase_cyl_bessel_k<double>
-data006[20] =
+data012[20] =
{
- { 31.517714546773998, 2.0000000000000000, 0.25000000000000000 },
- { 7.5501835512408695, 2.0000000000000000, 0.50000000000000000 },
- { 3.1427970006821715, 2.0000000000000000, 0.75000000000000000 },
- { 1.6248388986351774, 2.0000000000000000, 1.0000000000000000 },
- { 0.94100161673881855, 2.0000000000000000, 1.2500000000000000 },
- { 0.58365596325665070, 2.0000000000000000, 1.5000000000000000 },
- { 0.37878261635733856, 2.0000000000000000, 1.7500000000000000 },
- { 0.25375975456605621, 2.0000000000000000, 2.0000000000000000 },
- { 0.17401315870205850, 2.0000000000000000, 2.2500000000000000 },
- { 0.12146020627856381, 2.0000000000000000, 2.5000000000000000 },
- { 0.085959281497066137, 2.0000000000000000, 2.7500000000000000 },
- { 0.061510458471742059, 2.0000000000000000, 3.0000000000000000 },
- { 0.044412927437333515, 2.0000000000000000, 3.2500000000000000 },
- { 0.032307121699467839, 2.0000000000000000, 3.5000000000000000 },
- { 0.023647953146296127, 2.0000000000000000, 3.7500000000000000 },
- { 0.017401425529487244, 2.0000000000000000, 4.0000000000000000 },
- { 0.012863060974445674, 2.0000000000000000, 4.2500000000000000 },
- { 0.0095456772027753475, 2.0000000000000000, 4.5000000000000000 },
- { 0.0071081190074975690, 2.0000000000000000, 4.7500000000000000 },
- { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000 },
+ { 31.517714546773998, 2.0000000000000000, 0.25000000000000000, 0.0 },
+ { 7.5501835512408695, 2.0000000000000000, 0.50000000000000000, 0.0 },
+ { 3.1427970006821715, 2.0000000000000000, 0.75000000000000000, 0.0 },
+ { 1.6248388986351774, 2.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.94100161673881855, 2.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.58365596325665070, 2.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.37878261635733856, 2.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.25375975456605621, 2.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.17401315870205850, 2.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.12146020627856381, 2.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.085959281497066137, 2.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.061510458471742059, 2.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.044412927437333515, 2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.032307121699467839, 2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.023647953146296127, 2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.017401425529487244, 2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.012863060974445674, 2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.0095456772027753475, 2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.0071081190074975690, 2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler006 = 2.5000000000000020e-13;
+const double toler012 = 2.5000000000000020e-13;
// Test data for nu=5.0000000000000000.
// max(|f - f_GSL|): 5.8207660913467407e-11
// max(|f - f_GSL| / |f_GSL|): 2.4867363835720159e-16
+// mean(f - f_GSL): -3.0002125783745726e-12
+// variance(f - f_GSL): 4.9868793084757286e-25
+// stddev(f - f_GSL): 7.0617839874041235e-13
const testcase_cyl_bessel_k<double>
-data007[20] =
+data013[20] =
{
- { 391683.98962334893, 5.0000000000000000, 0.25000000000000000 },
- { 12097.979476096394, 5.0000000000000000, 0.50000000000000000 },
- { 1562.5870339691098, 5.0000000000000000, 0.75000000000000000 },
- { 360.96058960124066, 5.0000000000000000, 1.0000000000000000 },
- { 114.29321426334016, 5.0000000000000000, 1.2500000000000000 },
- { 44.067781159301056, 5.0000000000000000, 1.5000000000000000 },
- { 19.426568687730292, 5.0000000000000000, 1.7500000000000000 },
- { 9.4310491005964820, 5.0000000000000000, 2.0000000000000000 },
- { 4.9221270549918685, 5.0000000000000000, 2.2500000000000000 },
- { 2.7168842907865423, 5.0000000000000000, 2.5000000000000000 },
- { 1.5677685890536335, 5.0000000000000000, 2.7500000000000000 },
- { 0.93777360238680818, 5.0000000000000000, 3.0000000000000000 },
- { 0.57775534736785106, 5.0000000000000000, 3.2500000000000000 },
- { 0.36482440208451983, 5.0000000000000000, 3.5000000000000000 },
- { 0.23520290620082257, 5.0000000000000000, 3.7500000000000000 },
- { 0.15434254872599723, 5.0000000000000000, 4.0000000000000000 },
- { 0.10283347176876455, 5.0000000000000000, 4.2500000000000000 },
- { 0.069423643150881773, 5.0000000000000000, 4.5000000000000000 },
- { 0.047410616917942211, 5.0000000000000000, 4.7500000000000000 },
- { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000 },
+ { 391683.98962334893, 5.0000000000000000, 0.25000000000000000, 0.0 },
+ { 12097.979476096394, 5.0000000000000000, 0.50000000000000000, 0.0 },
+ { 1562.5870339691098, 5.0000000000000000, 0.75000000000000000, 0.0 },
+ { 360.96058960124066, 5.0000000000000000, 1.0000000000000000, 0.0 },
+ { 114.29321426334016, 5.0000000000000000, 1.2500000000000000, 0.0 },
+ { 44.067781159301056, 5.0000000000000000, 1.5000000000000000, 0.0 },
+ { 19.426568687730292, 5.0000000000000000, 1.7500000000000000, 0.0 },
+ { 9.4310491005964820, 5.0000000000000000, 2.0000000000000000, 0.0 },
+ { 4.9221270549918685, 5.0000000000000000, 2.2500000000000000, 0.0 },
+ { 2.7168842907865423, 5.0000000000000000, 2.5000000000000000, 0.0 },
+ { 1.5677685890536335, 5.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.93777360238680818, 5.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.57775534736785106, 5.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.36482440208451983, 5.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.23520290620082257, 5.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.15434254872599723, 5.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.10283347176876455, 5.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.069423643150881773, 5.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.047410616917942211, 5.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 2.5000000000000020e-13;
// Test data for nu=10.000000000000000.
// max(|f - f_GSL|): 6.1035156250000000e-05
// max(|f - f_GSL| / |f_GSL|): 7.7998476565326393e-16
+// mean(f - f_GSL): -3.0480648965713896e-06
+// variance(f - f_GSL): 5.1472020200574483e-13
+// stddev(f - f_GSL): 7.1744003373504657e-07
const testcase_cyl_bessel_k<double>
-data008[20] =
+data014[20] =
{
- { 194481817927839.88, 10.000000000000000, 0.25000000000000000 },
- { 188937569319.90030, 10.000000000000000, 0.50000000000000000 },
- { 3248187687.8018155, 10.000000000000000, 0.75000000000000000 },
- { 180713289.90102941, 10.000000000000000, 1.0000000000000000 },
- { 19104425.945252180, 10.000000000000000, 1.2500000000000000 },
- { 3027483.5236822353, 10.000000000000000, 1.5000000000000000 },
- { 633724.71555087867, 10.000000000000000, 1.7500000000000000 },
- { 162482.40397955943, 10.000000000000000, 2.0000000000000000 },
- { 48602.446087749791, 10.000000000000000, 2.2500000000000000 },
- { 16406.916416341937, 10.000000000000000, 2.5000000000000000 },
- { 6104.1720745909606, 10.000000000000000, 2.7500000000000000 },
- { 2459.6204220569480, 10.000000000000000, 3.0000000000000000 },
- { 1059.2358443703381, 10.000000000000000, 3.2500000000000000 },
- { 482.53582096664758, 10.000000000000000, 3.5000000000000000 },
- { 230.64249314993776, 10.000000000000000, 3.7500000000000000 },
- { 114.91408364049620, 10.000000000000000, 4.0000000000000000 },
- { 59.361613632706479, 10.000000000000000, 4.2500000000000000 },
- { 31.652958759229868, 10.000000000000000, 4.5000000000000000 },
- { 17.357723966417399, 10.000000000000000, 4.7500000000000000 },
- { 9.7585628291778121, 10.000000000000000, 5.0000000000000000 },
+ { 194481817927839.88, 10.000000000000000, 0.25000000000000000, 0.0 },
+ { 188937569319.90030, 10.000000000000000, 0.50000000000000000, 0.0 },
+ { 3248187687.8018155, 10.000000000000000, 0.75000000000000000, 0.0 },
+ { 180713289.90102941, 10.000000000000000, 1.0000000000000000, 0.0 },
+ { 19104425.945252180, 10.000000000000000, 1.2500000000000000, 0.0 },
+ { 3027483.5236822353, 10.000000000000000, 1.5000000000000000, 0.0 },
+ { 633724.71555087867, 10.000000000000000, 1.7500000000000000, 0.0 },
+ { 162482.40397955943, 10.000000000000000, 2.0000000000000000, 0.0 },
+ { 48602.446087749791, 10.000000000000000, 2.2500000000000000, 0.0 },
+ { 16406.916416341937, 10.000000000000000, 2.5000000000000000, 0.0 },
+ { 6104.1720745909606, 10.000000000000000, 2.7500000000000000, 0.0 },
+ { 2459.6204220569480, 10.000000000000000, 3.0000000000000000, 0.0 },
+ { 1059.2358443703381, 10.000000000000000, 3.2500000000000000, 0.0 },
+ { 482.53582096664758, 10.000000000000000, 3.5000000000000000, 0.0 },
+ { 230.64249314993776, 10.000000000000000, 3.7500000000000000, 0.0 },
+ { 114.91408364049620, 10.000000000000000, 4.0000000000000000, 0.0 },
+ { 59.361613632706479, 10.000000000000000, 4.2500000000000000, 0.0 },
+ { 31.652958759229868, 10.000000000000000, 4.5000000000000000, 0.0 },
+ { 17.357723966417399, 10.000000000000000, 4.7500000000000000, 0.0 },
+ { 9.7585628291778121, 10.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 2.5000000000000020e-13;
// Test data for nu=20.000000000000000.
// max(|f - f_GSL|): 2.7670116110564327e+19
// max(|f - f_GSL| / |f_GSL|): 1.2737005853777639e-15
+// mean(f - f_GSL): -1.3835066851362150e+18
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_k<double>
-data009[20] =
+data015[20] =
{
- { 7.0065983661641184e+34, 20.000000000000000, 0.25000000000000000 },
- { 6.6655498744171593e+28, 20.000000000000000, 0.50000000000000000 },
- { 1.9962989615380379e+25, 20.000000000000000, 0.75000000000000000 },
- { 6.2943693604245335e+22, 20.000000000000000, 1.0000000000000000 },
- { 7.2034511920074182e+20, 20.000000000000000, 1.2500000000000000 },
- { 1.8620549984645546e+19, 20.000000000000000, 1.5000000000000000 },
- { 8.4415605303952486e+17, 20.000000000000000, 1.7500000000000000 },
- { 57708568527002520., 20.000000000000000, 2.0000000000000000 },
- { 5396824209986879.0, 20.000000000000000, 2.2500000000000000 },
- { 645996884063683.62, 20.000000000000000, 2.5000000000000000 },
- { 94387401970996.328, 20.000000000000000, 2.7500000000000000 },
- { 16254643952204.371, 20.000000000000000, 3.0000000000000000 },
- { 3212694836166.4053, 20.000000000000000, 3.2500000000000000 },
- { 713857897923.74072, 20.000000000000000, 3.5000000000000000 },
- { 175423421958.35925, 20.000000000000000, 3.7500000000000000 },
- { 47050078926.298080, 20.000000000000000, 4.0000000000000000 },
- { 13625066095.067503, 20.000000000000000, 4.2500000000000000 },
- { 4222179870.6810656, 20.000000000000000, 4.5000000000000000 },
- { 1389634112.7516634, 20.000000000000000, 4.7500000000000000 },
- { 482700052.06214869, 20.000000000000000, 5.0000000000000000 },
+ { 7.0065983661641184e+34, 20.000000000000000, 0.25000000000000000, 0.0 },
+ { 6.6655498744171593e+28, 20.000000000000000, 0.50000000000000000, 0.0 },
+ { 1.9962989615380379e+25, 20.000000000000000, 0.75000000000000000, 0.0 },
+ { 6.2943693604245335e+22, 20.000000000000000, 1.0000000000000000, 0.0 },
+ { 7.2034511920074182e+20, 20.000000000000000, 1.2500000000000000, 0.0 },
+ { 1.8620549984645546e+19, 20.000000000000000, 1.5000000000000000, 0.0 },
+ { 8.4415605303952486e+17, 20.000000000000000, 1.7500000000000000, 0.0 },
+ { 57708568527002520., 20.000000000000000, 2.0000000000000000, 0.0 },
+ { 5396824209986879.0, 20.000000000000000, 2.2500000000000000, 0.0 },
+ { 645996884063683.62, 20.000000000000000, 2.5000000000000000, 0.0 },
+ { 94387401970996.328, 20.000000000000000, 2.7500000000000000, 0.0 },
+ { 16254643952204.371, 20.000000000000000, 3.0000000000000000, 0.0 },
+ { 3212694836166.4053, 20.000000000000000, 3.2500000000000000, 0.0 },
+ { 713857897923.74072, 20.000000000000000, 3.5000000000000000, 0.0 },
+ { 175423421958.35925, 20.000000000000000, 3.7500000000000000, 0.0 },
+ { 47050078926.298080, 20.000000000000000, 4.0000000000000000, 0.0 },
+ { 13625066095.067503, 20.000000000000000, 4.2500000000000000, 0.0 },
+ { 4222179870.6810656, 20.000000000000000, 4.5000000000000000, 0.0 },
+ { 1389634112.7516634, 20.000000000000000, 4.7500000000000000, 0.0 },
+ { 482700052.06214869, 20.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 2.5000000000000020e-13;
// Test data for nu=50.000000000000000.
// max(|f - f_GSL|): 3.9111090745622133e+92
// max(|f - f_GSL| / |f_GSL|): 3.7220730535457535e-15
+// mean(f - f_GSL): -1.9555545372811066e+91
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_k<double>
-data010[20] =
+data016[20] =
{
- { 4.3394604622138714e+107, 50.000000000000000, 0.25000000000000000 },
- { 3.8505298918269003e+92, 50.000000000000000, 0.50000000000000000 },
- { 6.0292756894842793e+83, 50.000000000000000, 0.75000000000000000 },
- { 3.4068968541616991e+77, 50.000000000000000, 1.0000000000000000 },
- { 4.8485527365039051e+72, 50.000000000000000, 1.2500000000000000 },
- { 5.3091717574907920e+68, 50.000000000000000, 1.5000000000000000 },
- { 2.3762245257445824e+65, 50.000000000000000, 1.7500000000000000 },
- { 2.9799817396049268e+62, 50.000000000000000, 2.0000000000000000 },
- { 8.2079431233488581e+59, 50.000000000000000, 2.2500000000000000 },
- { 4.2046528212987503e+57, 50.000000000000000, 2.5000000000000000 },
- { 3.5578676911884825e+55, 50.000000000000000, 2.7500000000000000 },
- { 4.5559542293221535e+53, 50.000000000000000, 3.0000000000000000 },
- { 8.2606735967628997e+51, 50.000000000000000, 3.2500000000000000 },
- { 2.0139406747903812e+50, 50.000000000000000, 3.5000000000000000 },
- { 6.3368727837484600e+48, 50.000000000000000, 3.7500000000000000 },
- { 2.4897317389325753e+47, 50.000000000000000, 4.0000000000000000 },
- { 1.1888958173039699e+46, 50.000000000000000, 4.2500000000000000 },
- { 6.7472593648148542e+44, 50.000000000000000, 4.5000000000000000 },
- { 4.4664266585930700e+43, 50.000000000000000, 4.7500000000000000 },
- { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000 },
+ { 4.3394604622138714e+107, 50.000000000000000, 0.25000000000000000, 0.0 },
+ { 3.8505298918269003e+92, 50.000000000000000, 0.50000000000000000, 0.0 },
+ { 6.0292756894842793e+83, 50.000000000000000, 0.75000000000000000, 0.0 },
+ { 3.4068968541616991e+77, 50.000000000000000, 1.0000000000000000, 0.0 },
+ { 4.8485527365039051e+72, 50.000000000000000, 1.2500000000000000, 0.0 },
+ { 5.3091717574907920e+68, 50.000000000000000, 1.5000000000000000, 0.0 },
+ { 2.3762245257445824e+65, 50.000000000000000, 1.7500000000000000, 0.0 },
+ { 2.9799817396049268e+62, 50.000000000000000, 2.0000000000000000, 0.0 },
+ { 8.2079431233488581e+59, 50.000000000000000, 2.2500000000000000, 0.0 },
+ { 4.2046528212987503e+57, 50.000000000000000, 2.5000000000000000, 0.0 },
+ { 3.5578676911884825e+55, 50.000000000000000, 2.7500000000000000, 0.0 },
+ { 4.5559542293221535e+53, 50.000000000000000, 3.0000000000000000, 0.0 },
+ { 8.2606735967628997e+51, 50.000000000000000, 3.2500000000000000, 0.0 },
+ { 2.0139406747903812e+50, 50.000000000000000, 3.5000000000000000, 0.0 },
+ { 6.3368727837484600e+48, 50.000000000000000, 3.7500000000000000, 0.0 },
+ { 2.4897317389325753e+47, 50.000000000000000, 4.0000000000000000, 0.0 },
+ { 1.1888958173039699e+46, 50.000000000000000, 4.2500000000000000, 0.0 },
+ { 6.7472593648148542e+44, 50.000000000000000, 4.5000000000000000, 0.0 },
+ { 4.4664266585930700e+43, 50.000000000000000, 4.7500000000000000, 0.0 },
+ { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler010 = 2.5000000000000020e-13;
+const double toler016 = 2.5000000000000020e-13;
// Test data for nu=100.00000000000000.
// max(|f - f_GSL|): 8.5970689361151757e+232
// max(|f - f_GSL| / |f_GSL|): 9.0457919481999128e-14
+// mean(f - f_GSL): -4.2985344680575876e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_k<double>
-data011[20] =
+data017[20] =
{
- { 9.5039428115809898e+245, 100.00000000000000, 0.25000000000000000 },
- { 7.4937399313533112e+215, 100.00000000000000, 0.50000000000000000 },
- { 1.8417471020730701e+198, 100.00000000000000, 0.75000000000000000 },
- { 5.9003331836386410e+185, 100.00000000000000, 1.0000000000000000 },
- { 1.2002130935576950e+176, 100.00000000000000, 1.2500000000000000 },
- { 1.4467044226487075e+168, 100.00000000000000, 1.5000000000000000 },
- { 2.9161498411497642e+161, 100.00000000000000, 1.7500000000000000 },
- { 4.6194159776013925e+155, 100.00000000000000, 2.0000000000000000 },
- { 3.5332121583541727e+150, 100.00000000000000, 2.2500000000000000 },
- { 9.3566097231039940e+145, 100.00000000000000, 2.5000000000000000 },
- { 6.7672283615134532e+141, 100.00000000000000, 2.7500000000000000 },
- { 1.1219630864949494e+138, 100.00000000000000, 3.0000000000000000 },
- { 3.7329723699990903e+134, 100.00000000000000, 3.2500000000000000 },
- { 2.2476893883855163e+131, 100.00000000000000, 3.5000000000000000 },
- { 2.2564559319883196e+128, 100.00000000000000, 3.7500000000000000 },
- { 3.5353340499626455e+125, 100.00000000000000, 4.0000000000000000 },
- { 8.1898439213010234e+122, 100.00000000000000, 4.2500000000000000 },
- { 2.6823744110726800e+120, 100.00000000000000, 4.5000000000000000 },
- { 1.1963963615212274e+118, 100.00000000000000, 4.7500000000000000 },
- { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000 },
+ { 9.5039428115809898e+245, 100.00000000000000, 0.25000000000000000, 0.0 },
+ { 7.4937399313533112e+215, 100.00000000000000, 0.50000000000000000, 0.0 },
+ { 1.8417471020730701e+198, 100.00000000000000, 0.75000000000000000, 0.0 },
+ { 5.9003331836386410e+185, 100.00000000000000, 1.0000000000000000, 0.0 },
+ { 1.2002130935576950e+176, 100.00000000000000, 1.2500000000000000, 0.0 },
+ { 1.4467044226487075e+168, 100.00000000000000, 1.5000000000000000, 0.0 },
+ { 2.9161498411497642e+161, 100.00000000000000, 1.7500000000000000, 0.0 },
+ { 4.6194159776013925e+155, 100.00000000000000, 2.0000000000000000, 0.0 },
+ { 3.5332121583541727e+150, 100.00000000000000, 2.2500000000000000, 0.0 },
+ { 9.3566097231039940e+145, 100.00000000000000, 2.5000000000000000, 0.0 },
+ { 6.7672283615134532e+141, 100.00000000000000, 2.7500000000000000, 0.0 },
+ { 1.1219630864949494e+138, 100.00000000000000, 3.0000000000000000, 0.0 },
+ { 3.7329723699990903e+134, 100.00000000000000, 3.2500000000000000, 0.0 },
+ { 2.2476893883855163e+131, 100.00000000000000, 3.5000000000000000, 0.0 },
+ { 2.2564559319883196e+128, 100.00000000000000, 3.7500000000000000, 0.0 },
+ { 3.5353340499626455e+125, 100.00000000000000, 4.0000000000000000, 0.0 },
+ { 8.1898439213010234e+122, 100.00000000000000, 4.2500000000000000, 0.0 },
+ { 2.6823744110726800e+120, 100.00000000000000, 4.5000000000000000, 0.0 },
+ { 1.1963963615212274e+118, 100.00000000000000, 4.7500000000000000, 0.0 },
+ { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
};
-const double toler011 = 5.0000000000000029e-12;
+const double toler017 = 5.0000000000000029e-12;
// cyl_bessel_k
// Test data for nu=0.0000000000000000.
// max(|f - f_GSL|): 4.3368086899420177e-19
// max(|f - f_GSL| / |f_GSL|): 1.8009631353873430e-16
+// mean(f - f_GSL): 2.1684048619431144e-20
+// variance(f - f_GSL): 2.6049748727415720e-41
+// stddev(f - f_GSL): 5.1038954463640532e-21
const testcase_cyl_bessel_k<double>
-data012[20] =
+data018[20] =
{
- { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000 },
- { 1.7780062316167650e-05, 0.0000000000000000, 10.000000000000000 },
- { 9.8195364823964333e-08, 0.0000000000000000, 15.000000000000000 },
- { 5.7412378153365238e-10, 0.0000000000000000, 20.000000000000000 },
- { 3.4641615622131151e-12, 0.0000000000000000, 25.000000000000000 },
- { 2.1324774964630566e-14, 0.0000000000000000, 30.000000000000000 },
- { 1.3310351491429464e-16, 0.0000000000000000, 35.000000000000000 },
- { 8.3928611000995700e-19, 0.0000000000000000, 40.000000000000000 },
- { 5.3334561226187247e-21, 0.0000000000000000, 45.000000000000000 },
- { 3.4101677497894956e-23, 0.0000000000000000, 50.000000000000000 },
- { 2.1913102183534147e-25, 0.0000000000000000, 55.000000000000000 },
- { 1.4138978405591074e-27, 0.0000000000000000, 60.000000000000000 },
- { 9.1544673210030045e-30, 0.0000000000000000, 65.000000000000000 },
- { 5.9446613372925013e-32, 0.0000000000000000, 70.000000000000000 },
- { 3.8701170455869113e-34, 0.0000000000000000, 75.000000000000000 },
- { 2.5251198425054723e-36, 0.0000000000000000, 80.000000000000000 },
- { 1.6507623579783908e-38, 0.0000000000000000, 85.000000000000000 },
- { 1.0810242556984256e-40, 0.0000000000000000, 90.000000000000000 },
- { 7.0901249699001278e-43, 0.0000000000000000, 95.000000000000000 },
- { 4.6566282291759032e-45, 0.0000000000000000, 100.00000000000000 },
+ { 0.0036910983340425947, 0.0000000000000000, 5.0000000000000000, 0.0 },
+ { 1.7780062316167650e-05, 0.0000000000000000, 10.000000000000000, 0.0 },
+ { 9.8195364823964333e-08, 0.0000000000000000, 15.000000000000000, 0.0 },
+ { 5.7412378153365238e-10, 0.0000000000000000, 20.000000000000000, 0.0 },
+ { 3.4641615622131151e-12, 0.0000000000000000, 25.000000000000000, 0.0 },
+ { 2.1324774964630566e-14, 0.0000000000000000, 30.000000000000000, 0.0 },
+ { 1.3310351491429464e-16, 0.0000000000000000, 35.000000000000000, 0.0 },
+ { 8.3928611000995700e-19, 0.0000000000000000, 40.000000000000000, 0.0 },
+ { 5.3334561226187247e-21, 0.0000000000000000, 45.000000000000000, 0.0 },
+ { 3.4101677497894956e-23, 0.0000000000000000, 50.000000000000000, 0.0 },
+ { 2.1913102183534147e-25, 0.0000000000000000, 55.000000000000000, 0.0 },
+ { 1.4138978405591074e-27, 0.0000000000000000, 60.000000000000000, 0.0 },
+ { 9.1544673210030045e-30, 0.0000000000000000, 65.000000000000000, 0.0 },
+ { 5.9446613372925013e-32, 0.0000000000000000, 70.000000000000000, 0.0 },
+ { 3.8701170455869113e-34, 0.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.5251198425054723e-36, 0.0000000000000000, 80.000000000000000, 0.0 },
+ { 1.6507623579783908e-38, 0.0000000000000000, 85.000000000000000, 0.0 },
+ { 1.0810242556984256e-40, 0.0000000000000000, 90.000000000000000, 0.0 },
+ { 7.0901249699001278e-43, 0.0000000000000000, 95.000000000000000, 0.0 },
+ { 4.6566282291759032e-45, 0.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler012 = 2.5000000000000020e-13;
+const double toler018 = 2.5000000000000020e-13;
// Test data for nu=0.33333333333333331.
// max(|f - f_GSL|): 1.0339757656912846e-25
// max(|f - f_GSL| / |f_GSL|): 1.7960859646361972e-16
+// mean(f - f_GSL): 5.1698788236418900e-27
+// variance(f - f_GSL): 1.4807560693152825e-54
+// stddev(f - f_GSL): 1.2168632089578855e-27
const testcase_cyl_bessel_k<double>
-data013[20] =
+data019[20] =
{
- { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000 },
- { 1.7874608271055339e-05, 0.33333333333333331, 10.000000000000000 },
- { 9.8548341568798317e-08, 0.33333333333333331, 15.000000000000000 },
- { 5.7568278247790865e-10, 0.33333333333333331, 20.000000000000000 },
- { 3.4717201424907059e-12, 0.33333333333333331, 25.000000000000000 },
- { 2.1363664736611189e-14, 0.33333333333333331, 30.000000000000000 },
- { 1.3331202314165813e-16, 0.33333333333333331, 35.000000000000000 },
- { 8.4043837769480934e-19, 0.33333333333333331, 40.000000000000000 },
- { 5.3399731261024948e-21, 0.33333333333333331, 45.000000000000000 },
- { 3.4139217813583632e-23, 0.33333333333333331, 50.000000000000000 },
- { 2.1935050179185627e-25, 0.33333333333333331, 55.000000000000000 },
- { 1.4151968805623662e-27, 0.33333333333333331, 60.000000000000000 },
- { 9.1622357217019043e-30, 0.33333333333333331, 65.000000000000000 },
- { 5.9493479703461315e-32, 0.33333333333333331, 70.000000000000000 },
- { 3.8729660011055947e-34, 0.33333333333333331, 75.000000000000000 },
- { 2.5268631828013877e-36, 0.33333333333333331, 80.000000000000000 },
- { 1.6518353676138867e-38, 0.33333333333333331, 85.000000000000000 },
- { 1.0816880942511494e-40, 0.33333333333333331, 90.000000000000000 },
- { 7.0942508599231512e-43, 0.33333333333333331, 95.000000000000000 },
- { 4.6592031570213454e-45, 0.33333333333333331, 100.00000000000000 },
+ { 0.0037288750960535887, 0.33333333333333331, 5.0000000000000000, 0.0 },
+ { 1.7874608271055339e-05, 0.33333333333333331, 10.000000000000000, 0.0 },
+ { 9.8548341568798317e-08, 0.33333333333333331, 15.000000000000000, 0.0 },
+ { 5.7568278247790865e-10, 0.33333333333333331, 20.000000000000000, 0.0 },
+ { 3.4717201424907059e-12, 0.33333333333333331, 25.000000000000000, 0.0 },
+ { 2.1363664736611189e-14, 0.33333333333333331, 30.000000000000000, 0.0 },
+ { 1.3331202314165813e-16, 0.33333333333333331, 35.000000000000000, 0.0 },
+ { 8.4043837769480934e-19, 0.33333333333333331, 40.000000000000000, 0.0 },
+ { 5.3399731261024948e-21, 0.33333333333333331, 45.000000000000000, 0.0 },
+ { 3.4139217813583632e-23, 0.33333333333333331, 50.000000000000000, 0.0 },
+ { 2.1935050179185627e-25, 0.33333333333333331, 55.000000000000000, 0.0 },
+ { 1.4151968805623662e-27, 0.33333333333333331, 60.000000000000000, 0.0 },
+ { 9.1622357217019043e-30, 0.33333333333333331, 65.000000000000000, 0.0 },
+ { 5.9493479703461315e-32, 0.33333333333333331, 70.000000000000000, 0.0 },
+ { 3.8729660011055947e-34, 0.33333333333333331, 75.000000000000000, 0.0 },
+ { 2.5268631828013877e-36, 0.33333333333333331, 80.000000000000000, 0.0 },
+ { 1.6518353676138867e-38, 0.33333333333333331, 85.000000000000000, 0.0 },
+ { 1.0816880942511494e-40, 0.33333333333333331, 90.000000000000000, 0.0 },
+ { 7.0942508599231512e-43, 0.33333333333333331, 95.000000000000000, 0.0 },
+ { 4.6592031570213454e-45, 0.33333333333333331, 100.00000000000000, 0.0 },
};
-const double toler013 = 2.5000000000000020e-13;
+const double toler019 = 2.5000000000000020e-13;
// Test data for nu=0.50000000000000000.
// max(|f - f_GSL|): 1.5046327690525280e-36
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): -7.5525512040331970e-38
+// variance(f - f_GSL): 3.1601678498361940e-76
+// stddev(f - f_GSL): 1.7776860942911697e-38
const testcase_cyl_bessel_k<double>
-data014[20] =
+data020[20] =
{
- { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000 },
- { 1.7993478093705181e-05, 0.50000000000000000, 10.000000000000000 },
- { 9.8991312032877236e-08, 0.50000000000000000, 15.000000000000000 },
- { 5.7763739747074450e-10, 0.50000000000000000, 20.000000000000000 },
- { 3.4811912768406949e-12, 0.50000000000000000, 25.000000000000000 },
- { 2.1412375659560111e-14, 0.50000000000000000, 30.000000000000000 },
- { 1.3357311366035824e-16, 0.50000000000000000, 35.000000000000000 },
- { 8.4188091949489049e-19, 0.50000000000000000, 40.000000000000000 },
- { 5.3481305002517408e-21, 0.50000000000000000, 45.000000000000000 },
- { 3.4186200954570754e-23, 0.50000000000000000, 50.000000000000000 },
- { 2.1962515908772453e-25, 0.50000000000000000, 55.000000000000000 },
- { 1.4168223500353693e-27, 0.50000000000000000, 60.000000000000000 },
- { 9.1719554473256892e-30, 0.50000000000000000, 65.000000000000000 },
- { 5.9552114337788932e-32, 0.50000000000000000, 70.000000000000000 },
- { 3.8765301321409432e-34, 0.50000000000000000, 75.000000000000000 },
- { 2.5290440439442910e-36, 0.50000000000000000, 80.000000000000000 },
- { 1.6531776067605980e-38, 0.50000000000000000, 85.000000000000000 },
- { 1.0825184636529955e-40, 0.50000000000000000, 90.000000000000000 },
- { 7.0994115873258822e-43, 0.50000000000000000, 95.000000000000000 },
- { 4.6624238126346715e-45, 0.50000000000000000, 100.00000000000000 },
+ { 0.0037766133746428825, 0.50000000000000000, 5.0000000000000000, 0.0 },
+ { 1.7993478093705181e-05, 0.50000000000000000, 10.000000000000000, 0.0 },
+ { 9.8991312032877236e-08, 0.50000000000000000, 15.000000000000000, 0.0 },
+ { 5.7763739747074450e-10, 0.50000000000000000, 20.000000000000000, 0.0 },
+ { 3.4811912768406949e-12, 0.50000000000000000, 25.000000000000000, 0.0 },
+ { 2.1412375659560111e-14, 0.50000000000000000, 30.000000000000000, 0.0 },
+ { 1.3357311366035824e-16, 0.50000000000000000, 35.000000000000000, 0.0 },
+ { 8.4188091949489049e-19, 0.50000000000000000, 40.000000000000000, 0.0 },
+ { 5.3481305002517408e-21, 0.50000000000000000, 45.000000000000000, 0.0 },
+ { 3.4186200954570754e-23, 0.50000000000000000, 50.000000000000000, 0.0 },
+ { 2.1962515908772453e-25, 0.50000000000000000, 55.000000000000000, 0.0 },
+ { 1.4168223500353693e-27, 0.50000000000000000, 60.000000000000000, 0.0 },
+ { 9.1719554473256892e-30, 0.50000000000000000, 65.000000000000000, 0.0 },
+ { 5.9552114337788932e-32, 0.50000000000000000, 70.000000000000000, 0.0 },
+ { 3.8765301321409432e-34, 0.50000000000000000, 75.000000000000000, 0.0 },
+ { 2.5290440439442910e-36, 0.50000000000000000, 80.000000000000000, 0.0 },
+ { 1.6531776067605980e-38, 0.50000000000000000, 85.000000000000000, 0.0 },
+ { 1.0825184636529955e-40, 0.50000000000000000, 90.000000000000000, 0.0 },
+ { 7.0994115873258822e-43, 0.50000000000000000, 95.000000000000000, 0.0 },
+ { 4.6624238126346715e-45, 0.50000000000000000, 100.00000000000000, 0.0 },
};
-const double toler014 = 2.5000000000000020e-13;
+const double toler020 = 2.5000000000000020e-13;
// Test data for nu=0.66666666666666663.
// max(|f - f_GSL|): 4.3368086899420177e-19
// max(|f - f_GSL| / |f_GSL|): 3.5630695000470094e-16
+// mean(f - f_GSL): -2.1515288265149388e-20
+// variance(f - f_GSL): 2.5645852029499995e-41
+// stddev(f - f_GSL): 5.0641733806713211e-21
const testcase_cyl_bessel_k<double>
-data015[20] =
+data021[20] =
{
- { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000 },
- { 1.8161187569530204e-05, 0.66666666666666663, 10.000000000000000 },
- { 9.9614751542305571e-08, 0.66666666666666663, 15.000000000000000 },
- { 5.8038484271925811e-10, 0.66666666666666663, 20.000000000000000 },
- { 3.4944937498488603e-12, 0.66666666666666663, 25.000000000000000 },
- { 2.1480755645577720e-14, 0.66666666666666663, 30.000000000000000 },
- { 1.3393949190152161e-16, 0.66666666666666663, 35.000000000000000 },
- { 8.4390460553642992e-19, 0.66666666666666663, 40.000000000000000 },
- { 5.3595716143622089e-21, 0.66666666666666663, 45.000000000000000 },
- { 3.4252085301433749e-23, 0.66666666666666663, 50.000000000000000 },
- { 2.2001025377982308e-25, 0.66666666666666663, 55.000000000000000 },
- { 1.4191011274172078e-27, 0.66666666666666663, 60.000000000000000 },
- { 9.1855803020269763e-30, 0.66666666666666663, 65.000000000000000 },
- { 5.9634299472578764e-32, 0.66666666666666663, 70.000000000000000 },
- { 3.8815254026478500e-34, 0.66666666666666663, 75.000000000000000 },
- { 2.5321003991943851e-36, 0.66666666666666663, 80.000000000000000 },
- { 1.6550585670593067e-38, 0.66666666666666663, 85.000000000000000 },
- { 1.0836820479428605e-40, 0.66666666666666663, 90.000000000000000 },
- { 7.1066428916285356e-43, 0.66666666666666663, 95.000000000000000 },
- { 4.6669364587280465e-45, 0.66666666666666663, 100.00000000000000 },
+ { 0.0038444246344968226, 0.66666666666666663, 5.0000000000000000, 0.0 },
+ { 1.8161187569530204e-05, 0.66666666666666663, 10.000000000000000, 0.0 },
+ { 9.9614751542305571e-08, 0.66666666666666663, 15.000000000000000, 0.0 },
+ { 5.8038484271925811e-10, 0.66666666666666663, 20.000000000000000, 0.0 },
+ { 3.4944937498488603e-12, 0.66666666666666663, 25.000000000000000, 0.0 },
+ { 2.1480755645577720e-14, 0.66666666666666663, 30.000000000000000, 0.0 },
+ { 1.3393949190152161e-16, 0.66666666666666663, 35.000000000000000, 0.0 },
+ { 8.4390460553642992e-19, 0.66666666666666663, 40.000000000000000, 0.0 },
+ { 5.3595716143622089e-21, 0.66666666666666663, 45.000000000000000, 0.0 },
+ { 3.4252085301433749e-23, 0.66666666666666663, 50.000000000000000, 0.0 },
+ { 2.2001025377982308e-25, 0.66666666666666663, 55.000000000000000, 0.0 },
+ { 1.4191011274172078e-27, 0.66666666666666663, 60.000000000000000, 0.0 },
+ { 9.1855803020269763e-30, 0.66666666666666663, 65.000000000000000, 0.0 },
+ { 5.9634299472578764e-32, 0.66666666666666663, 70.000000000000000, 0.0 },
+ { 3.8815254026478500e-34, 0.66666666666666663, 75.000000000000000, 0.0 },
+ { 2.5321003991943851e-36, 0.66666666666666663, 80.000000000000000, 0.0 },
+ { 1.6550585670593067e-38, 0.66666666666666663, 85.000000000000000, 0.0 },
+ { 1.0836820479428605e-40, 0.66666666666666663, 90.000000000000000, 0.0 },
+ { 7.1066428916285356e-43, 0.66666666666666663, 95.000000000000000, 0.0 },
+ { 4.6669364587280465e-45, 0.66666666666666663, 100.00000000000000, 0.0 },
};
-const double toler015 = 2.5000000000000020e-13;
+const double toler021 = 2.5000000000000020e-13;
// Test data for nu=1.0000000000000000.
// max(|f - f_GSL|): 1.0339757656912846e-25
// max(|f - f_GSL| / |f_GSL|): 2.9112857291682056e-16
+// mean(f - f_GSL): 5.1695632793171229e-27
+// variance(f - f_GSL): 1.4805753184966211e-54
+// stddev(f - f_GSL): 1.2167889375305073e-27
const testcase_cyl_bessel_k<double>
-data016[20] =
+data022[20] =
{
- { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000 },
- { 1.8648773453825582e-05, 1.0000000000000000, 10.000000000000000 },
- { 1.0141729369762091e-07, 1.0000000000000000, 15.000000000000000 },
- { 5.8830579695570384e-10, 1.0000000000000000, 20.000000000000000 },
- { 3.5327780731999345e-12, 1.0000000000000000, 25.000000000000000 },
- { 2.1677320018915498e-14, 1.0000000000000000, 30.000000000000000 },
- { 1.3499178340011053e-16, 1.0000000000000000, 35.000000000000000 },
- { 8.4971319548610435e-19, 1.0000000000000000, 40.000000000000000 },
- { 5.3923945937225035e-21, 1.0000000000000000, 45.000000000000000 },
- { 3.4441022267175555e-23, 1.0000000000000000, 50.000000000000000 },
- { 2.2111422716117463e-25, 1.0000000000000000, 55.000000000000000 },
- { 1.4256320265171041e-27, 1.0000000000000000, 60.000000000000000 },
- { 9.2246195278906156e-30, 1.0000000000000000, 65.000000000000000 },
- { 5.9869736739138550e-32, 1.0000000000000000, 70.000000000000000 },
- { 3.8958329467421912e-34, 1.0000000000000000, 75.000000000000000 },
- { 2.5408531275211708e-36, 1.0000000000000000, 80.000000000000000 },
- { 1.6604444948567571e-38, 1.0000000000000000, 85.000000000000000 },
- { 1.0870134457498335e-40, 1.0000000000000000, 90.000000000000000 },
- { 7.1273442329907240e-43, 1.0000000000000000, 95.000000000000000 },
- { 4.6798537356369101e-45, 1.0000000000000000, 100.00000000000000 },
+ { 0.0040446134454521655, 1.0000000000000000, 5.0000000000000000, 0.0 },
+ { 1.8648773453825582e-05, 1.0000000000000000, 10.000000000000000, 0.0 },
+ { 1.0141729369762091e-07, 1.0000000000000000, 15.000000000000000, 0.0 },
+ { 5.8830579695570384e-10, 1.0000000000000000, 20.000000000000000, 0.0 },
+ { 3.5327780731999345e-12, 1.0000000000000000, 25.000000000000000, 0.0 },
+ { 2.1677320018915498e-14, 1.0000000000000000, 30.000000000000000, 0.0 },
+ { 1.3499178340011053e-16, 1.0000000000000000, 35.000000000000000, 0.0 },
+ { 8.4971319548610435e-19, 1.0000000000000000, 40.000000000000000, 0.0 },
+ { 5.3923945937225035e-21, 1.0000000000000000, 45.000000000000000, 0.0 },
+ { 3.4441022267175555e-23, 1.0000000000000000, 50.000000000000000, 0.0 },
+ { 2.2111422716117463e-25, 1.0000000000000000, 55.000000000000000, 0.0 },
+ { 1.4256320265171041e-27, 1.0000000000000000, 60.000000000000000, 0.0 },
+ { 9.2246195278906156e-30, 1.0000000000000000, 65.000000000000000, 0.0 },
+ { 5.9869736739138550e-32, 1.0000000000000000, 70.000000000000000, 0.0 },
+ { 3.8958329467421912e-34, 1.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.5408531275211708e-36, 1.0000000000000000, 80.000000000000000, 0.0 },
+ { 1.6604444948567571e-38, 1.0000000000000000, 85.000000000000000, 0.0 },
+ { 1.0870134457498335e-40, 1.0000000000000000, 90.000000000000000, 0.0 },
+ { 7.1273442329907240e-43, 1.0000000000000000, 95.000000000000000, 0.0 },
+ { 4.6798537356369101e-45, 1.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler016 = 2.5000000000000020e-13;
+const double toler022 = 2.5000000000000020e-13;
// Test data for nu=2.0000000000000000.
// max(|f - f_GSL|): 8.6736173798840355e-19
// max(|f - f_GSL| / |f_GSL|): 1.6337745981208381e-16
+// mean(f - f_GSL): 4.3368092069142465e-20
+// variance(f - f_GSL): 1.0419897006745805e-40
+// stddev(f - f_GSL): 1.0207789675902322e-20
const testcase_cyl_bessel_k<double>
-data017[20] =
+data023[20] =
{
- { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000 },
- { 2.1509817006932767e-05, 2.0000000000000000, 10.000000000000000 },
- { 1.1171767065031378e-07, 2.0000000000000000, 15.000000000000000 },
- { 6.3295436122922281e-10, 2.0000000000000000, 20.000000000000000 },
- { 3.7467838080691102e-12, 2.0000000000000000, 25.000000000000000 },
- { 2.2769929632558265e-14, 2.0000000000000000, 30.000000000000000 },
- { 1.4081733110858665e-16, 2.0000000000000000, 35.000000000000000 },
- { 8.8177176978426223e-19, 2.0000000000000000, 40.000000000000000 },
- { 5.5731181045619470e-21, 2.0000000000000000, 45.000000000000000 },
- { 3.5479318388581979e-23, 2.0000000000000000, 50.000000000000000 },
- { 2.2717153918665688e-25, 2.0000000000000000, 55.000000000000000 },
- { 1.4614189081096777e-27, 2.0000000000000000, 60.000000000000000 },
- { 9.4383017680150234e-30, 2.0000000000000000, 65.000000000000000 },
- { 6.1157177279757537e-32, 2.0000000000000000, 70.000000000000000 },
- { 3.9740059241667034e-34, 2.0000000000000000, 75.000000000000000 },
- { 2.5886411706935015e-36, 2.0000000000000000, 80.000000000000000 },
- { 1.6898316402103142e-38, 2.0000000000000000, 85.000000000000000 },
- { 1.1051801100484218e-40, 2.0000000000000000, 90.000000000000000 },
- { 7.2401743221736176e-43, 2.0000000000000000, 95.000000000000000 },
- { 4.7502253038886413e-45, 2.0000000000000000, 100.00000000000000 },
+ { 0.0053089437122234608, 2.0000000000000000, 5.0000000000000000, 0.0 },
+ { 2.1509817006932767e-05, 2.0000000000000000, 10.000000000000000, 0.0 },
+ { 1.1171767065031378e-07, 2.0000000000000000, 15.000000000000000, 0.0 },
+ { 6.3295436122922281e-10, 2.0000000000000000, 20.000000000000000, 0.0 },
+ { 3.7467838080691102e-12, 2.0000000000000000, 25.000000000000000, 0.0 },
+ { 2.2769929632558265e-14, 2.0000000000000000, 30.000000000000000, 0.0 },
+ { 1.4081733110858665e-16, 2.0000000000000000, 35.000000000000000, 0.0 },
+ { 8.8177176978426223e-19, 2.0000000000000000, 40.000000000000000, 0.0 },
+ { 5.5731181045619470e-21, 2.0000000000000000, 45.000000000000000, 0.0 },
+ { 3.5479318388581979e-23, 2.0000000000000000, 50.000000000000000, 0.0 },
+ { 2.2717153918665688e-25, 2.0000000000000000, 55.000000000000000, 0.0 },
+ { 1.4614189081096777e-27, 2.0000000000000000, 60.000000000000000, 0.0 },
+ { 9.4383017680150234e-30, 2.0000000000000000, 65.000000000000000, 0.0 },
+ { 6.1157177279757537e-32, 2.0000000000000000, 70.000000000000000, 0.0 },
+ { 3.9740059241667034e-34, 2.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.5886411706935015e-36, 2.0000000000000000, 80.000000000000000, 0.0 },
+ { 1.6898316402103142e-38, 2.0000000000000000, 85.000000000000000, 0.0 },
+ { 1.1051801100484218e-40, 2.0000000000000000, 90.000000000000000, 0.0 },
+ { 7.2401743221736176e-43, 2.0000000000000000, 95.000000000000000, 0.0 },
+ { 4.7502253038886413e-45, 2.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler017 = 2.5000000000000020e-13;
+const double toler023 = 2.5000000000000020e-13;
// Test data for nu=5.0000000000000000.
// max(|f - f_GSL|): 6.9388939039072284e-18
// max(|f - f_GSL| / |f_GSL|): 2.3552470349020973e-16
+// mean(f - f_GSL): 3.4626840266598141e-19
+// variance(f - f_GSL): 6.6427593731218968e-39
+// stddev(f - f_GSL): 8.1503124928568824e-20
const testcase_cyl_bessel_k<double>
-data018[20] =
+data024[20] =
{
- { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000 },
- { 5.7541849985312288e-05, 5.0000000000000000, 10.000000000000000 },
- { 2.1878261369258224e-07, 5.0000000000000000, 15.000000000000000 },
- { 1.0538660139974233e-09, 5.0000000000000000, 20.000000000000000 },
- { 5.6485921365284157e-12, 5.0000000000000000, 25.000000000000000 },
- { 3.2103335105890266e-14, 5.0000000000000000, 30.000000000000000 },
- { 1.8919208406439644e-16, 5.0000000000000000, 35.000000000000000 },
- { 1.1423814375953188e-18, 5.0000000000000000, 40.000000000000000 },
- { 7.0181216822204101e-21, 5.0000000000000000, 45.000000000000000 },
- { 4.3671822541009859e-23, 5.0000000000000000, 50.000000000000000 },
- { 2.7444967640357869e-25, 5.0000000000000000, 55.000000000000000 },
- { 1.7382232741886986e-27, 5.0000000000000000, 60.000000000000000 },
- { 1.1078474298959669e-29, 5.0000000000000000, 65.000000000000000 },
- { 7.0974537081794416e-32, 5.0000000000000000, 70.000000000000000 },
- { 4.5667269500061064e-34, 5.0000000000000000, 75.000000000000000 },
- { 2.9491764420206150e-36, 5.0000000000000000, 80.000000000000000 },
- { 1.9105685973117463e-38, 5.0000000000000000, 85.000000000000000 },
- { 1.2411034311592645e-40, 5.0000000000000000, 90.000000000000000 },
- { 8.0814211331379146e-43, 5.0000000000000000, 95.000000000000000 },
- { 5.2732561132929509e-45, 5.0000000000000000, 100.00000000000000 },
+ { 0.032706273712031865, 5.0000000000000000, 5.0000000000000000, 0.0 },
+ { 5.7541849985312288e-05, 5.0000000000000000, 10.000000000000000, 0.0 },
+ { 2.1878261369258224e-07, 5.0000000000000000, 15.000000000000000, 0.0 },
+ { 1.0538660139974233e-09, 5.0000000000000000, 20.000000000000000, 0.0 },
+ { 5.6485921365284157e-12, 5.0000000000000000, 25.000000000000000, 0.0 },
+ { 3.2103335105890266e-14, 5.0000000000000000, 30.000000000000000, 0.0 },
+ { 1.8919208406439644e-16, 5.0000000000000000, 35.000000000000000, 0.0 },
+ { 1.1423814375953188e-18, 5.0000000000000000, 40.000000000000000, 0.0 },
+ { 7.0181216822204101e-21, 5.0000000000000000, 45.000000000000000, 0.0 },
+ { 4.3671822541009859e-23, 5.0000000000000000, 50.000000000000000, 0.0 },
+ { 2.7444967640357869e-25, 5.0000000000000000, 55.000000000000000, 0.0 },
+ { 1.7382232741886986e-27, 5.0000000000000000, 60.000000000000000, 0.0 },
+ { 1.1078474298959669e-29, 5.0000000000000000, 65.000000000000000, 0.0 },
+ { 7.0974537081794416e-32, 5.0000000000000000, 70.000000000000000, 0.0 },
+ { 4.5667269500061064e-34, 5.0000000000000000, 75.000000000000000, 0.0 },
+ { 2.9491764420206150e-36, 5.0000000000000000, 80.000000000000000, 0.0 },
+ { 1.9105685973117463e-38, 5.0000000000000000, 85.000000000000000, 0.0 },
+ { 1.2411034311592645e-40, 5.0000000000000000, 90.000000000000000, 0.0 },
+ { 8.0814211331379146e-43, 5.0000000000000000, 95.000000000000000, 0.0 },
+ { 5.2732561132929509e-45, 5.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler018 = 2.5000000000000020e-13;
+const double toler024 = 2.5000000000000020e-13;
// Test data for nu=10.000000000000000.
// max(|f - f_GSL|): 5.3290705182007514e-15
// max(|f - f_GSL| / |f_GSL|): 5.4609173619982130e-16
+// mean(f - f_GSL): 2.6645356834424019e-16
+// variance(f - f_GSL): 3.9333797276110065e-33
+// stddev(f - f_GSL): 6.2716662280537598e-17
const testcase_cyl_bessel_k<double>
-data019[20] =
+data025[20] =
{
- { 9.7585628291778121, 10.000000000000000, 5.0000000000000000 },
- { 0.0016142553003906700, 10.000000000000000, 10.000000000000000 },
- { 2.2605303776606435e-06, 10.000000000000000, 15.000000000000000 },
- { 6.3162145283215804e-09, 10.000000000000000, 20.000000000000000 },
- { 2.4076769602801233e-11, 10.000000000000000, 25.000000000000000 },
- { 1.0842816942222975e-13, 10.000000000000000, 30.000000000000000 },
- { 5.3976770429777191e-16, 10.000000000000000, 35.000000000000000 },
- { 2.8680293113671932e-18, 10.000000000000000, 40.000000000000000 },
- { 1.5939871900169600e-20, 10.000000000000000, 45.000000000000000 },
- { 9.1509882099879962e-23, 10.000000000000000, 50.000000000000000 },
- { 5.3823846249592858e-25, 10.000000000000000, 55.000000000000000 },
- { 3.2253408700563144e-27, 10.000000000000000, 60.000000000000000 },
- { 1.9613367530075138e-29, 10.000000000000000, 65.000000000000000 },
- { 1.2068471495933484e-31, 10.000000000000000, 70.000000000000000 },
- { 7.4979152649449644e-34, 10.000000000000000, 75.000000000000000 },
- { 4.6957285830490538e-36, 10.000000000000000, 80.000000000000000 },
- { 2.9606323347034079e-38, 10.000000000000000, 85.000000000000000 },
- { 1.8773542561131613e-40, 10.000000000000000, 90.000000000000000 },
- { 1.1962899527846350e-42, 10.000000000000000, 95.000000000000000 },
- { 7.6554279773881018e-45, 10.000000000000000, 100.00000000000000 },
+ { 9.7585628291778121, 10.000000000000000, 5.0000000000000000, 0.0 },
+ { 0.0016142553003906700, 10.000000000000000, 10.000000000000000, 0.0 },
+ { 2.2605303776606435e-06, 10.000000000000000, 15.000000000000000, 0.0 },
+ { 6.3162145283215804e-09, 10.000000000000000, 20.000000000000000, 0.0 },
+ { 2.4076769602801233e-11, 10.000000000000000, 25.000000000000000, 0.0 },
+ { 1.0842816942222975e-13, 10.000000000000000, 30.000000000000000, 0.0 },
+ { 5.3976770429777191e-16, 10.000000000000000, 35.000000000000000, 0.0 },
+ { 2.8680293113671932e-18, 10.000000000000000, 40.000000000000000, 0.0 },
+ { 1.5939871900169600e-20, 10.000000000000000, 45.000000000000000, 0.0 },
+ { 9.1509882099879962e-23, 10.000000000000000, 50.000000000000000, 0.0 },
+ { 5.3823846249592858e-25, 10.000000000000000, 55.000000000000000, 0.0 },
+ { 3.2253408700563144e-27, 10.000000000000000, 60.000000000000000, 0.0 },
+ { 1.9613367530075138e-29, 10.000000000000000, 65.000000000000000, 0.0 },
+ { 1.2068471495933484e-31, 10.000000000000000, 70.000000000000000, 0.0 },
+ { 7.4979152649449644e-34, 10.000000000000000, 75.000000000000000, 0.0 },
+ { 4.6957285830490538e-36, 10.000000000000000, 80.000000000000000, 0.0 },
+ { 2.9606323347034079e-38, 10.000000000000000, 85.000000000000000, 0.0 },
+ { 1.8773542561131613e-40, 10.000000000000000, 90.000000000000000, 0.0 },
+ { 1.1962899527846350e-42, 10.000000000000000, 95.000000000000000, 0.0 },
+ { 7.6554279773881018e-45, 10.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler019 = 2.5000000000000020e-13;
+const double toler025 = 2.5000000000000020e-13;
// Test data for nu=20.000000000000000.
// max(|f - f_GSL|): 4.1723251342773438e-07
// max(|f - f_GSL| / |f_GSL|): 1.2224656515794909e-15
+// mean(f - f_GSL): 2.0861628513904947e-08
+// variance(f - f_GSL): 2.4111221288208969e-17
+// stddev(f - f_GSL): 4.9103178398357239e-09
const testcase_cyl_bessel_k<double>
-data020[20] =
+data026[20] =
{
- { 482700052.06214869, 20.000000000000000, 5.0000000000000000 },
- { 178.74427820770546, 20.000000000000000, 10.000000000000000 },
- { 0.012141257729731143, 20.000000000000000, 15.000000000000000 },
- { 5.5431116361258155e-06, 20.000000000000000, 20.000000000000000 },
- { 6.3744029330352113e-09, 20.000000000000000, 25.000000000000000 },
- { 1.2304516475442478e-11, 20.000000000000000, 30.000000000000000 },
- { 3.2673136479809018e-14, 20.000000000000000, 35.000000000000000 },
- { 1.0703023799997383e-16, 20.000000000000000, 40.000000000000000 },
- { 4.0549953175660457e-19, 20.000000000000000, 45.000000000000000 },
- { 1.7061483797220349e-21, 20.000000000000000, 50.000000000000000 },
- { 7.7617008115659413e-24, 20.000000000000000, 55.000000000000000 },
- { 3.7482954006874720e-26, 20.000000000000000, 60.000000000000000 },
- { 1.8966880763956576e-28, 20.000000000000000, 65.000000000000000 },
- { 9.9615763479998864e-31, 20.000000000000000, 70.000000000000000 },
- { 5.3921623063091066e-33, 20.000000000000000, 75.000000000000000 },
- { 2.9920407657642272e-35, 20.000000000000000, 80.000000000000000 },
- { 1.6948662723618255e-37, 20.000000000000000, 85.000000000000000 },
- { 9.7689149642963042e-40, 20.000000000000000, 90.000000000000000 },
- { 5.7143603019220823e-42, 20.000000000000000, 95.000000000000000 },
- { 3.3852054148901700e-44, 20.000000000000000, 100.00000000000000 },
+ { 482700052.06214869, 20.000000000000000, 5.0000000000000000, 0.0 },
+ { 178.74427820770546, 20.000000000000000, 10.000000000000000, 0.0 },
+ { 0.012141257729731143, 20.000000000000000, 15.000000000000000, 0.0 },
+ { 5.5431116361258155e-06, 20.000000000000000, 20.000000000000000, 0.0 },
+ { 6.3744029330352113e-09, 20.000000000000000, 25.000000000000000, 0.0 },
+ { 1.2304516475442478e-11, 20.000000000000000, 30.000000000000000, 0.0 },
+ { 3.2673136479809018e-14, 20.000000000000000, 35.000000000000000, 0.0 },
+ { 1.0703023799997383e-16, 20.000000000000000, 40.000000000000000, 0.0 },
+ { 4.0549953175660457e-19, 20.000000000000000, 45.000000000000000, 0.0 },
+ { 1.7061483797220349e-21, 20.000000000000000, 50.000000000000000, 0.0 },
+ { 7.7617008115659413e-24, 20.000000000000000, 55.000000000000000, 0.0 },
+ { 3.7482954006874720e-26, 20.000000000000000, 60.000000000000000, 0.0 },
+ { 1.8966880763956576e-28, 20.000000000000000, 65.000000000000000, 0.0 },
+ { 9.9615763479998864e-31, 20.000000000000000, 70.000000000000000, 0.0 },
+ { 5.3921623063091066e-33, 20.000000000000000, 75.000000000000000, 0.0 },
+ { 2.9920407657642272e-35, 20.000000000000000, 80.000000000000000, 0.0 },
+ { 1.6948662723618255e-37, 20.000000000000000, 85.000000000000000, 0.0 },
+ { 9.7689149642963042e-40, 20.000000000000000, 90.000000000000000, 0.0 },
+ { 5.7143603019220823e-42, 20.000000000000000, 95.000000000000000, 0.0 },
+ { 3.3852054148901700e-44, 20.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler020 = 2.5000000000000020e-13;
+const double toler026 = 2.5000000000000020e-13;
// Test data for nu=50.000000000000000.
// max(|f - f_GSL|): 8.6655802749976619e+27
// max(|f - f_GSL| / |f_GSL|): 2.6684549464729312e-15
+// mean(f - f_GSL): 4.3327901374988334e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_k<double>
-data021[20] =
+data027[20] =
{
- { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000 },
- { 2.0613737753892557e+27, 50.000000000000000, 10.000000000000000 },
- { 1.7267736974519188e+18, 50.000000000000000, 15.000000000000000 },
- { 411711209122.01788, 50.000000000000000, 20.000000000000000 },
- { 1972478.7419813874, 50.000000000000000, 25.000000000000000 },
- { 58.770686258007267, 50.000000000000000, 30.000000000000000 },
- { 0.0058659391182535178, 50.000000000000000, 35.000000000000000 },
- { 1.3634854128794101e-06, 50.000000000000000, 40.000000000000000 },
- { 5.8652396362160819e-10, 50.000000000000000, 45.000000000000000 },
- { 4.0060134766400893e-13, 50.000000000000000, 50.000000000000000 },
- { 3.9062324485711016e-16, 50.000000000000000, 55.000000000000000 },
- { 5.0389298085176510e-19, 50.000000000000000, 60.000000000000000 },
- { 8.1305344250110424e-22, 50.000000000000000, 65.000000000000000 },
- { 1.5732816234948991e-24, 50.000000000000000, 70.000000000000000 },
- { 3.5349854993874412e-27, 50.000000000000000, 75.000000000000000 },
- { 8.9940101003189485e-30, 50.000000000000000, 80.000000000000000 },
- { 2.5403205503080723e-32, 50.000000000000000, 85.000000000000000 },
- { 7.8397596486715721e-35, 50.000000000000000, 90.000000000000000 },
- { 2.6098900651329542e-37, 50.000000000000000, 95.000000000000000 },
- { 9.2745226536133258e-40, 50.000000000000000, 100.00000000000000 },
+ { 3.3943222434301628e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
+ { 2.0613737753892557e+27, 50.000000000000000, 10.000000000000000, 0.0 },
+ { 1.7267736974519188e+18, 50.000000000000000, 15.000000000000000, 0.0 },
+ { 411711209122.01788, 50.000000000000000, 20.000000000000000, 0.0 },
+ { 1972478.7419813874, 50.000000000000000, 25.000000000000000, 0.0 },
+ { 58.770686258007267, 50.000000000000000, 30.000000000000000, 0.0 },
+ { 0.0058659391182535178, 50.000000000000000, 35.000000000000000, 0.0 },
+ { 1.3634854128794101e-06, 50.000000000000000, 40.000000000000000, 0.0 },
+ { 5.8652396362160819e-10, 50.000000000000000, 45.000000000000000, 0.0 },
+ { 4.0060134766400893e-13, 50.000000000000000, 50.000000000000000, 0.0 },
+ { 3.9062324485711016e-16, 50.000000000000000, 55.000000000000000, 0.0 },
+ { 5.0389298085176510e-19, 50.000000000000000, 60.000000000000000, 0.0 },
+ { 8.1305344250110424e-22, 50.000000000000000, 65.000000000000000, 0.0 },
+ { 1.5732816234948991e-24, 50.000000000000000, 70.000000000000000, 0.0 },
+ { 3.5349854993874412e-27, 50.000000000000000, 75.000000000000000, 0.0 },
+ { 8.9940101003189485e-30, 50.000000000000000, 80.000000000000000, 0.0 },
+ { 2.5403205503080723e-32, 50.000000000000000, 85.000000000000000, 0.0 },
+ { 7.8397596486715721e-35, 50.000000000000000, 90.000000000000000, 0.0 },
+ { 2.6098900651329542e-37, 50.000000000000000, 95.000000000000000, 0.0 },
+ { 9.2745226536133258e-40, 50.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler021 = 2.5000000000000020e-13;
+const double toler027 = 2.5000000000000020e-13;
// Test data for nu=100.00000000000000.
// max(|f - f_GSL|): 3.4996011596528191e+101
// max(|f - f_GSL| / |f_GSL|): 4.9711230957426436e-15
+// mean(f - f_GSL): 1.7498005798264095e+100
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_bessel_k<double>
-data022[20] =
+data028[20] =
{
- { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000 },
- { 4.5966740842695238e+85, 100.00000000000000, 10.000000000000000 },
- { 8.2565552242653946e+67, 100.00000000000000, 15.000000000000000 },
- { 1.7081356456876041e+55, 100.00000000000000, 20.000000000000000 },
- { 1.9858028128780610e+45, 100.00000000000000, 25.000000000000000 },
- { 1.2131584253026677e+37, 100.00000000000000, 30.000000000000000 },
- { 1.1016916354696688e+30, 100.00000000000000, 35.000000000000000 },
- { 7.0074023297775712e+23, 100.00000000000000, 40.000000000000000 },
- { 1.9236643958470894e+18, 100.00000000000000, 45.000000000000000 },
- { 16394035276269.250, 100.00000000000000, 50.000000000000000 },
- { 343254952.89495474, 100.00000000000000, 55.000000000000000 },
- { 14870.012754946298, 100.00000000000000, 60.000000000000000 },
- { 1.1708099078572216, 100.00000000000000, 65.000000000000000 },
- { 0.00015161193930722313, 100.00000000000000, 70.000000000000000 },
- { 2.9850234381623443e-08, 100.00000000000000, 75.000000000000000 },
- { 8.3928710724649129e-12, 100.00000000000000, 80.000000000000000 },
- { 3.2033435630927732e-15, 100.00000000000000, 85.000000000000000 },
- { 1.5922281431788096e-18, 100.00000000000000, 90.000000000000000 },
- { 9.9589454577674131e-22, 100.00000000000000, 95.000000000000000 },
- { 7.6171296304940840e-25, 100.00000000000000, 100.00000000000000 },
+ { 7.0398601930616815e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
+ { 4.5966740842695238e+85, 100.00000000000000, 10.000000000000000, 0.0 },
+ { 8.2565552242653946e+67, 100.00000000000000, 15.000000000000000, 0.0 },
+ { 1.7081356456876041e+55, 100.00000000000000, 20.000000000000000, 0.0 },
+ { 1.9858028128780610e+45, 100.00000000000000, 25.000000000000000, 0.0 },
+ { 1.2131584253026677e+37, 100.00000000000000, 30.000000000000000, 0.0 },
+ { 1.1016916354696688e+30, 100.00000000000000, 35.000000000000000, 0.0 },
+ { 7.0074023297775712e+23, 100.00000000000000, 40.000000000000000, 0.0 },
+ { 1.9236643958470894e+18, 100.00000000000000, 45.000000000000000, 0.0 },
+ { 16394035276269.250, 100.00000000000000, 50.000000000000000, 0.0 },
+ { 343254952.89495474, 100.00000000000000, 55.000000000000000, 0.0 },
+ { 14870.012754946298, 100.00000000000000, 60.000000000000000, 0.0 },
+ { 1.1708099078572216, 100.00000000000000, 65.000000000000000, 0.0 },
+ { 0.00015161193930722313, 100.00000000000000, 70.000000000000000, 0.0 },
+ { 2.9850234381623443e-08, 100.00000000000000, 75.000000000000000, 0.0 },
+ { 8.3928710724649129e-12, 100.00000000000000, 80.000000000000000, 0.0 },
+ { 3.2033435630927732e-15, 100.00000000000000, 85.000000000000000, 0.0 },
+ { 1.5922281431788096e-18, 100.00000000000000, 90.000000000000000, 0.0 },
+ { 9.9589454577674131e-22, 100.00000000000000, 95.000000000000000, 0.0 },
+ { 7.6171296304940840e-25, 100.00000000000000, 100.00000000000000, 0.0 },
};
-const double toler022 = 2.5000000000000020e-13;
+const double toler028 = 2.5000000000000020e-13;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_cyl_bessel_k<Tp> (&data)[Num], Tp toler)
+ test(const testcase_cyl_bessel_k<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::cyl_bessel_k(data[i].nu, data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f = std::cyl_bessel_k(data[i].nu, data[i].x);
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
@@ -729,5 +988,11 @@ main()
test(data020, toler020);
test(data021, toler021);
test(data022, toler022);
+ test(data023, toler023);
+ test(data024, toler024);
+ test(data025, toler025);
+ test(data026, toler026);
+ test(data027, toler027);
+ test(data028, toler028);
return 0;
}
diff --git a/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_origin.cc b/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_origin.cc
new file mode 100644
index 00000000000..70b78f5da73
--- /dev/null
+++ b/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_origin.cc
@@ -0,0 +1,49 @@
+// { dg-do run { target c++11 } }
+// { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__" }
+//
+// Copyright (C) 2016 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
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <testsuite_hooks.h>
+#include <cmath>
+#include <iostream>
+
+void
+test01()
+{
+ const double inf = std::numeric_limits<double>::infinity();
+ double nm1o4 = std::cyl_neumann(-0.25, 0.0);
+ double nm1o2 = std::cyl_neumann(-0.5, 0.0);
+ double nm1 = std::cyl_neumann(-1.0, 0.0);
+ double nm3o2 = std::cyl_neumann(-1.5, 0.0);
+ double nm2 = std::cyl_neumann(-2.0, 0.0);
+
+ bool test [[gnu::unused]] = true;
+ VERIFY(nm1o4 == -inf);
+ VERIFY(nm1o2 == 0.0);
+ VERIFY(nm1 == inf);
+ VERIFY(nm3o2 == 0.0);
+ VERIFY(nm2 == -inf);
+}
+
+int
+main()
+{
+ test01();
+
+ return 0;
+}
diff --git a/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc b/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
index 03d6b82b5d0..d104cf19efe 100644
--- a/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_value.cc
@@ -38,651 +38,924 @@
#include <specfun_testcase.h>
+// Test data for nu=-5.0000000000000000.
+// max(|f - f_Boost|): 1.8189894035458565e-12
+// max(|f - f_Boost| / |f_Boost|): 1.0720757077993992e-15
+// mean(f - f_Boost): 1.0539624728522768e-13
+// variance(f - f_Boost): 6.1736845857803904e-28
+// stddev(f - f_Boost): 2.4846900381698300e-14
+const testcase_cyl_neumann<double>
+data001[20] =
+{
+ { 251309.48151852371, -5.0000000000000000, 0.25000000000000000, 0.0 },
+ { 7946.3014788074734, -5.0000000000000000, 0.50000000000000000, 0.0 },
+ { 1067.2468952289757, -5.0000000000000000, 0.75000000000000000, 0.0 },
+ { 260.40586662581222, -5.0000000000000000, 1.0000000000000000, 0.0 },
+ { 88.474252441880395, -5.0000000000000000, 1.2500000000000000, 0.0 },
+ { 37.190308395498086, -5.0000000000000000, 1.5000000000000000, 0.0 },
+ { 18.165774988201836, -5.0000000000000000, 1.7500000000000000, 0.0 },
+ { 9.9359891284819746, -5.0000000000000000, 2.0000000000000000, 0.0 },
+ { 5.9446343848076397, -5.0000000000000000, 2.2500000000000000, 0.0 },
+ { 3.8301760007407517, -5.0000000000000000, 2.5000000000000000, 0.0 },
+ { 2.6287042009459074, -5.0000000000000000, 2.7500000000000000, 0.0 },
+ { 1.9059459538286738, -5.0000000000000000, 3.0000000000000000, 0.0 },
+ { 1.4498157389142645, -5.0000000000000000, 3.2500000000000000, 0.0 },
+ { 1.1494603169763689, -5.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.94343105151431650, -5.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.79585142111420004, -5.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.68479288173907049, -5.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.59631936513587591, -5.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.52130838331747587, -5.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.45369482249110188, -5.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler001 = 2.5000000000000020e-13;
+
+// Test data for nu=-2.0000000000000000.
+// max(|f - f_Boost|): 8.8817841970012523e-16
+// max(|f - f_Boost| / |f_Boost|): 4.8312574159660627e-15
+// mean(f - f_Boost): -6.1062266354383615e-17
+// variance(f - f_Boost): 1.3828283700420264e-34
+// stddev(f - f_Boost): 1.1759372304855504e-17
+const testcase_cyl_neumann<double>
+data002[20] =
+{
+ { -20.701268809592200, -2.0000000000000000, 0.25000000000000000, 0.0 },
+ { -5.4413708371742660, -2.0000000000000000, 0.50000000000000000, 0.0 },
+ { -2.6297460326656554, -2.0000000000000000, 0.75000000000000000, 0.0 },
+ { -1.6506826068162543, -2.0000000000000000, 1.0000000000000000, 0.0 },
+ { -1.1931993101785539, -2.0000000000000000, 1.2500000000000000, 0.0 },
+ { -0.93219375976297392, -2.0000000000000000, 1.5000000000000000, 0.0 },
+ { -0.75574746972832962, -2.0000000000000000, 1.7500000000000000, 0.0 },
+ { -0.61740810419068270, -2.0000000000000000, 2.0000000000000000, 0.0 },
+ { -0.49589404446792973, -2.0000000000000000, 2.2500000000000000, 0.0 },
+ { -0.38133584924180325, -2.0000000000000000, 2.5000000000000000, 0.0 },
+ { -0.26973581138921626, -2.0000000000000000, 2.7500000000000000, 0.0 },
+ { -0.16040039348492374, -2.0000000000000000, 3.0000000000000000, 0.0 },
+ { -0.054577503462574117, -2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.045371437729180286, -2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.13653992534009174, -2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.21590359460361500, -2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.28065715378930212, -2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.32848159666046212, -2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.35774854396706912, -2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.36766288260552454, -2.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler002 = 2.5000000000000020e-13;
+
+// Test data for nu=-1.0000000000000000.
+// max(|f - f_Boost|): 9.9920072216264089e-16
+// max(|f - f_Boost| / |f_Boost|): 3.6746050327984603e-14
+// mean(f - f_Boost): 6.8695049648681563e-17
+// variance(f - f_Boost): 2.7211096070213562e-34
+// stddev(f - f_Boost): 1.6495786149866749e-17
+const testcase_cyl_neumann<double>
+data003[20] =
+{
+ { 2.7041052293152825, -1.0000000000000000, 0.25000000000000000, 0.0 },
+ { 1.4714723926702431, -1.0000000000000000, 0.50000000000000000, 0.0 },
+ { 1.0375945507692854, -1.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.78121282130028868, -1.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.58436403661500813, -1.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.41230862697391130, -1.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.25397298594624568, -1.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.10703243154093754, -1.0000000000000000, 2.0000000000000000, 0.0 },
+ { -0.027192057738017139, -1.0000000000000000, 2.2500000000000000, 0.0 },
+ { -0.14591813796678579, -1.0000000000000000, 2.5000000000000000, 0.0 },
+ { -0.24601900149738395, -1.0000000000000000, 2.7500000000000000, 0.0 },
+ { -0.32467442479179998, -1.0000000000000000, 3.0000000000000000, 0.0 },
+ { -0.37977777371708354, -1.0000000000000000, 3.2500000000000000, 0.0 },
+ { -0.41018841788751187, -1.0000000000000000, 3.5000000000000000, 0.0 },
+ { -0.41586877934522709, -1.0000000000000000, 3.7500000000000000, 0.0 },
+ { -0.39792571055710002, -1.0000000000000000, 4.0000000000000000, 0.0 },
+ { -0.35856889308385098, -1.0000000000000000, 4.2500000000000000, 0.0 },
+ { -0.30099732306965460, -1.0000000000000000, 4.5000000000000000, 0.0 },
+ { -0.22922559673872217, -1.0000000000000000, 4.7500000000000000, 0.0 },
+ { -0.14786314339122683, -1.0000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler003 = 2.5000000000000015e-12;
+
+// Test data for nu=-0.66666666666666663.
+// max(|f - f_Boost|): 3.8857805861880479e-16
+// max(|f - f_Boost| / |f_Boost|): 6.2704831645099631e-15
+// mean(f - f_Boost): -2.2898349882893852e-17
+// variance(f - f_Boost): 5.8924920320656565e-35
+// stddev(f - f_Boost): 7.6762569212251211e-18
+const testcase_cyl_neumann<double>
+data004[20] =
+{
+ { 1.1386711319872600, -0.66666666666666663, 0.25000000000000000, 0.0 },
+ { 0.93240086883939521, -0.66666666666666663, 0.50000000000000000, 0.0 },
+ { 0.85912818932029056, -0.66666666666666663, 0.75000000000000000, 0.0 },
+ { 0.79919147488091513, -0.66666666666666663, 1.0000000000000000, 0.0 },
+ { 0.72856673351020407, -0.66666666666666663, 1.2500000000000000, 0.0 },
+ { 0.64151607355423201, -0.66666666666666663, 1.5000000000000000, 0.0 },
+ { 0.53841082211968039, -0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 0.42240316254006693, -0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 0.29811482701012715, -0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 0.17092556779774820, -0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 0.046477047512634387, -0.66666666666666663, 2.7500000000000000, 0.0 },
+ { -0.069726281843027288, -0.66666666666666663, 3.0000000000000000, 0.0 },
+ { -0.17265494980683185, -0.66666666666666663, 3.2500000000000000, 0.0 },
+ { -0.25803772823490168, -0.66666666666666663, 3.5000000000000000, 0.0 },
+ { -0.32258717704782275, -0.66666666666666663, 3.7500000000000000, 0.0 },
+ { -0.36416171910470596, -0.66666666666666663, 4.0000000000000000, 0.0 },
+ { -0.38185930777348492, -0.66666666666666663, 4.2500000000000000, 0.0 },
+ { -0.37604020286720236, -0.66666666666666663, 4.5000000000000000, 0.0 },
+ { -0.34827959286785215, -0.66666666666666663, 4.7500000000000000, 0.0 },
+ { -0.30125428154914796, -0.66666666666666663, 5.0000000000000000, 0.0 },
+};
+const double toler004 = 5.0000000000000039e-13;
+
+// Test data for nu=-0.50000000000000000.
+// max(|f - f_Boost|): 3.3306690738754696e-16
+// max(|f - f_Boost| / |f_Boost|): 2.3184840769555915e-15
+// mean(f - f_Boost): -4.4408920985006264e-17
+// variance(f - f_Boost): 1.0926051318850580e-34
+// stddev(f - f_Boost): 1.0452775382093781e-17
+const testcase_cyl_neumann<double>
+data005[20] =
+{
+ { 0.39479959874137005, -0.50000000000000000, 0.25000000000000000, 0.0 },
+ { 0.54097378993452805, -0.50000000000000000, 0.50000000000000000, 0.0 },
+ { 0.62800587637588690, -0.50000000000000000, 0.75000000000000000, 0.0 },
+ { 0.67139670714180311, -0.50000000000000000, 1.0000000000000000, 0.0 },
+ { 0.67724253810014368, -0.50000000000000000, 1.2500000000000000, 0.0 },
+ { 0.64983807475374722, -0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 0.59348525447147438, -0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 0.51301613656182776, -0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 0.41387506064760027, -0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 0.30200490606236569, -0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 0.18363332138431548, -0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 0.065008182877375781, -0.50000000000000000, 3.0000000000000000, 0.0 },
+ { -0.047885729975898468, -0.50000000000000000, 3.2500000000000000, 0.0 },
+ { -0.14960456964952656, -0.50000000000000000, 3.5000000000000000, 0.0 },
+ { -0.23549801845815546, -0.50000000000000000, 3.7500000000000000, 0.0 },
+ { -0.30192051329163944, -0.50000000000000000, 4.0000000000000000, 0.0 },
+ { -0.34638850218952438, -0.50000000000000000, 4.2500000000000000, 0.0 },
+ { -0.36767487332724019, -0.50000000000000000, 4.5000000000000000, 0.0 },
+ { -0.36583563802350394, -0.50000000000000000, 4.7500000000000000, 0.0 },
+ { -0.34216798479816180, -0.50000000000000000, 5.0000000000000000, 0.0 },
+};
+const double toler005 = 2.5000000000000020e-13;
+
+// Test data for nu=-0.33333333333333331.
+// max(|f - f_Boost|): 4.4408920985006262e-16
+// max(|f - f_Boost| / |f_Boost|): 4.0053710199877905e-15
+// mean(f - f_Boost): -2.9490299091605721e-17
+// variance(f - f_Boost): 4.8181592272152972e-35
+// stddev(f - f_Boost): 6.9412961521716513e-18
+const testcase_cyl_neumann<double>
+data006[20] =
+{
+ { -0.19384786486503253, -0.33333333333333331, 0.25000000000000000, 0.0 },
+ { 0.16237467777288858, -0.33333333333333331, 0.50000000000000000, 0.0 },
+ { 0.36534788330876228, -0.33333333333333331, 0.75000000000000000, 0.0 },
+ { 0.49355671066731793, -0.33333333333333331, 1.0000000000000000, 0.0 },
+ { 0.56865331853805701, -0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 0.60007809316168148, -0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 0.59384879811662195, -0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 0.55519711799449867, -0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 0.48948468897674119, -0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 0.40248070353840232, -0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 0.30035192145261236, -0.33333333333333331, 2.7500000000000000, 0.0 },
+ { 0.18950670610069639, -0.33333333333333331, 3.0000000000000000, 0.0 },
+ { 0.076363278857286582, -0.33333333333333331, 3.2500000000000000, 0.0 },
+ { -0.032915548526298376, -0.33333333333333331, 3.5000000000000000, 0.0 },
+ { -0.13269146878551905, -0.33333333333333331, 3.7500000000000000, 0.0 },
+ { -0.21810075144006738, -0.33333333333333331, 4.0000000000000000, 0.0 },
+ { -0.28526721369125163, -0.33333333333333331, 4.2500000000000000, 0.0 },
+ { -0.33146415302194693, -0.33333333333333331, 4.5000000000000000, 0.0 },
+ { -0.35521536630327899, -0.33333333333333331, 4.7500000000000000, 0.0 },
+ { -0.35632951153715792, -0.33333333333333331, 5.0000000000000000, 0.0 },
+};
+const double toler006 = 2.5000000000000020e-13;
+// cyl_neumann
+
// Test data for nu=0.0000000000000000.
// max(|f - f_GSL|): 1.6653345369377348e-16
// max(|f - f_GSL| / |f_GSL|): 2.6623873675138176e-15
+// mean(f - f_GSL): -1.8214596497756474e-17
+// variance(f - f_GSL): 1.8380693937733099e-35
+// stddev(f - f_GSL): 4.2872711528119021e-18
const testcase_cyl_neumann<double>
-data001[20] =
+data007[20] =
{
- { -0.93157302493005878, 0.0000000000000000, 0.25000000000000000 },
- { -0.44451873350670656, 0.0000000000000000, 0.50000000000000000 },
- { -0.13717276938577236, 0.0000000000000000, 0.75000000000000000 },
- { 0.088256964215676942, 0.0000000000000000, 1.0000000000000000 },
- { 0.25821685159454072, 0.0000000000000000, 1.2500000000000000 },
- { 0.38244892379775886, 0.0000000000000000, 1.5000000000000000 },
- { 0.46549262864690610, 0.0000000000000000, 1.7500000000000000 },
- { 0.51037567264974493, 0.0000000000000000, 2.0000000000000000 },
- { 0.52006476245727862, 0.0000000000000000, 2.2500000000000000 },
- { 0.49807035961523194, 0.0000000000000000, 2.5000000000000000 },
- { 0.44865872156913222, 0.0000000000000000, 2.7500000000000000 },
- { 0.37685001001279045, 0.0000000000000000, 3.0000000000000000 },
- { 0.28828690267308710, 0.0000000000000000, 3.2500000000000000 },
- { 0.18902194392082688, 0.0000000000000000, 3.5000000000000000 },
- { 0.085256756977362638, 0.0000000000000000, 3.7500000000000000 },
- { -0.016940739325064763, 0.0000000000000000, 4.0000000000000000 },
- { -0.11191885116160770, 0.0000000000000000, 4.2500000000000000 },
- { -0.19470500862950454, 0.0000000000000000, 4.5000000000000000 },
- { -0.26123250323497549, 0.0000000000000000, 4.7500000000000000 },
- { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000 },
+ { -0.93157302493005878, 0.0000000000000000, 0.25000000000000000, 0.0 },
+ { -0.44451873350670656, 0.0000000000000000, 0.50000000000000000, 0.0 },
+ { -0.13717276938577236, 0.0000000000000000, 0.75000000000000000, 0.0 },
+ { 0.088256964215676942, 0.0000000000000000, 1.0000000000000000, 0.0 },
+ { 0.25821685159454072, 0.0000000000000000, 1.2500000000000000, 0.0 },
+ { 0.38244892379775886, 0.0000000000000000, 1.5000000000000000, 0.0 },
+ { 0.46549262864690610, 0.0000000000000000, 1.7500000000000000, 0.0 },
+ { 0.51037567264974493, 0.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.52006476245727862, 0.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.49807035961523194, 0.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.44865872156913222, 0.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.37685001001279045, 0.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.28828690267308710, 0.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.18902194392082688, 0.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.085256756977362638, 0.0000000000000000, 3.7500000000000000, 0.0 },
+ { -0.016940739325064763, 0.0000000000000000, 4.0000000000000000, 0.0 },
+ { -0.11191885116160770, 0.0000000000000000, 4.2500000000000000, 0.0 },
+ { -0.19470500862950454, 0.0000000000000000, 4.5000000000000000, 0.0 },
+ { -0.26123250323497549, 0.0000000000000000, 4.7500000000000000, 0.0 },
+ { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler001 = 2.5000000000000020e-13;
+const double toler007 = 2.5000000000000020e-13;
// Test data for nu=0.33333333333333331.
-// max(|f - f_GSL|): 5.8286708792820718e-16
+// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 1.7769445360534625e-14
+// mean(f - f_GSL): -5.3776427755281020e-17
+// variance(f - f_GSL): 7.1437129663303898e-33
+// stddev(f - f_GSL): 8.4520488441148927e-17
const testcase_cyl_neumann<double>
-data002[20] =
+data008[20] =
{
- { -1.3461842332051077, 0.33333333333333331, 0.25000000000000000 },
- { -0.84062782604337771, 0.33333333333333331, 0.50000000000000000 },
- { -0.52488281484097077, 0.33333333333333331, 0.75000000000000000 },
- { -0.27880164127599205, 0.33333333333333331, 1.0000000000000000 },
- { -0.074321349727836453, 0.33333333333333331, 1.2500000000000000 },
- { 0.096610087766627981, 0.33333333333333331, 1.5000000000000000 },
- { 0.23582564494922068, 0.33333333333333331, 1.7500000000000000 },
- { 0.34319996626034494, 0.33333333333333331, 2.0000000000000000 },
- { 0.41835668452349323, 0.33333333333333331, 2.2500000000000000 },
- { 0.46145947419129157, 0.33333333333333331, 2.5000000000000000 },
- { 0.47358926135786023, 0.33333333333333331, 2.7500000000000000 },
- { 0.45689303457230640, 0.33333333333333331, 3.0000000000000000 },
- { 0.41458485697347386, 0.33333333333333331, 3.2500000000000000 },
- { 0.35084133277859947, 0.33333333333333331, 3.5000000000000000 },
- { 0.27061914527820891, 0.33333333333333331, 3.7500000000000000 },
- { 0.17941676634394862, 0.33333333333333331, 4.0000000000000000 },
- { 0.083000434191526043, 0.33333333333333331, 4.2500000000000000 },
- { -0.012886361627105348, 0.33333333333333331, 4.5000000000000000 },
- { -0.10281143123935124, 0.33333333333333331, 4.7500000000000000 },
- { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000 },
+ { -1.3461842332051077, 0.33333333333333331, 0.25000000000000000, 0.0 },
+ { -0.84062782604337771, 0.33333333333333331, 0.50000000000000000, 0.0 },
+ { -0.52488281484097077, 0.33333333333333331, 0.75000000000000000, 0.0 },
+ { -0.27880164127599205, 0.33333333333333331, 1.0000000000000000, 0.0 },
+ { -0.074321349727836453, 0.33333333333333331, 1.2500000000000000, 0.0 },
+ { 0.096610087766627981, 0.33333333333333331, 1.5000000000000000, 0.0 },
+ { 0.23582564494922068, 0.33333333333333331, 1.7500000000000000, 0.0 },
+ { 0.34319996626034494, 0.33333333333333331, 2.0000000000000000, 0.0 },
+ { 0.41835668452349323, 0.33333333333333331, 2.2500000000000000, 0.0 },
+ { 0.46145947419129157, 0.33333333333333331, 2.5000000000000000, 0.0 },
+ { 0.47358926135786023, 0.33333333333333331, 2.7500000000000000, 0.0 },
+ { 0.45689303457230640, 0.33333333333333331, 3.0000000000000000, 0.0 },
+ { 0.41458485697347386, 0.33333333333333331, 3.2500000000000000, 0.0 },
+ { 0.35084133277859947, 0.33333333333333331, 3.5000000000000000, 0.0 },
+ { 0.27061914527820891, 0.33333333333333331, 3.7500000000000000, 0.0 },
+ { 0.17941676634394862, 0.33333333333333331, 4.0000000000000000, 0.0 },
+ { 0.083000434191526043, 0.33333333333333331, 4.2500000000000000, 0.0 },
+ { -0.012886361627105348, 0.33333333333333331, 4.5000000000000000, 0.0 },
+ { -0.10281143123935124, 0.33333333333333331, 4.7500000000000000, 0.0 },
+ { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000, 0.0 },
};
-const double toler002 = 1.0000000000000008e-12;
+const double toler008 = 1.0000000000000008e-12;
// Test data for nu=0.50000000000000000.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.7217850214577088e-15
+// max(|f - f_GSL|): 5.5511151231257827e-16
+// max(|f - f_GSL| / |f_GSL|): 6.6252247616878728e-15
+// mean(f - f_GSL): -5.9067334357010277e-17
+// variance(f - f_GSL): 5.9022450533387394e-36
+// stddev(f - f_GSL): 2.4294536532600781e-18
const testcase_cyl_neumann<double>
-data003[20] =
+data009[20] =
{
- { -1.5461605241060765, 0.50000000000000000, 0.25000000000000000 },
- { -0.99024588024340454, 0.50000000000000000, 0.50000000000000000 },
- { -0.67411792914454460, 0.50000000000000000, 0.75000000000000000 },
- { -0.43109886801837594, 0.50000000000000000, 1.0000000000000000 },
- { -0.22502969244466481, 0.50000000000000000, 1.2500000000000000 },
- { -0.046083165893097265, 0.50000000000000000, 1.5000000000000000 },
- { 0.10750804524368722, 0.50000000000000000, 1.7500000000000000 },
- { 0.23478571040624849, 0.50000000000000000, 2.0000000000000000 },
- { 0.33414002338271825, 0.50000000000000000, 2.2500000000000000 },
- { 0.40427830223905686, 0.50000000000000000, 2.5000000000000000 },
- { 0.44472115119490507, 0.50000000000000000, 2.7500000000000000 },
- { 0.45604882079463316, 0.50000000000000000, 3.0000000000000000 },
- { 0.43998859501924370, 0.50000000000000000, 3.2500000000000000 },
- { 0.39938682536304909, 0.50000000000000000, 3.5000000000000000 },
- { 0.33809163836693340, 0.50000000000000000, 3.7500000000000000 },
- { 0.26076607667717877, 0.50000000000000000, 4.0000000000000000 },
- { 0.17264962544644955, 0.50000000000000000, 4.2500000000000000 },
- { 0.079285862862978548, 0.50000000000000000, 4.5000000000000000 },
- { -0.013765943019498003, 0.50000000000000000, 4.7500000000000000 },
- { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000 },
+ { -1.5461605241060765, 0.50000000000000000, 0.25000000000000000, 0.0 },
+ { -0.99024588024340454, 0.50000000000000000, 0.50000000000000000, 0.0 },
+ { -0.67411792914454460, 0.50000000000000000, 0.75000000000000000, 0.0 },
+ { -0.43109886801837594, 0.50000000000000000, 1.0000000000000000, 0.0 },
+ { -0.22502969244466481, 0.50000000000000000, 1.2500000000000000, 0.0 },
+ { -0.046083165893097265, 0.50000000000000000, 1.5000000000000000, 0.0 },
+ { 0.10750804524368722, 0.50000000000000000, 1.7500000000000000, 0.0 },
+ { 0.23478571040624849, 0.50000000000000000, 2.0000000000000000, 0.0 },
+ { 0.33414002338271825, 0.50000000000000000, 2.2500000000000000, 0.0 },
+ { 0.40427830223905686, 0.50000000000000000, 2.5000000000000000, 0.0 },
+ { 0.44472115119490507, 0.50000000000000000, 2.7500000000000000, 0.0 },
+ { 0.45604882079463316, 0.50000000000000000, 3.0000000000000000, 0.0 },
+ { 0.43998859501924370, 0.50000000000000000, 3.2500000000000000, 0.0 },
+ { 0.39938682536304909, 0.50000000000000000, 3.5000000000000000, 0.0 },
+ { 0.33809163836693340, 0.50000000000000000, 3.7500000000000000, 0.0 },
+ { 0.26076607667717877, 0.50000000000000000, 4.0000000000000000, 0.0 },
+ { 0.17264962544644955, 0.50000000000000000, 4.2500000000000000, 0.0 },
+ { 0.079285862862978548, 0.50000000000000000, 4.5000000000000000, 0.0 },
+ { -0.013765943019498003, 0.50000000000000000, 4.7500000000000000, 0.0 },
+ { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler003 = 5.0000000000000039e-13;
+const double toler009 = 5.0000000000000039e-13;
// Test data for nu=0.66666666666666663.
// max(|f - f_GSL|): 1.4988010832439613e-15
// max(|f - f_GSL| / |f_GSL|): 6.3663053018318525e-15
+// mean(f - f_GSL): 1.3183898417423734e-16
+// variance(f - f_GSL): 9.6029747919585170e-35
+// stddev(f - f_GSL): 9.7994769207129199e-18
const testcase_cyl_neumann<double>
-data004[20] =
+data010[20] =
{
- { -1.8021638417426857, 0.66666666666666663, 0.25000000000000000 },
- { -1.1316060101031435, 0.66666666666666663, 0.50000000000000000 },
- { -0.80251156358450737, 0.66666666666666663, 0.75000000000000000 },
- { -0.56270321497463327, 0.66666666666666663, 1.0000000000000000 },
- { -0.36007453643432208, 0.66666666666666663, 1.2500000000000000 },
- { -0.18017937469615020, 0.66666666666666663, 1.5000000000000000 },
- { -0.019885608758103752, 0.66666666666666663, 1.7500000000000000 },
- { 0.11989345361903521, 0.66666666666666663, 2.0000000000000000 },
- { 0.23690889836358039, 0.66666666666666663, 2.2500000000000000 },
- { 0.32882045742954535, 0.66666666666666663, 2.5000000000000000 },
- { 0.39385133784531856, 0.66666666666666663, 2.7500000000000000 },
- { 0.43115101690935642, 0.66666666666666663, 3.0000000000000000 },
- { 0.44098127351445843, 0.66666666666666663, 3.2500000000000000 },
- { 0.42477631413456485, 0.66666666666666663, 3.5000000000000000 },
- { 0.38510384155620386, 0.66666666666666663, 3.7500000000000000 },
- { 0.32554526794354366, 0.66666666666666663, 4.0000000000000000 },
- { 0.25051080073878446, 0.66666666666666663, 4.2500000000000000 },
- { 0.16500507211842136, 0.66666666666666663, 4.5000000000000000 },
- { 0.074359649728861360, 0.66666666666666663, 4.7500000000000000 },
- { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000 },
+ { -1.8021638417426857, 0.66666666666666663, 0.25000000000000000, 0.0 },
+ { -1.1316060101031435, 0.66666666666666663, 0.50000000000000000, 0.0 },
+ { -0.80251156358450737, 0.66666666666666663, 0.75000000000000000, 0.0 },
+ { -0.56270321497463327, 0.66666666666666663, 1.0000000000000000, 0.0 },
+ { -0.36007453643432208, 0.66666666666666663, 1.2500000000000000, 0.0 },
+ { -0.18017937469615020, 0.66666666666666663, 1.5000000000000000, 0.0 },
+ { -0.019885608758103752, 0.66666666666666663, 1.7500000000000000, 0.0 },
+ { 0.11989345361903521, 0.66666666666666663, 2.0000000000000000, 0.0 },
+ { 0.23690889836358039, 0.66666666666666663, 2.2500000000000000, 0.0 },
+ { 0.32882045742954535, 0.66666666666666663, 2.5000000000000000, 0.0 },
+ { 0.39385133784531856, 0.66666666666666663, 2.7500000000000000, 0.0 },
+ { 0.43115101690935642, 0.66666666666666663, 3.0000000000000000, 0.0 },
+ { 0.44098127351445843, 0.66666666666666663, 3.2500000000000000, 0.0 },
+ { 0.42477631413456485, 0.66666666666666663, 3.5000000000000000, 0.0 },
+ { 0.38510384155620386, 0.66666666666666663, 3.7500000000000000, 0.0 },
+ { 0.32554526794354366, 0.66666666666666663, 4.0000000000000000, 0.0 },
+ { 0.25051080073878446, 0.66666666666666663, 4.2500000000000000, 0.0 },
+ { 0.16500507211842136, 0.66666666666666663, 4.5000000000000000, 0.0 },
+ { 0.074359649728861360, 0.66666666666666663, 4.7500000000000000, 0.0 },
+ { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000, 0.0 },
};
-const double toler004 = 5.0000000000000039e-13;
+const double toler010 = 5.0000000000000039e-13;
// Test data for nu=1.0000000000000000.
// max(|f - f_GSL|): 9.1593399531575415e-16
// max(|f - f_GSL| / |f_GSL|): 3.3683879467319323e-14
+// mean(f - f_GSL): -4.2327252813834091e-17
+// variance(f - f_GSL): 3.8316136169214259e-33
+// stddev(f - f_GSL): 6.1900029215836613e-17
const testcase_cyl_neumann<double>
-data005[13] =
+data011[20] =
{
- { -0.10703243154093699, 1.0000000000000000, 2.0000000000000000 },
- { 0.027192057738017056, 1.0000000000000000, 2.2500000000000000 },
- { 0.14591813796678599, 1.0000000000000000, 2.5000000000000000 },
- { 0.24601900149738354, 1.0000000000000000, 2.7500000000000000 },
- { 0.32467442479180003, 1.0000000000000000, 3.0000000000000000 },
- { 0.37977777371708382, 1.0000000000000000, 3.2500000000000000 },
- { 0.41018841788751170, 1.0000000000000000, 3.5000000000000000 },
- { 0.41586877934522715, 1.0000000000000000, 3.7500000000000000 },
- { 0.39792571055709991, 1.0000000000000000, 4.0000000000000000 },
- { 0.35856889308385076, 1.0000000000000000, 4.2500000000000000 },
- { 0.30099732306965449, 1.0000000000000000, 4.5000000000000000 },
- { 0.22922559673872217, 1.0000000000000000, 4.7500000000000000 },
- { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000 },
+ { -2.7041052293152825, 1.0000000000000000, 0.25000000000000000, 0.0 },
+ { -1.4714723926702433, 1.0000000000000000, 0.50000000000000000, 0.0 },
+ { -1.0375945507692856, 1.0000000000000000, 0.75000000000000000, 0.0 },
+ { -0.78121282130028891, 1.0000000000000000, 1.0000000000000000, 0.0 },
+ { -0.58436403661500824, 1.0000000000000000, 1.2500000000000000, 0.0 },
+ { -0.41230862697391119, 1.0000000000000000, 1.5000000000000000, 0.0 },
+ { -0.25397298594624573, 1.0000000000000000, 1.7500000000000000, 0.0 },
+ { -0.10703243154093699, 1.0000000000000000, 2.0000000000000000, 0.0 },
+ { 0.027192057738017056, 1.0000000000000000, 2.2500000000000000, 0.0 },
+ { 0.14591813796678599, 1.0000000000000000, 2.5000000000000000, 0.0 },
+ { 0.24601900149738354, 1.0000000000000000, 2.7500000000000000, 0.0 },
+ { 0.32467442479180003, 1.0000000000000000, 3.0000000000000000, 0.0 },
+ { 0.37977777371708382, 1.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.41018841788751170, 1.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.41586877934522715, 1.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.39792571055709991, 1.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.35856889308385076, 1.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.30099732306965449, 1.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.22922559673872217, 1.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler005 = 2.5000000000000015e-12;
+const double toler011 = 2.5000000000000015e-12;
// Test data for nu=2.0000000000000000.
// max(|f - f_GSL|): 6.1062266354383610e-16
// max(|f - f_GSL| / |f_GSL|): 1.2540693630135021e-14
+// mean(f - f_GSL): 7.0776717819853725e-17
+// variance(f - f_GSL): 1.2910666109188673e-35
+// stddev(f - f_GSL): 3.5931415375947375e-18
const testcase_cyl_neumann<double>
-data006[20] =
+data012[20] =
{
- { -20.701268809592200, 2.0000000000000000, 0.25000000000000000 },
- { -5.4413708371742668, 2.0000000000000000, 0.50000000000000000 },
- { -2.6297460326656559, 2.0000000000000000, 0.75000000000000000 },
- { -1.6506826068162548, 2.0000000000000000, 1.0000000000000000 },
- { -1.1931993101785539, 2.0000000000000000, 1.2500000000000000 },
- { -0.93219375976297369, 2.0000000000000000, 1.5000000000000000 },
- { -0.75574746972832973, 2.0000000000000000, 1.7500000000000000 },
- { -0.61740810419068193, 2.0000000000000000, 2.0000000000000000 },
- { -0.49589404446793012, 2.0000000000000000, 2.2500000000000000 },
- { -0.38133584924180314, 2.0000000000000000, 2.5000000000000000 },
- { -0.26973581138921693, 2.0000000000000000, 2.7500000000000000 },
- { -0.16040039348492377, 2.0000000000000000, 3.0000000000000000 },
- { -0.054577503462573951, 2.0000000000000000, 3.2500000000000000 },
- { 0.045371437729179787, 2.0000000000000000, 3.5000000000000000 },
- { 0.13653992534009185, 2.0000000000000000, 3.7500000000000000 },
- { 0.21590359460361472, 2.0000000000000000, 4.0000000000000000 },
- { 0.28065715378930217, 2.0000000000000000, 4.2500000000000000 },
- { 0.32848159666046206, 2.0000000000000000, 4.5000000000000000 },
- { 0.35774854396706901, 2.0000000000000000, 4.7500000000000000 },
- { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000 },
+ { -20.701268809592200, 2.0000000000000000, 0.25000000000000000, 0.0 },
+ { -5.4413708371742668, 2.0000000000000000, 0.50000000000000000, 0.0 },
+ { -2.6297460326656559, 2.0000000000000000, 0.75000000000000000, 0.0 },
+ { -1.6506826068162548, 2.0000000000000000, 1.0000000000000000, 0.0 },
+ { -1.1931993101785539, 2.0000000000000000, 1.2500000000000000, 0.0 },
+ { -0.93219375976297369, 2.0000000000000000, 1.5000000000000000, 0.0 },
+ { -0.75574746972832973, 2.0000000000000000, 1.7500000000000000, 0.0 },
+ { -0.61740810419068193, 2.0000000000000000, 2.0000000000000000, 0.0 },
+ { -0.49589404446793012, 2.0000000000000000, 2.2500000000000000, 0.0 },
+ { -0.38133584924180314, 2.0000000000000000, 2.5000000000000000, 0.0 },
+ { -0.26973581138921693, 2.0000000000000000, 2.7500000000000000, 0.0 },
+ { -0.16040039348492377, 2.0000000000000000, 3.0000000000000000, 0.0 },
+ { -0.054577503462573951, 2.0000000000000000, 3.2500000000000000, 0.0 },
+ { 0.045371437729179787, 2.0000000000000000, 3.5000000000000000, 0.0 },
+ { 0.13653992534009185, 2.0000000000000000, 3.7500000000000000, 0.0 },
+ { 0.21590359460361472, 2.0000000000000000, 4.0000000000000000, 0.0 },
+ { 0.28065715378930217, 2.0000000000000000, 4.2500000000000000, 0.0 },
+ { 0.32848159666046206, 2.0000000000000000, 4.5000000000000000, 0.0 },
+ { 0.35774854396706901, 2.0000000000000000, 4.7500000000000000, 0.0 },
+ { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler006 = 1.0000000000000008e-12;
+const double toler012 = 1.0000000000000008e-12;
// Test data for nu=5.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-15
+// max(|f - f_GSL|): 2.8421709430404007e-14
// max(|f - f_GSL| / |f_GSL|): 1.6846903979704834e-15
+// mean(f - f_GSL): -1.6098233857064770e-15
+// variance(f - f_GSL): 1.8591359197231688e-31
+// stddev(f - f_GSL): 4.3117698451136845e-16
const testcase_cyl_neumann<double>
-data007[13] =
+data013[20] =
{
- { -9.9359891284819675, 5.0000000000000000, 2.0000000000000000 },
- { -5.9446343848076424, 5.0000000000000000, 2.2500000000000000 },
- { -3.8301760007407522, 5.0000000000000000, 2.5000000000000000 },
- { -2.6287042009459087, 5.0000000000000000, 2.7500000000000000 },
- { -1.9059459538286738, 5.0000000000000000, 3.0000000000000000 },
- { -1.4498157389142654, 5.0000000000000000, 3.2500000000000000 },
- { -1.1494603169763686, 5.0000000000000000, 3.5000000000000000 },
- { -0.94343105151431672, 5.0000000000000000, 3.7500000000000000 },
- { -0.79585142111419982, 5.0000000000000000, 4.0000000000000000 },
- { -0.68479288173907016, 5.0000000000000000, 4.2500000000000000 },
- { -0.59631936513587558, 5.0000000000000000, 4.5000000000000000 },
- { -0.52130838331747587, 5.0000000000000000, 4.7500000000000000 },
- { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000 },
+ { -251309.48151852371, 5.0000000000000000, 0.25000000000000000, 0.0 },
+ { -7946.3014788074752, 5.0000000000000000, 0.50000000000000000, 0.0 },
+ { -1067.2468952289760, 5.0000000000000000, 0.75000000000000000, 0.0 },
+ { -260.40586662581228, 5.0000000000000000, 1.0000000000000000, 0.0 },
+ { -88.474252441880395, 5.0000000000000000, 1.2500000000000000, 0.0 },
+ { -37.190308395498064, 5.0000000000000000, 1.5000000000000000, 0.0 },
+ { -18.165774988201832, 5.0000000000000000, 1.7500000000000000, 0.0 },
+ { -9.9359891284819675, 5.0000000000000000, 2.0000000000000000, 0.0 },
+ { -5.9446343848076424, 5.0000000000000000, 2.2500000000000000, 0.0 },
+ { -3.8301760007407522, 5.0000000000000000, 2.5000000000000000, 0.0 },
+ { -2.6287042009459087, 5.0000000000000000, 2.7500000000000000, 0.0 },
+ { -1.9059459538286738, 5.0000000000000000, 3.0000000000000000, 0.0 },
+ { -1.4498157389142654, 5.0000000000000000, 3.2500000000000000, 0.0 },
+ { -1.1494603169763686, 5.0000000000000000, 3.5000000000000000, 0.0 },
+ { -0.94343105151431672, 5.0000000000000000, 3.7500000000000000, 0.0 },
+ { -0.79585142111419982, 5.0000000000000000, 4.0000000000000000, 0.0 },
+ { -0.68479288173907016, 5.0000000000000000, 4.2500000000000000, 0.0 },
+ { -0.59631936513587558, 5.0000000000000000, 4.5000000000000000, 0.0 },
+ { -0.52130838331747587, 5.0000000000000000, 4.7500000000000000, 0.0 },
+ { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler007 = 2.5000000000000020e-13;
+const double toler013 = 2.5000000000000020e-13;
// Test data for nu=10.000000000000000.
// max(|f - f_GSL|): 2.3841857910156250e-07
// max(|f - f_GSL| / |f_GSL|): 1.4991559422183497e-15
+// mean(f - f_GSL): 1.1410207712003740e-08
+// variance(f - f_GSL): 7.2129221830135911e-18
+// stddev(f - f_GSL): 2.6856884002083324e-09
const testcase_cyl_neumann<double>
-data008[20] =
+data014[20] =
{
- { -124241617095379.48, 10.000000000000000, 0.25000000000000000 },
- { -121963623349.56966, 10.000000000000000, 0.50000000000000000 },
- { -2133501638.9057348, 10.000000000000000, 0.75000000000000000 },
- { -121618014.27868921, 10.000000000000000, 1.0000000000000000 },
- { -13265210.158452792, 10.000000000000000, 1.2500000000000000 },
- { -2183993.0260864049, 10.000000000000000, 1.5000000000000000 },
- { -478274.82386541169, 10.000000000000000, 1.7500000000000000 },
- { -129184.54220803917, 10.000000000000000, 2.0000000000000000 },
- { -40993.254794381690, 10.000000000000000, 2.2500000000000000 },
- { -14782.847716021070, 10.000000000000000, 2.5000000000000000 },
- { -5916.5330998776262, 10.000000000000000, 2.7500000000000000 },
- { -2582.6071294842995, 10.000000000000000, 3.0000000000000000 },
- { -1213.3423564023892, 10.000000000000000, 3.2500000000000000 },
- { -607.27437834125760, 10.000000000000000, 3.5000000000000000 },
- { -321.17461059752202, 10.000000000000000, 3.7500000000000000 },
- { -178.33055590796428, 10.000000000000000, 4.0000000000000000 },
- { -103.40496587570090, 10.000000000000000, 4.2500000000000000 },
- { -62.345024619781434, 10.000000000000000, 4.5000000000000000 },
- { -38.944510430296937, 10.000000000000000, 4.7500000000000000 },
- { -25.129110095610095, 10.000000000000000, 5.0000000000000000 },
+ { -124241617095379.48, 10.000000000000000, 0.25000000000000000, 0.0 },
+ { -121963623349.56966, 10.000000000000000, 0.50000000000000000, 0.0 },
+ { -2133501638.9057348, 10.000000000000000, 0.75000000000000000, 0.0 },
+ { -121618014.27868921, 10.000000000000000, 1.0000000000000000, 0.0 },
+ { -13265210.158452792, 10.000000000000000, 1.2500000000000000, 0.0 },
+ { -2183993.0260864049, 10.000000000000000, 1.5000000000000000, 0.0 },
+ { -478274.82386541169, 10.000000000000000, 1.7500000000000000, 0.0 },
+ { -129184.54220803917, 10.000000000000000, 2.0000000000000000, 0.0 },
+ { -40993.254794381690, 10.000000000000000, 2.2500000000000000, 0.0 },
+ { -14782.847716021070, 10.000000000000000, 2.5000000000000000, 0.0 },
+ { -5916.5330998776262, 10.000000000000000, 2.7500000000000000, 0.0 },
+ { -2582.6071294842995, 10.000000000000000, 3.0000000000000000, 0.0 },
+ { -1213.3423564023892, 10.000000000000000, 3.2500000000000000, 0.0 },
+ { -607.27437834125760, 10.000000000000000, 3.5000000000000000, 0.0 },
+ { -321.17461059752202, 10.000000000000000, 3.7500000000000000, 0.0 },
+ { -178.33055590796428, 10.000000000000000, 4.0000000000000000, 0.0 },
+ { -103.40496587570090, 10.000000000000000, 4.2500000000000000, 0.0 },
+ { -62.345024619781434, 10.000000000000000, 4.5000000000000000, 0.0 },
+ { -38.944510430296937, 10.000000000000000, 4.7500000000000000, 0.0 },
+ { -25.129110095610095, 10.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler008 = 2.5000000000000020e-13;
+const double toler014 = 2.5000000000000020e-13;
// Test data for nu=20.000000000000000.
// max(|f - f_GSL|): 6442450944.0000000
// max(|f - f_GSL| / |f_GSL|): 1.6458221996165416e-15
+// mean(f - f_GSL): 322083864.23008448
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_neumann<double>
-data009[20] =
+data015[20] =
{
- { -4.4678815064152581e+34, 20.000000000000000, 0.25000000000000000 },
- { -4.2714301215659088e+28, 20.000000000000000, 0.50000000000000000 },
- { -1.2898357375834223e+25, 20.000000000000000, 0.75000000000000000 },
- { -4.1139703148355065e+22, 20.000000000000000, 1.0000000000000000 },
- { -4.7783533372148580e+20, 20.000000000000000, 1.2500000000000000 },
- { -1.2577301772964241e+19, 20.000000000000000, 1.5000000000000000 },
- { -5.8251041176649626e+17, 20.000000000000000, 1.7500000000000000 },
- { -40816513889983640., 20.000000000000000, 2.0000000000000000 },
- { -3925339868516418.5, 20.000000000000000, 2.2500000000000000 },
- { -484776559582090.25, 20.000000000000000, 2.5000000000000000 },
- { -73320655044814.469, 20.000000000000000, 2.7500000000000000 },
- { -13113540041757.449, 20.000000000000000, 3.0000000000000000 },
- { -2700669268882.7139, 20.000000000000000, 3.2500000000000000 },
- { -627339518240.21240, 20.000000000000000, 3.5000000000000000 },
- { -161695236802.71753, 20.000000000000000, 3.7500000000000000 },
- { -45637199262.220100, 20.000000000000000, 4.0000000000000000 },
- { -13953299213.925377, 20.000000000000000, 4.2500000000000000 },
- { -4580215756.5691023, 20.000000000000000, 4.5000000000000000 },
- { -1602110715.5159132, 20.000000000000000, 4.7500000000000000 },
- { -593396529.69143200, 20.000000000000000, 5.0000000000000000 },
+ { -4.4678815064152581e+34, 20.000000000000000, 0.25000000000000000, 0.0 },
+ { -4.2714301215659088e+28, 20.000000000000000, 0.50000000000000000, 0.0 },
+ { -1.2898357375834223e+25, 20.000000000000000, 0.75000000000000000, 0.0 },
+ { -4.1139703148355065e+22, 20.000000000000000, 1.0000000000000000, 0.0 },
+ { -4.7783533372148580e+20, 20.000000000000000, 1.2500000000000000, 0.0 },
+ { -1.2577301772964241e+19, 20.000000000000000, 1.5000000000000000, 0.0 },
+ { -5.8251041176649626e+17, 20.000000000000000, 1.7500000000000000, 0.0 },
+ { -40816513889983640., 20.000000000000000, 2.0000000000000000, 0.0 },
+ { -3925339868516418.5, 20.000000000000000, 2.2500000000000000, 0.0 },
+ { -484776559582090.25, 20.000000000000000, 2.5000000000000000, 0.0 },
+ { -73320655044814.469, 20.000000000000000, 2.7500000000000000, 0.0 },
+ { -13113540041757.449, 20.000000000000000, 3.0000000000000000, 0.0 },
+ { -2700669268882.7139, 20.000000000000000, 3.2500000000000000, 0.0 },
+ { -627339518240.21240, 20.000000000000000, 3.5000000000000000, 0.0 },
+ { -161695236802.71753, 20.000000000000000, 3.7500000000000000, 0.0 },
+ { -45637199262.220100, 20.000000000000000, 4.0000000000000000, 0.0 },
+ { -13953299213.925377, 20.000000000000000, 4.2500000000000000, 0.0 },
+ { -4580215756.5691023, 20.000000000000000, 4.5000000000000000, 0.0 },
+ { -1602110715.5159132, 20.000000000000000, 4.7500000000000000, 0.0 },
+ { -593396529.69143200, 20.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler009 = 2.5000000000000020e-13;
+const double toler015 = 2.5000000000000020e-13;
// Test data for nu=50.000000000000000.
// max(|f - f_GSL|): 6.4703872001161536e+68
// max(|f - f_GSL| / |f_GSL|): 3.7730746786493403e-15
+// mean(f - f_GSL): 3.2351936000129644e+67
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_neumann<double>
-data010[20] =
+data016[20] =
{
- { -2.7643487471155969e+107, 50.000000000000000, 0.25000000000000000 },
- { -2.4575848224461092e+92, 50.000000000000000, 0.50000000000000000 },
- { -3.8604508467683829e+83, 50.000000000000000, 0.75000000000000000 },
- { -2.1911428126053411e+77, 50.000000000000000, 1.0000000000000000 },
- { -3.1362926828833165e+72, 50.000000000000000, 1.2500000000000000 },
- { -3.4584216846550566e+68, 50.000000000000000, 1.5000000000000000 },
- { -1.5607714080312795e+65, 50.000000000000000, 1.7500000000000000 },
- { -1.9761505765184128e+62, 50.000000000000000, 2.0000000000000000 },
- { -5.5023640499231188e+59, 50.000000000000000, 2.2500000000000000 },
- { -2.8530384545826849e+57, 50.000000000000000, 2.5000000000000000 },
- { -2.4467169322684809e+55, 50.000000000000000, 2.7500000000000000 },
- { -3.1793891461005181e+53, 50.000000000000000, 3.0000000000000000 },
- { -5.8573901231568658e+51, 50.000000000000000, 3.2500000000000000 },
- { -1.4528262197760965e+50, 50.000000000000000, 3.5000000000000000 },
- { -4.6566569870478635e+48, 50.000000000000000, 3.7500000000000000 },
- { -1.8661134361400254e+47, 50.000000000000000, 4.0000000000000000 },
- { -9.1005883612255402e+45, 50.000000000000000, 4.2500000000000000 },
- { -5.2813777542386141e+44, 50.000000000000000, 4.5000000000000000 },
- { -3.5795477722116469e+43, 50.000000000000000, 4.7500000000000000 },
- { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000 },
+ { -2.7643487471155969e+107, 50.000000000000000, 0.25000000000000000, 0.0 },
+ { -2.4575848224461092e+92, 50.000000000000000, 0.50000000000000000, 0.0 },
+ { -3.8604508467683829e+83, 50.000000000000000, 0.75000000000000000, 0.0 },
+ { -2.1911428126053411e+77, 50.000000000000000, 1.0000000000000000, 0.0 },
+ { -3.1362926828833165e+72, 50.000000000000000, 1.2500000000000000, 0.0 },
+ { -3.4584216846550566e+68, 50.000000000000000, 1.5000000000000000, 0.0 },
+ { -1.5607714080312795e+65, 50.000000000000000, 1.7500000000000000, 0.0 },
+ { -1.9761505765184128e+62, 50.000000000000000, 2.0000000000000000, 0.0 },
+ { -5.5023640499231188e+59, 50.000000000000000, 2.2500000000000000, 0.0 },
+ { -2.8530384545826849e+57, 50.000000000000000, 2.5000000000000000, 0.0 },
+ { -2.4467169322684809e+55, 50.000000000000000, 2.7500000000000000, 0.0 },
+ { -3.1793891461005181e+53, 50.000000000000000, 3.0000000000000000, 0.0 },
+ { -5.8573901231568658e+51, 50.000000000000000, 3.2500000000000000, 0.0 },
+ { -1.4528262197760965e+50, 50.000000000000000, 3.5000000000000000, 0.0 },
+ { -4.6566569870478635e+48, 50.000000000000000, 3.7500000000000000, 0.0 },
+ { -1.8661134361400254e+47, 50.000000000000000, 4.0000000000000000, 0.0 },
+ { -9.1005883612255402e+45, 50.000000000000000, 4.2500000000000000, 0.0 },
+ { -5.2813777542386141e+44, 50.000000000000000, 4.5000000000000000, 0.0 },
+ { -3.5795477722116469e+43, 50.000000000000000, 4.7500000000000000, 0.0 },
+ { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
};
-const double toler010 = 2.5000000000000020e-13;
+const double toler016 = 2.5000000000000020e-13;
// Test data for nu=100.00000000000000.
// max(|f - f_GSL|): 1.6136484921850493e+233
// max(|f - f_GSL| / |f_GSL|): 3.7090973947899002e-13
+// mean(f - f_GSL): -8.0682424609252473e+231
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_neumann<double>
-data011[20] =
+data017[20] =
{
- { -6.0523080585856754e+245, 100.00000000000000, 0.25000000000000000 },
- { -4.7766903780412668e+215, 100.00000000000000, 0.50000000000000000 },
- { -1.1758283017660654e+198, 100.00000000000000, 0.75000000000000000 },
- { -3.7752878101091316e+185, 100.00000000000000, 1.0000000000000000 },
- { -7.7013290730008304e+175, 100.00000000000000, 1.2500000000000000 },
- { -9.3152624794288802e+167, 100.00000000000000, 1.5000000000000000 },
- { -1.8854163374247264e+161, 100.00000000000000, 1.7500000000000000 },
- { -3.0008260488569689e+155, 100.00000000000000, 2.0000000000000000 },
- { -2.3075650873777408e+150, 100.00000000000000, 2.2500000000000000 },
- { -6.1476258561369381e+145, 100.00000000000000, 2.5000000000000000 },
- { -4.4758816234829593e+141, 100.00000000000000, 2.7500000000000000 },
- { -7.4747961023547846e+137, 100.00000000000000, 3.0000000000000000 },
- { -2.5067022766900123e+134, 100.00000000000000, 3.2500000000000000 },
- { -1.5222488313431896e+131, 100.00000000000000, 3.5000000000000000 },
- { -1.5422392812241397e+128, 100.00000000000000, 3.7500000000000000 },
- { -2.4400857387551062e+125, 100.00000000000000, 4.0000000000000000 },
- { -5.7118153392422278e+122, 100.00000000000000, 4.2500000000000000 },
- { -1.8915420905194465e+120, 100.00000000000000, 4.5000000000000000 },
- { -8.5357945104770158e+117, 100.00000000000000, 4.7500000000000000 },
- { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000 },
+ { -6.0523080585856754e+245, 100.00000000000000, 0.25000000000000000, 0.0 },
+ { -4.7766903780412668e+215, 100.00000000000000, 0.50000000000000000, 0.0 },
+ { -1.1758283017660654e+198, 100.00000000000000, 0.75000000000000000, 0.0 },
+ { -3.7752878101091316e+185, 100.00000000000000, 1.0000000000000000, 0.0 },
+ { -7.7013290730008304e+175, 100.00000000000000, 1.2500000000000000, 0.0 },
+ { -9.3152624794288802e+167, 100.00000000000000, 1.5000000000000000, 0.0 },
+ { -1.8854163374247264e+161, 100.00000000000000, 1.7500000000000000, 0.0 },
+ { -3.0008260488569689e+155, 100.00000000000000, 2.0000000000000000, 0.0 },
+ { -2.3075650873777408e+150, 100.00000000000000, 2.2500000000000000, 0.0 },
+ { -6.1476258561369381e+145, 100.00000000000000, 2.5000000000000000, 0.0 },
+ { -4.4758816234829593e+141, 100.00000000000000, 2.7500000000000000, 0.0 },
+ { -7.4747961023547846e+137, 100.00000000000000, 3.0000000000000000, 0.0 },
+ { -2.5067022766900123e+134, 100.00000000000000, 3.2500000000000000, 0.0 },
+ { -1.5222488313431896e+131, 100.00000000000000, 3.5000000000000000, 0.0 },
+ { -1.5422392812241397e+128, 100.00000000000000, 3.7500000000000000, 0.0 },
+ { -2.4400857387551062e+125, 100.00000000000000, 4.0000000000000000, 0.0 },
+ { -5.7118153392422278e+122, 100.00000000000000, 4.2500000000000000, 0.0 },
+ { -1.8915420905194465e+120, 100.00000000000000, 4.5000000000000000, 0.0 },
+ { -8.5357945104770158e+117, 100.00000000000000, 4.7500000000000000, 0.0 },
+ { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
};
-const double toler011 = 2.5000000000000014e-11;
+const double toler017 = 2.5000000000000014e-11;
// cyl_neumann
// Test data for nu=0.0000000000000000.
// max(|f - f_GSL|): 7.1245093158367467e-15
// max(|f - f_GSL| / |f_GSL|): 1.5215931554460198e-12
+// mean(f - f_GSL): 1.0848526937889958e-16
+// variance(f - f_GSL): 9.3913515508022887e-32
+// stddev(f - f_GSL): 3.0645312122414889e-16
const testcase_cyl_neumann<double>
-data012[20] =
+data018[20] =
{
- { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000 },
- { 0.055671167283599457, 0.0000000000000000, 10.000000000000000 },
- { 0.20546429603891822, 0.0000000000000000, 15.000000000000000 },
- { 0.062640596809384053, 0.0000000000000000, 20.000000000000000 },
- { -0.12724943226800617, 0.0000000000000000, 25.000000000000000 },
- { -0.11729573168666413, 0.0000000000000000, 30.000000000000000 },
- { 0.045797987195155689, 0.0000000000000000, 35.000000000000000 },
- { 0.12593641705826092, 0.0000000000000000, 40.000000000000000 },
- { 0.027060469763313333, 0.0000000000000000, 45.000000000000000 },
- { -0.098064995470077118, 0.0000000000000000, 50.000000000000000 },
- { -0.077569178730412594, 0.0000000000000000, 55.000000000000000 },
- { 0.047358952209449426, 0.0000000000000000, 60.000000000000000 },
- { 0.097183557740181920, 0.0000000000000000, 65.000000000000000 },
- { 0.0093096664589409992, 0.0000000000000000, 70.000000000000000 },
- { -0.085369047647775656, 0.0000000000000000, 75.000000000000000 },
- { -0.055620339089770016, 0.0000000000000000, 80.000000000000000 },
- { 0.049567884951494251, 0.0000000000000000, 85.000000000000000 },
- { 0.079776475854877751, 0.0000000000000000, 90.000000000000000 },
- { -0.0028230995861232107, 0.0000000000000000, 95.000000000000000 },
- { -0.077244313365083153, 0.0000000000000000, 100.00000000000000 },
+ { -0.30851762524903359, 0.0000000000000000, 5.0000000000000000, 0.0 },
+ { 0.055671167283599457, 0.0000000000000000, 10.000000000000000, 0.0 },
+ { 0.20546429603891822, 0.0000000000000000, 15.000000000000000, 0.0 },
+ { 0.062640596809384053, 0.0000000000000000, 20.000000000000000, 0.0 },
+ { -0.12724943226800617, 0.0000000000000000, 25.000000000000000, 0.0 },
+ { -0.11729573168666413, 0.0000000000000000, 30.000000000000000, 0.0 },
+ { 0.045797987195155689, 0.0000000000000000, 35.000000000000000, 0.0 },
+ { 0.12593641705826092, 0.0000000000000000, 40.000000000000000, 0.0 },
+ { 0.027060469763313333, 0.0000000000000000, 45.000000000000000, 0.0 },
+ { -0.098064995470077118, 0.0000000000000000, 50.000000000000000, 0.0 },
+ { -0.077569178730412594, 0.0000000000000000, 55.000000000000000, 0.0 },
+ { 0.047358952209449426, 0.0000000000000000, 60.000000000000000, 0.0 },
+ { 0.097183557740181920, 0.0000000000000000, 65.000000000000000, 0.0 },
+ { 0.0093096664589409992, 0.0000000000000000, 70.000000000000000, 0.0 },
+ { -0.085369047647775656, 0.0000000000000000, 75.000000000000000, 0.0 },
+ { -0.055620339089770016, 0.0000000000000000, 80.000000000000000, 0.0 },
+ { 0.049567884951494251, 0.0000000000000000, 85.000000000000000, 0.0 },
+ { 0.079776475854877751, 0.0000000000000000, 90.000000000000000, 0.0 },
+ { -0.0028230995861232107, 0.0000000000000000, 95.000000000000000, 0.0 },
+ { -0.077244313365083153, 0.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler012 = 1.0000000000000006e-10;
+const double toler018 = 1.0000000000000006e-10;
// Test data for nu=0.33333333333333331.
// max(|f - f_GSL|): 6.4392935428259079e-15
// max(|f - f_GSL| / |f_GSL|): 4.0229312517518102e-13
+// mean(f - f_GSL): 4.0852737859253807e-16
+// variance(f - f_GSL): 5.7739928235976998e-32
+// stddev(f - f_GSL): 2.4029134032664803e-16
const testcase_cyl_neumann<double>
-data013[20] =
+data019[20] =
{
- { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000 },
- { 0.17020111788268760, 0.33333333333333331, 10.000000000000000 },
- { 0.18540507541540796, 0.33333333333333331, 15.000000000000000 },
- { -0.028777707635715043, 0.33333333333333331, 20.000000000000000 },
- { -0.15829741864944163, 0.33333333333333331, 25.000000000000000 },
- { -0.058645772316705209, 0.33333333333333331, 30.000000000000000 },
- { 0.10294930308870617, 0.33333333333333331, 35.000000000000000 },
- { 0.10547870367098922, 0.33333333333333331, 40.000000000000000 },
- { -0.034334228816010816, 0.33333333333333331, 45.000000000000000 },
- { -0.11283489933031279, 0.33333333333333331, 50.000000000000000 },
- { -0.030007358986895105, 0.33333333333333331, 55.000000000000000 },
- { 0.086699173295718121, 0.33333333333333331, 60.000000000000000 },
- { 0.074875579668878658, 0.33333333333333331, 65.000000000000000 },
- { -0.039323246374552680, 0.33333333333333331, 70.000000000000000 },
- { -0.091263539574475236, 0.33333333333333331, 75.000000000000000 },
- { -0.013358849535984318, 0.33333333333333331, 80.000000000000000 },
- { 0.078373575537830198, 0.33333333333333331, 85.000000000000000 },
- { 0.055812482883955940, 0.33333333333333331, 90.000000000000000 },
- { -0.043310380106990683, 0.33333333333333331, 95.000000000000000 },
- { -0.076900504962136559, 0.33333333333333331, 100.00000000000000 },
+ { -0.18192321129343850, 0.33333333333333331, 5.0000000000000000, 0.0 },
+ { 0.17020111788268760, 0.33333333333333331, 10.000000000000000, 0.0 },
+ { 0.18540507541540796, 0.33333333333333331, 15.000000000000000, 0.0 },
+ { -0.028777707635715043, 0.33333333333333331, 20.000000000000000, 0.0 },
+ { -0.15829741864944163, 0.33333333333333331, 25.000000000000000, 0.0 },
+ { -0.058645772316705209, 0.33333333333333331, 30.000000000000000, 0.0 },
+ { 0.10294930308870617, 0.33333333333333331, 35.000000000000000, 0.0 },
+ { 0.10547870367098922, 0.33333333333333331, 40.000000000000000, 0.0 },
+ { -0.034334228816010816, 0.33333333333333331, 45.000000000000000, 0.0 },
+ { -0.11283489933031279, 0.33333333333333331, 50.000000000000000, 0.0 },
+ { -0.030007358986895105, 0.33333333333333331, 55.000000000000000, 0.0 },
+ { 0.086699173295718121, 0.33333333333333331, 60.000000000000000, 0.0 },
+ { 0.074875579668878658, 0.33333333333333331, 65.000000000000000, 0.0 },
+ { -0.039323246374552680, 0.33333333333333331, 70.000000000000000, 0.0 },
+ { -0.091263539574475236, 0.33333333333333331, 75.000000000000000, 0.0 },
+ { -0.013358849535984318, 0.33333333333333331, 80.000000000000000, 0.0 },
+ { 0.078373575537830198, 0.33333333333333331, 85.000000000000000, 0.0 },
+ { 0.055812482883955940, 0.33333333333333331, 90.000000000000000, 0.0 },
+ { -0.043310380106990683, 0.33333333333333331, 95.000000000000000, 0.0 },
+ { -0.076900504962136559, 0.33333333333333331, 100.00000000000000, 0.0 },
};
-const double toler013 = 2.5000000000000014e-11;
+const double toler019 = 2.5000000000000014e-11;
// Test data for nu=0.50000000000000000.
// max(|f - f_GSL|): 6.5988881026157742e-15
// max(|f - f_GSL| / |f_GSL|): 6.0282403975230169e-13
+// mean(f - f_GSL): 4.5018242605943113e-16
+// variance(f - f_GSL): 2.2297963049794567e-31
+// stddev(f - f_GSL): 4.7220719022262429e-16
const testcase_cyl_neumann<double>
-data014[20] =
+data020[20] =
{
- { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000 },
- { 0.21170886633139810, 0.50000000000000000, 10.000000000000000 },
- { 0.15650551590730855, 0.50000000000000000, 15.000000000000000 },
- { -0.072806904785061938, 0.50000000000000000, 20.000000000000000 },
- { -0.15817308404205055, 0.50000000000000000, 25.000000000000000 },
- { -0.022470290598831138, 0.50000000000000000, 30.000000000000000 },
- { 0.12187835265849535, 0.50000000000000000, 35.000000000000000 },
- { 0.084138655676395377, 0.50000000000000000, 40.000000000000000 },
- { -0.062482641933003201, 0.50000000000000000, 45.000000000000000 },
- { -0.10888475635053954, 0.50000000000000000, 50.000000000000000 },
- { -0.0023805454010949376, 0.50000000000000000, 55.000000000000000 },
- { 0.098104683735037918, 0.50000000000000000, 60.000000000000000 },
- { 0.055663470218594434, 0.50000000000000000, 65.000000000000000 },
- { -0.060396767883824871, 0.50000000000000000, 70.000000000000000 },
- { -0.084922578922046868, 0.50000000000000000, 75.000000000000000 },
- { 0.0098472271924441284, 0.50000000000000000, 80.000000000000000 },
- { 0.085190643574343625, 0.50000000000000000, 85.000000000000000 },
- { 0.037684970437156268, 0.50000000000000000, 90.000000000000000 },
- { -0.059772904856097500, 0.50000000000000000, 95.000000000000000 },
- { -0.068803091468728109, 0.50000000000000000, 100.00000000000000 },
+ { -0.10121770918510846, 0.50000000000000000, 5.0000000000000000, 0.0 },
+ { 0.21170886633139810, 0.50000000000000000, 10.000000000000000, 0.0 },
+ { 0.15650551590730855, 0.50000000000000000, 15.000000000000000, 0.0 },
+ { -0.072806904785061938, 0.50000000000000000, 20.000000000000000, 0.0 },
+ { -0.15817308404205055, 0.50000000000000000, 25.000000000000000, 0.0 },
+ { -0.022470290598831138, 0.50000000000000000, 30.000000000000000, 0.0 },
+ { 0.12187835265849535, 0.50000000000000000, 35.000000000000000, 0.0 },
+ { 0.084138655676395377, 0.50000000000000000, 40.000000000000000, 0.0 },
+ { -0.062482641933003201, 0.50000000000000000, 45.000000000000000, 0.0 },
+ { -0.10888475635053954, 0.50000000000000000, 50.000000000000000, 0.0 },
+ { -0.0023805454010949376, 0.50000000000000000, 55.000000000000000, 0.0 },
+ { 0.098104683735037918, 0.50000000000000000, 60.000000000000000, 0.0 },
+ { 0.055663470218594434, 0.50000000000000000, 65.000000000000000, 0.0 },
+ { -0.060396767883824871, 0.50000000000000000, 70.000000000000000, 0.0 },
+ { -0.084922578922046868, 0.50000000000000000, 75.000000000000000, 0.0 },
+ { 0.0098472271924441284, 0.50000000000000000, 80.000000000000000, 0.0 },
+ { 0.085190643574343625, 0.50000000000000000, 85.000000000000000, 0.0 },
+ { 0.037684970437156268, 0.50000000000000000, 90.000000000000000, 0.0 },
+ { -0.059772904856097500, 0.50000000000000000, 95.000000000000000, 0.0 },
+ { -0.068803091468728109, 0.50000000000000000, 100.00000000000000, 0.0 },
};
-const double toler014 = 5.0000000000000028e-11;
+const double toler020 = 5.0000000000000028e-11;
// Test data for nu=0.66666666666666663.
// max(|f - f_GSL|): 7.2442052356791464e-15
// max(|f - f_GSL| / |f_GSL|): 4.1296144775547441e-13
+// mean(f - f_GSL): 4.5987519348145160e-16
+// variance(f - f_GSL): 4.7892936352850507e-31
+// stddev(f - f_GSL): 6.9204722637151365e-16
const testcase_cyl_neumann<double>
-data015[20] =
+data021[20] =
{
- { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000 },
- { 0.23937232657540733, 0.66666666666666663, 10.000000000000000 },
- { 0.11762106604241235, 0.66666666666666663, 15.000000000000000 },
- { -0.11182254014899558, 0.66666666666666663, 20.000000000000000 },
- { -0.14756582982938804, 0.66666666666666663, 25.000000000000000 },
- { 0.015078692908077713, 0.66666666666666663, 30.000000000000000 },
- { 0.13260911815705795, 0.66666666666666663, 35.000000000000000 },
- { 0.057217565989652698, 0.66666666666666663, 40.000000000000000 },
- { -0.086373755152382006, 0.66666666666666663, 45.000000000000000 },
- { -0.097624139208051616, 0.66666666666666663, 50.000000000000000 },
- { 0.025354902147023392, 0.66666666666666663, 55.000000000000000 },
- { 0.10288136476351206, 0.66666666666666663, 60.000000000000000 },
- { 0.032728379560128203, 0.66666666666666663, 65.000000000000000 },
- { -0.077363672735747818, 0.66666666666666663, 70.000000000000000 },
- { -0.072855870458293961, 0.66666666666666663, 75.000000000000000 },
- { 0.032358106046953543, 0.66666666666666663, 80.000000000000000 },
- { 0.086240651537394228, 0.66666666666666663, 85.000000000000000 },
- { 0.017029601697285190, 0.66666666666666663, 90.000000000000000 },
- { -0.072173520560584681, 0.66666666666666663, 95.000000000000000 },
- { -0.056057339204073887, 0.66666666666666663, 100.00000000000000 },
+ { -0.016050662643389627, 0.66666666666666663, 5.0000000000000000, 0.0 },
+ { 0.23937232657540733, 0.66666666666666663, 10.000000000000000, 0.0 },
+ { 0.11762106604241235, 0.66666666666666663, 15.000000000000000, 0.0 },
+ { -0.11182254014899558, 0.66666666666666663, 20.000000000000000, 0.0 },
+ { -0.14756582982938804, 0.66666666666666663, 25.000000000000000, 0.0 },
+ { 0.015078692908077713, 0.66666666666666663, 30.000000000000000, 0.0 },
+ { 0.13260911815705795, 0.66666666666666663, 35.000000000000000, 0.0 },
+ { 0.057217565989652698, 0.66666666666666663, 40.000000000000000, 0.0 },
+ { -0.086373755152382006, 0.66666666666666663, 45.000000000000000, 0.0 },
+ { -0.097624139208051616, 0.66666666666666663, 50.000000000000000, 0.0 },
+ { 0.025354902147023392, 0.66666666666666663, 55.000000000000000, 0.0 },
+ { 0.10288136476351206, 0.66666666666666663, 60.000000000000000, 0.0 },
+ { 0.032728379560128203, 0.66666666666666663, 65.000000000000000, 0.0 },
+ { -0.077363672735747818, 0.66666666666666663, 70.000000000000000, 0.0 },
+ { -0.072855870458293961, 0.66666666666666663, 75.000000000000000, 0.0 },
+ { 0.032358106046953543, 0.66666666666666663, 80.000000000000000, 0.0 },
+ { 0.086240651537394228, 0.66666666666666663, 85.000000000000000, 0.0 },
+ { 0.017029601697285190, 0.66666666666666663, 90.000000000000000, 0.0 },
+ { -0.072173520560584681, 0.66666666666666663, 95.000000000000000, 0.0 },
+ { -0.056057339204073887, 0.66666666666666663, 100.00000000000000, 0.0 },
};
-const double toler015 = 2.5000000000000014e-11;
+const double toler021 = 2.5000000000000014e-11;
// Test data for nu=1.0000000000000000.
// max(|f - f_GSL|): 7.6640083168655337e-15
// max(|f - f_GSL| / |f_GSL|): 4.2719333494531163e-13
+// mean(f - f_GSL): 4.7852347084820228e-16
+// variance(f - f_GSL): 8.9128237023835657e-31
+// stddev(f - f_GSL): 9.4407752342609904e-16
const testcase_cyl_neumann<double>
-data016[20] =
+data022[20] =
{
- { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000 },
- { 0.24901542420695386, 1.0000000000000000, 10.000000000000000 },
- { 0.021073628036873522, 1.0000000000000000, 15.000000000000000 },
- { -0.16551161436252115, 1.0000000000000000, 20.000000000000000 },
- { -0.098829964783237412, 1.0000000000000000, 25.000000000000000 },
- { 0.084425570661747135, 1.0000000000000000, 30.000000000000000 },
- { 0.12751273354559009, 1.0000000000000000, 35.000000000000000 },
- { -0.0057935058215497536, 1.0000000000000000, 40.000000000000000 },
- { -0.11552517964639945, 1.0000000000000000, 45.000000000000000 },
- { -0.056795668562014692, 1.0000000000000000, 50.000000000000000 },
- { 0.073846265432577926, 1.0000000000000000, 55.000000000000000 },
- { 0.091869609369866892, 1.0000000000000000, 60.000000000000000 },
- { -0.017940374275377362, 1.0000000000000000, 65.000000000000000 },
- { -0.094844652625716230, 1.0000000000000000, 70.000000000000000 },
- { -0.035213785160580421, 1.0000000000000000, 75.000000000000000 },
- { 0.069395913784588037, 1.0000000000000000, 80.000000000000000 },
- { 0.071233187582749768, 1.0000000000000000, 85.000000000000000 },
- { -0.026187238607768244, 1.0000000000000000, 90.000000000000000 },
- { -0.081827958724501215, 1.0000000000000000, 95.000000000000000 },
- { -0.020372312002759834, 1.0000000000000000, 100.00000000000000 },
+ { 0.14786314339122700, 1.0000000000000000, 5.0000000000000000, 0.0 },
+ { 0.24901542420695386, 1.0000000000000000, 10.000000000000000, 0.0 },
+ { 0.021073628036873522, 1.0000000000000000, 15.000000000000000, 0.0 },
+ { -0.16551161436252115, 1.0000000000000000, 20.000000000000000, 0.0 },
+ { -0.098829964783237412, 1.0000000000000000, 25.000000000000000, 0.0 },
+ { 0.084425570661747135, 1.0000000000000000, 30.000000000000000, 0.0 },
+ { 0.12751273354559009, 1.0000000000000000, 35.000000000000000, 0.0 },
+ { -0.0057935058215497536, 1.0000000000000000, 40.000000000000000, 0.0 },
+ { -0.11552517964639945, 1.0000000000000000, 45.000000000000000, 0.0 },
+ { -0.056795668562014692, 1.0000000000000000, 50.000000000000000, 0.0 },
+ { 0.073846265432577926, 1.0000000000000000, 55.000000000000000, 0.0 },
+ { 0.091869609369866892, 1.0000000000000000, 60.000000000000000, 0.0 },
+ { -0.017940374275377362, 1.0000000000000000, 65.000000000000000, 0.0 },
+ { -0.094844652625716230, 1.0000000000000000, 70.000000000000000, 0.0 },
+ { -0.035213785160580421, 1.0000000000000000, 75.000000000000000, 0.0 },
+ { 0.069395913784588037, 1.0000000000000000, 80.000000000000000, 0.0 },
+ { 0.071233187582749768, 1.0000000000000000, 85.000000000000000, 0.0 },
+ { -0.026187238607768244, 1.0000000000000000, 90.000000000000000, 0.0 },
+ { -0.081827958724501215, 1.0000000000000000, 95.000000000000000, 0.0 },
+ { -0.020372312002759834, 1.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler016 = 2.5000000000000014e-11;
+const double toler022 = 2.5000000000000014e-11;
// Test data for nu=2.0000000000000000.
// max(|f - f_GSL|): 7.1193051454088163e-15
// max(|f - f_GSL| / |f_GSL|): 3.9371586401654762e-12
+// mean(f - f_GSL): -7.5373735031192273e-17
+// variance(f - f_GSL): 1.0337827474944609e-31
+// stddev(f - f_GSL): 3.2152492088397450e-16
const testcase_cyl_neumann<double>
-data017[20] =
+data023[20] =
{
- { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000 },
- { -0.0058680824422086830, 2.0000000000000000, 10.000000000000000 },
- { -0.20265447896733507, 2.0000000000000000, 15.000000000000000 },
- { -0.079191758245636165, 2.0000000000000000, 20.000000000000000 },
- { 0.11934303508534717, 2.0000000000000000, 25.000000000000000 },
- { 0.12292410306411394, 2.0000000000000000, 30.000000000000000 },
- { -0.038511545278264829, 2.0000000000000000, 35.000000000000000 },
- { -0.12622609234933840, 2.0000000000000000, 40.000000000000000 },
- { -0.032194922192042195, 2.0000000000000000, 45.000000000000000 },
- { 0.095793168727596537, 2.0000000000000000, 50.000000000000000 },
- { 0.080254497473415426, 2.0000000000000000, 55.000000000000000 },
- { -0.044296631897120527, 2.0000000000000000, 60.000000000000000 },
- { -0.097735569256347382, 2.0000000000000000, 65.000000000000000 },
- { -0.012019513676818605, 2.0000000000000000, 70.000000000000000 },
- { 0.084430013376826846, 2.0000000000000000, 75.000000000000000 },
- { 0.057355236934384719, 2.0000000000000000, 80.000000000000000 },
- { -0.047891809949547198, 2.0000000000000000, 85.000000000000000 },
- { -0.080358414490605934, 2.0000000000000000, 90.000000000000000 },
- { 0.0011004057182389746, 2.0000000000000000, 95.000000000000000 },
- { 0.076836867125027963, 2.0000000000000000, 100.00000000000000 },
+ { 0.36766288260552438, 2.0000000000000000, 5.0000000000000000, 0.0 },
+ { -0.0058680824422086830, 2.0000000000000000, 10.000000000000000, 0.0 },
+ { -0.20265447896733507, 2.0000000000000000, 15.000000000000000, 0.0 },
+ { -0.079191758245636165, 2.0000000000000000, 20.000000000000000, 0.0 },
+ { 0.11934303508534717, 2.0000000000000000, 25.000000000000000, 0.0 },
+ { 0.12292410306411394, 2.0000000000000000, 30.000000000000000, 0.0 },
+ { -0.038511545278264829, 2.0000000000000000, 35.000000000000000, 0.0 },
+ { -0.12622609234933840, 2.0000000000000000, 40.000000000000000, 0.0 },
+ { -0.032194922192042195, 2.0000000000000000, 45.000000000000000, 0.0 },
+ { 0.095793168727596537, 2.0000000000000000, 50.000000000000000, 0.0 },
+ { 0.080254497473415426, 2.0000000000000000, 55.000000000000000, 0.0 },
+ { -0.044296631897120527, 2.0000000000000000, 60.000000000000000, 0.0 },
+ { -0.097735569256347382, 2.0000000000000000, 65.000000000000000, 0.0 },
+ { -0.012019513676818605, 2.0000000000000000, 70.000000000000000, 0.0 },
+ { 0.084430013376826846, 2.0000000000000000, 75.000000000000000, 0.0 },
+ { 0.057355236934384719, 2.0000000000000000, 80.000000000000000, 0.0 },
+ { -0.047891809949547198, 2.0000000000000000, 85.000000000000000, 0.0 },
+ { -0.080358414490605934, 2.0000000000000000, 90.000000000000000, 0.0 },
+ { 0.0011004057182389746, 2.0000000000000000, 95.000000000000000, 0.0 },
+ { 0.076836867125027963, 2.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler017 = 2.5000000000000017e-10;
+const double toler023 = 2.5000000000000017e-10;
// Test data for nu=5.0000000000000000.
// max(|f - f_GSL|): 7.8097792989562098e-15
// max(|f - f_GSL| / |f_GSL|): 3.2731037832632215e-11
+// mean(f - f_GSL): 4.8693959021212100e-16
+// variance(f - f_GSL): 8.7986924944267162e-31
+// stddev(f - f_GSL): 9.3801345909462927e-16
const testcase_cyl_neumann<double>
-data018[20] =
+data024[20] =
{
- { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000 },
- { 0.13540304768936234, 5.0000000000000000, 10.000000000000000 },
- { 0.16717271575940015, 5.0000000000000000, 15.000000000000000 },
- { -0.10003576788953220, 5.0000000000000000, 20.000000000000000 },
- { -0.14705799311372267, 5.0000000000000000, 25.000000000000000 },
- { 0.031627359289264301, 5.0000000000000000, 30.000000000000000 },
- { 0.13554781474770028, 5.0000000000000000, 35.000000000000000 },
- { 0.031869448780850247, 5.0000000000000000, 40.000000000000000 },
- { -0.10426932700176872, 5.0000000000000000, 45.000000000000000 },
- { -0.078548413913081594, 5.0000000000000000, 50.000000000000000 },
- { 0.055257033062858375, 5.0000000000000000, 55.000000000000000 },
- { 0.099464632840450887, 5.0000000000000000, 60.000000000000000 },
- { 0.00023860469499595305, 5.0000000000000000, 65.000000000000000 },
- { -0.091861802216406052, 5.0000000000000000, 70.000000000000000 },
- { -0.048383671296970042, 5.0000000000000000, 75.000000000000000 },
- { 0.060293667104896316, 5.0000000000000000, 80.000000000000000 },
- { 0.077506166682733996, 5.0000000000000000, 85.000000000000000 },
- { -0.015338764062239767, 5.0000000000000000, 90.000000000000000 },
- { -0.081531504045514361, 5.0000000000000000, 95.000000000000000 },
- { -0.029480196281661937, 5.0000000000000000, 100.00000000000000 },
+ { -0.45369482249110193, 5.0000000000000000, 5.0000000000000000, 0.0 },
+ { 0.13540304768936234, 5.0000000000000000, 10.000000000000000, 0.0 },
+ { 0.16717271575940015, 5.0000000000000000, 15.000000000000000, 0.0 },
+ { -0.10003576788953220, 5.0000000000000000, 20.000000000000000, 0.0 },
+ { -0.14705799311372267, 5.0000000000000000, 25.000000000000000, 0.0 },
+ { 0.031627359289264301, 5.0000000000000000, 30.000000000000000, 0.0 },
+ { 0.13554781474770028, 5.0000000000000000, 35.000000000000000, 0.0 },
+ { 0.031869448780850247, 5.0000000000000000, 40.000000000000000, 0.0 },
+ { -0.10426932700176872, 5.0000000000000000, 45.000000000000000, 0.0 },
+ { -0.078548413913081594, 5.0000000000000000, 50.000000000000000, 0.0 },
+ { 0.055257033062858375, 5.0000000000000000, 55.000000000000000, 0.0 },
+ { 0.099464632840450887, 5.0000000000000000, 60.000000000000000, 0.0 },
+ { 0.00023860469499595305, 5.0000000000000000, 65.000000000000000, 0.0 },
+ { -0.091861802216406052, 5.0000000000000000, 70.000000000000000, 0.0 },
+ { -0.048383671296970042, 5.0000000000000000, 75.000000000000000, 0.0 },
+ { 0.060293667104896316, 5.0000000000000000, 80.000000000000000, 0.0 },
+ { 0.077506166682733996, 5.0000000000000000, 85.000000000000000, 0.0 },
+ { -0.015338764062239767, 5.0000000000000000, 90.000000000000000, 0.0 },
+ { -0.081531504045514361, 5.0000000000000000, 95.000000000000000, 0.0 },
+ { -0.029480196281661937, 5.0000000000000000, 100.00000000000000, 0.0 },
};
-const double toler018 = 2.5000000000000013e-09;
+const double toler024 = 2.5000000000000013e-09;
// Test data for nu=10.000000000000000.
// max(|f - f_GSL|): 1.7763568394002505e-14
// max(|f - f_GSL| / |f_GSL|): 2.7466153115234563e-12
+// mean(f - f_GSL): -7.2592756458766949e-16
+// variance(f - f_GSL): 1.2320603895340095e-30
+// stddev(f - f_GSL): 1.1099821573043459e-15
const testcase_cyl_neumann<double>
-data019[20] =
+data025[20] =
{
- { -25.129110095610095, 10.000000000000000, 5.0000000000000000 },
- { -0.35981415218340279, 10.000000000000000, 10.000000000000000 },
- { 0.21997141360195577, 10.000000000000000, 15.000000000000000 },
- { -0.043894653515658105, 10.000000000000000, 20.000000000000000 },
- { -0.14871839049980651, 10.000000000000000, 25.000000000000000 },
- { 0.075056702122397012, 10.000000000000000, 30.000000000000000 },
- { 0.12222473135000546, 10.000000000000000, 35.000000000000000 },
- { -0.046723877232677985, 10.000000000000000, 40.000000000000000 },
- { -0.11739339009322181, 10.000000000000000, 45.000000000000000 },
- { 0.0057238971820535930, 10.000000000000000, 50.000000000000000 },
- { 0.10733910125831631, 10.000000000000000, 55.000000000000000 },
- { 0.036290350559545478, 10.000000000000000, 60.000000000000000 },
- { -0.083239127691715667, 10.000000000000000, 65.000000000000000 },
- { -0.069639384138314858, 10.000000000000000, 70.000000000000000 },
- { 0.045798335061325066, 10.000000000000000, 75.000000000000000 },
- { 0.086269195064844456, 10.000000000000000, 80.000000000000000 },
- { -0.0018234674126248740, 10.000000000000000, 85.000000000000000 },
- { -0.082067762371231284, 10.000000000000000, 90.000000000000000 },
- { -0.038798074754578089, 10.000000000000000, 95.000000000000000 },
- { 0.058331574236414913, 10.000000000000000, 100.00000000000000 },
+ { -25.129110095610095, 10.000000000000000, 5.0000000000000000, 0.0 },
+ { -0.35981415218340279, 10.000000000000000, 10.000000000000000, 0.0 },
+ { 0.21997141360195577, 10.000000000000000, 15.000000000000000, 0.0 },
+ { -0.043894653515658105, 10.000000000000000, 20.000000000000000, 0.0 },
+ { -0.14871839049980651, 10.000000000000000, 25.000000000000000, 0.0 },
+ { 0.075056702122397012, 10.000000000000000, 30.000000000000000, 0.0 },
+ { 0.12222473135000546, 10.000000000000000, 35.000000000000000, 0.0 },
+ { -0.046723877232677985, 10.000000000000000, 40.000000000000000, 0.0 },
+ { -0.11739339009322181, 10.000000000000000, 45.000000000000000, 0.0 },
+ { 0.0057238971820535930, 10.000000000000000, 50.000000000000000, 0.0 },
+ { 0.10733910125831631, 10.000000000000000, 55.000000000000000, 0.0 },
+ { 0.036290350559545478, 10.000000000000000, 60.000000000000000, 0.0 },
+ { -0.083239127691715667, 10.000000000000000, 65.000000000000000, 0.0 },
+ { -0.069639384138314858, 10.000000000000000, 70.000000000000000, 0.0 },
+ { 0.045798335061325066, 10.000000000000000, 75.000000000000000, 0.0 },
+ { 0.086269195064844456, 10.000000000000000, 80.000000000000000, 0.0 },
+ { -0.0018234674126248740, 10.000000000000000, 85.000000000000000, 0.0 },
+ { -0.082067762371231284, 10.000000000000000, 90.000000000000000, 0.0 },
+ { -0.038798074754578089, 10.000000000000000, 95.000000000000000, 0.0 },
+ { 0.058331574236414913, 10.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler019 = 2.5000000000000017e-10;
+const double toler025 = 2.5000000000000017e-10;
// Test data for nu=20.000000000000000.
// max(|f - f_GSL|): 7.1525573730468750e-07
// max(|f - f_GSL| / |f_GSL|): 1.7017552833615218e-12
+// mean(f - f_GSL): -3.5762867211250673e-08
+// variance(f - f_GSL): 7.0857751170185363e-17
+// stddev(f - f_GSL): 8.4177046259764522e-09
const testcase_cyl_neumann<double>
-data020[20] =
+data026[20] =
{
- { -593396529.69143200, 20.000000000000000, 5.0000000000000000 },
- { -1597.4838482696259, 20.000000000000000, 10.000000000000000 },
- { -3.3087330924737621, 20.000000000000000, 15.000000000000000 },
- { -0.28548945860020319, 20.000000000000000, 20.000000000000000 },
- { 0.19804074776289243, 20.000000000000000, 25.000000000000000 },
- { -0.16848153948742683, 20.000000000000000, 30.000000000000000 },
- { 0.10102784152594022, 20.000000000000000, 35.000000000000000 },
- { 0.045161820565805755, 20.000000000000000, 40.000000000000000 },
- { -0.12556489308015448, 20.000000000000000, 45.000000000000000 },
- { 0.016442633948115834, 20.000000000000000, 50.000000000000000 },
- { 0.10853448778255181, 20.000000000000000, 55.000000000000000 },
- { -0.026721408520664701, 20.000000000000000, 60.000000000000000 },
- { -0.098780425256324175, 20.000000000000000, 65.000000000000000 },
- { 0.016201957786018233, 20.000000000000000, 70.000000000000000 },
- { 0.093591198265063721, 20.000000000000000, 75.000000000000000 },
- { 0.0040484400737296200, 20.000000000000000, 80.000000000000000 },
- { -0.086314929459920531, 20.000000000000000, 85.000000000000000 },
- { -0.028274110097231530, 20.000000000000000, 90.000000000000000 },
- { 0.072349520791638741, 20.000000000000000, 95.000000000000000 },
- { 0.051247973076188474, 20.000000000000000, 100.00000000000000 },
+ { -593396529.69143200, 20.000000000000000, 5.0000000000000000, 0.0 },
+ { -1597.4838482696259, 20.000000000000000, 10.000000000000000, 0.0 },
+ { -3.3087330924737621, 20.000000000000000, 15.000000000000000, 0.0 },
+ { -0.28548945860020319, 20.000000000000000, 20.000000000000000, 0.0 },
+ { 0.19804074776289243, 20.000000000000000, 25.000000000000000, 0.0 },
+ { -0.16848153948742683, 20.000000000000000, 30.000000000000000, 0.0 },
+ { 0.10102784152594022, 20.000000000000000, 35.000000000000000, 0.0 },
+ { 0.045161820565805755, 20.000000000000000, 40.000000000000000, 0.0 },
+ { -0.12556489308015448, 20.000000000000000, 45.000000000000000, 0.0 },
+ { 0.016442633948115834, 20.000000000000000, 50.000000000000000, 0.0 },
+ { 0.10853448778255181, 20.000000000000000, 55.000000000000000, 0.0 },
+ { -0.026721408520664701, 20.000000000000000, 60.000000000000000, 0.0 },
+ { -0.098780425256324175, 20.000000000000000, 65.000000000000000, 0.0 },
+ { 0.016201957786018233, 20.000000000000000, 70.000000000000000, 0.0 },
+ { 0.093591198265063721, 20.000000000000000, 75.000000000000000, 0.0 },
+ { 0.0040484400737296200, 20.000000000000000, 80.000000000000000, 0.0 },
+ { -0.086314929459920531, 20.000000000000000, 85.000000000000000, 0.0 },
+ { -0.028274110097231530, 20.000000000000000, 90.000000000000000, 0.0 },
+ { 0.072349520791638741, 20.000000000000000, 95.000000000000000, 0.0 },
+ { 0.051247973076188474, 20.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler020 = 1.0000000000000006e-10;
+const double toler026 = 1.0000000000000006e-10;
// Test data for nu=50.000000000000000.
// max(|f - f_GSL|): 1.0522490333925732e+28
// max(|f - f_GSL| / |f_GSL|): 2.6658726302692481e-12
+// mean(f - f_GSL): -5.2612451669628722e+26
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_neumann<double>
-data021[20] =
+data027[20] =
{
- { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000 },
- { -3.6410665018007421e+27, 50.000000000000000, 10.000000000000000 },
- { -1.0929732912175415e+19, 50.000000000000000, 15.000000000000000 },
- { -15606426801663.734, 50.000000000000000, 20.000000000000000 },
- { -753573251.44662738, 50.000000000000000, 25.000000000000000 },
- { -386759.32602734759, 50.000000000000000, 30.000000000000000 },
- { -1172.8690492895323, 50.000000000000000, 35.000000000000000 },
- { -15.615608873419944, 50.000000000000000, 40.000000000000000 },
- { -0.87058346204176895, 50.000000000000000, 45.000000000000000 },
- { -0.21031655464397747, 50.000000000000000, 50.000000000000000 },
- { 0.093048240412999389, 50.000000000000000, 55.000000000000000 },
- { 0.0086417699626744754, 50.000000000000000, 60.000000000000000 },
- { -0.025019788459222037, 50.000000000000000, 65.000000000000000 },
- { -0.0014815155191909152, 50.000000000000000, 70.000000000000000 },
- { 0.050335774732164121, 50.000000000000000, 75.000000000000000 },
- { -0.092924250967987232, 50.000000000000000, 80.000000000000000 },
- { 0.087332463030205698, 50.000000000000000, 85.000000000000000 },
- { -0.016164237701651860, 50.000000000000000, 90.000000000000000 },
- { -0.068897613820457934, 50.000000000000000, 95.000000000000000 },
- { 0.076505263944803045, 50.000000000000000, 100.00000000000000 },
+ { -2.7888370175838930e+42, 50.000000000000000, 5.0000000000000000, 0.0 },
+ { -3.6410665018007421e+27, 50.000000000000000, 10.000000000000000, 0.0 },
+ { -1.0929732912175415e+19, 50.000000000000000, 15.000000000000000, 0.0 },
+ { -15606426801663.734, 50.000000000000000, 20.000000000000000, 0.0 },
+ { -753573251.44662738, 50.000000000000000, 25.000000000000000, 0.0 },
+ { -386759.32602734759, 50.000000000000000, 30.000000000000000, 0.0 },
+ { -1172.8690492895323, 50.000000000000000, 35.000000000000000, 0.0 },
+ { -15.615608873419944, 50.000000000000000, 40.000000000000000, 0.0 },
+ { -0.87058346204176895, 50.000000000000000, 45.000000000000000, 0.0 },
+ { -0.21031655464397747, 50.000000000000000, 50.000000000000000, 0.0 },
+ { 0.093048240412999389, 50.000000000000000, 55.000000000000000, 0.0 },
+ { 0.0086417699626744754, 50.000000000000000, 60.000000000000000, 0.0 },
+ { -0.025019788459222037, 50.000000000000000, 65.000000000000000, 0.0 },
+ { -0.0014815155191909152, 50.000000000000000, 70.000000000000000, 0.0 },
+ { 0.050335774732164121, 50.000000000000000, 75.000000000000000, 0.0 },
+ { -0.092924250967987232, 50.000000000000000, 80.000000000000000, 0.0 },
+ { 0.087332463030205698, 50.000000000000000, 85.000000000000000, 0.0 },
+ { -0.016164237701651860, 50.000000000000000, 90.000000000000000, 0.0 },
+ { -0.068897613820457934, 50.000000000000000, 95.000000000000000, 0.0 },
+ { 0.076505263944803045, 50.000000000000000, 100.00000000000000, 0.0 },
};
-const double toler021 = 2.5000000000000017e-10;
+const double toler027 = 2.5000000000000017e-10;
// Test data for nu=100.00000000000000.
// max(|f - f_GSL|): 6.3342780989716025e+102
// max(|f - f_GSL| / |f_GSL|): 1.2681517765786818e-13
+// mean(f - f_GSL): -3.1671390494858015e+101
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
const testcase_cyl_neumann<double>
-data022[20] =
+data028[20] =
{
- { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000 },
- { -4.8491482711800252e+85, 100.00000000000000, 10.000000000000000 },
- { -1.6375955323195320e+68, 100.00000000000000, 15.000000000000000 },
- { -8.2002648144679126e+55, 100.00000000000000, 20.000000000000000 },
- { -2.9712216432562368e+46, 100.00000000000000, 25.000000000000000 },
- { -7.2875284708240751e+38, 100.00000000000000, 30.000000000000000 },
- { -3.4251079902108953e+32, 100.00000000000000, 35.000000000000000 },
- { -1.4552439438101802e+27, 100.00000000000000, 40.000000000000000 },
- { -3.4506612476220073e+22, 100.00000000000000, 45.000000000000000 },
- { -3.2938001882025953e+18, 100.00000000000000, 50.000000000000000 },
- { -1005686182055527.4, 100.00000000000000, 55.000000000000000 },
- { -831892881402.11377, 100.00000000000000, 60.000000000000000 },
- { -1650863778.0598330, 100.00000000000000, 65.000000000000000 },
- { -7192614.1976097794, 100.00000000000000, 70.000000000000000 },
- { -64639.072261231595, 100.00000000000000, 75.000000000000000 },
- { -1152.5905185698466, 100.00000000000000, 80.000000000000000 },
- { -40.250761402101560, 100.00000000000000, 85.000000000000000 },
- { -2.8307771387185459, 100.00000000000000, 90.000000000000000 },
- { -0.45762200495904848, 100.00000000000000, 95.000000000000000 },
- { -0.16692141141757652, 100.00000000000000, 100.00000000000000 },
+ { -5.0848639160196196e+115, 100.00000000000000, 5.0000000000000000, 0.0 },
+ { -4.8491482711800252e+85, 100.00000000000000, 10.000000000000000, 0.0 },
+ { -1.6375955323195320e+68, 100.00000000000000, 15.000000000000000, 0.0 },
+ { -8.2002648144679126e+55, 100.00000000000000, 20.000000000000000, 0.0 },
+ { -2.9712216432562368e+46, 100.00000000000000, 25.000000000000000, 0.0 },
+ { -7.2875284708240751e+38, 100.00000000000000, 30.000000000000000, 0.0 },
+ { -3.4251079902108953e+32, 100.00000000000000, 35.000000000000000, 0.0 },
+ { -1.4552439438101802e+27, 100.00000000000000, 40.000000000000000, 0.0 },
+ { -3.4506612476220073e+22, 100.00000000000000, 45.000000000000000, 0.0 },
+ { -3.2938001882025953e+18, 100.00000000000000, 50.000000000000000, 0.0 },
+ { -1005686182055527.4, 100.00000000000000, 55.000000000000000, 0.0 },
+ { -831892881402.11377, 100.00000000000000, 60.000000000000000, 0.0 },
+ { -1650863778.0598330, 100.00000000000000, 65.000000000000000, 0.0 },
+ { -7192614.1976097794, 100.00000000000000, 70.000000000000000, 0.0 },
+ { -64639.072261231595, 100.00000000000000, 75.000000000000000, 0.0 },
+ { -1152.5905185698466, 100.00000000000000, 80.000000000000000, 0.0 },
+ { -40.250761402101560, 100.00000000000000, 85.000000000000000, 0.0 },
+ { -2.8307771387185459, 100.00000000000000, 90.000000000000000, 0.0 },
+ { -0.45762200495904848, 100.00000000000000, 95.000000000000000, 0.0 },
+ { -0.16692141141757652, 100.00000000000000, 100.00000000000000, 0.0 },
};
-const double toler022 = 1.0000000000000006e-11;
+const double toler028 = 1.0000000000000006e-11;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_cyl_neumann<Tp> (&data)[Num], Tp toler)
+ test(const testcase_cyl_neumann<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::cyl_neumann(data[i].nu, data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f = std::cyl_neumann(data[i].nu, data[i].x);
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
@@ -715,5 +988,11 @@ main()
test(data020, toler020);
test(data021, toler021);
test(data022, toler022);
+ test(data023, toler023);
+ test(data024, toler024);
+ test(data025, toler025);
+ test(data026, toler026);
+ test(data027, toler027);
+ test(data028, toler028);
return 0;
}
diff --git a/libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc b/libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc
index b2040c7c9e7..f1e7dbaba64 100644
--- a/libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/11_ellint_1/check_value.cc
@@ -41,384 +41,441 @@
// Test data for k=-0.90000000000000002.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 4.3381508715713370e-16
+// mean(f - f_GSL): 4.1633363423443370e-17
+// variance(f - f_GSL): 2.1399221604302622e-34
+// stddev(f - f_GSL): 1.4628472785736255e-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.17525427376115024, -0.90000000000000002, 0.17453292519943295, 0.0 },
+ { 0.35492464591297446, -0.90000000000000002, 0.34906585039886590, 0.0 },
+ { 0.54388221416157112, -0.90000000000000002, 0.52359877559829882, 0.0 },
+ { 0.74797400423532490, -0.90000000000000002, 0.69813170079773179, 0.0 },
+ { 0.97463898451966458, -0.90000000000000002, 0.87266462599716477, 0.0 },
+ { 1.2334463254523440, -0.90000000000000002, 1.0471975511965976, 0.0 },
+ { 1.5355247765594913, -0.90000000000000002, 1.2217304763960306, 0.0 },
+ { 1.8882928567775121, -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
+// mean(f - f_GSL): 7.2164496600635178e-17
+// variance(f - f_GSL): 3.2903443138775707e-32
+// stddev(f - f_GSL): 1.8139306254312956e-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.35365068839779390, -0.80000000000000004, 0.34906585039886590, 0.0 },
+ { 0.53926804409084550, -0.80000000000000004, 0.52359877559829882, 0.0 },
+ { 0.73587926028070361, -0.80000000000000004, 0.69813170079773179, 0.0 },
+ { 0.94770942970071170, -0.80000000000000004, 0.87266462599716477, 0.0 },
+ { 1.1789022995388236, -0.80000000000000004, 1.0471975511965976, 0.0 },
+ { 1.4323027881876009, -0.80000000000000004, 1.2217304763960306, 0.0 },
+ { 1.7069629739121674, -0.80000000000000004, 1.3962634015954636, 0.0 },
+ { 1.9953027776647296, -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
+// mean(f - f_GSL): -2.2204460492503132e-17
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 7.0216669371534022e-17
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.35254687535677925, -0.69999999999999996, 0.34906585039886590, 0.0 },
+ { 0.53536740275997119, -0.69999999999999996, 0.52359877559829882, 0.0 },
+ { 0.72603797651684454, -0.69999999999999996, 0.69813170079773179, 0.0 },
+ { 0.92698296348313458, -0.69999999999999996, 0.87266462599716477, 0.0 },
+ { 1.1400447527693316, -0.69999999999999996, 1.0471975511965976, 0.0 },
+ { 1.3657668117194073, -0.69999999999999996, 1.2217304763960306, 0.0 },
+ { 1.6024686895959159, -0.69999999999999996, 1.3962634015954636, 0.0 },
+ { 1.8456939983747236, -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
+// mean(f - f_GSL): 1.0269562977782698e-16
+// variance(f - f_GSL): 1.3020237500573462e-33
+// stddev(f - f_GSL): 3.6083566204816091e-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.35160509865544326, -0.59999999999999998, 0.34906585039886590, 0.0 },
+ { 0.53210652578446138, -0.59999999999999998, 0.52359877559829882, 0.0 },
+ { 0.71805304664485659, -0.59999999999999998, 0.69813170079773179, 0.0 },
+ { 0.91082759030195970, -0.59999999999999998, 0.87266462599716477, 0.0 },
+ { 1.1112333229323361, -0.59999999999999998, 1.0471975511965976, 0.0 },
+ { 1.3191461190365270, -0.59999999999999998, 1.2217304763960306, 0.0 },
+ { 1.5332022105084773, -0.59999999999999998, 1.3962634015954636, 0.0 },
+ { 1.7507538029157526, -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_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 3.9515567229356899e-16
+// mean(f - f_GSL): -5.8286708792820721e-17
+// variance(f - f_GSL): 4.5614580771731464e-32
+// stddev(f - f_GSL): 2.1357570267174931e-16
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.35081868470101585, -0.50000000000000000, 0.34906585039886590, 0.0 },
+ { 0.52942862705190574, -0.50000000000000000, 0.52359877559829882, 0.0 },
+ { 0.71164727562630314, -0.50000000000000000, 0.69813170079773179, 0.0 },
+ { 0.89824523594227768, -0.50000000000000000, 0.87266462599716477, 0.0 },
+ { 1.0895506700518851, -0.50000000000000000, 1.0471975511965976, 0.0 },
+ { 1.2853005857432931, -0.50000000000000000, 1.2217304763960306, 0.0 },
+ { 1.4845545520549484, -0.50000000000000000, 1.3962634015954636, 0.0 },
+ { 1.6857503548125963, -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_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.5229483808919170e-16
+// mean(f - f_GSL): -1.1102230246251566e-17
+// variance(f - f_GSL): 2.3145398087213714e-32
+// stddev(f - f_GSL): 1.5213611697165703e-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.52729015917508737, -0.39999999999999991, 0.52359877559829882, 0.0 },
+ { 0.70662374407341244, -0.39999999999999991, 0.69813170079773179, 0.0 },
+ { 0.88859210497602170, -0.39999999999999991, 0.87266462599716477, 0.0 },
+ { 1.0733136290471379, -0.39999999999999991, 1.0471975511965976, 0.0 },
+ { 1.2605612170157061, -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
+// Test data for k=-0.29999999999999993.
+// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// mean(f - f_GSL): -3.3306690738754695e-17
+// variance(f - f_GSL): 2.0832380000917539e-32
+// stddev(f - f_GSL): 1.4433426481926437e-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.34969146102798415, -0.29999999999999993, 0.34906585039886590, 0.0 },
+ { 0.52565822873726320, -0.29999999999999993, 0.52359877559829882, 0.0 },
+ { 0.70284226512408532, -0.29999999999999993, 0.69813170079773179, 0.0 },
+ { 0.88144139195111182, -0.29999999999999993, 0.87266462599716477, 0.0 },
+ { 1.0614897067260520, -0.29999999999999993, 1.0471975511965976, 0.0 },
+ { 1.2428416824174218, -0.29999999999999993, 1.2217304763960306, 0.0 },
+ { 1.4251795877015927, -0.29999999999999993, 1.3962634015954636, 0.0 },
+ { 1.6080486199305128, -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
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
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.17456817290292809, -0.19999999999999996, 0.17453292519943295, 0.0 },
+ { 0.34934315932086801, -0.19999999999999996, 0.34906585039886590, 0.0 },
+ { 0.52450880529443988, -0.19999999999999996, 0.52359877559829882, 0.0 },
+ { 0.70020491009844876, -0.19999999999999996, 0.69813170079773179, 0.0 },
+ { 0.87651006649967955, -0.19999999999999996, 0.87266462599716477, 0.0 },
+ { 1.0534305870298994, -0.19999999999999996, 1.0471975511965976, 0.0 },
+ { 1.2308975521670784, -0.19999999999999996, 1.2217304763960306, 0.0 },
+ { 1.4087733584990738, -0.19999999999999996, 1.3962634015954636, 0.0 },
+ { 1.5868678474541660, -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
+// mean(f - f_GSL): -4.4408920985006264e-17
+// variance(f - f_GSL): 2.4347558803117648e-34
+// stddev(f - f_GSL): 1.5603704304785339e-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.17454173353063659, -0.099999999999999978, 0.17453292519943295, 0.0 },
+ { 0.34913506721468091, -0.099999999999999978, 0.34906585039886590, 0.0 },
+ { 0.52382550016538942, -0.099999999999999978, 0.52359877559829882, 0.0 },
+ { 0.69864700854177020, -0.099999999999999978, 0.69813170079773179, 0.0 },
+ { 0.87361792586964870, -0.099999999999999978, 0.87266462599716477, 0.0 },
+ { 1.0487386319621683, -0.099999999999999978, 1.0471975511965976, 0.0 },
+ { 1.2239913752078757, -0.099999999999999978, 1.2217304763960306, 0.0 },
+ { 1.3993423113684049, -0.099999999999999978, 1.3962634015954636, 0.0 },
+ { 1.5747455615173562, -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
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 7.4564398834547797e-34
+// stddev(f - f_GSL): 2.7306482533374340e-17
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.17453292519943292, 0.0000000000000000, 0.17453292519943295, 0.0 },
+ { 0.34906585039886584, 0.0000000000000000, 0.34906585039886590, 0.0 },
+ { 0.52359877559829870, 0.0000000000000000, 0.52359877559829882, 0.0 },
+ { 0.69813170079773168, 0.0000000000000000, 0.69813170079773179, 0.0 },
+ { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477, 0.0 },
+ { 1.0471975511965974, 0.0000000000000000, 1.0471975511965976, 0.0 },
+ { 1.2217304763960304, 0.0000000000000000, 1.2217304763960306, 0.0 },
+ { 1.3962634015954631, 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
+// mean(f - f_GSL): -4.4408920985006264e-17
+// variance(f - f_GSL): 2.4347558803117648e-34
+// stddev(f - f_GSL): 1.5603704304785339e-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.17454173353063659, 0.10000000000000009, 0.17453292519943295, 0.0 },
+ { 0.34913506721468091, 0.10000000000000009, 0.34906585039886590, 0.0 },
+ { 0.52382550016538942, 0.10000000000000009, 0.52359877559829882, 0.0 },
+ { 0.69864700854177020, 0.10000000000000009, 0.69813170079773179, 0.0 },
+ { 0.87361792586964870, 0.10000000000000009, 0.87266462599716477, 0.0 },
+ { 1.0487386319621683, 0.10000000000000009, 1.0471975511965976, 0.0 },
+ { 1.2239913752078757, 0.10000000000000009, 1.2217304763960306, 0.0 },
+ { 1.3993423113684049, 0.10000000000000009, 1.3962634015954636, 0.0 },
+ { 1.5747455615173562, 0.10000000000000009, 1.5707963267948966, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996.
+// Test data for k=0.20000000000000018.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
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.17456817290292809, 0.20000000000000018, 0.17453292519943295, 0.0 },
+ { 0.34934315932086801, 0.20000000000000018, 0.34906585039886590, 0.0 },
+ { 0.52450880529443988, 0.20000000000000018, 0.52359877559829882, 0.0 },
+ { 0.70020491009844876, 0.20000000000000018, 0.69813170079773179, 0.0 },
+ { 0.87651006649967955, 0.20000000000000018, 0.87266462599716477, 0.0 },
+ { 1.0534305870298994, 0.20000000000000018, 1.0471975511965976, 0.0 },
+ { 1.2308975521670784, 0.20000000000000018, 1.2217304763960306, 0.0 },
+ { 1.4087733584990738, 0.20000000000000018, 1.3962634015954636, 0.0 },
+ { 1.5868678474541660, 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|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// mean(f - f_GSL): -3.3306690738754695e-17
+// variance(f - f_GSL): 2.0832380000917539e-32
+// stddev(f - f_GSL): 1.4433426481926437e-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.34969146102798415, 0.30000000000000004, 0.34906585039886590, 0.0 },
+ { 0.52565822873726320, 0.30000000000000004, 0.52359877559829882, 0.0 },
+ { 0.70284226512408532, 0.30000000000000004, 0.69813170079773179, 0.0 },
+ { 0.88144139195111182, 0.30000000000000004, 0.87266462599716477, 0.0 },
+ { 1.0614897067260520, 0.30000000000000004, 1.0471975511965976, 0.0 },
+ { 1.2428416824174218, 0.30000000000000004, 1.2217304763960306, 0.0 },
+ { 1.4251795877015927, 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_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.0617918857203532e-16
+// mean(f - f_GSL): -1.1102230246251566e-17
+// variance(f - f_GSL): 5.2971157621032829e-32
+// stddev(f - f_GSL): 2.3015463849558374e-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.52729015917508737, 0.40000000000000013, 0.52359877559829882, 0.0 },
+ { 0.70662374407341244, 0.40000000000000013, 0.69813170079773179, 0.0 },
+ { 0.88859210497602170, 0.40000000000000013, 0.87266462599716477, 0.0 },
+ { 1.0733136290471379, 0.40000000000000013, 1.0471975511965976, 0.0 },
+ { 1.2605612170157061, 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_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 3.9515567229356899e-16
+// mean(f - f_GSL): -5.8286708792820721e-17
+// variance(f - f_GSL): 4.5614580771731464e-32
+// stddev(f - f_GSL): 2.1357570267174931e-16
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.35081868470101585, 0.50000000000000000, 0.34906585039886590, 0.0 },
+ { 0.52942862705190574, 0.50000000000000000, 0.52359877559829882, 0.0 },
+ { 0.71164727562630314, 0.50000000000000000, 0.69813170079773179, 0.0 },
+ { 0.89824523594227768, 0.50000000000000000, 0.87266462599716477, 0.0 },
+ { 1.0895506700518851, 0.50000000000000000, 1.0471975511965976, 0.0 },
+ { 1.2853005857432931, 0.50000000000000000, 1.2217304763960306, 0.0 },
+ { 1.4845545520549484, 0.50000000000000000, 1.3962634015954636, 0.0 },
+ { 1.6857503548125963, 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
+// mean(f - f_GSL): 8.0491169285323847e-17
+// variance(f - f_GSL): 7.9985534974304465e-34
+// stddev(f - f_GSL): 2.8281714052423424e-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.35160509865544326, 0.60000000000000009, 0.34906585039886590, 0.0 },
+ { 0.53210652578446138, 0.60000000000000009, 0.52359877559829882, 0.0 },
+ { 0.71805304664485659, 0.60000000000000009, 0.69813170079773179, 0.0 },
+ { 0.91082759030195970, 0.60000000000000009, 0.87266462599716477, 0.0 },
+ { 1.1112333229323361, 0.60000000000000009, 1.0471975511965976, 0.0 },
+ { 1.3191461190365270, 0.60000000000000009, 1.2217304763960306, 0.0 },
+ { 1.5332022105084775, 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_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.5425633303580579e-16
+// mean(f - f_GSL): 3.3306690738754695e-17
+// variance(f - f_GSL): 2.8136647641852830e-32
+// stddev(f - f_GSL): 1.6773982127644239e-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.35254687535677925, 0.70000000000000018, 0.34906585039886590, 0.0 },
+ { 0.53536740275997119, 0.70000000000000018, 0.52359877559829882, 0.0 },
+ { 0.72603797651684454, 0.70000000000000018, 0.69813170079773179, 0.0 },
+ { 0.92698296348313458, 0.70000000000000018, 0.87266462599716477, 0.0 },
+ { 1.1400447527693316, 0.70000000000000018, 1.0471975511965976, 0.0 },
+ { 1.3657668117194073, 0.70000000000000018, 1.2217304763960306, 0.0 },
+ { 1.6024686895959159, 0.70000000000000018, 1.3962634015954636, 0.0 },
+ { 1.8456939983747238, 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
+// mean(f - f_GSL): 7.2164496600635178e-17
+// variance(f - f_GSL): 3.2903443138775707e-32
+// stddev(f - f_GSL): 1.8139306254312956e-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.35365068839779390, 0.80000000000000004, 0.34906585039886590, 0.0 },
+ { 0.53926804409084550, 0.80000000000000004, 0.52359877559829882, 0.0 },
+ { 0.73587926028070361, 0.80000000000000004, 0.69813170079773179, 0.0 },
+ { 0.94770942970071170, 0.80000000000000004, 0.87266462599716477, 0.0 },
+ { 1.1789022995388236, 0.80000000000000004, 1.0471975511965976, 0.0 },
+ { 1.4323027881876009, 0.80000000000000004, 1.2217304763960306, 0.0 },
+ { 1.7069629739121674, 0.80000000000000004, 1.3962634015954636, 0.0 },
+ { 1.9953027776647296, 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_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.4173361898887480e-16
+// mean(f - f_GSL): -1.2490009027033011e-16
+// variance(f - f_GSL): 1.2577986920751208e-32
+// stddev(f - f_GSL): 1.1215162469064461e-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.17525427376115024, 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.97463898451966480, 0.90000000000000013, 0.87266462599716477, 0.0 },
+ { 1.2334463254523440, 0.90000000000000013, 1.0471975511965976, 0.0 },
+ { 1.5355247765594919, 0.90000000000000013, 1.2217304763960306, 0.0 },
+ { 1.8882928567775128, 0.90000000000000013, 1.3962634015954636, 0.0 },
+ { 2.2805491384227712, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc b/libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc
index b49a4cc61a5..2de055c818a 100644
--- a/libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/12_ellint_2/check_value.cc
@@ -41,384 +41,441 @@
// Test data for k=-0.90000000000000002.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 6.6116483711056737e-16
+// mean(f - f_GSL): 4.1633363423443370e-17
+// variance(f - f_GSL): 2.1399221604302622e-34
+// stddev(f - f_GSL): 1.4628472785736255e-17
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.17381690606167960, -0.90000000000000002, 0.17453292519943295, 0.0 },
+ { 0.34337919186972055, -0.90000000000000002, 0.34906585039886590, 0.0 },
+ { 0.50464268659856326, -0.90000000000000002, 0.52359877559829882, 0.0 },
+ { 0.65400003842368570, -0.90000000000000002, 0.69813170079773179, 0.0 },
+ { 0.78854928419904646, -0.90000000000000002, 0.87266462599716477, 0.0 },
+ { 0.90645698626315396, -0.90000000000000002, 1.0471975511965976, 0.0 },
+ { 1.0075154899135925, -0.90000000000000002, 1.2217304763960306, 0.0 },
+ { 1.0940135583194068, -0.90000000000000002, 1.3962634015954636, 0.0 },
+ { 1.1716970527816140, -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
+// mean(f - f_GSL): 1.0547118733938987e-16
+// variance(f - f_GSL): 1.4155822860375120e-32
+// stddev(f - f_GSL): 1.1897824532398819e-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.34458685226969316, -0.80000000000000004, 0.34906585039886590, 0.0 },
+ { 0.50872923654502433, -0.80000000000000004, 0.52359877559829882, 0.0 },
+ { 0.66372016539176215, -0.80000000000000004, 0.69813170079773179, 0.0 },
+ { 0.80760344410167406, -0.80000000000000004, 0.87266462599716477, 0.0 },
+ { 0.93945480372495049, -0.80000000000000004, 1.0471975511965976, 0.0 },
+ { 1.0597473310395036, -0.80000000000000004, 1.2217304763960306, 0.0 },
+ { 1.1706981862452361, -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
+// mean(f - f_GSL): 2.2204460492503132e-17
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 7.0216669371534022e-17
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.17410041242702542, -0.69999999999999996, 0.17453292519943295, 0.0 },
+ { 0.34564605085764760, -0.69999999999999996, 0.34906585039886590, 0.0 },
+ { 0.51228495693314646, -0.69999999999999996, 0.52359877559829882, 0.0 },
+ { 0.67207654098799530, -0.69999999999999996, 0.69813170079773179, 0.0 },
+ { 0.82370932631556515, -0.69999999999999996, 0.87266462599716477, 0.0 },
+ { 0.96672313309452795, -0.69999999999999996, 1.0471975511965976, 0.0 },
+ { 1.1017090644949503, -0.69999999999999996, 1.2217304763960306, 0.0 },
+ { 1.2304180097292914, -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
+// mean(f - f_GSL): 6.9388939039072284e-17
+// variance(f - f_GSL): 1.0485618586108284e-32
+// stddev(f - f_GSL): 1.0239930950015378e-16
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.34655927787174101, -0.59999999999999998, 0.34906585039886590, 0.0 },
+ { 0.51533034538432143, -0.59999999999999998, 0.52359877559829882, 0.0 },
+ { 0.67916550597453018, -0.59999999999999998, 0.69813170079773179, 0.0 },
+ { 0.83720218180349870, -0.59999999999999998, 0.87266462599716477, 0.0 },
+ { 0.98922159354937755, -0.59999999999999998, 1.0471975511965976, 0.0 },
+ { 1.1357478470419360, -0.59999999999999998, 1.2217304763960306, 0.0 },
+ { 1.2780617372844056, -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
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
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.17431249677315910, -0.50000000000000000, 0.17453292519943295, 0.0 },
+ { 0.34732862537770803, -0.50000000000000000, 0.34906585039886590, 0.0 },
+ { 0.51788193485993794, -0.50000000000000000, 0.52359877559829882, 0.0 },
+ { 0.68506022954164536, -0.50000000000000000, 0.69813170079773179, 0.0 },
+ { 0.84831662803347196, -0.50000000000000000, 0.87266462599716477, 0.0 },
+ { 1.0075555551444717, -0.50000000000000000, 1.0471975511965976, 0.0 },
+ { 1.1631768599287300, -0.50000000000000000, 1.2217304763960306, 0.0 },
+ { 1.3160584048772543, -0.50000000000000000, 1.3962634015954636, 0.0 },
+ { 1.4674622093394274, -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_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.8978277272530773e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 7.2449204663526958e-32
+// stddev(f - f_GSL): 2.6916389925754710e-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.68981638464431538, -0.39999999999999991, 0.69813170079773179, 0.0 },
+ { 0.85722088859936041, -0.39999999999999991, 0.87266462599716477, 0.0 },
+ { 1.0221301327876993, -0.39999999999999991, 1.0471975511965976, 0.0 },
+ { 1.1848138019818373, -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.
+// Test data for k=-0.29999999999999993.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.3860540218057383e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-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.34844223535713464, -0.29999999999999993, 0.34906585039886590, 0.0 },
+ { 0.52155353877411770, -0.29999999999999993, 0.52359877559829882, 0.0 },
+ { 0.69347584418369879, -0.29999999999999993, 0.69813170079773179, 0.0 },
+ { 0.86403609928237668, -0.29999999999999993, 0.87266462599716477, 0.0 },
+ { 1.0332234514065408, -0.29999999999999993, 1.0471975511965976, 0.0 },
+ { 1.2011943182068923, -0.29999999999999993, 1.2217304763960306, 0.0 },
+ { 1.3682566113689623, -0.29999999999999993, 1.3962634015954636, 0.0 },
+ { 1.5348334649232491, -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
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-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.17449769027652812, -0.19999999999999996, 0.17453292519943295, 0.0 },
+ { 0.34878893400762095, -0.19999999999999996, 0.34906585039886590, 0.0 },
+ { 0.52269152856057410, -0.19999999999999996, 0.52359877559829882, 0.0 },
+ { 0.69606913360157563, -0.19999999999999996, 0.69813170079773179, 0.0 },
+ { 0.86884782374863356, -0.19999999999999996, 0.87266462599716477, 0.0 },
+ { 1.0410255369689567, -0.19999999999999996, 1.0471975511965976, 0.0 },
+ { 1.2126730391631360, -0.19999999999999996, 1.2217304763960306, 0.0 },
+ { 1.3839259540325153, -0.19999999999999996, 1.3962634015954636, 0.0 },
+ { 1.5549685462425291, -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
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
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.17452411766649939, -0.099999999999999978, 0.17453292519943295, 0.0 },
+ { 0.34899665805442404, -0.099999999999999978, 0.34906585039886590, 0.0 },
+ { 0.52337222400508776, -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.2194762899272025, -0.099999999999999978, 1.2217304763960306, 0.0 },
+ { 1.3931950229892744, -0.099999999999999978, 1.3962634015954636, 0.0 },
+ { 1.5668619420216685, -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
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 7.4564398834547797e-34
+// stddev(f - f_GSL): 2.7306482533374340e-17
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.17453292519943292, 0.0000000000000000, 0.17453292519943295, 0.0 },
+ { 0.34906585039886584, 0.0000000000000000, 0.34906585039886590, 0.0 },
+ { 0.52359877559829870, 0.0000000000000000, 0.52359877559829882, 0.0 },
+ { 0.69813170079773168, 0.0000000000000000, 0.69813170079773179, 0.0 },
+ { 0.87266462599716477, 0.0000000000000000, 0.87266462599716477, 0.0 },
+ { 1.0471975511965974, 0.0000000000000000, 1.0471975511965976, 0.0 },
+ { 1.2217304763960304, 0.0000000000000000, 1.2217304763960306, 0.0 },
+ { 1.3962634015954631, 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
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
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.17452411766649939, 0.10000000000000009, 0.17453292519943295, 0.0 },
+ { 0.34899665805442404, 0.10000000000000009, 0.34906585039886590, 0.0 },
+ { 0.52337222400508776, 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.2194762899272025, 0.10000000000000009, 1.2217304763960306, 0.0 },
+ { 1.3931950229892744, 0.10000000000000009, 1.3962634015954636, 0.0 },
+ { 1.5668619420216685, 0.10000000000000009, 1.5707963267948966, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996.
+// Test data for k=0.20000000000000018.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2658819988515356e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-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.17449769027652812, 0.20000000000000018, 0.17453292519943295, 0.0 },
+ { 0.34878893400762095, 0.20000000000000018, 0.34906585039886590, 0.0 },
+ { 0.52269152856057410, 0.20000000000000018, 0.52359877559829882, 0.0 },
+ { 0.69606913360157563, 0.20000000000000018, 0.69813170079773179, 0.0 },
+ { 0.86884782374863356, 0.20000000000000018, 0.87266462599716477, 0.0 },
+ { 1.0410255369689567, 0.20000000000000018, 1.0471975511965976, 0.0 },
+ { 1.2126730391631360, 0.20000000000000018, 1.2217304763960306, 0.0 },
+ { 1.3839259540325151, 0.20000000000000018, 1.3962634015954636, 0.0 },
+ { 1.5549685462425289, 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
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-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.34844223535713464, 0.30000000000000004, 0.34906585039886590, 0.0 },
+ { 0.52155353877411770, 0.30000000000000004, 0.52359877559829882, 0.0 },
+ { 0.69347584418369879, 0.30000000000000004, 0.69813170079773179, 0.0 },
+ { 0.86403609928237668, 0.30000000000000004, 0.87266462599716477, 0.0 },
+ { 1.0332234514065408, 0.30000000000000004, 1.0471975511965976, 0.0 },
+ { 1.2011943182068923, 0.30000000000000004, 1.2217304763960306, 0.0 },
+ { 1.3682566113689623, 0.30000000000000004, 1.3962634015954636, 0.0 },
+ { 1.5348334649232491, 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_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.4233707954398090e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 3.6536555428928420e-32
+// stddev(f - f_GSL): 1.9114537773362040e-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.85722088859936041, 0.40000000000000013, 0.87266462599716477, 0.0 },
+ { 1.0221301327876993, 0.40000000000000013, 1.0471975511965976, 0.0 },
+ { 1.1848138019818371, 0.40000000000000013, 1.2217304763960306, 0.0 },
+ { 1.3458259266501533, 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
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
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.17431249677315910, 0.50000000000000000, 0.17453292519943295, 0.0 },
+ { 0.34732862537770803, 0.50000000000000000, 0.34906585039886590, 0.0 },
+ { 0.51788193485993794, 0.50000000000000000, 0.52359877559829882, 0.0 },
+ { 0.68506022954164536, 0.50000000000000000, 0.69813170079773179, 0.0 },
+ { 0.84831662803347196, 0.50000000000000000, 0.87266462599716477, 0.0 },
+ { 1.0075555551444717, 0.50000000000000000, 1.0471975511965976, 0.0 },
+ { 1.1631768599287300, 0.50000000000000000, 1.2217304763960306, 0.0 },
+ { 1.3160584048772543, 0.50000000000000000, 1.3962634015954636, 0.0 },
+ { 1.4674622093394274, 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
+// mean(f - f_GSL): 3.6082248300317589e-17
+// variance(f - f_GSL): 2.8464769039785474e-32
+// stddev(f - f_GSL): 1.6871505279549146e-16
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.34655927787174101, 0.60000000000000009, 0.34906585039886590, 0.0 },
+ { 0.51533034538432143, 0.60000000000000009, 0.52359877559829882, 0.0 },
+ { 0.67916550597453018, 0.60000000000000009, 0.69813170079773179, 0.0 },
+ { 0.83720218180349870, 0.60000000000000009, 0.87266462599716477, 0.0 },
+ { 0.98922159354937744, 0.60000000000000009, 1.0471975511965976, 0.0 },
+ { 1.1357478470419360, 0.60000000000000009, 1.2217304763960306, 0.0 },
+ { 1.2780617372844056, 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_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 7.2185095851737144e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-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.51228495693314646, 0.70000000000000018, 0.52359877559829882, 0.0 },
+ { 0.67207654098799519, 0.70000000000000018, 0.69813170079773179, 0.0 },
+ { 0.82370932631556504, 0.70000000000000018, 0.87266462599716477, 0.0 },
+ { 0.96672313309452784, 0.70000000000000018, 1.0471975511965976, 0.0 },
+ { 1.1017090644949503, 0.70000000000000018, 1.2217304763960306, 0.0 },
+ { 1.2304180097292912, 0.70000000000000018, 1.3962634015954636, 0.0 },
+ { 1.3556611355719554, 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
+// mean(f - f_GSL): 1.0547118733938987e-16
+// variance(f - f_GSL): 1.4155822860375120e-32
+// stddev(f - f_GSL): 1.1897824532398819e-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.34458685226969316, 0.80000000000000004, 0.34906585039886590, 0.0 },
+ { 0.50872923654502433, 0.80000000000000004, 0.52359877559829882, 0.0 },
+ { 0.66372016539176215, 0.80000000000000004, 0.69813170079773179, 0.0 },
+ { 0.80760344410167406, 0.80000000000000004, 0.87266462599716477, 0.0 },
+ { 0.93945480372495049, 0.80000000000000004, 1.0471975511965976, 0.0 },
+ { 1.0597473310395036, 0.80000000000000004, 1.2217304763960306, 0.0 },
+ { 1.1706981862452361, 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.
+// Test data for k=0.90000000000000013.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7901367831880493e-16
+// max(|f - f_GSL| / |f_GSL|): 4.4000361210359694e-16
+// mean(f - f_GSL): -1.1379786002407854e-16
+// variance(f - f_GSL): 1.3468194539490196e-32
+// stddev(f - f_GSL): 1.1605255076684095e-16
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.17381690606167960, 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.78854928419904657, 0.90000000000000013, 0.87266462599716477, 0.0 },
+ { 0.90645698626315396, 0.90000000000000013, 1.0471975511965976, 0.0 },
+ { 1.0075154899135930, 0.90000000000000013, 1.2217304763960306, 0.0 },
+ { 1.0940135583194071, 0.90000000000000013, 1.3962634015954636, 0.0 },
+ { 1.1716970527816144, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc b/libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc
index d806d4880f0..0455b3e8316 100644
--- a/libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/13_ellint_3/check_value.cc
@@ -41,5534 +41,6104 @@
// Test data for k=-0.90000000000000002, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 2.9686139313362077e-16
+// mean(f - f_GSL): 1.9428902930940238e-17
+// variance(f - f_GSL): 4.6602749271592373e-35
+// stddev(f - f_GSL): 6.8266206333435850e-18
const testcase_ellint_3<double>
data001[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17525427376115024, -0.90000000000000002, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35492464591297446, -0.90000000000000002, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.54388221416157112, -0.90000000000000002, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.74797400423532490, -0.90000000000000002, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.97463898451966458, -0.90000000000000002, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.2334463254523440, -0.90000000000000002, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.5355247765594913, -0.90000000000000002, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.8882928567775121, -0.90000000000000002, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 2.2805491384227703, -0.90000000000000002, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for k=-0.90000000000000002, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.0141810743801079e-16
+// mean(f - f_GSL): -2.7755575615628915e-18
+// variance(f - f_GSL): 9.5107651574678312e-37
+// stddev(f - f_GSL): 9.7523151904908366e-19
const testcase_ellint_3<double>
data002[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17507714233254656, -0.90000000000000002, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35350932904326521, -0.90000000000000002, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53911129989870976, -0.90000000000000002, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.73666644254508395, -0.90000000000000002, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.95250736612100195, -0.90000000000000002, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1950199550905594, -0.90000000000000002, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.4741687286340850, -0.90000000000000002, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.7968678183506057, -0.90000000000000002, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 2.1537868513875287, -0.90000000000000002, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for k=-0.90000000000000002, nu=0.20000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.0588292817405780e-16
+// mean(f - f_GSL): -2.7755575615628915e-18
+// variance(f - f_GSL): 9.5107651574678312e-37
+// stddev(f - f_GSL): 9.7523151904908366e-19
const testcase_ellint_3<double>
data003[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17490065089140927, -0.90000000000000002, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35211377590661436, -0.90000000000000002, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53448220334204100, -0.90000000000000002, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.72591368943179579, -0.90000000000000002, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.93192539780038763, -0.90000000000000002, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1600809679692683, -0.90000000000000002, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.4195407225882510, -0.90000000000000002, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.7168966476424525, -0.90000000000000002, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 2.0443194576468890, -0.90000000000000002, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
-// Test data for k=-0.90000000000000002, nu=0.29999999999999999.
+// Test data for k=-0.90000000000000002, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.2403611223075570e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 1.1508025840536076e-34
+// stddev(f - f_GSL): 1.0727546709539920e-17
const testcase_ellint_3<double>
data004[10] =
{
- { 0.0000000000000000, -0.90000000000000002, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17472479532647531, -0.90000000000000002, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.35073750187374114, -0.90000000000000002, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.52998766129466957, -0.90000000000000002, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.71566993548699553, -0.90000000000000002, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.91271517762560195, -0.90000000000000002, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.1281241199843370, -0.90000000000000002, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.3704929576917451, -0.90000000000000002, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.6461981511487713, -0.90000000000000002, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.9486280260314426, -0.90000000000000002, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.90000000000000002, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17472479532647531, -0.90000000000000002, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.35073750187374114, -0.90000000000000002, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.52998766129466957, -0.90000000000000002, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.71566993548699553, -0.90000000000000002, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.91271517762560184, -0.90000000000000002, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.1281241199843370, -0.90000000000000002, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.3704929576917451, -0.90000000000000002, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.6461981511487713, -0.90000000000000002, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.9486280260314426, -0.90000000000000002, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for k=-0.90000000000000002, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3487482375512111e-16
+// mean(f - f_GSL): -2.7755575615628915e-18
+// variance(f - f_GSL): 5.9356685347756733e-33
+// stddev(f - f_GSL): 7.7043290004877603e-17
const testcase_ellint_3<double>
data005[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17454957156468837, -0.90000000000000002, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34938003933330430, -0.90000000000000002, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52562093533067433, -0.90000000000000002, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70589461324915670, -0.90000000000000002, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.89472658511942849, -0.90000000000000002, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0987419542323440, -0.90000000000000002, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3261349565496303, -0.90000000000000002, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5831293909853765, -0.90000000000000002, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.8641114227238349, -0.90000000000000002, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for k=-0.90000000000000002, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.4538944656036724e-16
+// mean(f - f_GSL): 8.3266726846886737e-18
+// variance(f - f_GSL): 8.5596886417210486e-36
+// stddev(f - f_GSL): 2.9256945571472508e-18
const testcase_ellint_3<double>
data006[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17437497557073334, -0.90000000000000002, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34804093691586013, -0.90000000000000002, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52137576320372891, -0.90000000000000002, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69655163996912262, -0.90000000000000002, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87783188683054236, -0.90000000000000002, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0716015959755185, -0.90000000000000002, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2857636916026749, -0.90000000000000002, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5264263913252363, -0.90000000000000002, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.7888013241937861, -0.90000000000000002, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
-// Test data for k=-0.90000000000000002, nu=0.59999999999999998.
+// Test data for k=-0.90000000000000002, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5560830683344639e-16
+// mean(f - f_GSL): 1.9428902930940238e-17
+// variance(f - f_GSL): 4.6602749271592373e-35
+// stddev(f - f_GSL): 6.8266206333435850e-18
const testcase_ellint_3<double>
data007[10] =
{
- { 0.0000000000000000, -0.90000000000000002, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17420100334657812, -0.90000000000000002, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34671975876122157, -0.90000000000000002, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.51724631570707946, -0.90000000000000002, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.68760879113743023, -0.90000000000000002, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.86192157779698364, -0.90000000000000002, 0.59999999999999998,
- 0.87266462599716477 },
- { 1.0464279696166354, -0.90000000000000002, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.2488156247094007, -0.90000000000000002, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.4750988777188472, -0.90000000000000002, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.7211781128919523, -0.90000000000000002, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.90000000000000002, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17420100334657812, -0.90000000000000002, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34671975876122157, -0.90000000000000002, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.51724631570707946, -0.90000000000000002, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.68760879113743023, -0.90000000000000002, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.86192157779698364, -0.90000000000000002, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 1.0464279696166354, -0.90000000000000002, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.2488156247094007, -0.90000000000000002, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.4750988777188472, -0.90000000000000002, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.7211781128919523, -0.90000000000000002, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
-// Test data for k=-0.90000000000000002, nu=0.69999999999999996.
+// Test data for k=-0.90000000000000002, nu=0.70000000000000007.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 5.4833366769839281e-16
+// mean(f - f_GSL): 4.1633363423443370e-17
+// variance(f - f_GSL): 2.1399221604302622e-34
+// stddev(f - f_GSL): 1.4628472785736255e-17
const testcase_ellint_3<double>
data008[10] =
{
- { 0.0000000000000000, -0.90000000000000002, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17402765093102207, -0.90000000000000002, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34541608382635131, -0.90000000000000002, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.51322715827061682, -0.90000000000000002, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.67903717872440272, -0.90000000000000002, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.84690113601682671, -0.90000000000000002, 0.69999999999999996,
- 0.87266462599716477 },
- { 1.0229914311548418, -0.90000000000000002, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.2148329639709381, -0.90000000000000002, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.4283586501307803, -0.90000000000000002, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.6600480747670940, -0.90000000000000002, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.90000000000000002, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17402765093102207, -0.90000000000000002, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34541608382635131, -0.90000000000000002, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.51322715827061682, -0.90000000000000002, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.67903717872440272, -0.90000000000000002, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.84690113601682659, -0.90000000000000002, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 1.0229914311548416, -0.90000000000000002, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.2148329639709381, -0.90000000000000002, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.4283586501307801, -0.90000000000000002, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.6600480747670936, -0.90000000000000002, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
// Test data for k=-0.90000000000000002, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.7525301941362493e-16
+// mean(f - f_GSL): 1.9428902930940238e-17
+// variance(f - f_GSL): 4.6602749271592373e-35
+// stddev(f - f_GSL): 6.8266206333435850e-18
const testcase_ellint_3<double>
data009[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17385491439925146, -0.90000000000000002, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34412950523113928, -0.90000000000000002, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50931321668729590, -0.90000000000000002, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67081081392296327, -0.90000000000000002, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83268846097293259, -0.90000000000000002, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0010985015814027, -0.90000000000000002, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1834394045489680, -0.90000000000000002, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3855695891683186, -0.90000000000000002, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6044591960982202, -0.90000000000000002, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler009 = 2.5000000000000020e-13;
// Test data for k=-0.90000000000000002, nu=0.90000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.8471853989694167e-16
+// mean(f - f_GSL): -4.7184478546569152e-17
+// variance(f - f_GSL): 3.7748226909989825e-33
+// stddev(f - f_GSL): 6.1439585700092268e-17
const testcase_ellint_3<double>
data010[10] =
{
{ 0.0000000000000000, -0.90000000000000002, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17368278986240135, -0.90000000000000002, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34285962963961397, -0.90000000000000002, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50549974644993312, -0.90000000000000002, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66290623857720876, -0.90000000000000002, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.81921183128847175, -0.90000000000000002, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.98058481956066390, -0.90000000000000002, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1543223520473569, -0.90000000000000002, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3462119782292938, -0.90000000000000002, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5536420236310946, -0.90000000000000002, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler010 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1175183168766718e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data011[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17510154241338899, -0.80000000000000004, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35365068839779390, -0.80000000000000004, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53926804409084550, -0.80000000000000004, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.73587926028070361, -0.80000000000000004, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.94770942970071170, -0.80000000000000004, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1789022995388236, -0.80000000000000004, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.4323027881876009, -0.80000000000000004, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.7069629739121674, -0.80000000000000004, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.9953027776647296, -0.80000000000000004, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1537164503193145e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data012[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17492468824017163, -0.80000000000000004, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35224443521476911, -0.80000000000000004, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53456851853226950, -0.80000000000000004, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.72488875602364922, -0.80000000000000004, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.92661354274638952, -0.80000000000000004, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1432651144499075, -0.80000000000000004, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3774479927211429, -0.80000000000000004, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.6287092337196041, -0.80000000000000004, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.8910755418379521, -0.80000000000000004, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler012 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.20000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1894552974436829e-16
+// mean(f - f_GSL): 9.4368957093138303e-17
+// variance(f - f_GSL): 1.5099290763995930e-32
+// stddev(f - f_GSL): 1.2287917140018454e-16
const testcase_ellint_3<double>
data013[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17474847286224940, -0.80000000000000004, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35085779529084682, -0.80000000000000004, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53000829263059146, -0.80000000000000004, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71443466027453384, -0.80000000000000004, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.90698196872715420, -0.80000000000000004, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1108198200558579, -0.80000000000000004, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3284988909963957, -0.80000000000000004, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5600369318140328, -0.80000000000000004, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.8007226661734588, -0.80000000000000004, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler013 = 2.5000000000000020e-13;
-// Test data for k=-0.80000000000000004, nu=0.29999999999999999.
+// Test data for k=-0.80000000000000004, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2247517409029886e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data014[10] =
{
- { 0.0000000000000000, -0.80000000000000004, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17457289217669889, -0.80000000000000004, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34949028801501258, -0.80000000000000004, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.52558024362769307, -0.80000000000000004, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.70447281740094891, -0.80000000000000004, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.88864745641528986, -0.80000000000000004, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0811075819341462, -0.80000000000000004, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.2844589654082377, -0.80000000000000004, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.4991461361277847, -0.80000000000000004, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.7214611048717301, -0.80000000000000004, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.80000000000000004, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17457289217669889, -0.80000000000000004, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34949028801501258, -0.80000000000000004, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.52558024362769307, -0.80000000000000004, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.70447281740094891, -0.80000000000000004, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.88864745641528986, -0.80000000000000004, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0811075819341462, -0.80000000000000004, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.2844589654082377, -0.80000000000000004, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.4991461361277847, -0.80000000000000004, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.7214611048717301, -0.80000000000000004, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler014 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2596216594752862e-16
+// mean(f - f_GSL): 9.4368957093138303e-17
+// variance(f - f_GSL): 1.5099290763995930e-32
+// stddev(f - f_GSL): 1.2287917140018454e-16
const testcase_ellint_3<double>
data015[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17439794211872175, -0.80000000000000004, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34814144964568972, -0.80000000000000004, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52127776285273064, -0.80000000000000004, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69496411438966588, -0.80000000000000004, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87146878427509589, -0.80000000000000004, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0537579024937762, -0.80000000000000004, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2445534387922637, -0.80000000000000004, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4446769766361993, -0.80000000000000004, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6512267838651289, -0.80000000000000004, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler015 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2940800093915668e-16
+// mean(f - f_GSL): 7.2164496600635178e-17
+// variance(f - f_GSL): 6.4292772464482542e-34
+// stddev(f - f_GSL): 2.5356019495276173e-17
const testcase_ellint_3<double>
data016[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17422361866118044, -0.80000000000000004, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34681083254170475, -0.80000000000000004, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51709470815494440, -0.80000000000000004, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68587375344080237, -0.80000000000000004, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85532571852810624, -0.80000000000000004, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0284677391874903, -0.80000000000000004, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2081693942686225, -0.80000000000000004, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3955803006426311, -0.80000000000000004, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5884528947755532, -0.80000000000000004, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler016 = 2.5000000000000020e-13;
-// Test data for k=-0.80000000000000004, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3281408974056389e-16
+// Test data for k=-0.80000000000000004, nu=0.60000000000000009.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.9305555277657156e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3733544887383549e-33
+// stddev(f - f_GSL): 3.7058797723865178e-17
const testcase_ellint_3<double>
data017[10] =
{
- { 0.0000000000000000, -0.80000000000000004, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17404991781414089, -0.80000000000000004, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34549800443625167, -0.80000000000000004, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.51302536167001545, -0.80000000000000004, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.67717065003912236, -0.80000000000000004, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.84011512421134416, -0.80000000000000004, 0.59999999999999998,
- 0.87266462599716477 },
- { 1.0049863847088740, -0.80000000000000004, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.1748145941898920, -0.80000000000000004, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.3510319699755071, -0.80000000000000004, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.5319262547427865, -0.80000000000000004, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.80000000000000004, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17404991781414089, -0.80000000000000004, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34549800443625167, -0.80000000000000004, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.51302536167001545, -0.80000000000000004, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.67717065003912236, -0.80000000000000004, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.84011512421134416, -0.80000000000000004, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 1.0049863847088740, -0.80000000000000004, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.1748145941898918, -0.80000000000000004, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.3510319699755069, -0.80000000000000004, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.5319262547427863, -0.80000000000000004, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler017 = 2.5000000000000020e-13;
-// Test data for k=-0.80000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
+// Test data for k=-0.80000000000000004, nu=0.70000000000000007.
+// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3618176466061808e-16
+// mean(f - f_GSL): 7.2164496600635178e-17
+// variance(f - f_GSL): 6.4292772464482542e-34
+// stddev(f - f_GSL): 2.5356019495276173e-17
const testcase_ellint_3<double>
data018[10] =
{
- { 0.0000000000000000, -0.80000000000000004, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17387683562442199, -0.80000000000000004, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34420254775101611, -0.80000000000000004, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50906439222143673, -0.80000000000000004, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.66882693152688422, -0.80000000000000004, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.82574792844091316, -0.80000000000000004, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.98310431309490931, -0.80000000000000004, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.1440884535113258, -0.80000000000000004, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.3103743938952537, -0.80000000000000004, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.4806912324625332, -0.80000000000000004, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.80000000000000004, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17387683562442199, -0.80000000000000004, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34420254775101611, -0.80000000000000004, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50906439222143673, -0.80000000000000004, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.66882693152688422, -0.80000000000000004, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.82574792844091316, -0.80000000000000004, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.98310431309490931, -0.80000000000000004, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.1440884535113258, -0.80000000000000004, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.3103743938952535, -0.80000000000000004, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.4806912324625330, -0.80000000000000004, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler018 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3951228558314112e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data019[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17370436817515203, -0.80000000000000004, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34292405894783395, -0.80000000000000004, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50520682176250076, -0.80000000000000004, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66081751679736178, -0.80000000000000004, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.81214672249355102, -0.80000000000000004, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.96264481387685552, -0.80000000000000004, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1156611352656258, -0.80000000000000004, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2730756225143889, -0.80000000000000004, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4339837018309471, -0.80000000000000004, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler019 = 2.5000000000000020e-13;
// Test data for k=-0.80000000000000004, nu=0.90000000000000002.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 4.4280684534289690e-16
+// mean(f - f_GSL): 3.8857805861880476e-17
+// variance(f - f_GSL): 1.8641099708636949e-34
+// stddev(f - f_GSL): 1.3653241266687170e-17
const testcase_ellint_3<double>
data020[10] =
{
{ 0.0000000000000000, -0.80000000000000004, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17353251158533151, -0.80000000000000004, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34166214791545768, -0.80000000000000004, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50144799535130569, -0.80000000000000004, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65311976193814425, -0.80000000000000004, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79924384892320866, -0.80000000000000004, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.94345762353365603, -0.80000000000000004, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0892582069219161, -0.80000000000000004, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2387000876610268, -0.80000000000000004, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3911845406776222, -0.80000000000000004, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler020 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.0000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.5930208052157665e-16
+// mean(f - f_GSL): 2.2204460492503132e-17
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 7.0216669371534022e-17
const testcase_ellint_3<double>
data021[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17496737466916723, -0.69999999999999996, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35254687535677925, -0.69999999999999996, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53536740275997119, -0.69999999999999996, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.72603797651684454, -0.69999999999999996, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.92698296348313458, -0.69999999999999996, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1400447527693316, -0.69999999999999996, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3657668117194073, -0.69999999999999996, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.6024686895959159, -0.69999999999999996, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.8456939983747236, -0.69999999999999996, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler021 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.10000000000000001.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.6735282577377367e-16
+// mean(f - f_GSL): 2.2204460492503132e-17
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 7.0216669371534022e-17
const testcase_ellint_3<double>
data022[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17479076384884684, -0.69999999999999996, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35114844900396364, -0.69999999999999996, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53072776947527001, -0.69999999999999996, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71530198262386235, -0.69999999999999996, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.90666760677828306, -0.69999999999999996, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1063366517438080, -0.69999999999999996, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3149477243092149, -0.69999999999999996, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5314886725038925, -0.69999999999999996, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.7528050171757608, -0.69999999999999996, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler022 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.20000000000000001.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.7517969287516802e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 6.0868897007794117e-33
+// stddev(f - f_GSL): 7.8018521523926690e-17
const testcase_ellint_3<double>
data023[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17461479077791475, -0.69999999999999996, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34976950621407538, -0.69999999999999996, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52622533231350177, -0.69999999999999996, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70508774017895215, -0.69999999999999996, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.88775302531730294, -0.69999999999999996, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0756195476149006, -0.69999999999999996, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2695349716654374, -0.69999999999999996, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4690814617070540, -0.69999999999999996, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6721098780092145, -0.69999999999999996, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler023 = 2.5000000000000020e-13;
-// Test data for k=-0.69999999999999996, nu=0.29999999999999999.
+// Test data for k=-0.69999999999999996, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.8280039841080712e-16
+// mean(f - f_GSL): 4.4408920985006264e-17
+// variance(f - f_GSL): 1.9721522630525296e-32
+// stddev(f - f_GSL): 1.4043333874306804e-16
const testcase_ellint_3<double>
data024[10] =
{
- { 0.0000000000000000, -0.69999999999999996, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17443945136076175, -0.69999999999999996, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34840956983535287, -0.69999999999999996, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.52185308551329168, -0.69999999999999996, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.69535240431168255, -0.69999999999999996, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.87007983473964923, -0.69999999999999996, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0474657975577066, -0.69999999999999996, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.2286225419931891, -0.69999999999999996, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.4136490671013271, -0.69999999999999996, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.6011813647733213, -0.69999999999999996, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.69999999999999996, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17443945136076175, -0.69999999999999996, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34840956983535287, -0.69999999999999996, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.52185308551329168, -0.69999999999999996, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.69535240431168255, -0.69999999999999996, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.87007983473964923, -0.69999999999999996, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0474657975577066, -0.69999999999999996, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.2286225419931891, -0.69999999999999996, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.4136490671013271, -0.69999999999999996, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.6011813647733213, -0.69999999999999996, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler024 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3472957053482092e-16
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 6.0868897007794117e-33
+// stddev(f - f_GSL): 7.8018521523926690e-17
const testcase_ellint_3<double>
data025[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17426474153983229, -0.69999999999999996, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34706817945773732, -0.69999999999999996, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51760452851738148, -0.69999999999999996, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68605801534722755, -0.69999999999999996, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85351339387296532, -0.69999999999999996, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0215297967969539, -0.69999999999999996, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1915051074460530, -0.69999999999999996, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3639821911744707, -0.69999999999999996, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5382162002954762, -0.69999999999999996, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler025 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.50000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.9748346743390620e-16
+// mean(f - f_GSL): 3.3306690738754695e-17
+// variance(f - f_GSL): 4.3977778088131252e-33
+// stddev(f - f_GSL): 6.6315743295337688e-17
const testcase_ellint_3<double>
data026[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17409065729516096, -0.69999999999999996, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34574489064986091, -0.69999999999999996, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51347361925579782, -0.69999999999999996, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67717079489579279, -0.69999999999999996, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83793902055292280, -0.69999999999999996, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99752863545289705, -0.69999999999999996, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1576240080401501, -0.69999999999999996, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3191464023923762, -0.69999999999999996, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4818433192178544, -0.69999999999999996, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler026 = 2.5000000000000020e-13;
-// Test data for k=-0.69999999999999996, nu=0.59999999999999998.
-// max(|f - f_GSL|): 3.3306690738754696e-16
+// Test data for k=-0.69999999999999996, nu=0.60000000000000009.
+// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.0457157538295173e-16
+// mean(f - f_GSL): 4.4408920985006264e-17
+// variance(f - f_GSL): 1.9721522630525296e-32
+// stddev(f - f_GSL): 1.4043333874306804e-16
const testcase_ellint_3<double>
data027[10] =
{
- { 0.0000000000000000, -0.69999999999999996, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17391719464391614, -0.69999999999999996, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34443927423869031, -0.69999999999999996, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50945473266486063, -0.69999999999999996, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.66866056326513812, -0.69999999999999996, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.82325830002337352, -0.69999999999999996, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.97522808245669368, -0.69999999999999996, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.1265300613705285, -0.69999999999999996, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.2784066076152001, -0.69999999999999996, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.4309994736080540, -0.69999999999999996, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.69999999999999996, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17391719464391614, -0.69999999999999996, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34443927423869031, -0.69999999999999996, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50945473266486063, -0.69999999999999996, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.66866056326513812, -0.69999999999999996, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.82325830002337352, -0.69999999999999996, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.97522808245669357, -0.69999999999999996, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.1265300613705285, -0.69999999999999996, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.2784066076152001, -0.69999999999999996, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.4309994736080538, -0.69999999999999996, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler027 = 2.5000000000000020e-13;
-// Test data for k=-0.69999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4867405596732161e-16
+// Test data for k=-0.69999999999999996, nu=0.70000000000000007.
+// max(|f - f_GSL|): 3.3306690738754696e-16
+// max(|f - f_GSL| / |f_GSL|): 4.1150554197549123e-16
+// mean(f - f_GSL): 2.2204460492503132e-17
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 7.0216669371534022e-17
const testcase_ellint_3<double>
data028[10] =
{
- { 0.0000000000000000, -0.69999999999999996, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17374434963995031, -0.69999999999999996, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34315091562900674, -0.69999999999999996, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50554262375653347, -0.69999999999999996, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.66050025406305801, -0.69999999999999996, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.80938620118847404, -0.69999999999999996, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.95443223855852144, -0.69999999999999996, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0978573207128304, -0.69999999999999996, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.2411754575007123, -0.69999999999999996, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.3848459188329196, -0.69999999999999996, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.69999999999999996, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17374434963995031, -0.69999999999999996, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34315091562900674, -0.69999999999999996, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50554262375653347, -0.69999999999999996, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.66050025406305801, -0.69999999999999996, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.80938620118847393, -0.69999999999999996, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.95443223855852133, -0.69999999999999996, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0978573207128304, -0.69999999999999996, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.2411754575007121, -0.69999999999999996, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.3848459188329196, -0.69999999999999996, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler028 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1829502028913879e-16
+// mean(f - f_GSL): 2.2204460492503132e-17
+// variance(f - f_GSL): 2.1973671819813678e-32
+// stddev(f - f_GSL): 1.4823519089546071e-16
const testcase_ellint_3<double>
data029[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17357211837335740, -0.69999999999999996, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34187941416012108, -0.69999999999999996, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50173239465478259, -0.69999999999999996, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65266550725988315, -0.69999999999999996, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79624879865249298, -0.69999999999999996, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.93497577043296920, -0.69999999999999996, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0713041566930750, -0.69999999999999996, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2069772023255654, -0.69999999999999996, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3427110650397531, -0.69999999999999996, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler029 = 2.5000000000000020e-13;
// Test data for k=-0.69999999999999996, nu=0.90000000000000002.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 4.2494869624129105e-16
+// mean(f - f_GSL): -2.2204460492503132e-17
+// variance(f - f_GSL): 4.9303806576313241e-33
+// stddev(f - f_GSL): 7.0216669371534022e-17
const testcase_ellint_3<double>
data030[10] =
{
{ 0.0000000000000000, -0.69999999999999996, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17340049697003637, -0.69999999999999996, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34062438249741556, -0.69999999999999996, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49801946510076867, -0.69999999999999996, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.64513432604750476, -0.69999999999999996, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.78378145487573758, -0.69999999999999996, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.91671799500854623, -0.69999999999999996, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0466193579463123, -0.69999999999999996, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1754218079199146, -0.69999999999999996, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3040500499695913, -0.69999999999999996, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler030 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 2.8964816695821429e-16
+// mean(f - f_GSL): 3.6082248300317589e-17
+// variance(f - f_GSL): 2.8464769039785474e-32
+// stddev(f - f_GSL): 1.6871505279549146e-16
const testcase_ellint_3<double>
data031[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17485154362988359, -0.59999999999999998, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35160509865544326, -0.59999999999999998, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53210652578446138, -0.59999999999999998, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71805304664485659, -0.59999999999999998, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.91082759030195970, -0.59999999999999998, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1112333229323361, -0.59999999999999998, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3191461190365270, -0.59999999999999998, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5332022105084773, -0.59999999999999998, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.7507538029157526, -0.59999999999999998, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler031 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 2.6674242225057385e-16
+// mean(f - f_GSL): 1.3877787807814457e-17
+// variance(f - f_GSL): 2.5893058141206173e-32
+// stddev(f - f_GSL): 1.6091320064309879e-16
const testcase_ellint_3<double>
data032[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17467514275022011, -0.59999999999999998, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35021333086258255, -0.59999999999999998, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52751664092962691, -0.59999999999999998, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70752126971957874, -0.59999999999999998, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.89111058756112871, -0.59999999999999998, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0789241202877768, -0.59999999999999998, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2710800210399946, -0.59999999999999998, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4669060574440276, -0.59999999999999998, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6648615773343014, -0.59999999999999998, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler032 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.20000000000000001.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 4.1891472451898755e-16
+// mean(f - f_GSL): 1.3877787807814457e-17
+// variance(f - f_GSL): 5.7088367857700656e-32
+// stddev(f - f_GSL): 2.3893172216702547e-16
const testcase_ellint_3<double>
data033[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17449937871800650, -0.59999999999999998, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34884093647346553, -0.59999999999999998, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52306221119844087, -0.59999999999999998, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69749955678982223, -0.59999999999999998, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87274610682416853, -0.59999999999999998, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0494620540750792, -0.59999999999999998, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2280847305507339, -0.59999999999999998, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4085436279696886, -0.59999999999999998, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5901418016279374, -0.59999999999999998, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler033 = 2.5000000000000020e-13;
-// Test data for k=-0.59999999999999998, nu=0.29999999999999999.
+// Test data for k=-0.59999999999999998, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 2.9132420715478757e-16
+// mean(f - f_GSL): 1.3877787807814457e-17
+// variance(f - f_GSL): 2.5893058141206173e-32
+// stddev(f - f_GSL): 1.6091320064309879e-16
const testcase_ellint_3<double>
data034[10] =
{
- { 0.0000000000000000, -0.59999999999999998, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17432424744393932, -0.59999999999999998, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34748744127146447, -0.59999999999999998, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51873632743924825, -0.59999999999999998, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.68794610396313116, -0.59999999999999998, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.85558070175468726, -0.59999999999999998, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0224416343605653, -0.59999999999999998, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1893144457936788, -0.59999999999999998, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.3566435377982575, -0.59999999999999998, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.5243814243493585, -0.59999999999999998, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.59999999999999998, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17432424744393932, -0.59999999999999998, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34748744127146447, -0.59999999999999998, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51873632743924825, -0.59999999999999998, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.68794610396313116, -0.59999999999999998, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.85558070175468726, -0.59999999999999998, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0224416343605653, -0.59999999999999998, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1893144457936788, -0.59999999999999998, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.3566435377982575, -0.59999999999999998, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.5243814243493585, -0.59999999999999998, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler034 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3897581541285558e-16
+// mean(f - f_GSL): 5.8286708792820721e-17
+// variance(f - f_GSL): 9.7019315371329348e-33
+// stddev(f - f_GSL): 9.8498383423957446e-17
const testcase_ellint_3<double>
data035[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17414974487670717, -0.59999999999999998, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34615238767335027, -0.59999999999999998, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51453257838108557, -0.59999999999999998, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67882386787534399, -0.59999999999999998, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83948470233173578, -0.59999999999999998, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99753496200073977, -0.59999999999999998, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1541101404388487, -0.59999999999999998, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3100911323398814, -0.59999999999999998, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4659345278069984, -0.59999999999999998, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler035 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5022138270566200e-16
+// mean(f - f_GSL): 3.6082248300317589e-17
+// variance(f - f_GSL): 2.8464769039785474e-32
+// stddev(f - f_GSL): 1.6871505279549146e-16
const testcase_ellint_3<double>
data036[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17397586700252807, -0.59999999999999998, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34483533397138516, -0.59999999999999998, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51044500461706477, -0.59999999999999998, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67009988034712664, -0.59999999999999998, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.82434762375735193, -0.59999999999999998, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.97447346702798998, -0.59999999999999998, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1219494000522143, -0.59999999999999998, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2680242605954484, -0.59999999999999998, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4135484285693078, -0.59999999999999998, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler036 = 2.5000000000000020e-13;
-// Test data for k=-0.59999999999999998, nu=0.59999999999999998.
+// Test data for k=-0.59999999999999998, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.2504224329684343e-16
+// max(|f - f_GSL| / |f_GSL|): 3.6111740878030499e-16
+// mean(f - f_GSL): 5.8286708792820721e-17
+// variance(f - f_GSL): 3.1158217732380362e-32
+// stddev(f - f_GSL): 1.7651690494788412e-16
const testcase_ellint_3<double>
data037[10] =
{
- { 0.0000000000000000, -0.59999999999999998, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17380260984469353, -0.59999999999999998, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34353585361777839, -0.59999999999999998, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50646805774321380, -0.59999999999999998, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.66174468108625506, -0.59999999999999998, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.81007462280278408, -0.59999999999999998, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.95303466945718729, -0.59999999999999998, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0924118588677505, -0.59999999999999998, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.2297640574847937, -0.59999999999999998, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.3662507535812816, -0.59999999999999998, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.59999999999999998, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17380260984469353, -0.59999999999999998, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34353585361777839, -0.59999999999999998, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50646805774321380, -0.59999999999999998, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.66174468108625506, -0.59999999999999998, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.81007462280278408, -0.59999999999999998, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.95303466945718718, -0.59999999999999998, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0924118588677503, -0.59999999999999998, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.2297640574847934, -0.59999999999999998, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.3662507535812816, -0.59999999999999998, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler037 = 2.5000000000000020e-13;
-// Test data for k=-0.59999999999999998, nu=0.69999999999999996.
+// Test data for k=-0.59999999999999998, nu=0.70000000000000007.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3559889697529752e-16
+// max(|f - f_GSL| / |f_GSL|): 3.7169504951068448e-16
+// mean(f - f_GSL): 2.4980018054066023e-17
+// variance(f - f_GSL): 2.7163696366243874e-32
+// stddev(f - f_GSL): 1.6481412671929513e-16
const testcase_ellint_3<double>
data038[10] =
{
- { 0.0000000000000000, -0.59999999999999998, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17362996946312007, -0.59999999999999998, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34225353454870588, -0.59999999999999998, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50259656397799524, -0.59999999999999998, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.65373184496628933, -0.59999999999999998, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.79658372884056439, -0.59999999999999998, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.93303240100245421, -0.59999999999999998, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0651547944716557, -0.59999999999999998, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1947676204853441, -0.59999999999999998, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.3232737468822813, -0.59999999999999998, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.59999999999999998, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17362996946312007, -0.59999999999999998, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34225353454870588, -0.59999999999999998, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50259656397799524, -0.59999999999999998, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.65373184496628933, -0.59999999999999998, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.79658372884056439, -0.59999999999999998, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.93303240100245421, -0.59999999999999998, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0651547944716557, -0.59999999999999998, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1947676204853439, -0.59999999999999998, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.3232737468822811, -0.59999999999999998, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler038 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.80000000000000004.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 5.1879494682720725e-16
+// mean(f - f_GSL): -2.4980018054066023e-17
+// variance(f - f_GSL): 5.0750393956764097e-32
+// stddev(f - f_GSL): 2.2527848090033830e-16
const testcase_ellint_3<double>
data039[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17345794195390685, -0.59999999999999998, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34098797854531027, -0.59999999999999998, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49882569168826213, -0.59999999999999998, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.64603758566475511, -0.59999999999999998, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.78380365594769730, -0.59999999999999998, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.91430946255611190, -0.59999999999999998, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0398955217270607, -0.59999999999999998, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1625948314277679, -0.59999999999999998, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2840021261752192, -0.59999999999999998, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler039 = 2.5000000000000020e-13;
// Test data for k=-0.59999999999999998, nu=0.90000000000000002.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.4768329326726447e-16
+// mean(f - f_GSL): 2.4980018054066023e-17
+// variance(f - f_GSL): 7.5334770812302692e-33
+// stddev(f - f_GSL): 8.6795605195368444e-17
const testcase_ellint_3<double>
data040[10] =
{
{ 0.0000000000000000, -0.59999999999999998, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17328652344890030, -0.59999999999999998, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33973880062929018, -0.59999999999999998, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49515092233122743, -0.59999999999999998, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.63864042139737043, -0.59999999999999998, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.77167205646538850, -0.59999999999999998, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.89673202848034383, -0.59999999999999998, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0163984492661304, -0.59999999999999998, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1328845785162431, -0.59999999999999998, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2479362973851875, -0.59999999999999998, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler040 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.1201497220602069e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data041[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17475385514035785, -0.50000000000000000, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35081868470101585, -0.50000000000000000, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52942862705190574, -0.50000000000000000, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71164727562630314, -0.50000000000000000, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.89824523594227768, -0.50000000000000000, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0895506700518851, -0.50000000000000000, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2853005857432931, -0.50000000000000000, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4845545520549484, -0.50000000000000000, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6857503548125963, -0.50000000000000000, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler041 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.10000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.1662857256911530e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data042[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17457763120814676, -0.50000000000000000, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34943246340849154, -0.50000000000000000, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52487937869610790, -0.50000000000000000, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70127785096388384, -0.50000000000000000, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87898815988624479, -0.50000000000000000, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0582764576094172, -0.50000000000000000, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2391936844060205, -0.50000000000000000, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4214793542995841, -0.50000000000000000, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6045524936084892, -0.50000000000000000, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler042 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.20000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.2114786773102175e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data043[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17440204336345433, -0.50000000000000000, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34806552388338824, -0.50000000000000000, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52046416757129810, -0.50000000000000000, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69140924550993865, -0.50000000000000000, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.86104678636125520, -0.50000000000000000, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0297439459053981, -0.50000000000000000, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1979214112912033, -0.50000000000000000, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3659033858648930, -0.50000000000000000, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5338490483665983, -0.50000000000000000, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler043 = 2.5000000000000020e-13;
-// Test data for k=-0.50000000000000000, nu=0.29999999999999999.
+// Test data for k=-0.50000000000000000, nu=0.30000000000000004.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.2557837230041312e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data044[10] =
{
- { 0.0000000000000000, -0.50000000000000000, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17422708752228896, -0.50000000000000000, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34671739434855858, -0.50000000000000000, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51617616305641878, -0.50000000000000000, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.68200047612545167, -0.50000000000000000, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.84427217869498372, -0.50000000000000000, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0035637821389782, -0.50000000000000000, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1606800483933111, -0.50000000000000000, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.3164407134643459, -0.50000000000000000, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.4715681939859637, -0.50000000000000000, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.50000000000000000, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17422708752228896, -0.50000000000000000, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34671739434855858, -0.50000000000000000, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51617616305641878, -0.50000000000000000, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.68200047612545167, -0.50000000000000000, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.84427217869498372, -0.50000000000000000, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0035637821389782, -0.50000000000000000, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1606800483933111, -0.50000000000000000, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.3164407134643459, -0.50000000000000000, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.4715681939859637, -0.50000000000000000, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler044 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.40000000000000002.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.2992508582900068e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data045[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17405275963859917, -0.50000000000000000, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34538761957029329, -0.50000000000000000, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51200902646603907, -0.50000000000000000, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67301522212868792, -0.50000000000000000, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.82853844466313320, -0.50000000000000000, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.97942097862681488, -0.50000000000000000, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1268429801220614, -0.50000000000000000, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2720406704533922, -0.50000000000000000, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4161679518465340, -0.50000000000000000, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler045 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.50000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.3419255755184137e-16
+// mean(f - f_GSL): 4.1633363423443370e-17
+// variance(f - f_GSL): 4.0182982790301585e-33
+// stddev(f - f_GSL): 6.3390048738190441e-17
const testcase_ellint_3<double>
data046[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17387905570381157, -0.50000000000000000, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34407576010465207, -0.50000000000000000, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50795686560160824, -0.50000000000000000, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66442115453330164, -0.50000000000000000, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.81373829119355345, -0.50000000000000000, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.95705743313235825, -0.50000000000000000, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0959131991362554, -0.50000000000000000, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2318900529754597, -0.50000000000000000, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3664739530045971, -0.50000000000000000, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler046 = 2.5000000000000020e-13;
-// Test data for k=-0.50000000000000000, nu=0.59999999999999998.
-// max(|f - f_GSL|): 2.2204460492503131e-16
+// Test data for k=-0.50000000000000000, nu=0.60000000000000009.
+// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3838494104749599e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 2.1114849726094331e-32
+// stddev(f - f_GSL): 1.4530949633831345e-16
const testcase_ellint_3<double>
data047[10] =
{
- { 0.0000000000000000, -0.50000000000000000, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17370597174637581, -0.50000000000000000, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34278139158591414, -0.50000000000000000, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50401419439302708, -0.50000000000000000, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.65618938076167210, -0.50000000000000000, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.79977959248855424, -0.50000000000000000, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.93625925190753545, -0.50000000000000000, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0674905658379708, -0.50000000000000000, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1953481298023050, -0.50000000000000000, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.3215740290190876, -0.50000000000000000, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.50000000000000000, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17370597174637581, -0.50000000000000000, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34278139158591414, -0.50000000000000000, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50401419439302708, -0.50000000000000000, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.65618938076167210, -0.50000000000000000, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.79977959248855424, -0.50000000000000000, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.93625925190753534, -0.50000000000000000, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0674905658379708, -0.50000000000000000, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1953481298023048, -0.50000000000000000, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.3215740290190874, -0.50000000000000000, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler047 = 2.5000000000000020e-13;
-// Test data for k=-0.50000000000000000, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4250604066951477e-16
+// Test data for k=-0.50000000000000000, nu=0.70000000000000007.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.4674219826132847e-16
+// mean(f - f_GSL): 7.4940054162198071e-17
+// variance(f - f_GSL): 1.6823592487044846e-32
+// stddev(f - f_GSL): 1.2970579203352812e-16
const testcase_ellint_3<double>
data048[10] =
{
- { 0.0000000000000000, -0.50000000000000000, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17353350383131641, -0.50000000000000000, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34150410405436771, -0.50000000000000000, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50017589696443487, -0.50000000000000000, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.64829398188419951, -0.50000000000000000, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.78658270782402073, -0.50000000000000000, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.91684738336675053, -0.50000000000000000, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0412486789555935, -0.50000000000000000, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1619021847612001, -0.50000000000000000, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2807475181182502, -0.50000000000000000, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.50000000000000000, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17353350383131641, -0.50000000000000000, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34150410405436771, -0.50000000000000000, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50017589696443476, -0.50000000000000000, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.64829398188419951, -0.50000000000000000, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.78658270782402062, -0.50000000000000000, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.91684738336675053, -0.50000000000000000, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0412486789555933, -0.50000000000000000, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1619021847612001, -0.50000000000000000, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2807475181182499, -0.50000000000000000, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler048 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5715240651179632e-16
+// mean(f - f_GSL): 1.9428902930940238e-17
+// variance(f - f_GSL): 2.2263750157116445e-32
+// stddev(f - f_GSL): 1.4921042241450980e-16
const testcase_ellint_3<double>
data049[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17336164805979126, -0.50000000000000000, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34024350132086773, -0.50000000000000000, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49643719555734073, -0.50000000000000000, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.64071162456976150, -0.50000000000000000, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.77407836177211908, -0.50000000000000000, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.89867058251905652, -0.50000000000000000, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0169181822134910, -0.50000000000000000, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1311363312779448, -0.50000000000000000, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2434165408189539, -0.50000000000000000, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler049 = 2.5000000000000020e-13;
// Test data for k=-0.50000000000000000, nu=0.90000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4664649039489274e-16
+// mean(f - f_GSL): -1.9428902930940238e-17
+// variance(f - f_GSL): 7.1986981476874020e-33
+// stddev(f - f_GSL): 8.4845142157270271e-17
const testcase_ellint_3<double>
data050[10] =
{
{ 0.0000000000000000, -0.50000000000000000, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17319040056865681, -0.50000000000000000, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33899920036578557, -0.50000000000000000, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49279362182695174, -0.50000000000000000, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.63342123379746151, -0.50000000000000000, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.76220595179550321, -0.50000000000000000, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.88160004743532294, -0.50000000000000000, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.99427448642310123, -0.50000000000000000, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1027091512470095, -0.50000000000000000, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2091116095504744, -0.50000000000000000, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler050 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.0000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0617918857203532e-16
+// Test data for k=-0.39999999999999991, nu=0.0000000000000000.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.4157225142938039e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 7.2449204663526958e-32
+// stddev(f - f_GSL): 2.6916389925754710e-16
const testcase_ellint_3<double>
data051[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.0000000000000000,
- 0.0000000000000000 },
- { 0.17467414669441528, -0.40000000000000002, 0.0000000000000000,
- 0.17453292519943295 },
- { 0.35018222772483443, -0.40000000000000002, 0.0000000000000000,
- 0.34906585039886590 },
- { 0.52729015917508737, -0.40000000000000002, 0.0000000000000000,
- 0.52359877559829882 },
- { 0.70662374407341244, -0.40000000000000002, 0.0000000000000000,
- 0.69813170079773179 },
- { 0.88859210497602170, -0.40000000000000002, 0.0000000000000000,
- 0.87266462599716477 },
- { 1.0733136290471379, -0.40000000000000002, 0.0000000000000000,
- 1.0471975511965976 },
- { 1.2605612170157061, -0.40000000000000002, 0.0000000000000000,
- 1.2217304763960306 },
- { 1.4497513956433439, -0.40000000000000002, 0.0000000000000000,
- 1.3962634015954636 },
- { 1.6399998658645112, -0.40000000000000002, 0.0000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.0000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17467414669441528, -0.39999999999999991, 0.0000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.35018222772483443, -0.39999999999999991, 0.0000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.52729015917508737, -0.39999999999999991, 0.0000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.70662374407341244, -0.39999999999999991, 0.0000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.88859210497602170, -0.39999999999999991, 0.0000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.0733136290471379, -0.39999999999999991, 0.0000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.2605612170157061, -0.39999999999999991, 0.0000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.4497513956433439, -0.39999999999999991, 0.0000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.6399998658645112, -0.39999999999999991, 0.0000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler051 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.10000000000000001.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2644663257577874e-16
+// Test data for k=-0.39999999999999991, nu=0.10000000000000001.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.6859551010103832e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 7.2449204663526958e-32
+// stddev(f - f_GSL): 2.6916389925754710e-16
const testcase_ellint_3<double>
data052[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.10000000000000001,
- 0.0000000000000000 },
- { 0.17449806706684670, -0.40000000000000002, 0.10000000000000001,
- 0.17453292519943295 },
- { 0.34880048623856075, -0.40000000000000002, 0.10000000000000001,
- 0.34906585039886590 },
- { 0.52277322065757392, -0.40000000000000002, 0.10000000000000001,
- 0.52359877559829882 },
- { 0.69638072056918365, -0.40000000000000002, 0.10000000000000001,
- 0.69813170079773179 },
- { 0.86968426619831540, -0.40000000000000002, 0.10000000000000001,
- 0.87266462599716477 },
- { 1.0428044206578095, -0.40000000000000002, 0.10000000000000001,
- 1.0471975511965976 },
- { 1.2158651158274378, -0.40000000000000002, 0.10000000000000001,
- 1.2217304763960306 },
- { 1.3889447129893324, -0.40000000000000002, 0.10000000000000001,
- 1.3962634015954636 },
- { 1.5620566886683604, -0.40000000000000002, 0.10000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.10000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17449806706684670, -0.39999999999999991, 0.10000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34880048623856075, -0.39999999999999991, 0.10000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.52277322065757392, -0.39999999999999991, 0.10000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.69638072056918365, -0.39999999999999991, 0.10000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.86968426619831540, -0.39999999999999991, 0.10000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0428044206578095, -0.39999999999999991, 0.10000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.2158651158274378, -0.39999999999999991, 0.10000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3889447129893324, -0.39999999999999991, 0.10000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.5620566886683604, -0.39999999999999991, 0.10000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler052 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.20000000000000001.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.4583049464169287e-16
+// Test data for k=-0.39999999999999991, nu=0.20000000000000001.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.9444065952225719e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 7.2449204663526958e-32
+// stddev(f - f_GSL): 2.6916389925754710e-16
const testcase_ellint_3<double>
data053[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.20000000000000001,
- 0.0000000000000000 },
- { 0.17432262290723397, -0.40000000000000002, 0.20000000000000001,
- 0.17453292519943295 },
- { 0.34743795258968596, -0.40000000000000002, 0.20000000000000001,
- 0.34906585039886590 },
- { 0.51838919472805101, -0.40000000000000002, 0.20000000000000001,
- 0.52359877559829882 },
- { 0.68663134739057907, -0.40000000000000002, 0.20000000000000001,
- 0.69813170079773179 },
- { 0.85206432981833979, -0.40000000000000002, 0.20000000000000001,
- 0.87266462599716477 },
- { 1.0149595349004430, -0.40000000000000002, 0.20000000000000001,
- 1.0471975511965976 },
- { 1.1758349405464676, -0.40000000000000002, 0.20000000000000001,
- 1.2217304763960306 },
- { 1.3353337673882637, -0.40000000000000002, 0.20000000000000001,
- 1.3962634015954636 },
- { 1.4941414344266770, -0.40000000000000002, 0.20000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.20000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17432262290723397, -0.39999999999999991, 0.20000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34743795258968596, -0.39999999999999991, 0.20000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.51838919472805112, -0.39999999999999991, 0.20000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.68663134739057907, -0.39999999999999991, 0.20000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.85206432981833979, -0.39999999999999991, 0.20000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0149595349004430, -0.39999999999999991, 0.20000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.1758349405464676, -0.39999999999999991, 0.20000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3353337673882637, -0.39999999999999991, 0.20000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.4941414344266770, -0.39999999999999991, 0.20000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler053 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.29999999999999999.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.1925080711125793e-16
+// Test data for k=-0.39999999999999991, nu=0.30000000000000004.
+// max(|f - f_GSL|): 1.1102230246251565e-15
+// max(|f - f_GSL| / |f_GSL|): 7.7406350888907249e-16
+// mean(f - f_GSL): 1.5543122344752191e-16
+// variance(f - f_GSL): 1.1254659056741132e-31
+// stddev(f - f_GSL): 3.3547964255288479e-16
const testcase_ellint_3<double>
data054[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17414781013591540, -0.40000000000000002, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34609415696777285, -0.40000000000000002, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51413131295862535, -0.40000000000000002, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.67733527622935630, -0.40000000000000002, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.83558675182733266, -0.40000000000000002, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.98940140808865906, -0.40000000000000002, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1396968797728058, -0.40000000000000002, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2875920037865090, -0.40000000000000002, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.4342789859950078, -0.40000000000000002, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17414781013591540, -0.39999999999999991, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34609415696777285, -0.39999999999999991, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51413131295862535, -0.39999999999999991, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67733527622935619, -0.39999999999999991, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.83558675182733266, -0.39999999999999991, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.98940140808865906, -0.39999999999999991, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1396968797728058, -0.39999999999999991, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2875920037865090, -0.39999999999999991, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.4342789859950078, -0.39999999999999991, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler054 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.40000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8235661108581362e-16
+// Test data for k=-0.39999999999999991, nu=0.40000000000000002.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 6.4314214811441816e-16
+// mean(f - f_GSL): 1.4432899320127036e-16
+// variance(f - f_GSL): 6.8310119666996948e-32
+// stddev(f - f_GSL): 2.6136204710515441e-16
const testcase_ellint_3<double>
data055[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.40000000000000002,
- 0.0000000000000000 },
- { 0.17397362471112707, -0.40000000000000002, 0.40000000000000002,
- 0.17453292519943295 },
- { 0.34476864603333196, -0.40000000000000002, 0.40000000000000002,
- 0.34906585039886590 },
- { 0.50999329415379346, -0.40000000000000002, 0.40000000000000002,
- 0.52359877559829882 },
- { 0.66845674551396006, -0.40000000000000002, 0.40000000000000002,
- 0.69813170079773179 },
- { 0.82012848346231748, -0.40000000000000002, 0.40000000000000002,
- 0.87266462599716477 },
- { 0.96582449258349057, -0.40000000000000002, 0.40000000000000002,
- 1.0471975511965976 },
- { 1.1068473749476286, -0.40000000000000002, 0.40000000000000002,
- 1.2217304763960306 },
- { 1.2447132729159989, -0.40000000000000002, 0.40000000000000002,
- 1.3962634015954636 },
- { 1.3809986210732901, -0.40000000000000002, 0.40000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.40000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17397362471112707, -0.39999999999999991, 0.40000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34476864603333196, -0.39999999999999991, 0.40000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.50999329415379346, -0.39999999999999991, 0.40000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.66845674551396006, -0.39999999999999991, 0.40000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.82012848346231748, -0.39999999999999991, 0.40000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.96582449258349057, -0.39999999999999991, 0.40000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.1068473749476286, -0.39999999999999991, 0.40000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.2447132729159989, -0.39999999999999991, 0.40000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.3809986210732901, -0.39999999999999991, 0.40000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler055 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.50000000000000000.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 4.9965792755639576e-16
+// Test data for k=-0.39999999999999991, nu=0.50000000000000000.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 6.6621057007519435e-16
+// mean(f - f_GSL): 8.8817841970012528e-17
+// variance(f - f_GSL): 7.8886090522101185e-32
+// stddev(f - f_GSL): 2.8086667748613609e-16
const testcase_ellint_3<double>
data056[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.50000000000000000,
- 0.0000000000000000 },
- { 0.17380006262854136, -0.40000000000000002, 0.50000000000000000,
- 0.17453292519943295 },
- { 0.34346098216756610, -0.40000000000000002, 0.50000000000000000,
- 0.34906585039886590 },
- { 0.50596929935059420, -0.40000000000000002, 0.50000000000000000,
- 0.52359877559829882 },
- { 0.65996392089131251, -0.40000000000000002, 0.50000000000000000,
- 0.69813170079773179 },
- { 0.80558463511364786, -0.40000000000000002, 0.50000000000000000,
- 0.87266462599716477 },
- { 0.94397834522857704, -0.40000000000000002, 0.50000000000000000,
- 1.0471975511965976 },
- { 1.0768075114108115, -0.40000000000000002, 0.50000000000000000,
- 1.2217304763960306 },
- { 1.2059184624251333, -0.40000000000000002, 0.50000000000000000,
- 1.3962634015954636 },
- { 1.3331797176377398, -0.40000000000000002, 0.50000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.50000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17380006262854136, -0.39999999999999991, 0.50000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34346098216756610, -0.39999999999999991, 0.50000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.50596929935059420, -0.39999999999999991, 0.50000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.65996392089131251, -0.39999999999999991, 0.50000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.80558463511364786, -0.39999999999999991, 0.50000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 0.94397834522857704, -0.39999999999999991, 0.50000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.0768075114108115, -0.39999999999999991, 0.50000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.2059184624251333, -0.39999999999999991, 0.50000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.3331797176377398, -0.39999999999999991, 0.50000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler056 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.59999999999999998.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.1640223038298069e-16
+// Test data for k=-0.39999999999999991, nu=0.60000000000000009.
+// max(|f - f_GSL|): 1.1102230246251565e-15
+// max(|f - f_GSL| / |f_GSL|): 8.6067038397163458e-16
+// mean(f - f_GSL): 1.3322676295501878e-16
+// variance(f - f_GSL): 1.1784218460708942e-31
+// stddev(f - f_GSL): 3.4328149470527743e-16
const testcase_ellint_3<double>
data057[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17362711992081245, -0.40000000000000002, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34217074276403953, -0.40000000000000002, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50205389185761606, -0.40000000000000002, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.65182834920372734, -0.40000000000000002, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.79186512820565136, -0.40000000000000002, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.92365535916287134, -0.40000000000000002, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0491915663957907, -0.40000000000000002, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1705934291745106, -0.40000000000000002, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2899514672527024, -0.40000000000000002, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17362711992081245, -0.39999999999999991, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34217074276403953, -0.39999999999999991, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50205389185761606, -0.39999999999999991, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.65182834920372734, -0.39999999999999991, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.79186512820565136, -0.39999999999999991, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.92365535916287134, -0.39999999999999991, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0491915663957907, -0.39999999999999991, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1705934291745106, -0.39999999999999991, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2899514672527022, -0.39999999999999991, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler057 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.3264047918332349e-16
+// Test data for k=-0.39999999999999991, nu=0.70000000000000007.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 7.1018730557776469e-16
+// mean(f - f_GSL): 1.4432899320127036e-16
+// variance(f - f_GSL): 6.8310119666996948e-32
+// stddev(f - f_GSL): 2.6136204710515441e-16
const testcase_ellint_3<double>
data058[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17345479265712868, -0.40000000000000002, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34089751955950354, -0.40000000000000002, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49824200167361332, -0.40000000000000002, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.64402450341199402, -0.40000000000000002, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.77889207804122873, -0.40000000000000002, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.90468169720957992, -0.40000000000000002, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0236847823692916, -0.40000000000000002, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1382465247425166, -0.40000000000000002, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2506255923253344, -0.40000000000000002, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17345479265712868, -0.39999999999999991, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34089751955950354, -0.39999999999999991, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49824200167361332, -0.39999999999999991, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.64402450341199402, -0.39999999999999991, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.77889207804122862, -0.39999999999999991, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.90468169720957992, -0.39999999999999991, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0236847823692914, -0.39999999999999991, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1382465247425166, -0.39999999999999991, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2506255923253344, -0.39999999999999991, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler058 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.80000000000000004.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 6.6611561645571024e-16
+// Test data for k=-0.39999999999999991, nu=0.80000000000000004.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 7.3122171115555478e-16
+// mean(f - f_GSL): 1.4432899320127036e-16
+// variance(f - f_GSL): 6.8310119666996948e-32
+// stddev(f - f_GSL): 2.6136204710515441e-16
const testcase_ellint_3<double>
data059[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.80000000000000004,
- 0.0000000000000000 },
- { 0.17328307694277154, -0.40000000000000002, 0.80000000000000004,
- 0.17453292519943295 },
- { 0.33964091800132007, -0.40000000000000002, 0.80000000000000004,
- 0.34906585039886590 },
- { 0.49452889372467440, -0.40000000000000002, 0.80000000000000004,
- 0.52359877559829882 },
- { 0.63652940095937316, -0.40000000000000002, 0.80000000000000004,
- 0.69813170079773179 },
- { 0.76659772511159097, -0.40000000000000002, 0.80000000000000004,
- 0.87266462599716477 },
- { 0.88691047977338111, -0.40000000000000002, 0.80000000000000004,
- 1.0471975511965976 },
- { 1.0000273200611638, -0.40000000000000002, 0.80000000000000004,
- 1.2217304763960306 },
- { 1.1084787902188009, -0.40000000000000002, 0.80000000000000004,
- 1.3962634015954636 },
- { 1.2146499565727209, -0.40000000000000002, 0.80000000000000004,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.80000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17328307694277154, -0.39999999999999991, 0.80000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.33964091800132007, -0.39999999999999991, 0.80000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.49452889372467440, -0.39999999999999991, 0.80000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.63652940095937316, -0.39999999999999991, 0.80000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.76659772511159097, -0.39999999999999991, 0.80000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.88691047977338111, -0.39999999999999991, 0.80000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.0000273200611638, -0.39999999999999991, 0.80000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.1084787902188009, -0.39999999999999991, 0.80000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.2146499565727209, -0.39999999999999991, 0.80000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler059 = 2.5000000000000020e-13;
-// Test data for k=-0.40000000000000002, nu=0.90000000000000002.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.6376730823308004e-16
+// Test data for k=-0.39999999999999991, nu=0.90000000000000002.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 7.5168974431077345e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 7.4564398834547801e-32
+// stddev(f - f_GSL): 2.7306482533374340e-16
const testcase_ellint_3<double>
data060[10] =
{
- { 0.0000000000000000, -0.40000000000000002, 0.90000000000000002,
- 0.0000000000000000 },
- { 0.17311196891868127, -0.40000000000000002, 0.90000000000000002,
- 0.17453292519943295 },
- { 0.33840055664911906, -0.40000000000000002, 0.90000000000000002,
- 0.34906585039886590 },
- { 0.49091013944075329, -0.40000000000000002, 0.90000000000000002,
- 0.52359877559829882 },
- { 0.62932228186809580, -0.40000000000000002, 0.90000000000000002,
- 0.69813170079773179 },
- { 0.75492278323019801, -0.40000000000000002, 0.90000000000000002,
- 0.87266462599716477 },
- { 0.87021659043854294, -0.40000000000000002, 0.90000000000000002,
- 1.0471975511965976 },
- { 0.97800245228239246, -0.40000000000000002, 0.90000000000000002,
- 1.2217304763960306 },
- { 1.0809625773173697, -0.40000000000000002, 0.90000000000000002,
- 1.3962634015954636 },
- { 1.1815758115929846, -0.40000000000000002, 0.90000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.39999999999999991, 0.90000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17311196891868127, -0.39999999999999991, 0.90000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.33840055664911906, -0.39999999999999991, 0.90000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.49091013944075329, -0.39999999999999991, 0.90000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.62932228186809580, -0.39999999999999991, 0.90000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.75492278323019801, -0.39999999999999991, 0.90000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.87021659043854294, -0.39999999999999991, 0.90000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 0.97800245228239246, -0.39999999999999991, 0.90000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.0809625773173697, -0.39999999999999991, 0.90000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.1815758115929846, -0.39999999999999991, 0.90000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler060 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.0000000000000000.
+// Test data for k=-0.29999999999999993, nu=0.0000000000000000.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data061[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.0000000000000000,
- 0.0000000000000000 },
- { 0.17461228653000099, -0.30000000000000004, 0.0000000000000000,
- 0.17453292519943295 },
- { 0.34969146102798415, -0.30000000000000004, 0.0000000000000000,
- 0.34906585039886590 },
- { 0.52565822873726320, -0.30000000000000004, 0.0000000000000000,
- 0.52359877559829882 },
- { 0.70284226512408532, -0.30000000000000004, 0.0000000000000000,
- 0.69813170079773179 },
- { 0.88144139195111182, -0.30000000000000004, 0.0000000000000000,
- 0.87266462599716477 },
- { 1.0614897067260520, -0.30000000000000004, 0.0000000000000000,
- 1.0471975511965976 },
- { 1.2428416824174218, -0.30000000000000004, 0.0000000000000000,
- 1.2217304763960306 },
- { 1.4251795877015927, -0.30000000000000004, 0.0000000000000000,
- 1.3962634015954636 },
- { 1.6080486199305128, -0.30000000000000004, 0.0000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.0000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17461228653000099, -0.29999999999999993, 0.0000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34969146102798415, -0.29999999999999993, 0.0000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.52565822873726320, -0.29999999999999993, 0.0000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.70284226512408532, -0.29999999999999993, 0.0000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.88144139195111182, -0.29999999999999993, 0.0000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.0614897067260520, -0.29999999999999993, 0.0000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.2428416824174218, -0.29999999999999993, 0.0000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.4251795877015927, -0.29999999999999993, 0.0000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.6080486199305128, -0.29999999999999993, 0.0000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler061 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.10000000000000001.
+// Test data for k=-0.29999999999999993, nu=0.10000000000000001.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.3908043711907203e-16
+// mean(f - f_GSL): 8.8817841970012528e-17
+// variance(f - f_GSL): 7.8886090522101185e-32
+// stddev(f - f_GSL): 2.8086667748613609e-16
const testcase_ellint_3<double>
data062[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.10000000000000001,
- 0.0000000000000000 },
- { 0.17443631884814376, -0.30000000000000004, 0.10000000000000001,
- 0.17453292519943295 },
- { 0.34831316835124926, -0.30000000000000004, 0.10000000000000001,
- 0.34906585039886590 },
- { 0.52116586276523857, -0.30000000000000004, 0.10000000000000001,
- 0.52359877559829882 },
- { 0.69269385837910036, -0.30000000000000004, 0.10000000000000001,
- 0.69813170079773179 },
- { 0.86279023163070856, -0.30000000000000004, 0.10000000000000001,
- 0.87266462599716477 },
- { 1.0315321461438263, -0.30000000000000004, 0.10000000000000001,
- 1.0471975511965976 },
- { 1.1991449111869024, -0.30000000000000004, 0.10000000000000001,
- 1.2217304763960306 },
- { 1.3659561780923213, -0.30000000000000004, 0.10000000000000001,
- 1.3962634015954636 },
- { 1.5323534693557528, -0.30000000000000004, 0.10000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.10000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17443631884814376, -0.29999999999999993, 0.10000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34831316835124926, -0.29999999999999993, 0.10000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.52116586276523857, -0.29999999999999993, 0.10000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.69269385837910036, -0.29999999999999993, 0.10000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.86279023163070856, -0.29999999999999993, 0.10000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0315321461438263, -0.29999999999999993, 0.10000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.1991449111869024, -0.29999999999999993, 0.10000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3659561780923213, -0.29999999999999993, 0.10000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.5323534693557528, -0.29999999999999993, 0.10000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler062 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.20000000000000001.
+// Test data for k=-0.29999999999999993, nu=0.20000000000000001.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.4447238179454079e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 8.1092588038633715e-32
+// stddev(f - f_GSL): 2.8476760356233243e-16
const testcase_ellint_3<double>
data063[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.20000000000000001,
- 0.0000000000000000 },
- { 0.17426098615372088, -0.30000000000000004, 0.20000000000000001,
- 0.17453292519943295 },
- { 0.34695402664689923, -0.30000000000000004, 0.20000000000000001,
- 0.34906585039886590 },
- { 0.51680555567038933, -0.30000000000000004, 0.20000000000000001,
- 0.52359877559829882 },
- { 0.68303375225260210, -0.30000000000000004, 0.20000000000000001,
- 0.69813170079773179 },
- { 0.84540662891295026, -0.30000000000000004, 0.20000000000000001,
- 0.87266462599716477 },
- { 1.0041834051646927, -0.30000000000000004, 0.20000000000000001,
- 1.0471975511965976 },
- { 1.1599952702345711, -0.30000000000000004, 0.20000000000000001,
- 1.2217304763960306 },
- { 1.3137179520499165, -0.30000000000000004, 0.20000000000000001,
- 1.3962634015954636 },
- { 1.4663658145259877, -0.30000000000000004, 0.20000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.20000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17426098615372088, -0.29999999999999993, 0.20000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34695402664689923, -0.29999999999999993, 0.20000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.51680555567038933, -0.29999999999999993, 0.20000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.68303375225260210, -0.29999999999999993, 0.20000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.84540662891295026, -0.29999999999999993, 0.20000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0041834051646927, -0.29999999999999993, 0.20000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.1599952702345711, -0.29999999999999993, 0.20000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3137179520499165, -0.29999999999999993, 0.20000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.4663658145259877, -0.29999999999999993, 0.20000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler063 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.29999999999999999.
+// Test data for k=-0.29999999999999993, nu=0.30000000000000004.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.4979715256503266e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 8.1092588038633715e-32
+// stddev(f - f_GSL): 2.8476760356233243e-16
const testcase_ellint_3<double>
data064[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17408628437042842, -0.30000000000000004, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34561356761638401, -0.30000000000000004, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51257058617875850, -0.30000000000000004, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.67382207124602878, -0.30000000000000004, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82914751587825131, -0.30000000000000004, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.97907434814374938, -0.30000000000000004, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1246399297351584, -0.30000000000000004, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2671793970398149, -0.30000000000000004, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.4081767433479091, -0.30000000000000004, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17408628437042842, -0.29999999999999993, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34561356761638401, -0.29999999999999993, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51257058617875850, -0.29999999999999993, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67382207124602866, -0.29999999999999993, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82914751587825131, -0.29999999999999993, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.97907434814374927, -0.29999999999999993, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1246399297351584, -0.29999999999999993, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2671793970398149, -0.29999999999999993, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.4081767433479091, -0.29999999999999993, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler064 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.40000000000000002.
+// Test data for k=-0.29999999999999993, nu=0.40000000000000002.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.5505716921759864e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 7.4564398834547801e-32
+// stddev(f - f_GSL): 2.7306482533374340e-16
const testcase_ellint_3<double>
data065[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.40000000000000002,
- 0.0000000000000000 },
- { 0.17391220945982727, -0.30000000000000004, 0.40000000000000002,
- 0.17453292519943295 },
- { 0.34429133937639689, -0.30000000000000004, 0.40000000000000002,
- 0.34906585039886590 },
- { 0.50845471668581632, -0.30000000000000004, 0.40000000000000002,
- 0.52359877559829882 },
- { 0.66502347027873854, -0.30000000000000004, 0.40000000000000002,
- 0.69813170079773179 },
- { 0.81389191978012254, -0.30000000000000004, 0.40000000000000002,
- 0.87266462599716477 },
- { 0.95590618002140570, -0.30000000000000004, 0.40000000000000002,
- 1.0471975511965976 },
- { 1.0924915195213121, -0.30000000000000004, 0.40000000000000002,
- 1.2217304763960306 },
- { 1.2253651604038061, -0.30000000000000004, 0.40000000000000002,
- 1.3962634015954636 },
- { 1.3563643538969763, -0.30000000000000004, 0.40000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.40000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17391220945982727, -0.29999999999999993, 0.40000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34429133937639689, -0.29999999999999993, 0.40000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.50845471668581632, -0.29999999999999993, 0.40000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.66502347027873854, -0.29999999999999993, 0.40000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.81389191978012254, -0.29999999999999993, 0.40000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.95590618002140570, -0.29999999999999993, 0.40000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.0924915195213121, -0.29999999999999993, 0.40000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.2253651604038061, -0.29999999999999993, 0.40000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.3563643538969763, -0.29999999999999993, 0.40000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler065 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.50000000000000000.
+// Test data for k=-0.29999999999999993, nu=0.50000000000000000.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.7807908859023716e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data066[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.50000000000000000,
- 0.0000000000000000 },
- { 0.17373875742088232, -0.30000000000000004, 0.50000000000000000,
- 0.17453292519943295 },
- { 0.34298690571124157, -0.30000000000000004, 0.50000000000000000,
- 0.34906585039886590 },
- { 0.50445214859646936, -0.30000000000000004, 0.50000000000000000,
- 0.52359877559829882 },
- { 0.65660648352418516, -0.30000000000000004, 0.50000000000000000,
- 0.69813170079773179 },
- { 0.79953670639287289, -0.30000000000000004, 0.50000000000000000,
- 0.87266462599716477 },
- { 0.93443393926588536, -0.30000000000000004, 0.50000000000000000,
- 1.0471975511965976 },
- { 1.0630838369016911, -0.30000000000000004, 0.50000000000000000,
- 1.2217304763960306 },
- { 1.1875197325653029, -0.30000000000000004, 0.50000000000000000,
- 1.3962634015954636 },
- { 1.3098448759814962, -0.30000000000000004, 0.50000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.50000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17373875742088232, -0.29999999999999993, 0.50000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34298690571124157, -0.29999999999999993, 0.50000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.50445214859646936, -0.29999999999999993, 0.50000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.65660648352418516, -0.29999999999999993, 0.50000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.79953670639287289, -0.29999999999999993, 0.50000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 0.93443393926588536, -0.29999999999999993, 0.50000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.0630838369016911, -0.29999999999999993, 0.50000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.1875197325653029, -0.29999999999999993, 0.50000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.3098448759814962, -0.29999999999999993, 0.50000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler066 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.59999999999999998.
+// Test data for k=-0.29999999999999993, nu=0.60000000000000009.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 7.0057999499931649e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data067[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17356592428950823, -0.30000000000000004, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34169984536697379, -0.30000000000000004, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50055748266498457, -0.30000000000000004, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64854298527106768, -0.30000000000000004, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.78599329284207431, -0.30000000000000004, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.91445452089128199, -0.30000000000000004, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0360412952290587, -0.30000000000000004, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1530473919778641, -0.30000000000000004, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2677758800420669, -0.30000000000000004, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17356592428950823, -0.29999999999999993, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34169984536697379, -0.29999999999999993, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50055748266498457, -0.29999999999999993, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64854298527106768, -0.29999999999999993, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.78599329284207431, -0.29999999999999993, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.91445452089128199, -0.29999999999999993, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0360412952290587, -0.29999999999999993, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1530473919778639, -0.29999999999999993, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2677758800420669, -0.29999999999999993, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler067 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.2239502844122443e-16
+// Test data for k=-0.29999999999999993, nu=0.70000000000000007.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 6.7047084436208395e-16
+// mean(f - f_GSL): 6.6613381477509390e-17
+// variance(f - f_GSL): 4.4373425918681915e-32
+// stddev(f - f_GSL): 2.1065000811460205e-16
const testcase_ellint_3<double>
data068[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17339370613812224, -0.30000000000000004, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34042975138455933, -0.30000000000000004, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49676568368075985, -0.30000000000000004, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.64080774055753720, -0.30000000000000004, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.77318507779667278, -0.30000000000000004, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.89579782346548609, -0.30000000000000004, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0110573286052202, -0.30000000000000004, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1214710972949635, -0.30000000000000004, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2294913236274982, -0.30000000000000004, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17339370613812224, -0.29999999999999993, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34042975138455933, -0.29999999999999993, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49676568368075985, -0.29999999999999993, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.64080774055753720, -0.29999999999999993, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.77318507779667267, -0.29999999999999993, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.89579782346548598, -0.29999999999999993, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0110573286052202, -0.29999999999999993, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1214710972949635, -0.29999999999999993, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2294913236274980, -0.29999999999999993, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler068 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.80000000000000004.
+// Test data for k=-0.29999999999999993, nu=0.80000000000000004.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 7.4358357000101250e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 7.4564398834547801e-32
+// stddev(f - f_GSL): 2.7306482533374340e-16
const testcase_ellint_3<double>
data069[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.80000000000000004,
- 0.0000000000000000 },
- { 0.17322209907520358, -0.30000000000000004, 0.80000000000000004,
- 0.17453292519943295 },
- { 0.33917623046949996, -0.30000000000000004, 0.80000000000000004,
- 0.34906585039886590 },
- { 0.49307204894329176, -0.30000000000000004, 0.80000000000000004,
- 0.52359877559829882 },
- { 0.63337802830291734, -0.30000000000000004, 0.80000000000000004,
- 0.69813170079773179 },
- { 0.76104540997689407, -0.30000000000000004, 0.80000000000000004,
- 0.87266462599716477 },
- { 0.87832009635450714, -0.30000000000000004, 0.80000000000000004,
- 1.0471975511965976 },
- { 0.98787879723171790, -0.30000000000000004, 0.80000000000000004,
- 1.2217304763960306 },
- { 1.0924036340069339, -0.30000000000000004, 0.80000000000000004,
- 1.3962634015954636 },
- { 1.1944567571590048, -0.30000000000000004, 0.80000000000000004,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.80000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17322209907520358, -0.29999999999999993, 0.80000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.33917623046949996, -0.29999999999999993, 0.80000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.49307204894329176, -0.29999999999999993, 0.80000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.63337802830291734, -0.29999999999999993, 0.80000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.76104540997689407, -0.29999999999999993, 0.80000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.87832009635450714, -0.29999999999999993, 0.80000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 0.98787879723171790, -0.29999999999999993, 0.80000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.0924036340069339, -0.29999999999999993, 0.80000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.1944567571590048, -0.29999999999999993, 0.80000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler069 = 2.5000000000000020e-13;
-// Test data for k=-0.30000000000000004, nu=0.90000000000000002.
+// Test data for k=-0.29999999999999993, nu=0.90000000000000002.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 7.6419688299804087e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 8.1092588038633715e-32
+// stddev(f - f_GSL): 2.8476760356233243e-16
const testcase_ellint_3<double>
data070[10] =
{
- { 0.0000000000000000, -0.30000000000000004, 0.90000000000000002,
- 0.0000000000000000 },
- { 0.17305109924485945, -0.30000000000000004, 0.90000000000000002,
- 0.17453292519943295 },
- { 0.33793890239556984, -0.30000000000000004, 0.90000000000000002,
- 0.34906585039886590 },
- { 0.48947218005089738, -0.30000000000000004, 0.90000000000000002,
- 0.52359877559829882 },
- { 0.62623332340775151, -0.30000000000000004, 0.90000000000000002,
- 0.69813170079773179 },
- { 0.74951596581511148, -0.30000000000000004, 0.90000000000000002,
- 0.87266462599716477 },
- { 0.86189886597755994, -0.30000000000000004, 0.90000000000000002,
- 1.0471975511965976 },
- { 0.96629451153092005, -0.30000000000000004, 0.90000000000000002,
- 1.2217304763960306 },
- { 1.0655269133492682, -0.30000000000000004, 0.90000000000000002,
- 1.3962634015954636 },
- { 1.1622376896064914, -0.30000000000000004, 0.90000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.29999999999999993, 0.90000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17305109924485945, -0.29999999999999993, 0.90000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.33793890239556984, -0.29999999999999993, 0.90000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.48947218005089738, -0.29999999999999993, 0.90000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.62623332340775151, -0.29999999999999993, 0.90000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.74951596581511148, -0.29999999999999993, 0.90000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.86189886597755994, -0.29999999999999993, 0.90000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 0.96629451153092005, -0.29999999999999993, 0.90000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.0655269133492682, -0.29999999999999993, 0.90000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.1622376896064914, -0.29999999999999993, 0.90000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler070 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
const testcase_ellint_3<double>
data071[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17456817290292809, -0.19999999999999996, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34934315932086801, -0.19999999999999996, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52450880529443988, -0.19999999999999996, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70020491009844876, -0.19999999999999996, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87651006649967955, -0.19999999999999996, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0534305870298994, -0.19999999999999996, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2308975521670784, -0.19999999999999996, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4087733584990738, -0.19999999999999996, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5868678474541660, -0.19999999999999996, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler071 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3374593253183472e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
const testcase_ellint_3<double>
data072[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17439228502691748, -0.19999999999999996, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34796731137565740, -0.19999999999999996, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52003370294544848, -0.19999999999999996, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69012222258631462, -0.19999999999999996, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85803491465566772, -0.19999999999999996, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0238463961099364, -0.19999999999999996, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1878691059202153, -0.19999999999999996, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3505985031831940, -0.19999999999999996, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5126513474261087, -0.19999999999999996, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler072 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.20000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4549984059502760e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
const testcase_ellint_3<double>
data073[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17421703179583747, -0.19999999999999996, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34661057411998791, -0.19999999999999996, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51569006052647393, -0.19999999999999996, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68052412821107244, -0.19999999999999996, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.84081341263313825, -0.19999999999999996, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99683359988842890, -0.19999999999999996, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1493086715118852, -0.19999999999999996, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2992699693957541, -0.19999999999999996, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4479323932249564, -0.19999999999999996, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler073 = 2.5000000000000020e-13;
-// Test data for k=-0.19999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.3140668101543467e-16
+// Test data for k=-0.19999999999999996, nu=0.30000000000000004.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 4.5686839814758455e-16
+// mean(f - f_GSL): 5.5511151231257830e-18
+// variance(f - f_GSL): 2.3742674139102693e-32
+// stddev(f - f_GSL): 1.5408658000975521e-16
const testcase_ellint_3<double>
data074[10] =
{
- { 0.0000000000000000, -0.19999999999999996, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17404240913577704, -0.19999999999999996, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34527248032587193, -0.19999999999999996, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51147118981668416, -0.19999999999999996, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.67137107867777601, -0.19999999999999996, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82470418188668893, -0.19999999999999996, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.97202873223594299, -0.19999999999999996, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1144773569375266, -0.19999999999999996, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2535292433701000, -0.19999999999999996, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.3908453514752477, -0.19999999999999996, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.19999999999999996, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17404240913577704, -0.19999999999999996, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34527248032587193, -0.19999999999999996, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51147118981668416, -0.19999999999999996, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67137107867777601, -0.19999999999999996, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82470418188668893, -0.19999999999999996, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.97202873223594299, -0.19999999999999996, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1144773569375266, -0.19999999999999996, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2535292433700997, -0.19999999999999996, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.3908453514752477, -0.19999999999999996, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler074 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.6788709752760483e-16
+// mean(f - f_GSL): 1.6653345369377347e-17
+// variance(f - f_GSL): 2.2555730647450710e-32
+// stddev(f - f_GSL): 1.5018565393355888e-16
const testcase_ellint_3<double>
data075[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17386841301066674, -0.19999999999999996, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34395257914113253, -0.19999999999999996, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50737088376869466, -0.19999999999999996, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66262801717277631, -0.19999999999999996, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.80958766645079094, -0.19999999999999996, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.94913754236162040, -0.19999999999999996, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0827985514222997, -0.19999999999999996, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2124212429050478, -0.19999999999999996, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3400002519661005, -0.19999999999999996, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler075 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.7788201301356829e-16
+// mean(f - f_GSL): 5.5511151231257830e-18
+// variance(f - f_GSL): 2.3742674139102693e-32
+// stddev(f - f_GSL): 1.5408658000975521e-16
const testcase_ellint_3<double>
data076[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17369503942181799, -0.19999999999999996, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34265043534362660, -0.19999999999999996, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50338337208655415, -0.19999999999999996, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65426373297163609, -0.19999999999999996, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79536193036145808, -0.19999999999999996, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.92791875910061605, -0.19999999999999996, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0538145052725829, -0.19999999999999996, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1752060022875899, -0.19999999999999996, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2943374404397372, -0.19999999999999996, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler076 = 2.5000000000000020e-13;
-// Test data for k=-0.19999999999999996, nu=0.59999999999999998.
+// Test data for k=-0.19999999999999996, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8899223779598256e-16
+// max(|f - f_GSL| / |f_GSL|): 3.8910823973723625e-16
+// mean(f - f_GSL): 5.5511151231257830e-18
+// variance(f - f_GSL): 2.3742674139102693e-32
+// stddev(f - f_GSL): 1.5408658000975521e-16
const testcase_ellint_3<double>
data077[10] =
{
- { 0.0000000000000000, -0.19999999999999996, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17352228440746925, -0.19999999999999996, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34136562863713626, -0.19999999999999996, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.49950328177638481, -0.19999999999999996, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64625032705690799, -0.19999999999999996, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.78193941198403083, -0.19999999999999996, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.90817230934317128, -0.19999999999999996, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0271563751276462, -0.19999999999999996, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1412999379040518, -0.19999999999999996, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2530330675914556, -0.19999999999999996, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.19999999999999996, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17352228440746925, -0.19999999999999996, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34136562863713626, -0.19999999999999996, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.49950328177638481, -0.19999999999999996, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64625032705690799, -0.19999999999999996, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.78193941198403083, -0.19999999999999996, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.90817230934317117, -0.19999999999999996, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0271563751276462, -0.19999999999999996, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1412999379040518, -0.19999999999999996, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2530330675914554, -0.19999999999999996, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler077 = 2.5000000000000020e-13;
-// Test data for k=-0.19999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.9999318361775115e-16
+// Test data for k=-0.19999999999999996, nu=0.70000000000000007.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 4.9912771982681171e-16
+// mean(f - f_GSL): -1.6653345369377347e-17
+// variance(f - f_GSL): 2.6207864467918357e-32
+// stddev(f - f_GSL): 1.6188843216214787e-16
const testcase_ellint_3<double>
data078[10] =
{
- { 0.0000000000000000, -0.19999999999999996, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17335014404233895, -0.19999999999999996, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34009775298617811, -0.19999999999999996, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49572560201923810, -0.19999999999999996, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.63856276669886503, -0.19999999999999996, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.76924438644867565, -0.19999999999999996, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.88973060843856466, -0.19999999999999996, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0025230471636377, -0.19999999999999996, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1102356376093103, -0.19999999999999996, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2154356555075863, -0.19999999999999996, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.19999999999999996, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17335014404233895, -0.19999999999999996, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34009775298617811, -0.19999999999999996, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49572560201923810, -0.19999999999999996, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.63856276669886503, -0.19999999999999996, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.76924438644867565, -0.19999999999999996, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.88973060843856466, -0.19999999999999996, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0025230471636377, -0.19999999999999996, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1102356376093101, -0.19999999999999996, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2154356555075863, -0.19999999999999996, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler078 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 5.0901276230707249e-16
+// mean(f - f_GSL): -1.6653345369377347e-17
+// variance(f - f_GSL): 2.6207864467918357e-32
+// stddev(f - f_GSL): 1.6188843216214787e-16
const testcase_ellint_3<double>
data079[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17317861443718538, -0.19999999999999996, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33884641598718701, -0.19999999999999996, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49204565281259494, -0.19999999999999996, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.63117851188220320, -0.19999999999999996, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.75721095949544170, -0.19999999999999996, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.87245201443919118, -0.19999999999999996, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.97966584238831089, -0.19999999999999996, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0816336325174360, -0.19999999999999996, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1810223448909909, -0.19999999999999996, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler079 = 2.5000000000000020e-13;
// Test data for k=-0.19999999999999996, nu=0.90000000000000002.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 6.4833128442756722e-16
+// mean(f - f_GSL): -3.8857805861880476e-17
+// variance(f - f_GSL): 2.8794792590749608e-32
+// stddev(f - f_GSL): 1.6969028431454054e-16
const testcase_ellint_3<double>
data080[10] =
{
{ 0.0000000000000000, -0.19999999999999996, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17300769173837277, -0.19999999999999996, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33761123827372508, -0.19999999999999996, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.48845905690769426, -0.19999999999999996, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62407720017324952, -0.19999999999999996, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.74578146525124289, -0.19999999999999996, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.85621583540073076, -0.19999999999999996, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.95837725988001199, -0.19999999999999996, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0551821412633928, -0.19999999999999996, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1493679916141861, -0.19999999999999996, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler080 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.1735566504509650e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data081[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17454173353063659, -0.099999999999999978, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34913506721468091, -0.099999999999999978, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52382550016538942, -0.099999999999999978, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69864700854177020, -0.099999999999999978, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87361792586964870, -0.099999999999999978, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0487386319621683, -0.099999999999999978, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2239913752078757, -0.099999999999999978, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3993423113684049, -0.099999999999999978, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5747455615173562, -0.099999999999999978, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler081 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3097339877269682e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data082[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17436589347616613, -0.099999999999999978, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34776067871237359, -0.099999999999999978, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51936064354727796, -0.099999999999999978, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68860303749364349, -0.099999999999999978, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85524561882332051, -0.099999999999999978, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0193708301908335, -0.099999999999999978, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1813474067123044, -0.099999999999999978, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3417670770424983, -0.099999999999999978, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5013711111199950, -0.099999999999999978, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler082 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.20000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.4399947764827574e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data083[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17419068786141340, -0.099999999999999978, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34640537686230133, -0.099999999999999978, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51502689171753946, -0.099999999999999978, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67904147863672715, -0.099999999999999978, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83811885126105179, -0.099999999999999978, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99255278555742787, -0.099999999999999978, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1431260546194930, -0.099999999999999978, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2909589656532101, -0.099999999999999978, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4373749386463430, -0.099999999999999978, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler083 = 2.5000000000000020e-13;
-// Test data for k=-0.099999999999999978, nu=0.29999999999999999.
+// Test data for k=-0.099999999999999978, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5650492137236872e-16
+// mean(f - f_GSL): -7.7715611723760953e-17
+// variance(f - f_GSL): 1.6571557210371951e-32
+// stddev(f - f_GSL): 1.2873056051447903e-16
const testcase_ellint_3<double>
data084[10] =
{
- { 0.0000000000000000, -0.099999999999999978, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17401611261390104, -0.099999999999999978, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34506869507511773, -0.099999999999999978, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51081757604259859, -0.099999999999999978, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.66992297597712303, -0.099999999999999978, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82209722856174228, -0.099999999999999978, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.96792430487669590, -0.099999999999999978, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1085964108954092, -0.099999999999999978, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2456748370836999, -0.099999999999999978, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.3809159606704959, -0.099999999999999978, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.099999999999999978, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17401611261390104, -0.099999999999999978, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34506869507511773, -0.099999999999999978, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51081757604259859, -0.099999999999999978, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.66992297597712303, -0.099999999999999978, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82209722856174228, -0.099999999999999978, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.96792430487669590, -0.099999999999999978, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1085964108954092, -0.099999999999999978, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2456748370836999, -0.099999999999999978, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.3809159606704959, -0.099999999999999978, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler084 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.6854758534459740e-16
+// mean(f - f_GSL): -7.7715611723760953e-17
+// variance(f - f_GSL): 1.6571557210371951e-32
+// stddev(f - f_GSL): 1.2873056051447903e-16
const testcase_ellint_3<double>
data085[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17384216369897931, -0.099999999999999978, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34375018311376787, -0.099999999999999978, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50672650758380455, -0.099999999999999978, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66121264213337616, -0.099999999999999978, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.80706202005774441, -0.099999999999999978, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.94519376138245870, -0.099999999999999978, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0771880300759584, -0.099999999999999978, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2049711557188272, -0.099999999999999978, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3306223265207477, -0.099999999999999978, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler085 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.8017534281650347e-16
+// mean(f - f_GSL): -1.2212453270876723e-16
+// variance(f - f_GSL): 1.2797685595888714e-32
+// stddev(f - f_GSL): 1.1312685620969369e-16
const testcase_ellint_3<double>
data086[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17366883711936548, -0.099999999999999978, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34244940634881882, -0.099999999999999978, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50274793281634367, -0.099999999999999978, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65287941633275082, -0.099999999999999978, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79291198790315398, -0.099999999999999978, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.92412201537880323, -0.099999999999999978, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0484480076799372, -0.099999999999999978, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1681168130475206, -0.099999999999999978, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2854480708580160, -0.099999999999999978, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler086 = 2.5000000000000020e-13;
-// Test data for k=-0.099999999999999978, nu=0.59999999999999998.
+// Test data for k=-0.099999999999999978, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.9142834151672032e-16
+// mean(f - f_GSL): -5.5511151231257827e-17
+// variance(f - f_GSL): 3.4238754566884194e-33
+// stddev(f - f_GSL): 5.8513891142945020e-17
const testcase_ellint_3<double>
data087[10] =
{
- { 0.0000000000000000, -0.099999999999999978, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17349612891469013, -0.099999999999999978, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34116594505539444, -0.099999999999999978, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.49887649430466674, -0.099999999999999978, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64489553282165146, -0.099999999999999978, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.77956016553782437, -0.099999999999999978, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.90451074530096287, -0.099999999999999978, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0220113666961632, -0.099999999999999978, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1345351441065563, -0.099999999999999978, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2445798942989255, -0.099999999999999978, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.099999999999999978, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17349612891469013, -0.099999999999999978, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34116594505539444, -0.099999999999999978, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.49887649430466674, -0.099999999999999978, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64489553282165146, -0.099999999999999978, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.77956016553782426, -0.099999999999999978, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.90451074530096287, -0.099999999999999978, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0220113666961632, -0.099999999999999978, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1345351441065563, -0.099999999999999978, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2445798942989252, -0.099999999999999978, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler087 = 2.5000000000000020e-13;
-// Test data for k=-0.099999999999999978, nu=0.69999999999999996.
+// Test data for k=-0.099999999999999978, nu=0.70000000000000007.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.5172091551439012e-16
+// max(|f - f_GSL| / |f_GSL|): 6.0351096586675613e-16
+// mean(f - f_GSL): -1.2212453270876723e-16
+// variance(f - f_GSL): 1.2797685595888714e-32
+// stddev(f - f_GSL): 1.1312685620969369e-16
const testcase_ellint_3<double>
data088[10] =
{
- { 0.0000000000000000, -0.099999999999999978, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17332403516105047, -0.099999999999999978, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.33989939374896883, -0.099999999999999978, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49510719568614070, -0.099999999999999978, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.63723607776354974, -0.099999999999999978, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.76693133887935327, -0.099999999999999978, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.88619382078823805, -0.099999999999999978, 0.69999999999999996,
- 1.0471975511965976 },
- { 0.99758012018676490, -0.099999999999999978, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1037642270814410, -0.099999999999999978, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2073745911083185, -0.099999999999999978, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, -0.099999999999999978, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17332403516105047, -0.099999999999999978, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.33989939374896883, -0.099999999999999978, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49510719568614070, -0.099999999999999978, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.63723607776354974, -0.099999999999999978, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.76693133887935327, -0.099999999999999978, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.88619382078823794, -0.099999999999999978, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 0.99758012018676501, -0.099999999999999978, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1037642270814410, -0.099999999999999978, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2073745911083185, -0.099999999999999978, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler088 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1294144515772258e-16
+// mean(f - f_GSL): -9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data089[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17315255197057014, -0.099999999999999978, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33864936055747991, -0.099999999999999978, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49143537041117613, -0.099999999999999978, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62987861760047492, -0.099999999999999978, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.75496005490917517, -0.099999999999999978, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.86903081862701881, -0.099999999999999978, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.97490814820725591, -0.099999999999999978, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0754290107171083, -0.099999999999999978, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1733158866987732, -0.099999999999999978, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler089 = 2.5000000000000020e-13;
// Test data for k=-0.099999999999999978, nu=0.90000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2325599449457852e-16
+// mean(f - f_GSL): -6.6613381477509390e-17
+// variance(f - f_GSL): 1.7591111235252501e-32
+// stddev(f - f_GSL): 1.3263148659067538e-16
const testcase_ellint_3<double>
data090[10] =
{
{ 0.0000000000000000, -0.099999999999999978, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17298167549096563, -0.099999999999999978, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33741546662741589, -0.099999999999999978, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.48785665376856868, -0.099999999999999978, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62280288554518959, -0.099999999999999978, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.74358903115455188, -0.099999999999999978, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.85290207679298335, -0.099999999999999978, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.95379006645397379, -0.099999999999999978, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0492213119872327, -0.099999999999999978, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1419839485283374, -0.099999999999999978, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler090 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.1203697876423452e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 7.4564398834547797e-34
+// stddev(f - f_GSL): 2.7306482533374340e-17
const testcase_ellint_3<double>
data091[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17453292519943292, 0.0000000000000000, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34906585039886584, 0.0000000000000000, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52359877559829870, 0.0000000000000000, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69813170079773168, 0.0000000000000000, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87266462599716477, 0.0000000000000000, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0471975511965974, 0.0000000000000000, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2217304763960304, 0.0000000000000000, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3962634015954631, 0.0000000000000000, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5707963267948966, 0.0000000000000000, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler091 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.10000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.1813975824747021e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 7.4564398834547797e-34
+// stddev(f - f_GSL): 2.7306482533374340e-17
const testcase_ellint_3<double>
data092[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17435710107516605, 0.0000000000000000, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34769194715329604, 0.0000000000000000, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51913731575866107, 0.0000000000000000, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68810051897078450, 0.0000000000000000, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85432615661706823, 0.0000000000000000, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0179006647340794, 0.0000000000000000, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1792120640746322, 0.0000000000000000, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3388834245070498, 0.0000000000000000, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4976955329233277, 0.0000000000000000, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler092 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.20000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2402804784409065e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 7.4564398834547797e-34
+// stddev(f - f_GSL): 2.7306482533374340e-17
const testcase_ellint_3<double>
data093[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17418191132226074, 0.0000000000000000, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34633712256943405, 0.0000000000000000, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51480684302043700, 0.0000000000000000, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67855102942481937, 0.0000000000000000, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83723056090326253, 0.0000000000000000, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99114645269578161, 0.0000000000000000, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1411014627915537, 0.0000000000000000, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2882448138013969, 0.0000000000000000, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4339343023863691, 0.0000000000000000, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler093 = 2.5000000000000020e-13;
-// Test data for k=0.0000000000000000, nu=0.29999999999999999.
+// Test data for k=0.0000000000000000, nu=0.30000000000000004.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.2972291118632678e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 7.4564398834547797e-34
+// stddev(f - f_GSL): 2.7306482533374340e-17
const testcase_ellint_3<double>
data094[10] =
{
- { 0.0000000000000000, 0.0000000000000000, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17400735186871724, 0.0000000000000000, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34500091027020219, 0.0000000000000000, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51060069523901530, 0.0000000000000000, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.66944393961375448, 0.0000000000000000, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82123776744538157, 0.0000000000000000, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.96657579245516501, 0.0000000000000000, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1066703663542414, 0.0000000000000000, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2431094251944901, 0.0000000000000000, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.3776795151134889, 0.0000000000000000, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.0000000000000000, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17400735186871724, 0.0000000000000000, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34500091027020219, 0.0000000000000000, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51060069523901530, 0.0000000000000000, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.66944393961375448, 0.0000000000000000, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82123776744538157, 0.0000000000000000, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.96657579245516501, 0.0000000000000000, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1066703663542414, 0.0000000000000000, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2431094251944901, 0.0000000000000000, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.3776795151134889, 0.0000000000000000, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler094 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.40000000000000002.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.3524218164111537e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 1.5217224251948529e-33
+// stddev(f - f_GSL): 3.9009260761963345e-17
const testcase_ellint_3<double>
data095[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17383341868035862, 0.0000000000000000, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34368286022299821, 0.0000000000000000, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50651268947499395, 0.0000000000000000, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66074441806097539, 0.0000000000000000, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.80622931670113474, 0.0000000000000000, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.94389791565435210, 0.0000000000000000, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0753503387899728, 0.0000000000000000, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2025374759127518, 0.0000000000000000, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3275651989026320, 0.0000000000000000, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler095 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.50000000000000000.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.6090167266677240e-16
+// mean(f - f_GSL): 8.8817841970012528e-17
+// variance(f - f_GSL): 9.7390235212470591e-34
+// stddev(f - f_GSL): 3.1207408609570677e-17
const testcase_ellint_3<double>
data096[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17366010776037044, 0.0000000000000000, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34238253799539309, 0.0000000000000000, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50253707775976397, 0.0000000000000000, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65242145347295766, 0.0000000000000000, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79210420018698058, 0.0000000000000000, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.92287437995632171, 0.0000000000000000, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0466900550798659, 0.0000000000000000, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1658007366618623, 0.0000000000000000, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2825498301618641, 0.0000000000000000, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler096 = 2.5000000000000020e-13;
-// Test data for k=0.0000000000000000, nu=0.59999999999999998.
+// Test data for k=0.0000000000000000, nu=0.60000000000000009.
// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 2.4581288258006758e-16
+// max(|f - f_GSL| / |f_GSL|): 2.1762127861002081e-16
+// mean(f - f_GSL): 6.6613381477509390e-17
+// variance(f - f_GSL): 5.4782007307014711e-34
+// stddev(f - f_GSL): 2.3405556457178006e-17
const testcase_ellint_3<double>
data097[10] =
{
- { 0.0000000000000000, 0.0000000000000000, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17348741514884700, 0.0000000000000000, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34109952405241289, 0.0000000000000000, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.49866850781226285, 0.0000000000000000, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64444732407062499, 0.0000000000000000, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.77877564686544720, 0.0000000000000000, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.90330743691883475, 0.0000000000000000, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0203257987604104, 0.0000000000000000, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1323247918768629, 0.0000000000000000, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2418235332245127, 0.0000000000000000, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.0000000000000000, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17348741514884700, 0.0000000000000000, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34109952405241289, 0.0000000000000000, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.49866850781226285, 0.0000000000000000, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64444732407062499, 0.0000000000000000, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.77877564686544720, 0.0000000000000000, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.90330743691883475, 0.0000000000000000, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0203257987604104, 0.0000000000000000, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1323247918768629, 0.0000000000000000, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2418235332245127, 0.0000000000000000, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler097 = 2.5000000000000020e-13;
-// Test data for k=0.0000000000000000, nu=0.69999999999999996.
+// Test data for k=0.0000000000000000, nu=0.70000000000000007.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 2.5088894797856263e-16
+// mean(f - f_GSL): 8.8817841970012528e-17
+// variance(f - f_GSL): 2.1912802922805884e-33
+// stddev(f - f_GSL): 4.6811112914356013e-17
const testcase_ellint_3<double>
data098[10] =
{
- { 0.0000000000000000, 0.0000000000000000, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17331533692234474, 0.0000000000000000, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.33983341309265935, 0.0000000000000000, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49490198805931979, 0.0000000000000000, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.63679715525145297, 0.0000000000000000, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.76616861049481944, 0.0000000000000000, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.88503143209004198, 0.0000000000000000, 0.69999999999999996,
- 1.0471975511965976 },
- { 0.99596060249112173, 0.0000000000000000, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1016495050260424, 0.0000000000000000, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2047457872617382, 0.0000000000000000, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.0000000000000000, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17331533692234474, 0.0000000000000000, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.33983341309265935, 0.0000000000000000, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49490198805931979, 0.0000000000000000, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.63679715525145297, 0.0000000000000000, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.76616861049481944, 0.0000000000000000, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.88503143209004187, 0.0000000000000000, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 0.99596060249112173, 0.0000000000000000, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1016495050260424, 0.0000000000000000, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2047457872617380, 0.0000000000000000, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler098 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.80000000000000004.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 3.8375904358197891e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.2325951644078310e-33
+// stddev(f - f_GSL): 3.5108334685767011e-17
const testcase_ellint_3<double>
data099[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17314386919344210, 0.0000000000000000, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33858381342073240, 0.0000000000000000, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49123285640844727, 0.0000000000000000, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62944854858904509, 0.0000000000000000, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.75421778305499343, 0.0000000000000000, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.86790634112156617, 0.0000000000000000, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.97334918087427558, 0.0000000000000000, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0734012615283985, 0.0000000000000000, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1708024551734544, 0.0000000000000000, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler099 = 2.5000000000000020e-13;
// Test data for k=0.0000000000000000, nu=0.90000000000000002.
// max(|f - f_GSL|): 1.1102230246251565e-16
// max(|f - f_GSL| / |f_GSL|): 1.7838310376154469e-16
+// mean(f - f_GSL): 3.3306690738754695e-17
+// variance(f - f_GSL): 1.3695501826753678e-34
+// stddev(f - f_GSL): 1.1702778228589003e-17
const testcase_ellint_3<double>
data100[10] =
{
{ 0.0000000000000000, 0.0000000000000000, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17297300811030597, 0.0000000000000000, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33735034635360817, 0.0000000000000000, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.48765675230233130, 0.0000000000000000, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62238126886123568, 0.0000000000000000, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.74286600807269243, 0.0000000000000000, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.85181283909264949, 0.0000000000000000, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.95228683995371133, 0.0000000000000000, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0472730487412552, 0.0000000000000000, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1395754288497419, 0.0000000000000000, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler100 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.1735566504509650e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data101[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17454173353063659, 0.10000000000000009, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34913506721468091, 0.10000000000000009, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52382550016538942, 0.10000000000000009, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69864700854177020, 0.10000000000000009, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87361792586964870, 0.10000000000000009, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0487386319621683, 0.10000000000000009, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2239913752078757, 0.10000000000000009, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3993423113684049, 0.10000000000000009, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5747455615173562, 0.10000000000000009, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler101 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3097339877269682e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data102[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17436589347616613, 0.10000000000000009, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34776067871237359, 0.10000000000000009, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51936064354727796, 0.10000000000000009, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68860303749364349, 0.10000000000000009, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85524561882332051, 0.10000000000000009, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0193708301908335, 0.10000000000000009, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1813474067123044, 0.10000000000000009, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3417670770424983, 0.10000000000000009, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5013711111199950, 0.10000000000000009, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler102 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.20000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.4399947764827574e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data103[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17419068786141340, 0.10000000000000009, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34640537686230133, 0.10000000000000009, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51502689171753946, 0.10000000000000009, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67904147863672715, 0.10000000000000009, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83811885126105179, 0.10000000000000009, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99255278555742787, 0.10000000000000009, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1431260546194930, 0.10000000000000009, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2909589656532101, 0.10000000000000009, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4373749386463430, 0.10000000000000009, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler103 = 2.5000000000000020e-13;
-// Test data for k=0.10000000000000009, nu=0.29999999999999999.
+// Test data for k=0.10000000000000009, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5650492137236872e-16
+// mean(f - f_GSL): -7.7715611723760953e-17
+// variance(f - f_GSL): 1.6571557210371951e-32
+// stddev(f - f_GSL): 1.2873056051447903e-16
const testcase_ellint_3<double>
data104[10] =
{
- { 0.0000000000000000, 0.10000000000000009, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17401611261390104, 0.10000000000000009, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34506869507511773, 0.10000000000000009, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51081757604259859, 0.10000000000000009, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.66992297597712303, 0.10000000000000009, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82209722856174228, 0.10000000000000009, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.96792430487669590, 0.10000000000000009, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1085964108954092, 0.10000000000000009, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2456748370836999, 0.10000000000000009, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.3809159606704959, 0.10000000000000009, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.10000000000000009, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17401611261390104, 0.10000000000000009, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34506869507511773, 0.10000000000000009, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51081757604259859, 0.10000000000000009, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.66992297597712303, 0.10000000000000009, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82209722856174228, 0.10000000000000009, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.96792430487669590, 0.10000000000000009, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1085964108954092, 0.10000000000000009, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2456748370836999, 0.10000000000000009, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.3809159606704959, 0.10000000000000009, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler104 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.6854758534459740e-16
+// mean(f - f_GSL): -8.8817841970012528e-17
+// variance(f - f_GSL): 1.5582437633995295e-32
+// stddev(f - f_GSL): 1.2482963443828271e-16
const testcase_ellint_3<double>
data105[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17384216369897931, 0.10000000000000009, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34375018311376787, 0.10000000000000009, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50672650758380455, 0.10000000000000009, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66121264213337616, 0.10000000000000009, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.80706202005774441, 0.10000000000000009, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.94519376138245870, 0.10000000000000009, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0771880300759584, 0.10000000000000009, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2049711557188272, 0.10000000000000009, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3306223265207477, 0.10000000000000009, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler105 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.8017534281650347e-16
+// mean(f - f_GSL): -1.2212453270876723e-16
+// variance(f - f_GSL): 1.2797685595888714e-32
+// stddev(f - f_GSL): 1.1312685620969369e-16
const testcase_ellint_3<double>
data106[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17366883711936548, 0.10000000000000009, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34244940634881882, 0.10000000000000009, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50274793281634367, 0.10000000000000009, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65287941633275082, 0.10000000000000009, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79291198790315398, 0.10000000000000009, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.92412201537880323, 0.10000000000000009, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0484480076799372, 0.10000000000000009, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1681168130475206, 0.10000000000000009, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2854480708580160, 0.10000000000000009, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler106 = 2.5000000000000020e-13;
-// Test data for k=0.10000000000000009, nu=0.59999999999999998.
+// Test data for k=0.10000000000000009, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.9142834151672032e-16
+// mean(f - f_GSL): -5.5511151231257827e-17
+// variance(f - f_GSL): 3.4238754566884194e-33
+// stddev(f - f_GSL): 5.8513891142945020e-17
const testcase_ellint_3<double>
data107[10] =
{
- { 0.0000000000000000, 0.10000000000000009, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17349612891469013, 0.10000000000000009, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34116594505539444, 0.10000000000000009, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.49887649430466674, 0.10000000000000009, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64489553282165146, 0.10000000000000009, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.77956016553782437, 0.10000000000000009, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.90451074530096287, 0.10000000000000009, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0220113666961632, 0.10000000000000009, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1345351441065563, 0.10000000000000009, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2445798942989255, 0.10000000000000009, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.10000000000000009, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17349612891469013, 0.10000000000000009, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34116594505539444, 0.10000000000000009, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.49887649430466674, 0.10000000000000009, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64489553282165146, 0.10000000000000009, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.77956016553782426, 0.10000000000000009, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.90451074530096287, 0.10000000000000009, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0220113666961632, 0.10000000000000009, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1345351441065563, 0.10000000000000009, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2445798942989252, 0.10000000000000009, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler107 = 2.5000000000000020e-13;
-// Test data for k=0.10000000000000009, nu=0.69999999999999996.
+// Test data for k=0.10000000000000009, nu=0.70000000000000007.
// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.5172091551439012e-16
+// max(|f - f_GSL| / |f_GSL|): 6.0351096586675613e-16
+// mean(f - f_GSL): -1.2212453270876723e-16
+// variance(f - f_GSL): 1.2797685595888714e-32
+// stddev(f - f_GSL): 1.1312685620969369e-16
const testcase_ellint_3<double>
data108[10] =
{
- { 0.0000000000000000, 0.10000000000000009, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17332403516105047, 0.10000000000000009, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.33989939374896883, 0.10000000000000009, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49510719568614070, 0.10000000000000009, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.63723607776354974, 0.10000000000000009, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.76693133887935327, 0.10000000000000009, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.88619382078823805, 0.10000000000000009, 0.69999999999999996,
- 1.0471975511965976 },
- { 0.99758012018676490, 0.10000000000000009, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1037642270814410, 0.10000000000000009, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2073745911083185, 0.10000000000000009, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.10000000000000009, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17332403516105047, 0.10000000000000009, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.33989939374896883, 0.10000000000000009, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49510719568614070, 0.10000000000000009, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.63723607776354974, 0.10000000000000009, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.76693133887935327, 0.10000000000000009, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.88619382078823794, 0.10000000000000009, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 0.99758012018676501, 0.10000000000000009, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1037642270814410, 0.10000000000000009, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2073745911083185, 0.10000000000000009, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler108 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1294144515772258e-16
+// mean(f - f_GSL): -9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data109[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17315255197057014, 0.10000000000000009, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33864936055747991, 0.10000000000000009, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49143537041117613, 0.10000000000000009, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62987861760047492, 0.10000000000000009, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.75496005490917517, 0.10000000000000009, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.86903081862701881, 0.10000000000000009, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.97490814820725591, 0.10000000000000009, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0754290107171083, 0.10000000000000009, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1733158866987732, 0.10000000000000009, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler109 = 2.5000000000000020e-13;
// Test data for k=0.10000000000000009, nu=0.90000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2325599449457852e-16
+// mean(f - f_GSL): -6.6613381477509390e-17
+// variance(f - f_GSL): 1.7591111235252501e-32
+// stddev(f - f_GSL): 1.3263148659067538e-16
const testcase_ellint_3<double>
data110[10] =
{
{ 0.0000000000000000, 0.10000000000000009, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17298167549096563, 0.10000000000000009, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33741546662741589, 0.10000000000000009, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.48785665376856868, 0.10000000000000009, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62280288554518959, 0.10000000000000009, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.74358903115455188, 0.10000000000000009, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.85290207679298335, 0.10000000000000009, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.95379006645397379, 0.10000000000000009, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0492213119872327, 0.10000000000000009, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1419839485283374, 0.10000000000000009, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler110 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.0000000000000000.
+// Test data for k=0.20000000000000018, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2156475739151676e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
const testcase_ellint_3<double>
data111[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.0000000000000000,
- 0.0000000000000000 },
- { 0.17456817290292809, 0.19999999999999996, 0.0000000000000000,
- 0.17453292519943295 },
- { 0.34934315932086801, 0.19999999999999996, 0.0000000000000000,
- 0.34906585039886590 },
- { 0.52450880529443988, 0.19999999999999996, 0.0000000000000000,
- 0.52359877559829882 },
- { 0.70020491009844876, 0.19999999999999996, 0.0000000000000000,
- 0.69813170079773179 },
- { 0.87651006649967955, 0.19999999999999996, 0.0000000000000000,
- 0.87266462599716477 },
- { 1.0534305870298994, 0.19999999999999996, 0.0000000000000000,
- 1.0471975511965976 },
- { 1.2308975521670784, 0.19999999999999996, 0.0000000000000000,
- 1.2217304763960306 },
- { 1.4087733584990738, 0.19999999999999996, 0.0000000000000000,
- 1.3962634015954636 },
- { 1.5868678474541660, 0.19999999999999996, 0.0000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.0000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17456817290292809, 0.20000000000000018, 0.0000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34934315932086801, 0.20000000000000018, 0.0000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.52450880529443988, 0.20000000000000018, 0.0000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.70020491009844876, 0.20000000000000018, 0.0000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.87651006649967955, 0.20000000000000018, 0.0000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.0534305870298994, 0.20000000000000018, 0.0000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.2308975521670784, 0.20000000000000018, 0.0000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.4087733584990738, 0.20000000000000018, 0.0000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.5868678474541660, 0.20000000000000018, 0.0000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler111 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.10000000000000001.
+// Test data for k=0.20000000000000018, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3374593253183472e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
const testcase_ellint_3<double>
data112[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.10000000000000001,
- 0.0000000000000000 },
- { 0.17439228502691748, 0.19999999999999996, 0.10000000000000001,
- 0.17453292519943295 },
- { 0.34796731137565740, 0.19999999999999996, 0.10000000000000001,
- 0.34906585039886590 },
- { 0.52003370294544848, 0.19999999999999996, 0.10000000000000001,
- 0.52359877559829882 },
- { 0.69012222258631462, 0.19999999999999996, 0.10000000000000001,
- 0.69813170079773179 },
- { 0.85803491465566772, 0.19999999999999996, 0.10000000000000001,
- 0.87266462599716477 },
- { 1.0238463961099364, 0.19999999999999996, 0.10000000000000001,
- 1.0471975511965976 },
- { 1.1878691059202153, 0.19999999999999996, 0.10000000000000001,
- 1.2217304763960306 },
- { 1.3505985031831940, 0.19999999999999996, 0.10000000000000001,
- 1.3962634015954636 },
- { 1.5126513474261087, 0.19999999999999996, 0.10000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.10000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17439228502691748, 0.20000000000000018, 0.10000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34796731137565740, 0.20000000000000018, 0.10000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.52003370294544848, 0.20000000000000018, 0.10000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.69012222258631462, 0.20000000000000018, 0.10000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.85803491465566772, 0.20000000000000018, 0.10000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0238463961099364, 0.20000000000000018, 0.10000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.1878691059202153, 0.20000000000000018, 0.10000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3505985031831940, 0.20000000000000018, 0.10000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.5126513474261087, 0.20000000000000018, 0.10000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler112 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.20000000000000001.
+// Test data for k=0.20000000000000018, nu=0.20000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4549984059502760e-16
+// mean(f - f_GSL): -5.5511151231257830e-18
+// variance(f - f_GSL): 2.4960052079258576e-32
+// stddev(f - f_GSL): 1.5798750608595155e-16
const testcase_ellint_3<double>
data113[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.20000000000000001,
- 0.0000000000000000 },
- { 0.17421703179583747, 0.19999999999999996, 0.20000000000000001,
- 0.17453292519943295 },
- { 0.34661057411998791, 0.19999999999999996, 0.20000000000000001,
- 0.34906585039886590 },
- { 0.51569006052647393, 0.19999999999999996, 0.20000000000000001,
- 0.52359877559829882 },
- { 0.68052412821107244, 0.19999999999999996, 0.20000000000000001,
- 0.69813170079773179 },
- { 0.84081341263313825, 0.19999999999999996, 0.20000000000000001,
- 0.87266462599716477 },
- { 0.99683359988842890, 0.19999999999999996, 0.20000000000000001,
- 1.0471975511965976 },
- { 1.1493086715118852, 0.19999999999999996, 0.20000000000000001,
- 1.2217304763960306 },
- { 1.2992699693957541, 0.19999999999999996, 0.20000000000000001,
- 1.3962634015954636 },
- { 1.4479323932249564, 0.19999999999999996, 0.20000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.20000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17421703179583747, 0.20000000000000018, 0.20000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34661057411998791, 0.20000000000000018, 0.20000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.51569006052647393, 0.20000000000000018, 0.20000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.68052412821107244, 0.20000000000000018, 0.20000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.84081341263313825, 0.20000000000000018, 0.20000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 0.99683359988842890, 0.20000000000000018, 0.20000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.1493086715118852, 0.20000000000000018, 0.20000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.2992699693957541, 0.20000000000000018, 0.20000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.4479323932249564, 0.20000000000000018, 0.20000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler113 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.3140668101543467e-16
+// Test data for k=0.20000000000000018, nu=0.30000000000000004.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 4.5686839814758455e-16
+// mean(f - f_GSL): 5.5511151231257830e-18
+// variance(f - f_GSL): 2.3742674139102693e-32
+// stddev(f - f_GSL): 1.5408658000975521e-16
const testcase_ellint_3<double>
data114[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17404240913577704, 0.19999999999999996, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34527248032587193, 0.19999999999999996, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51147118981668416, 0.19999999999999996, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.67137107867777601, 0.19999999999999996, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82470418188668893, 0.19999999999999996, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.97202873223594299, 0.19999999999999996, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1144773569375266, 0.19999999999999996, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2535292433701000, 0.19999999999999996, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.3908453514752477, 0.19999999999999996, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17404240913577704, 0.20000000000000018, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34527248032587193, 0.20000000000000018, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51147118981668416, 0.20000000000000018, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67137107867777601, 0.20000000000000018, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82470418188668893, 0.20000000000000018, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.97202873223594299, 0.20000000000000018, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1144773569375266, 0.20000000000000018, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2535292433700997, 0.20000000000000018, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.3908453514752477, 0.20000000000000018, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler114 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.40000000000000002.
+// Test data for k=0.20000000000000018, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.6788709752760483e-16
+// mean(f - f_GSL): 1.6653345369377347e-17
+// variance(f - f_GSL): 2.2555730647450710e-32
+// stddev(f - f_GSL): 1.5018565393355888e-16
const testcase_ellint_3<double>
data115[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.40000000000000002,
- 0.0000000000000000 },
- { 0.17386841301066674, 0.19999999999999996, 0.40000000000000002,
- 0.17453292519943295 },
- { 0.34395257914113253, 0.19999999999999996, 0.40000000000000002,
- 0.34906585039886590 },
- { 0.50737088376869466, 0.19999999999999996, 0.40000000000000002,
- 0.52359877559829882 },
- { 0.66262801717277631, 0.19999999999999996, 0.40000000000000002,
- 0.69813170079773179 },
- { 0.80958766645079094, 0.19999999999999996, 0.40000000000000002,
- 0.87266462599716477 },
- { 0.94913754236162040, 0.19999999999999996, 0.40000000000000002,
- 1.0471975511965976 },
- { 1.0827985514222997, 0.19999999999999996, 0.40000000000000002,
- 1.2217304763960306 },
- { 1.2124212429050478, 0.19999999999999996, 0.40000000000000002,
- 1.3962634015954636 },
- { 1.3400002519661005, 0.19999999999999996, 0.40000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.40000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17386841301066674, 0.20000000000000018, 0.40000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34395257914113253, 0.20000000000000018, 0.40000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.50737088376869466, 0.20000000000000018, 0.40000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.66262801717277631, 0.20000000000000018, 0.40000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.80958766645079094, 0.20000000000000018, 0.40000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.94913754236162040, 0.20000000000000018, 0.40000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.0827985514222997, 0.20000000000000018, 0.40000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.2124212429050478, 0.20000000000000018, 0.40000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.3400002519661005, 0.20000000000000018, 0.40000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler115 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.50000000000000000.
+// Test data for k=0.20000000000000018, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.7788201301356829e-16
+// mean(f - f_GSL): 5.5511151231257830e-18
+// variance(f - f_GSL): 2.3742674139102693e-32
+// stddev(f - f_GSL): 1.5408658000975521e-16
const testcase_ellint_3<double>
data116[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.50000000000000000,
- 0.0000000000000000 },
- { 0.17369503942181799, 0.19999999999999996, 0.50000000000000000,
- 0.17453292519943295 },
- { 0.34265043534362660, 0.19999999999999996, 0.50000000000000000,
- 0.34906585039886590 },
- { 0.50338337208655415, 0.19999999999999996, 0.50000000000000000,
- 0.52359877559829882 },
- { 0.65426373297163609, 0.19999999999999996, 0.50000000000000000,
- 0.69813170079773179 },
- { 0.79536193036145808, 0.19999999999999996, 0.50000000000000000,
- 0.87266462599716477 },
- { 0.92791875910061605, 0.19999999999999996, 0.50000000000000000,
- 1.0471975511965976 },
- { 1.0538145052725829, 0.19999999999999996, 0.50000000000000000,
- 1.2217304763960306 },
- { 1.1752060022875899, 0.19999999999999996, 0.50000000000000000,
- 1.3962634015954636 },
- { 1.2943374404397372, 0.19999999999999996, 0.50000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.50000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17369503942181799, 0.20000000000000018, 0.50000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34265043534362660, 0.20000000000000018, 0.50000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.50338337208655415, 0.20000000000000018, 0.50000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.65426373297163609, 0.20000000000000018, 0.50000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.79536193036145808, 0.20000000000000018, 0.50000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 0.92791875910061605, 0.20000000000000018, 0.50000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.0538145052725829, 0.20000000000000018, 0.50000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.1752060022875899, 0.20000000000000018, 0.50000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.2943374404397372, 0.20000000000000018, 0.50000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler116 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.59999999999999998.
+// Test data for k=0.20000000000000018, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.8899223779598256e-16
+// max(|f - f_GSL| / |f_GSL|): 3.8910823973723625e-16
+// mean(f - f_GSL): 5.5511151231257830e-18
+// variance(f - f_GSL): 2.3742674139102693e-32
+// stddev(f - f_GSL): 1.5408658000975521e-16
const testcase_ellint_3<double>
data117[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17352228440746925, 0.19999999999999996, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34136562863713626, 0.19999999999999996, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.49950328177638481, 0.19999999999999996, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64625032705690799, 0.19999999999999996, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.78193941198403083, 0.19999999999999996, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.90817230934317128, 0.19999999999999996, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0271563751276462, 0.19999999999999996, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1412999379040518, 0.19999999999999996, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2530330675914556, 0.19999999999999996, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17352228440746925, 0.20000000000000018, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34136562863713626, 0.20000000000000018, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.49950328177638481, 0.20000000000000018, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64625032705690799, 0.20000000000000018, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.78193941198403083, 0.20000000000000018, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.90817230934317117, 0.20000000000000018, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0271563751276462, 0.20000000000000018, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1412999379040518, 0.20000000000000018, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2530330675914554, 0.20000000000000018, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler117 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 5.9999318361775115e-16
+// Test data for k=0.20000000000000018, nu=0.70000000000000007.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 4.9912771982681171e-16
+// mean(f - f_GSL): -1.6653345369377347e-17
+// variance(f - f_GSL): 2.6207864467918357e-32
+// stddev(f - f_GSL): 1.6188843216214787e-16
const testcase_ellint_3<double>
data118[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17335014404233895, 0.19999999999999996, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34009775298617811, 0.19999999999999996, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49572560201923810, 0.19999999999999996, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.63856276669886503, 0.19999999999999996, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.76924438644867565, 0.19999999999999996, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.88973060843856466, 0.19999999999999996, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0025230471636377, 0.19999999999999996, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1102356376093103, 0.19999999999999996, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2154356555075863, 0.19999999999999996, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17335014404233895, 0.20000000000000018, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34009775298617811, 0.20000000000000018, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49572560201923810, 0.20000000000000018, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.63856276669886503, 0.20000000000000018, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.76924438644867565, 0.20000000000000018, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.88973060843856466, 0.20000000000000018, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0025230471636377, 0.20000000000000018, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1102356376093101, 0.20000000000000018, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2154356555075863, 0.20000000000000018, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler118 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.80000000000000004.
+// Test data for k=0.20000000000000018, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 5.0901276230707249e-16
+// mean(f - f_GSL): -1.6653345369377347e-17
+// variance(f - f_GSL): 2.6207864467918357e-32
+// stddev(f - f_GSL): 1.6188843216214787e-16
const testcase_ellint_3<double>
data119[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.80000000000000004,
- 0.0000000000000000 },
- { 0.17317861443718538, 0.19999999999999996, 0.80000000000000004,
- 0.17453292519943295 },
- { 0.33884641598718701, 0.19999999999999996, 0.80000000000000004,
- 0.34906585039886590 },
- { 0.49204565281259494, 0.19999999999999996, 0.80000000000000004,
- 0.52359877559829882 },
- { 0.63117851188220320, 0.19999999999999996, 0.80000000000000004,
- 0.69813170079773179 },
- { 0.75721095949544170, 0.19999999999999996, 0.80000000000000004,
- 0.87266462599716477 },
- { 0.87245201443919118, 0.19999999999999996, 0.80000000000000004,
- 1.0471975511965976 },
- { 0.97966584238831089, 0.19999999999999996, 0.80000000000000004,
- 1.2217304763960306 },
- { 1.0816336325174360, 0.19999999999999996, 0.80000000000000004,
- 1.3962634015954636 },
- { 1.1810223448909909, 0.19999999999999996, 0.80000000000000004,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.80000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17317861443718538, 0.20000000000000018, 0.80000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.33884641598718701, 0.20000000000000018, 0.80000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.49204565281259494, 0.20000000000000018, 0.80000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.63117851188220320, 0.20000000000000018, 0.80000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.75721095949544170, 0.20000000000000018, 0.80000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.87245201443919118, 0.20000000000000018, 0.80000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 0.97966584238831089, 0.20000000000000018, 0.80000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.0816336325174360, 0.20000000000000018, 0.80000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.1810223448909909, 0.20000000000000018, 0.80000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler119 = 2.5000000000000020e-13;
-// Test data for k=0.19999999999999996, nu=0.90000000000000002.
+// Test data for k=0.20000000000000018, nu=0.90000000000000002.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 6.4833128442756722e-16
+// mean(f - f_GSL): -3.8857805861880476e-17
+// variance(f - f_GSL): 2.8794792590749608e-32
+// stddev(f - f_GSL): 1.6969028431454054e-16
const testcase_ellint_3<double>
data120[10] =
{
- { 0.0000000000000000, 0.19999999999999996, 0.90000000000000002,
- 0.0000000000000000 },
- { 0.17300769173837277, 0.19999999999999996, 0.90000000000000002,
- 0.17453292519943295 },
- { 0.33761123827372508, 0.19999999999999996, 0.90000000000000002,
- 0.34906585039886590 },
- { 0.48845905690769426, 0.19999999999999996, 0.90000000000000002,
- 0.52359877559829882 },
- { 0.62407720017324952, 0.19999999999999996, 0.90000000000000002,
- 0.69813170079773179 },
- { 0.74578146525124289, 0.19999999999999996, 0.90000000000000002,
- 0.87266462599716477 },
- { 0.85621583540073076, 0.19999999999999996, 0.90000000000000002,
- 1.0471975511965976 },
- { 0.95837725988001199, 0.19999999999999996, 0.90000000000000002,
- 1.2217304763960306 },
- { 1.0551821412633928, 0.19999999999999996, 0.90000000000000002,
- 1.3962634015954636 },
- { 1.1493679916141861, 0.19999999999999996, 0.90000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.20000000000000018, 0.90000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17300769173837277, 0.20000000000000018, 0.90000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.33761123827372508, 0.20000000000000018, 0.90000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.48845905690769426, 0.20000000000000018, 0.90000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.62407720017324952, 0.20000000000000018, 0.90000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.74578146525124289, 0.20000000000000018, 0.90000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.85621583540073076, 0.20000000000000018, 0.90000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 0.95837725988001199, 0.20000000000000018, 0.90000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.0551821412633928, 0.20000000000000018, 0.90000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.1493679916141861, 0.20000000000000018, 0.90000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler120 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.0000000000000000.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.3361874537309281e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data121[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17461228653000099, 0.30000000000000004, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34969146102798415, 0.30000000000000004, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52565822873726320, 0.30000000000000004, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70284226512408532, 0.30000000000000004, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.88144139195111182, 0.30000000000000004, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0614897067260520, 0.30000000000000004, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2428416824174218, 0.30000000000000004, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4251795877015927, 0.30000000000000004, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6080486199305128, 0.30000000000000004, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler121 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.10000000000000001.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.3908043711907203e-16
+// mean(f - f_GSL): 8.8817841970012528e-17
+// variance(f - f_GSL): 7.8886090522101185e-32
+// stddev(f - f_GSL): 2.8086667748613609e-16
const testcase_ellint_3<double>
data122[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17443631884814376, 0.30000000000000004, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34831316835124926, 0.30000000000000004, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52116586276523857, 0.30000000000000004, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69269385837910036, 0.30000000000000004, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.86279023163070856, 0.30000000000000004, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0315321461438263, 0.30000000000000004, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1991449111869024, 0.30000000000000004, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3659561780923213, 0.30000000000000004, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5323534693557528, 0.30000000000000004, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler122 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.20000000000000001.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.4447238179454079e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 8.1092588038633715e-32
+// stddev(f - f_GSL): 2.8476760356233243e-16
const testcase_ellint_3<double>
data123[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17426098615372088, 0.30000000000000004, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34695402664689923, 0.30000000000000004, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51680555567038933, 0.30000000000000004, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68303375225260210, 0.30000000000000004, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.84540662891295026, 0.30000000000000004, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0041834051646927, 0.30000000000000004, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1599952702345711, 0.30000000000000004, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3137179520499165, 0.30000000000000004, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4663658145259877, 0.30000000000000004, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler123 = 2.5000000000000020e-13;
-// Test data for k=0.30000000000000004, nu=0.29999999999999999.
+// Test data for k=0.30000000000000004, nu=0.30000000000000004.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.4979715256503266e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 8.1092588038633715e-32
+// stddev(f - f_GSL): 2.8476760356233243e-16
const testcase_ellint_3<double>
data124[10] =
{
- { 0.0000000000000000, 0.30000000000000004, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17408628437042842, 0.30000000000000004, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34561356761638401, 0.30000000000000004, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51257058617875850, 0.30000000000000004, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.67382207124602878, 0.30000000000000004, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.82914751587825131, 0.30000000000000004, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.97907434814374938, 0.30000000000000004, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1246399297351584, 0.30000000000000004, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2671793970398149, 0.30000000000000004, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.4081767433479091, 0.30000000000000004, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.30000000000000004, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17408628437042842, 0.30000000000000004, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34561356761638401, 0.30000000000000004, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51257058617875850, 0.30000000000000004, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67382207124602866, 0.30000000000000004, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.82914751587825131, 0.30000000000000004, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.97907434814374927, 0.30000000000000004, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1246399297351584, 0.30000000000000004, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2671793970398149, 0.30000000000000004, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.4081767433479091, 0.30000000000000004, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler124 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.40000000000000002.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.5505716921759864e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data125[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17391220945982727, 0.30000000000000004, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34429133937639689, 0.30000000000000004, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50845471668581632, 0.30000000000000004, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66502347027873854, 0.30000000000000004, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.81389191978012254, 0.30000000000000004, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.95590618002140570, 0.30000000000000004, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0924915195213121, 0.30000000000000004, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2253651604038061, 0.30000000000000004, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3563643538969763, 0.30000000000000004, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler125 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.50000000000000000.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 6.7807908859023716e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data126[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17373875742088232, 0.30000000000000004, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34298690571124157, 0.30000000000000004, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50445214859646936, 0.30000000000000004, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65660648352418516, 0.30000000000000004, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79953670639287289, 0.30000000000000004, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.93443393926588536, 0.30000000000000004, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0630838369016911, 0.30000000000000004, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1875197325653029, 0.30000000000000004, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3098448759814962, 0.30000000000000004, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler126 = 2.5000000000000020e-13;
-// Test data for k=0.30000000000000004, nu=0.59999999999999998.
+// Test data for k=0.30000000000000004, nu=0.60000000000000009.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 7.0057999499931649e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 7.6710027454072543e-32
+// stddev(f - f_GSL): 2.7696575140993974e-16
const testcase_ellint_3<double>
data127[10] =
{
- { 0.0000000000000000, 0.30000000000000004, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17356592428950823, 0.30000000000000004, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34169984536697379, 0.30000000000000004, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50055748266498457, 0.30000000000000004, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.64854298527106768, 0.30000000000000004, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.78599329284207431, 0.30000000000000004, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.91445452089128199, 0.30000000000000004, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0360412952290587, 0.30000000000000004, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1530473919778641, 0.30000000000000004, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2677758800420669, 0.30000000000000004, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.30000000000000004, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17356592428950823, 0.30000000000000004, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34169984536697379, 0.30000000000000004, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50055748266498457, 0.30000000000000004, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.64854298527106768, 0.30000000000000004, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.78599329284207431, 0.30000000000000004, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.91445452089128199, 0.30000000000000004, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0360412952290587, 0.30000000000000004, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1530473919778639, 0.30000000000000004, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2677758800420669, 0.30000000000000004, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler127 = 2.5000000000000020e-13;
-// Test data for k=0.30000000000000004, nu=0.69999999999999996.
+// Test data for k=0.30000000000000004, nu=0.70000000000000007.
// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.2239502844122443e-16
+// max(|f - f_GSL| / |f_GSL|): 7.2239502844122453e-16
+// mean(f - f_GSL): 8.8817841970012528e-17
+// variance(f - f_GSL): 7.8886090522101185e-32
+// stddev(f - f_GSL): 2.8086667748613609e-16
const testcase_ellint_3<double>
data128[10] =
{
- { 0.0000000000000000, 0.30000000000000004, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17339370613812224, 0.30000000000000004, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34042975138455933, 0.30000000000000004, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49676568368075985, 0.30000000000000004, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.64080774055753720, 0.30000000000000004, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.77318507779667278, 0.30000000000000004, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.89579782346548609, 0.30000000000000004, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0110573286052202, 0.30000000000000004, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1214710972949635, 0.30000000000000004, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2294913236274982, 0.30000000000000004, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.30000000000000004, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17339370613812224, 0.30000000000000004, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34042975138455933, 0.30000000000000004, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49676568368075985, 0.30000000000000004, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.64080774055753720, 0.30000000000000004, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.77318507779667267, 0.30000000000000004, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.89579782346548598, 0.30000000000000004, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0110573286052202, 0.30000000000000004, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1214710972949635, 0.30000000000000004, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2294913236274980, 0.30000000000000004, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler128 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.80000000000000004.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 7.4358357000101250e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 7.4564398834547801e-32
+// stddev(f - f_GSL): 2.7306482533374340e-16
const testcase_ellint_3<double>
data129[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17322209907520358, 0.30000000000000004, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33917623046949996, 0.30000000000000004, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49307204894329176, 0.30000000000000004, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.63337802830291734, 0.30000000000000004, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.76104540997689407, 0.30000000000000004, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.87832009635450714, 0.30000000000000004, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.98787879723171790, 0.30000000000000004, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0924036340069339, 0.30000000000000004, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1944567571590048, 0.30000000000000004, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler129 = 2.5000000000000020e-13;
// Test data for k=0.30000000000000004, nu=0.90000000000000002.
// max(|f - f_GSL|): 8.8817841970012523e-16
// max(|f - f_GSL| / |f_GSL|): 7.6419688299804087e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 8.1092588038633715e-32
+// stddev(f - f_GSL): 2.8476760356233243e-16
const testcase_ellint_3<double>
data130[10] =
{
{ 0.0000000000000000, 0.30000000000000004, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17305109924485945, 0.30000000000000004, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33793890239556984, 0.30000000000000004, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.48947218005089738, 0.30000000000000004, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.62623332340775151, 0.30000000000000004, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.74951596581511148, 0.30000000000000004, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.86189886597755994, 0.30000000000000004, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.96629451153092005, 0.30000000000000004, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.0655269133492682, 0.30000000000000004, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.1622376896064914, 0.30000000000000004, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler130 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4157225142938039e-16
+// Test data for k=0.40000000000000013, nu=0.0000000000000000.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.0617918857203532e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 3.6536555428928420e-32
+// stddev(f - f_GSL): 1.9114537773362040e-16
const testcase_ellint_3<double>
data131[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.0000000000000000,
- 0.0000000000000000 },
- { 0.17467414669441528, 0.39999999999999991, 0.0000000000000000,
- 0.17453292519943295 },
- { 0.35018222772483443, 0.39999999999999991, 0.0000000000000000,
- 0.34906585039886590 },
- { 0.52729015917508737, 0.39999999999999991, 0.0000000000000000,
- 0.52359877559829882 },
- { 0.70662374407341244, 0.39999999999999991, 0.0000000000000000,
- 0.69813170079773179 },
- { 0.88859210497602170, 0.39999999999999991, 0.0000000000000000,
- 0.87266462599716477 },
- { 1.0733136290471379, 0.39999999999999991, 0.0000000000000000,
- 1.0471975511965976 },
- { 1.2605612170157061, 0.39999999999999991, 0.0000000000000000,
- 1.2217304763960306 },
- { 1.4497513956433439, 0.39999999999999991, 0.0000000000000000,
- 1.3962634015954636 },
- { 1.6399998658645112, 0.39999999999999991, 0.0000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.0000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17467414669441528, 0.40000000000000013, 0.0000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.35018222772483443, 0.40000000000000013, 0.0000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.52729015917508737, 0.40000000000000013, 0.0000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.70662374407341244, 0.40000000000000013, 0.0000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.88859210497602170, 0.40000000000000013, 0.0000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.0733136290471379, 0.40000000000000013, 0.0000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.2605612170157061, 0.40000000000000013, 0.0000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.4497513956433439, 0.40000000000000013, 0.0000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.6399998658645112, 0.40000000000000013, 0.0000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler131 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.10000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.6859551010103832e-16
+// Test data for k=0.40000000000000013, nu=0.10000000000000001.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.2644663257577874e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 3.6536555428928420e-32
+// stddev(f - f_GSL): 1.9114537773362040e-16
const testcase_ellint_3<double>
data132[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.10000000000000001,
- 0.0000000000000000 },
- { 0.17449806706684670, 0.39999999999999991, 0.10000000000000001,
- 0.17453292519943295 },
- { 0.34880048623856075, 0.39999999999999991, 0.10000000000000001,
- 0.34906585039886590 },
- { 0.52277322065757392, 0.39999999999999991, 0.10000000000000001,
- 0.52359877559829882 },
- { 0.69638072056918365, 0.39999999999999991, 0.10000000000000001,
- 0.69813170079773179 },
- { 0.86968426619831540, 0.39999999999999991, 0.10000000000000001,
- 0.87266462599716477 },
- { 1.0428044206578095, 0.39999999999999991, 0.10000000000000001,
- 1.0471975511965976 },
- { 1.2158651158274378, 0.39999999999999991, 0.10000000000000001,
- 1.2217304763960306 },
- { 1.3889447129893324, 0.39999999999999991, 0.10000000000000001,
- 1.3962634015954636 },
- { 1.5620566886683604, 0.39999999999999991, 0.10000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.10000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17449806706684670, 0.40000000000000013, 0.10000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34880048623856075, 0.40000000000000013, 0.10000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.52277322065757392, 0.40000000000000013, 0.10000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.69638072056918365, 0.40000000000000013, 0.10000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.86968426619831540, 0.40000000000000013, 0.10000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0428044206578095, 0.40000000000000013, 0.10000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.2158651158274378, 0.40000000000000013, 0.10000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3889447129893324, 0.40000000000000013, 0.10000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.5620566886683604, 0.40000000000000013, 0.10000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler132 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.20000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.9444065952225719e-16
+// Test data for k=0.40000000000000013, nu=0.20000000000000001.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.4583049464169287e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 3.6536555428928420e-32
+// stddev(f - f_GSL): 1.9114537773362040e-16
const testcase_ellint_3<double>
data133[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.20000000000000001,
- 0.0000000000000000 },
- { 0.17432262290723397, 0.39999999999999991, 0.20000000000000001,
- 0.17453292519943295 },
- { 0.34743795258968596, 0.39999999999999991, 0.20000000000000001,
- 0.34906585039886590 },
- { 0.51838919472805112, 0.39999999999999991, 0.20000000000000001,
- 0.52359877559829882 },
- { 0.68663134739057907, 0.39999999999999991, 0.20000000000000001,
- 0.69813170079773179 },
- { 0.85206432981833979, 0.39999999999999991, 0.20000000000000001,
- 0.87266462599716477 },
- { 1.0149595349004430, 0.39999999999999991, 0.20000000000000001,
- 1.0471975511965976 },
- { 1.1758349405464676, 0.39999999999999991, 0.20000000000000001,
- 1.2217304763960306 },
- { 1.3353337673882637, 0.39999999999999991, 0.20000000000000001,
- 1.3962634015954636 },
- { 1.4941414344266770, 0.39999999999999991, 0.20000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.20000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17432262290723397, 0.40000000000000013, 0.20000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34743795258968596, 0.40000000000000013, 0.20000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.51838919472805101, 0.40000000000000013, 0.20000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.68663134739057907, 0.40000000000000013, 0.20000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.85206432981833979, 0.40000000000000013, 0.20000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0149595349004430, 0.40000000000000013, 0.20000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.1758349405464676, 0.40000000000000013, 0.20000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.3353337673882637, 0.40000000000000013, 0.20000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.4941414344266770, 0.40000000000000013, 0.20000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler133 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.29999999999999999.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 7.7406350888907249e-16
+// Test data for k=0.40000000000000013, nu=0.30000000000000004.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.6443810533344347e-16
+// mean(f - f_GSL): 1.3322676295501878e-16
+// variance(f - f_GSL): 3.5060484676489415e-32
+// stddev(f - f_GSL): 1.8724445165742405e-16
const testcase_ellint_3<double>
data134[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17414781013591540, 0.39999999999999991, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34609415696777285, 0.39999999999999991, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51413131295862535, 0.39999999999999991, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.67733527622935630, 0.39999999999999991, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.83558675182733266, 0.39999999999999991, 0.29999999999999999,
- 0.87266462599716477 },
- { 0.98940140808865906, 0.39999999999999991, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1396968797728058, 0.39999999999999991, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.2875920037865090, 0.39999999999999991, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.4342789859950078, 0.39999999999999991, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17414781013591540, 0.40000000000000013, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34609415696777285, 0.40000000000000013, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51413131295862535, 0.40000000000000013, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67733527622935619, 0.40000000000000013, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.83558675182733266, 0.40000000000000013, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.98940140808865906, 0.40000000000000013, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1396968797728058, 0.40000000000000013, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2875920037865090, 0.40000000000000013, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.4342789859950078, 0.40000000000000013, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler134 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.4314214811441816e-16
+// Test data for k=0.40000000000000013, nu=0.40000000000000002.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.8235661108581362e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 3.6536555428928420e-32
+// stddev(f - f_GSL): 1.9114537773362040e-16
const testcase_ellint_3<double>
data135[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.40000000000000002,
- 0.0000000000000000 },
- { 0.17397362471112707, 0.39999999999999991, 0.40000000000000002,
- 0.17453292519943295 },
- { 0.34476864603333196, 0.39999999999999991, 0.40000000000000002,
- 0.34906585039886590 },
- { 0.50999329415379346, 0.39999999999999991, 0.40000000000000002,
- 0.52359877559829882 },
- { 0.66845674551396006, 0.39999999999999991, 0.40000000000000002,
- 0.69813170079773179 },
- { 0.82012848346231748, 0.39999999999999991, 0.40000000000000002,
- 0.87266462599716477 },
- { 0.96582449258349057, 0.39999999999999991, 0.40000000000000002,
- 1.0471975511965976 },
- { 1.1068473749476286, 0.39999999999999991, 0.40000000000000002,
- 1.2217304763960306 },
- { 1.2447132729159989, 0.39999999999999991, 0.40000000000000002,
- 1.3962634015954636 },
- { 1.3809986210732901, 0.39999999999999991, 0.40000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.40000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17397362471112707, 0.40000000000000013, 0.40000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34476864603333196, 0.40000000000000013, 0.40000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.50999329415379346, 0.40000000000000013, 0.40000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.66845674551396006, 0.40000000000000013, 0.40000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.82012848346231748, 0.40000000000000013, 0.40000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.96582449258349057, 0.40000000000000013, 0.40000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.1068473749476286, 0.40000000000000013, 0.40000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.2447132729159989, 0.40000000000000013, 0.40000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.3809986210732901, 0.40000000000000013, 0.40000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler135 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.50000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.6621057007519435e-16
+// Test data for k=0.40000000000000013, nu=0.50000000000000000.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.9965792755639576e-16
+// mean(f - f_GSL): 5.5511151231257827e-17
+// variance(f - f_GSL): 4.6032103362144306e-32
+// stddev(f - f_GSL): 2.1455093419079840e-16
const testcase_ellint_3<double>
data136[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.50000000000000000,
- 0.0000000000000000 },
- { 0.17380006262854136, 0.39999999999999991, 0.50000000000000000,
- 0.17453292519943295 },
- { 0.34346098216756610, 0.39999999999999991, 0.50000000000000000,
- 0.34906585039886590 },
- { 0.50596929935059420, 0.39999999999999991, 0.50000000000000000,
- 0.52359877559829882 },
- { 0.65996392089131251, 0.39999999999999991, 0.50000000000000000,
- 0.69813170079773179 },
- { 0.80558463511364786, 0.39999999999999991, 0.50000000000000000,
- 0.87266462599716477 },
- { 0.94397834522857704, 0.39999999999999991, 0.50000000000000000,
- 1.0471975511965976 },
- { 1.0768075114108115, 0.39999999999999991, 0.50000000000000000,
- 1.2217304763960306 },
- { 1.2059184624251333, 0.39999999999999991, 0.50000000000000000,
- 1.3962634015954636 },
- { 1.3331797176377398, 0.39999999999999991, 0.50000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.50000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17380006262854136, 0.40000000000000013, 0.50000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34346098216756610, 0.40000000000000013, 0.50000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.50596929935059420, 0.40000000000000013, 0.50000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.65996392089131251, 0.40000000000000013, 0.50000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.80558463511364786, 0.40000000000000013, 0.50000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 0.94397834522857704, 0.40000000000000013, 0.50000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.0768075114108115, 0.40000000000000013, 0.50000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.2059184624251333, 0.40000000000000013, 0.50000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.3331797176377398, 0.40000000000000013, 0.50000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler136 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.59999999999999998.
+// Test data for k=0.40000000000000013, nu=0.60000000000000009.
// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 6.8853630717730749e-16
+// max(|f - f_GSL| / |f_GSL|): 6.8853630717730769e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 7.4564398834547801e-32
+// stddev(f - f_GSL): 2.7306482533374340e-16
const testcase_ellint_3<double>
data137[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17362711992081245, 0.39999999999999991, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34217074276403953, 0.39999999999999991, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50205389185761606, 0.39999999999999991, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.65182834920372734, 0.39999999999999991, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.79186512820565136, 0.39999999999999991, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.92365535916287134, 0.39999999999999991, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0491915663957907, 0.39999999999999991, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1705934291745106, 0.39999999999999991, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.2899514672527024, 0.39999999999999991, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17362711992081245, 0.40000000000000013, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34217074276403953, 0.40000000000000013, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50205389185761606, 0.40000000000000013, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.65182834920372734, 0.40000000000000013, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.79186512820565136, 0.40000000000000013, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.92365535916287134, 0.40000000000000013, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0491915663957907, 0.40000000000000013, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1705934291745106, 0.40000000000000013, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.2899514672527022, 0.40000000000000013, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler137 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.69999999999999996.
+// Test data for k=0.40000000000000013, nu=0.70000000000000007.
// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.1018730557776469e-16
+// max(|f - f_GSL| / |f_GSL|): 7.1018730557776478e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 7.2449204663526958e-32
+// stddev(f - f_GSL): 2.6916389925754710e-16
const testcase_ellint_3<double>
data138[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17345479265712868, 0.39999999999999991, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34089751955950354, 0.39999999999999991, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.49824200167361332, 0.39999999999999991, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.64402450341199402, 0.39999999999999991, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.77889207804122873, 0.39999999999999991, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.90468169720957992, 0.39999999999999991, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0236847823692916, 0.39999999999999991, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1382465247425166, 0.39999999999999991, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2506255923253344, 0.39999999999999991, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17345479265712868, 0.40000000000000013, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34089751955950354, 0.40000000000000013, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.49824200167361332, 0.40000000000000013, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.64402450341199402, 0.40000000000000013, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.77889207804122862, 0.40000000000000013, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.90468169720957992, 0.40000000000000013, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0236847823692914, 0.40000000000000013, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1382465247425166, 0.40000000000000013, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2506255923253342, 0.40000000000000013, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler138 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.80000000000000004.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.3122171115555478e-16
+// Test data for k=0.40000000000000013, nu=0.80000000000000004.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 6.6611561645571024e-16
+// mean(f - f_GSL): 1.4432899320127036e-16
+// variance(f - f_GSL): 3.3614848372554304e-32
+// stddev(f - f_GSL): 1.8334352558122773e-16
const testcase_ellint_3<double>
data139[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.80000000000000004,
- 0.0000000000000000 },
- { 0.17328307694277154, 0.39999999999999991, 0.80000000000000004,
- 0.17453292519943295 },
- { 0.33964091800132007, 0.39999999999999991, 0.80000000000000004,
- 0.34906585039886590 },
- { 0.49452889372467440, 0.39999999999999991, 0.80000000000000004,
- 0.52359877559829882 },
- { 0.63652940095937316, 0.39999999999999991, 0.80000000000000004,
- 0.69813170079773179 },
- { 0.76659772511159097, 0.39999999999999991, 0.80000000000000004,
- 0.87266462599716477 },
- { 0.88691047977338111, 0.39999999999999991, 0.80000000000000004,
- 1.0471975511965976 },
- { 1.0000273200611638, 0.39999999999999991, 0.80000000000000004,
- 1.2217304763960306 },
- { 1.1084787902188009, 0.39999999999999991, 0.80000000000000004,
- 1.3962634015954636 },
- { 1.2146499565727209, 0.39999999999999991, 0.80000000000000004,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.80000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17328307694277154, 0.40000000000000013, 0.80000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.33964091800132007, 0.40000000000000013, 0.80000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.49452889372467440, 0.40000000000000013, 0.80000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.63652940095937316, 0.40000000000000013, 0.80000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.76659772511159097, 0.40000000000000013, 0.80000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.88691047977338111, 0.40000000000000013, 0.80000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.0000273200611638, 0.40000000000000013, 0.80000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.1084787902188007, 0.40000000000000013, 0.80000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.2146499565727209, 0.40000000000000013, 0.80000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler139 = 2.5000000000000020e-13;
-// Test data for k=0.39999999999999991, nu=0.90000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 7.5168974431077345e-16
+// Test data for k=0.40000000000000013, nu=0.90000000000000002.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 5.6376730823308004e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 3.9580000279318129e-32
+// stddev(f - f_GSL): 1.9894722988601306e-16
const testcase_ellint_3<double>
data140[10] =
{
- { 0.0000000000000000, 0.39999999999999991, 0.90000000000000002,
- 0.0000000000000000 },
- { 0.17311196891868127, 0.39999999999999991, 0.90000000000000002,
- 0.17453292519943295 },
- { 0.33840055664911906, 0.39999999999999991, 0.90000000000000002,
- 0.34906585039886590 },
- { 0.49091013944075329, 0.39999999999999991, 0.90000000000000002,
- 0.52359877559829882 },
- { 0.62932228186809580, 0.39999999999999991, 0.90000000000000002,
- 0.69813170079773179 },
- { 0.75492278323019801, 0.39999999999999991, 0.90000000000000002,
- 0.87266462599716477 },
- { 0.87021659043854294, 0.39999999999999991, 0.90000000000000002,
- 1.0471975511965976 },
- { 0.97800245228239246, 0.39999999999999991, 0.90000000000000002,
- 1.2217304763960306 },
- { 1.0809625773173697, 0.39999999999999991, 0.90000000000000002,
- 1.3962634015954636 },
- { 1.1815758115929846, 0.39999999999999991, 0.90000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.40000000000000013, 0.90000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17311196891868127, 0.40000000000000013, 0.90000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.33840055664911906, 0.40000000000000013, 0.90000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.49091013944075329, 0.40000000000000013, 0.90000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.62932228186809580, 0.40000000000000013, 0.90000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.75492278323019801, 0.40000000000000013, 0.90000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.87021659043854294, 0.40000000000000013, 0.90000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 0.97800245228239246, 0.40000000000000013, 0.90000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.0809625773173697, 0.40000000000000013, 0.90000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.1815758115929846, 0.40000000000000013, 0.90000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler140 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.0000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.1201497220602069e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data141[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17475385514035785, 0.50000000000000000, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35081868470101585, 0.50000000000000000, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52942862705190574, 0.50000000000000000, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71164727562630314, 0.50000000000000000, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.89824523594227768, 0.50000000000000000, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0895506700518851, 0.50000000000000000, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2853005857432931, 0.50000000000000000, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4845545520549484, 0.50000000000000000, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6857503548125963, 0.50000000000000000, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler141 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.10000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.1662857256911530e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data142[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17457763120814676, 0.50000000000000000, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34943246340849154, 0.50000000000000000, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52487937869610790, 0.50000000000000000, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70127785096388384, 0.50000000000000000, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87898815988624479, 0.50000000000000000, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0582764576094172, 0.50000000000000000, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2391936844060205, 0.50000000000000000, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4214793542995841, 0.50000000000000000, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6045524936084892, 0.50000000000000000, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler142 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.20000000000000001.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.2114786773102175e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data143[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17440204336345433, 0.50000000000000000, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34806552388338824, 0.50000000000000000, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52046416757129810, 0.50000000000000000, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69140924550993865, 0.50000000000000000, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.86104678636125520, 0.50000000000000000, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0297439459053981, 0.50000000000000000, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1979214112912033, 0.50000000000000000, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3659033858648930, 0.50000000000000000, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5338490483665983, 0.50000000000000000, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler143 = 2.5000000000000020e-13;
-// Test data for k=0.50000000000000000, nu=0.29999999999999999.
+// Test data for k=0.50000000000000000, nu=0.30000000000000004.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.2557837230041312e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data144[10] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17422708752228896, 0.50000000000000000, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34671739434855858, 0.50000000000000000, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51617616305641878, 0.50000000000000000, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.68200047612545167, 0.50000000000000000, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.84427217869498372, 0.50000000000000000, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0035637821389782, 0.50000000000000000, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1606800483933111, 0.50000000000000000, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.3164407134643459, 0.50000000000000000, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.4715681939859637, 0.50000000000000000, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.50000000000000000, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17422708752228896, 0.50000000000000000, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34671739434855858, 0.50000000000000000, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51617616305641878, 0.50000000000000000, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.68200047612545167, 0.50000000000000000, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.84427217869498372, 0.50000000000000000, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0035637821389782, 0.50000000000000000, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1606800483933111, 0.50000000000000000, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.3164407134643459, 0.50000000000000000, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.4715681939859637, 0.50000000000000000, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler144 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.40000000000000002.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.2992508582900068e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 4.5280752914704349e-33
+// stddev(f - f_GSL): 6.7290974814386775e-17
const testcase_ellint_3<double>
data145[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17405275963859917, 0.50000000000000000, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34538761957029329, 0.50000000000000000, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51200902646603907, 0.50000000000000000, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67301522212868792, 0.50000000000000000, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.82853844466313320, 0.50000000000000000, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.97942097862681488, 0.50000000000000000, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1268429801220614, 0.50000000000000000, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2720406704533922, 0.50000000000000000, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4161679518465340, 0.50000000000000000, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler145 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.50000000000000000.
// max(|f - f_GSL|): 2.2204460492503131e-16
// max(|f - f_GSL| / |f_GSL|): 3.3419255755184137e-16
+// mean(f - f_GSL): 4.1633363423443370e-17
+// variance(f - f_GSL): 4.0182982790301585e-33
+// stddev(f - f_GSL): 6.3390048738190441e-17
const testcase_ellint_3<double>
data146[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17387905570381157, 0.50000000000000000, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34407576010465207, 0.50000000000000000, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50795686560160824, 0.50000000000000000, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66442115453330164, 0.50000000000000000, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.81373829119355345, 0.50000000000000000, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.95705743313235825, 0.50000000000000000, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0959131991362554, 0.50000000000000000, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2318900529754597, 0.50000000000000000, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3664739530045971, 0.50000000000000000, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler146 = 2.5000000000000020e-13;
-// Test data for k=0.50000000000000000, nu=0.59999999999999998.
-// max(|f - f_GSL|): 2.2204460492503131e-16
+// Test data for k=0.50000000000000000, nu=0.60000000000000009.
+// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3838494104749599e-16
+// mean(f - f_GSL): 3.0531133177191807e-17
+// variance(f - f_GSL): 2.1114849726094331e-32
+// stddev(f - f_GSL): 1.4530949633831345e-16
const testcase_ellint_3<double>
data147[10] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17370597174637581, 0.50000000000000000, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34278139158591414, 0.50000000000000000, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50401419439302708, 0.50000000000000000, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.65618938076167210, 0.50000000000000000, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.79977959248855424, 0.50000000000000000, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.93625925190753545, 0.50000000000000000, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0674905658379708, 0.50000000000000000, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.1953481298023050, 0.50000000000000000, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.3215740290190876, 0.50000000000000000, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.50000000000000000, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17370597174637581, 0.50000000000000000, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34278139158591414, 0.50000000000000000, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50401419439302708, 0.50000000000000000, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.65618938076167210, 0.50000000000000000, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.79977959248855424, 0.50000000000000000, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.93625925190753534, 0.50000000000000000, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0674905658379708, 0.50000000000000000, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.1953481298023048, 0.50000000000000000, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.3215740290190874, 0.50000000000000000, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler147 = 2.5000000000000020e-13;
-// Test data for k=0.50000000000000000, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 3.4250604066951477e-16
+// Test data for k=0.50000000000000000, nu=0.70000000000000007.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.4674219826132847e-16
+// mean(f - f_GSL): 7.4940054162198071e-17
+// variance(f - f_GSL): 1.6823592487044846e-32
+// stddev(f - f_GSL): 1.2970579203352812e-16
const testcase_ellint_3<double>
data148[10] =
{
- { 0.0000000000000000, 0.50000000000000000, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17353350383131641, 0.50000000000000000, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34150410405436771, 0.50000000000000000, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50017589696443487, 0.50000000000000000, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.64829398188419951, 0.50000000000000000, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.78658270782402073, 0.50000000000000000, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.91684738336675053, 0.50000000000000000, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0412486789555935, 0.50000000000000000, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1619021847612001, 0.50000000000000000, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.2807475181182502, 0.50000000000000000, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.50000000000000000, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17353350383131641, 0.50000000000000000, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34150410405436771, 0.50000000000000000, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50017589696443476, 0.50000000000000000, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.64829398188419951, 0.50000000000000000, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.78658270782402062, 0.50000000000000000, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.91684738336675053, 0.50000000000000000, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0412486789555933, 0.50000000000000000, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1619021847612001, 0.50000000000000000, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.2807475181182499, 0.50000000000000000, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler148 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5715240651179632e-16
+// mean(f - f_GSL): 1.9428902930940238e-17
+// variance(f - f_GSL): 2.2263750157116445e-32
+// stddev(f - f_GSL): 1.4921042241450980e-16
const testcase_ellint_3<double>
data149[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17336164805979126, 0.50000000000000000, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34024350132086773, 0.50000000000000000, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49643719555734073, 0.50000000000000000, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.64071162456976150, 0.50000000000000000, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.77407836177211908, 0.50000000000000000, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.89867058251905652, 0.50000000000000000, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0169181822134910, 0.50000000000000000, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1311363312779448, 0.50000000000000000, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2434165408189539, 0.50000000000000000, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler149 = 2.5000000000000020e-13;
// Test data for k=0.50000000000000000, nu=0.90000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.4664649039489274e-16
+// mean(f - f_GSL): -1.9428902930940238e-17
+// variance(f - f_GSL): 7.1986981476874020e-33
+// stddev(f - f_GSL): 8.4845142157270271e-17
const testcase_ellint_3<double>
data150[10] =
{
{ 0.0000000000000000, 0.50000000000000000, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17319040056865681, 0.50000000000000000, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33899920036578557, 0.50000000000000000, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49279362182695174, 0.50000000000000000, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.63342123379746151, 0.50000000000000000, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.76220595179550321, 0.50000000000000000, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.88160004743532294, 0.50000000000000000, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 0.99427448642310123, 0.50000000000000000, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1027091512470095, 0.50000000000000000, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2091116095504744, 0.50000000000000000, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler150 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.3664899092028927e-16
+// mean(f - f_GSL): 3.6082248300317589e-17
+// variance(f - f_GSL): 2.8464769039785474e-32
+// stddev(f - f_GSL): 1.6871505279549146e-16
const testcase_ellint_3<double>
data151[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17485154362988359, 0.60000000000000009, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35160509865544326, 0.60000000000000009, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53210652578446138, 0.60000000000000009, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71805304664485659, 0.60000000000000009, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.91082759030195970, 0.60000000000000009, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1112333229323361, 0.60000000000000009, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3191461190365270, 0.60000000000000009, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5332022105084775, 0.60000000000000009, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.7507538029157526, 0.60000000000000009, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler151 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.4937942733669112e-16
+// mean(f - f_GSL): 3.6082248300317589e-17
+// variance(f - f_GSL): 2.8464769039785474e-32
+// stddev(f - f_GSL): 1.6871505279549146e-16
const testcase_ellint_3<double>
data152[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17467514275022011, 0.60000000000000009, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35021333086258255, 0.60000000000000009, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52751664092962691, 0.60000000000000009, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.70752126971957874, 0.60000000000000009, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.89111058756112871, 0.60000000000000009, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0789241202877768, 0.60000000000000009, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2710800210399946, 0.60000000000000009, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4669060574440276, 0.60000000000000009, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6648615773343014, 0.60000000000000009, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler152 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.20000000000000001.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 4.1891472451898755e-16
+// mean(f - f_GSL): 1.3877787807814457e-17
+// variance(f - f_GSL): 5.7088367857700656e-32
+// stddev(f - f_GSL): 2.3893172216702547e-16
const testcase_ellint_3<double>
data153[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17449937871800650, 0.60000000000000009, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34884093647346553, 0.60000000000000009, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52306221119844087, 0.60000000000000009, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69749955678982223, 0.60000000000000009, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87274610682416853, 0.60000000000000009, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0494620540750792, 0.60000000000000009, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2280847305507339, 0.60000000000000009, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4085436279696888, 0.60000000000000009, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5901418016279374, 0.60000000000000009, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler153 = 2.5000000000000020e-13;
-// Test data for k=0.60000000000000009, nu=0.29999999999999999.
+// Test data for k=0.60000000000000009, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.7339932380431439e-16
+// mean(f - f_GSL): 3.6082248300317589e-17
+// variance(f - f_GSL): 2.8464769039785474e-32
+// stddev(f - f_GSL): 1.6871505279549146e-16
const testcase_ellint_3<double>
data154[10] =
{
- { 0.0000000000000000, 0.60000000000000009, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17432424744393932, 0.60000000000000009, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34748744127146447, 0.60000000000000009, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.51873632743924825, 0.60000000000000009, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.68794610396313116, 0.60000000000000009, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.85558070175468726, 0.60000000000000009, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0224416343605653, 0.60000000000000009, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.1893144457936788, 0.60000000000000009, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.3566435377982575, 0.60000000000000009, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.5243814243493585, 0.60000000000000009, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.60000000000000009, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17432424744393932, 0.60000000000000009, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34748744127146447, 0.60000000000000009, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.51873632743924825, 0.60000000000000009, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.68794610396313116, 0.60000000000000009, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.85558070175468726, 0.60000000000000009, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0224416343605653, 0.60000000000000009, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1893144457936788, 0.60000000000000009, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.3566435377982575, 0.60000000000000009, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.5243814243493585, 0.60000000000000009, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler154 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.40000000000000002.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 4.5440898085101625e-16
+// mean(f - f_GSL): -8.3266726846886737e-18
+// variance(f - f_GSL): 5.3421016812981065e-32
+// stddev(f - f_GSL): 2.3112987001463282e-16
const testcase_ellint_3<double>
data155[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17414974487670717, 0.60000000000000009, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34615238767335027, 0.60000000000000009, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51453257838108557, 0.60000000000000009, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67882386787534399, 0.60000000000000009, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.83948470233173578, 0.60000000000000009, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.99753496200073977, 0.60000000000000009, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1541101404388487, 0.60000000000000009, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3100911323398816, 0.60000000000000009, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4659345278069984, 0.60000000000000009, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler155 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.50000000000000000.
// max(|f - f_GSL|): 6.6613381477509392e-16
// max(|f - f_GSL| / |f_GSL|): 4.7124937590522226e-16
+// mean(f - f_GSL): 1.3877787807814457e-17
+// variance(f - f_GSL): 5.7088367857700656e-32
+// stddev(f - f_GSL): 2.3893172216702547e-16
const testcase_ellint_3<double>
data156[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17397586700252807, 0.60000000000000009, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34483533397138516, 0.60000000000000009, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51044500461706477, 0.60000000000000009, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.67009988034712664, 0.60000000000000009, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.82434762375735193, 0.60000000000000009, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.97447346702798998, 0.60000000000000009, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1219494000522143, 0.60000000000000009, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2680242605954486, 0.60000000000000009, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4135484285693078, 0.60000000000000009, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler156 = 2.5000000000000020e-13;
-// Test data for k=0.60000000000000009, nu=0.59999999999999998.
+// Test data for k=0.60000000000000009, nu=0.60000000000000009.
// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0652177678695900e-16
+// max(|f - f_GSL| / |f_GSL|): 4.0652177678695905e-16
+// mean(f - f_GSL): 8.0491169285323847e-17
+// variance(f - f_GSL): 1.1299740083587531e-32
+// stddev(f - f_GSL): 1.0630023557635011e-16
const testcase_ellint_3<double>
data157[10] =
{
- { 0.0000000000000000, 0.60000000000000009, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17380260984469353, 0.60000000000000009, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34353585361777839, 0.60000000000000009, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50646805774321380, 0.60000000000000009, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.66174468108625506, 0.60000000000000009, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.81007462280278408, 0.60000000000000009, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.95303466945718729, 0.60000000000000009, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.0924118588677505, 0.60000000000000009, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.2297640574847937, 0.60000000000000009, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.3662507535812816, 0.60000000000000009, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.60000000000000009, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17380260984469353, 0.60000000000000009, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34353585361777839, 0.60000000000000009, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50646805774321380, 0.60000000000000009, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.66174468108625506, 0.60000000000000009, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.81007462280278408, 0.60000000000000009, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.95303466945718718, 0.60000000000000009, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.0924118588677503, 0.60000000000000009, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.2297640574847937, 0.60000000000000009, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.3662507535812813, 0.60000000000000009, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler157 = 2.5000000000000020e-13;
-// Test data for k=0.60000000000000009, nu=0.69999999999999996.
+// Test data for k=0.60000000000000009, nu=0.70000000000000007.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1692457486457856e-16
+// mean(f - f_GSL): 2.4980018054066023e-17
+// variance(f - f_GSL): 2.7163696366243874e-32
+// stddev(f - f_GSL): 1.6481412671929513e-16
const testcase_ellint_3<double>
data158[10] =
{
- { 0.0000000000000000, 0.60000000000000009, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17362996946312007, 0.60000000000000009, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34225353454870588, 0.60000000000000009, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50259656397799524, 0.60000000000000009, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.65373184496628933, 0.60000000000000009, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.79658372884056439, 0.60000000000000009, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.93303240100245421, 0.60000000000000009, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0651547944716557, 0.60000000000000009, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.1947676204853441, 0.60000000000000009, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.3232737468822813, 0.60000000000000009, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.60000000000000009, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17362996946312007, 0.60000000000000009, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34225353454870588, 0.60000000000000009, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50259656397799524, 0.60000000000000009, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.65373184496628933, 0.60000000000000009, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.79658372884056439, 0.60000000000000009, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.93303240100245421, 0.60000000000000009, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0651547944716557, 0.60000000000000009, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.1947676204853441, 0.60000000000000009, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.3232737468822811, 0.60000000000000009, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler158 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2705175719241326e-16
+// mean(f - f_GSL): 1.9428902930940238e-17
+// variance(f - f_GSL): 2.6524572947662036e-32
+// stddev(f - f_GSL): 1.6286366368119696e-16
const testcase_ellint_3<double>
data159[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17345794195390685, 0.60000000000000009, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34098797854531027, 0.60000000000000009, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49882569168826213, 0.60000000000000009, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.64603758566475511, 0.60000000000000009, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.78380365594769730, 0.60000000000000009, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.91430946255611190, 0.60000000000000009, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0398955217270607, 0.60000000000000009, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1625948314277679, 0.60000000000000009, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2840021261752192, 0.60000000000000009, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler159 = 2.5000000000000020e-13;
// Test data for k=0.60000000000000009, nu=0.90000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 3.5585887739668036e-16
+// mean(f - f_GSL): 2.7755575615628915e-18
+// variance(f - f_GSL): 2.4652854364672366e-32
+// stddev(f - f_GSL): 1.5701227456690247e-16
const testcase_ellint_3<double>
data160[10] =
{
{ 0.0000000000000000, 0.60000000000000009, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17328652344890030, 0.60000000000000009, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.33973880062929018, 0.60000000000000009, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.49515092233122743, 0.60000000000000009, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.63864042139737043, 0.60000000000000009, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.77167205646538850, 0.60000000000000009, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.89673202848034383, 0.60000000000000009, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0163984492661304, 0.60000000000000009, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.1328845785162431, 0.60000000000000009, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.2479362973851873, 0.60000000000000009, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler160 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.0000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.5930208052157665e-16
+// Test data for k=0.70000000000000018, nu=0.0000000000000000.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.5425633303580579e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 1.2797685595888714e-32
+// stddev(f - f_GSL): 1.1312685620969369e-16
const testcase_ellint_3<double>
data161[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.0000000000000000,
- 0.0000000000000000 },
- { 0.17496737466916723, 0.69999999999999996, 0.0000000000000000,
- 0.17453292519943295 },
- { 0.35254687535677925, 0.69999999999999996, 0.0000000000000000,
- 0.34906585039886590 },
- { 0.53536740275997119, 0.69999999999999996, 0.0000000000000000,
- 0.52359877559829882 },
- { 0.72603797651684454, 0.69999999999999996, 0.0000000000000000,
- 0.69813170079773179 },
- { 0.92698296348313458, 0.69999999999999996, 0.0000000000000000,
- 0.87266462599716477 },
- { 1.1400447527693316, 0.69999999999999996, 0.0000000000000000,
- 1.0471975511965976 },
- { 1.3657668117194073, 0.69999999999999996, 0.0000000000000000,
- 1.2217304763960306 },
- { 1.6024686895959159, 0.69999999999999996, 0.0000000000000000,
- 1.3962634015954636 },
- { 1.8456939983747236, 0.69999999999999996, 0.0000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.0000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17496737466916723, 0.70000000000000018, 0.0000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.35254687535677925, 0.70000000000000018, 0.0000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.53536740275997119, 0.70000000000000018, 0.0000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.72603797651684454, 0.70000000000000018, 0.0000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.92698296348313458, 0.70000000000000018, 0.0000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.1400447527693316, 0.70000000000000018, 0.0000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.3657668117194073, 0.70000000000000018, 0.0000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.6024686895959159, 0.70000000000000018, 0.0000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.8456939983747238, 0.70000000000000018, 0.0000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler161 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.10000000000000001.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.6735282577377367e-16
+// Test data for k=0.70000000000000018, nu=0.10000000000000001.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.7994449168729833e-16
+// mean(f - f_GSL): 1.2212453270876723e-16
+// variance(f - f_GSL): 1.2797685595888714e-32
+// stddev(f - f_GSL): 1.1312685620969369e-16
const testcase_ellint_3<double>
data162[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.10000000000000001,
- 0.0000000000000000 },
- { 0.17479076384884684, 0.69999999999999996, 0.10000000000000001,
- 0.17453292519943295 },
- { 0.35114844900396364, 0.69999999999999996, 0.10000000000000001,
- 0.34906585039886590 },
- { 0.53072776947527001, 0.69999999999999996, 0.10000000000000001,
- 0.52359877559829882 },
- { 0.71530198262386235, 0.69999999999999996, 0.10000000000000001,
- 0.69813170079773179 },
- { 0.90666760677828306, 0.69999999999999996, 0.10000000000000001,
- 0.87266462599716477 },
- { 1.1063366517438080, 0.69999999999999996, 0.10000000000000001,
- 1.0471975511965976 },
- { 1.3149477243092149, 0.69999999999999996, 0.10000000000000001,
- 1.2217304763960306 },
- { 1.5314886725038925, 0.69999999999999996, 0.10000000000000001,
- 1.3962634015954636 },
- { 1.7528050171757608, 0.69999999999999996, 0.10000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.10000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17479076384884684, 0.70000000000000018, 0.10000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.35114844900396364, 0.70000000000000018, 0.10000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.53072776947527001, 0.70000000000000018, 0.10000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.71530198262386235, 0.70000000000000018, 0.10000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.90666760677828306, 0.70000000000000018, 0.10000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.1063366517438080, 0.70000000000000018, 0.10000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.3149477243092149, 0.70000000000000018, 0.10000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.5314886725038925, 0.70000000000000018, 0.10000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.7528050171757610, 0.70000000000000018, 0.10000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler162 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.20000000000000001.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.7517969287516802e-16
+// Test data for k=0.70000000000000018, nu=0.20000000000000001.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.5343558688777879e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data163[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.20000000000000001,
- 0.0000000000000000 },
- { 0.17461479077791475, 0.69999999999999996, 0.20000000000000001,
- 0.17453292519943295 },
- { 0.34976950621407538, 0.69999999999999996, 0.20000000000000001,
- 0.34906585039886590 },
- { 0.52622533231350177, 0.69999999999999996, 0.20000000000000001,
- 0.52359877559829882 },
- { 0.70508774017895215, 0.69999999999999996, 0.20000000000000001,
- 0.69813170079773179 },
- { 0.88775302531730294, 0.69999999999999996, 0.20000000000000001,
- 0.87266462599716477 },
- { 1.0756195476149006, 0.69999999999999996, 0.20000000000000001,
- 1.0471975511965976 },
- { 1.2695349716654374, 0.69999999999999996, 0.20000000000000001,
- 1.2217304763960306 },
- { 1.4690814617070540, 0.69999999999999996, 0.20000000000000001,
- 1.3962634015954636 },
- { 1.6721098780092145, 0.69999999999999996, 0.20000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.20000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17461479077791475, 0.70000000000000018, 0.20000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.34976950621407538, 0.70000000000000018, 0.20000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.52622533231350177, 0.70000000000000018, 0.20000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.70508774017895215, 0.70000000000000018, 0.20000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.88775302531730294, 0.70000000000000018, 0.20000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.0756195476149006, 0.70000000000000018, 0.20000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.2695349716654374, 0.70000000000000018, 0.20000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.4690814617070540, 0.70000000000000018, 0.20000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 1.6721098780092147, 0.70000000000000018, 0.20000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler163 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.29999999999999999.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8280039841080712e-16
+// Test data for k=0.70000000000000018, nu=0.30000000000000004.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.7121582737715410e-16
+// mean(f - f_GSL): 7.7715611723760953e-17
+// variance(f - f_GSL): 2.5717108985793017e-33
+// stddev(f - f_GSL): 5.0712038990552347e-17
const testcase_ellint_3<double>
data164[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17443945136076175, 0.69999999999999996, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34840956983535287, 0.69999999999999996, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.52185308551329168, 0.69999999999999996, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.69535240431168255, 0.69999999999999996, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.87007983473964923, 0.69999999999999996, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0474657975577066, 0.69999999999999996, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.2286225419931891, 0.69999999999999996, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.4136490671013271, 0.69999999999999996, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.6011813647733213, 0.69999999999999996, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17443945136076175, 0.70000000000000018, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34840956983535287, 0.70000000000000018, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.52185308551329168, 0.70000000000000018, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.69535240431168255, 0.70000000000000018, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.87007983473964923, 0.70000000000000018, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0474657975577066, 0.70000000000000018, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.2286225419931891, 0.70000000000000018, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.4136490671013271, 0.70000000000000018, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.6011813647733215, 0.70000000000000018, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler164 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.40000000000000002.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3472957053482092e-16
+// Test data for k=0.70000000000000018, nu=0.40000000000000002.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.8837427576786222e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data165[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.40000000000000002,
- 0.0000000000000000 },
- { 0.17426474153983229, 0.69999999999999996, 0.40000000000000002,
- 0.17453292519943295 },
- { 0.34706817945773732, 0.69999999999999996, 0.40000000000000002,
- 0.34906585039886590 },
- { 0.51760452851738148, 0.69999999999999996, 0.40000000000000002,
- 0.52359877559829882 },
- { 0.68605801534722755, 0.69999999999999996, 0.40000000000000002,
- 0.69813170079773179 },
- { 0.85351339387296532, 0.69999999999999996, 0.40000000000000002,
- 0.87266462599716477 },
- { 1.0215297967969539, 0.69999999999999996, 0.40000000000000002,
- 1.0471975511965976 },
- { 1.1915051074460530, 0.69999999999999996, 0.40000000000000002,
- 1.2217304763960306 },
- { 1.3639821911744707, 0.69999999999999996, 0.40000000000000002,
- 1.3962634015954636 },
- { 1.5382162002954762, 0.69999999999999996, 0.40000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.40000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17426474153983229, 0.70000000000000018, 0.40000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34706817945773732, 0.70000000000000018, 0.40000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.51760452851738148, 0.70000000000000018, 0.40000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.68605801534722755, 0.70000000000000018, 0.40000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.85351339387296532, 0.70000000000000018, 0.40000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 1.0215297967969537, 0.70000000000000018, 0.40000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.1915051074460530, 0.70000000000000018, 0.40000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.3639821911744707, 0.70000000000000018, 0.40000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.5382162002954765, 0.70000000000000018, 0.40000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler165 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.50000000000000000.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.9748346743390620e-16
+// Test data for k=0.70000000000000018, nu=0.50000000000000000.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 6.7329783721453777e-16
+// mean(f - f_GSL): 1.1102230246251565e-16
+// variance(f - f_GSL): 1.5217224251948529e-33
+// stddev(f - f_GSL): 3.9009260761963345e-17
const testcase_ellint_3<double>
data166[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.50000000000000000,
- 0.0000000000000000 },
- { 0.17409065729516096, 0.69999999999999996, 0.50000000000000000,
- 0.17453292519943295 },
- { 0.34574489064986091, 0.69999999999999996, 0.50000000000000000,
- 0.34906585039886590 },
- { 0.51347361925579782, 0.69999999999999996, 0.50000000000000000,
- 0.52359877559829882 },
- { 0.67717079489579279, 0.69999999999999996, 0.50000000000000000,
- 0.69813170079773179 },
- { 0.83793902055292280, 0.69999999999999996, 0.50000000000000000,
- 0.87266462599716477 },
- { 0.99752863545289705, 0.69999999999999996, 0.50000000000000000,
- 1.0471975511965976 },
- { 1.1576240080401501, 0.69999999999999996, 0.50000000000000000,
- 1.2217304763960306 },
- { 1.3191464023923762, 0.69999999999999996, 0.50000000000000000,
- 1.3962634015954636 },
- { 1.4818433192178544, 0.69999999999999996, 0.50000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.50000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17409065729516096, 0.70000000000000018, 0.50000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34574489064986091, 0.70000000000000018, 0.50000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.51347361925579782, 0.70000000000000018, 0.50000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.67717079489579279, 0.70000000000000018, 0.50000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.83793902055292280, 0.70000000000000018, 0.50000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 0.99752863545289705, 0.70000000000000018, 0.50000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.1576240080401501, 0.70000000000000018, 0.50000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.3191464023923762, 0.70000000000000018, 0.50000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.4818433192178546, 0.70000000000000018, 0.50000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler166 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.59999999999999998.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.0457157538295173e-16
+// Test data for k=0.70000000000000018, nu=0.60000000000000009.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 5.2106568505440635e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data167[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17391719464391614, 0.69999999999999996, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34443927423869031, 0.69999999999999996, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.50945473266486063, 0.69999999999999996, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.66866056326513812, 0.69999999999999996, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.82325830002337352, 0.69999999999999996, 0.59999999999999998,
- 0.87266462599716477 },
- { 0.97522808245669368, 0.69999999999999996, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.1265300613705285, 0.69999999999999996, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.2784066076152001, 0.69999999999999996, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.4309994736080540, 0.69999999999999996, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17391719464391614, 0.70000000000000018, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34443927423869031, 0.70000000000000018, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.50945473266486063, 0.70000000000000018, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.66866056326513812, 0.70000000000000018, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.82325830002337352, 0.70000000000000018, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 0.97522808245669357, 0.70000000000000018, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.1265300613705285, 0.70000000000000018, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.2784066076152001, 0.70000000000000018, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.4309994736080540, 0.70000000000000018, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler167 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 5.4867405596732161e-16
+// Test data for k=0.70000000000000018, nu=0.70000000000000007.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 5.3669592864529525e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data168[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17374434963995031, 0.69999999999999996, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34315091562900674, 0.69999999999999996, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50554262375653347, 0.69999999999999996, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.66050025406305801, 0.69999999999999996, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.80938620118847404, 0.69999999999999996, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.95443223855852144, 0.69999999999999996, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.0978573207128304, 0.69999999999999996, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.2411754575007123, 0.69999999999999996, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.3848459188329196, 0.69999999999999996, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17374434963995031, 0.70000000000000018, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34315091562900674, 0.70000000000000018, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50554262375653347, 0.70000000000000018, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.66050025406305801, 0.70000000000000018, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.80938620118847393, 0.70000000000000018, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.95443223855852133, 0.70000000000000018, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.0978573207128304, 0.70000000000000018, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.2411754575007121, 0.70000000000000018, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.3848459188329199, 0.70000000000000018, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler168 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1829502028913879e-16
+// Test data for k=0.70000000000000018, nu=0.80000000000000004.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 5.5190256575816710e-16
+// mean(f - f_GSL): 6.6613381477509390e-17
+// variance(f - f_GSL): 5.4782007307014711e-34
+// stddev(f - f_GSL): 2.3405556457178006e-17
const testcase_ellint_3<double>
data169[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.80000000000000004,
- 0.0000000000000000 },
- { 0.17357211837335740, 0.69999999999999996, 0.80000000000000004,
- 0.17453292519943295 },
- { 0.34187941416012108, 0.69999999999999996, 0.80000000000000004,
- 0.34906585039886590 },
- { 0.50173239465478259, 0.69999999999999996, 0.80000000000000004,
- 0.52359877559829882 },
- { 0.65266550725988315, 0.69999999999999996, 0.80000000000000004,
- 0.69813170079773179 },
- { 0.79624879865249298, 0.69999999999999996, 0.80000000000000004,
- 0.87266462599716477 },
- { 0.93497577043296920, 0.69999999999999996, 0.80000000000000004,
- 1.0471975511965976 },
- { 1.0713041566930750, 0.69999999999999996, 0.80000000000000004,
- 1.2217304763960306 },
- { 1.2069772023255654, 0.69999999999999996, 0.80000000000000004,
- 1.3962634015954636 },
- { 1.3427110650397531, 0.69999999999999996, 0.80000000000000004,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.80000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17357211837335740, 0.70000000000000018, 0.80000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34187941416012108, 0.70000000000000018, 0.80000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.50173239465478259, 0.70000000000000018, 0.80000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.65266550725988315, 0.70000000000000018, 0.80000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.79624879865249287, 0.70000000000000018, 0.80000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 0.93497577043296920, 0.70000000000000018, 0.80000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.0713041566930750, 0.70000000000000018, 0.80000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.2069772023255654, 0.70000000000000018, 0.80000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.3427110650397536, 0.70000000000000018, 0.80000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler169 = 2.5000000000000020e-13;
-// Test data for k=0.69999999999999996, nu=0.90000000000000002.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2494869624129105e-16
+// Test data for k=0.70000000000000018, nu=0.90000000000000002.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 5.6671895168757992e-16
+// mean(f - f_GSL): 9.9920072216264091e-17
+// variance(f - f_GSL): 1.4623752506122538e-32
+// stddev(f - f_GSL): 1.2092870836208636e-16
const testcase_ellint_3<double>
data170[10] =
{
- { 0.0000000000000000, 0.69999999999999996, 0.90000000000000002,
- 0.0000000000000000 },
- { 0.17340049697003637, 0.69999999999999996, 0.90000000000000002,
- 0.17453292519943295 },
- { 0.34062438249741556, 0.69999999999999996, 0.90000000000000002,
- 0.34906585039886590 },
- { 0.49801946510076867, 0.69999999999999996, 0.90000000000000002,
- 0.52359877559829882 },
- { 0.64513432604750476, 0.69999999999999996, 0.90000000000000002,
- 0.69813170079773179 },
- { 0.78378145487573758, 0.69999999999999996, 0.90000000000000002,
- 0.87266462599716477 },
- { 0.91671799500854623, 0.69999999999999996, 0.90000000000000002,
- 1.0471975511965976 },
- { 1.0466193579463123, 0.69999999999999996, 0.90000000000000002,
- 1.2217304763960306 },
- { 1.1754218079199146, 0.69999999999999996, 0.90000000000000002,
- 1.3962634015954636 },
- { 1.3040500499695913, 0.69999999999999996, 0.90000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.70000000000000018, 0.90000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17340049697003637, 0.70000000000000018, 0.90000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34062438249741556, 0.70000000000000018, 0.90000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.49801946510076867, 0.70000000000000018, 0.90000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.64513432604750476, 0.70000000000000018, 0.90000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.78378145487573758, 0.70000000000000018, 0.90000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.91671799500854623, 0.70000000000000018, 0.90000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.0466193579463123, 0.70000000000000018, 0.90000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.1754218079199146, 0.70000000000000018, 0.90000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.3040500499695913, 0.70000000000000018, 0.90000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler170 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.0000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1175183168766718e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data171[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.0000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17510154241338899, 0.80000000000000004, 0.0000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35365068839779390, 0.80000000000000004, 0.0000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53926804409084550, 0.80000000000000004, 0.0000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.73587926028070361, 0.80000000000000004, 0.0000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.94770942970071170, 0.80000000000000004, 0.0000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1789022995388236, 0.80000000000000004, 0.0000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.4323027881876009, 0.80000000000000004, 0.0000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.7069629739121674, 0.80000000000000004, 0.0000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.9953027776647296, 0.80000000000000004, 0.0000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler171 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.10000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1537164503193145e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data172[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.10000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17492468824017163, 0.80000000000000004, 0.10000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35224443521476911, 0.80000000000000004, 0.10000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53456851853226950, 0.80000000000000004, 0.10000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.72488875602364922, 0.80000000000000004, 0.10000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.92661354274638952, 0.80000000000000004, 0.10000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1432651144499075, 0.80000000000000004, 0.10000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3774479927211429, 0.80000000000000004, 0.10000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.6287092337196041, 0.80000000000000004, 0.10000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.8910755418379521, 0.80000000000000004, 0.10000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler172 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.20000000000000001.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.1894552974436829e-16
+// mean(f - f_GSL): 9.4368957093138303e-17
+// variance(f - f_GSL): 1.5099290763995930e-32
+// stddev(f - f_GSL): 1.2287917140018454e-16
const testcase_ellint_3<double>
data173[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.20000000000000001,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17474847286224940, 0.80000000000000004, 0.20000000000000001,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.35085779529084682, 0.80000000000000004, 0.20000000000000001,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.53000829263059146, 0.80000000000000004, 0.20000000000000001,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.71443466027453384, 0.80000000000000004, 0.20000000000000001,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.90698196872715420, 0.80000000000000004, 0.20000000000000001,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.1108198200558579, 0.80000000000000004, 0.20000000000000001,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.3284988909963957, 0.80000000000000004, 0.20000000000000001,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.5600369318140328, 0.80000000000000004, 0.20000000000000001,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.8007226661734588, 0.80000000000000004, 0.20000000000000001,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler173 = 2.5000000000000020e-13;
-// Test data for k=0.80000000000000004, nu=0.29999999999999999.
+// Test data for k=0.80000000000000004, nu=0.30000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2247517409029886e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data174[10] =
{
- { 0.0000000000000000, 0.80000000000000004, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17457289217669889, 0.80000000000000004, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.34949028801501258, 0.80000000000000004, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.52558024362769307, 0.80000000000000004, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.70447281740094891, 0.80000000000000004, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.88864745641528986, 0.80000000000000004, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.0811075819341462, 0.80000000000000004, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.2844589654082377, 0.80000000000000004, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.4991461361277847, 0.80000000000000004, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.7214611048717301, 0.80000000000000004, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.80000000000000004, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17457289217669889, 0.80000000000000004, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34949028801501258, 0.80000000000000004, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.52558024362769307, 0.80000000000000004, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.70447281740094891, 0.80000000000000004, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.88864745641528986, 0.80000000000000004, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0811075819341462, 0.80000000000000004, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.2844589654082377, 0.80000000000000004, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.4991461361277847, 0.80000000000000004, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.7214611048717301, 0.80000000000000004, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler174 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.40000000000000002.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2596216594752862e-16
+// mean(f - f_GSL): 9.4368957093138303e-17
+// variance(f - f_GSL): 1.5099290763995930e-32
+// stddev(f - f_GSL): 1.2287917140018454e-16
const testcase_ellint_3<double>
data175[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.40000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17439794211872175, 0.80000000000000004, 0.40000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34814144964568972, 0.80000000000000004, 0.40000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.52127776285273064, 0.80000000000000004, 0.40000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.69496411438966588, 0.80000000000000004, 0.40000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.87146878427509589, 0.80000000000000004, 0.40000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0537579024937762, 0.80000000000000004, 0.40000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2445534387922637, 0.80000000000000004, 0.40000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.4446769766361993, 0.80000000000000004, 0.40000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.6512267838651289, 0.80000000000000004, 0.40000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler175 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.50000000000000000.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.2940800093915668e-16
+// mean(f - f_GSL): 7.2164496600635178e-17
+// variance(f - f_GSL): 6.4292772464482542e-34
+// stddev(f - f_GSL): 2.5356019495276173e-17
const testcase_ellint_3<double>
data176[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.50000000000000000,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17422361866118044, 0.80000000000000004, 0.50000000000000000,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34681083254170475, 0.80000000000000004, 0.50000000000000000,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.51709470815494440, 0.80000000000000004, 0.50000000000000000,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.68587375344080237, 0.80000000000000004, 0.50000000000000000,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.85532571852810624, 0.80000000000000004, 0.50000000000000000,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 1.0284677391874903, 0.80000000000000004, 0.50000000000000000,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.2081693942686225, 0.80000000000000004, 0.50000000000000000,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.3955803006426311, 0.80000000000000004, 0.50000000000000000,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.5884528947755532, 0.80000000000000004, 0.50000000000000000,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler176 = 2.5000000000000020e-13;
-// Test data for k=0.80000000000000004, nu=0.59999999999999998.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3281408974056389e-16
+// Test data for k=0.80000000000000004, nu=0.60000000000000009.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.9305555277657156e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3733544887383549e-33
+// stddev(f - f_GSL): 3.7058797723865178e-17
const testcase_ellint_3<double>
data177[10] =
{
- { 0.0000000000000000, 0.80000000000000004, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17404991781414089, 0.80000000000000004, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34549800443625167, 0.80000000000000004, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.51302536167001545, 0.80000000000000004, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.67717065003912236, 0.80000000000000004, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.84011512421134416, 0.80000000000000004, 0.59999999999999998,
- 0.87266462599716477 },
- { 1.0049863847088740, 0.80000000000000004, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.1748145941898920, 0.80000000000000004, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.3510319699755071, 0.80000000000000004, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.5319262547427865, 0.80000000000000004, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.80000000000000004, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17404991781414089, 0.80000000000000004, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34549800443625167, 0.80000000000000004, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.51302536167001545, 0.80000000000000004, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.67717065003912236, 0.80000000000000004, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.84011512421134416, 0.80000000000000004, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 1.0049863847088740, 0.80000000000000004, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.1748145941898918, 0.80000000000000004, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.3510319699755069, 0.80000000000000004, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.5319262547427863, 0.80000000000000004, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler177 = 2.5000000000000020e-13;
-// Test data for k=0.80000000000000004, nu=0.69999999999999996.
-// max(|f - f_GSL|): 2.2204460492503131e-16
+// Test data for k=0.80000000000000004, nu=0.70000000000000007.
+// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3618176466061808e-16
+// mean(f - f_GSL): 7.2164496600635178e-17
+// variance(f - f_GSL): 6.4292772464482542e-34
+// stddev(f - f_GSL): 2.5356019495276173e-17
const testcase_ellint_3<double>
data178[10] =
{
- { 0.0000000000000000, 0.80000000000000004, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17387683562442199, 0.80000000000000004, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34420254775101611, 0.80000000000000004, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.50906439222143673, 0.80000000000000004, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.66882693152688422, 0.80000000000000004, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.82574792844091316, 0.80000000000000004, 0.69999999999999996,
- 0.87266462599716477 },
- { 0.98310431309490931, 0.80000000000000004, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.1440884535113258, 0.80000000000000004, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.3103743938952537, 0.80000000000000004, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.4806912324625332, 0.80000000000000004, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.80000000000000004, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17387683562442199, 0.80000000000000004, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34420254775101611, 0.80000000000000004, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.50906439222143673, 0.80000000000000004, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.66882693152688422, 0.80000000000000004, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.82574792844091316, 0.80000000000000004, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 0.98310431309490931, 0.80000000000000004, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.1440884535113258, 0.80000000000000004, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.3103743938952535, 0.80000000000000004, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.4806912324625330, 0.80000000000000004, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler178 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.80000000000000004.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 4.3951228558314112e-16
+// mean(f - f_GSL): 1.1657341758564144e-16
+// variance(f - f_GSL): 1.3242789405258207e-32
+// stddev(f - f_GSL): 1.1507731924779187e-16
const testcase_ellint_3<double>
data179[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.80000000000000004,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17370436817515203, 0.80000000000000004, 0.80000000000000004,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34292405894783395, 0.80000000000000004, 0.80000000000000004,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50520682176250076, 0.80000000000000004, 0.80000000000000004,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.66081751679736178, 0.80000000000000004, 0.80000000000000004,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.81214672249355102, 0.80000000000000004, 0.80000000000000004,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.96264481387685552, 0.80000000000000004, 0.80000000000000004,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.1156611352656258, 0.80000000000000004, 0.80000000000000004,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2730756225143889, 0.80000000000000004, 0.80000000000000004,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.4339837018309471, 0.80000000000000004, 0.80000000000000004,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler179 = 2.5000000000000020e-13;
// Test data for k=0.80000000000000004, nu=0.90000000000000002.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 4.4280684534289690e-16
+// mean(f - f_GSL): 3.8857805861880476e-17
+// variance(f - f_GSL): 1.8641099708636949e-34
+// stddev(f - f_GSL): 1.3653241266687170e-17
const testcase_ellint_3<double>
data180[10] =
{
{ 0.0000000000000000, 0.80000000000000004, 0.90000000000000002,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.17353251158533151, 0.80000000000000004, 0.90000000000000002,
- 0.17453292519943295 },
+ 0.17453292519943295, 0.0 },
{ 0.34166214791545768, 0.80000000000000004, 0.90000000000000002,
- 0.34906585039886590 },
+ 0.34906585039886590, 0.0 },
{ 0.50144799535130569, 0.80000000000000004, 0.90000000000000002,
- 0.52359877559829882 },
+ 0.52359877559829882, 0.0 },
{ 0.65311976193814425, 0.80000000000000004, 0.90000000000000002,
- 0.69813170079773179 },
+ 0.69813170079773179, 0.0 },
{ 0.79924384892320866, 0.80000000000000004, 0.90000000000000002,
- 0.87266462599716477 },
+ 0.87266462599716477, 0.0 },
{ 0.94345762353365603, 0.80000000000000004, 0.90000000000000002,
- 1.0471975511965976 },
+ 1.0471975511965976, 0.0 },
{ 1.0892582069219161, 0.80000000000000004, 0.90000000000000002,
- 1.2217304763960306 },
+ 1.2217304763960306, 0.0 },
{ 1.2387000876610268, 0.80000000000000004, 0.90000000000000002,
- 1.3962634015954636 },
+ 1.3962634015954636, 0.0 },
{ 1.3911845406776222, 0.80000000000000004, 0.90000000000000002,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
};
const double toler180 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.0000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8945813740035884e-16
+// Test data for k=0.90000000000000013, nu=0.0000000000000000.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.4173361898887480e-16
+// mean(f - f_GSL): -1.2490009027033011e-16
+// variance(f - f_GSL): 1.2577986920751208e-32
+// stddev(f - f_GSL): 1.1215162469064461e-16
const testcase_ellint_3<double>
data181[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.0000000000000000,
- 0.0000000000000000 },
- { 0.17525427376115024, 0.89999999999999991, 0.0000000000000000,
- 0.17453292519943295 },
- { 0.35492464591297446, 0.89999999999999991, 0.0000000000000000,
- 0.34906585039886590 },
- { 0.54388221416157112, 0.89999999999999991, 0.0000000000000000,
- 0.52359877559829882 },
- { 0.74797400423532490, 0.89999999999999991, 0.0000000000000000,
- 0.69813170079773179 },
- { 0.97463898451966458, 0.89999999999999991, 0.0000000000000000,
- 0.87266462599716477 },
- { 1.2334463254523440, 0.89999999999999991, 0.0000000000000000,
- 1.0471975511965976 },
- { 1.5355247765594910, 0.89999999999999991, 0.0000000000000000,
- 1.2217304763960306 },
- { 1.8882928567775117, 0.89999999999999991, 0.0000000000000000,
- 1.3962634015954636 },
- { 2.2805491384227703, 0.89999999999999991, 0.0000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.0000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17525427376115024, 0.90000000000000013, 0.0000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.35492464591297446, 0.90000000000000013, 0.0000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.54388221416157123, 0.90000000000000013, 0.0000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.74797400423532512, 0.90000000000000013, 0.0000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.97463898451966480, 0.90000000000000013, 0.0000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.2334463254523440, 0.90000000000000013, 0.0000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.5355247765594919, 0.90000000000000013, 0.0000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.8882928567775128, 0.90000000000000013, 0.0000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 2.2805491384227712, 0.90000000000000013, 0.0000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler181 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.10000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.1237990617685137e-16
+// Test data for k=0.90000000000000013, nu=0.10000000000000001.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.6623178533366594e-16
+// mean(f - f_GSL): -1.5820678100908481e-16
+// variance(f - f_GSL): 1.0089970755557622e-32
+// stddev(f - f_GSL): 1.0044884646205561e-16
const testcase_ellint_3<double>
data182[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.10000000000000001,
- 0.0000000000000000 },
- { 0.17507714233254656, 0.89999999999999991, 0.10000000000000001,
- 0.17453292519943295 },
- { 0.35350932904326521, 0.89999999999999991, 0.10000000000000001,
- 0.34906585039886590 },
- { 0.53911129989870976, 0.89999999999999991, 0.10000000000000001,
- 0.52359877559829882 },
- { 0.73666644254508395, 0.89999999999999991, 0.10000000000000001,
- 0.69813170079773179 },
- { 0.95250736612100195, 0.89999999999999991, 0.10000000000000001,
- 0.87266462599716477 },
- { 1.1950199550905594, 0.89999999999999991, 0.10000000000000001,
- 1.0471975511965976 },
- { 1.4741687286340848, 0.89999999999999991, 0.10000000000000001,
- 1.2217304763960306 },
- { 1.7968678183506053, 0.89999999999999991, 0.10000000000000001,
- 1.3962634015954636 },
- { 2.1537868513875287, 0.89999999999999991, 0.10000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.10000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17507714233254656, 0.90000000000000013, 0.10000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.35350932904326521, 0.90000000000000013, 0.10000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.53911129989870987, 0.90000000000000013, 0.10000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.73666644254508418, 0.90000000000000013, 0.10000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.95250736612100217, 0.90000000000000013, 0.10000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.1950199550905594, 0.90000000000000013, 0.10000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.4741687286340857, 0.90000000000000013, 0.10000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.7968678183506064, 0.90000000000000013, 0.10000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 2.1537868513875296, 0.90000000000000013, 0.10000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler182 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.20000000000000001.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3446165733924066e-16
+// Test data for k=0.90000000000000013, nu=0.20000000000000001.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.5739653428662927e-16
+// mean(f - f_GSL): -1.2490009027033011e-16
+// variance(f - f_GSL): 1.2577986920751208e-32
+// stddev(f - f_GSL): 1.1215162469064461e-16
const testcase_ellint_3<double>
data183[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.20000000000000001,
- 0.0000000000000000 },
- { 0.17490065089140927, 0.89999999999999991, 0.20000000000000001,
- 0.17453292519943295 },
- { 0.35211377590661436, 0.89999999999999991, 0.20000000000000001,
- 0.34906585039886590 },
- { 0.53448220334204100, 0.89999999999999991, 0.20000000000000001,
- 0.52359877559829882 },
- { 0.72591368943179579, 0.89999999999999991, 0.20000000000000001,
- 0.69813170079773179 },
- { 0.93192539780038763, 0.89999999999999991, 0.20000000000000001,
- 0.87266462599716477 },
- { 1.1600809679692683, 0.89999999999999991, 0.20000000000000001,
- 1.0471975511965976 },
- { 1.4195407225882508, 0.89999999999999991, 0.20000000000000001,
- 1.2217304763960306 },
- { 1.7168966476424521, 0.89999999999999991, 0.20000000000000001,
- 1.3962634015954636 },
- { 2.0443194576468895, 0.89999999999999991, 0.20000000000000001,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.20000000000000001,
+ 0.0000000000000000, 0.0 },
+ { 0.17490065089140927, 0.90000000000000013, 0.20000000000000001,
+ 0.17453292519943295, 0.0 },
+ { 0.35211377590661436, 0.90000000000000013, 0.20000000000000001,
+ 0.34906585039886590, 0.0 },
+ { 0.53448220334204111, 0.90000000000000013, 0.20000000000000001,
+ 0.52359877559829882, 0.0 },
+ { 0.72591368943179602, 0.90000000000000013, 0.20000000000000001,
+ 0.69813170079773179, 0.0 },
+ { 0.93192539780038786, 0.90000000000000013, 0.20000000000000001,
+ 0.87266462599716477, 0.0 },
+ { 1.1600809679692683, 0.90000000000000013, 0.20000000000000001,
+ 1.0471975511965976, 0.0 },
+ { 1.4195407225882515, 0.90000000000000013, 0.20000000000000001,
+ 1.2217304763960306, 0.0 },
+ { 1.7168966476424532, 0.90000000000000013, 0.20000000000000001,
+ 1.3962634015954636, 0.0 },
+ { 2.0443194576468899, 0.90000000000000013, 0.20000000000000001,
+ 1.5707963267948966, 0.0 },
};
const double toler183 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.29999999999999999.
-// max(|f - f_GSL|): 1.1102230246251565e-15
-// max(|f - f_GSL| / |f_GSL|): 5.6974600067013622e-16
+// Test data for k=0.90000000000000013, nu=0.30000000000000004.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 3.4184760040208163e-16
+// mean(f - f_GSL): -1.3600232051658169e-16
+// variance(f - f_GSL): 3.4696222370958397e-32
+// stddev(f - f_GSL): 1.8626922013837496e-16
const testcase_ellint_3<double>
data184[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.29999999999999999,
- 0.0000000000000000 },
- { 0.17472479532647531, 0.89999999999999991, 0.29999999999999999,
- 0.17453292519943295 },
- { 0.35073750187374114, 0.89999999999999991, 0.29999999999999999,
- 0.34906585039886590 },
- { 0.52998766129466957, 0.89999999999999991, 0.29999999999999999,
- 0.52359877559829882 },
- { 0.71566993548699553, 0.89999999999999991, 0.29999999999999999,
- 0.69813170079773179 },
- { 0.91271517762560195, 0.89999999999999991, 0.29999999999999999,
- 0.87266462599716477 },
- { 1.1281241199843370, 0.89999999999999991, 0.29999999999999999,
- 1.0471975511965976 },
- { 1.3704929576917448, 0.89999999999999991, 0.29999999999999999,
- 1.2217304763960306 },
- { 1.6461981511487711, 0.89999999999999991, 0.29999999999999999,
- 1.3962634015954636 },
- { 1.9486280260314426, 0.89999999999999991, 0.29999999999999999,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.30000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17472479532647531, 0.90000000000000013, 0.30000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.35073750187374114, 0.90000000000000013, 0.30000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.52998766129466968, 0.90000000000000013, 0.30000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.71566993548699576, 0.90000000000000013, 0.30000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.91271517762560206, 0.90000000000000013, 0.30000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.1281241199843370, 0.90000000000000013, 0.30000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.3704929576917457, 0.90000000000000013, 0.30000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.6461981511487720, 0.90000000000000013, 0.30000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.9486280260314432, 0.90000000000000013, 0.30000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler184 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.40000000000000002.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.7646208744449464e-16
+// Test data for k=0.90000000000000013, nu=0.40000000000000002.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 3.7225551685500546e-16
+// mean(f - f_GSL): -1.4710455076283324e-16
+// variance(f - f_GSL): 3.3258194679149261e-32
+// stddev(f - f_GSL): 1.8236829406217864e-16
const testcase_ellint_3<double>
data185[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.40000000000000002,
- 0.0000000000000000 },
- { 0.17454957156468837, 0.89999999999999991, 0.40000000000000002,
- 0.17453292519943295 },
- { 0.34938003933330430, 0.89999999999999991, 0.40000000000000002,
- 0.34906585039886590 },
- { 0.52562093533067433, 0.89999999999999991, 0.40000000000000002,
- 0.52359877559829882 },
- { 0.70589461324915670, 0.89999999999999991, 0.40000000000000002,
- 0.69813170079773179 },
- { 0.89472658511942849, 0.89999999999999991, 0.40000000000000002,
- 0.87266462599716477 },
- { 1.0987419542323440, 0.89999999999999991, 0.40000000000000002,
- 1.0471975511965976 },
- { 1.3261349565496301, 0.89999999999999991, 0.40000000000000002,
- 1.2217304763960306 },
- { 1.5831293909853763, 0.89999999999999991, 0.40000000000000002,
- 1.3962634015954636 },
- { 1.8641114227238351, 0.89999999999999991, 0.40000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.40000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17454957156468837, 0.90000000000000013, 0.40000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34938003933330430, 0.90000000000000013, 0.40000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.52562093533067444, 0.90000000000000013, 0.40000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.70589461324915692, 0.90000000000000013, 0.40000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.89472658511942871, 0.90000000000000013, 0.40000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 1.0987419542323440, 0.90000000000000013, 0.40000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.3261349565496310, 0.90000000000000013, 0.40000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.5831293909853772, 0.90000000000000013, 0.40000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.8641114227238358, 0.90000000000000013, 0.40000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler185 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.50000000000000000.
-// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 4.9652155758573562e-16
+// Test data for k=0.90000000000000013, nu=0.50000000000000000.
+// max(|f - f_GSL|): 6.6613381477509392e-16
+// max(|f - f_GSL| / |f_GSL|): 4.3640087629561972e-16
+// mean(f - f_GSL): -1.6930901125533636e-16
+// variance(f - f_GSL): 9.3215009308342213e-33
+// stddev(f - f_GSL): 9.6547920385859273e-17
const testcase_ellint_3<double>
data186[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.50000000000000000,
- 0.0000000000000000 },
- { 0.17437497557073334, 0.89999999999999991, 0.50000000000000000,
- 0.17453292519943295 },
- { 0.34804093691586013, 0.89999999999999991, 0.50000000000000000,
- 0.34906585039886590 },
- { 0.52137576320372891, 0.89999999999999991, 0.50000000000000000,
- 0.52359877559829882 },
- { 0.69655163996912262, 0.89999999999999991, 0.50000000000000000,
- 0.69813170079773179 },
- { 0.87783188683054236, 0.89999999999999991, 0.50000000000000000,
- 0.87266462599716477 },
- { 1.0716015959755185, 0.89999999999999991, 0.50000000000000000,
- 1.0471975511965976 },
- { 1.2857636916026749, 0.89999999999999991, 0.50000000000000000,
- 1.2217304763960306 },
- { 1.5264263913252358, 0.89999999999999991, 0.50000000000000000,
- 1.3962634015954636 },
- { 1.7888013241937863, 0.89999999999999991, 0.50000000000000000,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.50000000000000000,
+ 0.0000000000000000, 0.0 },
+ { 0.17437497557073334, 0.90000000000000013, 0.50000000000000000,
+ 0.17453292519943295, 0.0 },
+ { 0.34804093691586013, 0.90000000000000013, 0.50000000000000000,
+ 0.34906585039886590, 0.0 },
+ { 0.52137576320372903, 0.90000000000000013, 0.50000000000000000,
+ 0.52359877559829882, 0.0 },
+ { 0.69655163996912284, 0.90000000000000013, 0.50000000000000000,
+ 0.69813170079773179, 0.0 },
+ { 0.87783188683054247, 0.90000000000000013, 0.50000000000000000,
+ 0.87266462599716477, 0.0 },
+ { 1.0716015959755185, 0.90000000000000013, 0.50000000000000000,
+ 1.0471975511965976, 0.0 },
+ { 1.2857636916026756, 0.90000000000000013, 0.50000000000000000,
+ 1.2217304763960306, 0.0 },
+ { 1.5264263913252369, 0.90000000000000013, 0.50000000000000000,
+ 1.3962634015954636, 0.0 },
+ { 1.7888013241937870, 0.90000000000000013, 0.50000000000000000,
+ 1.5707963267948966, 0.0 },
};
const double toler186 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.59999999999999998.
-// max(|f - f_GSL|): 6.6613381477509392e-16
-// max(|f - f_GSL| / |f_GSL|): 3.8702201113622378e-16
+// Test data for k=0.90000000000000013, nu=0.60000000000000009.
+// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL| / |f_GSL|): 3.8642367933152869e-16
+// mean(f - f_GSL): -8.0491169285323847e-17
+// variance(f - f_GSL): 1.6321424086730545e-32
+// stddev(f - f_GSL): 1.2775532899542994e-16
const testcase_ellint_3<double>
data187[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.59999999999999998,
- 0.0000000000000000 },
- { 0.17420100334657812, 0.89999999999999991, 0.59999999999999998,
- 0.17453292519943295 },
- { 0.34671975876122157, 0.89999999999999991, 0.59999999999999998,
- 0.34906585039886590 },
- { 0.51724631570707946, 0.89999999999999991, 0.59999999999999998,
- 0.52359877559829882 },
- { 0.68760879113743023, 0.89999999999999991, 0.59999999999999998,
- 0.69813170079773179 },
- { 0.86192157779698364, 0.89999999999999991, 0.59999999999999998,
- 0.87266462599716477 },
- { 1.0464279696166354, 0.89999999999999991, 0.59999999999999998,
- 1.0471975511965976 },
- { 1.2488156247094004, 0.89999999999999991, 0.59999999999999998,
- 1.2217304763960306 },
- { 1.4750988777188470, 0.89999999999999991, 0.59999999999999998,
- 1.3962634015954636 },
- { 1.7211781128919525, 0.89999999999999991, 0.59999999999999998,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.60000000000000009,
+ 0.0000000000000000, 0.0 },
+ { 0.17420100334657812, 0.90000000000000013, 0.60000000000000009,
+ 0.17453292519943295, 0.0 },
+ { 0.34671975876122157, 0.90000000000000013, 0.60000000000000009,
+ 0.34906585039886590, 0.0 },
+ { 0.51724631570707957, 0.90000000000000013, 0.60000000000000009,
+ 0.52359877559829882, 0.0 },
+ { 0.68760879113743045, 0.90000000000000013, 0.60000000000000009,
+ 0.69813170079773179, 0.0 },
+ { 0.86192157779698386, 0.90000000000000013, 0.60000000000000009,
+ 0.87266462599716477, 0.0 },
+ { 1.0464279696166352, 0.90000000000000013, 0.60000000000000009,
+ 1.0471975511965976, 0.0 },
+ { 1.2488156247094011, 0.90000000000000013, 0.60000000000000009,
+ 1.2217304763960306, 0.0 },
+ { 1.4750988777188478, 0.90000000000000013, 0.60000000000000009,
+ 1.3962634015954636, 0.0 },
+ { 1.7211781128919528, 0.90000000000000013, 0.60000000000000009,
+ 1.5707963267948966, 0.0 },
};
const double toler187 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.69999999999999996.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 4.3410843563834748e-16
+// Test data for k=0.90000000000000013, nu=0.70000000000000007.
+// max(|f - f_GSL|): 8.8817841970012523e-16
+// max(|f - f_GSL| / |f_GSL|): 5.3503174588768281e-16
+// mean(f - f_GSL): -1.9151347174783951e-16
+// variance(f - f_GSL): 5.9918771568563080e-32
+// stddev(f - f_GSL): 2.4478311128131998e-16
const testcase_ellint_3<double>
data188[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.69999999999999996,
- 0.0000000000000000 },
- { 0.17402765093102207, 0.89999999999999991, 0.69999999999999996,
- 0.17453292519943295 },
- { 0.34541608382635131, 0.89999999999999991, 0.69999999999999996,
- 0.34906585039886590 },
- { 0.51322715827061682, 0.89999999999999991, 0.69999999999999996,
- 0.52359877559829882 },
- { 0.67903717872440272, 0.89999999999999991, 0.69999999999999996,
- 0.69813170079773179 },
- { 0.84690113601682671, 0.89999999999999991, 0.69999999999999996,
- 0.87266462599716477 },
- { 1.0229914311548418, 0.89999999999999991, 0.69999999999999996,
- 1.0471975511965976 },
- { 1.2148329639709381, 0.89999999999999991, 0.69999999999999996,
- 1.2217304763960306 },
- { 1.4283586501307799, 0.89999999999999991, 0.69999999999999996,
- 1.3962634015954636 },
- { 1.6600480747670940, 0.89999999999999991, 0.69999999999999996,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.70000000000000007,
+ 0.0000000000000000, 0.0 },
+ { 0.17402765093102207, 0.90000000000000013, 0.70000000000000007,
+ 0.17453292519943295, 0.0 },
+ { 0.34541608382635131, 0.90000000000000013, 0.70000000000000007,
+ 0.34906585039886590, 0.0 },
+ { 0.51322715827061693, 0.90000000000000013, 0.70000000000000007,
+ 0.52359877559829882, 0.0 },
+ { 0.67903717872440295, 0.90000000000000013, 0.70000000000000007,
+ 0.69813170079773179, 0.0 },
+ { 0.84690113601682682, 0.90000000000000013, 0.70000000000000007,
+ 0.87266462599716477, 0.0 },
+ { 1.0229914311548416, 0.90000000000000013, 0.70000000000000007,
+ 1.0471975511965976, 0.0 },
+ { 1.2148329639709388, 0.90000000000000013, 0.70000000000000007,
+ 1.2217304763960306, 0.0 },
+ { 1.4283586501307808, 0.90000000000000013, 0.70000000000000007,
+ 1.3962634015954636, 0.0 },
+ { 1.6600480747670945, 0.90000000000000013, 0.70000000000000007,
+ 1.5707963267948966, 0.0 },
};
const double toler188 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.80000000000000004.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3100928058463168e-16
+// Test data for k=0.90000000000000013, nu=0.80000000000000004.
+// max(|f - f_GSL|): 1.3322676295501878e-15
+// max(|f - f_GSL| / |f_GSL|): 8.3035307646965527e-16
+// mean(f - f_GSL): -1.9151347174783951e-16
+// variance(f - f_GSL): 1.6065679611646236e-31
+// stddev(f - f_GSL): 4.0082015432917339e-16
const testcase_ellint_3<double>
data189[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.80000000000000004,
- 0.0000000000000000 },
- { 0.17385491439925146, 0.89999999999999991, 0.80000000000000004,
- 0.17453292519943295 },
- { 0.34412950523113928, 0.89999999999999991, 0.80000000000000004,
- 0.34906585039886590 },
- { 0.50931321668729590, 0.89999999999999991, 0.80000000000000004,
- 0.52359877559829882 },
- { 0.67081081392296327, 0.89999999999999991, 0.80000000000000004,
- 0.69813170079773179 },
- { 0.83268846097293259, 0.89999999999999991, 0.80000000000000004,
- 0.87266462599716477 },
- { 1.0010985015814027, 0.89999999999999991, 0.80000000000000004,
- 1.0471975511965976 },
- { 1.1834394045489678, 0.89999999999999991, 0.80000000000000004,
- 1.2217304763960306 },
- { 1.3855695891683182, 0.89999999999999991, 0.80000000000000004,
- 1.3962634015954636 },
- { 1.6044591960982202, 0.89999999999999991, 0.80000000000000004,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.80000000000000004,
+ 0.0000000000000000, 0.0 },
+ { 0.17385491439925146, 0.90000000000000013, 0.80000000000000004,
+ 0.17453292519943295, 0.0 },
+ { 0.34412950523113928, 0.90000000000000013, 0.80000000000000004,
+ 0.34906585039886590, 0.0 },
+ { 0.50931321668729601, 0.90000000000000013, 0.80000000000000004,
+ 0.52359877559829882, 0.0 },
+ { 0.67081081392296349, 0.90000000000000013, 0.80000000000000004,
+ 0.69813170079773179, 0.0 },
+ { 0.83268846097293281, 0.90000000000000013, 0.80000000000000004,
+ 0.87266462599716477, 0.0 },
+ { 1.0010985015814027, 0.90000000000000013, 0.80000000000000004,
+ 1.0471975511965976, 0.0 },
+ { 1.1834394045489685, 0.90000000000000013, 0.80000000000000004,
+ 1.2217304763960306, 0.0 },
+ { 1.3855695891683193, 0.90000000000000013, 0.80000000000000004,
+ 1.3962634015954636, 0.0 },
+ { 1.6044591960982211, 0.90000000000000013, 0.80000000000000004,
+ 1.5707963267948966, 0.0 },
};
const double toler189 = 2.5000000000000020e-13;
-// Test data for k=0.89999999999999991, nu=0.90000000000000002.
+// Test data for k=0.90000000000000013, nu=0.90000000000000002.
// max(|f - f_GSL|): 8.8817841970012523e-16
-// max(|f - f_GSL| / |f_GSL|): 5.7167507456081732e-16
+// max(|f - f_GSL| / |f_GSL|): 6.5976119219230853e-16
+// mean(f - f_GSL): -2.0261570199409106e-16
+// variance(f - f_GSL): 2.6524572947662036e-32
+// stddev(f - f_GSL): 1.6286366368119696e-16
const testcase_ellint_3<double>
data190[10] =
{
- { 0.0000000000000000, 0.89999999999999991, 0.90000000000000002,
- 0.0000000000000000 },
- { 0.17368278986240135, 0.89999999999999991, 0.90000000000000002,
- 0.17453292519943295 },
- { 0.34285962963961397, 0.89999999999999991, 0.90000000000000002,
- 0.34906585039886590 },
- { 0.50549974644993312, 0.89999999999999991, 0.90000000000000002,
- 0.52359877559829882 },
- { 0.66290623857720876, 0.89999999999999991, 0.90000000000000002,
- 0.69813170079773179 },
- { 0.81921183128847175, 0.89999999999999991, 0.90000000000000002,
- 0.87266462599716477 },
- { 0.98058481956066390, 0.89999999999999991, 0.90000000000000002,
- 1.0471975511965976 },
- { 1.1543223520473569, 0.89999999999999991, 0.90000000000000002,
- 1.2217304763960306 },
- { 1.3462119782292934, 0.89999999999999991, 0.90000000000000002,
- 1.3962634015954636 },
- { 1.5536420236310948, 0.89999999999999991, 0.90000000000000002,
- 1.5707963267948966 },
+ { 0.0000000000000000, 0.90000000000000013, 0.90000000000000002,
+ 0.0000000000000000, 0.0 },
+ { 0.17368278986240135, 0.90000000000000013, 0.90000000000000002,
+ 0.17453292519943295, 0.0 },
+ { 0.34285962963961397, 0.90000000000000013, 0.90000000000000002,
+ 0.34906585039886590, 0.0 },
+ { 0.50549974644993323, 0.90000000000000013, 0.90000000000000002,
+ 0.52359877559829882, 0.0 },
+ { 0.66290623857720887, 0.90000000000000013, 0.90000000000000002,
+ 0.69813170079773179, 0.0 },
+ { 0.81921183128847197, 0.90000000000000013, 0.90000000000000002,
+ 0.87266462599716477, 0.0 },
+ { 0.98058481956066390, 0.90000000000000013, 0.90000000000000002,
+ 1.0471975511965976, 0.0 },
+ { 1.1543223520473576, 0.90000000000000013, 0.90000000000000002,
+ 1.2217304763960306, 0.0 },
+ { 1.3462119782292943, 0.90000000000000013, 0.90000000000000002,
+ 1.3962634015954636, 0.0 },
+ { 1.5536420236310955, 0.90000000000000013, 0.90000000000000002,
+ 1.5707963267948966, 0.0 },
};
const double toler190 = 2.5000000000000020e-13;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_ellint_3<Tp> (&data)[Num], Tp toler)
+ test(const testcase_ellint_3<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::ellint_3(data[i].k, data[i].nu,
+ const Ret f = std::ellint_3(data[i].k, data[i].nu,
data[i].phi);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc b/libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc
index 5b3f8e0bea6..5c09b39691e 100644
--- a/libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/14_expint/check_value.cc
@@ -41,59 +41,62 @@
// Test data.
// max(|f - f_GSL|): 4.4408920985006262e-16
// max(|f - f_GSL| / |f_GSL|): 2.0242558374827411e-15
+// mean(f - f_GSL): 1.0184926479400409e-17
+// variance(f - f_GSL): 3.9207190155645133e-33
+// stddev(f - f_GSL): 6.2615645134139710e-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.2470206975885714e-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.0767670386162383e-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.3064319898216547e-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.0037793524098489058, -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
@@ -102,82 +105,85 @@ const double toler001 = 2.5000000000000020e-13;
// Test data.
// max(|f - f_GSL|): 2048.0000000000000
// max(|f - f_GSL| / |f_GSL|): 1.4993769017626171e-15
+// mean(f - f_GSL): -28.457166483323103
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): 1.1944581611574716e+294
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.355484925, 21.000000000000000, 0.0 },
+ { 171144671.30036369, 22.000000000000000, 0.0 },
+ { 443966369.83027124, 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 },
+ { 42447960921368504., 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc b/libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc
index a805549758a..8dbae83a8c9 100644
--- a/libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/15_hermite/check_value.cc
@@ -41,1703 +41,1886 @@
// Test data for n=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data001[201] =
{
- { 1.0000000000000000, 0, -10.000000000000000 },
- { 1.0000000000000000, 0, -9.9000000000000004 },
- { 1.0000000000000000, 0, -9.8000000000000007 },
- { 1.0000000000000000, 0, -9.6999999999999993 },
- { 1.0000000000000000, 0, -9.5999999999999996 },
- { 1.0000000000000000, 0, -9.5000000000000000 },
- { 1.0000000000000000, 0, -9.4000000000000004 },
- { 1.0000000000000000, 0, -9.3000000000000007 },
- { 1.0000000000000000, 0, -9.1999999999999993 },
- { 1.0000000000000000, 0, -9.0999999999999996 },
- { 1.0000000000000000, 0, -9.0000000000000000 },
- { 1.0000000000000000, 0, -8.9000000000000004 },
- { 1.0000000000000000, 0, -8.8000000000000007 },
- { 1.0000000000000000, 0, -8.6999999999999993 },
- { 1.0000000000000000, 0, -8.5999999999999996 },
- { 1.0000000000000000, 0, -8.5000000000000000 },
- { 1.0000000000000000, 0, -8.4000000000000004 },
- { 1.0000000000000000, 0, -8.3000000000000007 },
- { 1.0000000000000000, 0, -8.1999999999999993 },
- { 1.0000000000000000, 0, -8.0999999999999996 },
- { 1.0000000000000000, 0, -8.0000000000000000 },
- { 1.0000000000000000, 0, -7.9000000000000004 },
- { 1.0000000000000000, 0, -7.7999999999999998 },
- { 1.0000000000000000, 0, -7.7000000000000002 },
- { 1.0000000000000000, 0, -7.5999999999999996 },
- { 1.0000000000000000, 0, -7.5000000000000000 },
- { 1.0000000000000000, 0, -7.4000000000000004 },
- { 1.0000000000000000, 0, -7.2999999999999998 },
- { 1.0000000000000000, 0, -7.2000000000000002 },
- { 1.0000000000000000, 0, -7.0999999999999996 },
- { 1.0000000000000000, 0, -7.0000000000000000 },
- { 1.0000000000000000, 0, -6.9000000000000004 },
- { 1.0000000000000000, 0, -6.7999999999999998 },
- { 1.0000000000000000, 0, -6.7000000000000002 },
- { 1.0000000000000000, 0, -6.5999999999999996 },
- { 1.0000000000000000, 0, -6.5000000000000000 },
- { 1.0000000000000000, 0, -6.4000000000000004 },
- { 1.0000000000000000, 0, -6.2999999999999998 },
- { 1.0000000000000000, 0, -6.2000000000000002 },
- { 1.0000000000000000, 0, -6.0999999999999996 },
- { 1.0000000000000000, 0, -6.0000000000000000 },
- { 1.0000000000000000, 0, -5.9000000000000004 },
- { 1.0000000000000000, 0, -5.7999999999999998 },
- { 1.0000000000000000, 0, -5.7000000000000002 },
- { 1.0000000000000000, 0, -5.5999999999999996 },
- { 1.0000000000000000, 0, -5.5000000000000000 },
- { 1.0000000000000000, 0, -5.4000000000000004 },
- { 1.0000000000000000, 0, -5.2999999999999998 },
- { 1.0000000000000000, 0, -5.2000000000000002 },
- { 1.0000000000000000, 0, -5.0999999999999996 },
- { 1.0000000000000000, 0, -5.0000000000000000 },
- { 1.0000000000000000, 0, -4.9000000000000004 },
- { 1.0000000000000000, 0, -4.7999999999999998 },
- { 1.0000000000000000, 0, -4.7000000000000002 },
- { 1.0000000000000000, 0, -4.5999999999999996 },
- { 1.0000000000000000, 0, -4.5000000000000000 },
- { 1.0000000000000000, 0, -4.4000000000000004 },
- { 1.0000000000000000, 0, -4.2999999999999998 },
- { 1.0000000000000000, 0, -4.2000000000000002 },
- { 1.0000000000000000, 0, -4.0999999999999996 },
- { 1.0000000000000000, 0, -4.0000000000000000 },
- { 1.0000000000000000, 0, -3.9000000000000004 },
- { 1.0000000000000000, 0, -3.7999999999999998 },
- { 1.0000000000000000, 0, -3.7000000000000002 },
- { 1.0000000000000000, 0, -3.5999999999999996 },
- { 1.0000000000000000, 0, -3.5000000000000000 },
- { 1.0000000000000000, 0, -3.4000000000000004 },
- { 1.0000000000000000, 0, -3.2999999999999998 },
- { 1.0000000000000000, 0, -3.2000000000000002 },
- { 1.0000000000000000, 0, -3.0999999999999996 },
- { 1.0000000000000000, 0, -3.0000000000000000 },
- { 1.0000000000000000, 0, -2.9000000000000004 },
- { 1.0000000000000000, 0, -2.7999999999999998 },
- { 1.0000000000000000, 0, -2.7000000000000002 },
- { 1.0000000000000000, 0, -2.5999999999999996 },
- { 1.0000000000000000, 0, -2.5000000000000000 },
- { 1.0000000000000000, 0, -2.4000000000000004 },
- { 1.0000000000000000, 0, -2.2999999999999998 },
- { 1.0000000000000000, 0, -2.2000000000000002 },
- { 1.0000000000000000, 0, -2.0999999999999996 },
- { 1.0000000000000000, 0, -2.0000000000000000 },
- { 1.0000000000000000, 0, -1.9000000000000004 },
- { 1.0000000000000000, 0, -1.8000000000000007 },
- { 1.0000000000000000, 0, -1.6999999999999993 },
- { 1.0000000000000000, 0, -1.5999999999999996 },
- { 1.0000000000000000, 0, -1.5000000000000000 },
- { 1.0000000000000000, 0, -1.4000000000000004 },
- { 1.0000000000000000, 0, -1.3000000000000007 },
- { 1.0000000000000000, 0, -1.1999999999999993 },
- { 1.0000000000000000, 0, -1.0999999999999996 },
- { 1.0000000000000000, 0, -1.0000000000000000 },
- { 1.0000000000000000, 0, -0.90000000000000036 },
- { 1.0000000000000000, 0, -0.80000000000000071 },
- { 1.0000000000000000, 0, -0.69999999999999929 },
- { 1.0000000000000000, 0, -0.59999999999999964 },
- { 1.0000000000000000, 0, -0.50000000000000000 },
- { 1.0000000000000000, 0, -0.40000000000000036 },
- { 1.0000000000000000, 0, -0.30000000000000071 },
- { 1.0000000000000000, 0, -0.19999999999999929 },
- { 1.0000000000000000, 0, -0.099999999999999645 },
- { 1.0000000000000000, 0, 0.0000000000000000 },
- { 1.0000000000000000, 0, 0.099999999999999645 },
- { 1.0000000000000000, 0, 0.19999999999999929 },
- { 1.0000000000000000, 0, 0.30000000000000071 },
- { 1.0000000000000000, 0, 0.40000000000000036 },
- { 1.0000000000000000, 0, 0.50000000000000000 },
- { 1.0000000000000000, 0, 0.59999999999999964 },
- { 1.0000000000000000, 0, 0.69999999999999929 },
- { 1.0000000000000000, 0, 0.80000000000000071 },
- { 1.0000000000000000, 0, 0.90000000000000036 },
- { 1.0000000000000000, 0, 1.0000000000000000 },
- { 1.0000000000000000, 0, 1.0999999999999996 },
- { 1.0000000000000000, 0, 1.1999999999999993 },
- { 1.0000000000000000, 0, 1.3000000000000007 },
- { 1.0000000000000000, 0, 1.4000000000000004 },
- { 1.0000000000000000, 0, 1.5000000000000000 },
- { 1.0000000000000000, 0, 1.5999999999999996 },
- { 1.0000000000000000, 0, 1.6999999999999993 },
- { 1.0000000000000000, 0, 1.8000000000000007 },
- { 1.0000000000000000, 0, 1.9000000000000004 },
- { 1.0000000000000000, 0, 2.0000000000000000 },
- { 1.0000000000000000, 0, 2.0999999999999996 },
- { 1.0000000000000000, 0, 2.1999999999999993 },
- { 1.0000000000000000, 0, 2.3000000000000007 },
- { 1.0000000000000000, 0, 2.4000000000000004 },
- { 1.0000000000000000, 0, 2.5000000000000000 },
- { 1.0000000000000000, 0, 2.5999999999999996 },
- { 1.0000000000000000, 0, 2.6999999999999993 },
- { 1.0000000000000000, 0, 2.8000000000000007 },
- { 1.0000000000000000, 0, 2.9000000000000004 },
- { 1.0000000000000000, 0, 3.0000000000000000 },
- { 1.0000000000000000, 0, 3.0999999999999996 },
- { 1.0000000000000000, 0, 3.1999999999999993 },
- { 1.0000000000000000, 0, 3.3000000000000007 },
- { 1.0000000000000000, 0, 3.4000000000000004 },
- { 1.0000000000000000, 0, 3.5000000000000000 },
- { 1.0000000000000000, 0, 3.5999999999999996 },
- { 1.0000000000000000, 0, 3.6999999999999993 },
- { 1.0000000000000000, 0, 3.8000000000000007 },
- { 1.0000000000000000, 0, 3.9000000000000004 },
- { 1.0000000000000000, 0, 4.0000000000000000 },
- { 1.0000000000000000, 0, 4.0999999999999996 },
- { 1.0000000000000000, 0, 4.1999999999999993 },
- { 1.0000000000000000, 0, 4.3000000000000007 },
- { 1.0000000000000000, 0, 4.4000000000000004 },
- { 1.0000000000000000, 0, 4.5000000000000000 },
- { 1.0000000000000000, 0, 4.5999999999999996 },
- { 1.0000000000000000, 0, 4.6999999999999993 },
- { 1.0000000000000000, 0, 4.8000000000000007 },
- { 1.0000000000000000, 0, 4.9000000000000004 },
- { 1.0000000000000000, 0, 5.0000000000000000 },
- { 1.0000000000000000, 0, 5.0999999999999996 },
- { 1.0000000000000000, 0, 5.1999999999999993 },
- { 1.0000000000000000, 0, 5.3000000000000007 },
- { 1.0000000000000000, 0, 5.4000000000000004 },
- { 1.0000000000000000, 0, 5.5000000000000000 },
- { 1.0000000000000000, 0, 5.5999999999999996 },
- { 1.0000000000000000, 0, 5.6999999999999993 },
- { 1.0000000000000000, 0, 5.8000000000000007 },
- { 1.0000000000000000, 0, 5.9000000000000004 },
- { 1.0000000000000000, 0, 6.0000000000000000 },
- { 1.0000000000000000, 0, 6.1000000000000014 },
- { 1.0000000000000000, 0, 6.1999999999999993 },
- { 1.0000000000000000, 0, 6.3000000000000007 },
- { 1.0000000000000000, 0, 6.3999999999999986 },
- { 1.0000000000000000, 0, 6.5000000000000000 },
- { 1.0000000000000000, 0, 6.6000000000000014 },
- { 1.0000000000000000, 0, 6.6999999999999993 },
- { 1.0000000000000000, 0, 6.8000000000000007 },
- { 1.0000000000000000, 0, 6.8999999999999986 },
- { 1.0000000000000000, 0, 7.0000000000000000 },
- { 1.0000000000000000, 0, 7.1000000000000014 },
- { 1.0000000000000000, 0, 7.1999999999999993 },
- { 1.0000000000000000, 0, 7.3000000000000007 },
- { 1.0000000000000000, 0, 7.3999999999999986 },
- { 1.0000000000000000, 0, 7.5000000000000000 },
- { 1.0000000000000000, 0, 7.6000000000000014 },
- { 1.0000000000000000, 0, 7.6999999999999993 },
- { 1.0000000000000000, 0, 7.8000000000000007 },
- { 1.0000000000000000, 0, 7.8999999999999986 },
- { 1.0000000000000000, 0, 8.0000000000000000 },
- { 1.0000000000000000, 0, 8.1000000000000014 },
- { 1.0000000000000000, 0, 8.1999999999999993 },
- { 1.0000000000000000, 0, 8.3000000000000007 },
- { 1.0000000000000000, 0, 8.3999999999999986 },
- { 1.0000000000000000, 0, 8.5000000000000000 },
- { 1.0000000000000000, 0, 8.6000000000000014 },
- { 1.0000000000000000, 0, 8.6999999999999993 },
- { 1.0000000000000000, 0, 8.8000000000000007 },
- { 1.0000000000000000, 0, 8.8999999999999986 },
- { 1.0000000000000000, 0, 9.0000000000000000 },
- { 1.0000000000000000, 0, 9.1000000000000014 },
- { 1.0000000000000000, 0, 9.1999999999999993 },
- { 1.0000000000000000, 0, 9.3000000000000007 },
- { 1.0000000000000000, 0, 9.3999999999999986 },
- { 1.0000000000000000, 0, 9.5000000000000000 },
- { 1.0000000000000000, 0, 9.6000000000000014 },
- { 1.0000000000000000, 0, 9.6999999999999993 },
- { 1.0000000000000000, 0, 9.8000000000000007 },
- { 1.0000000000000000, 0, 9.8999999999999986 },
- { 1.0000000000000000, 0, 10.000000000000000 },
+ { 1.0000000000000000, 0, -10.000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -9.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -9.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, -9.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -9.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -9.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -9.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -9.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, -9.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -9.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -9.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -8.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -8.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, -8.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -8.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -8.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -8.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -8.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, -8.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -8.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -8.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -7.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -7.7999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -7.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -7.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -7.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -7.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -7.2999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -7.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -7.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -7.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -6.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -6.7999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -6.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -6.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -6.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -6.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -6.2999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -6.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -6.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -6.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -5.8999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -5.7999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -5.7000000000000002, 0.0 },
+ { 1.0000000000000000, 0, -5.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -5.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -5.3999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -5.2999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -5.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -5.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -5.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -4.8999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -4.7999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -4.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -4.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -4.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -4.3999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -4.2999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -4.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -4.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -4.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -3.8999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -3.7999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -3.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -3.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -3.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -3.3999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -3.2999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -3.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -3.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -3.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -2.8999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -2.7999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -2.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -2.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -2.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -2.3999999999999995, 0.0 },
+ { 1.0000000000000000, 0, -2.2999999999999998, 0.0 },
+ { 1.0000000000000000, 0, -2.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -2.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -2.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -1.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -1.7999999999999989, 0.0 },
+ { 1.0000000000000000, 0, -1.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -1.5999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -1.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -1.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, -1.2999999999999989, 0.0 },
+ { 1.0000000000000000, 0, -1.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, -1.0999999999999996, 0.0 },
+ { 1.0000000000000000, 0, -1.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -0.90000000000000036, 0.0 },
+ { 1.0000000000000000, 0, -0.79999999999999893, 0.0 },
+ { 1.0000000000000000, 0, -0.69999999999999929, 0.0 },
+ { 1.0000000000000000, 0, -0.59999999999999964, 0.0 },
+ { 1.0000000000000000, 0, -0.50000000000000000, 0.0 },
+ { 1.0000000000000000, 0, -0.39999999999999858, 0.0 },
+ { 1.0000000000000000, 0, -0.29999999999999893, 0.0 },
+ { 1.0000000000000000, 0, -0.19999999999999929, 0.0 },
+ { 1.0000000000000000, 0, -0.099999999999999645, 0.0 },
+ { 1.0000000000000000, 0, 0.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 0.10000000000000142, 0.0 },
+ { 1.0000000000000000, 0, 0.20000000000000107, 0.0 },
+ { 1.0000000000000000, 0, 0.30000000000000071, 0.0 },
+ { 1.0000000000000000, 0, 0.40000000000000036, 0.0 },
+ { 1.0000000000000000, 0, 0.50000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 0.60000000000000142, 0.0 },
+ { 1.0000000000000000, 0, 0.70000000000000107, 0.0 },
+ { 1.0000000000000000, 0, 0.80000000000000071, 0.0 },
+ { 1.0000000000000000, 0, 0.90000000000000036, 0.0 },
+ { 1.0000000000000000, 0, 1.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 1.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 1.2000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 1.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 1.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 1.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 1.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 1.7000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 1.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 1.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 2.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 2.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 2.2000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 2.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 2.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 2.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 2.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 2.7000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 2.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 2.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 3.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 3.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 3.2000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 3.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 3.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 3.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 3.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 3.7000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 3.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 3.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 4.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 4.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 4.2000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 4.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 4.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 4.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 4.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 4.7000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 4.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 4.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 5.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 5.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 5.2000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 5.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 5.4000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 5.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 5.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 5.7000000000000011, 0.0 },
+ { 1.0000000000000000, 0, 5.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 5.9000000000000004, 0.0 },
+ { 1.0000000000000000, 0, 6.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 6.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 6.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, 6.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 6.4000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 6.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 6.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 6.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, 6.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 6.9000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 7.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 7.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 7.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, 7.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 7.4000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 7.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 7.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 7.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, 7.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 7.9000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 8.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 8.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 8.1999999999999993, 0.0 },
+ { 1.0000000000000000, 0, 8.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 8.4000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 8.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 8.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 8.6999999999999993, 0.0 },
+ { 1.0000000000000000, 0, 8.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 8.9000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 9.0000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 9.1000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 9.2000000000000028, 0.0 },
+ { 1.0000000000000000, 0, 9.3000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 9.4000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 9.5000000000000000, 0.0 },
+ { 1.0000000000000000, 0, 9.6000000000000014, 0.0 },
+ { 1.0000000000000000, 0, 9.7000000000000028, 0.0 },
+ { 1.0000000000000000, 0, 9.8000000000000007, 0.0 },
+ { 1.0000000000000000, 0, 9.9000000000000021, 0.0 },
+ { 1.0000000000000000, 0, 10.000000000000000, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for n=1.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data002[201] =
{
- { -20.000000000000000, 1, -10.000000000000000 },
- { -19.800000000000001, 1, -9.9000000000000004 },
- { -19.600000000000001, 1, -9.8000000000000007 },
- { -19.399999999999999, 1, -9.6999999999999993 },
- { -19.199999999999999, 1, -9.5999999999999996 },
- { -19.000000000000000, 1, -9.5000000000000000 },
- { -18.800000000000001, 1, -9.4000000000000004 },
- { -18.600000000000001, 1, -9.3000000000000007 },
- { -18.399999999999999, 1, -9.1999999999999993 },
- { -18.199999999999999, 1, -9.0999999999999996 },
- { -18.000000000000000, 1, -9.0000000000000000 },
- { -17.800000000000001, 1, -8.9000000000000004 },
- { -17.600000000000001, 1, -8.8000000000000007 },
- { -17.399999999999999, 1, -8.6999999999999993 },
- { -17.199999999999999, 1, -8.5999999999999996 },
- { -17.000000000000000, 1, -8.5000000000000000 },
- { -16.800000000000001, 1, -8.4000000000000004 },
- { -16.600000000000001, 1, -8.3000000000000007 },
- { -16.399999999999999, 1, -8.1999999999999993 },
- { -16.199999999999999, 1, -8.0999999999999996 },
- { -16.000000000000000, 1, -8.0000000000000000 },
- { -15.800000000000001, 1, -7.9000000000000004 },
- { -15.600000000000000, 1, -7.7999999999999998 },
- { -15.400000000000000, 1, -7.7000000000000002 },
- { -15.199999999999999, 1, -7.5999999999999996 },
- { -15.000000000000000, 1, -7.5000000000000000 },
- { -14.800000000000001, 1, -7.4000000000000004 },
- { -14.600000000000000, 1, -7.2999999999999998 },
- { -14.400000000000000, 1, -7.2000000000000002 },
- { -14.199999999999999, 1, -7.0999999999999996 },
- { -14.000000000000000, 1, -7.0000000000000000 },
- { -13.800000000000001, 1, -6.9000000000000004 },
- { -13.600000000000000, 1, -6.7999999999999998 },
- { -13.400000000000000, 1, -6.7000000000000002 },
- { -13.199999999999999, 1, -6.5999999999999996 },
- { -13.000000000000000, 1, -6.5000000000000000 },
- { -12.800000000000001, 1, -6.4000000000000004 },
- { -12.600000000000000, 1, -6.2999999999999998 },
- { -12.400000000000000, 1, -6.2000000000000002 },
- { -12.199999999999999, 1, -6.0999999999999996 },
- { -12.000000000000000, 1, -6.0000000000000000 },
- { -11.800000000000001, 1, -5.9000000000000004 },
- { -11.600000000000000, 1, -5.7999999999999998 },
- { -11.400000000000000, 1, -5.7000000000000002 },
- { -11.199999999999999, 1, -5.5999999999999996 },
- { -11.000000000000000, 1, -5.5000000000000000 },
- { -10.800000000000001, 1, -5.4000000000000004 },
- { -10.600000000000000, 1, -5.2999999999999998 },
- { -10.400000000000000, 1, -5.2000000000000002 },
- { -10.199999999999999, 1, -5.0999999999999996 },
- { -10.000000000000000, 1, -5.0000000000000000 },
- { -9.8000000000000007, 1, -4.9000000000000004 },
- { -9.5999999999999996, 1, -4.7999999999999998 },
- { -9.4000000000000004, 1, -4.7000000000000002 },
- { -9.1999999999999993, 1, -4.5999999999999996 },
- { -9.0000000000000000, 1, -4.5000000000000000 },
- { -8.8000000000000007, 1, -4.4000000000000004 },
- { -8.5999999999999996, 1, -4.2999999999999998 },
- { -8.4000000000000004, 1, -4.2000000000000002 },
- { -8.1999999999999993, 1, -4.0999999999999996 },
- { -8.0000000000000000, 1, -4.0000000000000000 },
- { -7.8000000000000007, 1, -3.9000000000000004 },
- { -7.5999999999999996, 1, -3.7999999999999998 },
- { -7.4000000000000004, 1, -3.7000000000000002 },
- { -7.1999999999999993, 1, -3.5999999999999996 },
- { -7.0000000000000000, 1, -3.5000000000000000 },
- { -6.8000000000000007, 1, -3.4000000000000004 },
- { -6.5999999999999996, 1, -3.2999999999999998 },
- { -6.4000000000000004, 1, -3.2000000000000002 },
- { -6.1999999999999993, 1, -3.0999999999999996 },
- { -6.0000000000000000, 1, -3.0000000000000000 },
- { -5.8000000000000007, 1, -2.9000000000000004 },
- { -5.5999999999999996, 1, -2.7999999999999998 },
- { -5.4000000000000004, 1, -2.7000000000000002 },
- { -5.1999999999999993, 1, -2.5999999999999996 },
- { -5.0000000000000000, 1, -2.5000000000000000 },
- { -4.8000000000000007, 1, -2.4000000000000004 },
- { -4.5999999999999996, 1, -2.2999999999999998 },
- { -4.4000000000000004, 1, -2.2000000000000002 },
- { -4.1999999999999993, 1, -2.0999999999999996 },
- { -4.0000000000000000, 1, -2.0000000000000000 },
- { -3.8000000000000007, 1, -1.9000000000000004 },
- { -3.6000000000000014, 1, -1.8000000000000007 },
- { -3.3999999999999986, 1, -1.6999999999999993 },
- { -3.1999999999999993, 1, -1.5999999999999996 },
- { -3.0000000000000000, 1, -1.5000000000000000 },
- { -2.8000000000000007, 1, -1.4000000000000004 },
- { -2.6000000000000014, 1, -1.3000000000000007 },
- { -2.3999999999999986, 1, -1.1999999999999993 },
- { -2.1999999999999993, 1, -1.0999999999999996 },
- { -2.0000000000000000, 1, -1.0000000000000000 },
- { -1.8000000000000007, 1, -0.90000000000000036 },
- { -1.6000000000000014, 1, -0.80000000000000071 },
- { -1.3999999999999986, 1, -0.69999999999999929 },
- { -1.1999999999999993, 1, -0.59999999999999964 },
- { -1.0000000000000000, 1, -0.50000000000000000 },
- { -0.80000000000000071, 1, -0.40000000000000036 },
- { -0.60000000000000142, 1, -0.30000000000000071 },
- { -0.39999999999999858, 1, -0.19999999999999929 },
- { -0.19999999999999929, 1, -0.099999999999999645 },
- { 0.0000000000000000, 1, 0.0000000000000000 },
- { 0.19999999999999929, 1, 0.099999999999999645 },
- { 0.39999999999999858, 1, 0.19999999999999929 },
- { 0.60000000000000142, 1, 0.30000000000000071 },
- { 0.80000000000000071, 1, 0.40000000000000036 },
- { 1.0000000000000000, 1, 0.50000000000000000 },
- { 1.1999999999999993, 1, 0.59999999999999964 },
- { 1.3999999999999986, 1, 0.69999999999999929 },
- { 1.6000000000000014, 1, 0.80000000000000071 },
- { 1.8000000000000007, 1, 0.90000000000000036 },
- { 2.0000000000000000, 1, 1.0000000000000000 },
- { 2.1999999999999993, 1, 1.0999999999999996 },
- { 2.3999999999999986, 1, 1.1999999999999993 },
- { 2.6000000000000014, 1, 1.3000000000000007 },
- { 2.8000000000000007, 1, 1.4000000000000004 },
- { 3.0000000000000000, 1, 1.5000000000000000 },
- { 3.1999999999999993, 1, 1.5999999999999996 },
- { 3.3999999999999986, 1, 1.6999999999999993 },
- { 3.6000000000000014, 1, 1.8000000000000007 },
- { 3.8000000000000007, 1, 1.9000000000000004 },
- { 4.0000000000000000, 1, 2.0000000000000000 },
- { 4.1999999999999993, 1, 2.0999999999999996 },
- { 4.3999999999999986, 1, 2.1999999999999993 },
- { 4.6000000000000014, 1, 2.3000000000000007 },
- { 4.8000000000000007, 1, 2.4000000000000004 },
- { 5.0000000000000000, 1, 2.5000000000000000 },
- { 5.1999999999999993, 1, 2.5999999999999996 },
- { 5.3999999999999986, 1, 2.6999999999999993 },
- { 5.6000000000000014, 1, 2.8000000000000007 },
- { 5.8000000000000007, 1, 2.9000000000000004 },
- { 6.0000000000000000, 1, 3.0000000000000000 },
- { 6.1999999999999993, 1, 3.0999999999999996 },
- { 6.3999999999999986, 1, 3.1999999999999993 },
- { 6.6000000000000014, 1, 3.3000000000000007 },
- { 6.8000000000000007, 1, 3.4000000000000004 },
- { 7.0000000000000000, 1, 3.5000000000000000 },
- { 7.1999999999999993, 1, 3.5999999999999996 },
- { 7.3999999999999986, 1, 3.6999999999999993 },
- { 7.6000000000000014, 1, 3.8000000000000007 },
- { 7.8000000000000007, 1, 3.9000000000000004 },
- { 8.0000000000000000, 1, 4.0000000000000000 },
- { 8.1999999999999993, 1, 4.0999999999999996 },
- { 8.3999999999999986, 1, 4.1999999999999993 },
- { 8.6000000000000014, 1, 4.3000000000000007 },
- { 8.8000000000000007, 1, 4.4000000000000004 },
- { 9.0000000000000000, 1, 4.5000000000000000 },
- { 9.1999999999999993, 1, 4.5999999999999996 },
- { 9.3999999999999986, 1, 4.6999999999999993 },
- { 9.6000000000000014, 1, 4.8000000000000007 },
- { 9.8000000000000007, 1, 4.9000000000000004 },
- { 10.000000000000000, 1, 5.0000000000000000 },
- { 10.199999999999999, 1, 5.0999999999999996 },
- { 10.399999999999999, 1, 5.1999999999999993 },
- { 10.600000000000001, 1, 5.3000000000000007 },
- { 10.800000000000001, 1, 5.4000000000000004 },
- { 11.000000000000000, 1, 5.5000000000000000 },
- { 11.199999999999999, 1, 5.5999999999999996 },
- { 11.399999999999999, 1, 5.6999999999999993 },
- { 11.600000000000001, 1, 5.8000000000000007 },
- { 11.800000000000001, 1, 5.9000000000000004 },
- { 12.000000000000000, 1, 6.0000000000000000 },
- { 12.200000000000003, 1, 6.1000000000000014 },
- { 12.399999999999999, 1, 6.1999999999999993 },
- { 12.600000000000001, 1, 6.3000000000000007 },
- { 12.799999999999997, 1, 6.3999999999999986 },
- { 13.000000000000000, 1, 6.5000000000000000 },
- { 13.200000000000003, 1, 6.6000000000000014 },
- { 13.399999999999999, 1, 6.6999999999999993 },
- { 13.600000000000001, 1, 6.8000000000000007 },
- { 13.799999999999997, 1, 6.8999999999999986 },
- { 14.000000000000000, 1, 7.0000000000000000 },
- { 14.200000000000003, 1, 7.1000000000000014 },
- { 14.399999999999999, 1, 7.1999999999999993 },
- { 14.600000000000001, 1, 7.3000000000000007 },
- { 14.799999999999997, 1, 7.3999999999999986 },
- { 15.000000000000000, 1, 7.5000000000000000 },
- { 15.200000000000003, 1, 7.6000000000000014 },
- { 15.399999999999999, 1, 7.6999999999999993 },
- { 15.600000000000001, 1, 7.8000000000000007 },
- { 15.799999999999997, 1, 7.8999999999999986 },
- { 16.000000000000000, 1, 8.0000000000000000 },
- { 16.200000000000003, 1, 8.1000000000000014 },
- { 16.399999999999999, 1, 8.1999999999999993 },
- { 16.600000000000001, 1, 8.3000000000000007 },
- { 16.799999999999997, 1, 8.3999999999999986 },
- { 17.000000000000000, 1, 8.5000000000000000 },
- { 17.200000000000003, 1, 8.6000000000000014 },
- { 17.399999999999999, 1, 8.6999999999999993 },
- { 17.600000000000001, 1, 8.8000000000000007 },
- { 17.799999999999997, 1, 8.8999999999999986 },
- { 18.000000000000000, 1, 9.0000000000000000 },
- { 18.200000000000003, 1, 9.1000000000000014 },
- { 18.399999999999999, 1, 9.1999999999999993 },
- { 18.600000000000001, 1, 9.3000000000000007 },
- { 18.799999999999997, 1, 9.3999999999999986 },
- { 19.000000000000000, 1, 9.5000000000000000 },
- { 19.200000000000003, 1, 9.6000000000000014 },
- { 19.399999999999999, 1, 9.6999999999999993 },
- { 19.600000000000001, 1, 9.8000000000000007 },
- { 19.799999999999997, 1, 9.8999999999999986 },
- { 20.000000000000000, 1, 10.000000000000000 },
+ { -20.000000000000000, 1, -10.000000000000000, 0.0 },
+ { -19.800000000000001, 1, -9.9000000000000004, 0.0 },
+ { -19.600000000000001, 1, -9.8000000000000007, 0.0 },
+ { -19.399999999999999, 1, -9.6999999999999993, 0.0 },
+ { -19.199999999999999, 1, -9.5999999999999996, 0.0 },
+ { -19.000000000000000, 1, -9.5000000000000000, 0.0 },
+ { -18.800000000000001, 1, -9.4000000000000004, 0.0 },
+ { -18.600000000000001, 1, -9.3000000000000007, 0.0 },
+ { -18.399999999999999, 1, -9.1999999999999993, 0.0 },
+ { -18.199999999999999, 1, -9.0999999999999996, 0.0 },
+ { -18.000000000000000, 1, -9.0000000000000000, 0.0 },
+ { -17.800000000000001, 1, -8.9000000000000004, 0.0 },
+ { -17.600000000000001, 1, -8.8000000000000007, 0.0 },
+ { -17.399999999999999, 1, -8.6999999999999993, 0.0 },
+ { -17.199999999999999, 1, -8.5999999999999996, 0.0 },
+ { -17.000000000000000, 1, -8.5000000000000000, 0.0 },
+ { -16.800000000000001, 1, -8.4000000000000004, 0.0 },
+ { -16.600000000000001, 1, -8.3000000000000007, 0.0 },
+ { -16.399999999999999, 1, -8.1999999999999993, 0.0 },
+ { -16.199999999999999, 1, -8.0999999999999996, 0.0 },
+ { -16.000000000000000, 1, -8.0000000000000000, 0.0 },
+ { -15.800000000000001, 1, -7.9000000000000004, 0.0 },
+ { -15.600000000000000, 1, -7.7999999999999998, 0.0 },
+ { -15.399999999999999, 1, -7.6999999999999993, 0.0 },
+ { -15.199999999999999, 1, -7.5999999999999996, 0.0 },
+ { -15.000000000000000, 1, -7.5000000000000000, 0.0 },
+ { -14.800000000000001, 1, -7.4000000000000004, 0.0 },
+ { -14.600000000000000, 1, -7.2999999999999998, 0.0 },
+ { -14.399999999999999, 1, -7.1999999999999993, 0.0 },
+ { -14.199999999999999, 1, -7.0999999999999996, 0.0 },
+ { -14.000000000000000, 1, -7.0000000000000000, 0.0 },
+ { -13.800000000000001, 1, -6.9000000000000004, 0.0 },
+ { -13.600000000000000, 1, -6.7999999999999998, 0.0 },
+ { -13.399999999999999, 1, -6.6999999999999993, 0.0 },
+ { -13.199999999999999, 1, -6.5999999999999996, 0.0 },
+ { -13.000000000000000, 1, -6.5000000000000000, 0.0 },
+ { -12.800000000000001, 1, -6.4000000000000004, 0.0 },
+ { -12.600000000000000, 1, -6.2999999999999998, 0.0 },
+ { -12.399999999999999, 1, -6.1999999999999993, 0.0 },
+ { -12.199999999999999, 1, -6.0999999999999996, 0.0 },
+ { -12.000000000000000, 1, -6.0000000000000000, 0.0 },
+ { -11.799999999999999, 1, -5.8999999999999995, 0.0 },
+ { -11.600000000000000, 1, -5.7999999999999998, 0.0 },
+ { -11.400000000000000, 1, -5.7000000000000002, 0.0 },
+ { -11.199999999999999, 1, -5.5999999999999996, 0.0 },
+ { -11.000000000000000, 1, -5.5000000000000000, 0.0 },
+ { -10.799999999999999, 1, -5.3999999999999995, 0.0 },
+ { -10.600000000000000, 1, -5.2999999999999998, 0.0 },
+ { -10.399999999999999, 1, -5.1999999999999993, 0.0 },
+ { -10.199999999999999, 1, -5.0999999999999996, 0.0 },
+ { -10.000000000000000, 1, -5.0000000000000000, 0.0 },
+ { -9.7999999999999989, 1, -4.8999999999999995, 0.0 },
+ { -9.5999999999999996, 1, -4.7999999999999998, 0.0 },
+ { -9.3999999999999986, 1, -4.6999999999999993, 0.0 },
+ { -9.1999999999999993, 1, -4.5999999999999996, 0.0 },
+ { -9.0000000000000000, 1, -4.5000000000000000, 0.0 },
+ { -8.7999999999999989, 1, -4.3999999999999995, 0.0 },
+ { -8.5999999999999996, 1, -4.2999999999999998, 0.0 },
+ { -8.3999999999999986, 1, -4.1999999999999993, 0.0 },
+ { -8.1999999999999993, 1, -4.0999999999999996, 0.0 },
+ { -8.0000000000000000, 1, -4.0000000000000000, 0.0 },
+ { -7.7999999999999989, 1, -3.8999999999999995, 0.0 },
+ { -7.5999999999999996, 1, -3.7999999999999998, 0.0 },
+ { -7.3999999999999986, 1, -3.6999999999999993, 0.0 },
+ { -7.1999999999999993, 1, -3.5999999999999996, 0.0 },
+ { -7.0000000000000000, 1, -3.5000000000000000, 0.0 },
+ { -6.7999999999999989, 1, -3.3999999999999995, 0.0 },
+ { -6.5999999999999996, 1, -3.2999999999999998, 0.0 },
+ { -6.3999999999999986, 1, -3.1999999999999993, 0.0 },
+ { -6.1999999999999993, 1, -3.0999999999999996, 0.0 },
+ { -6.0000000000000000, 1, -3.0000000000000000, 0.0 },
+ { -5.7999999999999989, 1, -2.8999999999999995, 0.0 },
+ { -5.5999999999999996, 1, -2.7999999999999998, 0.0 },
+ { -5.3999999999999986, 1, -2.6999999999999993, 0.0 },
+ { -5.1999999999999993, 1, -2.5999999999999996, 0.0 },
+ { -5.0000000000000000, 1, -2.5000000000000000, 0.0 },
+ { -4.7999999999999989, 1, -2.3999999999999995, 0.0 },
+ { -4.5999999999999996, 1, -2.2999999999999998, 0.0 },
+ { -4.3999999999999986, 1, -2.1999999999999993, 0.0 },
+ { -4.1999999999999993, 1, -2.0999999999999996, 0.0 },
+ { -4.0000000000000000, 1, -2.0000000000000000, 0.0 },
+ { -3.8000000000000007, 1, -1.9000000000000004, 0.0 },
+ { -3.5999999999999979, 1, -1.7999999999999989, 0.0 },
+ { -3.3999999999999986, 1, -1.6999999999999993, 0.0 },
+ { -3.1999999999999993, 1, -1.5999999999999996, 0.0 },
+ { -3.0000000000000000, 1, -1.5000000000000000, 0.0 },
+ { -2.8000000000000007, 1, -1.4000000000000004, 0.0 },
+ { -2.5999999999999979, 1, -1.2999999999999989, 0.0 },
+ { -2.3999999999999986, 1, -1.1999999999999993, 0.0 },
+ { -2.1999999999999993, 1, -1.0999999999999996, 0.0 },
+ { -2.0000000000000000, 1, -1.0000000000000000, 0.0 },
+ { -1.8000000000000007, 1, -0.90000000000000036, 0.0 },
+ { -1.5999999999999979, 1, -0.79999999999999893, 0.0 },
+ { -1.3999999999999986, 1, -0.69999999999999929, 0.0 },
+ { -1.1999999999999993, 1, -0.59999999999999964, 0.0 },
+ { -1.0000000000000000, 1, -0.50000000000000000, 0.0 },
+ { -0.79999999999999716, 1, -0.39999999999999858, 0.0 },
+ { -0.59999999999999787, 1, -0.29999999999999893, 0.0 },
+ { -0.39999999999999858, 1, -0.19999999999999929, 0.0 },
+ { -0.19999999999999929, 1, -0.099999999999999645, 0.0 },
+ { 0.0000000000000000, 1, 0.0000000000000000, 0.0 },
+ { 0.20000000000000284, 1, 0.10000000000000142, 0.0 },
+ { 0.40000000000000213, 1, 0.20000000000000107, 0.0 },
+ { 0.60000000000000142, 1, 0.30000000000000071, 0.0 },
+ { 0.80000000000000071, 1, 0.40000000000000036, 0.0 },
+ { 1.0000000000000000, 1, 0.50000000000000000, 0.0 },
+ { 1.2000000000000028, 1, 0.60000000000000142, 0.0 },
+ { 1.4000000000000021, 1, 0.70000000000000107, 0.0 },
+ { 1.6000000000000014, 1, 0.80000000000000071, 0.0 },
+ { 1.8000000000000007, 1, 0.90000000000000036, 0.0 },
+ { 2.0000000000000000, 1, 1.0000000000000000, 0.0 },
+ { 2.2000000000000028, 1, 1.1000000000000014, 0.0 },
+ { 2.4000000000000021, 1, 1.2000000000000011, 0.0 },
+ { 2.6000000000000014, 1, 1.3000000000000007, 0.0 },
+ { 2.8000000000000007, 1, 1.4000000000000004, 0.0 },
+ { 3.0000000000000000, 1, 1.5000000000000000, 0.0 },
+ { 3.2000000000000028, 1, 1.6000000000000014, 0.0 },
+ { 3.4000000000000021, 1, 1.7000000000000011, 0.0 },
+ { 3.6000000000000014, 1, 1.8000000000000007, 0.0 },
+ { 3.8000000000000007, 1, 1.9000000000000004, 0.0 },
+ { 4.0000000000000000, 1, 2.0000000000000000, 0.0 },
+ { 4.2000000000000028, 1, 2.1000000000000014, 0.0 },
+ { 4.4000000000000021, 1, 2.2000000000000011, 0.0 },
+ { 4.6000000000000014, 1, 2.3000000000000007, 0.0 },
+ { 4.8000000000000007, 1, 2.4000000000000004, 0.0 },
+ { 5.0000000000000000, 1, 2.5000000000000000, 0.0 },
+ { 5.2000000000000028, 1, 2.6000000000000014, 0.0 },
+ { 5.4000000000000021, 1, 2.7000000000000011, 0.0 },
+ { 5.6000000000000014, 1, 2.8000000000000007, 0.0 },
+ { 5.8000000000000007, 1, 2.9000000000000004, 0.0 },
+ { 6.0000000000000000, 1, 3.0000000000000000, 0.0 },
+ { 6.2000000000000028, 1, 3.1000000000000014, 0.0 },
+ { 6.4000000000000021, 1, 3.2000000000000011, 0.0 },
+ { 6.6000000000000014, 1, 3.3000000000000007, 0.0 },
+ { 6.8000000000000007, 1, 3.4000000000000004, 0.0 },
+ { 7.0000000000000000, 1, 3.5000000000000000, 0.0 },
+ { 7.2000000000000028, 1, 3.6000000000000014, 0.0 },
+ { 7.4000000000000021, 1, 3.7000000000000011, 0.0 },
+ { 7.6000000000000014, 1, 3.8000000000000007, 0.0 },
+ { 7.8000000000000007, 1, 3.9000000000000004, 0.0 },
+ { 8.0000000000000000, 1, 4.0000000000000000, 0.0 },
+ { 8.2000000000000028, 1, 4.1000000000000014, 0.0 },
+ { 8.4000000000000021, 1, 4.2000000000000011, 0.0 },
+ { 8.6000000000000014, 1, 4.3000000000000007, 0.0 },
+ { 8.8000000000000007, 1, 4.4000000000000004, 0.0 },
+ { 9.0000000000000000, 1, 4.5000000000000000, 0.0 },
+ { 9.2000000000000028, 1, 4.6000000000000014, 0.0 },
+ { 9.4000000000000021, 1, 4.7000000000000011, 0.0 },
+ { 9.6000000000000014, 1, 4.8000000000000007, 0.0 },
+ { 9.8000000000000007, 1, 4.9000000000000004, 0.0 },
+ { 10.000000000000000, 1, 5.0000000000000000, 0.0 },
+ { 10.200000000000003, 1, 5.1000000000000014, 0.0 },
+ { 10.400000000000002, 1, 5.2000000000000011, 0.0 },
+ { 10.600000000000001, 1, 5.3000000000000007, 0.0 },
+ { 10.800000000000001, 1, 5.4000000000000004, 0.0 },
+ { 11.000000000000000, 1, 5.5000000000000000, 0.0 },
+ { 11.200000000000003, 1, 5.6000000000000014, 0.0 },
+ { 11.400000000000002, 1, 5.7000000000000011, 0.0 },
+ { 11.600000000000001, 1, 5.8000000000000007, 0.0 },
+ { 11.800000000000001, 1, 5.9000000000000004, 0.0 },
+ { 12.000000000000000, 1, 6.0000000000000000, 0.0 },
+ { 12.200000000000003, 1, 6.1000000000000014, 0.0 },
+ { 12.399999999999999, 1, 6.1999999999999993, 0.0 },
+ { 12.600000000000001, 1, 6.3000000000000007, 0.0 },
+ { 12.800000000000004, 1, 6.4000000000000021, 0.0 },
+ { 13.000000000000000, 1, 6.5000000000000000, 0.0 },
+ { 13.200000000000003, 1, 6.6000000000000014, 0.0 },
+ { 13.399999999999999, 1, 6.6999999999999993, 0.0 },
+ { 13.600000000000001, 1, 6.8000000000000007, 0.0 },
+ { 13.800000000000004, 1, 6.9000000000000021, 0.0 },
+ { 14.000000000000000, 1, 7.0000000000000000, 0.0 },
+ { 14.200000000000003, 1, 7.1000000000000014, 0.0 },
+ { 14.399999999999999, 1, 7.1999999999999993, 0.0 },
+ { 14.600000000000001, 1, 7.3000000000000007, 0.0 },
+ { 14.800000000000004, 1, 7.4000000000000021, 0.0 },
+ { 15.000000000000000, 1, 7.5000000000000000, 0.0 },
+ { 15.200000000000003, 1, 7.6000000000000014, 0.0 },
+ { 15.399999999999999, 1, 7.6999999999999993, 0.0 },
+ { 15.600000000000001, 1, 7.8000000000000007, 0.0 },
+ { 15.800000000000004, 1, 7.9000000000000021, 0.0 },
+ { 16.000000000000000, 1, 8.0000000000000000, 0.0 },
+ { 16.200000000000003, 1, 8.1000000000000014, 0.0 },
+ { 16.399999999999999, 1, 8.1999999999999993, 0.0 },
+ { 16.600000000000001, 1, 8.3000000000000007, 0.0 },
+ { 16.800000000000004, 1, 8.4000000000000021, 0.0 },
+ { 17.000000000000000, 1, 8.5000000000000000, 0.0 },
+ { 17.200000000000003, 1, 8.6000000000000014, 0.0 },
+ { 17.399999999999999, 1, 8.6999999999999993, 0.0 },
+ { 17.600000000000001, 1, 8.8000000000000007, 0.0 },
+ { 17.800000000000004, 1, 8.9000000000000021, 0.0 },
+ { 18.000000000000000, 1, 9.0000000000000000, 0.0 },
+ { 18.200000000000003, 1, 9.1000000000000014, 0.0 },
+ { 18.400000000000006, 1, 9.2000000000000028, 0.0 },
+ { 18.600000000000001, 1, 9.3000000000000007, 0.0 },
+ { 18.800000000000004, 1, 9.4000000000000021, 0.0 },
+ { 19.000000000000000, 1, 9.5000000000000000, 0.0 },
+ { 19.200000000000003, 1, 9.6000000000000014, 0.0 },
+ { 19.400000000000006, 1, 9.7000000000000028, 0.0 },
+ { 19.600000000000001, 1, 9.8000000000000007, 0.0 },
+ { 19.800000000000004, 1, 9.9000000000000021, 0.0 },
+ { 20.000000000000000, 1, 10.000000000000000, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for n=2.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data003[201] =
{
- { 398.00000000000000, 2, -10.000000000000000 },
- { 390.04000000000002, 2, -9.9000000000000004 },
- { 382.16000000000008, 2, -9.8000000000000007 },
- { 374.35999999999996, 2, -9.6999999999999993 },
- { 366.63999999999999, 2, -9.5999999999999996 },
- { 359.00000000000000, 2, -9.5000000000000000 },
- { 351.44000000000005, 2, -9.4000000000000004 },
- { 343.96000000000004, 2, -9.3000000000000007 },
- { 336.55999999999995, 2, -9.1999999999999993 },
- { 329.23999999999995, 2, -9.0999999999999996 },
- { 322.00000000000000, 2, -9.0000000000000000 },
- { 314.84000000000003, 2, -8.9000000000000004 },
- { 307.76000000000005, 2, -8.8000000000000007 },
- { 300.75999999999993, 2, -8.6999999999999993 },
- { 293.83999999999997, 2, -8.5999999999999996 },
- { 287.00000000000000, 2, -8.5000000000000000 },
- { 280.24000000000001, 2, -8.4000000000000004 },
- { 273.56000000000006, 2, -8.3000000000000007 },
- { 266.95999999999998, 2, -8.1999999999999993 },
- { 260.44000000000000, 2, -8.0999999999999996 },
- { 254.00000000000000, 2, -8.0000000000000000 },
- { 247.64000000000001, 2, -7.9000000000000004 },
- { 241.35999999999999, 2, -7.7999999999999998 },
- { 235.16000000000003, 2, -7.7000000000000002 },
- { 229.03999999999999, 2, -7.5999999999999996 },
- { 223.00000000000000, 2, -7.5000000000000000 },
- { 217.04000000000002, 2, -7.4000000000000004 },
- { 211.16000000000000, 2, -7.2999999999999998 },
- { 205.36000000000001, 2, -7.2000000000000002 },
- { 199.63999999999999, 2, -7.0999999999999996 },
- { 194.00000000000000, 2, -7.0000000000000000 },
- { 188.44000000000003, 2, -6.9000000000000004 },
- { 182.95999999999998, 2, -6.7999999999999998 },
- { 177.56000000000000, 2, -6.7000000000000002 },
- { 172.23999999999998, 2, -6.5999999999999996 },
- { 167.00000000000000, 2, -6.5000000000000000 },
- { 161.84000000000003, 2, -6.4000000000000004 },
- { 156.75999999999999, 2, -6.2999999999999998 },
- { 151.76000000000002, 2, -6.2000000000000002 },
- { 146.83999999999997, 2, -6.0999999999999996 },
- { 142.00000000000000, 2, -6.0000000000000000 },
- { 137.24000000000001, 2, -5.9000000000000004 },
- { 132.56000000000000, 2, -5.7999999999999998 },
- { 127.96000000000001, 2, -5.7000000000000002 },
- { 123.43999999999998, 2, -5.5999999999999996 },
- { 119.00000000000000, 2, -5.5000000000000000 },
- { 114.64000000000001, 2, -5.4000000000000004 },
- { 110.36000000000000, 2, -5.2999999999999998 },
- { 106.16000000000001, 2, -5.2000000000000002 },
- { 102.03999999999999, 2, -5.0999999999999996 },
- { 98.000000000000000, 2, -5.0000000000000000 },
- { 94.040000000000020, 2, -4.9000000000000004 },
- { 90.159999999999997, 2, -4.7999999999999998 },
- { 86.360000000000014, 2, -4.7000000000000002 },
- { 82.639999999999986, 2, -4.5999999999999996 },
- { 79.000000000000000, 2, -4.5000000000000000 },
- { 75.440000000000012, 2, -4.4000000000000004 },
- { 71.959999999999994, 2, -4.2999999999999998 },
- { 68.560000000000002, 2, -4.2000000000000002 },
- { 65.239999999999995, 2, -4.0999999999999996 },
- { 62.000000000000000, 2, -4.0000000000000000 },
- { 58.840000000000011, 2, -3.9000000000000004 },
- { 55.759999999999998, 2, -3.7999999999999998 },
- { 52.760000000000005, 2, -3.7000000000000002 },
- { 49.839999999999989, 2, -3.5999999999999996 },
- { 47.000000000000000, 2, -3.5000000000000000 },
- { 44.240000000000009, 2, -3.4000000000000004 },
- { 41.559999999999995, 2, -3.2999999999999998 },
- { 38.960000000000008, 2, -3.2000000000000002 },
- { 36.439999999999991, 2, -3.0999999999999996 },
- { 34.000000000000000, 2, -3.0000000000000000 },
- { 31.640000000000008, 2, -2.9000000000000004 },
- { 29.359999999999996, 2, -2.7999999999999998 },
- { 27.160000000000004, 2, -2.7000000000000002 },
- { 25.039999999999992, 2, -2.5999999999999996 },
- { 23.000000000000000, 2, -2.5000000000000000 },
- { 21.040000000000006, 2, -2.4000000000000004 },
- { 19.159999999999997, 2, -2.2999999999999998 },
- { 17.360000000000003, 2, -2.2000000000000002 },
- { 15.639999999999993, 2, -2.0999999999999996 },
- { 14.000000000000000, 2, -2.0000000000000000 },
- { 12.440000000000005, 2, -1.9000000000000004 },
- { 10.960000000000010, 2, -1.8000000000000007 },
- { 9.5599999999999898, 2, -1.6999999999999993 },
- { 8.2399999999999949, 2, -1.5999999999999996 },
- { 7.0000000000000000, 2, -1.5000000000000000 },
- { 5.8400000000000043, 2, -1.4000000000000004 },
- { 4.7600000000000078, 2, -1.3000000000000007 },
- { 3.7599999999999936, 2, -1.1999999999999993 },
- { 2.8399999999999972, 2, -1.0999999999999996 },
- { 2.0000000000000000, 2, -1.0000000000000000 },
- { 1.2400000000000024, 2, -0.90000000000000036 },
- { 0.56000000000000449, 2, -0.80000000000000071 },
- { -0.040000000000004032, 2, -0.69999999999999929 },
- { -0.56000000000000161, 2, -0.59999999999999964 },
- { -1.0000000000000000, 2, -0.50000000000000000 },
- { -1.3599999999999990, 2, -0.40000000000000036 },
- { -1.6399999999999983, 2, -0.30000000000000071 },
- { -1.8400000000000012, 2, -0.19999999999999929 },
- { -1.9600000000000002, 2, -0.099999999999999645 },
- { -2.0000000000000000, 2, 0.0000000000000000 },
- { -1.9600000000000002, 2, 0.099999999999999645 },
- { -1.8400000000000012, 2, 0.19999999999999929 },
- { -1.6399999999999983, 2, 0.30000000000000071 },
- { -1.3599999999999990, 2, 0.40000000000000036 },
- { -1.0000000000000000, 2, 0.50000000000000000 },
- { -0.56000000000000161, 2, 0.59999999999999964 },
- { -0.040000000000004032, 2, 0.69999999999999929 },
- { 0.56000000000000449, 2, 0.80000000000000071 },
- { 1.2400000000000024, 2, 0.90000000000000036 },
- { 2.0000000000000000, 2, 1.0000000000000000 },
- { 2.8399999999999972, 2, 1.0999999999999996 },
- { 3.7599999999999936, 2, 1.1999999999999993 },
- { 4.7600000000000078, 2, 1.3000000000000007 },
- { 5.8400000000000043, 2, 1.4000000000000004 },
- { 7.0000000000000000, 2, 1.5000000000000000 },
- { 8.2399999999999949, 2, 1.5999999999999996 },
- { 9.5599999999999898, 2, 1.6999999999999993 },
- { 10.960000000000010, 2, 1.8000000000000007 },
- { 12.440000000000005, 2, 1.9000000000000004 },
- { 14.000000000000000, 2, 2.0000000000000000 },
- { 15.639999999999993, 2, 2.0999999999999996 },
- { 17.359999999999989, 2, 2.1999999999999993 },
- { 19.160000000000014, 2, 2.3000000000000007 },
- { 21.040000000000006, 2, 2.4000000000000004 },
- { 23.000000000000000, 2, 2.5000000000000000 },
- { 25.039999999999992, 2, 2.5999999999999996 },
- { 27.159999999999986, 2, 2.6999999999999993 },
- { 29.360000000000017, 2, 2.8000000000000007 },
- { 31.640000000000008, 2, 2.9000000000000004 },
- { 34.000000000000000, 2, 3.0000000000000000 },
- { 36.439999999999991, 2, 3.0999999999999996 },
- { 38.959999999999980, 2, 3.1999999999999993 },
- { 41.560000000000016, 2, 3.3000000000000007 },
- { 44.240000000000009, 2, 3.4000000000000004 },
- { 47.000000000000000, 2, 3.5000000000000000 },
- { 49.839999999999989, 2, 3.5999999999999996 },
- { 52.759999999999977, 2, 3.6999999999999993 },
- { 55.760000000000019, 2, 3.8000000000000007 },
- { 58.840000000000011, 2, 3.9000000000000004 },
- { 62.000000000000000, 2, 4.0000000000000000 },
- { 65.239999999999995, 2, 4.0999999999999996 },
- { 68.559999999999974, 2, 4.1999999999999993 },
- { 71.960000000000022, 2, 4.3000000000000007 },
- { 75.440000000000012, 2, 4.4000000000000004 },
- { 79.000000000000000, 2, 4.5000000000000000 },
- { 82.639999999999986, 2, 4.5999999999999996 },
- { 86.359999999999971, 2, 4.6999999999999993 },
- { 90.160000000000025, 2, 4.8000000000000007 },
- { 94.040000000000020, 2, 4.9000000000000004 },
- { 98.000000000000000, 2, 5.0000000000000000 },
- { 102.03999999999999, 2, 5.0999999999999996 },
- { 106.15999999999997, 2, 5.1999999999999993 },
- { 110.36000000000003, 2, 5.3000000000000007 },
- { 114.64000000000001, 2, 5.4000000000000004 },
- { 119.00000000000000, 2, 5.5000000000000000 },
- { 123.43999999999998, 2, 5.5999999999999996 },
- { 127.95999999999998, 2, 5.6999999999999993 },
- { 132.56000000000003, 2, 5.8000000000000007 },
- { 137.24000000000001, 2, 5.9000000000000004 },
- { 142.00000000000000, 2, 6.0000000000000000 },
- { 146.84000000000006, 2, 6.1000000000000014 },
- { 151.75999999999996, 2, 6.1999999999999993 },
- { 156.76000000000005, 2, 6.3000000000000007 },
- { 161.83999999999992, 2, 6.3999999999999986 },
- { 167.00000000000000, 2, 6.5000000000000000 },
- { 172.24000000000007, 2, 6.6000000000000014 },
- { 177.55999999999997, 2, 6.6999999999999993 },
- { 182.96000000000004, 2, 6.8000000000000007 },
- { 188.43999999999991, 2, 6.8999999999999986 },
- { 194.00000000000000, 2, 7.0000000000000000 },
- { 199.64000000000007, 2, 7.1000000000000014 },
- { 205.35999999999996, 2, 7.1999999999999993 },
- { 211.16000000000005, 2, 7.3000000000000007 },
- { 217.03999999999991, 2, 7.3999999999999986 },
- { 223.00000000000000, 2, 7.5000000000000000 },
- { 229.04000000000008, 2, 7.6000000000000014 },
- { 235.15999999999997, 2, 7.6999999999999993 },
- { 241.36000000000004, 2, 7.8000000000000007 },
- { 247.63999999999990, 2, 7.8999999999999986 },
- { 254.00000000000000, 2, 8.0000000000000000 },
- { 260.44000000000011, 2, 8.1000000000000014 },
- { 266.95999999999998, 2, 8.1999999999999993 },
- { 273.56000000000006, 2, 8.3000000000000007 },
- { 280.23999999999990, 2, 8.3999999999999986 },
- { 287.00000000000000, 2, 8.5000000000000000 },
- { 293.84000000000009, 2, 8.6000000000000014 },
- { 300.75999999999993, 2, 8.6999999999999993 },
- { 307.76000000000005, 2, 8.8000000000000007 },
- { 314.83999999999992, 2, 8.8999999999999986 },
- { 322.00000000000000, 2, 9.0000000000000000 },
- { 329.24000000000012, 2, 9.1000000000000014 },
- { 336.55999999999995, 2, 9.1999999999999993 },
- { 343.96000000000004, 2, 9.3000000000000007 },
- { 351.43999999999988, 2, 9.3999999999999986 },
- { 359.00000000000000, 2, 9.5000000000000000 },
- { 366.64000000000010, 2, 9.6000000000000014 },
- { 374.35999999999996, 2, 9.6999999999999993 },
- { 382.16000000000008, 2, 9.8000000000000007 },
- { 390.03999999999991, 2, 9.8999999999999986 },
- { 398.00000000000000, 2, 10.000000000000000 },
+ { 398.00000000000000, 2, -10.000000000000000, 0.0 },
+ { 390.04000000000002, 2, -9.9000000000000004, 0.0 },
+ { 382.16000000000008, 2, -9.8000000000000007, 0.0 },
+ { 374.35999999999996, 2, -9.6999999999999993, 0.0 },
+ { 366.63999999999999, 2, -9.5999999999999996, 0.0 },
+ { 359.00000000000000, 2, -9.5000000000000000, 0.0 },
+ { 351.44000000000005, 2, -9.4000000000000004, 0.0 },
+ { 343.96000000000004, 2, -9.3000000000000007, 0.0 },
+ { 336.55999999999995, 2, -9.1999999999999993, 0.0 },
+ { 329.23999999999995, 2, -9.0999999999999996, 0.0 },
+ { 322.00000000000000, 2, -9.0000000000000000, 0.0 },
+ { 314.84000000000003, 2, -8.9000000000000004, 0.0 },
+ { 307.76000000000005, 2, -8.8000000000000007, 0.0 },
+ { 300.75999999999993, 2, -8.6999999999999993, 0.0 },
+ { 293.83999999999997, 2, -8.5999999999999996, 0.0 },
+ { 287.00000000000000, 2, -8.5000000000000000, 0.0 },
+ { 280.24000000000001, 2, -8.4000000000000004, 0.0 },
+ { 273.56000000000006, 2, -8.3000000000000007, 0.0 },
+ { 266.95999999999998, 2, -8.1999999999999993, 0.0 },
+ { 260.44000000000000, 2, -8.0999999999999996, 0.0 },
+ { 254.00000000000000, 2, -8.0000000000000000, 0.0 },
+ { 247.64000000000001, 2, -7.9000000000000004, 0.0 },
+ { 241.35999999999999, 2, -7.7999999999999998, 0.0 },
+ { 235.15999999999997, 2, -7.6999999999999993, 0.0 },
+ { 229.03999999999999, 2, -7.5999999999999996, 0.0 },
+ { 223.00000000000000, 2, -7.5000000000000000, 0.0 },
+ { 217.04000000000002, 2, -7.4000000000000004, 0.0 },
+ { 211.16000000000000, 2, -7.2999999999999998, 0.0 },
+ { 205.35999999999996, 2, -7.1999999999999993, 0.0 },
+ { 199.63999999999999, 2, -7.0999999999999996, 0.0 },
+ { 194.00000000000000, 2, -7.0000000000000000, 0.0 },
+ { 188.44000000000003, 2, -6.9000000000000004, 0.0 },
+ { 182.95999999999998, 2, -6.7999999999999998, 0.0 },
+ { 177.55999999999997, 2, -6.6999999999999993, 0.0 },
+ { 172.23999999999998, 2, -6.5999999999999996, 0.0 },
+ { 167.00000000000000, 2, -6.5000000000000000, 0.0 },
+ { 161.84000000000003, 2, -6.4000000000000004, 0.0 },
+ { 156.75999999999999, 2, -6.2999999999999998, 0.0 },
+ { 151.75999999999996, 2, -6.1999999999999993, 0.0 },
+ { 146.83999999999997, 2, -6.0999999999999996, 0.0 },
+ { 142.00000000000000, 2, -6.0000000000000000, 0.0 },
+ { 137.23999999999998, 2, -5.8999999999999995, 0.0 },
+ { 132.56000000000000, 2, -5.7999999999999998, 0.0 },
+ { 127.96000000000001, 2, -5.7000000000000002, 0.0 },
+ { 123.43999999999998, 2, -5.5999999999999996, 0.0 },
+ { 119.00000000000000, 2, -5.5000000000000000, 0.0 },
+ { 114.63999999999997, 2, -5.3999999999999995, 0.0 },
+ { 110.36000000000000, 2, -5.2999999999999998, 0.0 },
+ { 106.15999999999997, 2, -5.1999999999999993, 0.0 },
+ { 102.03999999999999, 2, -5.0999999999999996, 0.0 },
+ { 98.000000000000000, 2, -5.0000000000000000, 0.0 },
+ { 94.039999999999978, 2, -4.8999999999999995, 0.0 },
+ { 90.159999999999997, 2, -4.7999999999999998, 0.0 },
+ { 86.359999999999971, 2, -4.6999999999999993, 0.0 },
+ { 82.639999999999986, 2, -4.5999999999999996, 0.0 },
+ { 79.000000000000000, 2, -4.5000000000000000, 0.0 },
+ { 75.439999999999984, 2, -4.3999999999999995, 0.0 },
+ { 71.959999999999994, 2, -4.2999999999999998, 0.0 },
+ { 68.559999999999974, 2, -4.1999999999999993, 0.0 },
+ { 65.239999999999995, 2, -4.0999999999999996, 0.0 },
+ { 62.000000000000000, 2, -4.0000000000000000, 0.0 },
+ { 58.839999999999982, 2, -3.8999999999999995, 0.0 },
+ { 55.759999999999998, 2, -3.7999999999999998, 0.0 },
+ { 52.759999999999977, 2, -3.6999999999999993, 0.0 },
+ { 49.839999999999989, 2, -3.5999999999999996, 0.0 },
+ { 47.000000000000000, 2, -3.5000000000000000, 0.0 },
+ { 44.239999999999988, 2, -3.3999999999999995, 0.0 },
+ { 41.559999999999995, 2, -3.2999999999999998, 0.0 },
+ { 38.959999999999980, 2, -3.1999999999999993, 0.0 },
+ { 36.439999999999991, 2, -3.0999999999999996, 0.0 },
+ { 34.000000000000000, 2, -3.0000000000000000, 0.0 },
+ { 31.639999999999986, 2, -2.8999999999999995, 0.0 },
+ { 29.359999999999996, 2, -2.7999999999999998, 0.0 },
+ { 27.159999999999986, 2, -2.6999999999999993, 0.0 },
+ { 25.039999999999992, 2, -2.5999999999999996, 0.0 },
+ { 23.000000000000000, 2, -2.5000000000000000, 0.0 },
+ { 21.039999999999988, 2, -2.3999999999999995, 0.0 },
+ { 19.159999999999997, 2, -2.2999999999999998, 0.0 },
+ { 17.359999999999989, 2, -2.1999999999999993, 0.0 },
+ { 15.639999999999993, 2, -2.0999999999999996, 0.0 },
+ { 14.000000000000000, 2, -2.0000000000000000, 0.0 },
+ { 12.440000000000005, 2, -1.9000000000000004, 0.0 },
+ { 10.959999999999985, 2, -1.7999999999999989, 0.0 },
+ { 9.5599999999999898, 2, -1.6999999999999993, 0.0 },
+ { 8.2399999999999949, 2, -1.5999999999999996, 0.0 },
+ { 7.0000000000000000, 2, -1.5000000000000000, 0.0 },
+ { 5.8400000000000043, 2, -1.4000000000000004, 0.0 },
+ { 4.7599999999999891, 2, -1.2999999999999989, 0.0 },
+ { 3.7599999999999936, 2, -1.1999999999999993, 0.0 },
+ { 2.8399999999999972, 2, -1.0999999999999996, 0.0 },
+ { 2.0000000000000000, 2, -1.0000000000000000, 0.0 },
+ { 1.2400000000000024, 2, -0.90000000000000036, 0.0 },
+ { 0.55999999999999339, 2, -0.79999999999999893, 0.0 },
+ { -0.040000000000004032, 2, -0.69999999999999929, 0.0 },
+ { -0.56000000000000161, 2, -0.59999999999999964, 0.0 },
+ { -1.0000000000000000, 2, -0.50000000000000000, 0.0 },
+ { -1.3600000000000045, 2, -0.39999999999999858, 0.0 },
+ { -1.6400000000000026, 2, -0.29999999999999893, 0.0 },
+ { -1.8400000000000012, 2, -0.19999999999999929, 0.0 },
+ { -1.9600000000000002, 2, -0.099999999999999645, 0.0 },
+ { -2.0000000000000000, 2, 0.0000000000000000, 0.0 },
+ { -1.9599999999999989, 2, 0.10000000000000142, 0.0 },
+ { -1.8399999999999983, 2, 0.20000000000000107, 0.0 },
+ { -1.6399999999999983, 2, 0.30000000000000071, 0.0 },
+ { -1.3599999999999990, 2, 0.40000000000000036, 0.0 },
+ { -1.0000000000000000, 2, 0.50000000000000000, 0.0 },
+ { -0.55999999999999317, 2, 0.60000000000000142, 0.0 },
+ { -0.039999999999994040, 2, 0.70000000000000107, 0.0 },
+ { 0.56000000000000449, 2, 0.80000000000000071, 0.0 },
+ { 1.2400000000000024, 2, 0.90000000000000036, 0.0 },
+ { 2.0000000000000000, 2, 1.0000000000000000, 0.0 },
+ { 2.8400000000000123, 2, 1.1000000000000014, 0.0 },
+ { 3.7600000000000104, 2, 1.2000000000000011, 0.0 },
+ { 4.7600000000000078, 2, 1.3000000000000007, 0.0 },
+ { 5.8400000000000043, 2, 1.4000000000000004, 0.0 },
+ { 7.0000000000000000, 2, 1.5000000000000000, 0.0 },
+ { 8.2400000000000180, 2, 1.6000000000000014, 0.0 },
+ { 9.5600000000000147, 2, 1.7000000000000011, 0.0 },
+ { 10.960000000000010, 2, 1.8000000000000007, 0.0 },
+ { 12.440000000000005, 2, 1.9000000000000004, 0.0 },
+ { 14.000000000000000, 2, 2.0000000000000000, 0.0 },
+ { 15.640000000000025, 2, 2.1000000000000014, 0.0 },
+ { 17.360000000000017, 2, 2.2000000000000011, 0.0 },
+ { 19.160000000000014, 2, 2.3000000000000007, 0.0 },
+ { 21.040000000000006, 2, 2.4000000000000004, 0.0 },
+ { 23.000000000000000, 2, 2.5000000000000000, 0.0 },
+ { 25.040000000000031, 2, 2.6000000000000014, 0.0 },
+ { 27.160000000000021, 2, 2.7000000000000011, 0.0 },
+ { 29.360000000000017, 2, 2.8000000000000007, 0.0 },
+ { 31.640000000000008, 2, 2.9000000000000004, 0.0 },
+ { 34.000000000000000, 2, 3.0000000000000000, 0.0 },
+ { 36.440000000000033, 2, 3.1000000000000014, 0.0 },
+ { 38.960000000000029, 2, 3.2000000000000011, 0.0 },
+ { 41.560000000000016, 2, 3.3000000000000007, 0.0 },
+ { 44.240000000000009, 2, 3.4000000000000004, 0.0 },
+ { 47.000000000000000, 2, 3.5000000000000000, 0.0 },
+ { 49.840000000000039, 2, 3.6000000000000014, 0.0 },
+ { 52.760000000000034, 2, 3.7000000000000011, 0.0 },
+ { 55.760000000000019, 2, 3.8000000000000007, 0.0 },
+ { 58.840000000000011, 2, 3.9000000000000004, 0.0 },
+ { 62.000000000000000, 2, 4.0000000000000000, 0.0 },
+ { 65.240000000000052, 2, 4.1000000000000014, 0.0 },
+ { 68.560000000000031, 2, 4.2000000000000011, 0.0 },
+ { 71.960000000000022, 2, 4.3000000000000007, 0.0 },
+ { 75.440000000000012, 2, 4.4000000000000004, 0.0 },
+ { 79.000000000000000, 2, 4.5000000000000000, 0.0 },
+ { 82.640000000000057, 2, 4.6000000000000014, 0.0 },
+ { 86.360000000000042, 2, 4.7000000000000011, 0.0 },
+ { 90.160000000000025, 2, 4.8000000000000007, 0.0 },
+ { 94.040000000000020, 2, 4.9000000000000004, 0.0 },
+ { 98.000000000000000, 2, 5.0000000000000000, 0.0 },
+ { 102.04000000000006, 2, 5.1000000000000014, 0.0 },
+ { 106.16000000000004, 2, 5.2000000000000011, 0.0 },
+ { 110.36000000000003, 2, 5.3000000000000007, 0.0 },
+ { 114.64000000000001, 2, 5.4000000000000004, 0.0 },
+ { 119.00000000000000, 2, 5.5000000000000000, 0.0 },
+ { 123.44000000000007, 2, 5.6000000000000014, 0.0 },
+ { 127.96000000000004, 2, 5.7000000000000011, 0.0 },
+ { 132.56000000000003, 2, 5.8000000000000007, 0.0 },
+ { 137.24000000000001, 2, 5.9000000000000004, 0.0 },
+ { 142.00000000000000, 2, 6.0000000000000000, 0.0 },
+ { 146.84000000000006, 2, 6.1000000000000014, 0.0 },
+ { 151.75999999999996, 2, 6.1999999999999993, 0.0 },
+ { 156.76000000000005, 2, 6.3000000000000007, 0.0 },
+ { 161.84000000000012, 2, 6.4000000000000021, 0.0 },
+ { 167.00000000000000, 2, 6.5000000000000000, 0.0 },
+ { 172.24000000000007, 2, 6.6000000000000014, 0.0 },
+ { 177.55999999999997, 2, 6.6999999999999993, 0.0 },
+ { 182.96000000000004, 2, 6.8000000000000007, 0.0 },
+ { 188.44000000000011, 2, 6.9000000000000021, 0.0 },
+ { 194.00000000000000, 2, 7.0000000000000000, 0.0 },
+ { 199.64000000000007, 2, 7.1000000000000014, 0.0 },
+ { 205.35999999999996, 2, 7.1999999999999993, 0.0 },
+ { 211.16000000000005, 2, 7.3000000000000007, 0.0 },
+ { 217.04000000000013, 2, 7.4000000000000021, 0.0 },
+ { 223.00000000000000, 2, 7.5000000000000000, 0.0 },
+ { 229.04000000000008, 2, 7.6000000000000014, 0.0 },
+ { 235.15999999999997, 2, 7.6999999999999993, 0.0 },
+ { 241.36000000000004, 2, 7.8000000000000007, 0.0 },
+ { 247.64000000000013, 2, 7.9000000000000021, 0.0 },
+ { 254.00000000000000, 2, 8.0000000000000000, 0.0 },
+ { 260.44000000000011, 2, 8.1000000000000014, 0.0 },
+ { 266.95999999999998, 2, 8.1999999999999993, 0.0 },
+ { 273.56000000000006, 2, 8.3000000000000007, 0.0 },
+ { 280.24000000000012, 2, 8.4000000000000021, 0.0 },
+ { 287.00000000000000, 2, 8.5000000000000000, 0.0 },
+ { 293.84000000000009, 2, 8.6000000000000014, 0.0 },
+ { 300.75999999999993, 2, 8.6999999999999993, 0.0 },
+ { 307.76000000000005, 2, 8.8000000000000007, 0.0 },
+ { 314.84000000000015, 2, 8.9000000000000021, 0.0 },
+ { 322.00000000000000, 2, 9.0000000000000000, 0.0 },
+ { 329.24000000000012, 2, 9.1000000000000014, 0.0 },
+ { 336.56000000000023, 2, 9.2000000000000028, 0.0 },
+ { 343.96000000000004, 2, 9.3000000000000007, 0.0 },
+ { 351.44000000000017, 2, 9.4000000000000021, 0.0 },
+ { 359.00000000000000, 2, 9.5000000000000000, 0.0 },
+ { 366.64000000000010, 2, 9.6000000000000014, 0.0 },
+ { 374.36000000000024, 2, 9.7000000000000028, 0.0 },
+ { 382.16000000000008, 2, 9.8000000000000007, 0.0 },
+ { 390.04000000000019, 2, 9.9000000000000021, 0.0 },
+ { 398.00000000000000, 2, 10.000000000000000, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
// Test data for n=5.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data004[201] =
{
- { -3041200.0000000000, 5, -10.000000000000000 },
- { -2889108.3196800007, 5, -9.9000000000000004 },
- { -2743131.8297600015, 5, -9.8000000000000007 },
- { -2603085.2022399991, 5, -9.6999999999999993 },
- { -2468786.8723199992, 5, -9.5999999999999996 },
- { -2340059.0000000000, 5, -9.5000000000000000 },
- { -2216727.4316800009, 5, -9.4000000000000004 },
- { -2098621.6617600010, 5, -9.3000000000000007 },
- { -1985574.7942399993, 5, -9.1999999999999993 },
- { -1877423.5043199996, 5, -9.0999999999999996 },
- { -1774008.0000000000, 5, -9.0000000000000000 },
- { -1675171.9836800008, 5, -8.9000000000000004 },
- { -1580762.6137600006, 5, -8.8000000000000007 },
- { -1490630.4662399990, 5, -8.6999999999999993 },
- { -1404629.4963199999, 5, -8.5999999999999996 },
- { -1322617.0000000000, 5, -8.5000000000000000 },
- { -1244453.5756800002, 5, -8.4000000000000004 },
- { -1170003.0857600006, 5, -8.3000000000000007 },
- { -1099132.6182399995, 5, -8.1999999999999993 },
- { -1031712.4483199996, 5, -8.0999999999999996 },
- { -967616.00000000000, 5, -8.0000000000000000 },
- { -906719.80768000009, 5, -7.9000000000000004 },
- { -848903.47775999992, 5, -7.7999999999999998 },
- { -794049.65024000010, 5, -7.7000000000000002 },
- { -742043.96031999995, 5, -7.5999999999999996 },
- { -692775.00000000000, 5, -7.5000000000000000 },
- { -646134.27968000027, 5, -7.4000000000000004 },
- { -602016.18975999986, 5, -7.2999999999999998 },
- { -560317.96224000002, 5, -7.2000000000000002 },
- { -520939.63231999992, 5, -7.0999999999999996 },
- { -483784.00000000000, 5, -7.0000000000000000 },
- { -448756.59168000019, 5, -6.9000000000000004 },
- { -415765.62176000001, 5, -6.7999999999999998 },
- { -384721.95424000005, 5, -6.7000000000000002 },
- { -355539.06431999995, 5, -6.5999999999999996 },
- { -328133.00000000000, 5, -6.5000000000000000 },
- { -302422.34368000011, 5, -6.4000000000000004 },
- { -278328.17375999998, 5, -6.2999999999999998 },
- { -255774.02624000004, 5, -6.2000000000000002 },
- { -234685.85631999990, 5, -6.0999999999999996 },
- { -214992.00000000000, 5, -6.0000000000000000 },
- { -196623.13568000006, 5, -5.9000000000000004 },
- { -179512.24575999999, 5, -5.7999999999999998 },
- { -163594.57824000003, 5, -5.7000000000000002 },
- { -148807.60831999997, 5, -5.5999999999999996 },
- { -135091.00000000000, 5, -5.5000000000000000 },
- { -122386.56768000004, 5, -5.4000000000000004 },
- { -110638.23776000000, 5, -5.2999999999999998 },
- { -99792.010240000047, 5, -5.2000000000000002 },
- { -89795.920319999976, 5, -5.0999999999999996 },
- { -80600.000000000000, 5, -5.0000000000000000 },
- { -72156.239680000028, 5, -4.9000000000000004 },
- { -64418.549759999994, 5, -4.7999999999999998 },
- { -57342.722240000010, 5, -4.7000000000000002 },
- { -50886.392319999970, 5, -4.5999999999999996 },
- { -45009.000000000000, 5, -4.5000000000000000 },
- { -39671.751680000008, 5, -4.4000000000000004 },
- { -34837.581759999986, 5, -4.2999999999999998 },
- { -30471.114240000010, 5, -4.2000000000000002 },
- { -26538.624319999992, 5, -4.0999999999999996 },
- { -23008.000000000000, 5, -4.0000000000000000 },
- { -19848.703680000013, 5, -3.9000000000000004 },
- { -17031.733759999996, 5, -3.7999999999999998 },
- { -14529.586240000001, 5, -3.7000000000000002 },
- { -12316.216319999992, 5, -3.5999999999999996 },
- { -10367.000000000000, 5, -3.5000000000000000 },
- { -8658.6956800000080, 5, -3.4000000000000004 },
- { -7169.4057599999960, 5, -3.2999999999999998 },
- { -5878.5382400000035, 5, -3.2000000000000002 },
- { -4766.7683199999965, 5, -3.0999999999999996 },
- { -3816.0000000000000, 5, -3.0000000000000000 },
- { -3009.3276800000026, 5, -2.9000000000000004 },
- { -2330.9977599999988, 5, -2.7999999999999998 },
- { -1766.3702400000002, 5, -2.7000000000000002 },
- { -1301.8803199999984, 5, -2.5999999999999996 },
- { -925.00000000000000, 5, -2.5000000000000000 },
- { -624.19968000000074, 5, -2.4000000000000004 },
- { -388.90975999999978, 5, -2.2999999999999998 },
- { -209.48224000000022, 5, -2.2000000000000002 },
- { -77.152319999999520, 5, -2.0999999999999996 },
- { 16.000000000000000, 5, -2.0000000000000000 },
- { 77.088319999999840, 5, -1.9000000000000004 },
- { 112.45823999999980, 5, -1.8000000000000007 },
- { 127.72576000000002, 5, -1.6999999999999993 },
- { 127.81567999999996, 5, -1.5999999999999996 },
- { 117.00000000000000, 5, -1.5000000000000000 },
- { 98.936320000000080, 5, -1.4000000000000004 },
- { 76.706240000000179, 5, -1.3000000000000007 },
- { 52.853759999999838, 5, -1.1999999999999993 },
- { 29.423679999999933, 5, -1.0999999999999996 },
- { 8.0000000000000000, 5, -1.0000000000000000 },
- { -10.255679999999948, 5, -0.90000000000000036 },
- { -24.565759999999916, 5, -0.80000000000000071 },
- { -34.498240000000052, 5, -0.69999999999999929 },
- { -39.928320000000006, 5, -0.59999999999999964 },
- { -41.000000000000000, 5, -0.50000000000000000 },
- { -38.087680000000020, 5, -0.40000000000000036 },
- { -31.757760000000054, 5, -0.30000000000000071 },
- { -22.730239999999931, 5, -0.19999999999999929 },
- { -11.840319999999959, 5, -0.099999999999999645 },
- { 0.0000000000000000, 5, 0.0000000000000000 },
- { 11.840319999999959, 5, 0.099999999999999645 },
- { 22.730239999999931, 5, 0.19999999999999929 },
- { 31.757760000000054, 5, 0.30000000000000071 },
- { 38.087680000000020, 5, 0.40000000000000036 },
- { 41.000000000000000, 5, 0.50000000000000000 },
- { 39.928320000000006, 5, 0.59999999999999964 },
- { 34.498240000000052, 5, 0.69999999999999929 },
- { 24.565759999999916, 5, 0.80000000000000071 },
- { 10.255679999999948, 5, 0.90000000000000036 },
- { -8.0000000000000000, 5, 1.0000000000000000 },
- { -29.423679999999933, 5, 1.0999999999999996 },
- { -52.853759999999838, 5, 1.1999999999999993 },
- { -76.706240000000179, 5, 1.3000000000000007 },
- { -98.936320000000080, 5, 1.4000000000000004 },
- { -117.00000000000000, 5, 1.5000000000000000 },
- { -127.81567999999996, 5, 1.5999999999999996 },
- { -127.72576000000002, 5, 1.6999999999999993 },
- { -112.45823999999980, 5, 1.8000000000000007 },
- { -77.088319999999840, 5, 1.9000000000000004 },
- { -16.000000000000000, 5, 2.0000000000000000 },
- { 77.152319999999520, 5, 2.0999999999999996 },
- { 209.48223999999891, 5, 2.1999999999999993 },
- { 388.90976000000148, 5, 2.3000000000000007 },
- { 624.19968000000074, 5, 2.4000000000000004 },
- { 925.00000000000000, 5, 2.5000000000000000 },
- { 1301.8803199999984, 5, 2.5999999999999996 },
- { 1766.3702399999963, 5, 2.6999999999999993 },
- { 2330.9977600000047, 5, 2.8000000000000007 },
- { 3009.3276800000026, 5, 2.9000000000000004 },
- { 3816.0000000000000, 5, 3.0000000000000000 },
- { 4766.7683199999965, 5, 3.0999999999999996 },
- { 5878.5382399999908, 5, 3.1999999999999993 },
- { 7169.4057600000087, 5, 3.3000000000000007 },
- { 8658.6956800000080, 5, 3.4000000000000004 },
- { 10367.000000000000, 5, 3.5000000000000000 },
- { 12316.216319999992, 5, 3.5999999999999996 },
- { 14529.586239999979, 5, 3.6999999999999993 },
- { 17031.733760000021, 5, 3.8000000000000007 },
- { 19848.703680000013, 5, 3.9000000000000004 },
- { 23008.000000000000, 5, 4.0000000000000000 },
- { 26538.624319999992, 5, 4.0999999999999996 },
- { 30471.114239999963, 5, 4.1999999999999993 },
- { 34837.581760000037, 5, 4.3000000000000007 },
- { 39671.751680000008, 5, 4.4000000000000004 },
- { 45009.000000000000, 5, 4.5000000000000000 },
- { 50886.392319999970, 5, 4.5999999999999996 },
- { 57342.722239999952, 5, 4.6999999999999993 },
- { 64418.549760000053, 5, 4.8000000000000007 },
- { 72156.239680000028, 5, 4.9000000000000004 },
- { 80600.000000000000, 5, 5.0000000000000000 },
- { 89795.920319999976, 5, 5.0999999999999996 },
- { 99792.010239999945, 5, 5.1999999999999993 },
- { 110638.23776000006, 5, 5.3000000000000007 },
- { 122386.56768000004, 5, 5.4000000000000004 },
- { 135091.00000000000, 5, 5.5000000000000000 },
- { 148807.60831999997, 5, 5.5999999999999996 },
- { 163594.57823999992, 5, 5.6999999999999993 },
- { 179512.24576000011, 5, 5.8000000000000007 },
- { 196623.13568000006, 5, 5.9000000000000004 },
- { 214992.00000000000, 5, 6.0000000000000000 },
- { 234685.85632000031, 5, 6.1000000000000014 },
- { 255774.02623999983, 5, 6.1999999999999993 },
- { 278328.17376000021, 5, 6.3000000000000007 },
- { 302422.34367999958, 5, 6.3999999999999986 },
- { 328133.00000000000, 5, 6.5000000000000000 },
- { 355539.06432000035, 5, 6.6000000000000014 },
- { 384721.95423999976, 5, 6.6999999999999993 },
- { 415765.62176000018, 5, 6.8000000000000007 },
- { 448756.59167999960, 5, 6.8999999999999986 },
- { 483784.00000000000, 5, 7.0000000000000000 },
- { 520939.63232000044, 5, 7.1000000000000014 },
- { 560317.96223999979, 5, 7.1999999999999993 },
- { 602016.18976000033, 5, 7.3000000000000007 },
- { 646134.27967999945, 5, 7.3999999999999986 },
- { 692775.00000000000, 5, 7.5000000000000000 },
- { 742043.96032000054, 5, 7.6000000000000014 },
- { 794049.65023999964, 5, 7.6999999999999993 },
- { 848903.47776000027, 5, 7.8000000000000007 },
- { 906719.80767999915, 5, 7.8999999999999986 },
- { 967616.00000000000, 5, 8.0000000000000000 },
- { 1031712.4483200011, 5, 8.1000000000000014 },
- { 1099132.6182399995, 5, 8.1999999999999993 },
- { 1170003.0857600006, 5, 8.3000000000000007 },
- { 1244453.5756799988, 5, 8.3999999999999986 },
- { 1322617.0000000000, 5, 8.5000000000000000 },
- { 1404629.4963200013, 5, 8.6000000000000014 },
- { 1490630.4662399990, 5, 8.6999999999999993 },
- { 1580762.6137600006, 5, 8.8000000000000007 },
- { 1675171.9836799989, 5, 8.8999999999999986 },
- { 1774008.0000000000, 5, 9.0000000000000000 },
- { 1877423.5043200015, 5, 9.1000000000000014 },
- { 1985574.7942399993, 5, 9.1999999999999993 },
- { 2098621.6617600010, 5, 9.3000000000000007 },
- { 2216727.4316799981, 5, 9.3999999999999986 },
- { 2340059.0000000000, 5, 9.5000000000000000 },
- { 2468786.8723200019, 5, 9.6000000000000014 },
- { 2603085.2022399991, 5, 9.6999999999999993 },
- { 2743131.8297600015, 5, 9.8000000000000007 },
- { 2889108.3196799983, 5, 9.8999999999999986 },
- { 3041200.0000000000, 5, 10.000000000000000 },
+ { -3041200.0000000000, 5, -10.000000000000000, 0.0 },
+ { -2889108.3196800007, 5, -9.9000000000000004, 0.0 },
+ { -2743131.8297600015, 5, -9.8000000000000007, 0.0 },
+ { -2603085.2022399991, 5, -9.6999999999999993, 0.0 },
+ { -2468786.8723199992, 5, -9.5999999999999996, 0.0 },
+ { -2340059.0000000000, 5, -9.5000000000000000, 0.0 },
+ { -2216727.4316800009, 5, -9.4000000000000004, 0.0 },
+ { -2098621.6617600010, 5, -9.3000000000000007, 0.0 },
+ { -1985574.7942399993, 5, -9.1999999999999993, 0.0 },
+ { -1877423.5043199996, 5, -9.0999999999999996, 0.0 },
+ { -1774008.0000000000, 5, -9.0000000000000000, 0.0 },
+ { -1675171.9836800008, 5, -8.9000000000000004, 0.0 },
+ { -1580762.6137600006, 5, -8.8000000000000007, 0.0 },
+ { -1490630.4662399990, 5, -8.6999999999999993, 0.0 },
+ { -1404629.4963199999, 5, -8.5999999999999996, 0.0 },
+ { -1322617.0000000000, 5, -8.5000000000000000, 0.0 },
+ { -1244453.5756800002, 5, -8.4000000000000004, 0.0 },
+ { -1170003.0857600006, 5, -8.3000000000000007, 0.0 },
+ { -1099132.6182399995, 5, -8.1999999999999993, 0.0 },
+ { -1031712.4483199996, 5, -8.0999999999999996, 0.0 },
+ { -967616.00000000000, 5, -8.0000000000000000, 0.0 },
+ { -906719.80768000009, 5, -7.9000000000000004, 0.0 },
+ { -848903.47775999992, 5, -7.7999999999999998, 0.0 },
+ { -794049.65023999964, 5, -7.6999999999999993, 0.0 },
+ { -742043.96031999995, 5, -7.5999999999999996, 0.0 },
+ { -692775.00000000000, 5, -7.5000000000000000, 0.0 },
+ { -646134.27968000027, 5, -7.4000000000000004, 0.0 },
+ { -602016.18975999986, 5, -7.2999999999999998, 0.0 },
+ { -560317.96223999979, 5, -7.1999999999999993, 0.0 },
+ { -520939.63231999992, 5, -7.0999999999999996, 0.0 },
+ { -483784.00000000000, 5, -7.0000000000000000, 0.0 },
+ { -448756.59168000019, 5, -6.9000000000000004, 0.0 },
+ { -415765.62176000001, 5, -6.7999999999999998, 0.0 },
+ { -384721.95423999976, 5, -6.6999999999999993, 0.0 },
+ { -355539.06431999995, 5, -6.5999999999999996, 0.0 },
+ { -328133.00000000000, 5, -6.5000000000000000, 0.0 },
+ { -302422.34368000011, 5, -6.4000000000000004, 0.0 },
+ { -278328.17375999998, 5, -6.2999999999999998, 0.0 },
+ { -255774.02623999983, 5, -6.1999999999999993, 0.0 },
+ { -234685.85631999990, 5, -6.0999999999999996, 0.0 },
+ { -214992.00000000000, 5, -6.0000000000000000, 0.0 },
+ { -196623.13567999989, 5, -5.8999999999999995, 0.0 },
+ { -179512.24575999999, 5, -5.7999999999999998, 0.0 },
+ { -163594.57824000003, 5, -5.7000000000000002, 0.0 },
+ { -148807.60831999997, 5, -5.5999999999999996, 0.0 },
+ { -135091.00000000000, 5, -5.5000000000000000, 0.0 },
+ { -122386.56767999992, 5, -5.3999999999999995, 0.0 },
+ { -110638.23776000000, 5, -5.2999999999999998, 0.0 },
+ { -99792.010239999945, 5, -5.1999999999999993, 0.0 },
+ { -89795.920319999976, 5, -5.0999999999999996, 0.0 },
+ { -80600.000000000000, 5, -5.0000000000000000, 0.0 },
+ { -72156.239679999941, 5, -4.8999999999999995, 0.0 },
+ { -64418.549759999994, 5, -4.7999999999999998, 0.0 },
+ { -57342.722239999952, 5, -4.6999999999999993, 0.0 },
+ { -50886.392319999970, 5, -4.5999999999999996, 0.0 },
+ { -45009.000000000000, 5, -4.5000000000000000, 0.0 },
+ { -39671.751679999965, 5, -4.3999999999999995, 0.0 },
+ { -34837.581759999986, 5, -4.2999999999999998, 0.0 },
+ { -30471.114239999963, 5, -4.1999999999999993, 0.0 },
+ { -26538.624319999992, 5, -4.0999999999999996, 0.0 },
+ { -23008.000000000000, 5, -4.0000000000000000, 0.0 },
+ { -19848.703679999981, 5, -3.8999999999999995, 0.0 },
+ { -17031.733759999996, 5, -3.7999999999999998, 0.0 },
+ { -14529.586239999979, 5, -3.6999999999999993, 0.0 },
+ { -12316.216319999992, 5, -3.5999999999999996, 0.0 },
+ { -10367.000000000000, 5, -3.5000000000000000, 0.0 },
+ { -8658.6956799999934, 5, -3.3999999999999995, 0.0 },
+ { -7169.4057599999960, 5, -3.2999999999999998, 0.0 },
+ { -5878.5382399999908, 5, -3.1999999999999993, 0.0 },
+ { -4766.7683199999965, 5, -3.0999999999999996, 0.0 },
+ { -3816.0000000000000, 5, -3.0000000000000000, 0.0 },
+ { -3009.3276799999958, 5, -2.8999999999999995, 0.0 },
+ { -2330.9977599999988, 5, -2.7999999999999998, 0.0 },
+ { -1766.3702399999963, 5, -2.6999999999999993, 0.0 },
+ { -1301.8803199999984, 5, -2.5999999999999996, 0.0 },
+ { -925.00000000000000, 5, -2.5000000000000000, 0.0 },
+ { -624.19967999999858, 5, -2.3999999999999995, 0.0 },
+ { -388.90975999999978, 5, -2.2999999999999998, 0.0 },
+ { -209.48223999999891, 5, -2.1999999999999993, 0.0 },
+ { -77.152319999999520, 5, -2.0999999999999996, 0.0 },
+ { 16.000000000000000, 5, -2.0000000000000000, 0.0 },
+ { 77.088319999999840, 5, -1.9000000000000004, 0.0 },
+ { 112.45824000000026, 5, -1.7999999999999989, 0.0 },
+ { 127.72576000000002, 5, -1.6999999999999993, 0.0 },
+ { 127.81567999999996, 5, -1.5999999999999996, 0.0 },
+ { 117.00000000000000, 5, -1.5000000000000000, 0.0 },
+ { 98.936320000000080, 5, -1.4000000000000004, 0.0 },
+ { 76.706239999999752, 5, -1.2999999999999989, 0.0 },
+ { 52.853759999999838, 5, -1.1999999999999993, 0.0 },
+ { 29.423679999999933, 5, -1.0999999999999996, 0.0 },
+ { 8.0000000000000000, 5, -1.0000000000000000, 0.0 },
+ { -10.255679999999948, 5, -0.90000000000000036, 0.0 },
+ { -24.565760000000125, 5, -0.79999999999999893, 0.0 },
+ { -34.498240000000052, 5, -0.69999999999999929, 0.0 },
+ { -39.928320000000006, 5, -0.59999999999999964, 0.0 },
+ { -41.000000000000000, 5, -0.50000000000000000, 0.0 },
+ { -38.087679999999935, 5, -0.39999999999999858, 0.0 },
+ { -31.757759999999919, 5, -0.29999999999999893, 0.0 },
+ { -22.730239999999931, 5, -0.19999999999999929, 0.0 },
+ { -11.840319999999959, 5, -0.099999999999999645, 0.0 },
+ { 0.0000000000000000, 5, 0.0000000000000000, 0.0 },
+ { 11.840320000000162, 5, 0.10000000000000142, 0.0 },
+ { 22.730240000000109, 5, 0.20000000000000107, 0.0 },
+ { 31.757760000000054, 5, 0.30000000000000071, 0.0 },
+ { 38.087680000000020, 5, 0.40000000000000036, 0.0 },
+ { 41.000000000000000, 5, 0.50000000000000000, 0.0 },
+ { 39.928319999999957, 5, 0.60000000000000142, 0.0 },
+ { 34.498239999999925, 5, 0.70000000000000107, 0.0 },
+ { 24.565759999999916, 5, 0.80000000000000071, 0.0 },
+ { 10.255679999999948, 5, 0.90000000000000036, 0.0 },
+ { -8.0000000000000000, 5, 1.0000000000000000, 0.0 },
+ { -29.423680000000317, 5, 1.1000000000000014, 0.0 },
+ { -52.853760000000264, 5, 1.2000000000000011, 0.0 },
+ { -76.706240000000179, 5, 1.3000000000000007, 0.0 },
+ { -98.936320000000080, 5, 1.4000000000000004, 0.0 },
+ { -117.00000000000000, 5, 1.5000000000000000, 0.0 },
+ { -127.81568000000010, 5, 1.6000000000000014, 0.0 },
+ { -127.72575999999992, 5, 1.7000000000000011, 0.0 },
+ { -112.45823999999980, 5, 1.8000000000000007, 0.0 },
+ { -77.088319999999840, 5, 1.9000000000000004, 0.0 },
+ { -16.000000000000000, 5, 2.0000000000000000, 0.0 },
+ { 77.152320000001623, 5, 2.1000000000000014, 0.0 },
+ { 209.48224000000164, 5, 2.2000000000000011, 0.0 },
+ { 388.90976000000148, 5, 2.3000000000000007, 0.0 },
+ { 624.19968000000074, 5, 2.4000000000000004, 0.0 },
+ { 925.00000000000000, 5, 2.5000000000000000, 0.0 },
+ { 1301.8803200000059, 5, 2.6000000000000014, 0.0 },
+ { 1766.3702400000057, 5, 2.7000000000000011, 0.0 },
+ { 2330.9977600000047, 5, 2.8000000000000007, 0.0 },
+ { 3009.3276800000026, 5, 2.9000000000000004, 0.0 },
+ { 3816.0000000000000, 5, 3.0000000000000000, 0.0 },
+ { 4766.7683200000147, 5, 3.1000000000000014, 0.0 },
+ { 5878.5382400000126, 5, 3.2000000000000011, 0.0 },
+ { 7169.4057600000087, 5, 3.3000000000000007, 0.0 },
+ { 8658.6956800000080, 5, 3.4000000000000004, 0.0 },
+ { 10367.000000000000, 5, 3.5000000000000000, 0.0 },
+ { 12316.216320000027, 5, 3.6000000000000014, 0.0 },
+ { 14529.586240000028, 5, 3.7000000000000011, 0.0 },
+ { 17031.733760000021, 5, 3.8000000000000007, 0.0 },
+ { 19848.703680000013, 5, 3.9000000000000004, 0.0 },
+ { 23008.000000000000, 5, 4.0000000000000000, 0.0 },
+ { 26538.624320000057, 5, 4.1000000000000014, 0.0 },
+ { 30471.114240000043, 5, 4.2000000000000011, 0.0 },
+ { 34837.581760000037, 5, 4.3000000000000007, 0.0 },
+ { 39671.751680000008, 5, 4.4000000000000004, 0.0 },
+ { 45009.000000000000, 5, 4.5000000000000000, 0.0 },
+ { 50886.392320000086, 5, 4.6000000000000014, 0.0 },
+ { 57342.722240000076, 5, 4.7000000000000011, 0.0 },
+ { 64418.549760000053, 5, 4.8000000000000007, 0.0 },
+ { 72156.239680000028, 5, 4.9000000000000004, 0.0 },
+ { 80600.000000000000, 5, 5.0000000000000000, 0.0 },
+ { 89795.920320000136, 5, 5.1000000000000014, 0.0 },
+ { 99792.010240000105, 5, 5.2000000000000011, 0.0 },
+ { 110638.23776000006, 5, 5.3000000000000007, 0.0 },
+ { 122386.56768000004, 5, 5.4000000000000004, 0.0 },
+ { 135091.00000000000, 5, 5.5000000000000000, 0.0 },
+ { 148807.60832000020, 5, 5.6000000000000014, 0.0 },
+ { 163594.57824000015, 5, 5.7000000000000011, 0.0 },
+ { 179512.24576000011, 5, 5.8000000000000007, 0.0 },
+ { 196623.13568000006, 5, 5.9000000000000004, 0.0 },
+ { 214992.00000000000, 5, 6.0000000000000000, 0.0 },
+ { 234685.85632000031, 5, 6.1000000000000014, 0.0 },
+ { 255774.02623999983, 5, 6.1999999999999993, 0.0 },
+ { 278328.17376000021, 5, 6.3000000000000007, 0.0 },
+ { 302422.34368000063, 5, 6.4000000000000021, 0.0 },
+ { 328133.00000000000, 5, 6.5000000000000000, 0.0 },
+ { 355539.06432000035, 5, 6.6000000000000014, 0.0 },
+ { 384721.95423999976, 5, 6.6999999999999993, 0.0 },
+ { 415765.62176000018, 5, 6.8000000000000007, 0.0 },
+ { 448756.59168000077, 5, 6.9000000000000021, 0.0 },
+ { 483784.00000000000, 5, 7.0000000000000000, 0.0 },
+ { 520939.63232000044, 5, 7.1000000000000014, 0.0 },
+ { 560317.96223999979, 5, 7.1999999999999993, 0.0 },
+ { 602016.18976000033, 5, 7.3000000000000007, 0.0 },
+ { 646134.27968000097, 5, 7.4000000000000021, 0.0 },
+ { 692775.00000000000, 5, 7.5000000000000000, 0.0 },
+ { 742043.96032000054, 5, 7.6000000000000014, 0.0 },
+ { 794049.65023999964, 5, 7.6999999999999993, 0.0 },
+ { 848903.47776000027, 5, 7.8000000000000007, 0.0 },
+ { 906719.80768000125, 5, 7.9000000000000021, 0.0 },
+ { 967616.00000000000, 5, 8.0000000000000000, 0.0 },
+ { 1031712.4483200011, 5, 8.1000000000000014, 0.0 },
+ { 1099132.6182399995, 5, 8.1999999999999993, 0.0 },
+ { 1170003.0857600006, 5, 8.3000000000000007, 0.0 },
+ { 1244453.5756800014, 5, 8.4000000000000021, 0.0 },
+ { 1322617.0000000000, 5, 8.5000000000000000, 0.0 },
+ { 1404629.4963200013, 5, 8.6000000000000014, 0.0 },
+ { 1490630.4662399990, 5, 8.6999999999999993, 0.0 },
+ { 1580762.6137600006, 5, 8.8000000000000007, 0.0 },
+ { 1675171.9836800022, 5, 8.9000000000000021, 0.0 },
+ { 1774008.0000000000, 5, 9.0000000000000000, 0.0 },
+ { 1877423.5043200015, 5, 9.1000000000000014, 0.0 },
+ { 1985574.7942400032, 5, 9.2000000000000028, 0.0 },
+ { 2098621.6617600010, 5, 9.3000000000000007, 0.0 },
+ { 2216727.4316800022, 5, 9.4000000000000021, 0.0 },
+ { 2340059.0000000000, 5, 9.5000000000000000, 0.0 },
+ { 2468786.8723200019, 5, 9.6000000000000014, 0.0 },
+ { 2603085.2022400037, 5, 9.7000000000000028, 0.0 },
+ { 2743131.8297600015, 5, 9.8000000000000007, 0.0 },
+ { 2889108.3196800039, 5, 9.9000000000000021, 0.0 },
+ { 3041200.0000000000, 5, 10.000000000000000, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for n=10.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data005[201] =
{
- { 8093278209760.0000, 10, -10.000000000000000 },
- { 7282867075495.3066, 10, -9.9000000000000004 },
- { 6545846221520.6768, 10, -9.8000000000000007 },
- { 5876279006180.6377, 10, -9.6999999999999993 },
- { 5268651052510.4668, 10, -9.5999999999999996 },
- { 4717844376391.0000, 10, -9.5000000000000000 },
- { 4219112842239.1147, 10, -9.4000000000000004 },
- { 3768058891466.0469, 10, -9.3000000000000007 },
- { 3360611490639.0889, 10, -9.1999999999999993 },
- { 2993005247949.7607, 10, -9.0999999999999996 },
- { 2661760648224.0000, 10, -9.0000000000000000 },
- { 2363665358307.8496, 10, -8.9000000000000004 },
- { 2095756556225.3428, 10, -8.8000000000000007 },
- { 1855304239034.7983, 10, -8.6999999999999993 },
- { 1639795465805.4746, 10, -8.5999999999999996 },
- { 1446919493599.0000, 10, -8.5000000000000000 },
- { 1274553765769.7463, 10, -8.4000000000000004 },
- { 1120750713295.2778, 10, -8.3000000000000007 },
- { 983725331213.07190, 10, -8.1999999999999993 },
- { 861843493572.90051, 10, -8.0999999999999996 },
- { 753610971616.00000, 10, -8.0000000000000000 },
- { 657663121163.02454, 10, -7.9000000000000004 },
- { 572755206432.81335, 10, -7.7999999999999998 },
- { 497753328723.87518, 10, -7.7000000000000002 },
- { 431625929570.40063, 10, -7.5999999999999996 },
- { 373435839135.00000, 10, -7.5000000000000000 },
- { 322332841721.55731, 10, -7.4000000000000004 },
- { 277546731384.01782, 10, -7.2999999999999998 },
- { 238380831670.89990, 10, -7.2000000000000002 },
- { 204205954581.24731, 10, -7.0999999999999996 },
- { 174454774816.00000, 10, -7.0000000000000000 },
- { 148616596389.67230, 10, -6.9000000000000004 },
- { 126232489621.23923, 10, -6.7999999999999998 },
- { 106890777450.54663, 10, -6.7000000000000002 },
- { 90222850927.787979, 10, -6.5999999999999996 },
- { 75899294599.000000, 10, -6.5000000000000000 },
- { 63626303360.468109, 10, -6.4000000000000004 },
- { 53142373179.806053, 10, -6.2999999999999998 },
- { 44215248881.625534, 10, -6.2000000000000002 },
- { 36639112971.527679, 10, -6.0999999999999996 },
- { 30232000224.000000, 10, -6.0000000000000000 },
- { 24833423488.050617, 10, -5.9000000000000004 },
- { 20302196869.444584, 10, -5.7999999999999998 },
- { 16514443130.579359, 10, -5.7000000000000002 },
- { 13361772808.732477, 10, -5.5999999999999996 },
- { 10749623191.000000, 10, -5.5000000000000000 },
- { 8595745900.0898170, 10, -5.4000000000000004 },
- { 6828832439.6160822, 10, -5.2999999999999998 },
- { 5387267621.0259018, 10, -5.2000000000000002 },
- { 4218001347.1524582, 10, -5.0999999999999996 },
- { 3275529760.0000000, 10, -5.0000000000000000 },
- { 2520977273.0966806, 10, -4.9000000000000004 },
- { 1921271501.9744270, 10, -4.7999999999999998 },
- { 1448403580.4203825, 10, -4.7000000000000002 },
- { 1078766805.4651456, 10, -4.5999999999999996 },
- { 792566991.00000000, 10, -4.5000000000000000 },
- { 573298328.81993556, 10, -4.4000000000000004 },
- { 407278957.14375639, 10, -4.2999999999999998 },
- { 283240820.63788313, 10, -4.2000000000000002 },
- { 191968773.03860721, 10, -4.0999999999999996 },
- { 125984224.00000000, 10, -4.0000000000000000 },
- { 79268966.162877649, 10, -3.9000000000000004 },
- { 47025137.016035721, 10, -3.7999999999999998 },
- { 25467573.275709353, 10, -3.7000000000000002 },
- { 11645103.614666298, 10, -3.5999999999999996 },
- { 3287599.0000000000, 10, -3.5000000000000000 },
- { -1324140.9798373245, 10, -3.4000000000000004 },
- { -3468342.2313268245, 10, -3.2999999999999998 },
- { -4074495.5241857050, 10, -3.2000000000000002 },
- { -3800107.4878923763, 10, -3.0999999999999996 },
- { -3093984.0000000000, 10, -3.0000000000000000 },
- { -2247873.5653938209, 10, -2.9000000000000004 },
- { -1438117.1978829810, 10, -2.7999999999999998 },
- { -758781.93281034287, 10, -2.7000000000000002 },
- { -247597.05012469599, 10, -2.5999999999999996 },
- { 94135.000000000000, 10, -2.5000000000000000 },
- { 286617.47398410190, 10, -2.4000000000000004 },
- { 360718.79745525768, 10, -2.2999999999999998 },
- { 350419.82826741762, 10, -2.2000000000000002 },
- { 287863.09027338214, 10, -2.0999999999999996 },
- { 200416.00000000000, 10, -2.0000000000000000 },
- { 109249.22783242268, 10, -1.9000000000000004 },
- { 29012.094015898125, 10, -1.8000000000000007 },
- { -31740.330680422732, 10, -1.6999999999999993 },
- { -69648.597834137676, 10, -1.5999999999999996 },
- { -85401.000000000000, 10, -1.5000000000000000 },
- { -82507.675752857642, 10, -1.4000000000000004 },
- { -66123.413033062563, 10, -1.3000000000000007 },
- { -42007.465141862223, 10, -1.1999999999999993 },
- { -15676.055823257526, 10, -1.0999999999999996 },
- { 8224.0000000000000, 10, -1.0000000000000000 },
- { 26314.366684262357, 10, -0.90000000000000036 },
- { 36668.344916377559, 10, -0.80000000000000071 },
- { 38802.826035097583, 10, -0.69999999999999929 },
- { 33513.167890022363, 10, -0.59999999999999964 },
- { 22591.000000000000, 10, -0.50000000000000000 },
- { 8467.6907597824556, 10, -0.40000000000000036 },
- { -6173.8524877822965, 10, -0.30000000000000071 },
- { -18778.856957542470, 10, -0.19999999999999929 },
- { -27256.158950297624, 10, -0.099999999999999645 },
- { -30240.000000000000, 10, 0.0000000000000000 },
- { -27256.158950297624, 10, 0.099999999999999645 },
- { -18778.856957542470, 10, 0.19999999999999929 },
- { -6173.8524877822965, 10, 0.30000000000000071 },
- { 8467.6907597824556, 10, 0.40000000000000036 },
- { 22591.000000000000, 10, 0.50000000000000000 },
- { 33513.167890022363, 10, 0.59999999999999964 },
- { 38802.826035097583, 10, 0.69999999999999929 },
- { 36668.344916377559, 10, 0.80000000000000071 },
- { 26314.366684262357, 10, 0.90000000000000036 },
- { 8224.0000000000000, 10, 1.0000000000000000 },
- { -15676.055823257526, 10, 1.0999999999999996 },
- { -42007.465141862223, 10, 1.1999999999999993 },
- { -66123.413033062563, 10, 1.3000000000000007 },
- { -82507.675752857642, 10, 1.4000000000000004 },
- { -85401.000000000000, 10, 1.5000000000000000 },
- { -69648.597834137676, 10, 1.5999999999999996 },
- { -31740.330680422732, 10, 1.6999999999999993 },
- { 29012.094015898125, 10, 1.8000000000000007 },
- { 109249.22783242268, 10, 1.9000000000000004 },
- { 200416.00000000000, 10, 2.0000000000000000 },
- { 287863.09027338214, 10, 2.0999999999999996 },
- { 350419.82826741732, 10, 2.1999999999999993 },
- { 360718.79745525745, 10, 2.3000000000000007 },
- { 286617.47398410190, 10, 2.4000000000000004 },
- { 94135.000000000000, 10, 2.5000000000000000 },
- { -247597.05012469599, 10, 2.5999999999999996 },
- { -758781.93281033845, 10, 2.6999999999999993 },
- { -1438117.1978829878, 10, 2.8000000000000007 },
- { -2247873.5653938209, 10, 2.9000000000000004 },
- { -3093984.0000000000, 10, 3.0000000000000000 },
- { -3800107.4878923763, 10, 3.0999999999999996 },
- { -4074495.5241857003, 10, 3.1999999999999993 },
- { -3468342.2313268133, 10, 3.3000000000000007 },
- { -1324140.9798373245, 10, 3.4000000000000004 },
- { 3287599.0000000000, 10, 3.5000000000000000 },
- { 11645103.614666298, 10, 3.5999999999999996 },
- { 25467573.275709212, 10, 3.6999999999999993 },
- { 47025137.016035900, 10, 3.8000000000000007 },
- { 79268966.162877649, 10, 3.9000000000000004 },
- { 125984224.00000000, 10, 4.0000000000000000 },
- { 191968773.03860721, 10, 4.0999999999999996 },
- { 283240820.63788199, 10, 4.1999999999999993 },
- { 407278957.14375770, 10, 4.3000000000000007 },
- { 573298328.81993556, 10, 4.4000000000000004 },
- { 792566991.00000000, 10, 4.5000000000000000 },
- { 1078766805.4651456, 10, 4.5999999999999996 },
- { 1448403580.4203794, 10, 4.6999999999999993 },
- { 1921271501.9744320, 10, 4.8000000000000007 },
- { 2520977273.0966806, 10, 4.9000000000000004 },
- { 3275529760.0000000, 10, 5.0000000000000000 },
- { 4218001347.1524582, 10, 5.0999999999999996 },
- { 5387267621.0258913, 10, 5.1999999999999993 },
- { 6828832439.6160927, 10, 5.3000000000000007 },
- { 8595745900.0898170, 10, 5.4000000000000004 },
- { 10749623191.000000, 10, 5.5000000000000000 },
- { 13361772808.732477, 10, 5.5999999999999996 },
- { 16514443130.579332, 10, 5.6999999999999993 },
- { 20302196869.444618, 10, 5.8000000000000007 },
- { 24833423488.050617, 10, 5.9000000000000004 },
- { 30232000224.000000, 10, 6.0000000000000000 },
- { 36639112971.527824, 10, 6.1000000000000014 },
- { 44215248881.625443, 10, 6.1999999999999993 },
- { 53142373179.806152, 10, 6.3000000000000007 },
- { 63626303360.467911, 10, 6.3999999999999986 },
- { 75899294599.000000, 10, 6.5000000000000000 },
- { 90222850927.788208, 10, 6.6000000000000014 },
- { 106890777450.54652, 10, 6.6999999999999993 },
- { 126232489621.23946, 10, 6.8000000000000007 },
- { 148616596389.67184, 10, 6.8999999999999986 },
- { 174454774816.00000, 10, 7.0000000000000000 },
- { 204205954581.24780, 10, 7.1000000000000014 },
- { 238380831670.89960, 10, 7.1999999999999993 },
- { 277546731384.01831, 10, 7.3000000000000007 },
- { 322332841721.55646, 10, 7.3999999999999986 },
- { 373435839135.00000, 10, 7.5000000000000000 },
- { 431625929570.40161, 10, 7.6000000000000014 },
- { 497753328723.87476, 10, 7.6999999999999993 },
- { 572755206432.81396, 10, 7.8000000000000007 },
- { 657663121163.02307, 10, 7.8999999999999986 },
- { 753610971616.00000, 10, 8.0000000000000000 },
- { 861843493572.90283, 10, 8.1000000000000014 },
- { 983725331213.07190, 10, 8.1999999999999993 },
- { 1120750713295.2778, 10, 8.3000000000000007 },
- { 1274553765769.7439, 10, 8.3999999999999986 },
- { 1446919493599.0000, 10, 8.5000000000000000 },
- { 1639795465805.4785, 10, 8.6000000000000014 },
- { 1855304239034.7983, 10, 8.6999999999999993 },
- { 2095756556225.3428, 10, 8.8000000000000007 },
- { 2363665358307.8442, 10, 8.8999999999999986 },
- { 2661760648224.0000, 10, 9.0000000000000000 },
- { 2993005247949.7671, 10, 9.1000000000000014 },
- { 3360611490639.0889, 10, 9.1999999999999993 },
- { 3768058891466.0469, 10, 9.3000000000000007 },
- { 4219112842239.1055, 10, 9.3999999999999986 },
- { 4717844376391.0000, 10, 9.5000000000000000 },
- { 5268651052510.4785, 10, 9.6000000000000014 },
- { 5876279006180.6377, 10, 9.6999999999999993 },
- { 6545846221520.6768, 10, 9.8000000000000007 },
- { 7282867075495.2949, 10, 9.8999999999999986 },
- { 8093278209760.0000, 10, 10.000000000000000 },
+ { 8093278209760.0000, 10, -10.000000000000000, 0.0 },
+ { 7282867075495.3066, 10, -9.9000000000000004, 0.0 },
+ { 6545846221520.6768, 10, -9.8000000000000007, 0.0 },
+ { 5876279006180.6377, 10, -9.6999999999999993, 0.0 },
+ { 5268651052510.4668, 10, -9.5999999999999996, 0.0 },
+ { 4717844376391.0000, 10, -9.5000000000000000, 0.0 },
+ { 4219112842239.1147, 10, -9.4000000000000004, 0.0 },
+ { 3768058891466.0469, 10, -9.3000000000000007, 0.0 },
+ { 3360611490639.0889, 10, -9.1999999999999993, 0.0 },
+ { 2993005247949.7607, 10, -9.0999999999999996, 0.0 },
+ { 2661760648224.0000, 10, -9.0000000000000000, 0.0 },
+ { 2363665358307.8496, 10, -8.9000000000000004, 0.0 },
+ { 2095756556225.3428, 10, -8.8000000000000007, 0.0 },
+ { 1855304239034.7983, 10, -8.6999999999999993, 0.0 },
+ { 1639795465805.4746, 10, -8.5999999999999996, 0.0 },
+ { 1446919493599.0000, 10, -8.5000000000000000, 0.0 },
+ { 1274553765769.7463, 10, -8.4000000000000004, 0.0 },
+ { 1120750713295.2778, 10, -8.3000000000000007, 0.0 },
+ { 983725331213.07190, 10, -8.1999999999999993, 0.0 },
+ { 861843493572.90051, 10, -8.0999999999999996, 0.0 },
+ { 753610971616.00000, 10, -8.0000000000000000, 0.0 },
+ { 657663121163.02454, 10, -7.9000000000000004, 0.0 },
+ { 572755206432.81335, 10, -7.7999999999999998, 0.0 },
+ { 497753328723.87476, 10, -7.6999999999999993, 0.0 },
+ { 431625929570.40063, 10, -7.5999999999999996, 0.0 },
+ { 373435839135.00000, 10, -7.5000000000000000, 0.0 },
+ { 322332841721.55731, 10, -7.4000000000000004, 0.0 },
+ { 277546731384.01782, 10, -7.2999999999999998, 0.0 },
+ { 238380831670.89960, 10, -7.1999999999999993, 0.0 },
+ { 204205954581.24731, 10, -7.0999999999999996, 0.0 },
+ { 174454774816.00000, 10, -7.0000000000000000, 0.0 },
+ { 148616596389.67230, 10, -6.9000000000000004, 0.0 },
+ { 126232489621.23923, 10, -6.7999999999999998, 0.0 },
+ { 106890777450.54652, 10, -6.6999999999999993, 0.0 },
+ { 90222850927.787979, 10, -6.5999999999999996, 0.0 },
+ { 75899294599.000000, 10, -6.5000000000000000, 0.0 },
+ { 63626303360.468109, 10, -6.4000000000000004, 0.0 },
+ { 53142373179.806053, 10, -6.2999999999999998, 0.0 },
+ { 44215248881.625443, 10, -6.1999999999999993, 0.0 },
+ { 36639112971.527679, 10, -6.0999999999999996, 0.0 },
+ { 30232000224.000000, 10, -6.0000000000000000, 0.0 },
+ { 24833423488.050575, 10, -5.8999999999999995, 0.0 },
+ { 20302196869.444584, 10, -5.7999999999999998, 0.0 },
+ { 16514443130.579359, 10, -5.7000000000000002, 0.0 },
+ { 13361772808.732477, 10, -5.5999999999999996, 0.0 },
+ { 10749623191.000000, 10, -5.5000000000000000, 0.0 },
+ { 8595745900.0898018, 10, -5.3999999999999995, 0.0 },
+ { 6828832439.6160822, 10, -5.2999999999999998, 0.0 },
+ { 5387267621.0258913, 10, -5.1999999999999993, 0.0 },
+ { 4218001347.1524582, 10, -5.0999999999999996, 0.0 },
+ { 3275529760.0000000, 10, -5.0000000000000000, 0.0 },
+ { 2520977273.0966735, 10, -4.8999999999999995, 0.0 },
+ { 1921271501.9744270, 10, -4.7999999999999998, 0.0 },
+ { 1448403580.4203794, 10, -4.6999999999999993, 0.0 },
+ { 1078766805.4651456, 10, -4.5999999999999996, 0.0 },
+ { 792566991.00000000, 10, -4.5000000000000000, 0.0 },
+ { 573298328.81993365, 10, -4.3999999999999995, 0.0 },
+ { 407278957.14375639, 10, -4.2999999999999998, 0.0 },
+ { 283240820.63788199, 10, -4.1999999999999993, 0.0 },
+ { 191968773.03860721, 10, -4.0999999999999996, 0.0 },
+ { 125984224.00000000, 10, -4.0000000000000000, 0.0 },
+ { 79268966.162877351, 10, -3.8999999999999995, 0.0 },
+ { 47025137.016035721, 10, -3.7999999999999998, 0.0 },
+ { 25467573.275709212, 10, -3.6999999999999993, 0.0 },
+ { 11645103.614666298, 10, -3.5999999999999996, 0.0 },
+ { 3287599.0000000000, 10, -3.5000000000000000, 0.0 },
+ { -1324140.9798373580, 10, -3.3999999999999995, 0.0 },
+ { -3468342.2313268245, 10, -3.2999999999999998, 0.0 },
+ { -4074495.5241857003, 10, -3.1999999999999993, 0.0 },
+ { -3800107.4878923763, 10, -3.0999999999999996, 0.0 },
+ { -3093984.0000000000, 10, -3.0000000000000000, 0.0 },
+ { -2247873.5653938125, 10, -2.8999999999999995, 0.0 },
+ { -1438117.1978829810, 10, -2.7999999999999998, 0.0 },
+ { -758781.93281033845, 10, -2.6999999999999993, 0.0 },
+ { -247597.05012469599, 10, -2.5999999999999996, 0.0 },
+ { 94135.000000000000, 10, -2.5000000000000000, 0.0 },
+ { 286617.47398410313, 10, -2.3999999999999995, 0.0 },
+ { 360718.79745525768, 10, -2.2999999999999998, 0.0 },
+ { 350419.82826741732, 10, -2.1999999999999993, 0.0 },
+ { 287863.09027338214, 10, -2.0999999999999996, 0.0 },
+ { 200416.00000000000, 10, -2.0000000000000000, 0.0 },
+ { 109249.22783242268, 10, -1.9000000000000004, 0.0 },
+ { 29012.094015896859, 10, -1.7999999999999989, 0.0 },
+ { -31740.330680422732, 10, -1.6999999999999993, 0.0 },
+ { -69648.597834137676, 10, -1.5999999999999996, 0.0 },
+ { -85401.000000000000, 10, -1.5000000000000000, 0.0 },
+ { -82507.675752857642, 10, -1.4000000000000004, 0.0 },
+ { -66123.413033062170, 10, -1.2999999999999989, 0.0 },
+ { -42007.465141862223, 10, -1.1999999999999993, 0.0 },
+ { -15676.055823257526, 10, -1.0999999999999996, 0.0 },
+ { 8224.0000000000000, 10, -1.0000000000000000, 0.0 },
+ { 26314.366684262357, 10, -0.90000000000000036, 0.0 },
+ { 36668.344916377660, 10, -0.79999999999999893, 0.0 },
+ { 38802.826035097583, 10, -0.69999999999999929, 0.0 },
+ { 33513.167890022363, 10, -0.59999999999999964, 0.0 },
+ { 22591.000000000000, 10, -0.50000000000000000, 0.0 },
+ { 8467.6907597821937, 10, -0.39999999999999858, 0.0 },
+ { -6173.8524877825521, 10, -0.29999999999999893, 0.0 },
+ { -18778.856957542470, 10, -0.19999999999999929, 0.0 },
+ { -27256.158950297624, 10, -0.099999999999999645, 0.0 },
+ { -30240.000000000000, 10, 0.0000000000000000, 0.0 },
+ { -27256.158950297515, 10, 0.10000000000000142, 0.0 },
+ { -18778.856957542288, 10, 0.20000000000000107, 0.0 },
+ { -6173.8524877822965, 10, 0.30000000000000071, 0.0 },
+ { 8467.6907597824556, 10, 0.40000000000000036, 0.0 },
+ { 22591.000000000000, 10, 0.50000000000000000, 0.0 },
+ { 33513.167890022516, 10, 0.60000000000000142, 0.0 },
+ { 38802.826035097620, 10, 0.70000000000000107, 0.0 },
+ { 36668.344916377559, 10, 0.80000000000000071, 0.0 },
+ { 26314.366684262357, 10, 0.90000000000000036, 0.0 },
+ { 8224.0000000000000, 10, 1.0000000000000000, 0.0 },
+ { -15676.055823257961, 10, 1.1000000000000014, 0.0 },
+ { -42007.465141862689, 10, 1.2000000000000011, 0.0 },
+ { -66123.413033062563, 10, 1.3000000000000007, 0.0 },
+ { -82507.675752857642, 10, 1.4000000000000004, 0.0 },
+ { -85401.000000000000, 10, 1.5000000000000000, 0.0 },
+ { -69648.597834137239, 10, 1.6000000000000014, 0.0 },
+ { -31740.330680421859, 10, 1.7000000000000011, 0.0 },
+ { 29012.094015898125, 10, 1.8000000000000007, 0.0 },
+ { 109249.22783242268, 10, 1.9000000000000004, 0.0 },
+ { 200416.00000000000, 10, 2.0000000000000000, 0.0 },
+ { 287863.09027338354, 10, 2.1000000000000014, 0.0 },
+ { 350419.82826741802, 10, 2.2000000000000011, 0.0 },
+ { 360718.79745525745, 10, 2.3000000000000007, 0.0 },
+ { 286617.47398410190, 10, 2.4000000000000004, 0.0 },
+ { 94135.000000000000, 10, 2.5000000000000000, 0.0 },
+ { -247597.05012470379, 10, 2.6000000000000014, 0.0 },
+ { -758781.93281034881, 10, 2.7000000000000011, 0.0 },
+ { -1438117.1978829878, 10, 2.8000000000000007, 0.0 },
+ { -2247873.5653938209, 10, 2.9000000000000004, 0.0 },
+ { -3093984.0000000000, 10, 3.0000000000000000, 0.0 },
+ { -3800107.4878923851, 10, 3.1000000000000014, 0.0 },
+ { -4074495.5241857045, 10, 3.2000000000000011, 0.0 },
+ { -3468342.2313268133, 10, 3.3000000000000007, 0.0 },
+ { -1324140.9798373245, 10, 3.4000000000000004, 0.0 },
+ { 3287599.0000000000, 10, 3.5000000000000000, 0.0 },
+ { 11645103.614666503, 10, 3.6000000000000014, 0.0 },
+ { 25467573.275709510, 10, 3.7000000000000011, 0.0 },
+ { 47025137.016035900, 10, 3.8000000000000007, 0.0 },
+ { 79268966.162877649, 10, 3.9000000000000004, 0.0 },
+ { 125984224.00000000, 10, 4.0000000000000000, 0.0 },
+ { 191968773.03860855, 10, 4.1000000000000014, 0.0 },
+ { 283240820.63788390, 10, 4.2000000000000011, 0.0 },
+ { 407278957.14375770, 10, 4.3000000000000007, 0.0 },
+ { 573298328.81993556, 10, 4.4000000000000004, 0.0 },
+ { 792566991.00000000, 10, 4.5000000000000000, 0.0 },
+ { 1078766805.4651513, 10, 4.6000000000000014, 0.0 },
+ { 1448403580.4203873, 10, 4.7000000000000011, 0.0 },
+ { 1921271501.9744320, 10, 4.8000000000000007, 0.0 },
+ { 2520977273.0966806, 10, 4.9000000000000004, 0.0 },
+ { 3275529760.0000000, 10, 5.0000000000000000, 0.0 },
+ { 4218001347.1524763, 10, 5.1000000000000014, 0.0 },
+ { 5387267621.0259113, 10, 5.2000000000000011, 0.0 },
+ { 6828832439.6160927, 10, 5.3000000000000007, 0.0 },
+ { 8595745900.0898170, 10, 5.4000000000000004, 0.0 },
+ { 10749623191.000000, 10, 5.5000000000000000, 0.0 },
+ { 13361772808.732529, 10, 5.6000000000000014, 0.0 },
+ { 16514443130.579391, 10, 5.7000000000000011, 0.0 },
+ { 20302196869.444618, 10, 5.8000000000000007, 0.0 },
+ { 24833423488.050617, 10, 5.9000000000000004, 0.0 },
+ { 30232000224.000000, 10, 6.0000000000000000, 0.0 },
+ { 36639112971.527824, 10, 6.1000000000000014, 0.0 },
+ { 44215248881.625443, 10, 6.1999999999999993, 0.0 },
+ { 53142373179.806152, 10, 6.3000000000000007, 0.0 },
+ { 63626303360.468330, 10, 6.4000000000000021, 0.0 },
+ { 75899294599.000000, 10, 6.5000000000000000, 0.0 },
+ { 90222850927.788208, 10, 6.6000000000000014, 0.0 },
+ { 106890777450.54652, 10, 6.6999999999999993, 0.0 },
+ { 126232489621.23946, 10, 6.8000000000000007, 0.0 },
+ { 148616596389.67273, 10, 6.9000000000000021, 0.0 },
+ { 174454774816.00000, 10, 7.0000000000000000, 0.0 },
+ { 204205954581.24780, 10, 7.1000000000000014, 0.0 },
+ { 238380831670.89960, 10, 7.1999999999999993, 0.0 },
+ { 277546731384.01831, 10, 7.3000000000000007, 0.0 },
+ { 322332841721.55811, 10, 7.4000000000000021, 0.0 },
+ { 373435839135.00000, 10, 7.5000000000000000, 0.0 },
+ { 431625929570.40161, 10, 7.6000000000000014, 0.0 },
+ { 497753328723.87476, 10, 7.6999999999999993, 0.0 },
+ { 572755206432.81396, 10, 7.8000000000000007, 0.0 },
+ { 657663121163.02625, 10, 7.9000000000000021, 0.0 },
+ { 753610971616.00000, 10, 8.0000000000000000, 0.0 },
+ { 861843493572.90283, 10, 8.1000000000000014, 0.0 },
+ { 983725331213.07190, 10, 8.1999999999999993, 0.0 },
+ { 1120750713295.2778, 10, 8.3000000000000007, 0.0 },
+ { 1274553765769.7490, 10, 8.4000000000000021, 0.0 },
+ { 1446919493599.0000, 10, 8.5000000000000000, 0.0 },
+ { 1639795465805.4785, 10, 8.6000000000000014, 0.0 },
+ { 1855304239034.7983, 10, 8.6999999999999993, 0.0 },
+ { 2095756556225.3428, 10, 8.8000000000000007, 0.0 },
+ { 2363665358307.8540, 10, 8.9000000000000021, 0.0 },
+ { 2661760648224.0000, 10, 9.0000000000000000, 0.0 },
+ { 2993005247949.7671, 10, 9.1000000000000014, 0.0 },
+ { 3360611490639.1025, 10, 9.2000000000000028, 0.0 },
+ { 3768058891466.0469, 10, 9.3000000000000007, 0.0 },
+ { 4219112842239.1221, 10, 9.4000000000000021, 0.0 },
+ { 4717844376391.0000, 10, 9.5000000000000000, 0.0 },
+ { 5268651052510.4785, 10, 9.6000000000000014, 0.0 },
+ { 5876279006180.6602, 10, 9.7000000000000028, 0.0 },
+ { 6545846221520.6768, 10, 9.8000000000000007, 0.0 },
+ { 7282867075495.3213, 10, 9.9000000000000021, 0.0 },
+ { 8093278209760.0000, 10, 10.000000000000000, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for n=20.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data006[201] =
{
- { 3.6536710970888030e+25, 20, -10.000000000000000 },
- { 2.9174932703098834e+25, 20, -9.9000000000000004 },
- { 2.3228769039548404e+25, 20, -9.8000000000000007 },
- { 1.8439144509496016e+25, 20, -9.6999999999999993 },
- { 1.4591971834545420e+25, 20, -9.5999999999999996 },
- { 1.1510764882450827e+25, 20, -9.5000000000000000 },
- { 9.0503941245991605e+24, 20, -9.4000000000000004 },
- { 7.0918188910312152e+24, 20, -9.3000000000000007 },
- { 5.5376531405202033e+24, 20, -9.1999999999999993 },
- { 4.3084410724035914e+24, 20, -9.0999999999999996 },
- { 3.3395360269524137e+24, 20, -9.0000000000000000 },
- { 2.5784910430831484e+24, 20, -8.9000000000000004 },
- { 1.9828824261062853e+24, 20, -8.8000000000000007 },
- { 1.5184989558235974e+24, 20, -8.6999999999999993 },
- { 1.1578391431515818e+24, 20, -8.5999999999999996 },
- { 8.7886740525023878e+23, 20, -8.5000000000000000 },
- { 6.6398733801206072e+23, 20, -8.4000000000000004 },
- { 4.9919656538201190e+23, 20, -8.3000000000000007 },
- { 3.7339306542317994e+23, 20, -8.1999999999999993 },
- { 2.7780752653950559e+23, 20, -8.0999999999999996 },
- { 2.0554027373991249e+23, 20, -8.0000000000000000 },
- { 1.5118471231121695e+23, 20, -7.9000000000000004 },
- { 1.1052214218386250e+23, 20, -7.7999999999999998 },
- { 8.0275268594719504e+22, 20, -7.7000000000000002 },
- { 5.7909832934009042e+22, 20, -7.5999999999999996 },
- { 4.1475563998692745e+22, 20, -7.5000000000000000 },
- { 2.9479149729249250e+22, 20, -7.4000000000000004 },
- { 2.0783192485964573e+22, 20, -7.2999999999999998 },
- { 1.4526171451238503e+22, 20, -7.2000000000000002 },
- { 1.0059323685871305e+22, 20, -7.0999999999999996 },
- { 6.8970965604502329e+21, 20, -7.0000000000000000 },
- { 4.6784410379528280e+21, 20, -6.9000000000000004 },
- { 3.1367268160419670e+21, 20, -6.7999999999999998 },
- { 2.0764831558419748e+21, 20, -6.7000000000000002 },
- { 1.3555174744148132e+21, 20, -6.5999999999999996 },
- { 8.7124954970091579e+20, 20, -6.5000000000000000 },
- { 5.5033278133788108e+20, 20, -6.4000000000000004 },
- { 3.4082412197533739e+20, 20, -6.2999999999999998 },
- { 2.0631845648712185e+20, 20, -6.2000000000000002 },
- { 1.2158762212269028e+20, 20, -6.0999999999999996 },
- { 6.9364200641629315e+19, 20, -6.0000000000000000 },
- { 3.7990093270095905e+19, 20, -5.9000000000000004 },
- { 1.9713403927925858e+19, 20, -5.7999999999999998 },
- { 9.4673798488533340e+18, 20, -5.7000000000000002 },
- { 4.0046403628787825e+18, 20, -5.5999999999999996 },
- { 1.2907686705724293e+18, 20, -5.5000000000000000 },
- { 85277679782823936., 20, -5.4000000000000004 },
- { -3.4359547179069376e+17, 20, -5.2999999999999998 },
- { -4.0970873501577555e+17, 20, -5.2000000000000002 },
- { -3.3419585613348250e+17, 20, -5.0999999999999996 },
- { -2.2571776716382720e+17, 20, -5.0000000000000000 },
- { -1.3051120203565566e+17, 20, -4.9000000000000004 },
- { -62555669197021992., 20, -4.7999999999999998 },
- { -20974173561010048., 20, -4.7000000000000002 },
- { 519073301695656.00, 20, -4.5999999999999996 },
- { 8939556693761121.0, 20, -4.5000000000000000 },
- { 10070625675125180., 20, -4.4000000000000004 },
- { 7940371996960715.0, 20, -4.2999999999999998 },
- { 4973623686173568.0, 20, -4.2000000000000002 },
- { 2389023282480410.0, 20, -4.0999999999999996 },
- { 619678016654336.00, 20, -4.0000000000000000 },
- { -339773491011946.00, 20, -3.9000000000000004 },
- { -687467334428204.38, 20, -3.7999999999999998 },
- { -663019129550482.75, 20, -3.7000000000000002 },
- { -469585152350670.25, 20, -3.5999999999999996 },
- { -245659781875039.00, 20, -3.5000000000000000 },
- { -66042773886778.938, 20, -3.4000000000000004 },
- { 43442261337436.312, 20, -3.2999999999999998 },
- { 87626632986465.375, 20, -3.2000000000000002 },
- { 85786202388511.375, 20, -3.0999999999999996 },
- { 59990281399296.000, 20, -3.0000000000000000 },
- { 28343496696718.070, 20, -2.9000000000000004 },
- { 2296898915036.0859, 20, -2.7999999999999998 },
- { -13249381789941.502, 20, -2.7000000000000002 },
- { -18328180426561.059, 20, -2.5999999999999996 },
- { -15799429886575.000, 20, -2.5000000000000000 },
- { -9442592050214.3027, 20, -2.4000000000000004 },
- { -2602375356373.2393, 20, -2.2999999999999998 },
- { 2521759315047.8428, 20, -2.2000000000000002 },
- { 5027779307352.6660, 20, -2.0999999999999996 },
- { 5080118660096.0000, 20, -2.0000000000000000 },
- { 3490463276000.5425, 20, -1.9000000000000004 },
- { 1277254793997.1128, 20, -1.8000000000000007 },
- { -682119355279.28784, 20, -1.6999999999999993 },
- { -1851544254412.3203, 20, -1.5999999999999996 },
- { -2085387081039.0000, 20, -1.5000000000000000 },
- { -1559402933581.5054, 20, -1.4000000000000004 },
- { -634265763221.87231, 20, -1.3000000000000007 },
- { 295481874887.33429, 20, -1.1999999999999993 },
- { 924603483429.34241, 20, -1.0999999999999996 },
- { 1107214478336.0000, 20, -1.0000000000000000 },
- { 867235623835.12463, 20, -0.90000000000000036 },
- { 358848462745.15466, 20, -0.80000000000000071 },
- { -202944086511.71936, 20, -0.69999999999999929 },
- { -617730863561.32617, 20, -0.59999999999999964 },
- { -759627879679.00000, 20, -0.50000000000000000 },
- { -607451728035.03271, 20, -0.40000000000000036 },
- { -240424854484.42111, 20, -0.30000000000000071 },
- { 195759209122.61337, 20, -0.19999999999999929 },
- { 540334019322.52014, 20, -0.099999999999999645 },
- { 670442572800.00000, 20, 0.0000000000000000 },
- { 540334019322.52014, 20, 0.099999999999999645 },
- { 195759209122.61337, 20, 0.19999999999999929 },
- { -240424854484.42111, 20, 0.30000000000000071 },
- { -607451728035.03271, 20, 0.40000000000000036 },
- { -759627879679.00000, 20, 0.50000000000000000 },
- { -617730863561.32617, 20, 0.59999999999999964 },
- { -202944086511.71936, 20, 0.69999999999999929 },
- { 358848462745.15466, 20, 0.80000000000000071 },
- { 867235623835.12463, 20, 0.90000000000000036 },
- { 1107214478336.0000, 20, 1.0000000000000000 },
- { 924603483429.34241, 20, 1.0999999999999996 },
- { 295481874887.33429, 20, 1.1999999999999993 },
- { -634265763221.87231, 20, 1.3000000000000007 },
- { -1559402933581.5054, 20, 1.4000000000000004 },
- { -2085387081039.0000, 20, 1.5000000000000000 },
- { -1851544254412.3203, 20, 1.5999999999999996 },
- { -682119355279.28784, 20, 1.6999999999999993 },
- { 1277254793997.1128, 20, 1.8000000000000007 },
- { 3490463276000.5425, 20, 1.9000000000000004 },
- { 5080118660096.0000, 20, 2.0000000000000000 },
- { 5027779307352.6660, 20, 2.0999999999999996 },
- { 2521759315047.8770, 20, 2.1999999999999993 },
- { -2602375356373.2969, 20, 2.3000000000000007 },
- { -9442592050214.3027, 20, 2.4000000000000004 },
- { -15799429886575.000, 20, 2.5000000000000000 },
- { -18328180426561.059, 20, 2.5999999999999996 },
- { -13249381789941.586, 20, 2.6999999999999993 },
- { 2296898915036.2812, 20, 2.8000000000000007 },
- { 28343496696718.070, 20, 2.9000000000000004 },
- { 59990281399296.000, 20, 3.0000000000000000 },
- { 85786202388511.375, 20, 3.0999999999999996 },
- { 87626632986465.438, 20, 3.1999999999999993 },
- { 43442261337435.672, 20, 3.3000000000000007 },
- { -66042773886778.938, 20, 3.4000000000000004 },
- { -245659781875039.00, 20, 3.5000000000000000 },
- { -469585152350670.25, 20, 3.5999999999999996 },
- { -663019129550482.25, 20, 3.6999999999999993 },
- { -687467334428203.38, 20, 3.8000000000000007 },
- { -339773491011946.00, 20, 3.9000000000000004 },
- { 619678016654336.00, 20, 4.0000000000000000 },
- { 2389023282480410.0, 20, 4.0999999999999996 },
- { 4973623686173539.0, 20, 4.1999999999999993 },
- { 7940371996960741.0, 20, 4.3000000000000007 },
- { 10070625675125180., 20, 4.4000000000000004 },
- { 8939556693761121.0, 20, 4.5000000000000000 },
- { 519073301695656.00, 20, 4.5999999999999996 },
- { -20974173561009776., 20, 4.6999999999999993 },
- { -62555669197022528., 20, 4.8000000000000007 },
- { -1.3051120203565566e+17, 20, 4.9000000000000004 },
- { -2.2571776716382720e+17, 20, 5.0000000000000000 },
- { -3.3419585613348250e+17, 20, 5.0999999999999996 },
- { -4.0970873501577562e+17, 20, 5.1999999999999993 },
- { -3.4359547179069216e+17, 20, 5.3000000000000007 },
- { 85277679782823936., 20, 5.4000000000000004 },
- { 1.2907686705724293e+18, 20, 5.5000000000000000 },
- { 4.0046403628787825e+18, 20, 5.5999999999999996 },
- { 9.4673798488532767e+18, 20, 5.6999999999999993 },
- { 1.9713403927925973e+19, 20, 5.8000000000000007 },
- { 3.7990093270095905e+19, 20, 5.9000000000000004 },
- { 6.9364200641629315e+19, 20, 6.0000000000000000 },
- { 1.2158762212269156e+20, 20, 6.1000000000000014 },
- { 2.0631845648712086e+20, 20, 6.1999999999999993 },
- { 3.4082412197533902e+20, 20, 6.3000000000000007 },
- { 5.5033278133787696e+20, 20, 6.3999999999999986 },
- { 8.7124954970091579e+20, 20, 6.5000000000000000 },
- { 1.3555174744148243e+21, 20, 6.6000000000000014 },
- { 2.0764831558419680e+21, 20, 6.6999999999999993 },
- { 3.1367268160419775e+21, 20, 6.8000000000000007 },
- { 4.6784410379527966e+21, 20, 6.8999999999999986 },
- { 6.8970965604502329e+21, 20, 7.0000000000000000 },
- { 1.0059323685871368e+22, 20, 7.1000000000000014 },
- { 1.4526171451238465e+22, 20, 7.1999999999999993 },
- { 2.0783192485964666e+22, 20, 7.3000000000000007 },
- { 2.9479149729249048e+22, 20, 7.3999999999999986 },
- { 4.1475563998692745e+22, 20, 7.5000000000000000 },
- { 5.7909832934009378e+22, 20, 7.6000000000000014 },
- { 8.0275268594719286e+22, 20, 7.6999999999999993 },
- { 1.1052214218386286e+23, 20, 7.8000000000000007 },
- { 1.5118471231121604e+23, 20, 7.8999999999999986 },
- { 2.0554027373991249e+23, 20, 8.0000000000000000 },
- { 2.7780752653950703e+23, 20, 8.1000000000000014 },
- { 3.7339306542317994e+23, 20, 8.1999999999999993 },
- { 4.9919656538201190e+23, 20, 8.3000000000000007 },
- { 6.6398733801205790e+23, 20, 8.3999999999999986 },
- { 8.7886740525023878e+23, 20, 8.5000000000000000 },
- { 1.1578391431515869e+24, 20, 8.6000000000000014 },
- { 1.5184989558235974e+24, 20, 8.6999999999999993 },
- { 1.9828824261062853e+24, 20, 8.8000000000000007 },
- { 2.5784910430831355e+24, 20, 8.8999999999999986 },
- { 3.3395360269524137e+24, 20, 9.0000000000000000 },
- { 4.3084410724036123e+24, 20, 9.1000000000000014 },
- { 5.5376531405202033e+24, 20, 9.1999999999999993 },
- { 7.0918188910312152e+24, 20, 9.3000000000000007 },
- { 9.0503941245991197e+24, 20, 9.3999999999999986 },
- { 1.1510764882450827e+25, 20, 9.5000000000000000 },
- { 1.4591971834545491e+25, 20, 9.6000000000000014 },
- { 1.8439144509496016e+25, 20, 9.6999999999999993 },
- { 2.3228769039548404e+25, 20, 9.8000000000000007 },
- { 2.9174932703098731e+25, 20, 9.8999999999999986 },
- { 3.6536710970888030e+25, 20, 10.000000000000000 },
+ { 3.6536710970888030e+25, 20, -10.000000000000000, 0.0 },
+ { 2.9174932703098834e+25, 20, -9.9000000000000004, 0.0 },
+ { 2.3228769039548404e+25, 20, -9.8000000000000007, 0.0 },
+ { 1.8439144509496016e+25, 20, -9.6999999999999993, 0.0 },
+ { 1.4591971834545420e+25, 20, -9.5999999999999996, 0.0 },
+ { 1.1510764882450827e+25, 20, -9.5000000000000000, 0.0 },
+ { 9.0503941245991605e+24, 20, -9.4000000000000004, 0.0 },
+ { 7.0918188910312152e+24, 20, -9.3000000000000007, 0.0 },
+ { 5.5376531405202033e+24, 20, -9.1999999999999993, 0.0 },
+ { 4.3084410724035914e+24, 20, -9.0999999999999996, 0.0 },
+ { 3.3395360269524137e+24, 20, -9.0000000000000000, 0.0 },
+ { 2.5784910430831484e+24, 20, -8.9000000000000004, 0.0 },
+ { 1.9828824261062853e+24, 20, -8.8000000000000007, 0.0 },
+ { 1.5184989558235974e+24, 20, -8.6999999999999993, 0.0 },
+ { 1.1578391431515818e+24, 20, -8.5999999999999996, 0.0 },
+ { 8.7886740525023878e+23, 20, -8.5000000000000000, 0.0 },
+ { 6.6398733801206072e+23, 20, -8.4000000000000004, 0.0 },
+ { 4.9919656538201190e+23, 20, -8.3000000000000007, 0.0 },
+ { 3.7339306542317994e+23, 20, -8.1999999999999993, 0.0 },
+ { 2.7780752653950559e+23, 20, -8.0999999999999996, 0.0 },
+ { 2.0554027373991249e+23, 20, -8.0000000000000000, 0.0 },
+ { 1.5118471231121695e+23, 20, -7.9000000000000004, 0.0 },
+ { 1.1052214218386250e+23, 20, -7.7999999999999998, 0.0 },
+ { 8.0275268594719286e+22, 20, -7.6999999999999993, 0.0 },
+ { 5.7909832934009042e+22, 20, -7.5999999999999996, 0.0 },
+ { 4.1475563998692745e+22, 20, -7.5000000000000000, 0.0 },
+ { 2.9479149729249250e+22, 20, -7.4000000000000004, 0.0 },
+ { 2.0783192485964573e+22, 20, -7.2999999999999998, 0.0 },
+ { 1.4526171451238465e+22, 20, -7.1999999999999993, 0.0 },
+ { 1.0059323685871305e+22, 20, -7.0999999999999996, 0.0 },
+ { 6.8970965604502329e+21, 20, -7.0000000000000000, 0.0 },
+ { 4.6784410379528280e+21, 20, -6.9000000000000004, 0.0 },
+ { 3.1367268160419670e+21, 20, -6.7999999999999998, 0.0 },
+ { 2.0764831558419680e+21, 20, -6.6999999999999993, 0.0 },
+ { 1.3555174744148132e+21, 20, -6.5999999999999996, 0.0 },
+ { 8.7124954970091579e+20, 20, -6.5000000000000000, 0.0 },
+ { 5.5033278133788108e+20, 20, -6.4000000000000004, 0.0 },
+ { 3.4082412197533739e+20, 20, -6.2999999999999998, 0.0 },
+ { 2.0631845648712086e+20, 20, -6.1999999999999993, 0.0 },
+ { 1.2158762212269028e+20, 20, -6.0999999999999996, 0.0 },
+ { 6.9364200641629315e+19, 20, -6.0000000000000000, 0.0 },
+ { 3.7990093270095700e+19, 20, -5.8999999999999995, 0.0 },
+ { 1.9713403927925858e+19, 20, -5.7999999999999998, 0.0 },
+ { 9.4673798488533340e+18, 20, -5.7000000000000002, 0.0 },
+ { 4.0046403628787825e+18, 20, -5.5999999999999996, 0.0 },
+ { 1.2907686705724293e+18, 20, -5.5000000000000000, 0.0 },
+ { 85277679782819584., 20, -5.3999999999999995, 0.0 },
+ { -3.4359547179069376e+17, 20, -5.2999999999999998, 0.0 },
+ { -4.0970873501577562e+17, 20, -5.1999999999999993, 0.0 },
+ { -3.3419585613348250e+17, 20, -5.0999999999999996, 0.0 },
+ { -2.2571776716382720e+17, 20, -5.0000000000000000, 0.0 },
+ { -1.3051120203565493e+17, 20, -4.8999999999999995, 0.0 },
+ { -62555669197021992., 20, -4.7999999999999998, 0.0 },
+ { -20974173561009776., 20, -4.6999999999999993, 0.0 },
+ { 519073301695656.00, 20, -4.5999999999999996, 0.0 },
+ { 8939556693761121.0, 20, -4.5000000000000000, 0.0 },
+ { 10070625675125174., 20, -4.3999999999999995, 0.0 },
+ { 7940371996960715.0, 20, -4.2999999999999998, 0.0 },
+ { 4973623686173539.0, 20, -4.1999999999999993, 0.0 },
+ { 2389023282480410.0, 20, -4.0999999999999996, 0.0 },
+ { 619678016654336.00, 20, -4.0000000000000000, 0.0 },
+ { -339773491011950.50, 20, -3.8999999999999995, 0.0 },
+ { -687467334428204.38, 20, -3.7999999999999998, 0.0 },
+ { -663019129550482.25, 20, -3.6999999999999993, 0.0 },
+ { -469585152350670.25, 20, -3.5999999999999996, 0.0 },
+ { -245659781875039.00, 20, -3.5000000000000000, 0.0 },
+ { -66042773886777.562, 20, -3.3999999999999995, 0.0 },
+ { 43442261337436.312, 20, -3.2999999999999998, 0.0 },
+ { 87626632986465.438, 20, -3.1999999999999993, 0.0 },
+ { 85786202388511.375, 20, -3.0999999999999996, 0.0 },
+ { 59990281399296.000, 20, -3.0000000000000000, 0.0 },
+ { 28343496696717.773, 20, -2.8999999999999995, 0.0 },
+ { 2296898915036.0859, 20, -2.7999999999999998, 0.0 },
+ { -13249381789941.586, 20, -2.6999999999999993, 0.0 },
+ { -18328180426561.059, 20, -2.5999999999999996, 0.0 },
+ { -15799429886575.000, 20, -2.5000000000000000, 0.0 },
+ { -9442592050214.2422, 20, -2.3999999999999995, 0.0 },
+ { -2602375356373.2393, 20, -2.2999999999999998, 0.0 },
+ { 2521759315047.8770, 20, -2.1999999999999993, 0.0 },
+ { 5027779307352.6660, 20, -2.0999999999999996, 0.0 },
+ { 5080118660096.0000, 20, -2.0000000000000000, 0.0 },
+ { 3490463276000.5425, 20, -1.9000000000000004, 0.0 },
+ { 1277254793997.0737, 20, -1.7999999999999989, 0.0 },
+ { -682119355279.28784, 20, -1.6999999999999993, 0.0 },
+ { -1851544254412.3203, 20, -1.5999999999999996, 0.0 },
+ { -2085387081039.0000, 20, -1.5000000000000000, 0.0 },
+ { -1559402933581.5054, 20, -1.4000000000000004, 0.0 },
+ { -634265763221.85437, 20, -1.2999999999999989, 0.0 },
+ { 295481874887.33429, 20, -1.1999999999999993, 0.0 },
+ { 924603483429.34241, 20, -1.0999999999999996, 0.0 },
+ { 1107214478336.0000, 20, -1.0000000000000000, 0.0 },
+ { 867235623835.12463, 20, -0.90000000000000036, 0.0 },
+ { 358848462745.14441, 20, -0.79999999999999893, 0.0 },
+ { -202944086511.71936, 20, -0.69999999999999929, 0.0 },
+ { -617730863561.32617, 20, -0.59999999999999964, 0.0 },
+ { -759627879679.00000, 20, -0.50000000000000000, 0.0 },
+ { -607451728035.02795, 20, -0.39999999999999858, 0.0 },
+ { -240424854484.41342, 20, -0.29999999999999893, 0.0 },
+ { 195759209122.61337, 20, -0.19999999999999929, 0.0 },
+ { 540334019322.52014, 20, -0.099999999999999645, 0.0 },
+ { 670442572800.00000, 20, 0.0000000000000000, 0.0 },
+ { 540334019322.51575, 20, 0.10000000000000142, 0.0 },
+ { 195759209122.60626, 20, 0.20000000000000107, 0.0 },
+ { -240424854484.42111, 20, 0.30000000000000071, 0.0 },
+ { -607451728035.03271, 20, 0.40000000000000036, 0.0 },
+ { -759627879679.00000, 20, 0.50000000000000000, 0.0 },
+ { -617730863561.32117, 20, 0.60000000000000142, 0.0 },
+ { -202944086511.71027, 20, 0.70000000000000107, 0.0 },
+ { 358848462745.15466, 20, 0.80000000000000071, 0.0 },
+ { 867235623835.12463, 20, 0.90000000000000036, 0.0 },
+ { 1107214478336.0000, 20, 1.0000000000000000, 0.0 },
+ { 924603483429.33521, 20, 1.1000000000000014, 0.0 },
+ { 295481874887.31995, 20, 1.2000000000000011, 0.0 },
+ { -634265763221.87231, 20, 1.3000000000000007, 0.0 },
+ { -1559402933581.5054, 20, 1.4000000000000004, 0.0 },
+ { -2085387081039.0000, 20, 1.5000000000000000, 0.0 },
+ { -1851544254412.3086, 20, 1.6000000000000014, 0.0 },
+ { -682119355279.25952, 20, 1.7000000000000011, 0.0 },
+ { 1277254793997.1128, 20, 1.8000000000000007, 0.0 },
+ { 3490463276000.5425, 20, 1.9000000000000004, 0.0 },
+ { 5080118660096.0000, 20, 2.0000000000000000, 0.0 },
+ { 5027779307352.6436, 20, 2.1000000000000014, 0.0 },
+ { 2521759315047.8071, 20, 2.2000000000000011, 0.0 },
+ { -2602375356373.2969, 20, 2.3000000000000007, 0.0 },
+ { -9442592050214.3027, 20, 2.4000000000000004, 0.0 },
+ { -15799429886575.000, 20, 2.5000000000000000, 0.0 },
+ { -18328180426561.039, 20, 2.6000000000000014, 0.0 },
+ { -13249381789941.420, 20, 2.7000000000000011, 0.0 },
+ { 2296898915036.2812, 20, 2.8000000000000007, 0.0 },
+ { 28343496696718.070, 20, 2.9000000000000004, 0.0 },
+ { 59990281399296.000, 20, 3.0000000000000000, 0.0 },
+ { 85786202388511.641, 20, 3.1000000000000014, 0.0 },
+ { 87626632986465.219, 20, 3.2000000000000011, 0.0 },
+ { 43442261337435.672, 20, 3.3000000000000007, 0.0 },
+ { -66042773886778.938, 20, 3.4000000000000004, 0.0 },
+ { -245659781875039.00, 20, 3.5000000000000000, 0.0 },
+ { -469585152350674.31, 20, 3.6000000000000014, 0.0 },
+ { -663019129550484.62, 20, 3.7000000000000011, 0.0 },
+ { -687467334428203.38, 20, 3.8000000000000007, 0.0 },
+ { -339773491011946.00, 20, 3.9000000000000004, 0.0 },
+ { 619678016654336.00, 20, 4.0000000000000000, 0.0 },
+ { 2389023282480449.0, 20, 4.1000000000000014, 0.0 },
+ { 4973623686173592.0, 20, 4.2000000000000011, 0.0 },
+ { 7940371996960741.0, 20, 4.3000000000000007, 0.0 },
+ { 10070625675125180., 20, 4.4000000000000004, 0.0 },
+ { 8939556693761121.0, 20, 4.5000000000000000, 0.0 },
+ { 519073301695404.00, 20, 4.6000000000000014, 0.0 },
+ { -20974173561010304., 20, 4.7000000000000011, 0.0 },
+ { -62555669197022528., 20, 4.8000000000000007, 0.0 },
+ { -1.3051120203565566e+17, 20, 4.9000000000000004, 0.0 },
+ { -2.2571776716382720e+17, 20, 5.0000000000000000, 0.0 },
+ { -3.3419585613348416e+17, 20, 5.1000000000000014, 0.0 },
+ { -4.0970873501577613e+17, 20, 5.2000000000000011, 0.0 },
+ { -3.4359547179069216e+17, 20, 5.3000000000000007, 0.0 },
+ { 85277679782823936., 20, 5.4000000000000004, 0.0 },
+ { 1.2907686705724293e+18, 20, 5.5000000000000000, 0.0 },
+ { 4.0046403628788460e+18, 20, 5.6000000000000014, 0.0 },
+ { 9.4673798488534159e+18, 20, 5.7000000000000011, 0.0 },
+ { 1.9713403927925973e+19, 20, 5.8000000000000007, 0.0 },
+ { 3.7990093270095905e+19, 20, 5.9000000000000004, 0.0 },
+ { 6.9364200641629315e+19, 20, 6.0000000000000000, 0.0 },
+ { 1.2158762212269156e+20, 20, 6.1000000000000014, 0.0 },
+ { 2.0631845648712086e+20, 20, 6.1999999999999993, 0.0 },
+ { 3.4082412197533902e+20, 20, 6.3000000000000007, 0.0 },
+ { 5.5033278133788620e+20, 20, 6.4000000000000021, 0.0 },
+ { 8.7124954970091579e+20, 20, 6.5000000000000000, 0.0 },
+ { 1.3555174744148243e+21, 20, 6.6000000000000014, 0.0 },
+ { 2.0764831558419680e+21, 20, 6.6999999999999993, 0.0 },
+ { 3.1367268160419775e+21, 20, 6.8000000000000007, 0.0 },
+ { 4.6784410379528606e+21, 20, 6.9000000000000021, 0.0 },
+ { 6.8970965604502329e+21, 20, 7.0000000000000000, 0.0 },
+ { 1.0059323685871368e+22, 20, 7.1000000000000014, 0.0 },
+ { 1.4526171451238465e+22, 20, 7.1999999999999993, 0.0 },
+ { 2.0783192485964666e+22, 20, 7.3000000000000007, 0.0 },
+ { 2.9479149729249434e+22, 20, 7.4000000000000021, 0.0 },
+ { 4.1475563998692745e+22, 20, 7.5000000000000000, 0.0 },
+ { 5.7909832934009378e+22, 20, 7.6000000000000014, 0.0 },
+ { 8.0275268594719286e+22, 20, 7.6999999999999993, 0.0 },
+ { 1.1052214218386286e+23, 20, 7.8000000000000007, 0.0 },
+ { 1.5118471231121759e+23, 20, 7.9000000000000021, 0.0 },
+ { 2.0554027373991249e+23, 20, 8.0000000000000000, 0.0 },
+ { 2.7780752653950703e+23, 20, 8.1000000000000014, 0.0 },
+ { 3.7339306542317994e+23, 20, 8.1999999999999993, 0.0 },
+ { 4.9919656538201190e+23, 20, 8.3000000000000007, 0.0 },
+ { 6.6398733801206421e+23, 20, 8.4000000000000021, 0.0 },
+ { 8.7886740525023878e+23, 20, 8.5000000000000000, 0.0 },
+ { 1.1578391431515869e+24, 20, 8.6000000000000014, 0.0 },
+ { 1.5184989558235974e+24, 20, 8.6999999999999993, 0.0 },
+ { 1.9828824261062853e+24, 20, 8.8000000000000007, 0.0 },
+ { 2.5784910430831597e+24, 20, 8.9000000000000021, 0.0 },
+ { 3.3395360269524137e+24, 20, 9.0000000000000000, 0.0 },
+ { 4.3084410724036123e+24, 20, 9.1000000000000014, 0.0 },
+ { 5.5376531405202538e+24, 20, 9.2000000000000028, 0.0 },
+ { 7.0918188910312152e+24, 20, 9.3000000000000007, 0.0 },
+ { 9.0503941245991948e+24, 20, 9.4000000000000021, 0.0 },
+ { 1.1510764882450827e+25, 20, 9.5000000000000000, 0.0 },
+ { 1.4591971834545491e+25, 20, 9.6000000000000014, 0.0 },
+ { 1.8439144509496166e+25, 20, 9.7000000000000028, 0.0 },
+ { 2.3228769039548404e+25, 20, 9.8000000000000007, 0.0 },
+ { 2.9174932703098967e+25, 20, 9.9000000000000021, 0.0 },
+ { 3.6536710970888030e+25, 20, 10.000000000000000, 0.0 },
};
const double toler006 = 2.5000000000000020e-13;
// Test data for n=50.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data007[201] =
{
- { 1.3516643049819314e+61, 50, -10.000000000000000 },
- { 5.8466703062266110e+60, 50, -9.9000000000000004 },
- { 2.4344814863741168e+60, 50, -9.8000000000000007 },
- { 9.6739828066585787e+59, 50, -9.6999999999999993 },
- { 3.6194312967780128e+59, 50, -9.5999999999999996 },
- { 1.2454022521696361e+59, 50, -9.5000000000000000 },
- { 3.7546881918013145e+58, 50, -9.4000000000000004 },
- { 8.6500158470917270e+57, 50, -9.3000000000000007 },
- { 5.3163209769527426e+56, 50, -9.1999999999999993 },
- { -9.7863165370930473e+56, 50, -9.0999999999999996 },
- { -8.0563930902368911e+56, 50, -9.0000000000000000 },
- { -4.3145937406321933e+56, 50, -8.9000000000000004 },
- { -1.8210771577645630e+56, 50, -8.8000000000000007 },
- { -6.0082225302289557e+55, 50, -8.6999999999999993 },
- { -1.2392013720948442e+55, 50, -8.5999999999999996 },
- { 1.5935887905806307e+54, 50, -8.5000000000000000 },
- { 3.4325365049909381e+54, 50, -8.4000000000000004 },
- { 2.2368641272300899e+54, 50, -8.3000000000000007 },
- { 1.0009712198862341e+54, 50, -8.1999999999999993 },
- { 3.0699480272357337e+53, 50, -8.0999999999999996 },
- { 2.9492797132685063e+52, 50, -8.0000000000000000 },
- { -3.9982544106300062e+52, 50, -7.9000000000000004 },
- { -3.5678031330023779e+52, 50, -7.7999999999999998 },
- { -1.8076371748762468e+52, 50, -7.7000000000000002 },
- { -5.7887622198708925e+51, 50, -7.5999999999999996 },
- { -3.5808467693113330e+50, 50, -7.5000000000000000 },
- { 1.0219511166806405e+51, 50, -7.4000000000000004 },
- { 8.4241263694549560e+50, 50, -7.2999999999999998 },
- { 3.9143899315095369e+50, 50, -7.2000000000000002 },
- { 9.3178966245756654e+49, 50, -7.0999999999999996 },
- { -2.4714855983436561e+49, 50, -7.0000000000000000 },
- { -4.1428217272044600e+49, 50, -6.9000000000000004 },
- { -2.4864980414057334e+49, 50, -6.7999999999999998 },
- { -8.0684355476447979e+48, 50, -6.7000000000000002 },
- { 4.2529238530179841e+47, 50, -6.5999999999999996 },
- { 2.4709663739849681e+48, 50, -6.5000000000000000 },
- { 1.7500305481204125e+48, 50, -6.4000000000000004 },
- { 6.3834558285146007e+47, 50, -6.2999999999999998 },
- { -1.1477672402381055e+46, 50, -6.2000000000000002 },
- { -1.9304630401841983e+47, 50, -6.0999999999999996 },
- { -1.4355266959903589e+47, 50, -6.0000000000000000 },
- { -5.1482200905566146e+46, 50, -5.9000000000000004 },
- { 4.6577356827463283e+45, 50, -5.7999999999999998 },
- { 1.9676012349652066e+46, 50, -5.7000000000000002 },
- { 1.3630554018675846e+46, 50, -5.5999999999999996 },
- { 4.0920495328093750e+45, 50, -5.5000000000000000 },
- { -1.3680638882145392e+45, 50, -5.4000000000000004 },
- { -2.4465265559935436e+45, 50, -5.2999999999999998 },
- { -1.4270495629649456e+45, 50, -5.2000000000000002 },
- { -2.4845518743338381e+44, 50, -5.0999999999999996 },
- { 3.1953926721271990e+44, 50, -5.0000000000000000 },
- { 3.4169399444879600e+44, 50, -4.9000000000000004 },
- { 1.4896819114978755e+44, 50, -4.7999999999999998 },
- { -1.3078430866968493e+43, 50, -4.7000000000000002 },
- { -6.8449168639700716e+43, 50, -4.5999999999999996 },
- { -4.9181639709997461e+43, 50, -4.5000000000000000 },
- { -1.1434943490345182e+43, 50, -4.4000000000000004 },
- { 1.1214652543461432e+43, 50, -4.2999999999999998 },
- { 1.3843548994480608e+43, 50, -4.2000000000000002 },
- { 6.3349790205303262e+42, 50, -4.0999999999999996 },
- { -9.5599640670553907e+41, 50, -4.0000000000000000 },
- { -3.6202558158287927e+42, 50, -3.9000000000000004 },
- { -2.5206461734624493e+42, 50, -3.7999999999999998 },
- { -3.7818051510732439e+41, 50, -3.7000000000000002 },
- { 8.8921371165335050e+41, 50, -3.5999999999999996 },
- { 9.2055485763852770e+41, 50, -3.5000000000000000 },
- { 3.2535765707283020e+41, 50, -3.4000000000000004 },
- { -1.9358941418244578e+41, 50, -3.2999999999999998 },
- { -3.3076282847915670e+41, 50, -3.2000000000000002 },
- { -1.7764977066639160e+41, 50, -3.0999999999999996 },
- { 2.6751882008697154e+40, 50, -3.0000000000000000 },
- { 1.2025382369996052e+41, 50, -2.9000000000000004 },
- { 8.8383035103557973e+40, 50, -2.7999999999999998 },
- { 7.7733606479641769e+39, 50, -2.7000000000000002 },
- { -4.4696811758713757e+40, 50, -2.5999999999999996 },
- { -4.3715062488963453e+40, 50, -2.5000000000000000 },
- { -1.1390080390575289e+40, 50, -2.4000000000000004 },
- { 1.6938519751181342e+40, 50, -2.2999999999999998 },
- { 2.2284509952956210e+40, 50, -2.2000000000000002 },
- { 9.0967994280570531e+39, 50, -2.0999999999999996 },
- { -6.4126677997472978e+39, 50, -2.0000000000000000 },
- { -1.1926839454034341e+40, 50, -1.9000000000000004 },
- { -6.5436654274699114e+39, 50, -1.8000000000000007 },
- { 2.2779499542550411e+39, 50, -1.6999999999999993 },
- { 6.7720530889699639e+39, 50, -1.5999999999999996 },
- { 4.6884851188034300e+39, 50, -1.5000000000000000 },
- { -5.9005001052557463e+38, 50, -1.4000000000000004 },
- { -4.1028320210430589e+39, 50, -1.3000000000000007 },
- { -3.4780049977083965e+39, 50, -1.1999999999999993 },
- { -1.3484918476373692e+38, 50, -1.0999999999999996 },
- { 2.6586815431645456e+39, 50, -1.0000000000000000 },
- { 2.7225429473661429e+39, 50, -0.90000000000000036 },
- { 4.7785441024951729e+38, 50, -0.80000000000000071 },
- { -1.8416784378790159e+39, 50, -0.69999999999999929 },
- { -2.2725918816693132e+39, 50, -0.59999999999999964 },
- { -6.7948375014926916e+38, 50, -0.50000000000000000 },
- { 1.3581645858905750e+39, 50, -0.40000000000000036 },
- { 2.0349661043040497e+39, 50, -0.30000000000000071 },
- { 8.5049248815817037e+38, 50, -0.19999999999999929 },
- { -1.0564542132990048e+39, 50, -0.099999999999999645 },
- { -1.9607814681608194e+39, 50, 0.0000000000000000 },
- { -1.0564542132990048e+39, 50, 0.099999999999999645 },
- { 8.5049248815817037e+38, 50, 0.19999999999999929 },
- { 2.0349661043040497e+39, 50, 0.30000000000000071 },
- { 1.3581645858905750e+39, 50, 0.40000000000000036 },
- { -6.7948375014926916e+38, 50, 0.50000000000000000 },
- { -2.2725918816693132e+39, 50, 0.59999999999999964 },
- { -1.8416784378790159e+39, 50, 0.69999999999999929 },
- { 4.7785441024951729e+38, 50, 0.80000000000000071 },
- { 2.7225429473661429e+39, 50, 0.90000000000000036 },
- { 2.6586815431645456e+39, 50, 1.0000000000000000 },
- { -1.3484918476373692e+38, 50, 1.0999999999999996 },
- { -3.4780049977083965e+39, 50, 1.1999999999999993 },
- { -4.1028320210430589e+39, 50, 1.3000000000000007 },
- { -5.9005001052557463e+38, 50, 1.4000000000000004 },
- { 4.6884851188034300e+39, 50, 1.5000000000000000 },
- { 6.7720530889699639e+39, 50, 1.5999999999999996 },
- { 2.2779499542550411e+39, 50, 1.6999999999999993 },
- { -6.5436654274699114e+39, 50, 1.8000000000000007 },
- { -1.1926839454034341e+40, 50, 1.9000000000000004 },
- { -6.4126677997472978e+39, 50, 2.0000000000000000 },
- { 9.0967994280570531e+39, 50, 2.0999999999999996 },
- { 2.2284509952956162e+40, 50, 2.1999999999999993 },
- { 1.6938519751181172e+40, 50, 2.3000000000000007 },
- { -1.1390080390575289e+40, 50, 2.4000000000000004 },
- { -4.3715062488963453e+40, 50, 2.5000000000000000 },
- { -4.4696811758713757e+40, 50, 2.5999999999999996 },
- { 7.7733606479635628e+39, 50, 2.6999999999999993 },
- { 8.8383035103558611e+40, 50, 2.8000000000000007 },
- { 1.2025382369996052e+41, 50, 2.9000000000000004 },
- { 2.6751882008697154e+40, 50, 3.0000000000000000 },
- { -1.7764977066639160e+41, 50, 3.0999999999999996 },
- { -3.3076282847915616e+41, 50, 3.1999999999999993 },
- { -1.9358941418244260e+41, 50, 3.3000000000000007 },
- { 3.2535765707283020e+41, 50, 3.4000000000000004 },
- { 9.2055485763852770e+41, 50, 3.5000000000000000 },
- { 8.8921371165335050e+41, 50, 3.5999999999999996 },
- { -3.7818051510730675e+41, 50, 3.6999999999999993 },
- { -2.5206461734624660e+42, 50, 3.8000000000000007 },
- { -3.6202558158287927e+42, 50, 3.9000000000000004 },
- { -9.5599640670553907e+41, 50, 4.0000000000000000 },
- { 6.3349790205303262e+42, 50, 4.0999999999999996 },
- { 1.3843548994480566e+43, 50, 4.1999999999999993 },
- { 1.1214652543461340e+43, 50, 4.3000000000000007 },
- { -1.1434943490345182e+43, 50, 4.4000000000000004 },
- { -4.9181639709997461e+43, 50, 4.5000000000000000 },
- { -6.8449168639700716e+43, 50, 4.5999999999999996 },
- { -1.3078430866969463e+43, 50, 4.6999999999999993 },
- { 1.4896819114978953e+44, 50, 4.8000000000000007 },
- { 3.4169399444879600e+44, 50, 4.9000000000000004 },
- { 3.1953926721271990e+44, 50, 5.0000000000000000 },
- { -2.4845518743338381e+44, 50, 5.0999999999999996 },
- { -1.4270495629649337e+45, 50, 5.1999999999999993 },
- { -2.4465265559935458e+45, 50, 5.3000000000000007 },
- { -1.3680638882145392e+45, 50, 5.4000000000000004 },
- { 4.0920495328093750e+45, 50, 5.5000000000000000 },
- { 1.3630554018675846e+46, 50, 5.5999999999999996 },
- { 1.9676012349652081e+46, 50, 5.6999999999999993 },
- { 4.6577356827460393e+45, 50, 5.8000000000000007 },
- { -5.1482200905566146e+46, 50, 5.9000000000000004 },
- { -1.4355266959903589e+47, 50, 6.0000000000000000 },
- { -1.9304630401841966e+47, 50, 6.1000000000000014 },
- { -1.1477672402384868e+46, 50, 6.1999999999999993 },
- { 6.3834558285146981e+47, 50, 6.3000000000000007 },
- { 1.7500305481203924e+48, 50, 6.3999999999999986 },
- { 2.4709663739849681e+48, 50, 6.5000000000000000 },
- { 4.2529238530171793e+47, 50, 6.6000000000000014 },
- { -8.0684355476446876e+48, 50, 6.6999999999999993 },
- { -2.4864980414057495e+49, 50, 6.8000000000000007 },
- { -4.1428217272044496e+49, 50, 6.8999999999999986 },
- { -2.4714855983436561e+49, 50, 7.0000000000000000 },
- { 9.3178966245760310e+49, 50, 7.1000000000000014 },
- { 3.9143899315095070e+50, 50, 7.1999999999999993 },
- { 8.4241263694549925e+50, 50, 7.3000000000000007 },
- { 1.0219511166806458e+51, 50, 7.3999999999999986 },
- { -3.5808467693113330e+50, 50, 7.5000000000000000 },
- { -5.7887622198710268e+51, 50, 7.6000000000000014 },
- { -1.8076371748762319e+52, 50, 7.6999999999999993 },
- { -3.5678031330023971e+52, 50, 7.8000000000000007 },
- { -3.9982544106300530e+52, 50, 7.8999999999999986 },
- { 2.9492797132685063e+52, 50, 8.0000000000000000 },
- { 3.0699480272358086e+53, 50, 8.1000000000000014 },
- { 1.0009712198862341e+54, 50, 8.1999999999999993 },
- { 2.2368641272300899e+54, 50, 8.3000000000000007 },
- { 3.4325365049909340e+54, 50, 8.3999999999999986 },
- { 1.5935887905806307e+54, 50, 8.5000000000000000 },
- { -1.2392013720948937e+55, 50, 8.6000000000000014 },
- { -6.0082225302289557e+55, 50, 8.6999999999999993 },
- { -1.8210771577645630e+56, 50, 8.8000000000000007 },
- { -4.3145937406321376e+56, 50, 8.8999999999999986 },
- { -8.0563930902368911e+56, 50, 9.0000000000000000 },
- { -9.7863165370930194e+56, 50, 9.1000000000000014 },
- { 5.3163209769527426e+56, 50, 9.1999999999999993 },
- { 8.6500158470917270e+57, 50, 9.3000000000000007 },
- { 3.7546881918012164e+58, 50, 9.3999999999999986 },
- { 1.2454022521696361e+59, 50, 9.5000000000000000 },
- { 3.6194312967780793e+59, 50, 9.6000000000000014 },
- { 9.6739828066585787e+59, 50, 9.6999999999999993 },
- { 2.4344814863741168e+60, 50, 9.8000000000000007 },
- { 5.8466703062265247e+60, 50, 9.8999999999999986 },
- { 1.3516643049819314e+61, 50, 10.000000000000000 },
+ { 1.3516643049819314e+61, 50, -10.000000000000000, 0.0 },
+ { 5.8466703062266110e+60, 50, -9.9000000000000004, 0.0 },
+ { 2.4344814863741168e+60, 50, -9.8000000000000007, 0.0 },
+ { 9.6739828066585787e+59, 50, -9.6999999999999993, 0.0 },
+ { 3.6194312967780128e+59, 50, -9.5999999999999996, 0.0 },
+ { 1.2454022521696361e+59, 50, -9.5000000000000000, 0.0 },
+ { 3.7546881918013145e+58, 50, -9.4000000000000004, 0.0 },
+ { 8.6500158470917270e+57, 50, -9.3000000000000007, 0.0 },
+ { 5.3163209769527426e+56, 50, -9.1999999999999993, 0.0 },
+ { -9.7863165370930473e+56, 50, -9.0999999999999996, 0.0 },
+ { -8.0563930902368911e+56, 50, -9.0000000000000000, 0.0 },
+ { -4.3145937406321933e+56, 50, -8.9000000000000004, 0.0 },
+ { -1.8210771577645630e+56, 50, -8.8000000000000007, 0.0 },
+ { -6.0082225302289557e+55, 50, -8.6999999999999993, 0.0 },
+ { -1.2392013720948442e+55, 50, -8.5999999999999996, 0.0 },
+ { 1.5935887905806307e+54, 50, -8.5000000000000000, 0.0 },
+ { 3.4325365049909381e+54, 50, -8.4000000000000004, 0.0 },
+ { 2.2368641272300899e+54, 50, -8.3000000000000007, 0.0 },
+ { 1.0009712198862341e+54, 50, -8.1999999999999993, 0.0 },
+ { 3.0699480272357337e+53, 50, -8.0999999999999996, 0.0 },
+ { 2.9492797132685063e+52, 50, -8.0000000000000000, 0.0 },
+ { -3.9982544106300062e+52, 50, -7.9000000000000004, 0.0 },
+ { -3.5678031330023779e+52, 50, -7.7999999999999998, 0.0 },
+ { -1.8076371748762319e+52, 50, -7.6999999999999993, 0.0 },
+ { -5.7887622198708925e+51, 50, -7.5999999999999996, 0.0 },
+ { -3.5808467693113330e+50, 50, -7.5000000000000000, 0.0 },
+ { 1.0219511166806405e+51, 50, -7.4000000000000004, 0.0 },
+ { 8.4241263694549560e+50, 50, -7.2999999999999998, 0.0 },
+ { 3.9143899315095070e+50, 50, -7.1999999999999993, 0.0 },
+ { 9.3178966245756654e+49, 50, -7.0999999999999996, 0.0 },
+ { -2.4714855983436561e+49, 50, -7.0000000000000000, 0.0 },
+ { -4.1428217272044600e+49, 50, -6.9000000000000004, 0.0 },
+ { -2.4864980414057334e+49, 50, -6.7999999999999998, 0.0 },
+ { -8.0684355476446876e+48, 50, -6.6999999999999993, 0.0 },
+ { 4.2529238530179841e+47, 50, -6.5999999999999996, 0.0 },
+ { 2.4709663739849681e+48, 50, -6.5000000000000000, 0.0 },
+ { 1.7500305481204125e+48, 50, -6.4000000000000004, 0.0 },
+ { 6.3834558285146007e+47, 50, -6.2999999999999998, 0.0 },
+ { -1.1477672402384868e+46, 50, -6.1999999999999993, 0.0 },
+ { -1.9304630401841983e+47, 50, -6.0999999999999996, 0.0 },
+ { -1.4355266959903589e+47, 50, -6.0000000000000000, 0.0 },
+ { -5.1482200905565497e+46, 50, -5.8999999999999995, 0.0 },
+ { 4.6577356827463283e+45, 50, -5.7999999999999998, 0.0 },
+ { 1.9676012349652066e+46, 50, -5.7000000000000002, 0.0 },
+ { 1.3630554018675846e+46, 50, -5.5999999999999996, 0.0 },
+ { 4.0920495328093750e+45, 50, -5.5000000000000000, 0.0 },
+ { -1.3680638882145570e+45, 50, -5.3999999999999995, 0.0 },
+ { -2.4465265559935436e+45, 50, -5.2999999999999998, 0.0 },
+ { -1.4270495629649337e+45, 50, -5.1999999999999993, 0.0 },
+ { -2.4845518743338381e+44, 50, -5.0999999999999996, 0.0 },
+ { 3.1953926721271990e+44, 50, -5.0000000000000000, 0.0 },
+ { 3.4169399444879477e+44, 50, -4.8999999999999995, 0.0 },
+ { 1.4896819114978755e+44, 50, -4.7999999999999998, 0.0 },
+ { -1.3078430866969463e+43, 50, -4.6999999999999993, 0.0 },
+ { -6.8449168639700716e+43, 50, -4.5999999999999996, 0.0 },
+ { -4.9181639709997461e+43, 50, -4.5000000000000000, 0.0 },
+ { -1.1434943490344838e+43, 50, -4.3999999999999995, 0.0 },
+ { 1.1214652543461432e+43, 50, -4.2999999999999998, 0.0 },
+ { 1.3843548994480566e+43, 50, -4.1999999999999993, 0.0 },
+ { 6.3349790205303262e+42, 50, -4.0999999999999996, 0.0 },
+ { -9.5599640670553907e+41, 50, -4.0000000000000000, 0.0 },
+ { -3.6202558158287989e+42, 50, -3.8999999999999995, 0.0 },
+ { -2.5206461734624493e+42, 50, -3.7999999999999998, 0.0 },
+ { -3.7818051510730675e+41, 50, -3.6999999999999993, 0.0 },
+ { 8.8921371165335050e+41, 50, -3.5999999999999996, 0.0 },
+ { 9.2055485763852770e+41, 50, -3.5000000000000000, 0.0 },
+ { 3.2535765707282432e+41, 50, -3.3999999999999995, 0.0 },
+ { -1.9358941418244578e+41, 50, -3.2999999999999998, 0.0 },
+ { -3.3076282847915616e+41, 50, -3.1999999999999993, 0.0 },
+ { -1.7764977066639160e+41, 50, -3.0999999999999996, 0.0 },
+ { 2.6751882008697154e+40, 50, -3.0000000000000000, 0.0 },
+ { 1.2025382369996071e+41, 50, -2.8999999999999995, 0.0 },
+ { 8.8383035103557973e+40, 50, -2.7999999999999998, 0.0 },
+ { 7.7733606479635628e+39, 50, -2.6999999999999993, 0.0 },
+ { -4.4696811758713757e+40, 50, -2.5999999999999996, 0.0 },
+ { -4.3715062488963453e+40, 50, -2.5000000000000000, 0.0 },
+ { -1.1390080390574979e+40, 50, -2.3999999999999995, 0.0 },
+ { 1.6938519751181342e+40, 50, -2.2999999999999998, 0.0 },
+ { 2.2284509952956162e+40, 50, -2.1999999999999993, 0.0 },
+ { 9.0967994280570531e+39, 50, -2.0999999999999996, 0.0 },
+ { -6.4126677997472978e+39, 50, -2.0000000000000000, 0.0 },
+ { -1.1926839454034341e+40, 50, -1.9000000000000004, 0.0 },
+ { -6.5436654274697603e+39, 50, -1.7999999999999989, 0.0 },
+ { 2.2779499542550411e+39, 50, -1.6999999999999993, 0.0 },
+ { 6.7720530889699639e+39, 50, -1.5999999999999996, 0.0 },
+ { 4.6884851188034300e+39, 50, -1.5000000000000000, 0.0 },
+ { -5.9005001052557463e+38, 50, -1.4000000000000004, 0.0 },
+ { -4.1028320210430837e+39, 50, -1.2999999999999989, 0.0 },
+ { -3.4780049977083965e+39, 50, -1.1999999999999993, 0.0 },
+ { -1.3484918476373692e+38, 50, -1.0999999999999996, 0.0 },
+ { 2.6586815431645456e+39, 50, -1.0000000000000000, 0.0 },
+ { 2.7225429473661429e+39, 50, -0.90000000000000036, 0.0 },
+ { 4.7785441024946841e+38, 50, -0.79999999999999893, 0.0 },
+ { -1.8416784378790159e+39, 50, -0.69999999999999929, 0.0 },
+ { -2.2725918816693132e+39, 50, -0.59999999999999964, 0.0 },
+ { -6.7948375014926916e+38, 50, -0.50000000000000000, 0.0 },
+ { 1.3581645858906036e+39, 50, -0.39999999999999858, 0.0 },
+ { 2.0349661043040443e+39, 50, -0.29999999999999893, 0.0 },
+ { 8.5049248815817037e+38, 50, -0.19999999999999929, 0.0 },
+ { -1.0564542132990048e+39, 50, -0.099999999999999645, 0.0 },
+ { -1.9607814681608194e+39, 50, 0.0000000000000000, 0.0 },
+ { -1.0564542132989758e+39, 50, 0.10000000000000142, 0.0 },
+ { 8.5049248815820240e+38, 50, 0.20000000000000107, 0.0 },
+ { 2.0349661043040497e+39, 50, 0.30000000000000071, 0.0 },
+ { 1.3581645858905750e+39, 50, 0.40000000000000036, 0.0 },
+ { -6.7948375014926916e+38, 50, 0.50000000000000000, 0.0 },
+ { -2.2725918816693268e+39, 50, 0.60000000000000142, 0.0 },
+ { -1.8416784378789875e+39, 50, 0.70000000000000107, 0.0 },
+ { 4.7785441024951729e+38, 50, 0.80000000000000071, 0.0 },
+ { 2.7225429473661429e+39, 50, 0.90000000000000036, 0.0 },
+ { 2.6586815431645456e+39, 50, 1.0000000000000000, 0.0 },
+ { -1.3484918476380069e+38, 50, 1.1000000000000014, 0.0 },
+ { -3.4780049977084394e+39, 50, 1.2000000000000011, 0.0 },
+ { -4.1028320210430589e+39, 50, 1.3000000000000007, 0.0 },
+ { -5.9005001052557463e+38, 50, 1.4000000000000004, 0.0 },
+ { 4.6884851188034300e+39, 50, 1.5000000000000000, 0.0 },
+ { 6.7720530889699470e+39, 50, 1.6000000000000014, 0.0 },
+ { 2.2779499542549072e+39, 50, 1.7000000000000011, 0.0 },
+ { -6.5436654274699114e+39, 50, 1.8000000000000007, 0.0 },
+ { -1.1926839454034341e+40, 50, 1.9000000000000004, 0.0 },
+ { -6.4126677997472978e+39, 50, 2.0000000000000000, 0.0 },
+ { 9.0967994280573626e+39, 50, 2.1000000000000014, 0.0 },
+ { 2.2284509952956273e+40, 50, 2.2000000000000011, 0.0 },
+ { 1.6938519751181172e+40, 50, 2.3000000000000007, 0.0 },
+ { -1.1390080390575289e+40, 50, 2.4000000000000004, 0.0 },
+ { -4.3715062488963453e+40, 50, 2.5000000000000000, 0.0 },
+ { -4.4696811758713303e+40, 50, 2.6000000000000014, 0.0 },
+ { 7.7733606479648733e+39, 50, 2.7000000000000011, 0.0 },
+ { 8.8383035103558611e+40, 50, 2.8000000000000007, 0.0 },
+ { 1.2025382369996052e+41, 50, 2.9000000000000004, 0.0 },
+ { 2.6751882008697154e+40, 50, 3.0000000000000000, 0.0 },
+ { -1.7764977066639554e+41, 50, 3.1000000000000014, 0.0 },
+ { -3.3076282847915716e+41, 50, 3.2000000000000011, 0.0 },
+ { -1.9358941418244260e+41, 50, 3.3000000000000007, 0.0 },
+ { 3.2535765707283020e+41, 50, 3.4000000000000004, 0.0 },
+ { 9.2055485763852770e+41, 50, 3.5000000000000000, 0.0 },
+ { 8.8921371165333905e+41, 50, 3.6000000000000014, 0.0 },
+ { -3.7818051510734018e+41, 50, 3.7000000000000011, 0.0 },
+ { -2.5206461734624660e+42, 50, 3.8000000000000007, 0.0 },
+ { -3.6202558158287927e+42, 50, 3.9000000000000004, 0.0 },
+ { -9.5599640670553907e+41, 50, 4.0000000000000000, 0.0 },
+ { 6.3349790205304773e+42, 50, 4.1000000000000014, 0.0 },
+ { 1.3843548994480653e+43, 50, 4.2000000000000011, 0.0 },
+ { 1.1214652543461340e+43, 50, 4.3000000000000007, 0.0 },
+ { -1.1434943490345182e+43, 50, 4.4000000000000004, 0.0 },
+ { -4.9181639709997461e+43, 50, 4.5000000000000000, 0.0 },
+ { -6.8449168639700617e+43, 50, 4.6000000000000014, 0.0 },
+ { -1.3078430866967542e+43, 50, 4.7000000000000011, 0.0 },
+ { 1.4896819114978953e+44, 50, 4.8000000000000007, 0.0 },
+ { 3.4169399444879600e+44, 50, 4.9000000000000004, 0.0 },
+ { 3.1953926721271990e+44, 50, 5.0000000000000000, 0.0 },
+ { -2.4845518743340037e+44, 50, 5.1000000000000014, 0.0 },
+ { -1.4270495629649556e+45, 50, 5.2000000000000011, 0.0 },
+ { -2.4465265559935458e+45, 50, 5.3000000000000007, 0.0 },
+ { -1.3680638882145392e+45, 50, 5.4000000000000004, 0.0 },
+ { 4.0920495328093750e+45, 50, 5.5000000000000000, 0.0 },
+ { 1.3630554018676023e+46, 50, 5.6000000000000014, 0.0 },
+ { 1.9676012349652035e+46, 50, 5.7000000000000011, 0.0 },
+ { 4.6577356827460393e+45, 50, 5.8000000000000007, 0.0 },
+ { -5.1482200905566146e+46, 50, 5.9000000000000004, 0.0 },
+ { -1.4355266959903589e+47, 50, 6.0000000000000000, 0.0 },
+ { -1.9304630401841966e+47, 50, 6.1000000000000014, 0.0 },
+ { -1.1477672402384868e+46, 50, 6.1999999999999993, 0.0 },
+ { 6.3834558285146981e+47, 50, 6.3000000000000007, 0.0 },
+ { 1.7500305481204346e+48, 50, 6.4000000000000021, 0.0 },
+ { 2.4709663739849681e+48, 50, 6.5000000000000000, 0.0 },
+ { 4.2529238530171793e+47, 50, 6.6000000000000014, 0.0 },
+ { -8.0684355476446876e+48, 50, 6.6999999999999993, 0.0 },
+ { -2.4864980414057495e+49, 50, 6.8000000000000007, 0.0 },
+ { -4.1428217272044745e+49, 50, 6.9000000000000021, 0.0 },
+ { -2.4714855983436561e+49, 50, 7.0000000000000000, 0.0 },
+ { 9.3178966245760310e+49, 50, 7.1000000000000014, 0.0 },
+ { 3.9143899315095070e+50, 50, 7.1999999999999993, 0.0 },
+ { 8.4241263694549925e+50, 50, 7.3000000000000007, 0.0 },
+ { 1.0219511166806373e+51, 50, 7.4000000000000021, 0.0 },
+ { -3.5808467693113330e+50, 50, 7.5000000000000000, 0.0 },
+ { -5.7887622198710268e+51, 50, 7.6000000000000014, 0.0 },
+ { -1.8076371748762319e+52, 50, 7.6999999999999993, 0.0 },
+ { -3.5678031330023971e+52, 50, 7.8000000000000007, 0.0 },
+ { -3.9982544106299987e+52, 50, 7.9000000000000021, 0.0 },
+ { 2.9492797132685063e+52, 50, 8.0000000000000000, 0.0 },
+ { 3.0699480272358086e+53, 50, 8.1000000000000014, 0.0 },
+ { 1.0009712198862341e+54, 50, 8.1999999999999993, 0.0 },
+ { 2.2368641272300899e+54, 50, 8.3000000000000007, 0.0 },
+ { 3.4325365049909476e+54, 50, 8.4000000000000021, 0.0 },
+ { 1.5935887905806307e+54, 50, 8.5000000000000000, 0.0 },
+ { -1.2392013720948937e+55, 50, 8.6000000000000014, 0.0 },
+ { -6.0082225302289557e+55, 50, 8.6999999999999993, 0.0 },
+ { -1.8210771577645630e+56, 50, 8.8000000000000007, 0.0 },
+ { -4.3145937406322482e+56, 50, 8.9000000000000021, 0.0 },
+ { -8.0563930902368911e+56, 50, 9.0000000000000000, 0.0 },
+ { -9.7863165370930194e+56, 50, 9.1000000000000014, 0.0 },
+ { 5.3163209769540389e+56, 50, 9.2000000000000028, 0.0 },
+ { 8.6500158470917270e+57, 50, 9.3000000000000007, 0.0 },
+ { 3.7546881918013903e+58, 50, 9.4000000000000021, 0.0 },
+ { 1.2454022521696361e+59, 50, 9.5000000000000000, 0.0 },
+ { 3.6194312967780793e+59, 50, 9.6000000000000014, 0.0 },
+ { 9.6739828066589016e+59, 50, 9.7000000000000028, 0.0 },
+ { 2.4344814863741168e+60, 50, 9.8000000000000007, 0.0 },
+ { 5.8466703062266974e+60, 50, 9.9000000000000021, 0.0 },
+ { 1.3516643049819314e+61, 50, 10.000000000000000, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
// Test data for n=100.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_hermite<double>
data008[201] =
{
- { -1.8738689223256612e+115, 100, -10.000000000000000 },
- { -4.4232904120311186e+114, 100, -9.9000000000000004 },
- { 8.3761676654305186e+113, 100, -9.8000000000000007 },
- { 9.4857435427570856e+113, 100, -9.6999999999999993 },
- { 2.4904626130429828e+113, 100, -9.5999999999999996 },
- { -4.2265051766934789e+112, 100, -9.5000000000000000 },
- { -5.3374224541142079e+112, 100, -9.4000000000000004 },
- { -1.3977488190034162e+112, 100, -9.3000000000000007 },
- { 2.9686037583393142e+111, 100, -9.1999999999999993 },
- { 3.3341330166544008e+111, 100, -9.0999999999999996 },
- { 7.7294136683043515e+110, 100, -9.0000000000000000 },
- { -2.6071876743328352e+110, 100, -8.9000000000000004 },
- { -2.2669773300293168e+110, 100, -8.8000000000000007 },
- { -3.8930624477368766e+109, 100, -8.6999999999999993 },
- { 2.5386102824684956e+109, 100, -8.5999999999999996 },
- { 1.6203702280499544e+109, 100, -8.5000000000000000 },
- { 1.2481735250539652e+108, 100, -8.4000000000000004 },
- { -2.5611278359589723e+108, 100, -8.3000000000000007 },
- { -1.1534178973583771e+108, 100, -8.1999999999999993 },
- { 8.4932594446954126e+106, 100, -8.0999999999999996 },
- { 2.5761505535443451e+107, 100, -8.0000000000000000 },
- { 7.3445622927437730e+106, 100, -7.9000000000000004 },
- { -2.7252309851017323e+106, 100, -7.7999999999999998 },
- { -2.4850432648124068e+106, 100, -7.7000000000000002 },
- { -2.7486638813238851e+105, 100, -7.5999999999999996 },
- { 4.4772364475394960e+105, 100, -7.5000000000000000 },
- { 2.1375121759800508e+105, 100, -7.4000000000000004 },
- { -2.9237691057265876e+104, 100, -7.2999999999999998 },
- { -5.9348804074874781e+104, 100, -7.2000000000000002 },
- { -1.2947583568692734e+104, 100, -7.0999999999999996 },
- { 1.0002273523275075e+104, 100, -7.0000000000000000 },
- { 6.4900499886057735e+103, 100, -6.9000000000000004 },
- { -3.7817730019124298e+102, 100, -6.7999999999999998 },
- { -1.7849709684883137e+103, 100, -6.7000000000000002 },
- { -4.8039047085580619e+102, 100, -6.5999999999999996 },
- { 3.2072472002047670e+102, 100, -6.5000000000000000 },
- { 2.3341289432999226e+102, 100, -6.4000000000000004 },
- { -1.4587350659146165e+101, 100, -6.2999999999999998 },
- { -7.0672139150705532e+101, 100, -6.2000000000000002 },
- { -1.8039133351601998e+101, 100, -6.0999999999999996 },
- { 1.5170693933260738e+101, 100, -6.0000000000000000 },
- { 1.0141407690966954e+101, 100, -5.9000000000000004 },
- { -1.5140717605507886e+100, 100, -5.7999999999999998 },
- { -3.6379102593330533e+100, 100, -5.7000000000000002 },
- { -6.2933057672779134e+99, 100, -5.5999999999999996 },
- { 9.9309186425970402e+99, 100, -5.5000000000000000 },
- { 5.0935670879056567e+99, 100, -5.4000000000000004 },
- { -1.8337906983006129e+99, 100, -5.2999999999999998 },
- { -2.3096466887887402e+99, 100, -5.2000000000000002 },
- { -4.0259235416602546e+97, 100, -5.0999999999999996 },
- { 8.1931937130591466e+98, 100, -5.0000000000000000 },
- { 2.5601172475776894e+98, 100, -4.9000000000000004 },
- { -2.3193021196802698e+98, 100, -4.7999999999999998 },
- { -1.6545238014142802e+98, 100, -4.7000000000000002 },
- { 4.2440218943299170e+97, 100, -4.5999999999999996 },
- { 7.8073853756187101e+97, 100, -4.5000000000000000 },
- { 5.2136163919277588e+96, 100, -4.4000000000000004 },
- { -3.0837503404959950e+97, 100, -4.2999999999999998 },
- { -1.0988290456447777e+97, 100, -4.2000000000000002 },
- { 1.0173847230741884e+97, 100, -4.0999999999999996 },
- { 7.7070682747643550e+96, 100, -4.0000000000000000 },
- { -2.3947326745293331e+96, 100, -3.9000000000000004 },
- { -4.1993887070961596e+96, 100, -3.7999999999999998 },
- { -5.5521768050542138e+94, 100, -3.7000000000000002 },
- { 1.9852724296241180e+96, 100, -3.5999999999999996 },
- { 5.7841213444838915e+95, 100, -3.5000000000000000 },
- { -8.2433116644948570e+95, 100, -3.4000000000000004 },
- { -5.2035951331058195e+95, 100, -3.2999999999999998 },
- { 2.8212012454566057e+95, 100, -3.2000000000000002 },
- { 3.5161870090563867e+95, 100, -3.0999999999999996 },
- { -5.5084542871196523e+94, 100, -3.0000000000000000 },
- { -2.0784160746797610e+95, 100, -2.9000000000000004 },
- { -2.6058116248679496e+94, 100, -2.7999999999999998 },
- { 1.1147132226581844e+95, 100, -2.7000000000000002 },
- { 4.5607706742532875e+94, 100, -2.5999999999999996 },
- { -5.3758761713337664e+94, 100, -2.5000000000000000 },
- { -4.2303228932575769e+94, 100, -2.4000000000000004 },
- { 2.1691501564685499e+94, 100, -2.2999999999999998 },
- { 3.2602488340116974e+94, 100, -2.2000000000000002 },
- { -5.0527155039787607e+93, 100, -2.0999999999999996 },
- { -2.2785574311661325e+94, 100, -2.0000000000000000 },
- { -2.8549527653152903e+93, 100, -1.9000000000000004 },
- { 1.4787573463714363e+94, 100, -1.8000000000000007 },
- { 6.0554070654771248e+93, 100, -1.6999999999999993 },
- { -8.8496828346970978e+93, 100, -1.5999999999999996 },
- { -6.8402151897169509e+93, 100, -1.5000000000000000 },
- { 4.6555468819923166e+93, 100, -1.4000000000000004 },
- { 6.4625437128323579e+93, 100, -1.3000000000000007 },
- { -1.7820042440391653e+93, 100, -1.1999999999999993 },
- { -5.5814393347235886e+93, 100, -1.0999999999999996 },
- { -1.4487067293379347e+92, 100, -1.0000000000000000 },
- { 4.5268398678911204e+93, 100, -0.90000000000000036 },
- { 1.4120762149478435e+93, 100, -0.80000000000000071 },
- { -3.4510765981144258e+93, 100, -0.69999999999999929 },
- { -2.2242581581553176e+93, 100, -0.59999999999999964 },
- { 2.4129827902061037e+93, 100, -0.50000000000000000 },
- { 2.7195429139752497e+93, 100, -0.40000000000000036 },
- { -1.4235309630836904e+93, 100, -0.30000000000000071 },
- { -2.9850618739468043e+93, 100, -0.19999999999999929 },
- { 4.7017027479251074e+92, 100, -0.099999999999999645 },
- { 3.0685187562549660e+93, 100, 0.0000000000000000 },
- { 4.7017027479251074e+92, 100, 0.099999999999999645 },
- { -2.9850618739468043e+93, 100, 0.19999999999999929 },
- { -1.4235309630836904e+93, 100, 0.30000000000000071 },
- { 2.7195429139752497e+93, 100, 0.40000000000000036 },
- { 2.4129827902061037e+93, 100, 0.50000000000000000 },
- { -2.2242581581553176e+93, 100, 0.59999999999999964 },
- { -3.4510765981144258e+93, 100, 0.69999999999999929 },
- { 1.4120762149478435e+93, 100, 0.80000000000000071 },
- { 4.5268398678911204e+93, 100, 0.90000000000000036 },
- { -1.4487067293379347e+92, 100, 1.0000000000000000 },
- { -5.5814393347235886e+93, 100, 1.0999999999999996 },
- { -1.7820042440391653e+93, 100, 1.1999999999999993 },
- { 6.4625437128323579e+93, 100, 1.3000000000000007 },
- { 4.6555468819923166e+93, 100, 1.4000000000000004 },
- { -6.8402151897169509e+93, 100, 1.5000000000000000 },
- { -8.8496828346970978e+93, 100, 1.5999999999999996 },
- { 6.0554070654771248e+93, 100, 1.6999999999999993 },
- { 1.4787573463714363e+94, 100, 1.8000000000000007 },
- { -2.8549527653152903e+93, 100, 1.9000000000000004 },
- { -2.2785574311661325e+94, 100, 2.0000000000000000 },
- { -5.0527155039787607e+93, 100, 2.0999999999999996 },
- { 3.2602488340116774e+94, 100, 2.1999999999999993 },
- { 2.1691501564685076e+94, 100, 2.3000000000000007 },
- { -4.2303228932575769e+94, 100, 2.4000000000000004 },
- { -5.3758761713337664e+94, 100, 2.5000000000000000 },
- { 4.5607706742532875e+94, 100, 2.5999999999999996 },
- { 1.1147132226581881e+95, 100, 2.6999999999999993 },
- { -2.6058116248681564e+94, 100, 2.8000000000000007 },
- { -2.0784160746797610e+95, 100, 2.9000000000000004 },
- { -5.5084542871196523e+94, 100, 3.0000000000000000 },
- { 3.5161870090563867e+95, 100, 3.0999999999999996 },
- { 2.8212012454566478e+95, 100, 3.1999999999999993 },
- { -5.2035951331058918e+95, 100, 3.3000000000000007 },
- { -8.2433116644948570e+95, 100, 3.4000000000000004 },
- { 5.7841213444838915e+95, 100, 3.5000000000000000 },
- { 1.9852724296241180e+96, 100, 3.5999999999999996 },
- { -5.5521768050503009e+94, 100, 3.6999999999999993 },
- { -4.1993887070961795e+96, 100, 3.8000000000000007 },
- { -2.3947326745293331e+96, 100, 3.9000000000000004 },
- { 7.7070682747643550e+96, 100, 4.0000000000000000 },
- { 1.0173847230741884e+97, 100, 4.0999999999999996 },
- { -1.0988290456447506e+97, 100, 4.1999999999999993 },
- { -3.0837503404959957e+97, 100, 4.3000000000000007 },
- { 5.2136163919277588e+96, 100, 4.4000000000000004 },
- { 7.8073853756187101e+97, 100, 4.5000000000000000 },
- { 4.2440218943299170e+97, 100, 4.5999999999999996 },
- { -1.6545238014142650e+98, 100, 4.6999999999999993 },
- { -2.3193021196802549e+98, 100, 4.8000000000000007 },
- { 2.5601172475776894e+98, 100, 4.9000000000000004 },
- { 8.1931937130591466e+98, 100, 5.0000000000000000 },
- { -4.0259235416602546e+97, 100, 5.0999999999999996 },
- { -2.3096466887887237e+99, 100, 5.1999999999999993 },
- { -1.8337906983005823e+99, 100, 5.3000000000000007 },
- { 5.0935670879056567e+99, 100, 5.4000000000000004 },
- { 9.9309186425970402e+99, 100, 5.5000000000000000 },
- { -6.2933057672779134e+99, 100, 5.5999999999999996 },
- { -3.6379102593330386e+100, 100, 5.6999999999999993 },
- { -1.5140717605507249e+100, 100, 5.8000000000000007 },
- { 1.0141407690966954e+101, 100, 5.9000000000000004 },
- { 1.5170693933260738e+101, 100, 6.0000000000000000 },
- { -1.8039133351602961e+101, 100, 6.1000000000000014 },
- { -7.0672139150705246e+101, 100, 6.1999999999999993 },
- { -1.4587350659144549e+101, 100, 6.3000000000000007 },
- { 2.3341289432998748e+102, 100, 6.3999999999999986 },
- { 3.2072472002047670e+102, 100, 6.5000000000000000 },
- { -4.8039047085582927e+102, 100, 6.6000000000000014 },
- { -1.7849709684883083e+103, 100, 6.6999999999999993 },
- { -3.7817730019120996e+102, 100, 6.8000000000000007 },
- { 6.4900499886056430e+103, 100, 6.8999999999999986 },
- { 1.0002273523275075e+104, 100, 7.0000000000000000 },
- { -1.2947583568693485e+104, 100, 7.1000000000000014 },
- { -5.9348804074874565e+104, 100, 7.1999999999999993 },
- { -2.9237691057264679e+104, 100, 7.3000000000000007 },
- { 2.1375121759799924e+105, 100, 7.3999999999999986 },
- { 4.4772364475394960e+105, 100, 7.5000000000000000 },
- { -2.7486638813241244e+105, 100, 7.6000000000000014 },
- { -2.4850432648123868e+106, 100, 7.6999999999999993 },
- { -2.7252309851017070e+106, 100, 7.8000000000000007 },
- { 7.3445622927434568e+106, 100, 7.8999999999999986 },
- { 2.5761505535443451e+107, 100, 8.0000000000000000 },
- { 8.4932594446944218e+106, 100, 8.1000000000000014 },
- { -1.1534178973583771e+108, 100, 8.1999999999999993 },
- { -2.5611278359589723e+108, 100, 8.3000000000000007 },
- { 1.2481735250538004e+108, 100, 8.3999999999999986 },
- { 1.6203702280499544e+109, 100, 8.5000000000000000 },
- { 2.5386102824684747e+109, 100, 8.6000000000000014 },
- { -3.8930624477368766e+109, 100, 8.6999999999999993 },
- { -2.2669773300293168e+110, 100, 8.8000000000000007 },
- { -2.6071876743328939e+110, 100, 8.8999999999999986 },
- { 7.7294136683043515e+110, 100, 9.0000000000000000 },
- { 3.3341330166544429e+111, 100, 9.1000000000000014 },
- { 2.9686037583393142e+111, 100, 9.1999999999999993 },
- { -1.3977488190034162e+112, 100, 9.3000000000000007 },
- { -5.3374224541141370e+112, 100, 9.3999999999999986 },
- { -4.2265051766934789e+112, 100, 9.5000000000000000 },
- { 2.4904626130430740e+113, 100, 9.6000000000000014 },
- { 9.4857435427570856e+113, 100, 9.6999999999999993 },
- { 8.3761676654305186e+113, 100, 9.8000000000000007 },
- { -4.4232904120309469e+114, 100, 9.8999999999999986 },
- { -1.8738689223256612e+115, 100, 10.000000000000000 },
+ { -1.8738689223256612e+115, 100, -10.000000000000000, 0.0 },
+ { -4.4232904120311186e+114, 100, -9.9000000000000004, 0.0 },
+ { 8.3761676654305186e+113, 100, -9.8000000000000007, 0.0 },
+ { 9.4857435427570856e+113, 100, -9.6999999999999993, 0.0 },
+ { 2.4904626130429828e+113, 100, -9.5999999999999996, 0.0 },
+ { -4.2265051766934789e+112, 100, -9.5000000000000000, 0.0 },
+ { -5.3374224541142079e+112, 100, -9.4000000000000004, 0.0 },
+ { -1.3977488190034162e+112, 100, -9.3000000000000007, 0.0 },
+ { 2.9686037583393142e+111, 100, -9.1999999999999993, 0.0 },
+ { 3.3341330166544008e+111, 100, -9.0999999999999996, 0.0 },
+ { 7.7294136683043515e+110, 100, -9.0000000000000000, 0.0 },
+ { -2.6071876743328352e+110, 100, -8.9000000000000004, 0.0 },
+ { -2.2669773300293168e+110, 100, -8.8000000000000007, 0.0 },
+ { -3.8930624477368766e+109, 100, -8.6999999999999993, 0.0 },
+ { 2.5386102824684956e+109, 100, -8.5999999999999996, 0.0 },
+ { 1.6203702280499544e+109, 100, -8.5000000000000000, 0.0 },
+ { 1.2481735250539652e+108, 100, -8.4000000000000004, 0.0 },
+ { -2.5611278359589723e+108, 100, -8.3000000000000007, 0.0 },
+ { -1.1534178973583771e+108, 100, -8.1999999999999993, 0.0 },
+ { 8.4932594446954126e+106, 100, -8.0999999999999996, 0.0 },
+ { 2.5761505535443451e+107, 100, -8.0000000000000000, 0.0 },
+ { 7.3445622927437730e+106, 100, -7.9000000000000004, 0.0 },
+ { -2.7252309851017323e+106, 100, -7.7999999999999998, 0.0 },
+ { -2.4850432648123868e+106, 100, -7.6999999999999993, 0.0 },
+ { -2.7486638813238851e+105, 100, -7.5999999999999996, 0.0 },
+ { 4.4772364475394960e+105, 100, -7.5000000000000000, 0.0 },
+ { 2.1375121759800508e+105, 100, -7.4000000000000004, 0.0 },
+ { -2.9237691057265876e+104, 100, -7.2999999999999998, 0.0 },
+ { -5.9348804074874565e+104, 100, -7.1999999999999993, 0.0 },
+ { -1.2947583568692734e+104, 100, -7.0999999999999996, 0.0 },
+ { 1.0002273523275075e+104, 100, -7.0000000000000000, 0.0 },
+ { 6.4900499886057735e+103, 100, -6.9000000000000004, 0.0 },
+ { -3.7817730019124298e+102, 100, -6.7999999999999998, 0.0 },
+ { -1.7849709684883083e+103, 100, -6.6999999999999993, 0.0 },
+ { -4.8039047085580619e+102, 100, -6.5999999999999996, 0.0 },
+ { 3.2072472002047670e+102, 100, -6.5000000000000000, 0.0 },
+ { 2.3341289432999226e+102, 100, -6.4000000000000004, 0.0 },
+ { -1.4587350659146165e+101, 100, -6.2999999999999998, 0.0 },
+ { -7.0672139150705246e+101, 100, -6.1999999999999993, 0.0 },
+ { -1.8039133351601998e+101, 100, -6.0999999999999996, 0.0 },
+ { 1.5170693933260738e+101, 100, -6.0000000000000000, 0.0 },
+ { 1.0141407690966841e+101, 100, -5.8999999999999995, 0.0 },
+ { -1.5140717605507886e+100, 100, -5.7999999999999998, 0.0 },
+ { -3.6379102593330533e+100, 100, -5.7000000000000002, 0.0 },
+ { -6.2933057672779134e+99, 100, -5.5999999999999996, 0.0 },
+ { 9.9309186425970402e+99, 100, -5.5000000000000000, 0.0 },
+ { 5.0935670879055936e+99, 100, -5.3999999999999995, 0.0 },
+ { -1.8337906983006129e+99, 100, -5.2999999999999998, 0.0 },
+ { -2.3096466887887237e+99, 100, -5.1999999999999993, 0.0 },
+ { -4.0259235416602546e+97, 100, -5.0999999999999996, 0.0 },
+ { 8.1931937130591466e+98, 100, -5.0000000000000000, 0.0 },
+ { 2.5601172475776284e+98, 100, -4.8999999999999995, 0.0 },
+ { -2.3193021196802698e+98, 100, -4.7999999999999998, 0.0 },
+ { -1.6545238014142650e+98, 100, -4.6999999999999993, 0.0 },
+ { 4.2440218943299170e+97, 100, -4.5999999999999996, 0.0 },
+ { 7.8073853756187101e+97, 100, -4.5000000000000000, 0.0 },
+ { 5.2136163919270720e+96, 100, -4.3999999999999995, 0.0 },
+ { -3.0837503404959950e+97, 100, -4.2999999999999998, 0.0 },
+ { -1.0988290456447506e+97, 100, -4.1999999999999993, 0.0 },
+ { 1.0173847230741884e+97, 100, -4.0999999999999996, 0.0 },
+ { 7.7070682747643550e+96, 100, -4.0000000000000000, 0.0 },
+ { -2.3947326745293985e+96, 100, -3.8999999999999995, 0.0 },
+ { -4.1993887070961596e+96, 100, -3.7999999999999998, 0.0 },
+ { -5.5521768050503009e+94, 100, -3.6999999999999993, 0.0 },
+ { 1.9852724296241180e+96, 100, -3.5999999999999996, 0.0 },
+ { 5.7841213444838915e+95, 100, -3.5000000000000000, 0.0 },
+ { -8.2433116644948985e+95, 100, -3.3999999999999995, 0.0 },
+ { -5.2035951331058195e+95, 100, -3.2999999999999998, 0.0 },
+ { 2.8212012454566478e+95, 100, -3.1999999999999993, 0.0 },
+ { 3.5161870090563867e+95, 100, -3.0999999999999996, 0.0 },
+ { -5.5084542871196523e+94, 100, -3.0000000000000000, 0.0 },
+ { -2.0784160746797530e+95, 100, -2.8999999999999995, 0.0 },
+ { -2.6058116248679496e+94, 100, -2.7999999999999998, 0.0 },
+ { 1.1147132226581881e+95, 100, -2.6999999999999993, 0.0 },
+ { 4.5607706742532875e+94, 100, -2.5999999999999996, 0.0 },
+ { -5.3758761713337664e+94, 100, -2.5000000000000000, 0.0 },
+ { -4.2303228932575310e+94, 100, -2.3999999999999995, 0.0 },
+ { 2.1691501564685499e+94, 100, -2.2999999999999998, 0.0 },
+ { 3.2602488340116774e+94, 100, -2.1999999999999993, 0.0 },
+ { -5.0527155039787607e+93, 100, -2.0999999999999996, 0.0 },
+ { -2.2785574311661325e+94, 100, -2.0000000000000000, 0.0 },
+ { -2.8549527653152903e+93, 100, -1.9000000000000004, 0.0 },
+ { 1.4787573463714434e+94, 100, -1.7999999999999989, 0.0 },
+ { 6.0554070654771248e+93, 100, -1.6999999999999993, 0.0 },
+ { -8.8496828346970978e+93, 100, -1.5999999999999996, 0.0 },
+ { -6.8402151897169509e+93, 100, -1.5000000000000000, 0.0 },
+ { 4.6555468819923166e+93, 100, -1.4000000000000004, 0.0 },
+ { 6.4625437128322607e+93, 100, -1.2999999999999989, 0.0 },
+ { -1.7820042440391653e+93, 100, -1.1999999999999993, 0.0 },
+ { -5.5814393347235886e+93, 100, -1.0999999999999996, 0.0 },
+ { -1.4487067293379347e+92, 100, -1.0000000000000000, 0.0 },
+ { 4.5268398678911204e+93, 100, -0.90000000000000036, 0.0 },
+ { 1.4120762149477404e+93, 100, -0.79999999999999893, 0.0 },
+ { -3.4510765981144258e+93, 100, -0.69999999999999929, 0.0 },
+ { -2.2242581581553176e+93, 100, -0.59999999999999964, 0.0 },
+ { 2.4129827902061037e+93, 100, -0.50000000000000000, 0.0 },
+ { 2.7195429139752020e+93, 100, -0.39999999999999858, 0.0 },
+ { -1.4235309630837636e+93, 100, -0.29999999999999893, 0.0 },
+ { -2.9850618739468043e+93, 100, -0.19999999999999929, 0.0 },
+ { 4.7017027479251074e+92, 100, -0.099999999999999645, 0.0 },
+ { 3.0685187562549660e+93, 100, 0.0000000000000000, 0.0 },
+ { 4.7017027479243444e+92, 100, 0.10000000000000142, 0.0 },
+ { -2.9850618739468293e+93, 100, 0.20000000000000107, 0.0 },
+ { -1.4235309630836904e+93, 100, 0.30000000000000071, 0.0 },
+ { 2.7195429139752497e+93, 100, 0.40000000000000036, 0.0 },
+ { 2.4129827902061037e+93, 100, 0.50000000000000000, 0.0 },
+ { -2.2242581581553936e+93, 100, 0.60000000000000142, 0.0 },
+ { -3.4510765981143827e+93, 100, 0.70000000000000107, 0.0 },
+ { 1.4120762149478435e+93, 100, 0.80000000000000071, 0.0 },
+ { 4.5268398678911204e+93, 100, 0.90000000000000036, 0.0 },
+ { -1.4487067293379347e+92, 100, 1.0000000000000000, 0.0 },
+ { -5.5814393347236145e+93, 100, 1.1000000000000014, 0.0 },
+ { -1.7820042440390210e+93, 100, 1.2000000000000011, 0.0 },
+ { 6.4625437128323579e+93, 100, 1.3000000000000007, 0.0 },
+ { 4.6555468819923166e+93, 100, 1.4000000000000004, 0.0 },
+ { -6.8402151897169509e+93, 100, 1.5000000000000000, 0.0 },
+ { -8.8496828346969644e+93, 100, 1.6000000000000014, 0.0 },
+ { 6.0554070654774249e+93, 100, 1.7000000000000011, 0.0 },
+ { 1.4787573463714363e+94, 100, 1.8000000000000007, 0.0 },
+ { -2.8549527653152903e+93, 100, 1.9000000000000004, 0.0 },
+ { -2.2785574311661325e+94, 100, 2.0000000000000000, 0.0 },
+ { -5.0527155039780687e+93, 100, 2.1000000000000014, 0.0 },
+ { 3.2602488340117204e+94, 100, 2.2000000000000011, 0.0 },
+ { 2.1691501564685076e+94, 100, 2.3000000000000007, 0.0 },
+ { -4.2303228932575769e+94, 100, 2.4000000000000004, 0.0 },
+ { -5.3758761713337664e+94, 100, 2.5000000000000000, 0.0 },
+ { 4.5607706742535083e+94, 100, 2.6000000000000014, 0.0 },
+ { 1.1147132226581835e+95, 100, 2.7000000000000011, 0.0 },
+ { -2.6058116248681564e+94, 100, 2.8000000000000007, 0.0 },
+ { -2.0784160746797610e+95, 100, 2.9000000000000004, 0.0 },
+ { -5.5084542871196523e+94, 100, 3.0000000000000000, 0.0 },
+ { 3.5161870090564436e+95, 100, 3.1000000000000014, 0.0 },
+ { 2.8212012454565588e+95, 100, 3.2000000000000011, 0.0 },
+ { -5.2035951331058918e+95, 100, 3.3000000000000007, 0.0 },
+ { -8.2433116644948570e+95, 100, 3.4000000000000004, 0.0 },
+ { 5.7841213444838915e+95, 100, 3.5000000000000000, 0.0 },
+ { 1.9852724296241191e+96, 100, 3.6000000000000014, 0.0 },
+ { -5.5521768050576049e+94, 100, 3.7000000000000011, 0.0 },
+ { -4.1993887070961795e+96, 100, 3.8000000000000007, 0.0 },
+ { -2.3947326745293331e+96, 100, 3.9000000000000004, 0.0 },
+ { 7.7070682747643550e+96, 100, 4.0000000000000000, 0.0 },
+ { 1.0173847230741732e+97, 100, 4.1000000000000014, 0.0 },
+ { -1.0988290456448056e+97, 100, 4.2000000000000011, 0.0 },
+ { -3.0837503404959957e+97, 100, 4.3000000000000007, 0.0 },
+ { 5.2136163919277588e+96, 100, 4.4000000000000004, 0.0 },
+ { 7.8073853756187101e+97, 100, 4.5000000000000000, 0.0 },
+ { 4.2440218943296749e+97, 100, 4.6000000000000014, 0.0 },
+ { -1.6545238014143033e+98, 100, 4.7000000000000011, 0.0 },
+ { -2.3193021196802549e+98, 100, 4.8000000000000007, 0.0 },
+ { 2.5601172475776894e+98, 100, 4.9000000000000004, 0.0 },
+ { 8.1931937130591466e+98, 100, 5.0000000000000000, 0.0 },
+ { -4.0259235416636422e+97, 100, 5.1000000000000014, 0.0 },
+ { -2.3096466887887553e+99, 100, 5.2000000000000011, 0.0 },
+ { -1.8337906983005823e+99, 100, 5.3000000000000007, 0.0 },
+ { 5.0935670879056567e+99, 100, 5.4000000000000004, 0.0 },
+ { 9.9309186425970402e+99, 100, 5.5000000000000000, 0.0 },
+ { -6.2933057672784165e+99, 100, 5.6000000000000014, 0.0 },
+ { -3.6379102593330720e+100, 100, 5.7000000000000011, 0.0 },
+ { -1.5140717605507249e+100, 100, 5.8000000000000007, 0.0 },
+ { 1.0141407690966954e+101, 100, 5.9000000000000004, 0.0 },
+ { 1.5170693933260738e+101, 100, 6.0000000000000000, 0.0 },
+ { -1.8039133351602961e+101, 100, 6.1000000000000014, 0.0 },
+ { -7.0672139150705246e+101, 100, 6.1999999999999993, 0.0 },
+ { -1.4587350659144549e+101, 100, 6.3000000000000007, 0.0 },
+ { 2.3341289432999758e+102, 100, 6.4000000000000021, 0.0 },
+ { 3.2072472002047670e+102, 100, 6.5000000000000000, 0.0 },
+ { -4.8039047085582927e+102, 100, 6.6000000000000014, 0.0 },
+ { -1.7849709684883083e+103, 100, 6.6999999999999993, 0.0 },
+ { -3.7817730019120996e+102, 100, 6.8000000000000007, 0.0 },
+ { 6.4900499886059199e+103, 100, 6.9000000000000021, 0.0 },
+ { 1.0002273523275075e+104, 100, 7.0000000000000000, 0.0 },
+ { -1.2947583568693485e+104, 100, 7.1000000000000014, 0.0 },
+ { -5.9348804074874565e+104, 100, 7.1999999999999993, 0.0 },
+ { -2.9237691057264679e+104, 100, 7.3000000000000007, 0.0 },
+ { 2.1375121759801080e+105, 100, 7.4000000000000021, 0.0 },
+ { 4.4772364475394960e+105, 100, 7.5000000000000000, 0.0 },
+ { -2.7486638813241244e+105, 100, 7.6000000000000014, 0.0 },
+ { -2.4850432648123868e+106, 100, 7.6999999999999993, 0.0 },
+ { -2.7252309851017070e+106, 100, 7.8000000000000007, 0.0 },
+ { 7.3445622927440321e+106, 100, 7.9000000000000021, 0.0 },
+ { 2.5761505535443451e+107, 100, 8.0000000000000000, 0.0 },
+ { 8.4932594446944218e+106, 100, 8.1000000000000014, 0.0 },
+ { -1.1534178973583771e+108, 100, 8.1999999999999993, 0.0 },
+ { -2.5611278359589723e+108, 100, 8.3000000000000007, 0.0 },
+ { 1.2481735250541195e+108, 100, 8.4000000000000021, 0.0 },
+ { 1.6203702280499544e+109, 100, 8.5000000000000000, 0.0 },
+ { 2.5386102824684747e+109, 100, 8.6000000000000014, 0.0 },
+ { -3.8930624477368766e+109, 100, 8.6999999999999993, 0.0 },
+ { -2.2669773300293168e+110, 100, 8.8000000000000007, 0.0 },
+ { -2.6071876743327728e+110, 100, 8.9000000000000021, 0.0 },
+ { 7.7294136683043515e+110, 100, 9.0000000000000000, 0.0 },
+ { 3.3341330166544429e+111, 100, 9.1000000000000014, 0.0 },
+ { 2.9686037583391038e+111, 100, 9.2000000000000028, 0.0 },
+ { -1.3977488190034162e+112, 100, 9.3000000000000007, 0.0 },
+ { -5.3374224541142660e+112, 100, 9.4000000000000021, 0.0 },
+ { -4.2265051766934789e+112, 100, 9.5000000000000000, 0.0 },
+ { 2.4904626130430740e+113, 100, 9.6000000000000014, 0.0 },
+ { 9.4857435427573289e+113, 100, 9.7000000000000028, 0.0 },
+ { 8.3761676654305186e+113, 100, 9.8000000000000007, 0.0 },
+ { -4.4232904120312991e+114, 100, 9.9000000000000021, 0.0 },
+ { -1.8738689223256612e+115, 100, 10.000000000000000, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
+// hermite
+
+// Test data for n=8.
+// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data009[9] =
+{
+ { 5324432.0000000000, 8, 4.0000000000000000, 0.0 },
+ { 279702672.00000000, 8, 6.0000000000000000, 0.0 },
+ { 3409634960.0000000, 8, 8.0000000000000000, 0.0 },
+ { 22149057680.000000, 8, 10.000000000000000, 0.0 },
+ { 99650305680.000000, 8, 12.000000000000000, 0.0 },
+ { 1040259450512.0000, 8, 16.000000000000000, 0.0 },
+ { 6326369025680.0000, 8, 20.000000000000000, 0.0 },
+ { 9944083966401680.0, 8, 50.000000000000000, 0.0 },
+ { 2.5564173438656015e+18, 8, 100.00000000000000, 0.0 },
+};
+const double toler009 = 2.5000000000000020e-13;
+
+// Test data for n=18.
+// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data010[9] =
+{
+ { 54268892282368.000, 18, 4.0000000000000000, 0.0 },
+ { 1.3505976034605665e+18, 18, 6.0000000000000000, 0.0 },
+ { 1.1719308290279925e+21, 18, 8.0000000000000000, 0.0 },
+ { 1.1336099533194677e+23, 18, 10.000000000000000, 0.0 },
+ { 3.9670688759298557e+24, 18, 12.000000000000000, 0.0 },
+ { 9.0887304967960375e+26, 18, 16.000000000000000, 0.0 },
+ { 5.6525959758874797e+28, 18, 20.000000000000000, 0.0 },
+ { 9.6976497965812384e+35, 18, 50.000000000000000, 0.0 },
+ { 2.6014460548774723e+41, 18, 100.00000000000000, 0.0 },
+};
+const double toler010 = 2.5000000000000020e-13;
+
+// Test data for n=32.
+// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data011[9] =
+{
+ { 3.4488006171532706e+25, 32, 4.0000000000000000, 0.0 },
+ { 8.6646829675369123e+29, 32, 6.0000000000000000, 0.0 },
+ { 1.2445939522057109e+36, 32, 8.0000000000000000, 0.0 },
+ { 2.1381589300683108e+40, 32, 10.000000000000000, 0.0 },
+ { 2.0979395756455302e+43, 32, 12.000000000000000, 0.0 },
+ { 5.2024646069361253e+47, 32, 16.000000000000000, 0.0 },
+ { 9.6759233738497726e+50, 32, 20.000000000000000, 0.0 },
+ { 9.0500820467530134e+63, 32, 50.000000000000000, 0.0 },
+ { 4.1896031916819710e+73, 32, 100.00000000000000, 0.0 },
+};
+const double toler011 = 2.5000000000000020e-13;
+
+// Test data for n=50.
+// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data012[9] =
+{
+ { -9.5599640670553907e+41, 50, 4.0000000000000000, 0.0 },
+ { -1.4355266959903589e+47, 50, 6.0000000000000000, 0.0 },
+ { 2.9492797132685063e+52, 50, 8.0000000000000000, 0.0 },
+ { 1.3516643049819314e+61, 50, 10.000000000000000, 0.0 },
+ { 5.1746552169783233e+66, 50, 12.000000000000000, 0.0 },
+ { 1.2608506104917666e+74, 50, 16.000000000000000, 0.0 },
+ { 2.4719364545684313e+79, 50, 20.000000000000000, 0.0 },
+ { 7.8081628444405771e+99, 50, 50.000000000000000, 0.0 },
+ { 1.0588500951956526e+115, 50, 100.00000000000000, 0.0 },
+};
+const double toler012 = 2.5000000000000020e-13;
+
+// Test data for n=72.
+// max(|f - f_GSL|): 0.0000000000000000
+// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
+const testcase_hermite<double>
+data013[9] =
+{
+ { -5.0016344249093296e+65, 72, 4.0000000000000000, 0.0 },
+ { 1.1604343420664594e+70, 72, 6.0000000000000000, 0.0 },
+ { 1.1307673578364519e+76, 72, 8.0000000000000000, 0.0 },
+ { -6.9227458950910379e+83, 72, 10.000000000000000, 0.0 },
+ { 4.2761121656851757e+93, 72, 12.000000000000000, 0.0 },
+ { 6.4057452391049260e+105, 72, 16.000000000000000, 0.0 },
+ { 6.5532144335168848e+113, 72, 20.000000000000000, 0.0 },
+ { 5.9536449994832570e+143, 72, 50.000000000000000, 0.0 },
+ { 4.1539384208364770e+165, 72, 100.00000000000000, 0.0 },
+};
+const double toler013 = 2.5000000000000020e-13;
+
+// Test data for n=128.
+// max(|f - f_GSL|): 5.6801914568161683e+287
+// max(|f - f_GSL| / |f_GSL|): 0.067467347247752898
+// mean(f - f_GSL): 6.3113238409068540e+286
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_hermite<double>
+data014[9] =
+{
+ { 7.4843015969363893e+129, 128, 4.0000000000000000, 0.0 },
+ { 1.9427207779012687e+134, 128, 6.0000000000000000, 0.0 },
+ { -2.5332076374233721e+140, 128, 8.0000000000000000, 0.0 },
+ { -3.6481920485874574e+146, 128, 10.000000000000000, 0.0 },
+ { -6.6019131304361279e+157, 128, 12.000000000000000, 0.0 },
+ { 1.7909969314519483e+182, 128, 16.000000000000000, 0.0 },
+ { 4.6773285529590986e+199, 128, 20.000000000000000, 0.0 },
+ { 1.8851953794407319e+255, 128, 50.000000000000000, 0.0 },
+ { 2.2605490449873036e+294, 128, 100.00000000000000, 0.0 },
+};
+const double toler014 = 0.050000000000000003;
+
+// Divergence at n=200 x=50.000000000000000 f=inf f_GSL=inf
+// Divergence at n=200 x=100.00000000000000 f=inf f_GSL=inf
+// Divergence at n=200 x=100.00000000000000 f=inf f_GSL=inf
+// Test data for n=200.
+// max(|f - f_GSL|): 5.7956400402179068e+302
+// max(|f - f_GSL| / |f_GSL|): 0.058685552817367669
+// mean(f - f_GSL): -8.2794857717398666e+301
+// variance(f - f_GSL): inf
+// stddev(f - f_GSL): inf
+const testcase_hermite<double>
+data015[7] =
+{
+ { -1.3224398396684072e+220, 200, 4.0000000000000000, 0.0 },
+ { 2.8108557561597729e+224, 200, 6.0000000000000000, 0.0 },
+ { 2.2034127668580903e+230, 200, 8.0000000000000000, 0.0 },
+ { -4.7005387186273384e+238, 200, 10.000000000000000, 0.0 },
+ { 6.8125674650192333e+247, 200, 12.000000000000000, 0.0 },
+ { 2.8932855639383936e+272, 200, 16.000000000000000, 0.0 },
+ { 9.8757526545830183e+303, 200, 20.000000000000000, 0.0 },
+};
+const double toler015 = 0.050000000000000003;
-template<typename Tp, unsigned int Num>
+// Divergence at n=1250 x=4.0000000000000000 f=-inf f_GSL=-inf
+// Divergence at n=1250 x=6.0000000000000000 f=inf f_GSL=inf
+// Divergence at n=1250 x=8.0000000000000000 f=inf f_GSL=inf
+// ...
+// Divergence at n=1250 x=100.00000000000000 f=inf f_GSL=inf
+// Divergence at n=5000 x=4.0000000000000000 f=-inf f_GSL=-inf
+// Divergence at n=5000 x=6.0000000000000000 f=-inf f_GSL=-inf
+// Divergence at n=5000 x=8.0000000000000000 f=inf f_GSL=inf
+// ...
+// Divergence at n=5000 x=100.00000000000000 f=inf f_GSL=inf
+template<typename Ret, unsigned int Num>
void
- test(const testcase_hermite<Tp> (&data)[Num], Tp toler)
+ test(const testcase_hermite<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::hermite(data[i].n, data[i].x);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f = std::hermite(data[i].n, data[i].x);
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
@@ -1756,5 +1939,12 @@ main()
test(data006, toler006);
test(data007, toler007);
test(data008, toler008);
+ test(data009, toler009);
+ test(data010, toler010);
+ test(data011, toler011);
+ test(data012, toler012);
+ test(data013, toler013);
+ test(data014, toler014);
+ test(data015, toler015);
return 0;
}
diff --git a/libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc b/libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc
index 3447ad8e14a..5a8a197dbf4 100644
--- a/libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/16_laguerre/check_value.cc
@@ -41,263 +41,287 @@
// Test data for n=0.
// max(|f - f_GSL|): 0.0000000000000000
// 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| / |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| / |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| / |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| / |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| / |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| / |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| / |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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc b/libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc
index 626bdc90635..6d121e479d5 100644
--- a/libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/17_legendre/check_value.cc
@@ -41,263 +41,287 @@
// Test data for l=0.
// max(|f - f_GSL|): 0.0000000000000000
// 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| / |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| / |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| / |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
+// 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
+// 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
+// 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| / |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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc b/libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc
index 7ab4ea0988a..721ecfa4988 100644
--- a/libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/18_riemann_zeta/check_value.cc
@@ -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,70 +46,76 @@
#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_GSL|): 8.2716819505002093e-14
+// max(|f - f_GSL| / |f_GSL|): 1.3228546909410770e-11
+// mean(f - f_GSL): -7.0000468489887651e-15
+// variance(f - f_GSL): 7.0456840306290655e-31
+// stddev(f - f_GSL): 8.3938572960403994e-16
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.0033669820451019579, -9.8000000000000007, 0.0 },
+ { -0.0058129517767319039, -9.5999999999999996, 0.0 },
+ { -0.0072908732290557004, -9.4000000000000004, 0.0 },
+ { -0.0078420910654484442, -9.1999999999999993, 0.0 },
+ { -0.0075757575757575803, -9.0000000000000000, 0.0 },
+ { -0.0066476555677551898, -8.8000000000000007, 0.0 },
+ { -0.0052400095350859429, -8.5999999999999996, 0.0 },
+ { -0.0035434308017674959, -8.4000000000000004, 0.0 },
+ { -0.0017417330388368585, -8.1999999999999993, 0.0 },
+ { 0.0000000000000000, -8.0000000000000000, 0.0 },
+ { 0.0015440036789213961, -7.7999999999999998, 0.0 },
+ { 0.0027852131086497423, -7.5999999999999996, 0.0 },
+ { 0.0036537321227995880, -7.4000000000000004, 0.0 },
+ { 0.0041147930817053537, -7.1999999999999993, 0.0 },
+ { 0.0041666666666666683, -7.0000000000000000, 0.0 },
+ { 0.0038369975032738366, -6.7999999999999998, 0.0 },
+ { 0.0031780270571782981, -6.5999999999999996, 0.0 },
+ { 0.0022611282027338573, -6.4000000000000004, 0.0 },
+ { 0.0011710237049390444, -6.1999999999999993, 0.0 },
+ { 0.0000000000000000, -6.0000000000000000, 0.0 },
+ { -0.0011576366649881879, -5.7999999999999998, 0.0 },
+ { -0.0022106784318564345, -5.5999999999999996, 0.0 },
+ { -0.0030755853460586917, -5.3999999999999995, 0.0 },
+ { -0.0036804380477934787, -5.1999999999999993, 0.0 },
+ { -0.0039682539682539698, -5.0000000000000000, 0.0 },
+ { -0.0038996891301999797, -4.7999999999999998, 0.0 },
+ { -0.0034551830834302711, -4.5999999999999996, 0.0 },
+ { -0.0026366345018725059, -4.3999999999999995, 0.0 },
+ { -0.0014687209305056924, -4.1999999999999993, 0.0 },
+ { 0.0000000000000000, -4.0000000000000000, 0.0 },
+ { 0.0016960463875825202, -3.7999999999999998, 0.0 },
+ { 0.0035198355903356747, -3.5999999999999996, 0.0 },
+ { 0.0053441503206513533, -3.3999999999999995, 0.0 },
+ { 0.0070119720770910601, -3.1999999999999993, 0.0 },
+ { 0.0083333333333333350, -3.0000000000000000, 0.0 },
+ { 0.0090807294856852811, -2.7999999999999998, 0.0 },
+ { 0.0089824623788396681, -2.5999999999999996, 0.0 },
+ { 0.0077130239874243457, -2.3999999999999995, 0.0 },
+ { 0.0048792123593035816, -2.1999999999999993, 0.0 },
+ { 0.0000000000000000, -2.0000000000000000, 0.0 },
+ { -0.0075229347765968877, -1.7999999999999989, 0.0 },
+ { -0.018448986678963775, -1.5999999999999996, 0.0 },
+ { -0.033764987694047593, -1.4000000000000004, 0.0 },
+ { -0.054788441243880631, -1.1999999999999993, 0.0 },
+ { -0.083333333333333398, -1.0000000000000000, 0.0 },
+ { -0.12198707766977154, -0.79999999999999893, 0.0 },
+ { -0.17459571193801401, -0.59999999999999964, 0.0 },
+ { -0.24716546083171573, -0.39999999999999858, 0.0 },
+ { -0.34966628059831484, -0.19999999999999929, 0.0 },
+ { -0.49999999999999994, 0.0000000000000000, 0.0 },
+ { -0.73392092489634220, 0.20000000000000107, 0.0 },
+ { -1.1347977838669825, 0.40000000000000036, 0.0 },
+ { -1.9526614482240094, 0.60000000000000142, 0.0 },
+ { -4.4375384158955677, 0.80000000000000071, 0.0 },
};
-const double toler001 = 2.5000000000000020e-13;
+const double toler001 = 1.0000000000000007e-09;
// 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
@@ -118,177 +124,180 @@ const double toler001 = 2.5000000000000020e-13;
// Test data.
// max(|f - f_GSL|): 2.6645352591003757e-15
// max(|f - f_GSL| / |f_GSL|): 1.1657079722157521e-15
+// mean(f - f_GSL): -1.5925957870485004e-16
+// variance(f - f_GSL): 1.7735937231581391e-34
+// stddev(f - f_GSL): 1.3317633885785189e-17
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.5915824411777502, 1.2000000000000000, 0.0 },
+ { 3.1055472779775792, 1.3999999999999999, 0.0 },
+ { 2.2857656656801324, 1.6000000000000001, 0.0 },
+ { 1.8822296181028220, 1.8000000000000000, 0.0 },
+ { 1.6449340668482275, 2.0000000000000000, 0.0 },
+ { 1.4905432565068937, 2.2000000000000002, 0.0 },
+ { 1.3833428588407355, 2.4000000000000004, 0.0 },
+ { 1.3054778090727803, 2.6000000000000001, 0.0 },
+ { 1.2470314223172541, 2.7999999999999998, 0.0 },
+ { 1.2020569031595945, 3.0000000000000000, 0.0 },
+ { 1.1667733709844674, 3.2000000000000002, 0.0 },
+ { 1.1386637757280418, 3.4000000000000004, 0.0 },
+ { 1.1159890791233376, 3.6000000000000001, 0.0 },
+ { 1.0975105764590045, 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.0431480133351787, 4.8000000000000007, 0.0 },
+ { 1.0369277551433700, 5.0000000000000000, 0.0 },
+ { 1.0316598766779168, 5.2000000000000002, 0.0 },
+ { 1.0271855389203537, 5.4000000000000004, 0.0 },
+ { 1.0233754792270300, 5.6000000000000005, 0.0 },
+ { 1.0201237683883446, 5.8000000000000007, 0.0 },
+ { 1.0173430619844492, 6.0000000000000000, 0.0 },
+ { 1.0149609451852233, 6.2000000000000002, 0.0 },
+ { 1.0129170887121841, 6.4000000000000004, 0.0 },
+ { 1.0111610141542708, 6.6000000000000005, 0.0 },
+ { 1.0096503223447120, 6.8000000000000007, 0.0 },
+ { 1.0083492773819229, 7.0000000000000000, 0.0 },
+ { 1.0072276664807169, 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.0020083928260823, 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.0009945751278182, 10.000000000000000, 0.0 },
+ { 1.0008645533615088, 10.200000000000001, 0.0 },
+ { 1.0007516206744649, 10.400000000000000, 0.0 },
+ { 1.0006535124140850, 10.600000000000001, 0.0 },
+ { 1.0005682678503411, 10.800000000000001, 0.0 },
+ { 1.0004941886041194, 11.000000000000000, 0.0 },
+ { 1.0004298029239944, 11.200000000000001, 0.0 },
+ { 1.0003738349551168, 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.0001862731874056, 12.400000000000000, 0.0 },
+ { 1.0001620737887460, 12.600000000000001, 0.0 },
+ { 1.0001410242422089, 12.800000000000001, 0.0 },
+ { 1.0001227133475783, 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.0000133023770337, 16.200000000000003, 0.0 },
+ { 1.0000115791066830, 16.399999999999999, 0.0 },
+ { 1.0000100791671644, 16.600000000000001, 0.0 },
+ { 1.0000087735980010, 16.800000000000001, 0.0 },
+ { 1.0000076371976379, 17.000000000000000, 0.0 },
+ { 1.0000066480348633, 17.199999999999999, 0.0 },
+ { 1.0000057870238737, 17.400000000000002, 0.0 },
+ { 1.0000050375546607, 17.600000000000001, 0.0 },
+ { 1.0000043851715013, 17.800000000000001, 0.0 },
+ { 1.0000038172932648, 18.000000000000000, 0.0 },
+ { 1.0000033229700953, 18.199999999999999, 0.0 },
+ { 1.0000028926717153, 18.400000000000002, 0.0 },
+ { 1.0000025181032419, 18.600000000000001, 0.0 },
+ { 1.0000021920449287, 18.800000000000001, 0.0 },
+ { 1.0000019082127167, 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.0000003614367254, 21.400000000000002, 0.0 },
+ { 1.0000003146447527, 21.600000000000001, 0.0 },
+ { 1.0000002739108020, 21.800000000000001, 0.0 },
+ { 1.0000002384505029, 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.0000001192199262, 23.000000000000000, 0.0 },
+ { 1.0000001037862520, 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.0000000298035037, 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.0000000129725304, 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.0000000024577977, 28.600000000000001, 0.0 },
+ { 1.0000000021396356, 28.800000000000001, 0.0 },
+ { 1.0000000018626598, 29.000000000000000, 0.0 },
+ { 1.0000000016215385, 29.200000000000003, 0.0 },
+ { 1.0000000014116306, 29.400000000000002, 0.0 },
+ { 1.0000000012288952, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc b/libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc
index 38e61626b3d..f35d20e10ca 100644
--- a/libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/19_sph_bessel/check_value.cc
@@ -41,180 +41,198 @@
// Test data for n=0.
// max(|f - f_GSL|): 3.3306690738754696e-16
// max(|f - f_GSL| / |f_GSL|): 2.0843271082049370e-15
+// mean(f - f_GSL): -3.0398963769498337e-17
+// variance(f - f_GSL): 1.7755239868255660e-34
+// stddev(f - f_GSL): 1.3324878936881814e-17
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.90885168003111216, 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.45464871341284085, 0, 2.0000000000000000, 0.0 },
+ { 0.34581030972796500, 0, 2.2500000000000000, 0.0 },
+ { 0.23938885764158263, 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.15241635166462500, 0, 3.7500000000000000, 0.0 },
+ { -0.18920062382698205, 0, 4.0000000000000000, 0.0 },
+ { -0.21058573134790201, 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
+// mean(f - f_GSL): -1.9205867055457507e-17
+// variance(f - f_GSL): 2.6407111150141003e-35
+// stddev(f - f_GSL): 5.1387849877321193e-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| / |f_GSL|): 6.5384527054443100e-16
+// mean(f - f_GSL): -3.2216293125283561e-18
+// variance(f - f_GSL): 3.3637892606245969e-34
+// stddev(f - f_GSL): 1.8340635923066020e-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| / |f_GSL|): 2.7459190669103549e-15
+// mean(f - f_GSL): 3.0672884393007950e-18
+// variance(f - f_GSL): 4.9393356441808615e-37
+// stddev(f - f_GSL): 7.0280407256794272e-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.3719811237268220e-08, 5, 0.25000000000000000, 0.0 },
+ { 2.9774668754574453e-06, 5, 0.50000000000000000, 0.0 },
+ { 2.2339447678335762e-05, 5, 0.75000000000000000, 0.0 },
+ { 9.2561158611258144e-05, 5, 1.0000000000000000, 0.0 },
+ { 0.00027638888920123806, 5, 1.2500000000000000, 0.0 },
+ { 0.00066962059628932456, 5, 1.5000000000000000, 0.0 },
+ { 0.0014021729022572799, 5, 1.7500000000000000, 0.0 },
+ { 0.0026351697702441169, 5, 2.0000000000000000, 0.0 },
+ { 0.0045540034750567553, 5, 2.2500000000000000, 0.0 },
+ { 0.0073576387377689359, 5, 2.5000000000000000, 0.0 },
+ { 0.011244740276407145, 5, 2.7500000000000000, 0.0 },
+ { 0.016397480955999105, 5, 3.0000000000000000, 0.0 },
+ { 0.022964112474845508, 5, 3.2500000000000000, 0.0 },
+ { 0.031041536537391189, 5, 3.5000000000000000, 0.0 },
+ { 0.040659189440948935, 5, 3.7500000000000000, 0.0 },
+ { 0.051765539757363456, 5, 4.0000000000000000, 0.0 },
+ { 0.064218395773425613, 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| / |f_GSL|): 6.7232224139500876e-15
+// mean(f - f_GSL): 2.9233291056697913e-20
+// variance(f - f_GSL): 4.2203838920690281e-38
+// stddev(f - f_GSL): 2.0543572941601537e-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.5327786999397106e-05, 10, 3.5000000000000000, 0.0 },
+ { 2.9348811002317661e-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
+// mean(f - f_GSL): 5.5808687000055343e-28
+// variance(f - f_GSL): 1.2460231022000541e-52
+// stddev(f - f_GSL): 1.1162540491304182e-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.9496335952781075e-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.0303402625237510e-15, 20, 3.5000000000000000, 0.0 },
+ { 1.9572475798118559e-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.0024157388665026e-12, 20, 4.7500000000000000, 0.0 },
+ { 5.4277267607932098e-12, 20, 5.0000000000000000, 0.0 },
};
const double toler006 = 2.5000000000000015e-12;
// sph_bessel
@@ -222,263 +240,287 @@ const double toler006 = 2.5000000000000015e-12;
// Test data for n=0.
// max(|f - f_GSL|): 1.0694570229397016e-15
// max(|f - f_GSL| / |f_GSL|): 3.7496052611150890e-13
+// mean(f - f_GSL): -2.6124109489412632e-17
+// variance(f - f_GSL): 1.2558410443492295e-32
+// stddev(f - f_GSL): 1.1206431387150995e-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.054402111088936979, 0, 10.000000000000000, 0.0 },
+ { 0.043352522677141118, 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.018908967211869299, 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.0099332962622284207, 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| / |f_GSL|): 6.5465850130521528e-13
+// mean(f - f_GSL): 5.1561557602917773e-17
+// variance(f - f_GSL): 2.9340234335545131e-33
+// stddev(f - f_GSL): 5.4166626566129380e-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| / |f_GSL|): 3.4761702917932150e-13
+// mean(f - f_GSL): 2.6712676383047619e-17
+// variance(f - f_GSL): 1.2218714322750144e-32
+// stddev(f - f_GSL): 1.1053829346769446e-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
+// mean(f - f_GSL): 4.5743005943912237e-17
+// variance(f - f_GSL): 1.4752048613244596e-33
+// stddev(f - f_GSL): 3.8408395714016221e-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.0048552694845020138, 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.0065639581708136037, 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| / |f_GSL|): 2.9533832871668437e-12
+// mean(f - f_GSL): 4.1910867550924778e-17
+// variance(f - f_GSL): 1.5079763856266103e-32
+// stddev(f - f_GSL): 1.2279968996811883e-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.017600831383728983, 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.0052905066357239322, 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
+// mean(f - f_GSL): 7.4661920833706034e-18
+// variance(f - f_GSL): 1.4597276928432959e-38
+// stddev(f - f_GSL): 1.2081919106016625e-19
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.011582959134716393, 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.010639343320787521, 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
+// mean(f - f_GSL): 6.2784361339472195e-18
+// variance(f - f_GSL): 5.0165160423422681e-33
+// stddev(f - f_GSL): 7.0827367890825003e-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.8574793504401511e-46, 50, 5.0000000000000000, 0.0 },
+ { 2.2306960232186471e-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.0024888927213794561, 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| / |f_GSL|): 8.7701893132122237e-14
+// mean(f - f_GSL): -1.2140001788067151e-18
+// variance(f - f_GSL): 4.7284726903029159e-35
+// stddev(f - f_GSL): 6.8763890889789794e-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.5356503033889938e-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.3673586994539108e-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.00026825172647807507, 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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc b/libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc
index 5e4344e8572..f71fa992a53 100644
--- a/libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/20_sph_legendre/check_value.cc
@@ -41,1860 +41,1968 @@
// Test data for l=0, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_sph_legendre<double>
data001[21] =
{
{ 0.28209479177387814, 0, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.28209479177387814, 0, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.28209479177387814, 0, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.28209479177387814, 0, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.28209479177387814, 0, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.28209479177387814, 0, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.28209479177387814, 0, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.28209479177387814, 0, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.28209479177387814, 0, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.28209479177387814, 0, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.28209479177387814, 0, 0,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
{ 0.28209479177387814, 0, 0,
- 1.7278759594743860 },
+ 1.7278759594743862, 0.0 },
{ 0.28209479177387814, 0, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.28209479177387814, 0, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.28209479177387814, 0, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler001 = 2.5000000000000020e-13;
// Test data for l=1, m=0.
// max(|f - f_GSL|): 0.0000000000000000
// max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
+// mean(f - f_GSL): 0.0000000000000000
+// variance(f - f_GSL): 0.0000000000000000
+// stddev(f - f_GSL): 0.0000000000000000
const testcase_sph_legendre<double>
data002[21] =
{
{ 0.48860251190291992, 1, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.48258700419201100, 1, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.46468860282345231, 1, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.43534802584032634, 1, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.39528773562374975, 1, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.34549414947133550, 1, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.28719335072959390, 1, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.22182089855280449, 1, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.15098647967228981, 1, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.076434272566846345, 1, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 2.9918275112863369e-17, 1, 0,
- 1.5707963267948966 },
- { -0.076434272566846179, 1, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.076434272566846290, 1, 0,
+ 1.7278759594743862, 0.0 },
{ -0.15098647967228976, 1, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.22182089855280443, 1, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.28719335072959384, 1, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.34549414947133544, 1, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.39528773562374969, 1, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.43534802584032628, 1, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.46468860282345231, 1, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.48258700419201095, 1, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ -0.48860251190291992, 1, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler002 = 2.5000000000000020e-13;
// Test data for l=1, m=1.
-// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 7.7031500691196945e-16
+// max(|f - f_GSL|): 1.6653345369377348e-16
+// max(|f - f_GSL| / |f_GSL|): 7.0781989836273896e-16
+// mean(f - f_GSL): -9.3179432423897069e-17
+// variance(f - f_GSL): 4.5582634790907900e-34
+// stddev(f - f_GSL): 2.1350090114776541e-17
const testcase_sph_legendre<double>
data003[21] =
{
{ 0.0000000000000000, 1, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.054047192447077917, 1, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.10676356364376104, 1, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.15685106157558129, 1, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.20307636581258243, 1, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.24430125595146007, 1, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.27951063837942880, 1, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.30783754124787122, 1, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32858446219656556, 1, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.34124054317667202, 1, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.34549414947133567, 1, 1,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
{ -0.34124054317667202, 1, 1,
- 1.7278759594743860 },
+ 1.7278759594743862, 0.0 },
{ -0.32858446219656556, 1, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.30783754124787127, 1, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.27951063837942880, 1, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.24430125595146013, 1, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.20307636581258248, 1, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.15685106157558140, 1, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.10676356364376104, 1, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.054047192447078167, 1, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 1, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler003 = 2.5000000000000020e-13;
// Test data for l=2, m=0.
// max(|f - f_GSL|): 5.5511151231257827e-17
// max(|f - f_GSL| / |f_GSL|): 3.0159263334953002e-15
+// mean(f - f_GSL): 2.3129646346357427e-18
+// variance(f - f_GSL): 2.8086478355647191e-37
+// stddev(f - f_GSL): 5.2996677589870847e-19
const testcase_sph_legendre<double>
data004[21] =
{
{ 0.63078313050504009, 2, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.60762858760316607, 2, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.54043148688396569, 2, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.43576954875556589, 2, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.30388781294457579, 2, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.15769578262626011, 2, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.011503752307944235, 2, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.12037798350304570, 2, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.22503992163144576, 2, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.29223702235064597, 2, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.31539156525252005, 2, 0,
- 1.5707963267948966 },
- { -0.29223702235064608, 2, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.29223702235064597, 2, 0,
+ 1.7278759594743862, 0.0 },
{ -0.22503992163144584, 2, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.12037798350304584, 2, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.011503752307944164, 2, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.15769578262625994, 2, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.30388781294457567, 2, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.43576954875556562, 2, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.54043148688396569, 2, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.60762858760316585, 2, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.63078313050504009, 2, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler004 = 2.5000000000000020e-13;
// Test data for l=2, m=1.
// max(|f - f_GSL|): 2.2204460492503131e-16
-// max(|f - f_GSL| / |f_GSL|): 8.1384221730905279e-16
+// max(|f - f_GSL| / |f_GSL|): 7.1053729264566869e-16
+// mean(f - f_GSL): -5.9476233462061970e-18
+// variance(f - f_GSL): 1.8571467320876926e-36
+// stddev(f - f_GSL): 1.3627717094538220e-18
const testcase_sph_legendre<double>
data005[21] =
{
{ 0.0000000000000000, 2, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.11936529291378727, 2, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.22704627929027449, 2, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.31250239392538215, 2, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.36736859691086526, 2, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.38627420202318979, 2, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.36736859691086526, 2, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.31250239392538226, 2, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.22704627929027438, 2, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.11936529291378740, 2, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -4.7304946510089748e-17, 2, 1,
- 1.5707963267948966 },
- { 0.11936529291378714, 2, 1,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.11936529291378731, 2, 1,
+ 1.7278759594743862, 0.0 },
{ 0.22704627929027429, 2, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.31250239392538220, 2, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.36736859691086521, 2, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.38627420202318979, 2, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.36736859691086526, 2, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.31250239392538232, 2, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.22704627929027449, 2, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.11936529291378781, 2, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 2, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler005 = 2.5000000000000020e-13;
// Test data for l=2, m=2.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 6.2393366429561032e-16
+// max(|f - f_GSL|): 1.7208456881689926e-14
+// max(|f - f_GSL| / |f_GSL|): 4.5011460205758777e-14
+// mean(f - f_GSL): 8.2125113587934384e-15
+// variance(f - f_GSL): 3.5408804979613408e-30
+// stddev(f - f_GSL): 1.8817227473677787e-15
const testcase_sph_legendre<double>
data006[21] =
{
{ 0.0000000000000000, 2, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.0094528025561622549, 2, 2,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.036885904048903795, 2, 2,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.079613961366457681, 2, 2,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.13345445455470123, 2, 2,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.19313710101159484, 2, 2,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.25281974746848851, 2, 2,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.30666024065673209, 2, 2,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.34938829797428600, 2, 2,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.37682139946702747, 2, 2,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.38627420202318979, 2, 2,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
{ 0.37682139946702753, 2, 2,
- 1.7278759594743860 },
+ 1.7278759594743862, 0.0 },
{ 0.34938829797428606, 2, 2,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.30666024065673209, 2, 2,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.25281974746848856, 2, 2,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.19313710101159492, 2, 2,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.13345445455470126, 2, 2,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.079613961366457764, 2, 2,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.036885904048903795, 2, 2,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.0094528025561623433, 2, 2,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 2, 2,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler006 = 2.5000000000000020e-13;
+const double toler006 = 2.5000000000000015e-12;
// Test data for l=5, m=0.
// max(|f - f_GSL|): 1.0547118733938987e-15
// max(|f - f_GSL| / |f_GSL|): 2.9385557676213648e-15
+// mean(f - f_GSL): 1.5199481884749168e-17
+// variance(f - f_GSL): 1.2128773102152952e-35
+// stddev(f - f_GSL): 3.4826388130486557e-18
const testcase_sph_legendre<double>
data007[21] =
{
{ 0.93560257962738880, 5, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.77014422942079963, 5, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.35892185032365165, 5, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.090214932090594294, 5, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.36214460396518883, 5, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.35145955579226906, 5, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.11441703594725168, 5, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.17248966720808107, 5, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.32128384287200523, 5, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.24377632246714948, 5, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 1.0741712853887702e-16, 5, 0,
- 1.5707963267948966 },
- { -0.24377632246714911, 5, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.24377632246714936, 5, 0,
+ 1.7278759594743862, 0.0 },
{ -0.32128384287200534, 5, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.17248966720808132, 5, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.11441703594725151, 5, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.35145955579226895, 5, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.36214460396518905, 5, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.090214932090594752, 5, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.35892185032365165, 5, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.77014422942079852, 5, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ -0.93560257962738880, 5, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler007 = 2.5000000000000020e-13;
// Test data for l=5, m=1.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 1.4161260272615034e-15
+// max(|f - f_GSL|): 5.5511151231257827e-16
+// max(|f - f_GSL| / |f_GSL|): 1.7701575340768793e-15
+// mean(f - f_GSL): 5.2867763077388404e-18
+// variance(f - f_GSL): 1.4673751957236083e-36
+// stddev(f - f_GSL): 1.2113526306256194e-18
const testcase_sph_legendre<double>
data008[21] =
{
{ 0.0000000000000000, 5, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.36712373713318258, 5, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.54610329010534753, 5, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.45381991493631763, 5, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.15679720635769961, 5, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.16985499419838601, 5, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.34468004499725180, 5, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.28349471119605985, 5, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.044286619339675815, 5, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.21193784177193470, 5, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.32028164857621527, 5, 1,
- 1.5707963267948966 },
- { -0.21193784177193514, 5, 1,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.21193784177193487, 5, 1,
+ 1.7278759594743862, 0.0 },
{ 0.044286619339675592, 5, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.28349471119605968, 5, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.34468004499725174, 5, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.16985499419838640, 5, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.15679720635769906, 5, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.45381991493631768, 5, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.54610329010534753, 5, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.36712373713318402, 5, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 5, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler008 = 2.5000000000000020e-13;
// Test data for l=5, m=2.
-// max(|f - f_GSL|): 1.6653345369377348e-16
-// max(|f - f_GSL| / |f_GSL|): 3.0636916515712721e-15
+// max(|f - f_GSL|): 2.0428103653102880e-14
+// max(|f - f_GSL| / |f_GSL|): 4.6684825166800920e-14
+// mean(f - f_GSL): -1.2886517250113645e-17
+// variance(f - f_GSL): 8.7182721589675178e-36
+// stddev(f - f_GSL): 2.9526720371499979e-18
const testcase_sph_legendre<double>
data009[21] =
{
{ 0.0000000000000000, 5, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.078919441745546146, 5, 2,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.26373799140437987, 5, 2,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.43002359842080096, 5, 2,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.45642486439050983, 5, 2,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.29959604906083293, 5, 2,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.023781239849532215, 5, 2,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.23313989334673826, 5, 2,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.33799912776303714, 5, 2,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.23964508489529743, 5, 2,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -1.0377480524338170e-16, 5, 2,
- 1.5707963267948966 },
- { 0.23964508489529704, 5, 2,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.23964508489529732, 5, 2,
+ 1.7278759594743862, 0.0 },
{ 0.33799912776303714, 5, 2,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.23313989334673843, 5, 2,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.023781239849531916, 5, 2,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.29959604906083276, 5, 2,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.45642486439050983, 5, 2,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.43002359842080118, 5, 2,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.26373799140437987, 5, 2,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.078919441745546867, 5, 2,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 5, 2,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler009 = 2.5000000000000020e-13;
+const double toler009 = 2.5000000000000015e-12;
// Test data for l=5, m=5.
-// max(|f - f_GSL|): 1.1102230246251565e-16
-// max(|f - f_GSL| / |f_GSL|): 4.2617219728402347e-16
+// max(|f - f_GSL|): 2.1432855490388647e-13
+// max(|f - f_GSL| / |f_GSL|): 4.6202021725033156e-13
+// mean(f - f_GSL): -6.9301574931515216e-14
+// variance(f - f_GSL): 2.5214218511939192e-28
+// stddev(f - f_GSL): 1.5878985645166127e-14
const testcase_sph_legendre<double>
data010[21] =
{
{ 0.0000000000000000, 5, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -4.3481439097909148e-05, 5, 5,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.0013078367086431812, 5, 5,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.0089510818191922761, 5, 5,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.032563803777573896, 5, 5,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.082047757105021241, 5, 5,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.16085328164143814, 5, 5,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.26064303436645381, 5, 5,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.36113811790820571, 5, 5,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.43625592459446139, 5, 5,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.46413220344085809, 5, 5,
- 1.5707963267948966 },
- { -0.43625592459446155, 5, 5,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.43625592459446144, 5, 5,
+ 1.7278759594743862, 0.0 },
{ -0.36113811790820577, 5, 5,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.26064303436645386, 5, 5,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.16085328164143822, 5, 5,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.082047757105021310, 5, 5,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.032563803777573910, 5, 5,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.0089510818191923004, 5, 5,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.0013078367086431812, 5, 5,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -4.3481439097910151e-05, 5, 5,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 5, 5,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler010 = 2.5000000000000020e-13;
+const double toler010 = 2.5000000000000014e-11;
// Test data for l=10, m=0.
// max(|f - f_GSL|): 9.9920072216264089e-16
-// max(|f - f_GSL| / |f_GSL|): 2.2266594990531305e-15
+// max(|f - f_GSL| / |f_GSL|): 4.3176588435352323e-15
+// mean(f - f_GSL): 8.4918844443055122e-17
+// variance(f - f_GSL): 3.7858853243104921e-34
+// stddev(f - f_GSL): 1.9457351629424012e-17
const testcase_sph_legendre<double>
data011[21] =
{
{ 1.2927207364566027, 10, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.55288895150522555, 10, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.44874428379711545, 10, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.25532095827149687, 10, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.36625249688013961, 10, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.14880806329084206, 10, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.33533356797848757, 10, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.080639967662335665, 10, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.32197986450174521, 10, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.025713542103667848, 10, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.31813049373736707, 10, 0,
- 1.5707963267948966 },
- { 0.025713542103666699, 10, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.025713542103667528, 10, 0,
+ 1.7278759594743862, 0.0 },
{ 0.32197986450174543, 10, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.080639967662335096, 10, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.33533356797848757, 10, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.14880806329084156, 10, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.36625249688013994, 10, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.25532095827149576, 10, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.44874428379711545, 10, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.55288895150522011, 10, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 1.2927207364566027, 10, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler011 = 2.5000000000000020e-13;
// Test data for l=10, m=1.
-// max(|f - f_GSL|): 1.4432899320127035e-15
-// max(|f - f_GSL| / |f_GSL|): 4.9708436073954521e-15
+// max(|f - f_GSL|): 1.8873791418627661e-15
+// max(|f - f_GSL| / |f_GSL|): 3.4413532666583899e-15
+// mean(f - f_GSL): -7.4014868308343778e-17
+// variance(f - f_GSL): 2.8760553836182728e-34
+// stddev(f - f_GSL): 1.6958936828758674e-17
const testcase_sph_legendre<double>
data012[21] =
{
{ 0.0000000000000000, 10, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.74373723919063894, 10, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.29035110456209601, 10, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.42219282075271530, 10, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.17109256898931269, 10, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.35583574648544281, 10, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.10089212303543979, 10, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.32997652649321085, 10, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.047416376890032939, 10, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.31999356750295660, 10, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -2.0430664782290766e-16, 10, 1,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
{ 0.31999356750295660, 10, 1,
- 1.7278759594743860 },
+ 1.7278759594743862, 0.0 },
{ -0.047416376890032544, 10, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.32997652649321091, 10, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.10089212303543935, 10, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.35583574648544292, 10, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.17109256898931161, 10, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.42219282075271569, 10, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.29035110456209601, 10, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.74373723919064050, 10, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 10, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler012 = 2.5000000000000020e-13;
// Test data for l=10, m=2.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 3.3968188217108871e-15
+// max(|f - f_GSL|): 2.8865798640254070e-14
+// max(|f - f_GSL| / |f_GSL|): 4.6195968696380692e-14
+// mean(f - f_GSL): 3.4350829059533116e-15
+// variance(f - f_GSL): 6.1948921496556410e-31
+// stddev(f - f_GSL): 7.8707637174899616e-16
const testcase_sph_legendre<double>
data013[21] =
{
{ 0.0000000000000000, 10, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.34571695599980246, 10, 2,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.62485535978198059, 10, 2,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.098210039644716252, 10, 2,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.41494799233049684, 10, 2,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.081698973831472732, 10, 2,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.35253132222271277, 10, 2,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.049026298555980979, 10, 2,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32791246874130792, 10, 2,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.016196782433946885, 10, 2,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.32106263400438328, 10, 2,
- 1.5707963267948966 },
- { -0.016196782433945761, 10, 2,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.016196782433946497, 10, 2,
+ 1.7278759594743862, 0.0 },
{ -0.32791246874130803, 10, 2,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.049026298555980424, 10, 2,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.35253132222271266, 10, 2,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.081698973831472121, 10, 2,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.41494799233049695, 10, 2,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.098210039644715197, 10, 2,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.62485535978198059, 10, 2,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.34571695599980545, 10, 2,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 10, 2,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler013 = 2.5000000000000020e-13;
+const double toler013 = 2.5000000000000015e-12;
// Test data for l=10, m=5.
-// max(|f - f_GSL|): 3.6082248300317588e-16
-// max(|f - f_GSL| / |f_GSL|): 1.6350423942234514e-15
+// max(|f - f_GSL|): 2.3092638912203256e-13
+// max(|f - f_GSL| / |f_GSL|): 4.6231691002051211e-13
+// mean(f - f_GSL): 6.6291218546214298e-18
+// variance(f - f_GSL): 2.3071259695795219e-36
+// stddev(f - f_GSL): 1.5189226344944373e-18
const testcase_sph_legendre<double>
data014[21] =
{
{ 0.0000000000000000, 10, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.0030300124052750196, 10, 5,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.070348585248056802, 10, 5,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.30055029290703639, 10, 5,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.49987818144009155, 10, 5,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.28108771757150108, 10, 5,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.22068081187249292, 10, 5,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.33689502212592121, 10, 5,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.086095515520764110, 10, 5,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.33935827318511558, 10, 5,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -1.9213014340664578e-16, 10, 5,
- 1.5707963267948966 },
- { 0.33935827318511552, 10, 5,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.33935827318511558, 10, 5,
+ 1.7278759594743862, 0.0 },
{ 0.086095515520764512, 10, 5,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.33689502212592087, 10, 5,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.22068081187249344, 10, 5,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.28108771757150064, 10, 5,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.49987818144009138, 10, 5,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.30055029290703672, 10, 5,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.070348585248056802, 10, 5,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.0030300124052750873, 10, 5,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 10, 5,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler014 = 2.5000000000000020e-13;
+const double toler014 = 2.5000000000000014e-11;
// Test data for l=10, m=10.
-// max(|f - f_GSL|): 9.9920072216264089e-16
-// max(|f - f_GSL| / |f_GSL|): 1.9163828344752537e-15
+// max(|f - f_GSL|): 4.1600056732704616e-13
+// max(|f - f_GSL| / |f_GSL|): 7.6750716303631597e-13
+// mean(f - f_GSL): 9.7499939707791733e-14
+// variance(f - f_GSL): 4.9907750775870866e-28
+// stddev(f - f_GSL): 2.2340042698229311e-14
const testcase_sph_legendre<double>
data015[21] =
{
{ 0.0000000000000000, 10, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.7624282733343473e-09, 10, 10,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 4.3085156534549772e-06, 10, 10,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.00020182347649472387, 10, 10,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.0026711045506511684, 10, 10,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.016957196623256909, 10, 10,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.065174916004990341, 10, 10,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.17112476903017845, 10, 10,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.32852414199733554, 10, 10,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.47940582314838287, 10, 10,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.54263029194422152, 10, 10,
- 1.5707963267948966 },
- { 0.47940582314838309, 10, 10,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.47940582314838293, 10, 10,
+ 1.7278759594743862, 0.0 },
{ 0.32852414199733571, 10, 10,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.17112476903017856, 10, 10,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.065174916004990410, 10, 10,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.016957196623256943, 10, 10,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.0026711045506511706, 10, 10,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.00020182347649472493, 10, 10,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 4.3085156534549772e-06, 10, 10,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 4.7624282733345673e-09, 10, 10,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 10, 10,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler015 = 2.5000000000000020e-13;
+const double toler015 = 5.0000000000000028e-11;
// Test data for l=20, m=0.
// max(|f - f_GSL|): 1.2212453270876722e-15
// max(|f - f_GSL| / |f_GSL|): 2.1900476331757668e-15
+// mean(f - f_GSL): -6.8728092000604931e-17
+// variance(f - f_GSL): 2.4798640807728981e-34
+// stddev(f - f_GSL): 1.5747584198133053e-17
const testcase_sph_legendre<double>
data016[21] =
{
{ 1.8062879984608917, 20, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.58906549291415933, 20, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.45624611402342408, 20, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.39955402700466724, 20, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.36818552901640772, 20, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.34873131330857743, 20, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.33600882829186507, 20, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.32759286308122931, 20, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.32222458068091325, 20, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.31922731037135965, 20, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.31826262039531755, 20, 0,
- 1.5707963267948966 },
- { -0.31922731037135987, 20, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.31922731037135971, 20, 0,
+ 1.7278759594743862, 0.0 },
{ 0.32222458068091342, 20, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.32759286308122942, 20, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.33600882829186518, 20, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.34873131330857782, 20, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.36818552901640805, 20, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.39955402700466824, 20, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.45624611402342408, 20, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.58906549291416732, 20, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 1.8062879984608917, 20, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler016 = 2.5000000000000020e-13;
// Test data for l=20, m=1.
-// max(|f - f_GSL|): 2.8310687127941492e-15
-// max(|f - f_GSL| / |f_GSL|): 9.0837292708194213e-15
+// max(|f - f_GSL|): 3.1641356201816961e-15
+// max(|f - f_GSL| / |f_GSL|): 8.0150552389583129e-15
+// mean(f - f_GSL): -2.2237502844426496e-16
+// variance(f - f_GSL): 2.5961592969683518e-33
+// stddev(f - f_GSL): 5.0952520025690109e-17
const testcase_sph_legendre<double>
data017[21] =
{
{ 0.0000000000000000, 20, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.45905213045060256, 20, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.31166370423309253, 20, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.23278757741246778, 20, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.17937240823504172, 20, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.13857299972299839, 20, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.10495324841927722, 20, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.075707774352163665, 20, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.049168697683476224, 20, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.024216050551253303, 20, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 3.9938443510694349e-16, 20, 1,
- 1.5707963267948966 },
- { 0.024216050551250919, 20, 1,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.024216050551252380, 20, 1,
+ 1.7278759594743862, 0.0 },
{ -0.049168697683475482, 20, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.075707774352163068, 20, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.10495324841927638, 20, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.13857299972299741, 20, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.17937240823503983, 20, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.23278757741246703, 20, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.31166370423309253, 20, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.45905213045059046, 20, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 20, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler017 = 5.0000000000000039e-13;
// Test data for l=20, m=2.
-// max(|f - f_GSL|): 2.3314683517128287e-15
-// max(|f - f_GSL| / |f_GSL|): 2.6675898738403374e-15
+// max(|f - f_GSL|): 4.1078251911130792e-14
+// max(|f - f_GSL| / |f_GSL|): 4.7000393015282211e-14
+// mean(f - f_GSL): 2.4821414764833858e-15
+// variance(f - f_GSL): 3.2345388123715392e-31
+// stddev(f - f_GSL): 5.6873006007872828e-16
const testcase_sph_legendre<double>
data018[21] =
{
{ 0.0000000000000000, 20, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.87399805141574394, 20, 2,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.55116854080895061, 20, 2,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.44520137308557572, 20, 2,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.39321637877908228, 20, 2,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.36312025711350937, 20, 2,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.34427103004873116, 20, 2,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.33214917638387642, 20, 2,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32455734448839091, 20, 2,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.32036529628513238, 20, 2,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.31902310563819986, 20, 2,
- 1.5707963267948966 },
- { 0.32036529628513266, 20, 2,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.32036529628513261, 20, 2,
+ 1.7278759594743862, 0.0 },
{ -0.32455734448839102, 20, 2,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.33214917638387659, 20, 2,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.34427103004873105, 20, 2,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.36312025711350981, 20, 2,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.39321637877908278, 20, 2,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.44520137308557650, 20, 2,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.55116854080895061, 20, 2,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.87399805141574527, 20, 2,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 20, 2,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler018 = 2.5000000000000020e-13;
+const double toler018 = 2.5000000000000015e-12;
// Test data for l=20, m=5.
-// max(|f - f_GSL|): 3.5388358909926865e-16
-// max(|f - f_GSL| / |f_GSL|): 1.2458491381272207e-14
+// max(|f - f_GSL|): 3.1519231669108194e-13
+// max(|f - f_GSL| / |f_GSL|): 4.7211887687862559e-13
+// mean(f - f_GSL): -4.6837533851365139e-17
+// variance(f - f_GSL): 1.1517211530708319e-34
+// stddev(f - f_GSL): 1.0731827211946864e-17
const testcase_sph_legendre<double>
data019[21] =
{
{ 0.0000000000000000, 20, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.10024848623504863, 20, 5,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.68115361075940484, 20, 5,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.31774532551156298, 20, 5,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.16011868165390544, 20, 5,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.085844143304115578, 20, 5,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.047467540840864568, 20, 5,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.026283575189471796, 20, 5,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.013891104052597688, 20, 5,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.0059873308239496957, 20, 5,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 3.9355286582083095e-16, 20, 5,
- 1.5707963267948966 },
- { -0.0059873308239519014, 20, 5,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.0059873308239503324, 20, 5,
+ 1.7278759594743862, 0.0 },
{ 0.013891104052598547, 20, 5,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.026283575189472864, 20, 5,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.047467540840865928, 20, 5,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.085844143304117007, 20, 5,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.16011868165390658, 20, 5,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.31774532551156381, 20, 5,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.68115361075940484, 20, 5,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.10024848623505046, 20, 5,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 20, 5,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler019 = 1.0000000000000008e-12;
+const double toler019 = 2.5000000000000014e-11;
// Test data for l=20, m=10.
-// max(|f - f_GSL|): 1.6653345369377348e-15
-// max(|f - f_GSL| / |f_GSL|): 2.0744116940226714e-14
+// max(|f - f_GSL|): 4.1400216588272087e-13
+// max(|f - f_GSL| / |f_GSL|): 7.7058293222087902e-13
+// mean(f - f_GSL): 4.3798633262490709e-14
+// variance(f - f_GSL): 1.0071181447226328e-28
+// stddev(f - f_GSL): 1.0035527613048717e-14
const testcase_sph_legendre<double>
data020[21] =
{
{ 0.0000000000000000, 20, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.0595797603706485e-05, 20, 10,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.015924453916397002, 20, 10,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.26588079118745744, 20, 10,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.54045081420686869, 20, 10,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.28215279394285531, 20, 10,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.0085297337582245884, 20, 10,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.16930127953533738, 20, 10,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.27215134048018325, 20, 10,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.32456597088029526, 20, 10,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.34057893241353715, 20, 10,
- 1.5707963267948966 },
- { 0.32456597088029449, 20, 10,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.32456597088029493, 20, 10,
+ 1.7278759594743862, 0.0 },
{ -0.27215134048018291, 20, 10,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.16930127953533675, 20, 10,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.0085297337582257438, 20, 10,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.28215279394285619, 20, 10,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.54045081420686736, 20, 10,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.26588079118745828, 20, 10,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.015924453916397002, 20, 10,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 3.0595797603707888e-05, 20, 10,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 20, 10,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler020 = 2.5000000000000015e-12;
+const double toler020 = 5.0000000000000028e-11;
// Test data for l=20, m=20.
-// max(|f - f_GSL|): 3.3306690738754696e-16
-// max(|f - f_GSL| / |f_GSL|): 8.6795105199201385e-16
+// max(|f - f_GSL|): 2.3442581209565105e-11
+// max(|f - f_GSL| / |f_GSL|): 3.6654267286464335e-11
+// mean(f - f_GSL): -3.9338211825768138e-12
+// variance(f - f_GSL): 8.1243482756572712e-25
+// stddev(f - f_GSL): 9.0135166697894728e-13
const testcase_sph_legendre<double>
data021[21] =
{
{ 0.0000000000000000, 20, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.9264471419246231e-17, 20, 20,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 4.0321091681531780e-11, 20, 20,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 8.8474944184471664e-08, 20, 20,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 1.5497395129387764e-05, 20, 20,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.00062457564282984495, 20, 20,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.0092265192458967568, 20, 20,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.063606673236323297, 20, 20,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.23442909509776316, 20, 20,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.49921030481087009, 20, 20,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.63956545825776223, 20, 20,
- 1.5707963267948966 },
- { 0.49921030481087064, 20, 20,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.49921030481087025, 20, 20,
+ 1.7278759594743862, 0.0 },
{ 0.23442909509776336, 20, 20,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.063606673236323380, 20, 20,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.0092265192458967742, 20, 20,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.00062457564282984766, 20, 20,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 1.5497395129387791e-05, 20, 20,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 8.8474944184472617e-08, 20, 20,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 4.0321091681531780e-11, 20, 20,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 4.9264471419250786e-17, 20, 20,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 20, 20,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler021 = 2.5000000000000020e-13;
+const double toler021 = 2.5000000000000013e-09;
// Test data for l=50, m=0.
// max(|f - f_GSL|): 4.8849813083506888e-15
-// max(|f - f_GSL| / |f_GSL|): 9.2046020313085697e-15
+// max(|f - f_GSL| / |f_GSL|): 9.1896305557688689e-15
+// mean(f - f_GSL): -2.3807014560786467e-16
+// variance(f - f_GSL): 2.9755631970618689e-33
+// stddev(f - f_GSL): 5.4548723147859921e-17
const testcase_sph_legendre<double>
data022[21] =
{
{ 2.8350175706934717, 50, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.53157537495174900, 50, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.46056183476301255, 50, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.24876032079677909, 50, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.36926172901532522, 50, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.14571730283563575, 50, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.33636199170850806, 50, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.079132716267091507, 50, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.32232921941301451, 50, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.025253991969481544, 50, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.31830208724152359, 50, 0,
- 1.5707963267948966 },
- { 0.025253991969476332, 50, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.025253991969479882, 50, 0,
+ 1.7278759594743862, 0.0 },
{ 0.32232921941301479, 50, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.079132716267088510, 50, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.33636199170850883, 50, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.14571730283563347, 50, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.36926172901532667, 50, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.24876032079677354, 50, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.46056183476301255, 50, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.53157537495172758, 50, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 2.8350175706934717, 50, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler022 = 5.0000000000000039e-13;
// Test data for l=50, m=1.
-// max(|f - f_GSL|): 4.2743586448068527e-15
-// max(|f - f_GSL| / |f_GSL|): 1.3104848798660735e-14
+// max(|f - f_GSL|): 5.9952043329758453e-15
+// max(|f - f_GSL| / |f_GSL|): 1.3785620164824931e-14
+// mean(f - f_GSL): -2.5938246259843691e-16
+// variance(f - f_GSL): 3.5321612499405497e-33
+// stddev(f - f_GSL): 5.9431988440069454e-17
const testcase_sph_legendre<double>
data023[21] =
{
{ 0.0000000000000000, 50, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.63751752155226260, 50, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.32616619317604606, 50, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.40649930826162850, 50, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.18473991408344057, 50, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.35083930302013117, 50, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.10755382110947125, 50, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.32822568316499900, 50, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.050286056609797389, 50, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.31935368562159644, 50, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -9.8421602686195941e-16, 50, 1,
- 1.5707963267948966 },
- { 0.31935368562159716, 50, 1,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.31935368562159649, 50, 1,
+ 1.7278759594743862, 0.0 },
{ -0.050286056609795446, 50, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.32822568316499912, 50, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.10755382110946902, 50, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.35083930302013205, 50, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.18473991408343635, 50, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.40649930826163011, 50, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.32616619317604606, 50, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.63751752155228247, 50, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 50, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler023 = 1.0000000000000008e-12;
// Test data for l=50, m=2.
-// max(|f - f_GSL|): 7.5495165674510645e-15
-// max(|f - f_GSL| / |f_GSL|): 2.0277903864891892e-14
+// max(|f - f_GSL|): 1.9984014443252818e-14
+// max(|f - f_GSL| / |f_GSL|): 5.0992964130828828e-14
+// mean(f - f_GSL): 2.6400839186770838e-16
+// variance(f - f_GSL): 3.6592726262701066e-33
+// stddev(f - f_GSL): 6.0491921991866868e-17
const testcase_sph_legendre<double>
data024[21] =
{
{ 0.0000000000000000, 50, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.37230261163838724, 50, 2,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.50051599680316194, 50, 2,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.21724795180329495, 50, 2,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.37948127307610924, 50, 2,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.13187372121003396, 50, 2,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.33959009162400228, 50, 2,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.072537503112489563, 50, 2,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32310306941855266, 50, 2,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.023259822816436588, 50, 2,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.31842698506357275, 50, 2,
- 1.5707963267948966 },
- { -0.023259822816431196, 50, 2,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.023259822816434638, 50, 2,
+ 1.7278759594743862, 0.0 },
{ -0.32310306941855316, 50, 2,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.072537503112487453, 50, 2,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.33959009162400267, 50, 2,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.13187372121003124, 50, 2,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.37948127307611107, 50, 2,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.21724795180329090, 50, 2,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.50051599680316194, 50, 2,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.37230261163837081, 50, 2,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 50, 2,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler024 = 2.5000000000000015e-12;
+const double toler024 = 5.0000000000000029e-12;
// Test data for l=50, m=5.
-// max(|f - f_GSL|): 4.3021142204224816e-16
-// max(|f - f_GSL| / |f_GSL|): 8.9548506383410822e-15
+// max(|f - f_GSL|): 2.6789681584205027e-13
+// max(|f - f_GSL| / |f_GSL|): 4.6634220868967357e-13
+// mean(f - f_GSL): -5.8765822895711710e-16
+// variance(f - f_GSL): 1.8130465188203314e-32
+// stddev(f - f_GSL): 1.3464941584798395e-16
const testcase_sph_legendre<double>
data025[21] =
{
{ 0.0000000000000000, 50, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.57750385903193124, 50, 5,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.077360497065588632, 50, 5,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.47707267400540226, 50, 5,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.055370615126630517, 50, 5,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.37629451847202833, 50, 5,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.048042277801960784, 50, 5,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.33619379362228718, 50, 5,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.025265227185718764, 50, 5,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.32083679430964535, 50, 5,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -9.8189201019751884e-16, 50, 5,
- 1.5707963267948966 },
- { 0.32083679430964579, 50, 5,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.32083679430964546, 50, 5,
+ 1.7278759594743862, 0.0 },
{ -0.025265227185716790, 50, 5,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.33619379362228752, 50, 5,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.048042277801958064, 50, 5,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.37629451847202872, 50, 5,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.055370615126626811, 50, 5,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.47707267400540176, 50, 5,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.077360497065588632, 50, 5,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.57750385903191603, 50, 5,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 50, 5,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler025 = 5.0000000000000039e-13;
+const double toler025 = 2.5000000000000014e-11;
// Test data for l=50, m=10.
-// max(|f - f_GSL|): 1.3322676295501878e-15
-// max(|f - f_GSL| / |f_GSL|): 6.0812430149180488e-15
+// max(|f - f_GSL|): 4.1178171983347056e-13
+// max(|f - f_GSL| / |f_GSL|): 7.7009816044492891e-13
+// mean(f - f_GSL): -5.9705382172650518e-14
+// variance(f - f_GSL): 1.8714846467006832e-28
+// stddev(f - f_GSL): 1.3680221660121897e-14
const testcase_sph_legendre<double>
data026[21] =
{
{ 0.0000000000000000, 50, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.15606941844800776, 50, 10,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.53748868836814501, 50, 10,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.49304919025183969, 50, 10,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.26267582750428364, 50, 10,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.22058983666314153, 50, 10,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.32936725160671754, 50, 10,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.092053311559447959, 50, 10,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32542913495935522, 50, 10,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.025673223789103351, 50, 10,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.32150019350255743, 50, 10,
- 1.5707963267948966 },
- { 0.025673223789108836, 50, 10,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.025673223789105259, 50, 10,
+ 1.7278759594743862, 0.0 },
{ -0.32542913495935510, 50, 10,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.092053311559449819, 50, 10,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.32936725160671687, 50, 10,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.22058983666314380, 50, 10,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.26267582750427920, 50, 10,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.49304919025184135, 50, 10,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.53748868836814501, 50, 10,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.15606941844801256, 50, 10,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 50, 10,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler026 = 5.0000000000000039e-13;
+const double toler026 = 5.0000000000000028e-11;
// Test data for l=50, m=20.
-// max(|f - f_GSL|): 4.4408920985006262e-16
-// max(|f - f_GSL| / |f_GSL|): 6.0930911637998029e-15
+// max(|f - f_GSL|): 2.3508306412622915e-11
+// max(|f - f_GSL| / |f_GSL|): 3.6656036441422800e-11
+// mean(f - f_GSL): -5.8943604669388319e-12
+// variance(f - f_GSL): 1.8240329789960964e-24
+// stddev(f - f_GSL): 1.3505676506551222e-12
const testcase_sph_legendre<double>
data027[21] =
{
{ 0.0000000000000000, 50, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.0409598712833246e-07, 50, 20,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.030940518122882274, 50, 20,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.64134588721659802, 50, 20,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.29895244392136405, 50, 20,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.25309324781873871, 50, 20,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.34368634714931717, 50, 20,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.33996764360663945, 50, 20,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.12866267745104024, 50, 20,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.18201114398922874, 50, 20,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.33216683431510857, 50, 20,
- 1.5707963267948966 },
- { -0.18201114398923302, 50, 20,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.18201114398923010, 50, 20,
+ 1.7278759594743862, 0.0 },
{ 0.12866267745103857, 50, 20,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.33996764360663895, 50, 20,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.34368634714931812, 50, 20,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.25309324781874126, 50, 20,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.29895244392136594, 50, 20,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.64134588721659869, 50, 20,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.030940518122882274, 50, 20,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 3.0409598712835887e-07, 50, 20,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 50, 20,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler027 = 5.0000000000000039e-13;
+const double toler027 = 2.5000000000000013e-09;
// Test data for l=50, m=50.
-// max(|f - f_GSL|): 1.2323475573339238e-14
-// max(|f - f_GSL| / |f_GSL|): 1.6099735616249234e-14
+// max(|f - f_GSL|): 9.4587782051291924e-11
+// max(|f - f_GSL| / |f_GSL|): 1.1826459053533750e-10
+// mean(f - f_GSL): 1.0114143295304548e-11
+// variance(f - f_GSL): 5.3705344663925819e-24
+// stddev(f - f_GSL): 2.3174413620181595e-12
const testcase_sph_legendre<double>
data028[21] =
{
{ 0.0000000000000000, 50, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 4.1649039898151844e-41, 50, 50,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 2.5240684647724192e-26, 50, 50,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 5.6927376423967334e-18, 50, 50,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 2.3116239814797057e-12, 50, 50,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 2.3835981241325056e-08, 50, 50,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 1.9992410287270356e-05, 50, 50,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.0024947505670829834, 50, 50,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.065057774647971231, 50, 50,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.43050607056732243, 50, 50,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.79980281171531975, 50, 50,
- 1.5707963267948966 },
- { 0.43050607056732360, 50, 50,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.43050607056732287, 50, 50,
+ 1.7278759594743862, 0.0 },
{ 0.065057774647971398, 50, 50,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.0024947505670829899, 50, 50,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 1.9992410287270427e-05, 50, 50,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 2.3835981241325311e-08, 50, 50,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 2.3116239814797222e-12, 50, 50,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 5.6927376423968952e-18, 50, 50,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 2.5240684647724192e-26, 50, 50,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 4.1649039898161316e-41, 50, 50,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 50, 50,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler028 = 1.0000000000000008e-12;
+const double toler028 = 1.0000000000000005e-08;
// Test data for l=100, m=0.
// max(|f - f_GSL|): 7.5495165674510645e-15
// max(|f - f_GSL| / |f_GSL|): 1.2423065089723510e-14
+// mean(f - f_GSL): -5.7890200569740307e-16
+// variance(f - f_GSL): 1.7594195440524993e-32
+// stddev(f - f_GSL): 1.3264311305350532e-16
const testcase_sph_legendre<double>
data029[21] =
{
{ 3.9993839251484076, 100, 0,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.60770160285935426, 100, 0,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.46193027883955923, 100, 0,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.40218718869815234, 100, 0,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.36960201406910725, 100, 0,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.34953726547378389, 100, 0,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.33646959352497829, 100, 0,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.32784733067663224, 100, 0,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.32235624474047969, 100, 0,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.31929330706601350, 100, 0,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.31830791662110325, 100, 0,
- 1.5707963267948966 },
- { -0.31929330706601405, 100, 0,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.31929330706601333, 100, 0,
+ 1.7278759594743862, 0.0 },
{ 0.32235624474048036, 100, 0,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.32784733067663357, 100, 0,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.33646959352498013, 100, 0,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ -0.34953726547378589, 100, 0,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 0.36960201406911097, 100, 0,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ -0.40218718869815723, 100, 0,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.46193027883955923, 100, 0,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.60770160285939456, 100, 0,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 3.9993839251484076, 100, 0,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler029 = 1.0000000000000008e-12;
// Test data for l=100, m=1.
-// max(|f - f_GSL|): 4.1078251911130792e-15
-// max(|f - f_GSL| / |f_GSL|): 1.5162419336330716e-14
+// max(|f - f_GSL|): 9.4368957093138306e-15
+// max(|f - f_GSL| / |f_GSL|): 1.8557589025285451e-14
+// mean(f - f_GSL): 4.9827866700438584e-16
+// variance(f - f_GSL): 1.3034785574562552e-32
+// stddev(f - f_GSL): 1.1416998543646465e-16
const testcase_sph_legendre<double>
data030[21] =
{
{ 0.0000000000000000, 100, 1,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.50851949013719866, 100, 1,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.33129641402221749, 100, 1,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.24390405750942512, 100, 1,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.18659755088414104, 100, 1,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.14355908970517178, 100, 1,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.10844906813251107, 100, 1,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.078100088690857675, 100, 1,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.050670002998302717, 100, 1,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.024941251747138900, 100, 1,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 1.9587949830851623e-15, 100, 1,
- 1.5707963267948966 },
- { 0.024941251747127875, 100, 1,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.024941251747135025, 100, 1,
+ 1.7278759594743862, 0.0 },
{ -0.050670002998298824, 100, 1,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.078100088690853664, 100, 1,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.10844906813250622, 100, 1,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.14355908970516626, 100, 1,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.18659755088413388, 100, 1,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.24390405750941679, 100, 1,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.33129641402221749, 100, 1,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.50851949013714159, 100, 1,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 1,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
const double toler030 = 1.0000000000000008e-12;
// Test data for l=100, m=2.
-// max(|f - f_GSL|): 2.7755575615628914e-15
-// max(|f - f_GSL| / |f_GSL|): 5.7552022268705475e-15
+// max(|f - f_GSL|): 3.3417713041217212e-14
+// max(|f - f_GSL| / |f_GSL|): 4.9753709567618488e-14
+// mean(f - f_GSL): 2.2706704241738321e-15
+// variance(f - f_GSL): 2.7068706919893296e-31
+// stddev(f - f_GSL): 5.2027595485370356e-16
const testcase_sph_legendre<double>
data031[21] =
{
{ 0.0000000000000000, 100, 2,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.67166274297193962, 100, 2,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.48226933687995360, 100, 2,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.41175421895715525, 100, 2,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.37475021787822438, 100, 2,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.35242909383605225, 100, 2,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.33807110409160063, 100, 2,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.32867180390710077, 100, 2,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32271583790278502, 100, 2,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.31940354677687444, 100, 2,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.31833943693772526, 100, 2,
- 1.5707963267948966 },
- { 0.31940354677687555, 100, 2,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.31940354677687455, 100, 2,
+ 1.7278759594743862, 0.0 },
{ -0.32271583790278552, 100, 2,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.32867180390710193, 100, 2,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.33807110409160157, 100, 2,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.35242909383605503, 100, 2,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.37475021787822776, 100, 2,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.41175421895716052, 100, 2,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.48226933687995360, 100, 2,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.67166274297196660, 100, 2,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 2,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler031 = 5.0000000000000039e-13;
+const double toler031 = 2.5000000000000015e-12;
// Test data for l=100, m=5.
-// max(|f - f_GSL|): 5.9674487573602164e-16
-// max(|f - f_GSL| / |f_GSL|): 8.4413588189215985e-15
+// max(|f - f_GSL|): 7.2913897142257156e-14
+// max(|f - f_GSL| / |f_GSL|): 6.5058686640125909e-13
+// mean(f - f_GSL): -6.7042932052508865e-16
+// variance(f - f_GSL): 2.3597462375535930e-32
+// stddev(f - f_GSL): 1.5361465547120148e-16
const testcase_sph_legendre<double>
data032[21] =
{
{ 0.0000000000000000, 100, 5,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.062564361105902272, 100, 5,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.14179554455879767, 100, 5,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ -0.14356866942905960, 100, 5,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 0.12355483388448550, 100, 5,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ -0.10090029999681642, 100, 5,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.078905134460230675, 100, 5,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.058040182398185071, 100, 5,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.038142759389482424, 100, 5,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.018906264170660478, 100, 5,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 1.9576303042914544e-15, 100, 5,
- 1.5707963267948966 },
- { 0.018906264170649455, 100, 5,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.018906264170657019, 100, 5,
+ 1.7278759594743862, 0.0 },
{ -0.038142759389478365, 100, 5,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.058040182398180429, 100, 5,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.078905134460225707, 100, 5,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.10090029999681013, 100, 5,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.12355483388447824, 100, 5,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.14356866942904906, 100, 5,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.14179554455879767, 100, 5,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.062564361105954577, 100, 5,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 5,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler032 = 5.0000000000000039e-13;
+const double toler032 = 5.0000000000000028e-11;
// Test data for l=100, m=10.
-// max(|f - f_GSL|): 1.7763568394002505e-15
-// max(|f - f_GSL| / |f_GSL|): 4.0853922061744651e-15
+// max(|f - f_GSL|): 5.7953641885433171e-13
+// max(|f - f_GSL| / |f_GSL|): 7.7374954769052653e-13
+// mean(f - f_GSL): -6.5238819637497291e-14
+// variance(f - f_GSL): 2.2344543835392987e-28
+// stddev(f - f_GSL): 1.4948091461920143e-14
const testcase_sph_legendre<double>
data033[21] =
{
{ 0.0000000000000000, 100, 10,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ -0.75366545187996004, 100, 10,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ -0.35914570017276798, 100, 10,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.43480692911578295, 100, 10,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.40862111080315755, 100, 10,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.37832688692909411, 100, 10,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ -0.35484056194773445, 100, 10,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.33821981171196341, 100, 10,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ -0.32729120767830594, 100, 10,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.32110336937091438, 100, 10,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.31910064020036194, 100, 10,
- 1.5707963267948966 },
+ 1.5707963267948966, 0.0 },
{ 0.32110336937091460, 100, 10,
- 1.7278759594743860 },
+ 1.7278759594743862, 0.0 },
{ -0.32729120767830605, 100, 10,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.33821981171196341, 100, 10,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ -0.35484056194773461, 100, 10,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.37832688692909372, 100, 10,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.40862111080315500, 100, 10,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.43480692911577751, 100, 10,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ -0.35914570017276798, 100, 10,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ -0.75366545187997991, 100, 10,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 10,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler033 = 2.5000000000000020e-13;
+const double toler033 = 5.0000000000000028e-11;
// Test data for l=100, m=20.
-// max(|f - f_GSL|): 9.7144514654701197e-16
-// max(|f - f_GSL| / |f_GSL|): 2.8802569343392205e-14
+// max(|f - f_GSL|): 2.0946355760997903e-11
+// max(|f - f_GSL| / |f_GSL|): 3.6659275141028770e-11
+// mean(f - f_GSL): -3.0553633366734021e-12
+// variance(f - f_GSL): 4.9010036875212133e-25
+// stddev(f - f_GSL): 7.0007168829493554e-13
const testcase_sph_legendre<double>
data034[21] =
{
{ 0.0000000000000000, 100, 20,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 0.053569660841553700, 100, 20,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 0.57154926874732348, 100, 20,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.47536909969585633, 100, 20,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.28882554564109075, 100, 20,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.020116179014043743, 100, 20,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.14752195931706563, 100, 20,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ -0.24069428588868366, 100, 20,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.29031796025014306, 100, 20,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.31437256851143458, 100, 20,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.32153954851141792, 100, 20,
- 1.5707963267948966 },
- { -0.31437256851143169, 100, 20,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.31437256851143375, 100, 20,
+ 1.7278759594743862, 0.0 },
{ 0.29031796025014139, 100, 20,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ -0.24069428588868083, 100, 20,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.14752195931706186, 100, 20,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.020116179014049562, 100, 20,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.28882554564109575, 100, 20,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.47536909969585545, 100, 20,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 0.57154926874732348, 100, 20,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 0.053569660841557079, 100, 20,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 20,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler034 = 2.5000000000000015e-12;
+const double toler034 = 2.5000000000000013e-09;
// Test data for l=100, m=50.
-// max(|f - f_GSL|): 8.3266726846886741e-15
-// max(|f - f_GSL| / |f_GSL|): 1.8981734972089879e-14
+// max(|f - f_GSL|): 6.6762040340506701e-11
+// max(|f - f_GSL| / |f_GSL|): 1.1826653227584161e-10
+// mean(f - f_GSL): 5.1081697108914716e-12
+// variance(f - f_GSL): 1.3699033842516256e-24
+// stddev(f - f_GSL): 1.1704287181420428e-12
const testcase_sph_legendre<double>
data035[21] =
{
{ 0.0000000000000000, 100, 50,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 3.3047910392590615e-21, 100, 50,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 1.0592655372554981e-07, 100, 50,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 0.080418744223952773, 100, 50,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ -0.56450600580393095, 100, 50,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 0.33338739844742110, 100, 50,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 0.39741714816514706, 100, 50,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 0.35223993750972243, 100, 50,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.17885891940721577, 100, 50,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ -0.15341660126461967, 100, 50,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ -0.34175924303503102, 100, 50,
- 1.5707963267948966 },
- { -0.15341660126462869, 100, 50,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { -0.15341660126462270, 100, 50,
+ 1.7278759594743862, 0.0 },
{ 0.17885891940721302, 100, 50,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 0.35223993750972105, 100, 50,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 0.39741714816514595, 100, 50,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 0.33338739844741666, 100, 50,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ -0.56450600580392973, 100, 50,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 0.080418744223953911, 100, 50,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 1.0592655372554981e-07, 100, 50,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 3.3047910392597822e-21, 100, 50,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 50,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler035 = 1.0000000000000008e-12;
+const double toler035 = 1.0000000000000005e-08;
// Test data for l=100, m=100.
-// max(|f - f_GSL|): 2.3314683517128287e-14
-// max(|f - f_GSL| / |f_GSL|): 2.6593512237122742e-14
+// max(|f - f_GSL|): 7.2644990023462697e-10
+// max(|f - f_GSL| / |f_GSL|): 7.6519585219792438e-10
+// mean(f - f_GSL): -5.5096440458737548e-11
+// variance(f - f_GSL): 1.5936993193921863e-22
+// stddev(f - f_GSL): 1.2624180446239615e-11
const testcase_sph_legendre<double>
data036[21] =
{
{ 0.0000000000000000, 100, 100,
- 0.0000000000000000 },
+ 0.0000000000000000, 0.0 },
{ 2.5744136608862186e-81, 100, 100,
- 0.15707963267948966 },
+ 0.15707963267948966, 0.0 },
{ 9.4551974868956498e-52, 100, 100,
- 0.31415926535897931 },
+ 0.31415926535897931, 0.0 },
{ 4.8096190703397596e-35, 100, 100,
- 0.47123889803846897 },
+ 0.47123889803846897, 0.0 },
{ 7.9305393636342891e-24, 100, 100,
- 0.62831853071795862 },
+ 0.62831853071795862, 0.0 },
{ 8.4320740610944858e-16, 100, 100,
- 0.78539816339744828 },
+ 0.78539816339744828, 0.0 },
{ 5.9319660146027522e-10, 100, 100,
- 0.94247779607693793 },
+ 0.94247779607693793, 0.0 },
{ 9.2368225946797243e-06, 100, 100,
- 1.0995574287564276 },
+ 1.0995574287564276, 0.0 },
{ 0.0062815489742044095, 100, 100,
- 1.2566370614359172 },
+ 1.2566370614359172, 0.0 },
{ 0.27505966018176986, 100, 100,
- 1.4137166941154069 },
+ 1.4137166941154069, 0.0 },
{ 0.94936713998764621, 100, 100,
- 1.5707963267948966 },
- { 0.27505966018177130, 100, 100,
- 1.7278759594743860 },
+ 1.5707963267948966, 0.0 },
+ { 0.27505966018177042, 100, 100,
+ 1.7278759594743862, 0.0 },
{ 0.0062815489742044433, 100, 100,
- 1.8849555921538759 },
+ 1.8849555921538759, 0.0 },
{ 9.2368225946797734e-06, 100, 100,
- 2.0420352248333655 },
+ 2.0420352248333655, 0.0 },
{ 5.9319660146027946e-10, 100, 100,
- 2.1991148575128552 },
+ 2.1991148575128552, 0.0 },
{ 8.4320740610946652e-16, 100, 100,
- 2.3561944901923448 },
+ 2.3561944901923448, 0.0 },
{ 7.9305393636344023e-24, 100, 100,
- 2.5132741228718345 },
+ 2.5132741228718345, 0.0 },
{ 4.8096190703400333e-35, 100, 100,
- 2.6703537555513241 },
+ 2.6703537555513241, 0.0 },
{ 9.4551974868956498e-52, 100, 100,
- 2.8274333882308138 },
+ 2.8274333882308138, 0.0 },
{ 2.5744136608873895e-81, 100, 100,
- 2.9845130209103035 },
+ 2.9845130209103035, 0.0 },
{ 0.0000000000000000, 100, 100,
- 3.1415926535897931 },
+ 3.1415926535897931, 0.0 },
};
-const double toler036 = 2.5000000000000015e-12;
+const double toler036 = 5.0000000000000024e-08;
-template<typename Tp, unsigned int Num>
+template<typename Ret, unsigned int Num>
void
- test(const testcase_sph_legendre<Tp> (&data)[Num], Tp toler)
+ test(const testcase_sph_legendre<Ret> (&data)[Num], Ret toler)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ const Ret eps = std::numeric_limits<Ret>::epsilon();
+ Ret max_abs_diff = -Ret(1);
+ Ret max_abs_frac = -Ret(1);
unsigned int num_datum = Num;
for (unsigned int i = 0; i < num_datum; ++i)
{
- const Tp f = std::sph_legendre(data[i].l, data[i].m,
+ const Ret f = std::sph_legendre(data[i].l, data[i].m,
data[i].theta);
- const Tp f0 = data[i].f0;
- const Tp diff = f - f0;
+ const Ret f0 = data[i].f0;
+ const Ret diff = f - f0;
if (std::abs(diff) > max_abs_diff)
max_abs_diff = std::abs(diff);
- if (std::abs(f0) > Tp(10) * eps
- && std::abs(f) > Tp(10) * eps)
+ if (std::abs(f0) > Ret(10) * eps
+ && std::abs(f) > Ret(10) * eps)
{
- const Tp frac = diff / f0;
+ const Ret frac = diff / f0;
if (std::abs(frac) > max_abs_frac)
max_abs_frac = std::abs(frac);
}
diff --git a/libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc b/libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc
index 371501d0e05..65860f20259 100644
--- a/libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc
+++ b/libstdc++-v3/testsuite/special_functions/21_sph_neumann/check_value.cc
@@ -39,234 +39,258 @@
// Test data for n=0.
-// max(|f - f_GSL|): 4.4408920985006262e-16
+// max(|f - f_GSL|): 1.3322676295501878e-15
// max(|f - f_GSL| / |f_GSL|): 4.8209634107822837e-15
+// mean(f - f_GSL): 2.4806545706468343e-17
+// variance(f - f_GSL): 4.2181233491990142e-34
+// stddev(f - f_GSL): 2.0538070379660828e-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;
// Test data for n=1.
// max(|f - f_GSL|): 3.5527136788005009e-15
// max(|f - f_GSL| / |f_GSL|): 3.7472288263398607e-15
+// mean(f - f_GSL): -2.2655488596257100e-16
+// variance(f - f_GSL): 2.8436075542112773e-33
+// stddev(f - f_GSL): 5.3325486910212804e-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;
// Test data for n=2.
-// max(|f - f_GSL|): 5.6843418860808015e-14
+// max(|f - f_GSL|): 7.1054273576010019e-15
// max(|f - f_GSL| / |f_GSL|): 2.4702749396271158e-15
+// mean(f - f_GSL): -6.4887331618912471e-16
+// variance(f - f_GSL): 2.9696899867965245e-32
+// stddev(f - f_GSL): 1.7232788476612031e-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
+// mean(f - f_GSL): -2.3308027730095658e-11
+// variance(f - f_GSL): 3.0097307122544499e-23
+// stddev(f - f_GSL): 5.4861012679811610e-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| / |f_GSL|): 1.5255233644081723e-15
+// mean(f - f_GSL): -0.025048373589424067
+// variance(f - f_GSL): 3.4761742015848689e-05
+// stddev(f - f_GSL): 0.0058959089219431373
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
+// 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
+// mean(f - f_GSL): 1.0429624198832551e+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.3243260716629126e+54, 50, 3.0000000000000000, 0.0 },
+ { -2.2519472094129334e+52, 50, 3.2500000000000000, 0.0 },
+ { -5.1861507201100364e+50, 50, 3.5000000000000000, 0.0 },
+ { -1.5513212909461383e+49, 50, 3.7500000000000000, 0.0 },
+ { -5.8276471407899822e+47, 50, 4.0000000000000000, 0.0 },
+ { -2.6745414086542661e+46, 50, 4.2500000000000000, 0.0 },
+ { -1.4657308996352322e+45, 50, 4.5000000000000000, 0.0 },
+ { -9.4102674366685358e+43, 50, 4.7500000000000000, 0.0 },
+ { -6.9641091882698388e+42, 50, 5.0000000000000000, 0.0 },
};
const double toler007 = 5.0000000000000029e-12;
// Test data for n=100.
// max(|f - f_GSL|): 2.4840289476811343e+232
// max(|f - f_GSL| / |f_GSL|): 9.0555289224453335e-14
+// 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.4102229953033134e+138, 100, 3.0000000000000000, 0.0 },
+ { -1.3651904154045514e+135, 100, 3.2500000000000000, 0.0 },
+ { -7.6980749101080730e+131, 100, 3.5000000000000000, 0.0 },
+ { -7.2790553499254927e+128, 100, 3.7500000000000000, 0.0 },
+ { -1.0796647795893970e+126, 100, 4.0000000000000000, 0.0 },
+ { -2.3785795774445298e+123, 100, 4.2500000000000000, 0.0 },
+ { -7.4391596631955861e+120, 100, 4.5000000000000000, 0.0 },
+ { -3.1802258278279400e+118, 100, 4.7500000000000000, 0.0 },
+ { -1.7997139826259740e+116, 100, 5.0000000000000000, 0.0 },
};
const double toler008 = 5.0000000000000029e-12;
// sph_neumann
@@ -274,255 +298,279 @@ const double toler008 = 5.0000000000000029e-12;
// Test data for n=0.
// max(|f - f_GSL|): 1.0165479569224090e-15
// max(|f - f_GSL| / |f_GSL|): 5.9073915926662418e-13
+// mean(f - f_GSL): 5.5652097513680938e-17
+// variance(f - f_GSL): 3.4053497532755181e-33
+// stddev(f - f_GSL): 5.8355374673422489e-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| / |f_GSL|): 3.5182047773188613e-13
+// mean(f - f_GSL): 3.3003114130458753e-17
+// variance(f - f_GSL): 1.2241700649125932e-32
+// stddev(f - f_GSL): 1.1064221910792430e-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
+// mean(f - f_GSL): -4.9613091412936685e-17
+// variance(f - f_GSL): 2.9225320032826861e-33
+// stddev(f - f_GSL): 5.4060447679266271e-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
+// mean(f - f_GSL): 1.8474805019152996e-17
+// variance(f - f_GSL): 1.5114883927750998e-32
+// stddev(f - f_GSL): 1.2294260420111083e-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| / |f_GSL|): 7.3655649039219020e-13
+// mean(f - f_GSL): -6.2137794909489228e-16
+// variance(f - f_GSL): 2.2479603690495691e-32
+// stddev(f - f_GSL): 1.4993199688690767e-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
+// mean(f - f_GSL): -5.3644294158292414e-08
+// variance(f - f_GSL): 1.5942992976847171e-16
+// stddev(f - f_GSL): 1.2626556528542202e-08
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
+// mean(f - f_GSL): -2.5501564809278835e+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.9641091882698388e+42, 50, 5.0000000000000000, 0.0 },
+ { -4.5282272723512023e+27, 50, 10.000000000000000, 0.0 },
+ { -9.0004902645887037e+18, 50, 15.000000000000000, 0.0 },
+ { -9542541667002.5117, 50, 20.000000000000000, 0.0 },
+ { -363518140.71026671, 50, 25.000000000000000, 0.0 },
+ { -152551.57233157745, 50, 30.000000000000000, 0.0 },
+ { -386.26599186208625, 50, 35.000000000000000, 0.0 },
+ { -4.3290507947291035, 50, 40.000000000000000, 0.0 },
+ { -0.19968460851503758, 50, 45.000000000000000, 0.0 },
+ { -0.041900001504607758, 50, 50.000000000000000, 0.0 },
+ { 0.010696040672421902, 50, 55.000000000000000, 0.0 },
+ { 0.0078198768555267188, 50, 60.000000000000000, 0.0 },
+ { -0.010088474938191242, 50, 65.000000000000000, 0.0 },
+ { 0.0062423671279824801, 50, 70.000000000000000, 0.0 },
+ { 0.0011284242794941733, 50, 75.000000000000000, 0.0 },
+ { -0.0093934266037485562, 50, 80.000000000000000, 0.0 },
+ { 0.013108079602843424, 50, 85.000000000000000, 0.0 },
+ { -0.0075396607225722626, 50, 90.000000000000000, 0.0 },
+ { -0.0042605703552836558, 50, 95.000000000000000, 0.0 },
+ { 0.010747822973682470, 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
+// mean(f - f_GSL): 1.5398245102472405e+101
+// 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.7997139826259740e+116, 100, 5.0000000000000000, 0.0 },
+ { -8.5732263093296268e+85, 100, 10.000000000000000, 0.0 },
+ { -1.9270658593711677e+68, 100, 15.000000000000000, 0.0 },
+ { -7.2208893582952385e+55, 100, 20.000000000000000, 0.0 },
+ { -2.0868752613007946e+46, 100, 25.000000000000000, 0.0 },
+ { -4.2496124023612646e+38, 100, 30.000000000000000, 0.0 },
+ { -1.7042898348910271e+32, 100, 35.000000000000000, 0.0 },
+ { -6.3021565260724554e+26, 100, 40.000000000000000, 0.0 },
+ { -1.3199917400494367e+22, 100, 45.000000000000000, 0.0 },
+ { -1.1256928913265988e+18, 100, 50.000000000000000, 0.0 },
+ { -309801083340343.25, 100, 55.000000000000000, 0.0 },
+ { -232585620046.64737, 100, 60.000000000000000, 0.0 },
+ { -421135935.93756074, 100, 65.000000000000000, 0.0 },
+ { -1680637.4531202621, 100, 70.000000000000000, 0.0 },
+ { -13868.302591128844, 100, 75.000000000000000, 0.0 },
+ { -227.24385709173322, 100, 80.000000000000000, 0.0 },
+ { -7.2807038787138731, 100, 85.000000000000000, 0.0 },
+ { -0.46648154448250878, 100, 90.000000000000000, 0.0 },
+ { -0.067270772720654556, 100, 95.000000000000000, 0.0 },
+ { -0.022983850491562267, 100, 100.00000000000000, 0.0 },
};
const double toler016 = 2.5000000000000015e-12;
-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)
{
bool test __attribute__((unused)) = true;
- const Tp eps = std::numeric_limits<Tp>::epsilon();
- Tp max_abs_diff = -Tp(1);
- Tp max_abs_frac = -Tp(1);
+ 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);
}
diff --git a/libstdc++-v3/testsuite/util/specfun_testcase.h b/libstdc++-v3/testsuite/util/specfun_testcase.h
index d73b0ab031c..b1a434bb2d2 100644
--- a/libstdc++-v3/testsuite/util/specfun_testcase.h
+++ b/libstdc++-v3/testsuite/util/specfun_testcase.h
@@ -1,4 +1,4 @@
-// Copyright (C) 2015 Free Software Foundation, Inc.
+// Copyright (C) 2015-2016 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
@@ -15,17 +15,19 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// testcase.h
+// specfun_testcase.h
//
-// These are little PODs for special function inputs and
-// expexted results for the testsuite.
+// These are little PODs for special function inputs and
+// expexted results for the testsuite.
//
#ifndef _GLIBCXX_SPECFUN_TESTCASE_H
#define _GLIBCXX_SPECFUN_TESTCASE_H
-// Associated Laguerre polynomials.
+#include <complex>
+
+// Associated Laguerre polynomials.
template<typename _Tp>
struct testcase_assoc_laguerre
{
@@ -36,7 +38,7 @@ template<typename _Tp>
_Tp f;
};
-// Associated Legendre functions.
+// Associated Legendre functions.
template<typename _Tp>
struct testcase_assoc_legendre
{
@@ -47,7 +49,7 @@ template<typename _Tp>
_Tp f;
};
-// Beta function.
+// Beta function.
template<typename _Tp>
struct testcase_beta
{
@@ -57,7 +59,7 @@ template<typename _Tp>
_Tp f;
};
-// Complete elliptic integrals of the first kind.
+// Complete elliptic integrals of the first kind.
template<typename _Tp>
struct testcase_comp_ellint_1
{
@@ -66,7 +68,7 @@ template<typename _Tp>
_Tp f;
};
-// Complete elliptic integrals of the second kind.
+// Complete elliptic integrals of the second kind.
template<typename _Tp>
struct testcase_comp_ellint_2
{
@@ -75,7 +77,7 @@ template<typename _Tp>
_Tp f;
};
-// Complete elliptic integrals of the third kind.
+// Complete elliptic integrals of the third kind.
template<typename _Tp>
struct testcase_comp_ellint_3
{
@@ -85,7 +87,16 @@ template<typename _Tp>
_Tp f;
};
-// Confluent hypergeometric functions.
+// Complete elliptic D integrals.
+template<typename _Tp>
+ struct testcase_comp_ellint_d
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp f;
+ };
+
+// Confluent hypergeometric functions.
template<typename _Tp>
struct testcase_conf_hyperg
{
@@ -96,7 +107,17 @@ template<typename _Tp>
_Tp f;
};
-// Generic cylindrical Bessel functions.
+// Confluent hypergeometric functions.
+template<typename _Tp>
+ struct testcase_conf_hyperg_lim
+ {
+ _Tp f0;
+ _Tp c;
+ _Tp x;
+ _Tp f;
+ };
+
+// Generic cylindrical Bessel functions.
template<typename _Tp>
struct testcase_cyl_bessel
{
@@ -106,7 +127,7 @@ template<typename _Tp>
_Tp f;
};
-// Regular modified cylindrical Bessel functions.
+// Regular modified cylindrical Bessel functions.
template<typename _Tp>
struct testcase_cyl_bessel_i
{
@@ -116,7 +137,7 @@ template<typename _Tp>
_Tp f;
};
-// Cylindrical Bessel functions (of the first kind).
+// Cylindrical Bessel functions (of the first kind).
template<typename _Tp>
struct testcase_cyl_bessel_j
{
@@ -126,7 +147,7 @@ template<typename _Tp>
_Tp f;
};
-// Irregular modified cylindrical Bessel functions.
+// Irregular modified cylindrical Bessel functions.
template<typename _Tp>
struct testcase_cyl_bessel_k
{
@@ -136,7 +157,7 @@ template<typename _Tp>
_Tp f;
};
-// Cylindrical Neumann functions.
+// Cylindrical Neumann functions.
template<typename _Tp>
struct testcase_cyl_neumann
{
@@ -146,7 +167,7 @@ template<typename _Tp>
_Tp f;
};
-// Elliptic integrals of the first kind.
+// Elliptic integrals of the first kind.
template<typename _Tp>
struct testcase_ellint_1
{
@@ -156,7 +177,7 @@ template<typename _Tp>
_Tp f;
};
-// Elliptic integrals of the second kind.
+// Elliptic integrals of the second kind.
template<typename _Tp>
struct testcase_ellint_2
{
@@ -166,7 +187,7 @@ template<typename _Tp>
_Tp f;
};
-// Elliptic integrals of the third kind.
+// Elliptic integrals of the third kind.
template<typename _Tp>
struct testcase_ellint_3
{
@@ -177,7 +198,37 @@ template<typename _Tp>
_Tp f;
};
-// Exponential integral.
+// Elliptic D integrals.
+template<typename _Tp>
+ struct testcase_ellint_d
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp phi;
+ _Tp f;
+ };
+
+// Heuman lambda functions.
+template<typename _Tp>
+ struct testcase_heuman_lambda
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp phi;
+ _Tp f;
+ };
+
+// Jacobi zeta functions.
+template<typename _Tp>
+ struct testcase_jacobi_zeta
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp phi;
+ _Tp f;
+ };
+
+// Exponential integral.
template<typename _Tp>
struct testcase_expint
{
@@ -186,7 +237,7 @@ template<typename _Tp>
_Tp f;
};
-// Hermite polynomials
+// Hermite polynomials
template<typename _Tp>
struct testcase_hermite
{
@@ -196,7 +247,7 @@ template<typename _Tp>
_Tp f;
};
-// Hypergeometric functions.
+// Hypergeometric functions.
template<typename _Tp>
struct testcase_hyperg
{
@@ -208,7 +259,7 @@ template<typename _Tp>
_Tp f;
};
-// Laguerre polynomials.
+// Laguerre polynomials.
template<typename _Tp>
struct testcase_laguerre
{
@@ -218,7 +269,7 @@ template<typename _Tp>
_Tp f;
};
-// Legendre polynomials.
+// Legendre polynomials.
template<typename _Tp>
struct testcase_legendre
{
@@ -228,7 +279,7 @@ template<typename _Tp>
_Tp f;
};
-// Riemann zeta function.
+// Riemann zeta function.
template<typename _Tp>
struct testcase_riemann_zeta
{
@@ -237,7 +288,7 @@ template<typename _Tp>
_Tp f;
};
-// Hurwitz zeta function.
+// Hurwitz zeta function.
template<typename _Tp>
struct testcase_hurwitz_zeta
{
@@ -247,7 +298,7 @@ template<typename _Tp>
_Tp f;
};
-// Spherical Bessel functions.
+// Spherical Bessel functions.
template<typename _Tp>
struct testcase_sph_bessel
{
@@ -257,7 +308,7 @@ template<typename _Tp>
_Tp f;
};
-// Regular modified spherical Bessel functions.
+// Regular modified spherical Bessel functions.
template<typename _Tp>
struct testcase_sph_bessel_i
{
@@ -267,7 +318,7 @@ template<typename _Tp>
_Tp f;
};
-// Irregular modified spherical Bessel functions.
+// Irregular modified spherical Bessel functions.
template<typename _Tp>
struct testcase_sph_bessel_k
{
@@ -277,7 +328,7 @@ template<typename _Tp>
_Tp f;
};
-// Spherical Legendre functions.
+// Spherical Legendre functions.
template<typename _Tp>
struct testcase_sph_legendre
{
@@ -288,7 +339,7 @@ template<typename _Tp>
_Tp f;
};
-// Spherical Neumann functions.
+// Spherical Neumann functions.
template<typename _Tp>
struct testcase_sph_neumann
{
@@ -298,7 +349,7 @@ template<typename _Tp>
_Tp f;
};
-// Airy Ai functions.
+// Airy Ai functions.
template<typename _Tp>
struct testcase_airy_ai
{
@@ -307,7 +358,7 @@ template<typename _Tp>
_Tp f;
};
-// Airy Bi functions.
+// Airy Bi functions.
template<typename _Tp>
struct testcase_airy_bi
{
@@ -316,27 +367,47 @@ template<typename _Tp>
_Tp f;
};
-// Upper incomplete gamma functions.
+// Upper incomplete gamma functions.
+template<typename _Tp>
+ struct testcase_tgamma
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp x;
+ _Tp f;
+ };
+
+// Lower incomplete gamma functions.
template<typename _Tp>
- struct testcase_gamma_u
+ struct testcase_tgamma_lower
{
_Tp f0;
- _Tp n;
+ _Tp a;
_Tp x;
_Tp f;
};
-// Lower incomplete gamma functions.
+// Regularized upper incomplete gamma functions.
template<typename _Tp>
- struct testcase_gamma_l
+ struct testcase_qgamma
{
_Tp f0;
- _Tp n;
+ _Tp a;
_Tp x;
_Tp f;
};
-// Dilogarithm functions.
+// Regularized lower incomplete gamma functions.
+template<typename _Tp>
+ struct testcase_pgamma
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp x;
+ _Tp f;
+ };
+
+// Dilogarithm functions.
template<typename _Tp>
struct testcase_dilog
{
@@ -345,7 +416,7 @@ template<typename _Tp>
_Tp f;
};
-// Digamma functions.
+// Digamma functions.
template<typename _Tp>
struct testcase_gamma
{
@@ -355,7 +426,7 @@ template<typename _Tp>
};
template<typename _Tp>
- struct testcase_comp_ellint_rf
+ struct testcase_ellint_rc
{
_Tp f0;
_Tp x;
@@ -364,7 +435,7 @@ template<typename _Tp>
};
template<typename _Tp>
- struct testcase_ellint_rf
+ struct testcase_ellint_rd
{
_Tp f0;
_Tp x;
@@ -374,18 +445,16 @@ template<typename _Tp>
};
template<typename _Tp>
- struct testcase_ellint_rj
+ struct testcase_comp_ellint_rf
{
_Tp f0;
_Tp x;
_Tp y;
- _Tp z;
- _Tp p;
_Tp f;
};
template<typename _Tp>
- struct testcase_ellint_rd
+ struct testcase_ellint_rf
{
_Tp f0;
_Tp x;
@@ -413,4 +482,540 @@ template<typename _Tp>
_Tp f;
};
+template<typename _Tp>
+ struct testcase_ellint_rj
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp y;
+ _Tp z;
+ _Tp p;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_psi
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_sinint
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_cosint
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_sinhint
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_coshint
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_dawson
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_jacobi_sn
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp u;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_jacobi_cn
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp u;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_jacobi_dn
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp u;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_expint_en
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_fresnel_c
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_fresnel_s
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_sinc
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+template<typename _Tp>
+ struct testcase_sinc_pi
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+// Log upper Pochhammer symbol.
+template<typename _Tp>
+ struct testcase_lpochhammer
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp x;
+ _Tp f;
+ };
+
+// Upper Pochhammer symbols.
+template<typename _Tp>
+ struct testcase_pochhammer
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp x;
+ _Tp f;
+ };
+
+// Log lower Pochhammer symbol.
+template<typename _Tp>
+ struct testcase_lpochhammer_lower
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp x;
+ _Tp f;
+ };
+
+// Lower Pochhammer symbol.
+template<typename _Tp>
+ struct testcase_pochhammer_lower
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp x;
+ _Tp f;
+ };
+
+// Legendre functions of the second kind.
+template<typename _Tp>
+ struct testcase_legendre_q
+ {
+ _Tp f0;
+ unsigned int l;
+ _Tp x;
+ _Tp f;
+ };
+
+// Factorial.
+template<typename _Tp>
+ struct testcase_factorial
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp f;
+ };
+
+// Log factorial.
+template<typename _Tp>
+ struct testcase_lfactorial
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp f;
+ };
+
+// Double factorial.
+template<typename _Tp>
+ struct testcase_double_factorial
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp f;
+ };
+
+// Log double factorial.
+template<typename _Tp>
+ struct testcase_ldouble_factorial
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp f;
+ };
+
+// Binomial coefficient.
+template<typename _Tp>
+ struct testcase_bincoef
+ {
+ _Tp f0;
+ unsigned int n;
+ unsigned int k;
+ _Tp f;
+ };
+
+// Log binomial coefficient.
+template<typename _Tp>
+ struct testcase_lbincoef
+ {
+ _Tp f0;
+ unsigned int n;
+ unsigned int k;
+ _Tp f;
+ };
+
+// Gegenbauer polynomials.
+template<typename _Tp>
+ struct testcase_gegenbauer
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp alpha;
+ _Tp x;
+ _Tp f;
+ };
+
+// Chebyshev polynomials of the first kind.
+template<typename _Tp>
+ struct testcase_chebyshev_t
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp x;
+ _Tp f;
+ };
+
+// Chebyshev polynomials of the second kind.
+template<typename _Tp>
+ struct testcase_chebyshev_u
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp x;
+ _Tp f;
+ };
+
+// Chebyshev polynomials of the third kind.
+template<typename _Tp>
+ struct testcase_chebyshev_v
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp x;
+ _Tp f;
+ };
+
+// Chebyshev polynomials of the fourth kind.
+template<typename _Tp>
+ struct testcase_chebyshev_w
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp x;
+ _Tp f;
+ };
+
+// Zernike polynomials.
+template<typename _Tp>
+ struct testcase_zernike
+ {
+ _Tp f0;
+ unsigned int n;
+ int m;
+ _Tp rho;
+ _Tp phi;
+ _Tp f;
+ };
+
+// Radial polynomials.
+template<typename _Tp>
+ struct testcase_radpoly
+ {
+ _Tp f0;
+ unsigned int n;
+ int m;
+ _Tp rho;
+ _Tp f;
+ };
+
+// Incomplete beta function.
+template<typename _Tp>
+ struct testcase_ibeta
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp b;
+ _Tp x;
+ _Tp f;
+ };
+
+// Complementary beta function.
+template<typename _Tp>
+ struct testcase_ibetac
+ {
+ _Tp f0;
+ _Tp a;
+ _Tp b;
+ _Tp x;
+ _Tp f;
+ };
+
+// Cylindrical Hankel functions.
+template<typename _Tp>
+ struct testcase_cyl_hankel_1
+ {
+ std::complex<_Tp> f0;
+ _Tp nu;
+ _Tp x;
+ std::complex<_Tp> f;
+ };
+
+// Cylindrical Hankel functions.
+template<typename _Tp>
+ struct testcase_cyl_hankel_2
+ {
+ std::complex<_Tp> f0;
+ _Tp nu;
+ _Tp x;
+ std::complex<_Tp> f;
+ };
+
+// Spherical Hankel functions.
+template<typename _Tp>
+ struct testcase_sph_hankel_1
+ {
+ std::complex<_Tp> f0;
+ unsigned int n;
+ _Tp x;
+ std::complex<_Tp> f;
+ };
+
+// Spherical Hankel functions.
+template<typename _Tp>
+ struct testcase_sph_hankel_2
+ {
+ std::complex<_Tp> f0;
+ unsigned int n;
+ _Tp x;
+ std::complex<_Tp> f;
+ };
+
+// Spherical Harmonic functions.
+template<typename _Tp>
+ struct testcase_sph_harmonic
+ {
+ std::complex<_Tp> f0;
+ unsigned int l;
+ int m;
+ _Tp theta;
+ _Tp phi;
+ std::complex<_Tp> f;
+ };
+
+// Jacobi polynomials.
+template<typename _Tp>
+ struct testcase_jacobi
+ {
+ _Tp f0;
+ unsigned int n;
+ _Tp alpha;
+ _Tp beta;
+ _Tp x;
+ _Tp f;
+ };
+
+// Polylogarithm functions.
+template<typename _Tp>
+ struct testcase_polylog
+ {
+ std::complex<_Tp> f0;
+ _Tp s;
+ std::complex<_Tp> w;
+ std::complex<_Tp> f;
+ };
+
+// Clausen functions.
+template<typename _Tp>
+ struct testcase_clausen
+ {
+ std::complex<_Tp> f0;
+ unsigned int m;
+ std::complex<_Tp> w;
+ std::complex<_Tp> f;
+ };
+
+// Dirichlet eta function.
+template<typename _Tp>
+ struct testcase_dirichlet_eta
+ {
+ _Tp f0;
+ _Tp s;
+ _Tp f;
+ };
+
+// Dirichlet beta function.
+template<typename _Tp>
+ struct testcase_dirichlet_beta
+ {
+ _Tp f0;
+ _Tp s;
+ _Tp f;
+ };
+
+// Dirichlet lambda function.
+template<typename _Tp>
+ struct testcase_dirichlet_lambda
+ {
+ _Tp f0;
+ _Tp s;
+ _Tp f;
+ };
+
+// Owens T functions.
+template<typename _Tp>
+ struct testcase_owens_t
+ {
+ _Tp f0;
+ _Tp h;
+ _Tp a;
+ _Tp f;
+ };
+
+// Clausen Cl_2 function.
+template<typename _Tp>
+ struct testcase_clausen_c
+ {
+ _Tp f0;
+ unsigned int m;
+ _Tp w;
+ _Tp f;
+ };
+
+// Exponential theta_1 functions.
+template<typename _Tp>
+ struct testcase_theta_1
+ {
+ _Tp f0;
+ _Tp nu;
+ _Tp x;
+ _Tp f;
+ };
+
+// Exponential theta_2 functions.
+template<typename _Tp>
+ struct testcase_theta_2
+ {
+ _Tp f0;
+ _Tp nu;
+ _Tp x;
+ _Tp f;
+ };
+
+// Exponential theta_3 functions.
+template<typename _Tp>
+ struct testcase_theta_3
+ {
+ _Tp f0;
+ _Tp nu;
+ _Tp x;
+ _Tp f;
+ };
+
+// Exponential theta_4 functions.
+template<typename _Tp>
+ struct testcase_theta_4
+ {
+ _Tp f0;
+ _Tp nu;
+ _Tp x;
+ _Tp f;
+ };
+
+// Elliptic nome.
+template<typename _Tp>
+ struct testcase_ellnome
+ {
+ _Tp f0;
+ _Tp k;
+ _Tp f;
+ };
+
+// Reperiodized sine function.
+template<typename _Tp>
+ struct testcase_sin_pi
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+// Reperiodized cosine function.
+template<typename _Tp>
+ struct testcase_cos_pi
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
+// Reperiodized tangent function.
+template<typename _Tp>
+ struct testcase_tan_pi
+ {
+ _Tp f0;
+ _Tp x;
+ _Tp f;
+ };
+
#endif // _GLIBCXX_SPECFUN_TESTCASE_H
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index 2f3732ebe2c..323367699e5 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -466,8 +466,13 @@ namespace __gnu_test
void
bitwise_assignment_operators()
{
+#if __cplusplus >= 201103L
+ _Tp a{};
+ _Tp b{};
+#else
_Tp a = _Tp();
_Tp b = _Tp();
+#endif
a |= b; // set
a &= ~b; // clear
a ^= b;