From 2a9e6471f863471665b61772863acb405befbe2a Mon Sep 17 00:00:00 2001 From: Edward Smith-Rowland <3dw4rd@verizon.net> Date: Wed, 12 Oct 2016 16:07:33 +0000 Subject: 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 --- libstdc++-v3/ChangeLog | 42 + libstdc++-v3/doc/html/manual/bugs.html | 9 + libstdc++-v3/doc/html/manual/status.html | 6 +- libstdc++-v3/doc/xml/manual/intro.xml | 7 + libstdc++-v3/doc/xml/manual/status_cxx2017.xml | 11 + libstdc++-v3/include/Makefile.am | 7 + libstdc++-v3/include/Makefile.in | 7 + libstdc++-v3/include/bits/complex128.h | 508 + libstdc++-v3/include/bits/complex_util.h | 329 + libstdc++-v3/include/bits/complex_util.tcc | 230 + libstdc++-v3/include/bits/float128.h | 688 ++ libstdc++-v3/include/bits/float128.tcc | 100 + libstdc++-v3/include/bits/numeric_limits.h | 313 + libstdc++-v3/include/bits/sf_airy.tcc | 2663 ++++ libstdc++-v3/include/bits/sf_bessel.tcc | 904 ++ libstdc++-v3/include/bits/sf_beta.tcc | 325 + libstdc++-v3/include/bits/sf_cardinal.tcc | 133 + libstdc++-v3/include/bits/sf_chebyshev.tcc | 193 + libstdc++-v3/include/bits/sf_dawson.tcc | 252 + libstdc++-v3/include/bits/sf_distributions.tcc | 588 + libstdc++-v3/include/bits/sf_ellint.tcc | 1035 ++ libstdc++-v3/include/bits/sf_expint.tcc | 591 + libstdc++-v3/include/bits/sf_fresnel.tcc | 205 + libstdc++-v3/include/bits/sf_gamma.tcc | 3055 +++++ libstdc++-v3/include/bits/sf_gegenbauer.tcc | 93 + libstdc++-v3/include/bits/sf_hankel.tcc | 1304 ++ libstdc++-v3/include/bits/sf_hermite.tcc | 197 + libstdc++-v3/include/bits/sf_hydrogen.tcc | 95 + libstdc++-v3/include/bits/sf_hyperg.tcc | 846 ++ libstdc++-v3/include/bits/sf_hypint.tcc | 193 + libstdc++-v3/include/bits/sf_jacobi.tcc | 208 + libstdc++-v3/include/bits/sf_laguerre.tcc | 330 + libstdc++-v3/include/bits/sf_legendre.tcc | 367 + libstdc++-v3/include/bits/sf_mod_bessel.tcc | 602 + libstdc++-v3/include/bits/sf_owens_t.tcc | 396 + libstdc++-v3/include/bits/sf_polylog.tcc | 1446 +++ libstdc++-v3/include/bits/sf_theta.tcc | 506 + libstdc++-v3/include/bits/sf_trig.tcc | 414 + libstdc++-v3/include/bits/sf_trigint.tcc | 261 + libstdc++-v3/include/bits/sf_zeta.tcc | 761 ++ libstdc++-v3/include/bits/specfun.h | 4666 ++++++- libstdc++-v3/include/bits/specfun_util.h | 208 + libstdc++-v3/include/bits/stl_algo.h | 80 + libstdc++-v3/include/bits/stl_uninitialized.h | 3 +- libstdc++-v3/include/bits/summation.h | 1230 ++ libstdc++-v3/include/bits/summation.tcc | 352 + libstdc++-v3/include/experimental/algorithm | 53 +- libstdc++-v3/include/ext/cmath | 112 +- libstdc++-v3/include/ext/math_const.h | 426 + libstdc++-v3/include/ext/math_util.h | 98 + libstdc++-v3/include/ext/polynomial.h | 820 ++ libstdc++-v3/include/ext/polynomial.tcc | 353 + libstdc++-v3/include/std/mutex | 23 +- libstdc++-v3/libsupc++/nested_exception.h | 2 +- .../memory_management_tools/1.cc | 32 +- libstdc++-v3/testsuite/25_algorithms/sample/1.cc | 110 + .../testsuite/29_atomics/atomic/cons/assign_neg.cc | 2 +- .../testsuite/29_atomics/atomic/cons/copy_neg.cc | 2 +- .../29_atomics/atomic_integral/cons/assign_neg.cc | 2 +- .../29_atomics/atomic_integral/cons/copy_neg.cc | 2 +- .../atomic_integral/operators/bitwise_neg.cc | 8 +- .../testsuite/30_threads/call_once/dr2442.cc | 45 + libstdc++-v3/testsuite/ext/polynomial/compile.cc | 7 + .../special_functions/conf_hyperg/check_value.cc | 3172 ++--- .../ext/special_functions/hyperg/check_value.cc | 12067 ++++++++++--------- .../01_assoc_laguerre/check_value.cc | 1622 +-- .../02_assoc_legendre/check_value.cc | 2046 ++-- .../special_functions/03_beta/check_value.cc | 312 +- .../04_comp_ellint_1/check_value.cc | 67 +- .../05_comp_ellint_2/check_value.cc | 63 +- .../06_comp_ellint_3/check_value.cc | 489 +- .../07_cyl_bessel_i/check_value.cc | 1258 +- .../special_functions/07_cyl_bessel_i/pr56216.cc | 4 +- .../08_cyl_bessel_j/check_origin.cc | 47 + .../08_cyl_bessel_j/check_value.cc | 1244 +- .../09_cyl_bessel_k/check_value.cc | 1255 +- .../10_cyl_neumann/check_origin.cc | 49 + .../10_cyl_neumann/check_value.cc | 1249 +- .../special_functions/11_ellint_1/check_value.cc | 499 +- .../special_functions/12_ellint_2/check_value.cc | 485 +- .../special_functions/13_ellint_3/check_value.cc | 6792 ++++++----- .../special_functions/14_expint/check_value.cc | 228 +- .../special_functions/15_hermite/check_value.cc | 3428 +++--- .../special_functions/16_laguerre/check_value.cc | 382 +- .../special_functions/17_legendre/check_value.cc | 396 +- .../18_riemann_zeta/check_value.cc | 439 +- .../special_functions/19_sph_bessel/check_value.cc | 652 +- .../20_sph_legendre/check_value.cc | 1860 +-- .../21_sph_neumann/check_value.cc | 716 +- libstdc++-v3/testsuite/util/specfun_testcase.h | 699 +- .../testsuite/util/testsuite_common_types.h | 5 + 91 files changed, 51454 insertions(+), 18927 deletions(-) create mode 100644 libstdc++-v3/include/bits/complex128.h create mode 100644 libstdc++-v3/include/bits/complex_util.h create mode 100644 libstdc++-v3/include/bits/complex_util.tcc create mode 100644 libstdc++-v3/include/bits/float128.h create mode 100644 libstdc++-v3/include/bits/float128.tcc create mode 100644 libstdc++-v3/include/bits/numeric_limits.h create mode 100644 libstdc++-v3/include/bits/sf_airy.tcc create mode 100644 libstdc++-v3/include/bits/sf_bessel.tcc create mode 100644 libstdc++-v3/include/bits/sf_beta.tcc create mode 100644 libstdc++-v3/include/bits/sf_cardinal.tcc create mode 100644 libstdc++-v3/include/bits/sf_chebyshev.tcc create mode 100644 libstdc++-v3/include/bits/sf_dawson.tcc create mode 100644 libstdc++-v3/include/bits/sf_distributions.tcc create mode 100644 libstdc++-v3/include/bits/sf_ellint.tcc create mode 100644 libstdc++-v3/include/bits/sf_expint.tcc create mode 100644 libstdc++-v3/include/bits/sf_fresnel.tcc create mode 100644 libstdc++-v3/include/bits/sf_gamma.tcc create mode 100644 libstdc++-v3/include/bits/sf_gegenbauer.tcc create mode 100644 libstdc++-v3/include/bits/sf_hankel.tcc create mode 100644 libstdc++-v3/include/bits/sf_hermite.tcc create mode 100644 libstdc++-v3/include/bits/sf_hydrogen.tcc create mode 100644 libstdc++-v3/include/bits/sf_hyperg.tcc create mode 100644 libstdc++-v3/include/bits/sf_hypint.tcc create mode 100644 libstdc++-v3/include/bits/sf_jacobi.tcc create mode 100644 libstdc++-v3/include/bits/sf_laguerre.tcc create mode 100644 libstdc++-v3/include/bits/sf_legendre.tcc create mode 100644 libstdc++-v3/include/bits/sf_mod_bessel.tcc create mode 100644 libstdc++-v3/include/bits/sf_owens_t.tcc create mode 100644 libstdc++-v3/include/bits/sf_polylog.tcc create mode 100644 libstdc++-v3/include/bits/sf_theta.tcc create mode 100644 libstdc++-v3/include/bits/sf_trig.tcc create mode 100644 libstdc++-v3/include/bits/sf_trigint.tcc create mode 100644 libstdc++-v3/include/bits/sf_zeta.tcc create mode 100644 libstdc++-v3/include/bits/specfun_util.h create mode 100644 libstdc++-v3/include/bits/summation.h create mode 100644 libstdc++-v3/include/bits/summation.tcc create mode 100644 libstdc++-v3/include/ext/math_const.h create mode 100644 libstdc++-v3/include/ext/math_util.h create mode 100644 libstdc++-v3/include/ext/polynomial.h create mode 100644 libstdc++-v3/include/ext/polynomial.tcc create mode 100644 libstdc++-v3/testsuite/25_algorithms/sample/1.cc create mode 100644 libstdc++-v3/testsuite/30_threads/call_once/dr2442.cc create mode 100644 libstdc++-v3/testsuite/ext/polynomial/compile.cc create mode 100644 libstdc++-v3/testsuite/special_functions/08_cyl_bessel_j/check_origin.cc create mode 100644 libstdc++-v3/testsuite/special_functions/10_cyl_neumann/check_origin.cc (limited to 'libstdc++-v3') 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 + + * 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): 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 * include/bits/stl_list.h (assign(initializer_list)): 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 @@

2441: Exact-width atomic typedefs should be provided

Define the typedefs. +

2442: + call_once() shouldn't DECAY_COPY() +

Remove indirection through call wrapper that made copies + of arguments and forward arguments straight to std::invoke.

2454: Add raw_storage_iterator::base() member @@ -486,6 +490,11 @@ allocator_traits::max_size() default behavior is incorrect

Divide by the object type. +

2484: + rethrow_if_nested() is doubly unimplementable + +

Avoid using dynamic_cast when it would be + ill-formed.

2583: There is no way to supply an allocator for basic_string(str, pos) 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++. P0220R1 - 7 __cpp_lib_boyer_moore_searcher >= 201603 Constant View: A proposal for a std::as_const helper function template + 7 __cpp_lib_boyer_moore_searcher >= 201603 Library Fundamentals V1 TS Components: Sampling + + P0220R1 + + 7 __cpp_lib_sample >= 201603 Constant View: A proposal for a std::as_const helper function template P0007R1 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. Define the typedefs. + 2442: + call_once() shouldn't DECAY_COPY() + + Remove indirection through call wrapper that made copies + of arguments and forward arguments straight to std::invoke. + + 2454: Add raw_storage_iterator::base() member 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 @@ -181,6 +181,17 @@ Feature-testing recommendations for C++. __cpp_lib_boyer_moore_searcher >= 201603 + + Library Fundamentals V1 TS Components: Sampling + + + P0220R1 + + + 7 + __cpp_lib_sample >= 201603 + + Constant View: A proposal for a std::as_const helper function template 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 +// . + +/** @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 +#include + +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& __z) + : _M_value(__z.__rep()) + { } + + _GLIBCXX_CONSTEXPR + complex(const complex& __z) + : _M_value(__z.__rep()) + { } + + _GLIBCXX_CONSTEXPR + complex(const complex& __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 + complex& + operator=(const complex<_Tp>& __z) + { + __real__ _M_value = __z.real(); + __imag__ _M_value = __z.imag(); + return *this; + } + + template + complex& + operator+=(const complex<_Tp>& __z) + { + __real__ _M_value += __z.real(); + __imag__ _M_value += __z.imag(); + return *this; + } + + template + complex& + operator-=(const complex<_Tp>& __z) + { + __real__ _M_value -= __z.real(); + __imag__ _M_value -= __z.imag(); + return *this; + } + + template + complex& + operator*=(const complex<_Tp>& __z) + { + _ComplexT __t; + __real__ __t = __z.real(); + __imag__ __t = __z.imag(); + _M_value *= __t; + return *this; + } + + template + 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::complex(const complex<__float128>& __z) + //: _M_value(__z.__rep()) { } + + //inline _GLIBCXX_CONSTEXPR + //complex::complex(const complex<__float128>& __z) + //: _M_value(__z.__rep()) { } + + //inline _GLIBCXX_CONSTEXPR + //complex::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 +// . + +/** @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 +#include +#include +#include +#include +#include + +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 + struct __num_traits> + { + using __value_type = typename std::complex<_Tp>::value_type; + }; + + /** + * Create a complex number NaN. + */ + template<> + template + struct __make_NaN> + { + 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 + 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 + 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 + 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 + inline constexpr _Tp + __l2_norm(const std::complex<_Tp>& __z) + { return std::norm(__z); } + + /** + * Return the Linf norm modulus of a complex number. + */ + template + 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 + 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 + inline constexpr _Tp + __l2_norm(_Tp __x) + { return std::abs(__x); } + + /** + * Return the Linf norm modulus of a real number. + */ + template + 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 + 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 + 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 + 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 + _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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + struct __promote_fp_help, 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 + struct is_complex : public std::false_type + { }; + + /** + * Type introspection for complex. + */ + template<> + template + struct is_complex> : public std::true_type + { }; + + /** + * Type introspection for complex. + */ + template + using is_complex_t = typename is_complex<_Tp>::type; + + /** + * Type introspection for complex. + */ + template + constexpr bool is_complex_v = is_complex<_Tp>::value; + +#endif // __cplusplus >= 201103L + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace __gnu_cxx + +#include + +#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 +// . + +/** @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 + +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 + 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 + _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 + 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 + 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 +// . + +/** @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 +#include +#include + +// From +#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> + std::basic_ostream<_CharT, _Traits>& + operator<<(std::basic_ostream<_CharT, _Traits>& __os, + __float128 __x); + + template> + std::basic_istream<_CharT, _Traits>& + operator>>(std::basic_istream<_CharT, _Traits>& __is, __float128& __x); + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + +// From +#undef __glibcxx_max_digits10 + +#include + +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 + +#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 +// . + +/** @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 +#include // For setw(). +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template> + 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> + 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 +// . + +/** @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 + _GLIBCXX_CONSTEXPR bool + __is_specialized(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_specialized; } + + template + _GLIBCXX_CONSTEXPR _Tp + __min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::min(); } + + template + _GLIBCXX_CONSTEXPR _Tp + __max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::max(); } + + template + _GLIBCXX_CONSTEXPR _Tp + __lowest(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::lowest(); } + + template + _GLIBCXX_CONSTEXPR int + __digits(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::digits; } + + template + _GLIBCXX_CONSTEXPR int + __digits10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::digits10; } + + template + _GLIBCXX_CONSTEXPR int + __max_digits10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::max_digits10; } + + template + _GLIBCXX_CONSTEXPR bool + __is_signed(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_signed; } + + template + _GLIBCXX_CONSTEXPR bool + __is_integer(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_integer; } + + template + _GLIBCXX_CONSTEXPR bool + __is_exact(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_exact; } + + template + _GLIBCXX_CONSTEXPR int + __radix(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::radix; } + + template + _GLIBCXX_CONSTEXPR _Tp + __epsilon(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::epsilon(); } + + template + _GLIBCXX_CONSTEXPR _Tp + __round_error(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::round_error(); } + + template + _GLIBCXX_CONSTEXPR int + __min_exponent(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::min_exponent; } + + template + _GLIBCXX_CONSTEXPR int + __min_exponent10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::min_exponent10; } + + template + _GLIBCXX_CONSTEXPR int + __max_exponent(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::max_exponent; } + + template + _GLIBCXX_CONSTEXPR int + __max_exponent10(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::max_exponent10; } + + template + _GLIBCXX_CONSTEXPR bool + __has_infinity(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::has_infinity; } + + template + _GLIBCXX_CONSTEXPR bool + __has_quiet_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::has_quiet_NaN; } + + template + _GLIBCXX_CONSTEXPR bool + __has_signaling_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::has_signaling_NaN; } + + template + _GLIBCXX_CONSTEXPR std::float_denorm_style + __has_denorm(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::has_denorm; } + + template + _GLIBCXX_CONSTEXPR bool + __has_denorm_loss(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::has_denorm_loss; } + + template + _GLIBCXX_CONSTEXPR _Tp + __infinity(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::infinity(); } + + template + _GLIBCXX_CONSTEXPR _Tp + __quiet_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::quiet_NaN(); } + + template + _GLIBCXX_CONSTEXPR _Tp + __signaling_NaN(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::signaling_NaN(); } + + template + _GLIBCXX_CONSTEXPR _Tp + __denorm_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::denorm_min(); } + + template + _GLIBCXX_CONSTEXPR bool + __is_iec559(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_iec559; } + + template + _GLIBCXX_CONSTEXPR bool + __is_bounded(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_bounded; } + + template + _GLIBCXX_CONSTEXPR bool + __is_modulo(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::is_modulo; } + + template + _GLIBCXX_CONSTEXPR bool + __traps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::traps; } + + template + _GLIBCXX_CONSTEXPR bool + __tinyness_before(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::numeric_limits<_Tp>::tinyness_before; } + + template + _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 + _Tp + __sqrt_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::sqrt(__max(_Tp{})); } + +#ifdef NO_CBRT + template + _Tp + __cbrt_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::pow(__max(_Tp{}), 1 / _Tp{3}); } +#else + template + _Tp + __cbrt_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::cbrt(__max(_Tp{})); } +#endif + + template + _Tp + __root_max(_Tp __root) _GLIBCXX_USE_NOEXCEPT + { return std::pow(__max(_Tp{}), 1 / __root); } + + template + _Tp + __log_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::log(__max(_Tp{})); } + + template + _Tp + __log10_max(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::log10(__max(_Tp{})); } + + + template + _Tp + __sqrt_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::sqrt(__min(_Tp{})); } + +#ifdef NO_CBRT + template + _Tp + __cbrt_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::pow(__min(_Tp{}), 1 / _Tp{3}); } +#else + template + _Tp + __cbrt_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::cbrt(__min(_Tp{})); } +#endif + + template + _Tp + __root_min(_Tp __root) _GLIBCXX_USE_NOEXCEPT + { return std::pow(__min(_Tp{}), 1 / __root); } + + template + _Tp + __log_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::log(__min(_Tp{})); } + + template + _Tp + __log10_min(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::log10(__min(_Tp{})); } + + template + _Tp + __sqrt_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::sqrt(__epsilon(_Tp{})); } + +#ifdef NO_CBRT + template + _Tp + __cbrt_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::pow(__epsilon(_Tp{}), 1 / _Tp{3}); } +#else + template + _Tp + __cbrt_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::cbrt(__epsilon(_Tp{})); } +#endif + + template + _Tp + __root_eps(_Tp __root) _GLIBCXX_USE_NOEXCEPT + { return std::pow(__epsilon(_Tp{}), 1 / __root); } + + template + _Tp + __log_eps(_Tp = _Tp{}) _GLIBCXX_USE_NOEXCEPT + { return std::log(__epsilon(_Tp{})); } + + template + _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 +// . + +/** @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 +#include +#include + +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 + 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 + 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 + 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> + _S_Airy(std::complex<_Tp> __t); + + static _AiryState> + _S_Fock(std::complex<_Tp> __t); + + static std::pair, std::complex<_Tp>> + _S_Ai(std::complex<_Tp> __t); + + static std::pair, std::complex<_Tp>> + _S_Bi(std::complex<_Tp> __t); + + static _AiryAuxilliaryState> + _S_FGH(std::complex<_Tp> __t); + + static _AiryState> + _S_Scorer(std::complex<_Tp> __t); + static _AiryState> + _S_Scorer2(std::complex<_Tp> __t); + + private: + + static _AiryState> + _S_AiryHelp(std::complex<_Tp> __t, bool __return_fock_airy = false); + + std::pair, 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 + constexpr int __max_FGH = _Airy_series<_Tp>::_N_FGH; + + template<> + constexpr int __max_FGH = 15; + + template<> + constexpr int __max_FGH = 79; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_eps; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_pi; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_sqrt_pi; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Ai0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Aip0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Bi0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Bip0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Hi0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Hip0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Gi0; + + template + constexpr _Tp + _Airy_series<_Tp>::_S_Gip0; + + template + 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 + _AiryState> + _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>{__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>{__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 + std::pair, 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 + std::pair, 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 + _AiryAuxilliaryState> + _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> + {__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 + _AiryState> + _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>{__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 + _AiryState> + _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>{__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 + std::pair, 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 + _AiryState> + _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 + _AiryState> + _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 + struct _Airy_asymp_data + { }; + + template<> + struct _Airy_asymp_data + { + 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 + { + 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 + { + 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 + class _Airy_asymp : public _Airy_asymp_data<_Tp> + { + + public: + + using __cmplx = std::complex<_Tp>; + + constexpr _Airy_asymp() = default; + + _AiryState> + operator()(std::complex<_Tp> __t, bool __return_fock_airy = false) const; + + _AiryState> + _S_absarg_ge_pio3(std::complex<_Tp> __z) const; + + _AiryState> + _S_absarg_lt_pio3(std::complex<_Tp> __z) const; + + private: + std::pair, 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 + _AiryState> + _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>{__t, __w1, __w1p, + __w2, __w2p}; + } + else + return _AiryState>{__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>{__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>{__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 + std::pair, 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 + _AiryState> + _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>{__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 + _AiryState> + _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>{__z, _Ai, -_Aip, _Bi, -_Bip}; + } + + + /** + * Class to manage the asymptotic series for Airy functions. + * + * @tparam _Sum A sum type + */ + template + class _Airy_asymp_series + { + public: + + using value_type = typename _Sum::value_type; + using scalar_type = std::__detail::__num_traits_t; + static constexpr scalar_type _S_sqrt_pi + = __gnu_cxx::__math_constants::__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 + operator()(value_type __y); + + private: + + static constexpr int _S_max_iter = 10000; + static constexpr scalar_type _S_eps + = std::numeric_limits::epsilon(); + + _Sum _M_Asum; + _Sum _M_Bsum; + _Sum _M_Csum; + _Sum _M_Dsum; + }; + + template + constexpr int + _Airy_asymp_series<_Sum>::_S_max_iter; + + template + constexpr typename _Airy_asymp_series<_Sum>::scalar_type + _Airy_asymp_series<_Sum>::_S_eps; + + template + 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 + _AiryState::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{__y, _AA, _CC, _BB, _DD}; + } + + + template + struct _Airy_default_radii + {}; + + template<> + struct _Airy_default_radii + { + constexpr static float inner_radius{2.0F}; + constexpr static float outer_radius{6.0F}; + }; + + template<> + struct _Airy_default_radii + { + constexpr static double inner_radius{4.0}; + constexpr static double outer_radius{12.0}; + }; + + template<> + struct _Airy_default_radii + { + 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 + class _Airy + { + public: + + using value_type = _Tp; + using scalar_type = std::__detail::__num_traits_t; + static constexpr scalar_type _S_pi + = __gnu_cxx::__math_constants::__pi; + static constexpr scalar_type _S_sqrt_pi + = __gnu_cxx::__math_constants::__root_pi; + static constexpr scalar_type _S_pi_3 + = __gnu_cxx::__math_constants::__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(); + static constexpr auto _S_cNaN = value_type(_S_NaN, _S_NaN); + + constexpr _Airy() = default; + _Airy(const _Airy&) = default; + _Airy(_Airy&&) = default; + + constexpr _AiryState + operator()(value_type __y) const; + + scalar_type inner_radius{_Airy_default_radii::inner_radius}; + scalar_type outer_radius{_Airy_default_radii::outer_radius}; + }; + + template + constexpr typename _Airy<_Tp>::scalar_type + _Airy<_Tp>::_S_sqrt_pi; + + template + constexpr typename _Airy<_Tp>::scalar_type + _Airy<_Tp>::_S_pi_3; + + template + constexpr typename _Airy<_Tp>::scalar_type + _Airy<_Tp>::_S_pi_6; + + template + constexpr typename _Airy<_Tp>::value_type + _Airy<_Tp>::_S_i; + + /** + * Return the Airy functions for complex argument. + */ + template + 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 + std::complex<_Tp> + __airy_ai(std::complex<_Tp> __z) + { + auto __airy = _Airy>()(__z); + return __airy.Ai; + } + + + /** + * @brief Return the complex Airy Bi function. + */ + template + std::complex<_Tp> + __airy_bi(std::complex<_Tp> __z) + { + auto __airy = _Airy>()(__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 +// . + +/** @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 +#include // For exchange +#include + +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 + 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::__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 + 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 + 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(__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 + _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 + 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 + 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 + _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 + _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 + 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 + 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 + 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 + 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 + _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 + _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 + 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 + 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 +// . + +/** @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 + +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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 + +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 + __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 + __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 + __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 + __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 +// . + +/** @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 + +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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +// Implementation-space details. +namespace __detail +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * @brief Compute the Dawson integral using the series expansion. + */ + template + _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 + _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(_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 + _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 +// . + +/** @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 + +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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 +#include + +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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +// Implementation-space details. +namespace __detail +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + template _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 +#include + +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 + 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 + 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 + 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 +// . + +/** @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 +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +// Implementation-space details. +namespace __detail +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + +template + struct _Factorial_table + { + int __n; + _Tp __factorial; + _Tp __log_factorial; + }; + +template + constexpr std::size_t _S_num_factorials = 0; + +template<> + constexpr std::size_t _S_num_factorials = 35; +template<> + constexpr std::size_t _S_num_factorials = 171; +template<> + constexpr std::size_t _S_num_factorials = 171; +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) +template<> + constexpr std::size_t _S_num_factorials<__float128> = 171; +#endif + +constexpr _Factorial_table +_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 + constexpr std::size_t _S_num_double_factorials = 0; + +template<> + constexpr std::size_t _S_num_double_factorials = 57; +template<> + constexpr std::size_t _S_num_double_factorials = 301; +template<> + constexpr std::size_t _S_num_double_factorials = 301; +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) +template<> + constexpr std::size_t _S_num_double_factorials<__float128> = 301; +#endif + +constexpr _Factorial_table +_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 + constexpr std::size_t _S_num_neg_double_factorials = 0; + +template<> + constexpr std::size_t _S_num_neg_double_factorials = 27; +template<> + constexpr std::size_t _S_num_neg_double_factorials = 150; +template<> + constexpr std::size_t _S_num_neg_double_factorials = 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 +_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 + _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 + _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 + _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 + _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 + struct _GammaSpouge + { + }; + + template<> + struct _GammaSpouge + { + static constexpr std::array + _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 + { + static constexpr std::array + _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 + { + static constexpr std::array + _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 + _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 + struct _GammaLanczos + { + }; + + template<> + struct _GammaLanczos + { + static constexpr float _S_g = 6.5F; + static constexpr std::array + _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 + { + static constexpr double _S_g = 9.5; + static constexpr std::array + _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 + { + static constexpr long double _S_g = 10.5L; + static constexpr std::array + _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 + _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 + _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 + 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 + _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 + 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 + _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 + _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 + _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 + 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 + _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 + _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 + _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 + 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 + 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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 + +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 + _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 +// . + +/** @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 +#include +#include + +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +// Implementation-space details. +namespace __detail +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + + /** + * Compute the Debye region in te complex plane. + */ + template + 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 + 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 + 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 + 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>()(__argp); + auto __airym = _Airy>()(__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 + 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> _Asum; + __gnu_cxx::_KahanSum> _Bsum; + __gnu_cxx::_KahanSum> _Csum; + __gnu_cxx::_KahanSum> _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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 +// . + +/** @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 + +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 + _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 + _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 + _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 +// . + +/** @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 + +namespace std _GLIBCXX_VISIBILITY(default) +{ +// Implementation-space details. +namespace __detail +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * Return the bound-state Coulomb wave-function. + */ + template + 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 +// . + +/** @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 + +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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 +#include + +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 + 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 + 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 + 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 +// . + +/** @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 + +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 + _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 + _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 + __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 +// . + +/** @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 + +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 + _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 + _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 + _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 + _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 + _Tp + __assoc_laguerre(unsigned int __n, unsigned int __m, _Tp __x) + { return __poly_laguerre(__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 + _Tp + __laguerre(unsigned int __n, _Tp __x) + { return __poly_laguerre(__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 +// . + +/** @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 +#include + +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 + _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 + _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 + _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 + _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 + 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 +// . + +/** @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 +#include // For exchange +#include + +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 + 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::__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 + 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 + 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 + _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 + _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 + 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 + 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 + 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 +// . + +/** @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 + _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 + _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 + _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 + _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 +// . + +/** @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 +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +// Implementation-space details. +namespace __detail +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + + template + 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 + 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 + _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 + 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 + 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 + 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 + 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 + 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 + 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 + 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(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 + 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 + _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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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>. + * + * @param __s The real order. + * @param __w The real or complex argument. + * @return The real or complex value of Li_s(e^w). + */ + template + __gnu_cxx::__promote_fp_t, 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 + _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 + 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 + 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 + 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 + _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 + _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 + _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 + _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 + 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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 +// . + +/** @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 +#include +#include + +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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + 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 +// . + +/** @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 + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * A struct to store a cosine and a sine value. + */ + template + 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 + _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 + _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 + _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 + _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 + _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 + _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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + __sincos(float __x) + { + float __sin, __cos; + __builtin_sincosf(__x, &__sin, &__cos); + return __gnu_cxx::__sincos_t{__sin, __cos}; + } + + /** + * + */ + template<> + inline __gnu_cxx::__sincos_t + __sincos(double __x) + { + double __sin, __cos; + __builtin_sincos(__x, &__sin, &__cos); + return __gnu_cxx::__sincos_t{__sin, __cos}; + } + + /** + * + */ + template<> + inline __gnu_cxx::__sincos_t + __sincos(long double __x) + { + long double __sin, __cos; + __builtin_sincosl(__x, &__sin, &__cos); + return __gnu_cxx::__sincos_t{__sin, __cos}; + } + + /** + * Reperiodized sincos. + */ + template + __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 + 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 +// . + +/** @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 +#include + +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 + 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 + 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 + 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 + 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 +// . + +/** @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 + +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 + _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 + _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 + _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 + _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 + _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 + _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 + _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 + _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::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 + _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 + _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 + _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 @@ // . /** @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 and define __STDCPP_WANT_MATH_SPEC_FUNCS__ #endif -#include +#pragma GCC system_header + #include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include + +#if __cplusplus >= 201103L +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include // Needs __sph_legendre. +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#else +# include +# include +# define _GLIBCXX_MATH_NS ::std::tr1:: +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +#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(__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 long double + * argument @f$ x @f$. * * @see assoc_laguerre for more details. */ @@ -217,8 +353,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __detail::__assoc_laguerre(__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(__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 long double + * 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(__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(__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 long double 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 long double 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 long double modulus @c k. + * @f$ \Pi(k,\nu) @f$ for long double 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 long double argument @c x. + * for long double argument @f$ x @f$. * * @see expint for details. */ @@ -855,7 +994,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { return __detail::__expint(__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 long double argument @c x. + * and long double 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 long double angle @f$ \theta @f$ + * degree @f$ l @f$ and order @f$ m @f$ and long double 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 long double numeratorial parameter @c a, - * denominatorial parameter @c c, and argument @c x. + * of long double 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 long double numeratorial parameters @c a and @c b, - * denominatorial parameter @c c, and argument @c x. + * of long double 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(__c, __x); } + + /** + * Return the confluent hypergeometric limit function @f$ {}_0F_1(;c;x) @f$ + * of long double 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(__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 + 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(__x); } + + /** + * Return the sinus cardinal function @f$ sinc_\pi(x) @f$ + * for long double argument @c __x. + * + * @see sinc_pi for details. + */ + inline long double + sincl(long double __x) + { return std::__detail::__sinc(__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 + 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(__x); } + + /** + * Return the reperiodized sinus cardinal function @f$ sinc(x) @f$ + * for long double argument @c __x. + * + * @see sinc for details. + */ + inline long double + sinc_pil(long double __x) + { return std::__detail::__sinc_pi(__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 + 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(__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(__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 + 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(__x).first; } + + /** + * Return the sine integral @f$ Si(x) @f$ of long double + * argument @f$ x @f$. + * + * @see sinint for details. + */ + inline long double + sinintl(long double __x) + { return std::__detail::__sincosint(__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 + 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(__x).second; } + + /** + * Return the cosine integral @f$ Ci(x) @f$ of long double + * argument @f$ x @f$. + * + * @see cosint for details. + */ + inline long double + cosintl(long double __x) + { return std::__detail::__sincosint(__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 + 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(__x); } + + /** + * Return the hyperbolic sine integral @f$ Shi(x) @f$ of long double + * argument @f$ x @f$. + * + * @see sinhint for details. + */ + inline long double + sinhintl(long double __x) + { return std::__detail::__sinhint(__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 + 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(__x); } + + /** + * Return the hyperbolic cosine integral @f$ Chi(x) @f$ + * of long double argument @f$ x @f$. + * + * @see coshint for details. + */ + inline long double + coshintl(long double __x) + { return std::__detail::__coshint(__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 + 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(__k, __u)); + } + + /** + * Return the Jacobi elliptic @f$ sn(k,u) @f$ integral + * of long double 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(__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 + 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(__k, __u)); + } + + /** + * Return the Jacobi elliptic @f$ cn(k,u) @f$ integral + * of long double 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(__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 + 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(__k, __u)); + } + + /** + * Return the Jacobi elliptic @f$ dn(k,u) @f$ integral + * of long double 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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__n, __alpha, __beta, __x); } + + /** + * Return the Jacobi polynomial @f$ P_n^{(\alpha,\beta)}(x) @f$ + * of degree @f$ n @f$ and @c long double 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(__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 + 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(__n, __alpha, __x); } + + /** + * Return the Gegenbauer polynomial @f$ C_n^{\alpha}(x) @f$ of degree @c n + * and long double 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(__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 + 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(__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(__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 + 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 long double 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 + 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(__x); } + + /** + * Return the hyperbolic sinus cardinal function @f$ sinhc_\pi(x) @f$ + * for long double argument @c __x. + * + * @see sinhc_pi for details. + */ + inline long double + sinhc_pil(long double __x) + { return std::__detail::__sinhc_pi(__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 + 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(__x); } + + /** + * Return the normalized hyperbolic sinus cardinal function @f$ sinhc(x) @f$ + * for long double argument @c __x. + * + * @see sinhc for details. + */ + inline long double + sinhcl(long double __x) + { return std::__detail::__sinhc(__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 + 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 + cyl_hankel_1f(float __nu, float __z) + { return std::__detail::__cyl_hankel_1(__nu, __z); } + + /** + * Return the cylindrical Hankel function of the first kind + * @f$ H^{(1)}_\nu(x) @f$ of long double order @f$ \nu @f$ + * and argument @f$ x >= 0 @f$. + * + * @see cyl_hankel_1 for details. + */ + inline std::complex + cyl_hankel_1l(long double __nu, long double __z) + { return std::__detail::__cyl_hankel_1(__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 + 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 + cyl_hankel_2f(float __nu, float __z) + { return std::__detail::__cyl_hankel_2(__nu, __z); } + + /** + * Return the cylindrical Hankel function of the second kind + * @f$ H^{(2)}_\nu(x) @f$ of long double order @f$ \nu @f$ + * and argument @f$ x >= 0 @f$. + * + * @see cyl_hankel_2 for details. + */ + inline std::complex + cyl_hankel_2l(long double __nu, long double __z) + { return std::__detail::__cyl_hankel_2(__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 + 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 + sph_hankel_1f(unsigned int __n, float __z) + { return std::__detail::__sph_hankel_1(__n, __z); } + + /** + * Return the spherical Hankel function of the first kind @f$ h^{(1)}_n(x) @f$ + * of nonnegative order n and @c long double argument @f$ x >= 0 @f$. + * + * @see sph_hankel_1 for details. + */ + inline std::complex + sph_hankel_1l(unsigned int __n, long double __z) + { return std::__detail::__sph_hankel_1(__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 + 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 + sph_hankel_2f(unsigned int __n, float __z) + { return std::__detail::__sph_hankel_2(__n, __z); } + + /** + * Return the spherical Hankel function of the second kind @f$ h^{(2)}_n(x)@f$ + * of nonnegative order n and @c long double argument @f$ x >= 0 @f$. + * + * @see sph_hankel_2 for details. + */ + inline std::complex + sph_hankel_2l(unsigned int __n, long double __z) + { return std::__detail::__sph_hankel_2(__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 + 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(__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 long double 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(__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 n >= 0 + * @param __x The real argument x >= 0 + * @throw std::domain_error if __x < 0 . + */ + template + 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(__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 long double 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(__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 n >= 0 + * @param __x The real argument x >= 0 + * @throw std::domain_error if __x < 0 . + */ + template + 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(__x, __Ai, __Bi, __Aip, __Bip); + return __Ai; + } + + /** + * Return the Airy function @f$ Ai(x) @f$ for long double + * 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(__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 + 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 + 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(__x, __Ai, __Bi, __Aip, __Bip); + return __Bi; + } + + /** + * Return the Airy function @f$ Bi(x) @f$ for long double + * 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(__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 + 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 + 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 + * std::complex argument. + * + * @see lgamma for details. + */ + inline std::complex + lgammaf(std::complex __a) + { return std::__detail::__log_gamma>(__a); } + + /** + * Return the logarithm of the gamma function for + * std::complex argument. + * + * @see lgamma for details. + */ + inline std::complex + lgammal(std::complex __a) + { return std::__detail::__log_gamma>(__a); } + + /** + * Return the logarithm of the gamma function for complex argument. + */ + template + 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 std::complex argument. + * + * @see lgamma for details. + */ + inline std::complex + tgammaf(std::complex __a) + { return std::__detail::__gamma>(__a); } + + /** + * Return the gamma function for std::complex + * argument. + * + * @see lgamma for details. + */ + inline std::complex + tgammal(std::complex __a) + { return std::__detail::__gamma>(__a); } + + /** + * Return the gamma function for complex argument. + */ + template + 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(__a, __x); } + + /** + * Return the upper incomplete gamma function @f$ \Gamma(a,x) @f$ + * for long double argument. + * + * @see tgamma for details. + */ + inline long double + tgammal(long double __a, long double __x) + { return std::__detail::__tgamma(__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 + 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(__a, __x); } + + /** + * Return the lower incomplete gamma function @f$ \gamma(a,x) @f$ + * for long double argument. + * + * @see tgamma_lower for details. + */ + inline long double + tgamma_lowerl(long double __a, long double __x) + { return std::__detail::__tgamma_lower(__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 + 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(__x); } + + /** + * Return the dilogarithm function @f$ \psi(z) @f$ + * for long double argument. + * + * @see dilog for details. + */ + inline long double + dilogl(long double __x) + { return std::__detail::__dilog(__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 + 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(__x, __y); } + + /** + * Return the complete Carlson elliptic function @f$ R_F(x,y) @f$ + * for long double 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(__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 + 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(__x, __y, __z); } + + /** + * Return the Carlson elliptic function @f$ R_F(x,y,z) @f$ + * of the first kind for long double 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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__s, __a); } + + /** + * Return the Hurwitz zeta function of long double 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(__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 + 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 + 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(__x); } + + /** + * Return the psi or digamma function of long double argument + * @f$ x @f$. + * + * @see psi for details. + */ + inline long double + psil(long double __x) + { return std::__detail::__psi(__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 + 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(__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(__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 + 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 + 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(__x)); } + + inline long double + fresnel_sl(long double __x) + { return std::imag(std::__detail::__fresnel(__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 + 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(__x)); } + + inline long double + fresnel_cl(long double __x) + { return std::real(std::__detail::__fresnel(__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 + 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(__x); } + + /** + * Return the Dawson integral, @f$ F(x) @f$, for long double argument @f$ x @f$. + * + * @see dawson for details. + */ + inline long double + dawsonl(long double __x) + { return std::__detail::__dawson(__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 + 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(__n, __x); } + + /** + * Return the exponential integral @f$ E_n(x) @f$ for integral + * order @f$ n @f$ and long double argument @f$ x @f$. + * + * @see expint for details. + */ + inline long double + expintl(unsigned int __n, long double __x) + { return std::__detail::__expint(__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 + 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(__a, __n); } + + inline long double + lpochhammerl(long double __a, long double __n) + { return std::__detail::__log_pochhammer(__a, __n); } + + /** + * + */ + template + 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(__a, __n); } + + inline long double + lpochhammer_lowerl(long double __a, long double __n) + { return std::__detail::__log_pochhammer_lower(__a, __n); } + + /** + * + */ + template + 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(__a, __n); } + + inline long double + pochhammerl(long double __a, long double __n) + { return std::__detail::__pochhammer(__a, __n); } + + /** + * + */ + template + 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(__a, __n); } + + inline long double + pochhammer_lowerl(long double __a, long double __n) + { return std::__detail::__pochhammer_lower(__a, __n); } + + /** + * + */ + template + 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(__n); } + + inline long double + factoriall(unsigned int __n) + { return std::__detail::__factorial(__n); } + + /** + * + */ + template + 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(__n); } + + inline long double + double_factoriall(int __n) + { return std::__detail::__double_factorial(__n); } + + /** + * + */ + template + 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(__n); } + + inline long double + lfactoriall(unsigned int __n) + { return std::__detail::__log_factorial(__n); } + + /** + * + */ + template + 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(__n); } + + inline long double + ldouble_factoriall(int __n) + { return std::__detail::__log_double_factorial(__n); } + + /** + * + */ + template + 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(__n, __k); } + + inline long double + bincoefl(unsigned int __n, unsigned int __k) + { return std::__detail::__bincoef(__n, __k); } + + /** + * + */ + template + 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(__n, __k); } + + inline long double + lbincoefl(unsigned int __n, unsigned int __k) + { return std::__detail::__log_bincoef(__n, __k); } + + /** + * + */ + template + 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(__n); } + + /** + * Return the Bernoulli number of integer order @f$ n @f$ as a + * long double. + * + * @see bernoulli for details. + */ + inline long double + bernoullil(unsigned int __n) + { return std::__detail::__bernoulli(__n); } + + /** + * Return the Bernoulli number of integer order @f$ n @f$. + * + * The Bernoulli numbers are defined by + * @f[ + * + * @f] + * + * @param __n The order. + */ + template + 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(__n, __x); } + + /** + * Return the Legendre function of the second kind @f$ Q_l(x) @f$ + * of nonnegative degree @f$ l @f$ and long double argument. + * + * @see legendre_q for details. + */ + inline long double + legendre_ql(unsigned int __n, long double __x) + { return std::__detail::__legendre_q(__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 + 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(__a, __x); } + + inline long double + pgammal(long double __a, long double __x) + { return std::__detail::__pgamma(__a, __x); } + + /** + * + */ + template + 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(__a, __x); } + + inline long double + qgammal(long double __a, long double __x) + { return std::__detail::__qgamma(__a, __x); } + + /** + * + */ + template + 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(__k, __phi); } + + inline long double + jacobi_zetal(long double __k, long double __phi) + { return std::__detail::__jacobi_zeta(__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 + 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(__k, __phi); } + + inline long double + heuman_lambdal(long double __k, long double __phi) + { return std::__detail::__heuman_lambda(__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 + 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(__k); } + + /** + * Return the complete Legendre elliptic integral @f$ D(k) @f$ + * of long double 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(__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 -1 <= __k <= +1 + */ + template + 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(__k, __phi); } + + /** + * Return the incomplete Legendre elliptic integral @f$ D(k, \phi) @f$ + * of long double 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(__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 -1 <= __k <= +1 + * @param __phi The angle + */ + template + 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(__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(__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 + 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(__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(__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 + 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(__x, __k_c, __p); } + + /** + * Return the Bulirsch elliptic integral of the third kind + * @f$ el3(x,k_c,p) @f$ of long double 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(__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 + 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(__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(__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 + 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 std::complex order @f$ \nu @f$ + * and argument @f$ x @f$. + * + * @see cyl_hankel_1 for more details. + */ + inline std::complex + cyl_hankel_1f(std::complex __nu, std::complex __x) + { return std::__detail::__cyl_hankel_1(__nu, __x); } + + /** + * Return the complex cylindrical Hankel function of the first kind + * @f$ H^{(1)}_\nu(x) @f$ of std::complex + * order @f$ \nu @f$ and argument @f$ x @f$. + * + * @see cyl_hankel_1 for more details. + */ + inline std::complex + cyl_hankel_1l(std::complex __nu, std::complex __x) + { return std::__detail::__cyl_hankel_1(__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 + 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 std::complex order @f$ \nu @f$ + * and argument @f$ x @f$. + * + * @see cyl_hankel_2 for more details. + */ + inline std::complex + cyl_hankel_2f(std::complex __nu, std::complex __x) + { return std::__detail::__cyl_hankel_2(__nu, __x); } + + /** + * Return the complex cylindrical Hankel function of the second kind + * @f$ H^{(2)}_\nu(x) @f$ of std::complex + * order @f$ \nu @f$ and argument @f$ x @f$. + * + * @see cyl_hankel_2 for more details. + */ + inline std::complex + cyl_hankel_2l(std::complex __nu, std::complex __x) + { return std::__detail::__cyl_hankel_2(__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 + 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 std::complex argument @f$ x @f$. + * + * @see sph_hankel_1 for more details. + */ + inline std::complex + sph_hankel_1f(unsigned int __n, std::complex __x) + { return std::__detail::__sph_hankel_1(__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 std::complex argument @f$ x @f$. + * + * @see sph_hankel_1 for more details. + */ + inline std::complex + sph_hankel_1l(unsigned int __n, std::complex __x) + { return std::__detail::__sph_hankel_1(__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 + 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 std::complex argument @f$ x @f$. + * + * @see sph_hankel_2 for more details. + */ + inline std::complex + sph_hankel_2f(unsigned int __n, std::complex __x) + { return std::__detail::__sph_hankel_2(__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 std::complex argument @f$ x @f$. + * + * @see sph_hankel_2 for more details. + */ + inline std::complex + sph_hankel_2l(unsigned int __n, std::complex __x) + { return std::__detail::__sph_hankel_2(__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 + 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 + sph_harmonicf(unsigned int __l, int __m, + float __theta, float __phi) + { return std::__detail::__sph_harmonic(__l, __m, __theta, __phi); } + + /** + * Return the complex spherical harmonic function of degree @f$ l @f$, order @f$ m @f$, + * and long double zenith angle @f$ \theta @f$, + * and azimuth angle @f$ \phi @f$. + * + * @see sph_harmonic for details. + */ + inline std::complex + sph_harmonicl(unsigned int __l, int __m, + long double __theta, long double __phi) + { + return std::__detail::__sph_harmonic(__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 + 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(__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(__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 + 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 + polylogf(float __s, std::complex __w) + { return std::__detail::__polylog(__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 + polylogl(long double __s, std::complex __w) + { return std::__detail::__polylog(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__m, __w); } + + /** + * Return the Clausen sine function @f$ S_n(w) @f$ of order @f$ m @f$ + * and long double 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(__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 + 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(__m, __w); } + + /** + * Return the Clausen cosine function @f$ C_n(w) @f$ of order @f$ m @f$ + * and long double 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(__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 + 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(__m, __w); } + + /** + * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$ + * and long double argument @f$ w @f$. + * + * @see clausen for details. + */ + inline long double + clausenl(unsigned int __m, long double __w) + { return std::__detail::__clausen(__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 + 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 std::complex argument @f$ w @f$. + * + * @see clausen for details. + */ + inline std::complex + clausenf(unsigned int __m, std::complex __w) + { return std::__detail::__clausen(__m, __w); } + + /** + * Return the Clausen function @f$ Cl_n(w) @f$ of integer order @f$ m @f$ + * and std::complex argument @f$ w @f$. + * + * @see clausen for details. + */ + inline std::complex + clausenl(unsigned int __m, std::complex __w) + { return std::__detail::__clausen(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__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(__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 + 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(__k); } + + /** + * Return the elliptic nome function @f$ q(k) @f$ + * of long double modulus @f$ k @f$. + * + * @see ellnome for details. + */ + inline long double + ellnomel(long double __k) + { return std::__detail::__ellnome(__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 + 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(__k, __x); } + + /** + * Return the Neville theta-s function @f$ \theta_s(k,x) @f$ + * of long double 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(__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 + 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(__k, __x); } + + /** + * Return the Neville theta-c function @f$ \theta_c(k,x) @f$ + * of long double 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(__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 + 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(__k, __x); } + + /** + * Return the Neville theta-d function @f$ \theta_d(k,x) @f$ + * of long double 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(__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 + 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(__k, __x); } + + /** + * Return the Neville theta-n function @f$ \theta_n(k,x) @f$ + * of long double 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(__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 + 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(__h, __a); } + + /** + * Return the Owens T function @f$ T(h,a) @f$ of long double + * 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(__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 + 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(__s, __x); } + + inline long double + fermi_diracl(long double __s, long double __x) + { return std::__detail::__fermi_dirac(__s, __x); } + + template + 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(__s, __x); } + + inline long double + bose_einsteinl(long double __s, long double __x) + { return std::__detail::__bose_einstein(__s, __x); } + + template + 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(__x); } + + /** + * Return the reperiodized sine function @f$ \sin_\pi(x) @f$ + * for long double argument @f$ x @f$. + * + * @see sin_pi for more details. + */ + inline long double + sin_pil(long double __x) + { return std::__detail::__sin_pi(__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 + 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(__x); } + + /** + * Return the reperiodized hyperbolic sine function @f$ \sinh_\pi(x) @f$ + * for long double argument @f$ x @f$. + * + * @see sinh_pi for more details. + */ + inline long double + sinh_pil(long double __x) + { return std::__detail::__sinh_pi(__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 + 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(__x); } + + /** + * Return the reperiodized cosine function @f$ \cos_\pi(x) @f$ + * for long double argument @f$ x @f$. + * + * @see cos_pi for more details. + */ + inline long double + cos_pil(long double __x) + { return std::__detail::__cos_pi(__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 + 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(__x); } + + /** + * Return the reperiodized hyperbolic cosine function @f$ \cosh_\pi(x) @f$ + * for long double argument @f$ x @f$. + * + * @see cosh_pi for more details. + */ + inline long double + cosh_pil(long double __x) + { return std::__detail::__cosh_pi(__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 + 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(__x); } + + /** + * Return the reperiodized tangent function @f$ \tan_\pi(x) @f$ + * for long double argument @f$ x @f$. + * + * @see tan_pi for more details. + */ + inline long double + tan_pil(long double __x) + { return std::__detail::__tan_pi(__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 + 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(__x); } + + /** + * Return the reperiodized hyperbolic tangent function @f$ \tanh_\pi(x) @f$ + * for long double argument @f$ x @f$. + * + * @see tanh_pi for more details. + */ + inline long double + tanh_pil(long double __x) + { return std::__detail::__tanh_pi(__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 + 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 + sincosf(float __x) + { return std::__detail::__sincos(__x); } + + /** + * Return both the sine and the cosine of a long double argument. + * + * @see sincos for details. + */ + inline __gnu_cxx::__sincos_t + sincosl(long double __x) + { return std::__detail::__sincos(__x); } + + /** + * Return both the sine and the cosine of a @c double argument. + * + * @see sincos for details. + */ + inline __gnu_cxx::__sincos_t + sincos(double __x) + { return std::__detail::__sincos(__x); } + + /** + * Return both the sine and the cosine of a reperiodized argument. + * @f[ + * sincos(x) = {\sin(x), \cos(x)} + * @f] + */ + template + 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 + sincos_pif(float __x) + { return std::__detail::__sincos_pi(__x); } + + /** + * Return both the sine and the cosine of a reperiodized + * long double argument. + * + * @see sincos_pi for details. + */ + inline __gnu_cxx::__sincos_t + sincos_pil(long double __x) + { return std::__detail::__sincos_pi(__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 + 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 +// . + +/** @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 +# include +#endif + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) +# include +#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 + struct __num_traits + { + using __value_type = _Tp; + }; + + template + using __num_traits_t = typename __num_traits<_Tp>::__value_type; + + +#if __cplusplus >= 201103L + /** + * Return a fraction as a real number. + */ + template + 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 + 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 + inline bool + __isnan(_Tp __x) + { return std::isnan(__x); } + +#else + + template + inline bool + __isnan(_Tp __x) + { return __builtin_isnan(__x); } + + template<> + inline bool + __isnan(float __x) + { return __builtin_isnanf(__x); } + + template<> + inline bool + __isnan(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 + 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::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 + // and to only the intended types. + template + struct __promote_fp_help<_Tp, false> + { }; + + template<> + struct __promote_fp_help + { using __type = float; }; + + template<> + struct __promote_fp_help + { using __type = double; }; + + template<> + struct __promote_fp_help + { using __type = long double; }; + +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_FLOAT128) + template<> + struct __promote_fp_help<__float128> + { using __type = __float128; }; +#endif + + template + 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 + struct __promote_fp + { using __type = decltype(__promote_fp_help_t>{} + + typename __promote_fp<_Tps...>::__type{}); }; + + template<> + template + struct __promote_fp<_Tp> + { using __type = decltype(__promote_fp_help_t>{}); }; + + template + 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 + _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 + _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 + _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<__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 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 +// . + +/** @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 +#include +#include +#include +#include // 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 + 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 + 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 + 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 _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 + 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 + 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 _M_a; + value_type _M_sum; + bool _M_converged; + }; + + /** + * The Winn epsilon summation process. + */ + template + 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 _M_e; + value_type _M_sum; + bool _M_converged; + }; + + /** + * The Brezinski theta summation process. + */ + template + 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 _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 + 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 + 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 + operator()() + { + this->_M_n = 0; + return _RemainderTerm{this->_M_term[0], this->_M_term[1]}; + } + + _ExplicitRemainderModel& + reset() + { + this->_M_n = 0; + return *this; + } + + private: + + int _M_n; + std::array _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 + 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 + constexpr operator()() + { + this->_M_ok = false; + return _RemainderTerm{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 + 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 + constexpr operator()() + { + this->_M_ok = false; + return _RemainderTerm{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 + 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 + operator()() + { + return _RemainderTerm{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 _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 + 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 + operator()() + { + auto __anp1 = this->_M_term[(this->_M_n + 1) % 2]; + auto __an = this->_M_term[(this->_M_n) % 2]; + return _RemainderTerm{__an, + __an * __anp1 / (__an - __anp1)}; + } + + _VRemainderModel& + reset() + { + this->_M_n = 0; + return *this; + } + + private: + + int _M_n; + std::array _M_term; + }; + + + /** + * The Levin summation process. + */ + template> + 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(*this); } + + _RemainderModel& + _M_self() + { return static_cast<_RemainderModel&>(*this); } + + void _M_update(value_type __r_n); + + _Sum _M_part_sum; + std::vector _M_num; + std::vector _M_den; + value_type _M_beta; + value_type _M_sum; + bool _M_converged; + _RemainderModel _M_rem_mdl; + }; + + /** + * The Weniger summation process. + */ + template> + 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 _M_num; + std::vector _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 + using _LevinTSum + = _LevinSum<_Sum, _TRemainderModel>; + + /** + * The Levin D summation process. + */ + template + using _LevinDSum + = _LevinSum<_Sum, _DRemainderModel>; + + /** + * The Levin V summation process. + */ + template + using _LevinUSum + = _LevinSum<_Sum, _VRemainderModel>; + + /** + * The Weniger Tau summation process. + */ + template + using _WenigerTauSum + = _WenigerSum<_Sum, _TRemainderModel>; + + /** + * The Weniger Delta summation process. + */ + template + using _WenigerDeltaSum + = _WenigerSum<_Sum, _DRemainderModel>; + + /** + * The Weniger Phi summation process. + */ + template + using _WenigerPhiSum + = _WenigerSum<_Sum, _VRemainderModel>; + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace __gnu_cxx + +#pragma GCC visibility pop + +#include + +#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 +// . + +/** @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 +#include // For exchange +#include + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /** + * Add a new term to a vanWijnGaarden sum. + */ + template + _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 + 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::min(); + constexpr auto _S_eps = std::numeric_limits::epsilon(); + // Maximum number of iterations before 2^k overflow. + constexpr auto __k_max = std::numeric_limits::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 + 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 + 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 + 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 + 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 + 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 -#include #include namespace std _GLIBCXX_VISIBILITY(default) @@ -55,52 +54,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #define __cpp_lib_experimental_sample 201402 - /// Reservoir sampling algorithm. - template - _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 - _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 @@ -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 -#include - -namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - // A class for math constants. - template - 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 - constexpr _RealType __math_constants<_RealType>::__pi; - template - constexpr _RealType __math_constants<_RealType>::__pi_half; - template - constexpr _RealType __math_constants<_RealType>::__pi_third; - template - constexpr _RealType __math_constants<_RealType>::__pi_quarter; - template - constexpr _RealType __math_constants<_RealType>::__root_pi_div_2; - template - constexpr _RealType __math_constants<_RealType>::__one_div_pi; - template - constexpr _RealType __math_constants<_RealType>::__two_div_pi; - template - constexpr _RealType __math_constants<_RealType>::__two_div_root_pi; - template - constexpr _RealType __math_constants<_RealType>::__e; - template - constexpr _RealType __math_constants<_RealType>::__one_div_e; - template - constexpr _RealType __math_constants<_RealType>::__log2_e; - template - constexpr _RealType __math_constants<_RealType>::__log10_e; - template - constexpr _RealType __math_constants<_RealType>::__ln_2; - template - constexpr _RealType __math_constants<_RealType>::__ln_3; - template - constexpr _RealType __math_constants<_RealType>::__ln_10; - template - constexpr _RealType __math_constants<_RealType>::__gamma_e; - template - constexpr _RealType __math_constants<_RealType>::__phi; - template - constexpr _RealType __math_constants<_RealType>::__root_2; - template - constexpr _RealType __math_constants<_RealType>::__root_3; - template - constexpr _RealType __math_constants<_RealType>::__root_5; - template - constexpr _RealType __math_constants<_RealType>::__root_7; - template - constexpr _RealType __math_constants<_RealType>::__one_div_root_2; - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace __gnu_cxx +#include +#include #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 +// . + +/** @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 +#else + +#include +#include + +namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // A class for math constants. + template + 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 + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__4_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__4_pi_div_3; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__2_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_half; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_third; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_quarter; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__cbrt_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_pi_div_2; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__one_div_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__two_div_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__two_div_root_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__pi_sqr_div_6; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__deg; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__rad; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__e; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__one_div_e; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__log2_e; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__log10_e; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_2; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_3; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_10; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__ln_pi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__gamma_e; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__phi; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__catalan; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_2; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_3; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_5; + template + _GLIBCXX_CONSTEXPR _RealType __math_constants<_RealType>::__root_7; + template + _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 + _GLIBCXX_CONSTEXPR _RealType + __const_4_pi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__4_pi; } + + template + _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 + _GLIBCXX_CONSTEXPR _RealType + __const_2_pi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__const_2_pi; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_pi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__pi; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_pi_half(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__pi_half; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_pi_third(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__pi_third; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_pi_quarter(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__pi_quarter; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_root_pi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__root_pi; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_cbrt_pi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__cbrt_pi; } + + template + _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 + _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 + _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 + _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 + _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 + _GLIBCXX_CONSTEXPR _RealType + __const_deg(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__deg; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_rad(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__rad; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_e(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__e; } + + template + _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 + _GLIBCXX_CONSTEXPR _RealType + __const_log2_e(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__log2_e; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_log10_e(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__log10_e; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_ln_2(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__ln_2; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_ln_3(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__ln_3; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_ln_10(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__ln_10; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_ln_pi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__ln_pi; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_gamma_e(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__gamma_e; + + template + _GLIBCXX_CONSTEXPR _RealType + __const_phi(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__phi; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_catalan(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__catalan; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_root_2(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__root_2; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_root_3(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__root_3; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_root_5(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__root_5; } + + template + _GLIBCXX_CONSTEXPR _RealType + __const_root_7(_RealType = _RealType{}) + _GLIBCXX_NOEXCEPT_IF(std::is_fundamental<_RealType>::value) + { return __math_constants<_RealType>::__root_7; } + + template + _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 +// . + +/** @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 +#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 + 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 + 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 + 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 +// . + +/** @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 +#else + +#include +#include +#include +#include +#include +#include // For exchange + +namespace std { + template + 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 + 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::reference; + using const_reference = typename std::vector::const_reference; + using pointer = typename std::vector::pointer; + using const_pointer = typename std::vector::const_pointer; + using iterator = typename std::vector::iterator; + using const_iterator = typename std::vector::const_iterator; + using reverse_iterator = typename std::vector::reverse_iterator; + using const_reverse_iterator = typename std::vector::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 + _Polynomial(const _Polynomial<_Up>& __poly) + : _M_coeff{} + { + for (const auto __c : __poly) + this->_M_coeff.push_back(static_cast(__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 __ila) + : _M_coeff(__ila) + { } + + /** + * Create a polynomial from an input iterator range of coefficients. + */ + template> + _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> + _Polynomial(const InIter& __xbegin, const InIter& __xend, + const InIter& __ybegin) + : _M_coeff() + { + std::vector<_Polynomial> __numer; + std::vector<_Polynomial> __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 + 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 + 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> + 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 + void + eval(value_type __x, std::array& __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 + 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 + 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 + 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 + _Polynomial& + operator=(const _Polynomial<_Up>& __poly) + { + if (&__poly != this) + { + this->_M_coeff.clear(); + for (const auto __c : __poly) + this->_M_coeff = static_cast(__c); + return *this; + } + } + + /** + * Assign from an initialiser list. + */ + _Polynomial& + operator=(std::initializer_list __ila) + { + _M_coeff = __ila; + return *this; + } + + /** + * Add a scalar to the polynomial. + */ + template + _Polynomial& + operator+=(const _Up& __x) + { + degree(this->degree()); // Resize if necessary. + _M_coeff[0] += static_cast(__x); + return *this; + } + + /** + * Subtract a scalar from the polynomial. + */ + template + _Polynomial& + operator-=(const _Up& __x) + { + degree(this->degree()); // Resize if necessary. + _M_coeff[0] -= static_cast(__x); + return *this; + } + + /** + * Multiply the polynomial by a scalar. + */ + template + _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(__x); + return *this; + } + + /** + * Divide the polynomial by a scalar. + */ + template + _Polynomial& + operator/=(const _Up& __x) + { + for (size_type __i = 0; __i < _M_coeff.size(); ++__i) + this->_M_coeff[__i] /= static_cast(__x); + return *this; + } + + /** + * Take the modulus of the polynomial relative to a scalar. + * The result is always null. + */ + template + _Polynomial& + operator%=(const _Up&) + { + degree(0UL); // Resize. + this->_M_coeff[0] = value_type{}; + return *this; + } + + /** + * Add another polynomial to the polynomial. + */ + template + _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(__poly._M_coeff[__i]); + return *this; + } + + /** + * Subtract another polynomial from the polynomial. + */ + template + _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(__poly._M_coeff[__i]); + return *this; + } + + /** + * Multiply the polynomial by another polynomial. + */ + template + _Polynomial& + operator*=(const _Polynomial<_Up>& __poly); + + /** + * Divide the polynomial by another polynomial. + */ + template + _Polynomial& + operator/=(const _Polynomial<_Up>& __poly) + { + _Polynomial__quo, __rem; + divmod(*this, __poly, __quo, __rem); + *this = __quo; + return *this; + } + + /** + * Take the modulus of (modulate?) the polynomial relative to another polynomial. + */ + template + _Polynomial& + operator%=(const _Polynomial<_Up>& __poly) + { + _Polynomial__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 + friend std::basic_istream& + operator>>(std::basic_istream&, _Polynomial<_Tp1>&); + + template + friend bool + operator==(const _Polynomial<_Tp1>& __pa, + const _Polynomial<_Tp1>& __pb); + + private: + + std::vector _M_coeff; + }; + + /** + * Return the sum of a polynomial with a scalar. + */ + template + inline _Polynomial + operator+(const _Polynomial<_Tp>& __poly, const _Up& __x) + { return _Polynomial(__poly) += __x; } + + /** + * Return the difference of a polynomial with a scalar. + */ + template + inline _Polynomial + operator-(const _Polynomial<_Tp>& __poly, const _Up& __x) + { return _Polynomial(__poly) -= __x; } + + /** + * Return the product of a polynomial with a scalar. + */ + template + inline _Polynomial + operator*(const _Polynomial<_Tp>& __poly, const _Up& __x) + { return _Polynomial(__poly) *= __x; } + + /** + * Return the quotient of a polynomial with a scalar. + */ + template + inline _Polynomial + operator/(const _Polynomial<_Tp>& __poly, const _Up& __x) + { return _Polynomial(__poly) /= __x; } + + /** + * + */ + template + inline _Polynomial + operator%(const _Polynomial<_Tp>& __poly, const _Up& __x) + { return _Polynomial(__poly) %= __x; } + + /** + * Return the sum of two polynomials. + */ + template + inline _Polynomial + operator+(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb) + { return _Polynomial(__pa) += __pb; } + + /** + * Return the difference of two polynomials. + */ + template + inline _Polynomial + operator-(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb) + { return _Polynomial(__pa) -= __pb; } + + /** + * Return the product of two polynomials. + */ + template + inline _Polynomial + operator*(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb) + { return _Polynomial(__pa) *= __pb; } + + /** + * Return the quotient of two polynomials. + */ + template + inline _Polynomial + operator/(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb) + { return _Polynomial(__pa) /= __pb; } + + /** + * Return the modulus or remainder of one polynomial relative to another one. + */ + template + inline _Polynomial + operator%(const _Polynomial<_Tp>& __pa, const _Polynomial<_Up>& __pb) + { return _Polynomial(__pa) %= __pb; } + + /** + * + */ + template + inline _Polynomial + operator+(const _Tp& __x, const _Polynomial<_Up>& __poly) + { return _Polynomial(__x) += __poly; } + + /** + * + */ + template + inline _Polynomial + operator-(const _Tp& __x, const _Polynomial<_Up>& __poly) + { return _Polynomial(__x) -= __poly; } + + /** + * + */ + template + inline _Polynomial + operator*(const _Tp& __x, const _Polynomial<_Up>& __poly) + { return _Polynomial(__x) *= __poly; } + + /** + * Return the quotient of two polynomials. + */ + template + inline _Polynomial + operator/(const _Tp& __x, const _Polynomial<_Up>& __poly) + { return _Polynomial(__x) /= __poly; } + + /** + * Return the modulus or remainder of one polynomial relative to another one. + */ + template + inline _Polynomial + operator%(const _Tp& __x, const _Polynomial<_Up>& __poly) + { return _Polynomial(__x) %= __poly; } + + /** + * Divide two polynomials returning the quotient and remainder. + */ + template + 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 + std::basic_ostream& + operator<<(std::basic_ostream& __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 + std::basic_istream& + operator>>(std::basic_istream& __is, + _Polynomial<_Tp>& __poly); + + /** + * Return true if two polynomials are equal. + */ + template + 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 + inline bool + operator!=(const _Polynomial<_Tp>& __pa, const _Polynomial<_Tp>& __pb) + { return !(__pa == __pb); } + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace __gnu_cxx + +#include + +#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 +// . + +/** @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 +#else + +#include +#include + +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 + template + 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 + template::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 + template + 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(__e); + __it != std::reverse_iterator(__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 _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 _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 + template + 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 + template + 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 + template + _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 __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(__poly._M_coeff[__j]); + this->_M_coeff = __new_coeff; + return *this; + } + + /** + * Divide two polynomials returning the quotient and remainder. + */ + template + 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 + std::basic_ostream& + operator<<(std::basic_ostream& __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 + std::basic_istream& + operator>>(std::basic_istream& __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 - inline void - __once_call_impl() - { - (*(_Callable*)__once_callable)(); - } #else extern function __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; + __once_callable = std::__addressof(__callable); + __once_call = []{ (*(decltype(__callable)*)__once_callable)(); }; #else unique_lock __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_, __bool_constant, __not_>>; - 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 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(i)); std::unique_ptr* target = (std::unique_ptr*)malloc(sizeof(std::unique_ptr)*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 +// . + +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++1z } } + +#include +#include +#include +#include + +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 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 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 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 pop(in); + const int sample_size = 5; + int out[sample_size]; + test_container 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 +// . + +#include +#include + +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 + +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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_conf_hyperg (&data)[Num], Tp toler) + test(const testcase_conf_hyperg (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_hyperg (&data)[Num], Tp toler) + test(const testcase_hyperg (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_assoc_laguerre (&data)[Num], Tp toler) + test(const testcase_assoc_laguerre (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_assoc_legendre (&data)[Num], Tp toler) + test(const testcase_assoc_legendre (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_beta (&data)[Num], Tp toler) + test(const testcase_beta (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 // 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 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 +template void - test(const testcase_comp_ellint_1 (&data)[Num], Tp toler) + test(const testcase_comp_ellint_1 (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 +template void - test(const testcase_comp_ellint_2 (&data)[Num], Tp toler) + test(const testcase_comp_ellint_2 (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_comp_ellint_3 (&data)[Num], Tp toler) + test(const testcase_comp_ellint_3 (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 -// 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 -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 -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 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 -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 -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 -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 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 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 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 +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 +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 +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 +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 +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 +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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 +template void - test(const testcase_cyl_bessel_i (&data)[Num], Tp toler) + test(const testcase_cyl_bessel_i (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 #include +#include 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 +// . + +#include +#include +#include + +void +test01() +{ + const double inf = std::numeric_limits::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 -// 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 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 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 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 +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 +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 +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 +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 +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 +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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 +template void - test(const testcase_cyl_bessel_j (&data)[Num], Tp toler) + test(const testcase_cyl_bessel_j (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 +// 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 +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 +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 +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 +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 +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 +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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 +template void - test(const testcase_cyl_bessel_k (&data)[Num], Tp toler) + test(const testcase_cyl_bessel_k (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 +// . + +#include +#include +#include + +void +test01() +{ + const double inf = std::numeric_limits::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 +// 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 +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 +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 +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 +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 +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 +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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 -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 +template void - test(const testcase_cyl_neumann (&data)[Num], Tp toler) + test(const testcase_cyl_neumann (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_ellint_1 (&data)[Num], Tp toler) + test(const testcase_ellint_1 (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_ellint_2 (&data)[Num], Tp toler) + test(const testcase_ellint_2 (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_ellint_3 (&data)[Num], Tp toler) + test(const testcase_ellint_3 (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 +template void - test(const testcase_expint (&data)[Num], Tp toler) + test(const testcase_expint (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 +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 +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 +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 +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 +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 +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 +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 +// 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 void - test(const testcase_hermite (&data)[Num], Tp toler) + test(const testcase_hermite (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 +template void - test(const testcase_laguerre (&data)[Num], Tp toler) + test(const testcase_laguerre (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 +template void - test(const testcase_legendre (&data)[Num], Tp toler) + test(const testcase_legendre (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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)) @@ -46,70 +46,76 @@ #include // 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 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)) #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 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 +template void - test(const testcase_riemann_zeta (&data)[Num], Tp toler) + test(const testcase_riemann_zeta (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_sph_bessel (&data)[Num], Tp toler) + test(const testcase_sph_bessel (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_sph_legendre (&data)[Num], Tp toler) + test(const testcase_sph_legendre (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 +template void - test(const testcase_sph_neumann (&data)[Num], Tp toler) + test(const testcase_sph_neumann (&data)[Num], Ret toler) { bool test __attribute__((unused)) = true; - const Tp eps = std::numeric_limits::epsilon(); - Tp max_abs_diff = -Tp(1); - Tp max_abs_frac = -Tp(1); + const Ret eps = std::numeric_limits::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 // . -// 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 + +// Associated Laguerre polynomials. template struct testcase_assoc_laguerre { @@ -36,7 +38,7 @@ template _Tp f; }; -// Associated Legendre functions. +// Associated Legendre functions. template struct testcase_assoc_legendre { @@ -47,7 +49,7 @@ template _Tp f; }; -// Beta function. +// Beta function. template struct testcase_beta { @@ -57,7 +59,7 @@ template _Tp f; }; -// Complete elliptic integrals of the first kind. +// Complete elliptic integrals of the first kind. template struct testcase_comp_ellint_1 { @@ -66,7 +68,7 @@ template _Tp f; }; -// Complete elliptic integrals of the second kind. +// Complete elliptic integrals of the second kind. template struct testcase_comp_ellint_2 { @@ -75,7 +77,7 @@ template _Tp f; }; -// Complete elliptic integrals of the third kind. +// Complete elliptic integrals of the third kind. template struct testcase_comp_ellint_3 { @@ -85,7 +87,16 @@ template _Tp f; }; -// Confluent hypergeometric functions. +// Complete elliptic D integrals. +template + struct testcase_comp_ellint_d + { + _Tp f0; + _Tp k; + _Tp f; + }; + +// Confluent hypergeometric functions. template struct testcase_conf_hyperg { @@ -96,7 +107,17 @@ template _Tp f; }; -// Generic cylindrical Bessel functions. +// Confluent hypergeometric functions. +template + struct testcase_conf_hyperg_lim + { + _Tp f0; + _Tp c; + _Tp x; + _Tp f; + }; + +// Generic cylindrical Bessel functions. template struct testcase_cyl_bessel { @@ -106,7 +127,7 @@ template _Tp f; }; -// Regular modified cylindrical Bessel functions. +// Regular modified cylindrical Bessel functions. template struct testcase_cyl_bessel_i { @@ -116,7 +137,7 @@ template _Tp f; }; -// Cylindrical Bessel functions (of the first kind). +// Cylindrical Bessel functions (of the first kind). template struct testcase_cyl_bessel_j { @@ -126,7 +147,7 @@ template _Tp f; }; -// Irregular modified cylindrical Bessel functions. +// Irregular modified cylindrical Bessel functions. template struct testcase_cyl_bessel_k { @@ -136,7 +157,7 @@ template _Tp f; }; -// Cylindrical Neumann functions. +// Cylindrical Neumann functions. template struct testcase_cyl_neumann { @@ -146,7 +167,7 @@ template _Tp f; }; -// Elliptic integrals of the first kind. +// Elliptic integrals of the first kind. template struct testcase_ellint_1 { @@ -156,7 +177,7 @@ template _Tp f; }; -// Elliptic integrals of the second kind. +// Elliptic integrals of the second kind. template struct testcase_ellint_2 { @@ -166,7 +187,7 @@ template _Tp f; }; -// Elliptic integrals of the third kind. +// Elliptic integrals of the third kind. template struct testcase_ellint_3 { @@ -177,7 +198,37 @@ template _Tp f; }; -// Exponential integral. +// Elliptic D integrals. +template + struct testcase_ellint_d + { + _Tp f0; + _Tp k; + _Tp phi; + _Tp f; + }; + +// Heuman lambda functions. +template + struct testcase_heuman_lambda + { + _Tp f0; + _Tp k; + _Tp phi; + _Tp f; + }; + +// Jacobi zeta functions. +template + struct testcase_jacobi_zeta + { + _Tp f0; + _Tp k; + _Tp phi; + _Tp f; + }; + +// Exponential integral. template struct testcase_expint { @@ -186,7 +237,7 @@ template _Tp f; }; -// Hermite polynomials +// Hermite polynomials template struct testcase_hermite { @@ -196,7 +247,7 @@ template _Tp f; }; -// Hypergeometric functions. +// Hypergeometric functions. template struct testcase_hyperg { @@ -208,7 +259,7 @@ template _Tp f; }; -// Laguerre polynomials. +// Laguerre polynomials. template struct testcase_laguerre { @@ -218,7 +269,7 @@ template _Tp f; }; -// Legendre polynomials. +// Legendre polynomials. template struct testcase_legendre { @@ -228,7 +279,7 @@ template _Tp f; }; -// Riemann zeta function. +// Riemann zeta function. template struct testcase_riemann_zeta { @@ -237,7 +288,7 @@ template _Tp f; }; -// Hurwitz zeta function. +// Hurwitz zeta function. template struct testcase_hurwitz_zeta { @@ -247,7 +298,7 @@ template _Tp f; }; -// Spherical Bessel functions. +// Spherical Bessel functions. template struct testcase_sph_bessel { @@ -257,7 +308,7 @@ template _Tp f; }; -// Regular modified spherical Bessel functions. +// Regular modified spherical Bessel functions. template struct testcase_sph_bessel_i { @@ -267,7 +318,7 @@ template _Tp f; }; -// Irregular modified spherical Bessel functions. +// Irregular modified spherical Bessel functions. template struct testcase_sph_bessel_k { @@ -277,7 +328,7 @@ template _Tp f; }; -// Spherical Legendre functions. +// Spherical Legendre functions. template struct testcase_sph_legendre { @@ -288,7 +339,7 @@ template _Tp f; }; -// Spherical Neumann functions. +// Spherical Neumann functions. template struct testcase_sph_neumann { @@ -298,7 +349,7 @@ template _Tp f; }; -// Airy Ai functions. +// Airy Ai functions. template struct testcase_airy_ai { @@ -307,7 +358,7 @@ template _Tp f; }; -// Airy Bi functions. +// Airy Bi functions. template struct testcase_airy_bi { @@ -316,27 +367,47 @@ template _Tp f; }; -// Upper incomplete gamma functions. +// Upper incomplete gamma functions. +template + struct testcase_tgamma + { + _Tp f0; + _Tp a; + _Tp x; + _Tp f; + }; + +// Lower incomplete gamma functions. template - 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 - 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 + struct testcase_pgamma + { + _Tp f0; + _Tp a; + _Tp x; + _Tp f; + }; + +// Dilogarithm functions. template struct testcase_dilog { @@ -345,7 +416,7 @@ template _Tp f; }; -// Digamma functions. +// Digamma functions. template struct testcase_gamma { @@ -355,7 +426,7 @@ template }; template - struct testcase_comp_ellint_rf + struct testcase_ellint_rc { _Tp f0; _Tp x; @@ -364,7 +435,7 @@ template }; template - struct testcase_ellint_rf + struct testcase_ellint_rd { _Tp f0; _Tp x; @@ -374,18 +445,16 @@ template }; template - struct testcase_ellint_rj + struct testcase_comp_ellint_rf { _Tp f0; _Tp x; _Tp y; - _Tp z; - _Tp p; _Tp f; }; template - struct testcase_ellint_rd + struct testcase_ellint_rf { _Tp f0; _Tp x; @@ -413,4 +482,540 @@ template _Tp f; }; +template + struct testcase_ellint_rj + { + _Tp f0; + _Tp x; + _Tp y; + _Tp z; + _Tp p; + _Tp f; + }; + +template + struct testcase_psi + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_sinint + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_cosint + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_sinhint + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_coshint + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_dawson + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_jacobi_sn + { + _Tp f0; + _Tp k; + _Tp u; + _Tp f; + }; + +template + struct testcase_jacobi_cn + { + _Tp f0; + _Tp k; + _Tp u; + _Tp f; + }; + +template + struct testcase_jacobi_dn + { + _Tp f0; + _Tp k; + _Tp u; + _Tp f; + }; + +template + struct testcase_expint_en + { + _Tp f0; + unsigned int n; + _Tp x; + _Tp f; + }; + +template + struct testcase_fresnel_c + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_fresnel_s + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_sinc + { + _Tp f0; + _Tp x; + _Tp f; + }; + +template + struct testcase_sinc_pi + { + _Tp f0; + _Tp x; + _Tp f; + }; + +// Log upper Pochhammer symbol. +template + struct testcase_lpochhammer + { + _Tp f0; + _Tp a; + _Tp x; + _Tp f; + }; + +// Upper Pochhammer symbols. +template + struct testcase_pochhammer + { + _Tp f0; + _Tp a; + _Tp x; + _Tp f; + }; + +// Log lower Pochhammer symbol. +template + struct testcase_lpochhammer_lower + { + _Tp f0; + _Tp a; + _Tp x; + _Tp f; + }; + +// Lower Pochhammer symbol. +template + struct testcase_pochhammer_lower + { + _Tp f0; + _Tp a; + _Tp x; + _Tp f; + }; + +// Legendre functions of the second kind. +template + struct testcase_legendre_q + { + _Tp f0; + unsigned int l; + _Tp x; + _Tp f; + }; + +// Factorial. +template + struct testcase_factorial + { + _Tp f0; + unsigned int n; + _Tp f; + }; + +// Log factorial. +template + struct testcase_lfactorial + { + _Tp f0; + unsigned int n; + _Tp f; + }; + +// Double factorial. +template + struct testcase_double_factorial + { + _Tp f0; + unsigned int n; + _Tp f; + }; + +// Log double factorial. +template + struct testcase_ldouble_factorial + { + _Tp f0; + unsigned int n; + _Tp f; + }; + +// Binomial coefficient. +template + struct testcase_bincoef + { + _Tp f0; + unsigned int n; + unsigned int k; + _Tp f; + }; + +// Log binomial coefficient. +template + struct testcase_lbincoef + { + _Tp f0; + unsigned int n; + unsigned int k; + _Tp f; + }; + +// Gegenbauer polynomials. +template + struct testcase_gegenbauer + { + _Tp f0; + unsigned int n; + _Tp alpha; + _Tp x; + _Tp f; + }; + +// Chebyshev polynomials of the first kind. +template + struct testcase_chebyshev_t + { + _Tp f0; + unsigned int n; + _Tp x; + _Tp f; + }; + +// Chebyshev polynomials of the second kind. +template + struct testcase_chebyshev_u + { + _Tp f0; + unsigned int n; + _Tp x; + _Tp f; + }; + +// Chebyshev polynomials of the third kind. +template + struct testcase_chebyshev_v + { + _Tp f0; + unsigned int n; + _Tp x; + _Tp f; + }; + +// Chebyshev polynomials of the fourth kind. +template + struct testcase_chebyshev_w + { + _Tp f0; + unsigned int n; + _Tp x; + _Tp f; + }; + +// Zernike polynomials. +template + struct testcase_zernike + { + _Tp f0; + unsigned int n; + int m; + _Tp rho; + _Tp phi; + _Tp f; + }; + +// Radial polynomials. +template + struct testcase_radpoly + { + _Tp f0; + unsigned int n; + int m; + _Tp rho; + _Tp f; + }; + +// Incomplete beta function. +template + struct testcase_ibeta + { + _Tp f0; + _Tp a; + _Tp b; + _Tp x; + _Tp f; + }; + +// Complementary beta function. +template + struct testcase_ibetac + { + _Tp f0; + _Tp a; + _Tp b; + _Tp x; + _Tp f; + }; + +// Cylindrical Hankel functions. +template + struct testcase_cyl_hankel_1 + { + std::complex<_Tp> f0; + _Tp nu; + _Tp x; + std::complex<_Tp> f; + }; + +// Cylindrical Hankel functions. +template + struct testcase_cyl_hankel_2 + { + std::complex<_Tp> f0; + _Tp nu; + _Tp x; + std::complex<_Tp> f; + }; + +// Spherical Hankel functions. +template + struct testcase_sph_hankel_1 + { + std::complex<_Tp> f0; + unsigned int n; + _Tp x; + std::complex<_Tp> f; + }; + +// Spherical Hankel functions. +template + struct testcase_sph_hankel_2 + { + std::complex<_Tp> f0; + unsigned int n; + _Tp x; + std::complex<_Tp> f; + }; + +// Spherical Harmonic functions. +template + struct testcase_sph_harmonic + { + std::complex<_Tp> f0; + unsigned int l; + int m; + _Tp theta; + _Tp phi; + std::complex<_Tp> f; + }; + +// Jacobi polynomials. +template + struct testcase_jacobi + { + _Tp f0; + unsigned int n; + _Tp alpha; + _Tp beta; + _Tp x; + _Tp f; + }; + +// Polylogarithm functions. +template + struct testcase_polylog + { + std::complex<_Tp> f0; + _Tp s; + std::complex<_Tp> w; + std::complex<_Tp> f; + }; + +// Clausen functions. +template + struct testcase_clausen + { + std::complex<_Tp> f0; + unsigned int m; + std::complex<_Tp> w; + std::complex<_Tp> f; + }; + +// Dirichlet eta function. +template + struct testcase_dirichlet_eta + { + _Tp f0; + _Tp s; + _Tp f; + }; + +// Dirichlet beta function. +template + struct testcase_dirichlet_beta + { + _Tp f0; + _Tp s; + _Tp f; + }; + +// Dirichlet lambda function. +template + struct testcase_dirichlet_lambda + { + _Tp f0; + _Tp s; + _Tp f; + }; + +// Owens T functions. +template + struct testcase_owens_t + { + _Tp f0; + _Tp h; + _Tp a; + _Tp f; + }; + +// Clausen Cl_2 function. +template + struct testcase_clausen_c + { + _Tp f0; + unsigned int m; + _Tp w; + _Tp f; + }; + +// Exponential theta_1 functions. +template + struct testcase_theta_1 + { + _Tp f0; + _Tp nu; + _Tp x; + _Tp f; + }; + +// Exponential theta_2 functions. +template + struct testcase_theta_2 + { + _Tp f0; + _Tp nu; + _Tp x; + _Tp f; + }; + +// Exponential theta_3 functions. +template + struct testcase_theta_3 + { + _Tp f0; + _Tp nu; + _Tp x; + _Tp f; + }; + +// Exponential theta_4 functions. +template + struct testcase_theta_4 + { + _Tp f0; + _Tp nu; + _Tp x; + _Tp f; + }; + +// Elliptic nome. +template + struct testcase_ellnome + { + _Tp f0; + _Tp k; + _Tp f; + }; + +// Reperiodized sine function. +template + struct testcase_sin_pi + { + _Tp f0; + _Tp x; + _Tp f; + }; + +// Reperiodized cosine function. +template + struct testcase_cos_pi + { + _Tp f0; + _Tp x; + _Tp f; + }; + +// Reperiodized tangent function. +template + 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; -- cgit v1.2.3