From d7e4bf780b496cbd6140d06cccba3f0374ae9d78 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 27 Oct 2019 14:12:34 -0400 Subject: [PATCH 001/104] Continuous Daubechies wavelets [CI SKIP] --- doc/sf/daubechies.qbk | 53 + example/daubechies_coefficients.cpp | 88 +- example/daubechies_scaling_integer_grid.cpp | 246 +++ include/boost/math/filters/daubechies.hpp | 419 ++++ .../special_functions/daubechies_scaling.hpp | 352 ++++ .../daubechies_scaling_integer_grid.hpp | 1830 +++++++++++++++++ test/daubechies_scaling_test.cpp | 441 ++++ 7 files changed, 3421 insertions(+), 8 deletions(-) create mode 100644 doc/sf/daubechies.qbk create mode 100644 example/daubechies_scaling_integer_grid.cpp create mode 100644 include/boost/math/filters/daubechies.hpp create mode 100644 include/boost/math/special_functions/daubechies_scaling.hpp create mode 100644 include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp create mode 100644 test/daubechies_scaling_test.cpp diff --git a/doc/sf/daubechies.qbk b/doc/sf/daubechies.qbk new file mode 100644 index 000000000..a0f92d8e8 --- /dev/null +++ b/doc/sf/daubechies.qbk @@ -0,0 +1,53 @@ +[/ + Copyright 2019, Nick Thompson + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:daubechies Daubechies Wavelets and Scaling Functions] + +[h4 Synopsis] + + #include + + namespace boost::math::filters { + + template + constexpr std::array daubechies_scaling_filter(); + + template + std::array daubechies_wavelet_filter(); + + } // namespaces + + +Daubechies wavelets are a family of compactly supported functions indexed by an integer /p/ which have /p/ vanishing moments and an associated filter of length /2p/. +They are used in signal denoising, Galerkin methods for PDEs, and compression. + +The canonical reference on these functions is Daubechies' monograph /Ten Lectures on Wavelets/, +which we attempt to follow here. + +To get the (low-pass) scaling filter for the Daubechies scaling function with 3 vanishing moments, use + + auto h = boost::math::filters::daubechies_scaling_filter(); + +To get the (high-pass) wavelet filter for the Daubechies wavelet with 3 vanishing moments, use + + auto g = boost::math::filters::daubechies_wavelet_filter(); + +Notational conventions for these filters seem not to exist. +Ambiguities include whether or not the filter is defined via convolution or dot product (which corresponds to reversing the array), +and the overall scaling. +/The filters in Boost.Math agree with Daubechies, Ten Lectures, Table 6.1./ +This means that the elements sum to sqrt(2), and the filter is defined via a dot product. + + +[heading References] + +* Daubechies, Ingrid. ['Ten lectures on wavelets.] Vol. 61. Siam, 1992. +* Mallat, Stephane. ['A wavelet tour of signal processing: the sparse way] Academic press, 2008. + + + +[endsect] diff --git a/example/daubechies_coefficients.cpp b/example/daubechies_coefficients.cpp index 4a8c41102..5ccc77fb6 100644 --- a/example/daubechies_coefficients.cpp +++ b/example/daubechies_coefficients.cpp @@ -5,6 +5,7 @@ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #include +#include #include #include #include @@ -16,6 +17,7 @@ #include #include #include +#include #include #include @@ -182,8 +184,7 @@ std::vector daubechies_coefficients(std::vector h(result.size()); for (size_t i = 0; i < result.size(); ++i) { @@ -207,15 +208,86 @@ std::vector daubechies_coefficients(std::vector Complex; - for(size_t p = 1; p < 200; ++p) + typedef boost::multiprecision::cpp_complex<150> Complex; + size_t p_max = 25; + std::ofstream fs{"daubechies_filters.hpp"}; + fs << "/*\n" + << " * Copyright Nick Thompson, 2019\n" + << " * Use, modification and distribution are subject to the\n" + << " * Boost Software License, Version 1.0. (See accompanying file\n" + << " * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n" + << " */\n" + << "#ifndef BOOST_MATH_FILTERS_DAUBECHIES_HPP\n" + << "#define BOOST_MATH_FILTERS_DAUBECHIES_HPP\n" + << "#include \n" + << "#ifdef BOOST_HAS_FLOAT128\n" + << "#include \n" + << "#endif\n" + << "namespace boost::math::filters {\n\n" + << "template \n" + << "constexpr std::array daubechies_scaling_filter()\n" + << "{\n" + << " static_assert(sizeof(Real) <= 16, \"Filter coefficients only computed up to 128 bits of precision.\");\n" + << " static_assert(p < " << p_max << ", \"Filter coefficients only implemented up to " << p_max - 1 << ".\");\n"; + + for(size_t p = 1; p < p_max; ++p) { + fs << std::hexfloat; auto roots = find_roots(p); auto h = daubechies_coefficients(roots); - std::cout << "h_" << p << "[] = {"; - for (auto& x : h) { - std::cout << x << ", "; + fs << " if constexpr (p == " << p << ") {\n"; + fs << " if constexpr (std::is_same_v) {\n"; + fs << " return {"; + for (size_t i = 0; i < h.size() - 1; ++i) { + fs << static_cast(h[i]) << "f, "; } - std::cout << "} // = h_" << p << "\n\n\n\n"; + fs << static_cast(h[h.size()-1]) << "f};\n"; + fs << " }\n"; + + fs << " if constexpr (std::is_same_v) {\n"; + fs << " return {"; + for (size_t i = 0; i < h.size() - 1; ++i) { + fs << static_cast(h[i]) << ", "; + } + fs << static_cast(h[h.size()-1]) << "};\n"; + fs << " }\n"; + + fs << " if constexpr (std::is_same_v) {\n"; + fs << " return {"; + for (size_t i = 0; i < h.size() - 1; ++i) { + fs << static_cast(h[i]) << "L, "; + } + fs << static_cast(h[h.size()-1]) << "L};\n"; + fs << " }\n"; + + fs << " #ifdef BOOST_HAS_FLOAT128\n"; + fs << " if constexpr (std::is_same_v) {\n"; + fs << " return {"; + for (size_t i = 0; i < h.size() - 1; ++i) { + fs << static_cast(h[i]) << "Q, "; + } + fs << static_cast(h[h.size()-1]) << "Q};\n"; + fs << " }\n"; + fs << " #endif\n"; + + + fs << " }\n"; } + + fs << "}\n\n"; + + fs << "template\n"; + fs << "std::array daubechies_wavelet_filter() {\n"; + fs << " std::array g;\n"; + fs << " auto h = daubechies_scaling_filter();\n"; + fs << " for (size_t i = 0; i < g.size(); i += 2)\n"; + fs << " {\n"; + fs << " g[i] = h[g.size() - i - 1];\n"; + fs << " g[i+1] = -h[g.size() - i - 2];\n"; + fs << " }\n"; + fs << " return g;\n"; + fs << "}\n\n"; + fs << "} // namespaces\n"; + fs << "#endif\n"; + fs.close(); } diff --git a/example/daubechies_scaling_integer_grid.cpp b/example/daubechies_scaling_integer_grid.cpp new file mode 100644 index 000000000..cdb255327 --- /dev/null +++ b/example/daubechies_scaling_integer_grid.cpp @@ -0,0 +1,246 @@ +/* + * Copyright Nick Thompson, 2019 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +template +std::list> integer_grid() +{ + std::cout << std::setprecision(std::numeric_limits::digits10 + 3); + using std::abs; + using std::sqrt; + using std::pow; + std::list> grids; + + auto c = boost::math::filters::daubechies_scaling_filter(); + for (auto & x : c) + { + x *= boost::math::constants::root_two(); + } + std::cout << "\n\nTaps in filter = " << c.size() << "\n"; + + + Eigen::Matrix A; + for (int j = 0; j < 2*p-2; ++j) { + for (int k = 0; k < 2*p-2; ++k) { + if ( (2*j-k + 1) < 0 || (2*j - k + 1) >= 2*p) + { + A(j,k) = 0; + } + else { + A(j,k) = c[2*j - k + 1]; + } + } + } + + Eigen::EigenSolver es(A); + + auto complex_eigs = es.eigenvalues(); + + std::vector eigs(complex_eigs.size(), std::numeric_limits::quiet_NaN()); + + std::cout << "Eigenvalues = {"; + for (long i = 0; i < complex_eigs.size(); ++i) { + assert(abs(complex_eigs[i].imag()) < std::numeric_limits::epsilon()); + eigs[i] = complex_eigs[i].real(); + std::cout << eigs[i] << ", "; + } + std::cout << "}\n"; + + // Eigen does not sort the eigenpairs by any criteria on the eigenvalues. + // In any case, even if it did, some of the eigenpairs do not correspond to derivatives anyway. + for (size_t j = 0; j < eigs.size(); ++j) { + auto f = [&](Real x) { + return abs(x - Real(1)/Real(1 << j) ) < sqrt(std::numeric_limits::epsilon()); + }; + auto it = std::find_if(eigs.begin(), eigs.end(), f); + if (it == eigs.end()) { + std::cout << "couldn't find eigenvalue " << Real(1)/Real(1 << j) << "\n"; + continue; + } + size_t idx = std::distance(eigs.begin(), it); + std::cout << "Eigenvector for derivative " << j << " is at index " << idx << "\n"; + auto const & complex_eigenvec = es.eigenvectors().col(idx); + std::vector eigenvec(complex_eigenvec.size() + 2, std::numeric_limits::quiet_NaN()); + eigenvec[0] = 0; + eigenvec[eigenvec.size()-1] = 0; + for (size_t i = 0; i < eigenvec.size() - 2; ++i) { + assert(abs(complex_eigenvec[i].imag()) < std::numeric_limits::epsilon()); + eigenvec[i+1] = complex_eigenvec[i].real(); + } + + Real sum = 0; + for(size_t k = 1; k < eigenvec.size(); ++k) { + sum += pow(k, j)*eigenvec[k]; + } + + Real alpha = pow(-1, j)*boost::math::factorial(j)/sum; + + for (size_t i = 1; i < eigenvec.size(); ++i) { + eigenvec[i] *= alpha; + } + + + std::cout << "Eigenvector = {"; + for (size_t i = 0; i < eigenvec.size() -1; ++i) { + std::cout << eigenvec[i] << ", "; + } + std::cout << eigenvec[eigenvec.size()-1] << "}\n"; + + sum = 0; + for(size_t k = 1; k < eigenvec.size(); ++k) { + sum += pow(k, j)*eigenvec[k]; + } + + std::cout << "Moment sum = " << sum << ", expected = " << pow(-1, j)*boost::math::factorial(j) << "\n"; + + assert(abs(sum - pow(-1, j)*boost::math::factorial(j))/abs(pow(-1, j)*boost::math::factorial(j)) < sqrt(std::numeric_limits::epsilon())); + + grids.push_back(eigenvec); + } + + + return grids; +} + +template +void write_grid(std::ofstream & fs) +{ + auto grids = integer_grid(); + fs << " if constexpr (p == " << p << ") {\n"; + fs << " if constexpr (std::is_same_v) {\n"; + size_t j = 0; + for (auto it = grids.begin(); it != grids.end(); ++it) { + + fs << " if constexpr (order == " << j << ") {\n"; + fs << " return {"; + auto const & grid = *it; + for (size_t i = 0; i < grid.size() -1; ++i) { + fs << static_cast(grid[i]) << "f, "; + } + fs << static_cast(grid[grid.size()-1]) << "f};\n"; + fs << " }\n"; + ++j; + } + fs << " }\n"; + + fs << " if constexpr (std::is_same_v) {\n"; + j = 0; + for (auto it = grids.begin(); it != grids.end(); ++it) { + + fs << " if constexpr (order == " << j << ") {\n"; + fs << " return {"; + auto const & grid = *it; + for (size_t i = 0; i < grid.size() -1; ++i) { + fs << static_cast(grid[i]) << ", "; + } + fs << static_cast(grid[grid.size()-1]) << "};\n"; + fs << " }\n"; + ++j; + } + fs << " }\n"; + + + fs << " if constexpr (std::is_same_v) {\n"; + j = 0; + for (auto it = grids.begin(); it != grids.end(); ++it) { + + fs << " if constexpr (order == " << j << ") {\n"; + fs << " return {"; + auto const & grid = *it; + for (size_t i = 0; i < grid.size() -1; ++i) { + fs << static_cast(grid[i]) << "L, "; + } + fs << static_cast(grid[grid.size()-1]) << "L};\n"; + fs << " }\n"; + ++j; + } + fs << " }\n"; + + fs << " #ifdef BOOST_HAS_FLOAT128\n"; + fs << " if constexpr (std::is_same_v) {\n"; + j = 0; + for (auto it = grids.begin(); it != grids.end(); ++it) { + + fs << " if constexpr (order == " << j << ") {\n"; + fs << " return {"; + auto const & grid = *it; + for (size_t i = 0; i < grid.size() -1; ++i) { + fs << static_cast(grid[i]) << "Q, "; + } + fs << static_cast(grid[grid.size()-1]) << "Q};\n"; + fs << " }\n"; + ++j; + } + fs << " }\n"; + fs << " #endif\n"; + fs << " }\n"; + +} + +int main() +{ + constexpr const size_t p_max = 15; + std::ofstream fs{"daubechies_scaling_integer_grid.hpp"}; + fs << "/*\n" + << " * Copyright Nick Thompson, 2019\n" + << " * Use, modification and distribution are subject to the\n" + << " * Boost Software License, Version 1.0. (See accompanying file\n" + << " * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n" + << " */\n" + << "// THIS FILE GENERATED BY EXAMPLE/DAUBECHIES_SCALING_INTEGER_GRID.CPP, DO NOT EDIT.\n" + << "#ifndef BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP\n" + << "#define BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP\n" + << "#include \n" + << "#ifdef BOOST_HAS_FLOAT128\n" + << "#include \n" + << "#endif\n" + << "namespace boost::math::detail {\n\n" + << "template \n" + << "constexpr std::array daubechies_scaling_integer_grid()\n" + << "{\n" + << " static_assert(sizeof(Real) <= 16, \"Integer grids only computed up to 128 bits of precision.\");\n" + << " static_assert(p <= " << p_max << ", \"Integer grids only implemented up to " << p_max << ".\");\n" + << " static_assert(p > 1, \"Integer grids only implemented for p >= 2.\");\n"; + + + fs << std::hexfloat; + + boost::hana::for_each(std::make_index_sequence(), [&](auto idx){ + write_grid(fs); + }); + + fs << " std::array m{};\n" + << " for (auto & x : m) {\n" + << " x = std::numeric_limits::quiet_NaN();\n" + << " }\n" + << " return m;\n"; + + + fs << "}\n\n"; + + fs << "} // namespaces\n"; + fs << "#endif\n"; + fs.close(); + + return 0; +} diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp new file mode 100644 index 000000000..94e3382c8 --- /dev/null +++ b/include/boost/math/filters/daubechies.hpp @@ -0,0 +1,419 @@ +/* + * Copyright Nick Thompson, 2019 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef BOOST_MATH_FILTERS_DAUBECHIES_HPP +#define BOOST_MATH_FILTERS_DAUBECHIES_HPP +#include +#ifdef BOOST_HAS_FLOAT128 +#include +#endif +namespace boost::math::filters { + +template +constexpr std::array daubechies_scaling_filter() +{ + static_assert(sizeof(Real) <= 16, "Filter coefficients only computed up to 128 bits of precision."); + static_assert(p < 25, "Filter coefficients only implemented up to 24."); + if constexpr (p == 1) { + if constexpr (std::is_same_v) { + return {0x1.6a09e6p-1f, 0x1.6a09e6p-1f}; + } + if constexpr (std::is_same_v) { + return {0x1.6a09e667f3bcdp-1, 0x1.6a09e667f3bcdp-1}; + } + if constexpr (std::is_same_v) { + return {0xb.504f333f9de6484p-4L, 0xb.504f333f9de6484p-4L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.6a09e667f3bcc908b2fb1366ea95p-1Q, 0x1.6a09e667f3bcc908b2fb1366ea95p-1Q}; + } + #endif + } + if constexpr (p == 2) { + if constexpr (std::is_same_v) { + return {0x1.ee8dd4p-2f, 0x1.ac4bdep-1f, 0x1.cb0bfp-3f, -0x1.0907dcp-3f}; + } + if constexpr (std::is_same_v) { + return {0x1.ee8dd4748bf15p-2, 0x1.ac4bdd6e3fd71p-1, 0x1.cb0bf0b6b7109p-3, -0x1.0907dc193069p-3}; + } + if constexpr (std::is_same_v) { + return {0xf.746ea3a45f8a62ap-5L, 0xd.625eeb71feb8557p-4L, 0xe.585f85b5b8845bdp-6L, -0x8.483ee0c9834834cp-6L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.ee8dd4748bf14c548b969de58fap-2Q, 0x1.ac4bdd6e3fd70aae9f48d8a63d1bp-1Q, 0x1.cb0bf0b6b7108b79b4bf11d08b16p-3Q, -0x1.0907dc1930690697b13714fd4a15p-3Q}; + } + #endif + } + if constexpr (p == 3) { + if constexpr (std::is_same_v) { + return {0x1.54a796p-2f, 0x1.9d20e2p-1f, 0x1.d6ea2p-2f, -0x1.1480a8p-3f, -0x1.5df7acp-4f, 0x1.2092e4p-5f}; + } + if constexpr (std::is_same_v) { + return {0x1.54a796e50d264p-2, 0x1.9d20e247d28bbp-1, 0x1.d6ea20bf0f744p-2, -0x1.1480a85c59629p-3, -0x1.5df7ab50d483cp-4, 0x1.2092e373789b9p-5}; + } + if constexpr (std::is_same_v) { + return {0xa.a53cb7286931db4p-5L, 0xc.e907123e945da19p-4L, 0xe.b75105f87ba23d6p-5L, -0x8.a40542e2cb14943p-6L, -0xa.efbd5a86a41e206p-7L, 0x9.04971b9bc4dcbc1p-8L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.54a796e50d263b67e38e82a5584cp-2Q, 0x1.9d20e247d28bb431f1e6c634b34ep-1Q, 0x1.d6ea20bf0f7447ac92de97f0e152p-2Q, -0x1.1480a85c596292857548d060a171p-3Q, -0x1.5df7ab50d483c40c41dbcf2191cfp-4Q, 0x1.2092e373789b9781e66814a5fa37p-5Q}; + } + #endif + } + if constexpr (p == 4) { + if constexpr (std::is_same_v) { + return {0x1.d7d052p-3f, 0x1.6e005ep-1f, 0x1.4302cep-1f, -0x1.ca7c7p-6f, -0x1.7f0c1cp-3f, 0x1.f94e22p-6f, 0x1.0d60acp-5f, -0x1.5b4174p-7f}; + } + if constexpr (std::is_same_v) { + return {0x1.d7d052af15ecp-3, 0x1.6e005ea45d748p-1, 0x1.4302cdd3de43ap-1, -0x1.ca7c6f9db5bfbp-6, -0x1.7f0c1b7c604d4p-3, 0x1.f94e2196383a9p-6, 0x1.0d60ac768117bp-5, -0x1.5b41730b72e29p-7}; + } + if constexpr (std::is_same_v) { + return {0xe.be829578af5fe6dp-6L, 0xb.7002f522eba3e31p-4L, 0xa.18166e9ef21cf0dp-4L, -0xe.53e37cedadfd7d8p-9L, -0xb.f860dbe30269f7ap-6L, 0xf.ca710cb1c1d472dp-9L, 0x8.6b0563b408bdbabp-8L, -0xa.da0b985b97149dcp-10L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.d7d052af15ebfcd98dc85ef4cc01p-3Q, 0x1.6e005ea45d747c624e43405b1919p-1Q, 0x1.4302cdd3de439e1a299a6a04b89fp-1Q, -0x1.ca7c6f9db5bfafb07b9dace22f7p-6Q, -0x1.7f0c1b7c604d3ef4ab50462dfcedp-3Q, 0x1.f94e2196383a8e592495a4baff62p-6Q, 0x1.0d60ac768117b7550c2a3307e30fp-5Q, -0x1.5b41730b72e293b823fb2cbd40c6p-7Q}; + } + #endif + } + if constexpr (p == 5) { + if constexpr (std::is_same_v) { + return {0x1.47e3c4p-3f, 0x1.35291cp-1f, 0x1.72d892p-1f, 0x1.1b8038p-3f, -0x1.f0384ep-3f, -0x1.082664p-5f, 0x1.3dbb9cp-4f, -0x1.990ad4p-8f, -0x1.9c3fp-7f, 0x1.b5385ep-9f}; + } + if constexpr (std::is_same_v) { + return {0x1.47e3c41a7b911p-3, 0x1.35291c2c4b00cp-1, 0x1.72d89143b54f5p-1, 0x1.1b80373befcc6p-3, -0x1.f0384d3f81474p-3, -0x1.0826648a8dc74p-5, 0x1.3dbb9b52515aap-4, -0x1.990ad4579f2e8p-8, -0x1.9c3eff3294128p-7, 0x1.b5385e04e3c09p-9}; + } + if constexpr (std::is_same_v) { + return {0xa.3f1e20d3dc8840dp-6L, 0x9.a948e1625806185p-4L, 0xb.96c48a1daa7a767p-4L, 0x8.dc01b9df7e62cc6p-6L, -0xf.81c269fc0a3a1e2p-6L, -0x8.413324546e39fcbp-8L, 0x9.eddcda928ad4cf6p-7L, -0xc.c856a2bcf973f17p-11L, -0xc.e1f7f994a094303p-10L, 0xd.a9c2f0271e04896p-12L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.47e3c41a7b91081ae95ed12670b7p-3Q, 0x1.35291c2c4b00c30a87eaf4d05e71p-1Q, 0x1.72d89143b54f4ecd724f0b79d111p-1Q, 0x1.1b80373befcc598b25a1d5436079p-3Q, -0x1.f0384d3f814743c3d93da5cd8909p-3Q, -0x1.0826648a8dc73f96ef19214f403ep-5Q, 0x1.3dbb9b52515a99ecaa66a225e968p-4Q, -0x1.990ad4579f2e7e2dc54832641bd8p-8Q, -0x1.9c3eff32941286062a45cb776526p-7Q, 0x1.b5385e04e3c0912c23cbbf7041e8p-9Q}; + } + #endif + } + if constexpr (p == 6) { + if constexpr (std::is_same_v) { + return {0x1.c8def2p-4f, 0x1.fa7ebp-2f, 0x1.8094ap-1f, 0x1.42d0fcp-2f, -0x1.cf63dep-3f, -0x1.09c336p-3f, 0x1.8f5dd8p-4f, 0x1.c2ef44p-6f, -0x1.02b856p-5f, 0x1.225f72p-11f, 0x1.391514p-8f, -0x1.1a6874p-10f}; + } + if constexpr (std::is_same_v) { + return {0x1.c8def24dc3952p-4, 0x1.fa7eaf64539a9p-2, 0x1.80949fa3bc0bbp-1, 0x1.42d0fcfa92f21p-2, -0x1.cf63dd26916f1p-3, -0x1.09c33622722ebp-3, 0x1.8f5dd7f4e1752p-4, 0x1.c2ef43d612549p-6, -0x1.02b856404e8cep-5, 0x1.225f71210a7c1p-11, 0x1.391514c62a31bp-8, -0x1.1a6873b7a6466p-10}; + } + if constexpr (std::is_same_v) { + return {0xe.46f7926e1ca8e15p-7L, 0xf.d3f57b229cd4bdfp-5L, 0xc.04a4fd1de05d701p-4L, 0xa.1687e7d497907f9p-5L, -0xe.7b1ee9348b785acp-6L, -0x8.4e19b11391756c5p-6L, 0xc.7aeebfa70ba93cep-7L, 0xe.177a1eb092a4be4p-9L, -0x8.15c2b2027466fc3p-8L, 0x9.12fb890853e0901p-14L, 0x9.c8a8a631518d6e7p-11L, -0x8.d3439dbd3232f08p-13L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.c8def24dc3951c2a6dae413b8ddbp-4Q, 0x1.fa7eaf64539a97bd50da008738e1p-2Q, 0x1.80949fa3bc0bae02bf1b494d3af8p-1Q, 0x1.42d0fcfa92f20ff1b5b87f2f698cp-2Q, -0x1.cf63dd26916f0b589f7743608e82p-3Q, -0x1.09c33622722ead8a0ff038a97bp-3Q, 0x1.8f5dd7f4e175279c5a356a3fbcc9p-4Q, 0x1.c2ef43d6125497c75e24a80c6bfap-6Q, -0x1.02b856404e8cdf85933c3736d91cp-5Q, 0x1.225f71210a7c1202de723c931ed6p-11Q, 0x1.391514c62a31adcdfa747aebbdeep-8Q, -0x1.1a6873b7a6465e0ff5c033201061p-10Q}; + } + #endif + } + if constexpr (p == 7) { + if constexpr (std::is_same_v) { + return {0x1.3ee1ccp-4f, 0x1.960e68p-2f, 0x1.7550cep-1f, 0x1.e10e9cp-2f, -0x1.26b83p-3f, -0x1.cad37cp-3f, 0x1.241522p-4f, 0x1.4a3072p-4f, -0x1.378a8ep-5f, -0x1.0f8eaap-6f, 0x1.9b4568p-7f, 0x1.c271f6p-12f, -0x1.d84a1p-10f, 0x1.72e554p-12f}; + } + if constexpr (std::is_same_v) { + return {0x1.3ee1cba38b6b1p-4, 0x1.960e674303003p-2, 0x1.7550cd294c1fep-1, 0x1.e10e9ba294ddcp-2, -0x1.26b830e491e33p-3, -0x1.cad37bbd5ab97p-3, 0x1.241522ca7821cp-4, 0x1.4a30727f2fa53p-4, -0x1.378a8eecf45ccp-5, -0x1.0f8eaa8ffe709p-6, 0x1.9b45682a50d7p-7, 0x1.c271f584373d4p-12, -0x1.d84a0f9cb2f31p-10, 0x1.72e5533fa10d3p-12}; + } + if constexpr (std::is_same_v) { + return {0x9.f70e5d1c5b5851p-7L, 0xc.b0733a181801b18p-5L, 0xb.aa86694a60ff1fap-4L, 0xf.0874dd14a6ee015p-5L, -0x9.35c187248f196d4p-6L, -0xe.569bddead5cb84ap-6L, 0x9.20a91653c10e31cp-7L, 0xa.518393f97d2944bp-7L, -0x9.bc547767a2e6031p-8L, -0x8.7c75547ff384611p-9L, 0xc.da2b415286b8088p-10L, 0xe.138fac21b9ea0e9p-15L, -0xe.c2507ce59798a73p-13L, 0xb.972a99fd0869924p-15L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.3ee1cba38b6b0a205a4c9aac651fp-4Q, 0x1.960e67430300363014da61e0a27dp-2Q, 0x1.7550cd294c1fe3f40f374c82e23dp-1Q, 0x1.e10e9ba294ddc02a47644f227fffp-2Q, -0x1.26b830e491e32da8b525e8ab6aa1p-3Q, -0x1.cad37bbd5ab970931a91ed1dfe9cp-3Q, 0x1.241522ca7821c638e85eb5e52839p-4Q, 0x1.4a30727f2fa52896ef76d0300cfp-4Q, -0x1.378a8eecf45cc0627b1c4b5cace1p-5Q, -0x1.0f8eaa8ffe708c22b1145a6b8cc8p-6Q, 0x1.9b45682a50d70110df27e4af9e36p-7Q, 0x1.c271f584373d41d177397b25f7ebp-12Q, -0x1.d84a0f9cb2f314e62607c084aab4p-10Q, 0x1.72e5533fa10d324758be56783dp-12Q}; + } + #endif + } + if constexpr (p == 8) { + if constexpr (std::is_same_v) { + return {0x1.bdc64ap-5f, 0x1.40616ap-2f, 0x1.59ec46p-1f, 0x1.2bb39cp-1f, -0x1.035814p-6f, -0x1.22d4f8p-2f, 0x1.ef6f9cp-12f, 0x1.07acbcp-3f, -0x1.1c942p-6f, -0x1.692bc6p-5f, 0x1.ca215cp-7f, 0x1.1e978ep-7f, -0x1.3f2ef6p-8f, -0x1.9ac502p-12f, 0x1.622148p-11f, -0x1.ecbbbcp-14f}; + } + if constexpr (std::is_same_v) { + return {0x1.bdc64ada308ddp-5, 0x1.4061690b4c31ep-2, 0x1.59ec45992376p-1, 0x1.2bb39bedb5e28p-1, -0x1.03581459a95c6p-6, -0x1.22d4f8724d56fp-2, 0x1.ef6f9caf662bp-12, 0x1.07acbb163ba09p-3, -0x1.1c9420f07509dp-6, -0x1.692bc518a7fe2p-5, 0x1.ca215cd5b85b4p-7, 0x1.1e978df35f5fcp-7, -0x1.3f2ef6d3ac74ap-8, -0x1.9ac501798e65dp-12, 0x1.622148e2ef341p-11, -0x1.ecbbbc88e3fc3p-14}; + } + if constexpr (std::is_same_v) { + return {0xd.ee3256d1846ea19p-8L, 0xa.030b485a618f383p-5L, 0xa.cf622cc91bb0386p-4L, 0x9.5d9cdf6daf13eaep-4L, -0x8.1ac0a2cd4ae2f65p-9L, -0x9.16a7c3926ab7ac2p-5L, 0xf.7b7ce57b3157c6dp-15L, 0x8.3d65d8b1dd0442p-6L, -0x8.e4a10783a84e546p-9L, -0xb.495e28c53ff0c66p-8L, 0xe.510ae6adc2d9ca2p-10L, 0x8.f4bc6f9afafe075p-10L, -0x9.f977b69d63a5188p-11L, -0xc.d6280bcc732e77dp-15L, 0xb.110a471779a0a94p-14L, -0xf.65dde4471fe1763p-17L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.bdc64ada308dd431e90c51caaddfp-5Q, 0x1.4061690b4c31e70689f16560d4fdp-2Q, 0x1.59ec45992376070ce88329890c41p-1Q, 0x1.2bb39bedb5e27d5c19af764e6b08p-1Q, -0x1.03581459a95c5ec9b8a25898e79fp-6Q, -0x1.22d4f8724d56f584680effd871d8p-2Q, 0x1.ef6f9caf662af8d967c439494864p-12Q, 0x1.07acbb163ba0883fad048482f33cp-3Q, -0x1.1c9420f07509ca8be1e93402904ap-6Q, -0x1.692bc518a7fe18cb861085169737p-5Q, 0x1.ca215cd5b85b39449ec69ab26159p-7Q, 0x1.1e978df35f5fc0eabddff5ee9da6p-7Q, -0x1.3f2ef6d3ac74a30f6f64186b6be2p-8Q, -0x1.9ac501798e65cefa54cc7686cbfep-12Q, 0x1.622148e2ef341527c8d993cd7e86p-11Q, -0x1.ecbbbc88e3fc2ec652987ddfb595p-14Q}; + } + #endif + } + if constexpr (p == 9) { + if constexpr (std::is_same_v) { + return {0x1.37ef3ep-5f, 0x1.f35f98p-3f, 0x1.35ab6p-1f, 0x1.50881p-1f, 0x1.10c9cap-3f, -0x1.2c4ff6p-2f, -0x1.8ca8ecp-4f, 0x1.303622p-3f, 0x1.f768dap-6f, -0x1.15062ap-4f, 0x1.07231ap-12f, 0x1.6e5f9cp-6f, -0x1.358a3ap-8f, -0x1.1897b6p-8f, 0x1.e4597cp-10f, 0x1.e3276ap-13f, -0x1.0833dap-12f, 0x1.4a11bap-15f}; + } + if constexpr (std::is_same_v) { + return {0x1.37ef3e540da7cp-5, 0x1.f35f9808bc2ap-3, 0x1.35ab60603a288p-1, 0x1.5088101e8fe35p-1, 0x1.10c9ca803fb22p-3, -0x1.2c4ff66fd53efp-2, -0x1.8ca8ebcdc98fcp-4, 0x1.303621e43e771p-3, 0x1.f768d94677997p-6, -0x1.1506294f451a2p-4, 0x1.07231a6b6ca0dp-12, 0x1.6e5f9be058887p-6, -0x1.358a39f783bbfp-8, -0x1.1897b64b3bfb6p-8, 0x1.e4597bbfc711fp-10, 0x1.e3276a3bc510bp-13, -0x1.0833da803978ap-12, 0x1.4a11ba1ad31b5p-15}; + } + if constexpr (std::is_same_v) { + return {0x9.bf79f2a06d3e1d5p-8L, 0xf.9afcc045e1503b9p-6L, 0x9.ad5b0301d143d0bp-4L, 0xa.844080f47f1a981p-4L, 0x8.864e5401fd91397p-6L, -0x9.627fb37ea9f7708p-5L, -0xc.65475e6e4c7e255p-7L, 0x9.81b10f21f3b8936p-6L, 0xf.bb46ca33bccb6bep-9L, -0x8.a8314a7a28d0fa4p-7L, 0x8.3918d35b65065cap-15L, 0xb.72fcdf02c443b9ap-9L, -0x9.ac51cfbc1ddf90ep-11L, -0x8.c4bdb259dfdac19p-11L, 0xf.22cbddfe388f56ep-13L, 0xf.193b51de288565ap-16L, -0x8.419ed401cbc51f3p-15L, 0xa.508dd0d698da458p-18L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.37ef3e540da7c3aa0d1dcf5bb03fp-5Q, 0x1.f35f9808bc2a0772556b997598d3p-3Q, 0x1.35ab60603a287a1609387fb893b8p-1Q, 0x1.5088101e8fe3530163beb11528dcp-1Q, 0x1.10c9ca803fb2272d1e1cf6fa2d0cp-3Q, -0x1.2c4ff66fd53eee10d811f3bf5459p-2Q, -0x1.8ca8ebcdc98fc4aa06bb294a039cp-4Q, 0x1.303621e43e77126c475b311fee41p-3Q, 0x1.f768d94677996d7b05f99f12d599p-6Q, -0x1.1506294f451a1f48db3652c40168p-4Q, 0x1.07231a6b6ca0cb934ff78371a261p-12Q, 0x1.6e5f9be058887734b49665246c12p-6Q, -0x1.358a39f783bbf21cd3bb737b9bf7p-8Q, -0x1.1897b64b3bfb583210060e933d6p-8Q, 0x1.e4597bbfc711eadc2635b08cc11dp-10Q, 0x1.e3276a3bc510acb32c14bfd1c3d9p-13Q, -0x1.0833da803978a3e6248db817fff9p-12Q, 0x1.4a11ba1ad31b48b0c2e32412ef31p-15Q}; + } + #endif + } + if constexpr (p == 10) { + if constexpr (std::is_same_v) { + return {0x1.b4f654p-6f, 0x1.8162d6p-3f, 0x1.0ded5p-1f, 0x1.607db4p-1f, 0x1.1feba4p-2f, -0x1.ffaf7cp-3f, -0x1.914c48p-3f, 0x1.04da38p-3f, 0x1.7d29b8p-4f, -0x1.246e3p-4f, -0x1.e2a1dep-6f, 0x1.101406p-5f, 0x1.d8b7dcp-9f, -0x1.5fb466p-7f, 0x1.6dc878p-10f, 0x1.052608p-9f, -0x1.67962p-11f, -0x1.e87f56p-14f, 0x1.888a12p-14f, -0x1.bd12a2p-17f}; + } + if constexpr (std::is_same_v) { + return {0x1.b4f6549dc7ae3p-6, 0x1.8162d69198cfep-3, 0x1.0ded5071bf874p-1, 0x1.607db4062d775p-1, 0x1.1feba4923f567p-2, -0x1.ffaf7b6c111e3p-3, -0x1.914c47c1ca802p-3, 0x1.04da377a0ae83p-3, 0x1.7d29b819fd18dp-4, -0x1.246e307349ac4p-4, -0x1.e2a1dd5152b25p-6, 0x1.1014069cb8f3cp-5, 0x1.d8b7db3e21714p-9, -0x1.5fb466d770edcp-7, 0x1.6dc8787ae38ddp-10, 0x1.0526072a98cd8p-9, -0x1.67962098c50fp-11, -0x1.e87f555dc50ddp-14, 0x1.888a11cfae433p-14, -0x1.bd12a2a1a43dbp-17}; + } + if constexpr (std::is_same_v) { + return {0xd.a7b2a4ee3d71687p-9L, 0xc.0b16b48cc67ed9dp-6L, 0x8.6f6a838dfc39cfcp-4L, 0xb.03eda0316bba9f7p-4L, 0x8.ff5d2491fab3641p-5L, -0xf.fd7bdb6088f17a6p-6L, -0xc.8a623e0e5400e29p-6L, 0x8.26d1bbd05741a5ep-6L, 0xb.e94dc0cfe8c6997p-7L, -0x9.2371839a4d62324p-7L, -0xf.150eea8a95926cep-9L, 0x8.80a034e5c79dfcbp-8L, 0xe.c5bed9f10b89f27p-12L, -0xa.fda336bb876e26p-10L, 0xb.6e43c3d71c6ebc5p-13L, 0x8.29303954c66bfc4p-12L, -0xb.3cb104c62878097p-14L, -0xf.43faaaee286e92ap-17L, 0xc.44508e7d72197a7p-17L, -0xd.e895150d21eda8p-20L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.b4f6549dc7ae2d0da711a289f0cap-6Q, 0x1.8162d69198cfdb39a90922d70e5fp-3Q, 0x1.0ded5071bf8739f750ffec152978p-1Q, 0x1.607db4062d7753edab576af3e0dcp-1Q, 0x1.1feba4923f566c829244a5b4f4c2p-2Q, -0x1.ffaf7b6c111e2f4b082d1396dfd9p-3Q, -0x1.914c47c1ca801c5176763b1002edp-3Q, 0x1.04da377a0ae834bb94a9fa4f0243p-3Q, 0x1.7d29b819fd18d32d43de1a7d3641p-4Q, -0x1.246e307349ac4648ebbb94e378bbp-4Q, -0x1.e2a1dd5152b24d9c384763b949a8p-6Q, 0x1.1014069cb8f3bf95bd45be617d84p-5Q, 0x1.d8b7db3e21713e4ea2df5435db4ap-9Q, -0x1.5fb466d770edc4c0f4a29d7e3176p-7Q, 0x1.6dc8787ae38dd789b768877a70c2p-10Q, 0x1.0526072a98cd7f8751cc002da048p-9Q, -0x1.67962098c50f012db290a44515a5p-11Q, -0x1.e87f555dc50dd253428e6067701p-14Q, 0x1.888a11cfae432f4e4bd0c734fcc9p-14Q, -0x1.bd12a2a1a43db4fff0519cd821dfp-17Q}; + } + #endif + } + if constexpr (p == 11) { + if constexpr (std::is_same_v) { + return {0x1.324992p-6f, 0x1.270c9cp-3f, 0x1.ccb286p-2f, 0x1.5f1256p-1f, 0x1.a5d9fcp-2f, -0x1.4c56f6p-3f, -0x1.18cff8p-2f, 0x1.0e83b8p-4f, 0x1.32d0a4p-3f, -0x1.7cc388p-5f, -0x1.10221ep-4f, 0x1.00b272p-5f, 0x1.557516p-6f, -0x1.f77976p-7f, -0x1.b5e4ap-9f, 0x1.42fd2p-8f, -0x1.439544p-12f, -0x1.d4338ep-11f, 0x1.05416p-12f, 0x1.c8ab06p-15f, -0x1.228a1p-15f, 0x1.2d9b0cp-18f}; + } + if constexpr (std::is_same_v) { + return {0x1.3249916076091p-6, 0x1.270c9c42314cfp-3, 0x1.ccb286198c9dfp-2, 0x1.5f125643212ccp-1, 0x1.a5d9fccefe816p-2, -0x1.4c56f6b2bf66cp-3, -0x1.18cff89a8cc46p-2, 0x1.0e83b8b6a4d8fp-4, 0x1.32d0a3f0ba732p-3, -0x1.7cc387e4a9a09p-5, -0x1.10221dbbeff7cp-4, 0x1.00b27276a8099p-5, 0x1.557516a958be5p-6, -0x1.f77975a6883f7p-7, -0x1.b5e49f3346a8bp-9, 0x1.42fd20a75f9acp-8, -0x1.439543c841133p-12, -0x1.d4338d3fdae3ap-11, 0x1.05415f0bc6ea2p-12, 0x1.c8ab05d193c38p-15, -0x1.228a0febb3e8cp-15, 0x1.2d9b0b4e10d78p-18}; + } + if constexpr (std::is_same_v) { + return {0x9.924c8b03b048b06p-9L, 0x9.3864e2118a67afdp-6L, 0xe.659430cc64ef74bp-5L, 0xa.f892b2190965c91p-4L, 0xd.2ecfe677f40b2aap-5L, -0xa.62b7b595fb361ep-6L, -0x8.c67fc4d4662301ap-5L, 0x8.741dc5b526c7499p-7L, 0x9.96851f85d39931p-6L, -0xb.e61c3f254d048e4p-8L, -0x8.8110eddf7fbe097p-7L, 0x8.059393b5404c82ap-8L, 0xa.aba8b54ac5f295dp-9L, -0xf.bbcbad3441fb82ap-10L, -0xd.af24f99a3545bf1p-12L, 0xa.17e9053afcd5e0bp-11L, -0xa.1caa1e42089945fp-15L, -0xe.a19c69fed71d098p-14L, 0x8.2a0af85e37512d9p-15L, 0xe.45582e8c9e1bc7dp-18L, -0x9.14507f5d9f45ff4p-18L, 0x9.6cd85a7086bbdf3p-21L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.324991607609160c660c469077c4p-6Q, 0x1.270c9c42314cf5fa956419fe6ca8p-3Q, 0x1.ccb286198c9dee96d12668532b6cp-2Q, 0x1.5f125643212cb922d29e40df5ae5p-1Q, 0x1.a5d9fccefe816554cfd2c1b4c2eap-2Q, -0x1.4c56f6b2bf66c3c093c0529f8f7fp-3Q, -0x1.18cff89a8cc4603466567c5566b2p-2Q, 0x1.0e83b8b6a4d8e932eca95459a69cp-4Q, 0x1.32d0a3f0ba73261f3f385a0ab52ep-3Q, -0x1.7cc387e4a9a091c75d9de8faea58p-5Q, -0x1.10221dbbeff7c12d2228c7667179p-4Q, 0x1.00b27276a80990547cbd63f84547p-5Q, 0x1.557516a958be52b928260c4c6ad5p-6Q, -0x1.f77975a6883f7054b8b01c477981p-7Q, -0x1.b5e49f3346a8b7e121e98be0fcfbp-9Q, 0x1.42fd20a75f9abc16cec7fe76464bp-8Q, -0x1.439543c8411328be7c3dbb239962p-12Q, -0x1.d4338d3fdae3a1309e0d7105695cp-11Q, 0x1.05415f0bc6ea25b1e91fb2adce4fp-12Q, 0x1.c8ab05d193c378f97fff6933dc9bp-15Q, -0x1.228a0febb3e8bfe721948bedcf9cp-15Q, 0x1.2d9b0b4e10d77be6e48f3790bbdep-18Q}; + } + #endif + } + if constexpr (p == 12) { + if constexpr (std::is_same_v) { + return {0x1.ada998p-7f, 0x1.c0c89p-4f, 0x1.826962p-2f, 0x1.507c5ap-1f, 0x1.082246p-1f, -0x1.6eb4acp-5f, -0x1.43c448p-2f, -0x1.85997p-6f, 0x1.75b758p-3f, 0x1.5f3ea8p-8f, -0x1.8afc68p-4f, 0x1.63811ap-7f, 0x1.5458dcp-5f, -0x1.906176p-7f, -0x1.a4c4a6p-7f, 0x1.b7d844p-8f, 0x1.26babep-9f, -0x1.1dac02p-9f, 0x1.b73c72p-18f, 0x1.978844p-12f, -0x1.73369p-14f, -0x1.96b4a6p-16f, 0x1.acb93p-17f, -0x1.9a7502p-20f}; + } + if constexpr (std::is_same_v) { + return {0x1.ada9978d2fa57p-7, 0x1.c0c890682f879p-4, 0x1.82696272e40bdp-2, 0x1.507c59d8e6f6bp-1, 0x1.082245c297978p-1, -0x1.6eb4ac1d9855dp-5, -0x1.43c448da45b22p-2, -0x1.85996f0f3b3b2p-6, 0x1.75b757e56dd3bp-3, 0x1.5f3ea878d368ep-8, -0x1.8afc682193383p-4, 0x1.638119d1c4362p-7, 0x1.5458dbe394ebp-5, -0x1.90617513f389bp-7, -0x1.a4c4a623e2a51p-7, 0x1.b7d844bffa4e9p-8, 0x1.26babd1f8d181p-9, -0x1.1dac0186ec142p-9, 0x1.b73c724cbcd25p-18, 0x1.9788431be0bfbp-12, -0x1.7336904b8b4e8p-14, -0x1.96b4a56f63fa9p-16, 0x1.acb92f10c423ap-17, -0x1.9a7502d7dc2f3p-20}; + } + if constexpr (std::is_same_v) { + return {0xd.6d4cbc697d2b459p-10L, 0xe.064483417c3c86cp-7L, 0xc.134b1397205e82fp-5L, 0xa.83e2cec737b5622p-4L, 0x8.41122e14bcbbcc8p-4L, -0xb.75a560ecc2ae67fp-8L, -0xa.1e2246d22d9117cp-5L, -0xc.2ccb7879d9d93dbp-9L, 0xb.adbabf2b6e9db71p-6L, 0xa.f9f543c69b47041p-11L, -0xc.57e3410c99c1b5p-7L, 0xb.1c08ce8e21b0dd8p-10L, 0xa.a2c6df1ca7582e3p-8L, -0xc.830ba89f9c4dbcbp-10L, -0xd.2625311f15287e1p-10L, 0xd.bec225ffd274461p-11L, 0x9.35d5e8fc68c04b8p-12L, -0x8.ed600c3760a133p-12L, 0xd.b9e39265e692542p-21L, 0xc.bc4218df05fd969p-15L, -0xb.99b4825c5a7426p-17L, -0xc.b5a52b7b1fd454bp-19L, 0xd.65c97886211cfe7p-20L, -0xc.d3a816bee17970fp-23L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.ada9978d2fa568b21229688156b8p-7Q, 0x1.c0c890682f8790d7f6bb1c1aa44ep-4Q, 0x1.82696272e40bd05e57c851b9cb36p-2Q, 0x1.507c59d8e6f6ac435d1e88e090b6p-1Q, 0x1.082245c29797798f324c3b86f65cp-1Q, -0x1.6eb4ac1d9855ccfed03d4133c6fbp-5Q, -0x1.43c448da45b222f8d287f72956dcp-2Q, -0x1.85996f0f3b3b27b5f0ec32953a95p-6Q, 0x1.75b757e56dd3b6e26eea4e0a43bap-3Q, 0x1.5f3ea878d368e081a5d3cb36d936p-8Q, -0x1.8afc6821933836a0611906df913cp-4Q, 0x1.638119d1c4361bb00a2f22d1f90bp-7Q, 0x1.5458dbe394eb05c5aab3c4ceb31ap-5Q, -0x1.90617513f389b7954493854c387ep-7Q, -0x1.a4c4a623e2a50fc10158bea8a45cp-7Q, 0x1.b7d844bffa4e88c2ef52650eb0e3p-8Q, 0x1.26babd1f8d1809707edb54236067p-9Q, -0x1.1dac0186ec14265ff3ab908c13a3p-9Q, 0x1.b73c724cbcd24a84c3c597249f8dp-18Q, 0x1.9788431be0bfb2d1938d25135045p-12Q, -0x1.7336904b8b4e84c0e0396f9346efp-14Q, -0x1.96b4a56f63fa8a95abb9ecaeceaep-16Q, 0x1.acb92f10c4239fce7d915af19a6cp-17Q, -0x1.9a7502d7dc2f2e1e665f9ba74bc1p-20Q}; + } + #endif + } + if constexpr (p == 13) { + if constexpr (std::is_same_v) { + return {0x1.2d8918p-7f, 0x1.53665p-4f, 0x1.3f7bf6p-2f, 0x1.38dc5p-1f, 0x1.2d82fp-1f, 0x1.644b26p-4f, -0x1.428842p-2f, -0x1.fe442cp-4f, 0x1.6f9128p-3f, 0x1.2acc8p-4f, -0x1.b16354p-4f, -0x1.b1fc6ep-6f, 0x1.cbe504p-5f, 0x1.37f29ep-9f, -0x1.86743ap-6f, 0x1.0128dp-8f, 0x1.db8098p-8f, -0x1.6a025cp-9f, -0x1.58e562p-10f, 0x1.e8ceb2p-11f, 0x1.9d26d8p-15f, -0x1.5a4cf4p-13f, 0x1.0159a8p-15f, 0x1.5e5f8p-17f, -0x1.3b708ap-18f, 0x1.183f9ep-21f}; + } + if constexpr (std::is_same_v) { + return {0x1.2d89174d37e3bp-7, 0x1.53664fc8a3d4cp-4, 0x1.3f7bf6c09afe8p-2, 0x1.38dc5001834bbp-1, 0x1.2d82ef0bea472p-1, 0x1.644b251290fb5p-4, -0x1.42884206fc5aep-2, -0x1.fe442b86ad763p-4, 0x1.6f91279c81aa4p-3, 0x1.2acc804557c8bp-4, -0x1.b163543c8eaccp-4, -0x1.b1fc6de239706p-6, 0x1.cbe5044520d5ep-5, 0x1.37f29dfe3e92cp-9, -0x1.867439245b0c7p-6, 0x1.0128d031aa3bp-8, 0x1.db80973172631p-8, -0x1.6a025cdac7e1p-9, -0x1.58e561b1f2cf6p-10, 0x1.e8ceb1ee24cabp-11, 0x1.9d26d847f17cap-15, -0x1.5a4cf360064a4p-13, 0x1.0159a865542d3p-15, 0x1.5e5f8028cd835p-17, -0x1.3b708a4c3be34p-18, 0x1.183f9db8da3ap-21}; + } + if constexpr (std::is_same_v) { + return {0x9.6c48ba69bf1db2dp-10L, 0xa.9b327e451ea606ap-7L, 0x9.fbdfb604d7f42bfp-5L, 0x9.c6e2800c1a5d56fp-4L, 0x9.6c17785f5238ef1p-4L, 0xb.2259289487da5f5p-7L, -0xa.14421037e2d6f28p-5L, -0xf.f2215c356bb1af3p-7L, 0xb.7c893ce40d51d77p-6L, 0x9.5664022abe455a4p-7L, -0xd.8b1aa1e47565fb8p-7L, -0xd.8fe36f11cb8316bp-9L, 0xe.5f28222906af18bp-8L, 0x9.bf94eff1f49636bp-12L, -0xc.33a1c922d8636b9p-9L, 0x8.0946818d51d8108p-11L, 0xe.dc04b98b931878p-11L, -0xb.5012e6d63f07f27p-12L, -0xa.c72b0d8f967b059p-13L, 0xf.46758f712655aeep-14L, 0xc.e936c23f8be4d46p-18L, -0xa.d2679b00325201p-16L, 0x8.0acd432aa169479p-18L, 0xa.f2fc01466c1a50ap-20L, -0x9.db845261df1a01dp-21L, 0x8.c1fcedc6d1d027ap-24L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.2d89174d37e3b6596d64d168e49p-7Q, 0x1.53664fc8a3d4c0d33efd4b4bc6fap-4Q, 0x1.3f7bf6c09afe857e70d916613d78p-2Q, 0x1.38dc5001834baade66ebb6ec9fc1p-1Q, 0x1.2d82ef0bea471de1f0a3864a5cccp-1Q, 0x1.644b251290fb4bea9c417da1f71ep-4Q, -0x1.42884206fc5ade5015e8dd0e5832p-2Q, -0x1.fe442b86ad7635e6a44fa231478p-4Q, 0x1.6f91279c81aa3aed801eca5172e8p-3Q, 0x1.2acc804557c8ab4899f3d0916648p-4Q, -0x1.b163543c8eacbf70b0092010e485p-4Q, -0x1.b1fc6de2397062d67f76ff78186p-6Q, 0x1.cbe5044520d5e315c90c0ed1b10cp-5Q, 0x1.37f29dfe3e92c6d51003ce786db8p-9Q, -0x1.867439245b0c6d71509d7a14369ep-6Q, 0x1.0128d031aa3b020f68dbd131fc68p-8Q, 0x1.db80973172630eff11f1aa6bf206p-8Q, -0x1.6a025cdac7e0fe4d3e8433e38ffbp-9Q, -0x1.58e561b1f2cf60b1ce144cfab0ffp-10Q, 0x1.e8ceb1ee24cab5dbcf0c32d1591bp-11Q, 0x1.9d26d847f17c9a8ce68c968f105dp-15Q, -0x1.5a4cf360064a4020bfd19dc8e5fp-13Q, 0x1.0159a865542d28f1113c2ad46cb5p-15Q, 0x1.5e5f8028cd834a146bf59b16d932p-17Q, -0x1.3b708a4c3be3403a7da544157c5bp-18Q, 0x1.183f9db8da3a04f4c66e4459dad2p-21Q}; + } + #endif + } + if constexpr (p == 14) { + if constexpr (std::is_same_v) { + return {0x1.a7702ap-8f, 0x1.fee46p-5f, 0x1.04f778p-2f, 0x1.1bcdf2p-1f, 0x1.432b0ep-1f, 0x1.bfd66ap-3f, -0x1.163586p-2f, -0x1.be885ep-3f, 0x1.1b6ef4p-3f, 0x1.1eb29p-3f, -0x1.63524ep-4f, -0x1.251084p-4f, 0x1.c480a6p-5f, 0x1.ba103ap-6f, -0x1.ee8e8ap-6f, -0x1.6ffce6p-8f, 0x1.a3160cp-7f, -0x1.873bd2p-11f, -0x1.f89472p-9f, 0x1.1650e2p-10f, 0x1.7334fep-11f, -0x1.959f6ap-12f, -0x1.5e73f4p-15f, 0x1.20612ap-14f, -0x1.5adbf4p-17f, -0x1.26968ep-18f, 0x1.cf0cbcp-20f, -0x1.7fc91p-23f}; + } + if constexpr (std::is_same_v) { + return {0x1.a7702ace363acp-8, 0x1.fee460f5cb877p-5, 0x1.04f777f62f423p-2, 0x1.1bcdf22a1725cp-1, 0x1.432b0dc3136d4p-1, 0x1.bfd66ae4258acp-3, -0x1.1635861af071dp-2, -0x1.be885d06053bfp-3, 0x1.1b6ef32bc7359p-3, 0x1.1eb28fc03c55bp-3, -0x1.63524d6aa4cf7p-4, -0x1.2510847f3ed26p-4, 0x1.c480a659de0cdp-5, 0x1.ba103a92149f4p-6, -0x1.ee8e8a6bca9acp-6, -0x1.6ffce6192a67bp-8, 0x1.a3160ba7d924ep-7, -0x1.873bd13c8af18p-11, -0x1.f894721441f67p-9, 0x1.1650e1f6ec4c3p-10, 0x1.7334fd9e58c6ap-11, -0x1.959f69010da01p-12, -0x1.5e73f3c020201p-15, 0x1.20612a2e814f8p-14, -0x1.5adbf364f5e1cp-17, -0x1.26968e53fb76dp-18, 0x1.cf0cbb4133dbbp-20, -0x1.7fc90f0c46da2p-23}; + } + if constexpr (std::is_same_v) { + return {0xd.3b815671b1d61adp-11L, 0xf.f72307ae5c3b8acp-8L, 0x8.27bbbfb17a114bp-5L, 0x8.de6f9150b92e008p-4L, 0xa.19586e189b69d98p-4L, 0xd.feb357212c55f71p-6L, -0x8.b1ac30d7838e67p-5L, -0xd.f442e83029df6fp-6L, 0x8.db77995e39ac42bp-6L, 0x8.f5947e01e2ad986p-6L, -0xb.1a926b55267b7d4p-7L, -0x9.288423f9f692d35p-7L, 0xe.240532cef066a7ap-8L, 0xd.d081d490a4fa2c2p-9L, -0xf.7474535e54d6257p-9L, -0xb.7fe730c9533d677p-11L, 0xd.18b05d3ec926ef4p-10L, -0xc.39de89e4578bd58p-14L, -0xf.c4a390a20fb38fap-12L, 0x8.b2870fb76261486p-13L, 0xb.99a7ecf2c634fb5p-14L, -0xc.acfb48086d004d1p-15L, -0xa.f39f9e01010090ep-18L, 0x9.030951740a7c181p-17L, -0xa.d6df9b27af0deefp-20L, -0x9.34b4729fdbb6709p-21L, 0xe.7865da099eddb46p-23L, -0xb.fe48786236d0c8ep-26L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.a7702ace363ac35a31e24ad7f18bp-8Q, 0x1.fee460f5cb8771588fb11eee4edep-5Q, 0x1.04f777f62f422960e164233d2842p-2Q, 0x1.1bcdf22a1725c010c6b543c39465p-1Q, 0x1.432b0dc3136d3b304d5a3bf4569bp-1Q, 0x1.bfd66ae4258abee147e56af809ep-3Q, -0x1.1635861af071cce08b7655b9575p-2Q, -0x1.be885d06053beddff8849acb8697p-3Q, 0x1.1b6ef32bc7358856a3c8661f7dbbp-3Q, 0x1.1eb28fc03c55b30ce48dc30b7f77p-3Q, -0x1.63524d6aa4cf6fa795512cfa3aa5p-4Q, -0x1.2510847f3ed25a6abc4fb2ebbea9p-4Q, 0x1.c480a659de0cd4f4123d770896e6p-5Q, 0x1.ba103a92149f4583a4c79c292018p-6Q, -0x1.ee8e8a6bca9ac4ad53dedccf86b9p-6Q, -0x1.6ffce6192a67aceee5260da8193dp-8Q, 0x1.a3160ba7d924dde8cc52f58fbb97p-7Q, -0x1.873bd13c8af17ab00e30f03b73e4p-11Q, -0x1.f894721441f671f4ac26746366e6p-9Q, 0x1.1650e1f6ec4c290c75eee26e8b4ap-10Q, 0x1.7334fd9e58c69f69b95d47a6075fp-11Q, -0x1.959f69010da009a2eacf096b1dafp-12Q, -0x1.5e73f3c02020121b8b1dbc91cc8ap-15Q, 0x1.20612a2e814f83021e4b38a90018p-14Q, -0x1.5adbf364f5e1bddd8115a86dd662p-17Q, -0x1.26968e53fb76ce12ec5e07348937p-18Q, 0x1.cf0cbb4133dbb68c44095fc163dep-20Q, -0x1.7fc90f0c46da191bc033464815fbp-23Q}; + } + #endif + } + if constexpr (p == 15) { + if constexpr (std::is_same_v) { + return {0x1.297006p-8f, 0x1.7eec02p-5f, 0x1.a5efd6p-3f, 0x1.f87476p-2f, 0x1.4aa806p-1f, 0x1.5b237cp-2f, -0x1.8bae9cp-3f, -0x1.27d0d6p-2f, 0x1.0b6624p-4f, 0x1.856ba4p-3f, -0x1.44f2p-5f, -0x1.c726cp-4f, 0x1.158586p-5f, 0x1.c0c324p-5f, -0x1.a62aaap-6f, -0x1.54f3aep-6f, 0x1.ee4514p-7f, 0x1.4e4c96p-8f, -0x1.a92e2p-8f, -0x1.fb0008p-13f, 0x1.fd6e44p-10f, -0x1.879fe8p-12f, -0x1.79081p-12f, 0x1.46f04ap-13f, 0x1.b0baccp-16f, -0x1.d7ff96p-16f, 0x1.c35f5cp-19f, 0x1.e6358ep-20f, -0x1.532292p-21f, 0x1.076d02p-24f}; + } + if constexpr (std::is_same_v) { + return {0x1.2970058a26dcep-8, 0x1.7eec010bca4c4p-5, 0x1.a5efd6f02857ep-3, 0x1.f8747691d3f73p-2, 0x1.4aa8051a530b4p-1, 0x1.5b237b0c28179p-2, -0x1.8bae9ca895b45p-3, -0x1.27d0d6e28e01fp-2, 0x1.0b6623378c72fp-4, 0x1.856ba3f0d1d5bp-3, -0x1.44f200621040dp-5, -0x1.c726bf22e4a16p-4, 0x1.15858527779bcp-5, 0x1.c0c32426f4663p-5, -0x1.a62aa972a6fc4p-6, -0x1.54f3ad3a0b7c6p-6, 0x1.ee4513500347p-7, 0x1.4e4c95b98ec2dp-8, -0x1.a92e1fc2fdcaep-8, -0x1.fb000715d8e65p-13, 0x1.fd6e43c3dd5e8p-10, -0x1.879fe7f24ba0ap-12, -0x1.79080f71ee322p-12, 0x1.46f04a6cb59p-13, 0x1.b0bacca20c60fp-16, -0x1.d7ff965f47a09p-16, 0x1.c35f5c1543372p-19, 0x1.e6358dfe44b53p-20, -0x1.532291d1cbfa4p-21, 0x1.076d016337019p-24}; + } + if constexpr (std::is_same_v) { + return {0x9.4b802c5136e6cb1p-11L, 0xb.f760085e52620cp-8L, 0xd.2f7eb78142bee86p-6L, 0xf.c3a3b48e9fb9b9bp-5L, 0xa.554028d2985a2bep-4L, 0xa.d91bd86140bc88ap-5L, -0xc.5d74e544ada28ecp-6L, -0x9.3e86b714700f9f8p-5L, 0x8.5b3119bc6397595p-7L, 0xc.2b5d1f868ead57ap-6L, -0xa.2790031082066ebp-8L, -0xe.3935f917250aff5p-7L, 0x8.ac2c293bbcde0e2p-8L, 0xe.06192137a331763p-8L, -0xd.31554b9537e1c3bp-9L, -0xa.a79d69d05be2dedp-9L, 0xf.72289a801a381d6p-10L, 0xa.7264adcc7616af1p-11L, -0xd.4970fe17ee56c45p-11L, -0xf.d80038aec732ac5p-16L, 0xf.eb721e1eeaf4368p-13L, -0xc.3cff3f925d05241p-15L, -0xb.c8407b8f7191299p-15L, 0xa.37825365ac803f5p-16L, 0xd.85d665106307a4ap-19L, -0xe.bffcb2fa3d0481cp-19L, 0xe.1afae0aa19b8c5bp-22L, 0xf.31ac6ff225a9413p-23L, -0xa.99148e8e5fd1f6dp-24L, 0x8.3b680b19b80c80ep-27L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.2970058a26dcd961f2ddf52bca08p-8Q, 0x1.7eec010bca4c417f3cf45c166751p-5Q, 0x1.a5efd6f02857dd0be400d7c02e2cp-3Q, 0x1.f8747691d3f737355530dd281d86p-2Q, 0x1.4aa8051a530b457c39051251b937p-1Q, 0x1.5b237b0c281791146b95d35023c4p-2Q, -0x1.8bae9ca895b451d87fbb9a690248p-3Q, -0x1.27d0d6e28e01f3ef0606971828aap-2Q, 0x1.0b6623378c72eb295fa0f634a67bp-4Q, 0x1.856ba3f0d1d5aaf4f59a12cbb286p-3Q, -0x1.44f200621040cdd51fafc7035006p-5Q, -0x1.c726bf22e4a15fea85834dbb1052p-4Q, 0x1.15858527779bc1c4ec7f8b6fdd21p-5Q, 0x1.c0c32426f4662ec60f158af78296p-5Q, -0x1.a62aa972a6fc3876e9915f565de4p-6Q, -0x1.54f3ad3a0b7c5bd971d938015013p-6Q, 0x1.ee451350034703acaa0dbe95c1aep-7Q, 0x1.4e4c95b98ec2d5e117559a2b0da9p-8Q, -0x1.a92e1fc2fdcad88a36c4f23f938p-8Q, -0x1.fb000715d8e6558a8e3b0bc34d7fp-13Q, 0x1.fd6e43c3dd5e86d041c185aa9428p-10Q, -0x1.879fe7f24ba0a4818b2d76fbd7e6p-12Q, -0x1.79080f71ee322531c0337932b9a5p-12Q, 0x1.46f04a6cb59007eab6af7b114fa4p-13Q, 0x1.b0bacca20c60f4939edefbff1354p-16Q, -0x1.d7ff965f47a09038cb01ea5da5e9p-16Q, 0x1.c35f5c15433718b508f832bbf1b8p-19Q, 0x1.e6358dfe44b5282546827ce8042cp-20Q, -0x1.532291d1cbfa3eda1a3275ffd36dp-21Q, 0x1.076d01633701901bb8cc971717bp-24Q}; + } + #endif + } + if constexpr (p == 16) { + if constexpr (std::is_same_v) { + return {0x1.a2048p-9f, 0x1.1df6c8p-5f, 0x1.520d3ap-3f, 0x1.b8a3e6p-2f, 0x1.465392p-1f, 0x1.c2db72p-2f, -0x1.6f9ed6p-4f, -0x1.4ee9bp-2f, -0x1.c96974p-6f, 0x1.b084cp-3f, 0x1.bff16p-6f, -0x1.0f219ap-3f, -0x1.98ed2ep-8f, 0x1.36fc54p-4f, -0x1.f159dcp-8f, -0x1.2e3094p-5f, 0x1.516f08p-7f, 0x1.ca8c3ep-7f, -0x1.ca18fcp-8f, -0x1.dda9bcp-9f, 0x1.99ff0cp-9f, 0x1.abb604p-12f, -0x1.ed5dcep-11f, 0x1.df29e6p-14f, 0x1.6e8e3p-13f, -0x1.0000dep-14f, -0x1.d3f062p-17f, 0x1.7c64bap-17f, -0x1.1821aep-20f, -0x1.8b5554p-21f, 0x1.efcecp-23f, -0x1.6a61bcp-26f}; + } + if constexpr (std::is_same_v) { + return {0x1.a2047f25eec86p-9, 0x1.1df6c86cbec6p-5, 0x1.520d391a94107p-3, 0x1.b8a3e5feb4879p-2, 0x1.465391b465934p-1, 0x1.c2db72f84c204p-2, -0x1.6f9ed69c399c7p-4, -0x1.4ee9af39c16ecp-2, -0x1.c96973b93bd86p-6, 0x1.b084bf1dc763bp-3, 0x1.bff160aba4bc3p-6, -0x1.0f21999627c5fp-3, -0x1.98ed2d2871d0ap-8, 0x1.36fc54ec8b106p-4, -0x1.f159dcb973ff4p-8, -0x1.2e3093b602a51p-5, 0x1.516f07b10e2cp-7, 0x1.ca8c3dcce54c3p-7, -0x1.ca18fbf2cc141p-8, -0x1.dda9bb9568c15p-9, 0x1.99ff0c3f2ed81p-9, 0x1.abb6031610513p-12, -0x1.ed5dcd1b49a3fp-11, 0x1.df29e5ea12845p-14, 0x1.6e8e301063e5ap-13, -0x1.0000dea4283e9p-14, -0x1.d3f0626b575afp-17, 0x1.7c64ba15d2346p-17, -0x1.1821ad345e7cp-20, -0x1.8b555407022a1p-21, 0x1.efcebf5a99b7bp-23, -0x1.6a61bcee28103p-26}; + } + if constexpr (std::is_same_v) { + return {0xd.1023f92f7642ed3p-12L, 0x8.efb64365f630239p-8L, 0xa.9069c8d4a08344dp-6L, 0xd.c51f2ff5a43c97dp-5L, 0xa.329c8da32c99c9dp-4L, 0xe.16db97c26101ca7p-5L, -0xb.7cf6b4e1cce36cbp-7L, -0xa.774d79ce0b75fdfp-5L, -0xe.4b4b9dc9dec3204p-9L, 0xd.8425f8ee3b1d5bfp-6L, 0xd.ff8b055d25e15c1p-9L, -0x8.790cccb13e2f58ep-6L, -0xc.c76969438e84e18p-11L, 0x9.b7e2a76458832d7p-7L, -0xf.8acee5cb9ff9e4cp-11L, -0x9.71849db015288a6p-8L, 0xa.8b783d88715ff76p-10L, 0xe.5461ee672a6184ep-10L, -0xe.50c7df9660a0b0ep-11L, -0xe.ed4ddcab460a85bp-12L, 0xc.cff861f976c0535p-12L, 0xd.5db018b082895d2p-15L, -0xf.6aee68da4d1f9e1p-14L, 0xe.f94f2f509422907p-17L, 0xb.747180831f2d336p-16L, -0x8.0006f52141f4728p-17L, -0xe.9f83135abad7bfp-20L, 0xb.e325d0ae91a325cp-20L, -0x8.c10d69a2f3dfe1fp-23L, -0xc.5aaaa0381150b42p-24L, 0xf.7e75fad4cdbdbc5p-26L, -0xb.530de771408178bp-29L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.a2047f25eec85da6e57cd7f20965p-9Q, 0x1.1df6c86cbec60472edd73314093ap-5Q, 0x1.520d391a9410689a221d2a40ed0cp-3Q, 0x1.b8a3e5feb48792faed491d08e637p-2Q, 0x1.465391b4659339393dc6b44dd0b9p-1Q, 0x1.c2db72f84c20394e90d8314fee8dp-2Q, -0x1.6f9ed69c399c6d957cef0caf36cp-4Q, -0x1.4ee9af39c16ebfbef0c302e6791dp-2Q, -0x1.c96973b93bd864088cf77c5363e8p-6Q, 0x1.b084bf1dc763ab7d34b03cf7014cp-3Q, 0x1.bff160aba4bc2b81b5cb21d8ed3dp-6Q, -0x1.0f21999627c5eb1bdc396cd5510bp-3Q, -0x1.98ed2d2871d09c2ff301236b3aa5p-8Q, 0x1.36fc54ec8b1065ad541d9561e805p-4Q, -0x1.f159dcb973ff3c971dea81777e8cp-8Q, -0x1.2e3093b602a5114cced31fb3d21p-5Q, 0x1.516f07b10e2bfeeb35e5d488972dp-7Q, 0x1.ca8c3dcce54c309c6bfdafe5b818p-7Q, -0x1.ca18fbf2cc14161cd462d6382e8dp-8Q, -0x1.dda9bb9568c150b5b1b563e2a704p-9Q, 0x1.99ff0c3f2ed80a696d3f49d1ae83p-9Q, 0x1.abb6031610512ba452ab2c15607bp-12Q, -0x1.ed5dcd1b49a3f3c23377158c2ae9p-11Q, 0x1.df29e5ea1284520ed9350c7d7e2fp-14Q, 0x1.6e8e301063e5a66bc2dcbb672407p-13Q, -0x1.0000dea4283e8e4f97e320b5edbp-14Q, -0x1.d3f0626b575af7e0f5c7b70618f9p-17Q, 0x1.7c64ba15d23464b7681824c41ca1p-17Q, -0x1.1821ad345e7bfc3ef33cc03c406ap-20Q, -0x1.8b555407022a1683907685f46c79p-21Q, 0x1.efcebf5a99b7b789a7792201843ep-23Q, -0x1.6a61bcee28102f153c8290cebfbbp-26Q}; + } + #endif + } + if constexpr (p == 17) { + if constexpr (std::is_same_v) { + return {0x1.25d69p-9f, 0x1.a9bea4p-6f, 0x1.0cba66p-3f, 0x1.7b3d38p-2f, 0x1.38d48cp-1f, 0x1.0960bp-1f, 0x1.bf874ap-6f, -0x1.50335p-2f, -0x1.0346bcp-3f, 0x1.941794p-3f, 0x1.9e404p-4f, -0x1.03b7f2p-3f, -0x1.d3b162p-5f, 0x1.4c35cap-4f, 0x1.6d90b8p-6f, -0x1.80637cp-5f, -0x1.acbb0ep-9f, 0x1.7477f4p-6f, -0x1.8ed9ccp-9f, -0x1.19e68ap-7f, 0x1.850572p-9f, 0x1.2d9fa2p-9f, -0x1.78a90ep-10f, -0x1.581268p-12f, 0x1.ccd01ap-12f, -0x1.adaa96p-16f, -0x1.582268p-14f, 0x1.85029cp-16f, 0x1.d5219cp-18f, -0x1.2e638p-18f, 0x1.43e648p-22f, 0x1.3d94aap-22f, -0x1.69ce4ap-24f, 0x1.f36b16p-28f}; + } + if constexpr (std::is_same_v) { + return {0x1.25d68f81bd86cp-9, 0x1.a9bea4085cef4p-6, 0x1.0cba6633a3a6dp-3, 0x1.7b3d3861245dp-2, 0x1.38d48c64aa0dbp-1, 0x1.0960af0f4068ep-1, 0x1.bf874a24b1d56p-6, -0x1.50335073492d2p-2, -0x1.0346bb1b97634p-3, 0x1.9417930ab08a3p-3, 0x1.9e403f27b713fp-4, -0x1.03b7f2067576fp-3, -0x1.d3b162866891bp-5, 0x1.4c35ca8307eb6p-4, 0x1.6d90b88bab06p-6, -0x1.80637c4a935c8p-5, -0x1.acbb0e1b24a77p-9, 0x1.7477f35c89773p-6, -0x1.8ed9cce7691cbp-9, -0x1.19e6894a383d1p-7, 0x1.8505717311392p-9, 0x1.2d9fa2834b37bp-9, -0x1.78a90e5fc8eecp-10, -0x1.58126708ae49dp-12, 0x1.ccd01a3d65145p-12, -0x1.adaa9541cd341p-16, -0x1.5822674fd0b1ap-14, 0x1.85029b61ff0fcp-16, 0x1.d5219c45df32ep-18, -0x1.2e63809757f53p-18, 0x1.43e648c7ce72fp-22, 0x1.3d94aa0876b2dp-22, -0x1.69ce4aed2f58ep-24, 0x1.f36b16a008a29p-28}; + } + if constexpr (std::is_same_v) { + return {0x9.2eb47c0dec36183p-12L, 0xd.4df52042e779eb7p-9L, 0x8.65d3319d1d36a45p-6L, 0xb.d9e9c30922e8138p-5L, 0x9.c6a46325506d79dp-4L, 0x8.4b05787a03472d6p-4L, 0xd.fc3a51258eaaed3p-9L, -0xa.819a839a4968eafp-5L, -0x8.1a35d8dcbb19dd2p-6L, 0xc.a0bc9855845188cp-6L, 0xc.f201f93db89f96ep-7L, -0x8.1dbf9033abb79d9p-6L, -0xe.9d8b1433448d469p-8L, 0xa.61ae54183f5b11cp-7L, 0xb.6c85c45d582fc12p-9L, -0xc.031be2549ae3edfp-8L, -0xd.65d870d9253b88dp-12L, 0xb.a3bf9ae44bb963dp-9L, -0xc.76ce673b48e5651p-12L, -0x8.cf344a51c1e8512p-10L, 0xc.282b8b9889c92c5p-12L, 0x9.6cfd141a59bd766p-12L, -0xb.c54872fe4775c65p-13L, -0xa.c0933845724e821p-15L, 0xe.6680d1eb28a2645p-15L, -0xd.6d54aa0e69a09cdp-19L, -0xa.c1133a7e858d207p-17L, 0xc.2814db0ff87dcc6p-19L, 0xe.a90ce22ef996e32p-21L, -0x9.731c04babfa9664p-21L, 0xa.1f32463e73979d5p-25L, 0x9.eca55043b596609p-25L, -0xb.4e7257697ac7376p-27L, 0xf.9b58b5004514458p-31L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.25d68f81bd86c306bc9043f43f4p-9Q, 0x1.a9bea4085cef3d6d79a074d9709ep-6Q, 0x1.0cba6633a3a6d489f4c961323b24p-3Q, 0x1.7b3d3861245d02709eb04b0b2b39p-2Q, 0x1.38d48c64aa0daf396243783e95bep-1Q, 0x1.0960af0f4068e5ac2ea6e7c9135p-1Q, 0x1.bf874a24b1d55da571e39f2bf7e7p-6Q, -0x1.50335073492d1d5e6945d8cdee28p-2Q, -0x1.0346bb1b97633ba3dcc115a9814cp-3Q, 0x1.9417930ab08a311830b19e500034p-3Q, 0x1.9e403f27b713f2db7263ac22d15fp-4Q, -0x1.03b7f2067576f3b2927e9c5889d3p-3Q, -0x1.d3b162866891a8d294e6e9eb979p-5Q, 0x1.4c35ca8307eb62387847e8508ae5p-4Q, 0x1.6d90b88bab05f824bb4e728b7a1p-6Q, -0x1.80637c4a935c7dbdd09fd2c6d8fdp-5Q, -0x1.acbb0e1b24a7711aad0c2cc58d1fp-9Q, 0x1.7477f35c89772c79eec161a3cdd2p-6Q, -0x1.8ed9cce7691caca1362d6d7abefcp-9Q, -0x1.19e6894a383d0a23e4d18574889p-7Q, 0x1.85057173113925897d4027a40b6ep-9Q, 0x1.2d9fa2834b37aecc772ff5c2d7b1p-9Q, -0x1.78a90e5fc8eeb8c9dbcf2179c3bbp-10Q, -0x1.58126708ae49d0421a9c690b913dp-12Q, 0x1.ccd01a3d65144c8ab80302b0f5dbp-12Q, -0x1.adaa9541cd34139a00a6638e9bf6p-16Q, -0x1.5822674fd0b1a40e647125cde434p-14Q, 0x1.85029b61ff0fb98b3294c269c9e6p-16Q, 0x1.d5219c45df32dc63e76e89984d9dp-18Q, -0x1.2e63809757f52cc8ed09e415ace1p-18Q, 0x1.43e648c7ce72f3a94ea0d55898bap-22Q, 0x1.3d94aa0876b2cc113a8ea22e3eecp-22Q, -0x1.69ce4aed2f58e6ecb8a211f55ad1p-24Q, 0x1.f36b16a008a288af85eb1e1cec02p-28Q}; + } + #endif + } + if constexpr (p == 18) { + if constexpr (std::is_same_v) { + return {0x1.9d3864p-10f, 0x1.3c05f8p-6f, 0x1.a84c62p-4f, 0x1.423b32p-2f, 0x1.24c67cp-1f, 0x1.24c33p-1f, 0x1.2d835p-3f, -0x1.2cb3a6p-2f, -0x1.bb5a5cp-3f, 0x1.323edep-3f, 0x1.562ebap-3f, -0x1.7a31p-4f, -0x1.b541d8p-4f, 0x1.09c72ep-4f, 0x1.d35d24p-5f, -0x1.6cc216p-5f, -0x1.84d84cp-6f, 0x1.b4f90cp-6f, 0x1.9a65bep-8f, -0x1.ababc2p-7f, 0x1.f19208p-14f, 0x1.43f78cp-8f, -0x1.2544ep-10f, -0x1.5f6de6p-10f, 0x1.497f3cp-11f, 0x1.bfe9bap-13f, -0x1.a098a2p-13f, -0x1.49d5fp-23f, 0x1.39d678p-15f, -0x1.1de76cp-17f, -0x1.bf4c72p-19f, 0x1.dac908p-20f, -0x1.4a5a66p-24f, -0x1.f9216ep-24f, 0x1.079c6ap-25f, -0x1.58b01ap-29f}; + } + if constexpr (std::is_same_v) { + return {0x1.9d386358a1875p-10, 0x1.3c05f73c5b367p-6, 0x1.a84c610f33b44p-4, 0x1.423b3247213b9p-2, 0x1.24c67bbcaad51p-1, 0x1.24c32fbf17436p-1, 0x1.2d834f99026eap-3, -0x1.2cb3a5153503ap-2, -0x1.bb5a5b1e13b57p-3, 0x1.323ede758da42p-3, 0x1.562eba30ba3dbp-3, -0x1.7a30ff6ce5272p-4, -0x1.b541d802db16ep-4, 0x1.09c72d78f0163p-4, 0x1.d35d236774d12p-5, -0x1.6cc216694aaa1p-5, -0x1.84d84c9eacf2cp-6, 0x1.b4f90c6dc9842p-6, 0x1.9a65be90d86a5p-8, -0x1.ababc1ea3f978p-7, 0x1.f19207685977fp-14, 0x1.43f78b1e4d853p-8, -0x1.2544e0deeca72p-10, -0x1.5f6de508b2306p-10, 0x1.497f3c70a07ccp-11, 0x1.bfe9ba59913cep-13, -0x1.a098a12371c0dp-13, -0x1.49d5efd42da9p-23, 0x1.39d678c2c06afp-15, -0x1.1de76b2193bedp-17, -0x1.bf4c72e2a2d94p-19, 0x1.dac907ddfd9dbp-20, -0x1.4a5a655290e68p-24, -0x1.f9216d4e4d83bp-24, 0x1.079c6a0fc4518p-25, -0x1.58b0195a8266dp-29}; + } + if constexpr (std::is_same_v) { + return {0xc.e9c31ac50c3a483p-13L, 0x9.e02fb9e2d9b3a9bp-9L, 0xd.426308799da225cp-7L, 0xa.11d9923909dc42bp-5L, 0x9.2633dde556a88a3p-4L, 0x9.26197df8ba1b1b2p-4L, 0x9.6c1a7cc81374c03p-6L, -0x9.659d28a9a81cd3ap-5L, -0xd.dad2d8f09dab48bp-6L, 0x9.91f6f3ac6d21107p-6L, 0xa.b175d185d1ed60ap-6L, -0xb.d187fb672938eb2p-7L, -0xd.aa0ec016d8b6c08p-7L, 0x8.4e396bc780b1464p-7L, 0xe.9ae91b3ba68905ep-8L, -0xb.6610b34a5550677p-8L, -0xc.26c264f56795d72p-9L, 0xd.a7c8636e4c20f3dp-9L, 0xc.d32df486c3529e3p-11L, -0xd.5d5e0f51fcbc222p-10L, 0xf.8c903b42cbbfa1ep-17L, 0xa.1fbc58f26c29bbap-11L, -0x9.2a2706f76538d5fp-13L, -0xa.fb6f284591832p-13L, 0xa.4bf9e38503e5e52p-14L, 0xd.ff4dd2cc89e6cb3p-16L, -0xd.04c5091b8e0651fp-16L, -0xa.4eaf7ea16d480ecp-26L, 0x9.ceb3c6160357432p-18L, -0x8.ef3b590c9df6482p-20L, -0xd.fa63971516c9e77p-22L, 0xe.d6483eefeced63bp-23L, -0xa.52d32a948733d34p-27L, -0xf.c90b6a726c1d6d6p-27L, 0x8.3ce3507e228be57p-28L, -0xa.c580cad41336728p-32L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.9d386358a187490511616014e787p-10Q, 0x1.3c05f73c5b367536d2be9893ed8cp-6Q, 0x1.a84c610f33b444b779a9b1758c69p-4Q, 0x1.423b3247213b88555f9f2ada7d8ap-2Q, 0x1.24c67bbcaad511453636985416f3p-1Q, 0x1.24c32fbf17436364ee6d86ce0b36p-1Q, 0x1.2d834f99026e9806c6f6c1aa6cb3p-3Q, -0x1.2cb3a51535039a741562ba69c7a8p-2Q, -0x1.bb5a5b1e13b56915364cb7d6d1bfp-3Q, 0x1.323ede758da4220dcba304aad9d9p-3Q, 0x1.562eba30ba3dac1311ece1a1884ap-3Q, -0x1.7a30ff6ce5271d64766823319bd4p-4Q, -0x1.b541d802db16d80f141c678b2993p-4Q, 0x1.09c72d78f01628c7ccd127058828p-4Q, 0x1.d35d236774d120bc0fddfe320959p-5Q, -0x1.6cc216694aaa0ced2f850c2b3eb7p-5Q, -0x1.84d84c9eacf2bae4fd091b9bdb4fp-6Q, 0x1.b4f90c6dc9841e7a702107e1aca3p-6Q, 0x1.9a65be90d86a53c665da90605941p-8Q, -0x1.ababc1ea3f978443c6511c976c7fp-7Q, 0x1.f19207685977f43b68af0530733ap-14Q, 0x1.43f78b1e4d853774466d94263915p-8Q, -0x1.2544e0deeca71abd544eac93fa45p-10Q, -0x1.5f6de508b23063ffd5522faa2f1ap-10Q, 0x1.497f3c70a07cbca34a7835790cbfp-11Q, 0x1.bfe9ba59913cd96563f593913af3p-13Q, -0x1.a098a12371c0ca3dcc2d68b00891p-13Q, -0x1.49d5efd42da901d7159610c4d152p-23Q, 0x1.39d678c2c06ae863ef3b97fa7d6p-15Q, -0x1.1de76b2193bec903a9d077f1666ep-17Q, -0x1.bf4c72e2a2d93cedea468c1c5543p-19Q, 0x1.dac907ddfd9dac76e76088418dc5p-20Q, -0x1.4a5a655290e67a67e8d8672b7916p-24Q, -0x1.f9216d4e4d83adac1cb13466b74bp-24Q, 0x1.079c6a0fc4517cae3d72b9596e6p-25Q, -0x1.58b0195a8266ce508d99fc62d4eep-29Q}; + } + #endif + } + if constexpr (p == 19) { + if constexpr (std::is_same_v) { + return {0x1.22a192p-10f, 0x1.d3f68ap-7f, 0x1.4cea48p-4f, 0x1.0ebbd8p-2f, 0x1.0c82ecp-1f, 0x1.34129ep-1f, 0x1.0b280cp-2f, -0x1.d32194p-3f, -0x1.24b2e2p-2f, 0x1.31c694p-4f, 0x1.b2e46cp-3f, -0x1.12957ap-5f, -0x1.246cd4p-3f, 0x1.c3f126p-6f, 0x1.63f856p-4f, -0x1.b2323ep-6f, -0x1.7629ccp-5f, 0x1.6248a8p-6f, 0x1.3d72f2p-6f, -0x1.ca5f1cp-7f, -0x1.807eap-8f, 0x1.cd6c24p-8f, 0x1.93274ep-11f, -0x1.604346p-9f, 0x1.66699p-12f, 0x1.81c5bep-11f, -0x1.1156b8p-12f, -0x1.054e8ap-13f, 0x1.6d608ep-14f, 0x1.56a79p-18f, -0x1.172d04p-16f, 0x1.941ff2p-19f, 0x1.9b3988p-20f, -0x1.7070fep-21f, 0x1.f1373cp-27f, 0x1.8e4f58p-25f, -0x1.7f97c4p-27f, 0x1.dc770ep-31f}; + } + if constexpr (std::is_same_v) { + return {0x1.22a1917fed85ap-10, 0x1.d3f6896603bf4p-7, 0x1.4cea4765b114ap-4, 0x1.0ebbd74f124f2p-2, 0x1.0c82ecc416391p-1, 0x1.34129e60b6e3p-1, 0x1.0b280be54f8b7p-2, -0x1.d32194b53c804p-3, -0x1.24b2e1dd4c73ep-2, 0x1.31c6940f7edfap-4, 0x1.b2e46c1684042p-3, -0x1.12957a28f5bb3p-5, -0x1.246cd3943959bp-3, 0x1.c3f126f461d98p-6, 0x1.63f8568e9e6ecp-4, -0x1.b2323dbfdcbe7p-6, -0x1.7629cb842f99bp-5, 0x1.6248a775ca66p-6, 0x1.3d72f2476d004p-6, -0x1.ca5f1bf2f3244p-7, -0x1.807e9f533b217p-8, 0x1.cd6c23ae5d8f9p-8, 0x1.93274e99dc9b5p-11, -0x1.6043462e3e51ap-9, 0x1.66698fcf3c249p-12, 0x1.81c5be1857466p-11, -0x1.1156b7a432a66p-12, -0x1.054e8a6af00d7p-13, 0x1.6d608dedb3cf6p-14, 0x1.56a78fb9bd527p-18, -0x1.172d0353b3f12p-16, 0x1.941ff236730f1p-19, 0x1.9b39878b95663p-20, -0x1.7070fedc9cdedp-21, 0x1.f1373b9dbeafap-27, 0x1.8e4f570c878dep-25, -0x1.7f97c3aa5d9ep-27, 0x1.dc770dc2ed00bp-31}; + } + if constexpr (std::is_same_v) { + return {0x9.150c8bff6c2cf0bp-13L, 0xe.9fb44b301dfa184p-10L, 0xa.67523b2d88a4cd2p-7L, 0x8.75deba789279273p-5L, 0x8.64176620b1c8a9ap-4L, 0x9.a094f305b717f7bp-4L, 0x8.59405f2a7c5b569p-5L, -0xe.990ca5a9e402365p-6L, -0x9.25970eea639ef9ap-5L, 0x9.8e34a07bf6fd17cp-7L, 0xd.972360b420211e3p-6L, -0x8.94abd147add99bfp-8L, -0x9.23669ca1cacd462p-6L, 0xe.1f8937a30ecc2f7p-9L, 0xb.1fc2b474f37606ap-7L, -0xd.9191edfee5f3727p-9L, -0xb.b14e5c217ccd592p-8L, 0xb.12453bae532fcd5p-9L, 0x9.eb97923b6802088p-9L, -0xe.52f8df979921d82p-10L, -0xc.03f4fa99d90b962p-11L, 0xe.6b611d72ec7ca7cp-11L, 0xc.993a74cee4da67fp-14L, -0xb.021a3171f28cdccp-12L, 0xb.334c7e79e124bccp-15L, 0xc.0e2df0c2ba32ef3p-14L, -0x8.8ab5bd21953315ep-15L, -0x8.2a745357806b795p-16L, 0xb.6b046f6d9e7b04p-17L, 0xa.b53c7dcdea9365p-21L, -0x8.b9681a9d9f88fe1p-19L, 0xc.a0ff91b39878443p-22L, 0xc.d9cc3c5cab31a21p-23L, -0xb.8387f6e4e6f68p-24L, 0xf.89b9dcedf57d09dp-30L, 0xc.727ab8643c6ec27p-28L, -0xb.fcbe1d52ecefc57p-30L, 0xe.e3b86e176805b46p-34L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.22a1917fed859e160446bb7b167ap-10Q, 0x1.d3f6896603bf4308e8ccc5a30641p-7Q, 0x1.4cea4765b11499a3de1dc5fdc4b7p-4Q, 0x1.0ebbd74f124f24e597d3a5bc26dbp-2Q, 0x1.0c82ecc4163915332b81143283e8p-1Q, 0x1.34129e60b6e2fef58b66c45f7099p-1Q, 0x1.0b280be54f8b6ad2d41e0f33532ep-2Q, -0x1.d32194b53c8046c9a7b9b8714cebp-3Q, -0x1.24b2e1dd4c73df34e82deb7bb6c6p-2Q, 0x1.31c6940f7edfa2f8c6ddc9cd2aefp-4Q, 0x1.b2e46c16840423c52b33ff7476eep-3Q, -0x1.12957a28f5bb337e3e66ea6f23e6p-5Q, -0x1.246cd3943959a8c450bf5ca92b86p-3Q, 0x1.c3f126f461d985ee9de87f3424e5p-6Q, 0x1.63f8568e9e6ec0d34220dce2e186p-4Q, -0x1.b2323dbfdcbe6e4ed8b2320fb129p-6Q, -0x1.7629cb842f99ab236f8e908d21c2p-5Q, 0x1.6248a775ca65f9a99ecab76ed61p-6Q, 0x1.3d72f2476d00410fe80cb42bd72bp-6Q, -0x1.ca5f1bf2f3243b0308970f1f944p-7Q, -0x1.807e9f533b2172c38f0c60523009p-8Q, 0x1.cd6c23ae5d8f94f8e6c997306168p-8Q, 0x1.93274e99dc9b4cfea213c9163decp-11Q, -0x1.6043462e3e519b97ce417a7ac3b3p-9Q, 0x1.66698fcf3c2497984ab865b5b6acp-12Q, 0x1.81c5be1857465de5530984af43cbp-11Q, -0x1.1156b7a432a662bbb70ff712e064p-12Q, -0x1.054e8a6af00d6f29e88cd98738bep-13Q, 0x1.6d608dedb3cf6080fb9e6ef72893p-14Q, 0x1.56a78fb9bd526ca09fc616b1b8ap-18Q, -0x1.172d0353b3f11fc1e8818be3f7a7p-16Q, 0x1.941ff236730f0886ee4074951d94p-19Q, 0x1.9b39878b9566344204396825f773p-20Q, -0x1.7070fedc9cdecfffd4c6dc5d1fe5p-21Q, 0x1.f1373b9dbeafa1390279c531a649p-27Q, 0x1.8e4f570c878dd84d17b935d5f69ap-25Q, -0x1.7f97c3aa5d9df8ae90e909fae15p-27Q, 0x1.dc770dc2ed00b68b9c525506b211p-31Q}; + } + #endif + } + if constexpr (p == 20) { + if constexpr (std::is_same_v) { + return {0x1.98eb9ap-11f, 0x1.59aebcp-7f, 0x1.03c8a8p-4f, 0x1.c27102p-3f, 0x1.e40a78p-2f, 0x1.389292p-1f, 0x1.722da8p-2f, -0x1.1d1b3ap-3f, -0x1.4ea132p-2f, -0x1.120e7ep-6f, 0x1.d38a42p-3f, 0x1.467406p-5f, -0x1.3e6128p-3f, -0x1.94f5e4p-6f, 0x1.a2fca4p-4f, 0x1.711d6cp-8f, -0x1.f9a24ep-5f, 0x1.8100cep-8f, 0x1.088e0ep-5f, -0x1.200234p-7f, -0x1.c48b18p-7f, 0x1.b88232p-8f, 0x1.21b464p-8f, -0x1.d56f02p-9f, -0x1.b3fa62p-11f, 0x1.6d0d18p-10f, -0x1.c0c538p-15f, -0x1.93cfc4p-12f, 0x1.a9dc1cp-14f, 0x1.1c224ap-14f, -0x1.37443cp-15f, -0x1.25ad94p-18f, 0x1.e5f3b2p-18f, -0x1.0fa7b2p-20f, -0x1.6f998cp-21f, 0x1.1ad0c2p-22f, 0x1.baf44p-33f, -0x1.37c9a6p-26f, 0x1.16bc24p-28f, -0x1.49b9bep-32f}; + } + if constexpr (std::is_same_v) { + return {0x1.98eb9a1ad223fp-11, 0x1.59aebc7410b77p-7, 0x1.03c8a76dc45bbp-4, 0x1.c27102c5bb1f8p-3, 0x1.e40a78036ac7fp-2, 0x1.389291df573b5p-1, 0x1.722da89a0e974p-2, -0x1.1d1b3a29bcd1cp-3, -0x1.4ea132f283bf2p-2, -0x1.120e7e4faaa26p-6, 0x1.d38a4229ed991p-3, 0x1.46740628c1e1ap-5, -0x1.3e612851515f6p-3, -0x1.94f5e34522642p-6, 0x1.a2fca44817f2fp-4, 0x1.711d6c0e1d46ap-8, -0x1.f9a24d69ac62ep-5, 0x1.8100ce41923f9p-8, 0x1.088e0e0a9eca2p-5, -0x1.2002338d10ca4p-7, -0x1.c48b170cc05f1p-7, 0x1.b88231706930bp-8, 0x1.21b464fba22e8p-8, -0x1.d56f016e81eefp-9, -0x1.b3fa62b1e588ap-11, 0x1.6d0d181744b82p-10, -0x1.c0c537c57bf91p-15, -0x1.93cfc4d1b467bp-12, 0x1.a9dc1c3780427p-14, 0x1.1c224959ff66dp-14, -0x1.37443b45c500dp-15, -0x1.25ad943ec34c5p-18, 0x1.e5f3b2c4841b3p-18, -0x1.0fa7b2e66c174p-20, -0x1.6f998ba053586p-21, 0x1.1ad0c20194a77p-22, 0x1.baf43fba18386p-33, -0x1.37c9a671235e5p-26, 0x1.16bc244bc36b8p-28, -0x1.49b9be3c4a795p-32}; + } + if constexpr (std::is_same_v) { + return {0xc.c75cd0d6911fa1bp-14L, 0xa.cd75e3a085bb58ep-10L, 0x8.1e453b6e22dd40bp-7L, 0xe.1388162dd8fc33cp-6L, 0xf.2053c01b563f9cp-5L, 0x9.c4948efab9da4ebp-4L, 0xb.916d44d074ba33ap-5L, -0x8.e8d9d14de68dd92p-6L, -0xa.750997941df90a2p-5L, -0x8.9073f27d5512ec4p-9L, 0xe.9c52114f6cc8785p-6L, 0xa.33a031460f0d07bp-8L, -0x9.f309428a8afb31p-6L, -0xc.a7af1a291320cf8p-9L, 0xd.17e52240bf97653p-7L, 0xb.88eb6070ea34f45p-11L, -0xf.cd126b4d6317224p-8L, 0xc.0806720c91fc6d9p-11L, 0x8.44707054f65127ep-8L, -0x9.00119c6886523a3p-10L, -0xe.2458b86602f87fcp-10L, 0xd.c4118b834985633p-11L, 0x9.0da327dd11741b6p-11L, -0xe.ab780b740f77b4ep-12L, -0xd.9fd3158f2c44f42p-14L, 0xb.6868c0ba25c0c5ep-13L, -0xe.0629be2bdfc8a9ap-18L, -0xc.9e7e268da33d44p-15L, 0xd.4ee0e1bc0213577p-17L, 0x8.e1124acffb364cp-17L, -0x9.ba21da2e280684dp-18L, -0x9.2d6ca1f61a624d6p-21L, 0xf.2f9d962420d947dp-21L, -0x8.7d3d973360b9f2p-23L, -0xb.7ccc5d029ac2c2ep-24L, 0x8.d686100ca53b51dp-25L, 0xd.d7a1fdd0c1c3167p-36L, -0x9.be4d33891af2665p-29L, 0x8.b5e1225e1b5bf96p-31L, -0xa.4dcdf1e253caa43p-35L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.98eb9a1ad223f435df1887363eb7p-11Q, 0x1.59aebc7410b76b1badcc12950a6dp-7Q, 0x1.03c8a76dc45ba8152978f10f7c69p-4Q, 0x1.c27102c5bb1f8677bf80bd502bd1p-3Q, 0x1.e40a78036ac7f37fedcb5a80e979p-2Q, 0x1.389291df573b49d69709e6a39a77p-1Q, 0x1.722da89a0e9746749e19dd59185cp-2Q, -0x1.1d1b3a29bcd1bb23d3a59b3ec213p-3Q, -0x1.4ea132f283bf214303a247980416p-2Q, -0x1.120e7e4faaa25d883a426ff76e5ep-6Q, 0x1.d38a4229ed990f09767be4223746p-3Q, 0x1.46740628c1e1a0f69af0510e97b1p-5Q, -0x1.3e612851515f661f1b982f038f42p-3Q, -0x1.94f5e345226419f0d083e13269c2p-6Q, 0x1.a2fca44817f2eca68758db1b8b3cp-4Q, 0x1.711d6c0e1d469e893974f1ea6999p-8Q, -0x1.f9a24d69ac62e448cc934c83e493p-5Q, 0x1.8100ce41923f8db158db362c64bfp-8Q, 0x1.088e0e0a9eca24fb78af66e8d177p-5Q, -0x1.2002338d10ca4746416546df60b9p-7Q, -0x1.c48b170cc05f0ff881bd3e1b39f6p-7Q, 0x1.b88231706930ac6660faf6c0f2dep-8Q, 0x1.21b464fba22e836bf597b5aa439ep-8Q, -0x1.d56f016e81eef69c49d53f5d0ebbp-9Q, -0x1.b3fa62b1e5889e83d8f6afb75bd8p-11Q, 0x1.6d0d181744b818bb6e246e9454cp-10Q, -0x1.c0c537c57bf91533c45c4dad234ap-15Q, -0x1.93cfc4d1b467a87fbd054b646597p-12Q, 0x1.a9dc1c3780426aeee785e4f91b69p-14Q, 0x1.1c224959ff66c97f21d37d9c05fbp-14Q, -0x1.37443b45c500d09a28a777a35885p-15Q, -0x1.25ad943ec34c49ac55547e1ee8bep-18Q, 0x1.e5f3b2c4841b28f9ade386d031fap-18Q, -0x1.0fa7b2e66c173e3f4204ea792843p-20Q, -0x1.6f998ba05358585b78628b55c242p-21Q, 0x1.1ad0c20194a76a3ad5100084b452p-22Q, 0x1.baf43fba183862ce0fdd2ce6713ep-33Q, -0x1.37c9a671235e4ccaa17336a7b289p-26Q, 0x1.16bc244bc36b7f2c806c15a56631p-28Q, -0x1.49b9be3c4a79548641570a58d68ep-32Q}; + } + #endif + } + if constexpr (p == 21) { + if constexpr (std::is_same_v) { + return {0x1.1fbdb6p-11f, 0x1.fda65ap-8f, 0x1.93701p-5f, 0x1.736cacp-3f, 0x1.adc2aep-2f, 0x1.33f89cp-1f, 0x1.c742b8p-2f, -0x1.24a464p-5f, -0x1.57b854p-2f, -0x1.cc60ep-4f, 0x1.b148bep-3f, 0x1.d7feep-4f, -0x1.1e9916p-3f, -0x1.4ef44ap-4f, 0x1.8bacdap-4f, 0x1.7690eep-5f, -0x1.0a25dap-4f, -0x1.319ff4p-6f, 0x1.457136p-5f, 0x1.b81b9cp-9f, -0x1.564bap-6f, 0x1.3b071ap-9f, 0x1.268bbap-7f, -0x1.7af914p-9f, -0x1.83c29p-9f, 0x1.c1ff8cp-10f, 0x1.4f3d4cp-11f, -0x1.6a1c4ep-11f, -0x1.0c224ep-15f, 0x1.9624eap-13f, -0x1.30f834p-15f, -0x1.2592c2p-15f, 0x1.019c78p-16f, 0x1.768306p-19f, -0x1.9ebc2ep-19f, 0x1.53f4f8p-22f, 0x1.41473ap-22f, -0x1.adab3ep-24f, -0x1.35ca1ap-29f, 0x1.e5063ep-28f, -0x1.949b92p-30f, 0x1.c8df1cp-34f}; + } + if constexpr (std::is_same_v) { + return {0x1.1fbdb5d9588b2p-11, 0x1.fda65a6714bdap-8, 0x1.937010050905p-5, 0x1.736cace0a6657p-3, 0x1.adc2ad3828f8ep-2, 0x1.33f89b5c2e57bp-1, 0x1.c742b82c92555p-2, -0x1.24a4646f28f23p-5, -0x1.57b853bbe6a56p-2, -0x1.cc60df28d7badp-4, 0x1.b148be3b1073fp-3, 0x1.d7fedf0356bp-4, -0x1.1e9915e3ca004p-3, -0x1.4ef44a8b3ce94p-4, 0x1.8bacd9d38a28ep-4, 0x1.7690ee8b59819p-5, -0x1.0a25da27e87d7p-4, -0x1.319ff4cde80a9p-6, 0x1.4571365df5489p-5, 0x1.b81b9bc4d4f3cp-9, -0x1.564b9fd2c3bbfp-6, 0x1.3b071a00e4e5cp-9, 0x1.268bb96001dc4p-7, -0x1.7af914f01f8fcp-9, -0x1.83c28f7e3c0e5p-9, 0x1.c1ff8c65fb698p-10, 0x1.4f3d4c629fe3fp-11, -0x1.6a1c4ee19b423p-11, -0x1.0c224d58d6e81p-15, 0x1.9624eae0b53fp-13, -0x1.30f833f09ef02p-15, -0x1.2592c13818da8p-15, 0x1.019c78bb61865p-16, 0x1.768306fdacad5p-19, -0x1.9ebc2e6b68816p-19, 0x1.53f4f805c9123p-22, 0x1.414739b599eb7p-22, -0x1.adab3d69a3265p-24, -0x1.35ca1a0003737p-29, 0x1.e5063d39ebf9ap-28, -0x1.949b918111d77p-30, 0x1.c8df1c0c683efp-34}; + } + if constexpr (std::is_same_v) { + return {0x8.fdedaecac458cd2p-14L, 0xf.ed32d338a5ecf5cp-11L, 0xc.9b8080284827e72p-8L, 0xb.9b656705332bae6p-6L, 0xd.6e1569c147c6dadp-5L, 0x9.9fc4dae172bdbe9p-4L, 0xe.3a15c16492aa9dbp-5L, -0x9.252323794791b92p-8L, -0xa.bdc29ddf352b036p-5L, -0xe.6306f946bdd67aep-7L, 0xd.8a45f1d8839f921p-6L, 0xe.bff6f81ab580014p-7L, -0x8.f4c8af1e5002333p-6L, -0xa.77a25459e74a242p-7L, 0xc.5d66ce9c5146f15p-7L, 0xb.b487745acc0c8adp-8L, -0x8.512ed13f43ebad1p-7L, -0x9.8cffa66f405497bp-9L, 0xa.2b89b2efaa444bdp-8L, 0xd.c0dcde26a79e22p-12L, -0xa.b25cfe961ddf733p-9L, 0x9.d838d007272dcc4p-12L, 0x9.345dcb000ee2014p-10L, -0xb.d7c8a780fc7dcf5p-12L, -0xc.1e147bf1e072bc1p-12L, 0xe.0ffc632fdb4c29ep-13L, 0xa.79ea6314ff1f508p-14L, -0xb.50e2770cda119f3p-14L, -0x8.61126ac6b7407d4p-18L, 0xc.b1275705a9f8219p-16L, -0x9.87c19f84f78120fp-18L, -0x9.2c9609c0c6d43f4p-18L, 0x8.0ce3c5db0c32b2dp-19L, 0xb.b41837ed656a6e4p-22L, -0xc.f5e1735b440ad22p-22L, 0xa.9fa7c02e489184ap-25L, 0xa.0a39cdaccf5ba4ap-25L, -0xd.6d59eb4d1932a9ep-27L, -0x9.ae50d0001b9b402p-32L, 0xf.2831e9cf5fcccbdp-31L, -0xc.a4dc8c088ebb653p-33L, 0xe.46f8e06341f76fbp-37L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.1fbdb5d9588b19a3bff14d1b38fep-11Q, 0x1.fda65a6714bd9eb85e8d7e88dc47p-8Q, 0x1.937010050904fce3eac118cf708bp-5Q, 0x1.736cace0a66575cc5580323567efp-3Q, 0x1.adc2ad3828f8db5a1d5b82619893p-2Q, 0x1.33f89b5c2e57b7d298074c990addp-1Q, 0x1.c742b82c925553b5685081f7bfa5p-2Q, -0x1.24a4646f28f23724c7651fdfae24p-5Q, -0x1.57b853bbe6a5606b16b5f4878728p-2Q, -0x1.cc60df28d7bacf5cd487dfbe8b15p-4Q, 0x1.b148be3b1073f24190a78355f27p-3Q, 0x1.d7fedf0356b00027d18f8e92c824p-4Q, -0x1.1e9915e3ca004666a067ba487474p-3Q, -0x1.4ef44a8b3ce944830f2730d25eb9p-4Q, 0x1.8bacd9d38a28de29668579705c28p-4Q, 0x1.7690ee8b5981915a6dd616884c3fp-5Q, -0x1.0a25da27e87d75a179ff300fb83fp-4Q, -0x1.319ff4cde80a92f66d084237880cp-6Q, 0x1.4571365df548897971310c0822e6p-5Q, 0x1.b81b9bc4d4f3c43f2ed25e559ae8p-9Q, -0x1.564b9fd2c3bbee66fedad254cc1dp-6Q, 0x1.3b071a00e4e5b987ae06dc453687p-9Q, 0x1.268bb96001dc402712698f3f0494p-7Q, -0x1.7af914f01f8fb9ea842adaa7f3cdp-9Q, -0x1.83c28f7e3c0e5781b7d022113abfp-9Q, 0x1.c1ff8c65fb69853c310221a8efcfp-10Q, 0x1.4f3d4c629fe3ea0f5f4b5c45e52p-11Q, -0x1.6a1c4ee19b4233e5be9da5626ae4p-11Q, -0x1.0c224d58d6e80fa7cb5e318a3bafp-15Q, 0x1.9624eae0b53f0431ec2fc4ac4a39p-13Q, -0x1.30f833f09ef0241df6514d4f75d1p-15Q, -0x1.2592c13818da87e8e3f7d01fb451p-15Q, 0x1.019c78bb618656595fd443f75a4ep-16Q, 0x1.768306fdacad4dc8fab15811b58ap-19Q, -0x1.9ebc2e6b68815a4433974307ca8ep-19Q, 0x1.53f4f805c91230935990691c9b37p-22Q, 0x1.414739b599eb74930d1d52f4adeap-22Q, -0x1.adab3d69a326553c517a3161ce4cp-24Q, -0x1.35ca1a000373680368e6e76ba1cap-29Q, 0x1.e5063d39ebf99979a7db1201c73dp-28Q, -0x1.949b918111d76ca513fa5f9592d7p-30Q, 0x1.c8df1c0c683eedf6229624f6ad7fp-34Q}; + } + #endif + } + if constexpr (p == 22) { + if constexpr (std::is_same_v) { + return {0x1.9506cp-12f, 0x1.76fccap-8f, 0x1.37de72p-5f, 0x1.2fdb52p-3f, 0x1.788ddep-2f, 0x1.282856p-1f, 0x1.040b9cp-1f, 0x1.2df9bep-4f, -0x1.403b66p-2f, -0x1.9ac39cp-3f, 0x1.501016p-3f, 0x1.7095c8p-3f, -0x1.8dc40ep-4f, -0x1.0ddc74p-3f, 0x1.16d73p-4f, 0x1.5a58d6p-4f, -0x1.a4c6a6p-5f, -0x1.7d2e3p-5f, 0x1.2edd7cp-5f, 0x1.514ae8p-6f, -0x1.80b244p-6f, -0x1.9739fap-8f, 0x1.9bb88ep-7f, 0x1.3ab784p-12f, -0x1.658b52p-8f, 0x1.11bf26p-10f, 0x1.def09ap-10f, -0x1.941064p-11f, -0x1.bc5f9p-12f, 0x1.58926ap-12f, 0x1.6c8f7ep-15f, -0x1.8a7bd2p-14f, 0x1.7da8ecp-17f, 0x1.237bb8p-16f, -0x1.9dd79ap-18f, -0x1.a4264ap-20f, 0x1.5bac3cp-20f, -0x1.7917ccp-24f, -0x1.139828p-23f, 0x1.43164cp-25f, 0x1.cdd78ep-30f, -0x1.772814p-29f, 0x1.2558aap-31f, -0x1.3cd862p-35f}; + } + if constexpr (std::is_same_v) { + return {0x1.9506bf26823bdp-12, 0x1.76fcca8398a61p-8, 0x1.37de71ec845e4p-5, 0x1.2fdb523f49ab5p-3, 0x1.788dde34ceb66p-2, 0x1.282855bd3e661p-1, 0x1.040b9c9ba65ccp-1, 0x1.2df9be17f6307p-4, -0x1.403b658e1e271p-2, -0x1.9ac39bc6a693fp-3, 0x1.501016e351cb2p-3, 0x1.7095c864b0cccp-3, -0x1.8dc40d7416ec6p-4, -0x1.0ddc7410272ddp-3, 0x1.16d7307f2f199p-4, 0x1.5a58d5e218e8bp-4, -0x1.a4c6a60c82a99p-5, -0x1.7d2e2f61c66bdp-5, 0x1.2edd7c2485c6cp-5, 0x1.514ae8ff8882dp-6, -0x1.80b243789dd91p-6, -0x1.9739fa1f59fdbp-8, 0x1.9bb88df2b07f2p-7, 0x1.3ab784f96ef95p-12, -0x1.658b52a857f98p-8, 0x1.11bf26e4a8f4ap-10, 0x1.def099502d06ep-10, -0x1.941064b6e88a6p-11, -0x1.bc5f905d400afp-12, 0x1.58926afecb291p-12, 0x1.6c8f7d64132f3p-15, -0x1.8a7bd1deebb29p-14, 0x1.7da8eb6c7dd39p-17, 0x1.237bb7cb019efp-16, -0x1.9dd79a5aef3dp-18, -0x1.a4264a7b9f195p-20, 0x1.5bac3bb6b7df3p-20, -0x1.7917ccd42a174p-24, -0x1.139827c14728ep-23, 0x1.43164b7e12198p-25, 0x1.cdd78d40a514dp-30, -0x1.772813927397bp-29, 0x1.2558a9abd0467p-31, -0x1.3cd8627d9b085p-35}; + } + if constexpr (std::is_same_v) { + return {0xc.a835f93411de553p-15L, 0xb.b7e6541cc530467p-11L, 0x9.bef38f6422f21e9p-8L, 0x9.7eda91fa4d5aa1ap-6L, 0xb.c46ef1a675b2f1p-5L, 0x9.4142ade9f3308e8p-4L, 0x8.205ce4dd32e5de6p-4L, 0x9.6fcdf0bfb18389dp-7L, -0xa.01db2c70f1385a8p-5L, -0xc.d61cde35349f534p-6L, 0xa.8080b71a8e58ef5p-6L, 0xb.84ae43258666006p-6L, -0xc.6e206ba0b762e61p-7L, -0x8.6ee3a081396e7a5p-6L, 0x8.b6b983f978cc515p-7L, 0xa.d2c6af10c745924p-7L, -0xd.26353064154caf2p-8L, -0xb.e9717b0e335e71fp-8L, 0x9.76ebe1242e35de2p-8L, 0xa.8a5747fc44168f9p-9L, -0xc.05921bc4eec8a0fp-9L, -0xc.b9cfd0facfed6d3p-11L, 0xc.ddc46f9583f92e4p-10L, 0x9.d5bc27cb77ca414p-15L, -0xb.2c5a9542bfcbcecp-11L, 0x8.8df9372547a50bfp-13L, 0xe.f784ca816836eb8p-13L, -0xc.a08325b74452d5dp-14L, -0xd.e2fc82ea0057a9fp-15L, 0xa.c49357f65948be4p-15L, 0xb.647beb209979943p-18L, -0xc.53de8ef75d94bb9p-17L, 0xb.ed475b63ee9c598p-20L, 0x9.1bddbe580cf7997p-19L, -0xc.eebcd2d779e82c2p-21L, -0xd.213253dcf8ca54ep-23L, 0xa.dd61ddb5bef98f1p-23L, -0xb.c8be66a150b9e14p-27L, -0x8.9cc13e0a3946c9cp-26L, 0xa.18b25bf090cbe47p-28L, 0xe.6ebc6a0528a6ab3p-33L, -0xb.b9409c939cbdb9ep-32L, 0x9.2ac54d5e82338aap-34L, -0x9.e6c313ecd8427c2p-38L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.9506bf26823bcaa678f24755b1bep-12Q, 0x1.76fcca8398a608cea25db5f87af6p-8Q, 0x1.37de71ec845e43d133d0c299f8ecp-5Q, 0x1.2fdb523f49ab54335a2eba9c8437p-3Q, 0x1.788dde34ceb65e20730d6ddac0aep-2Q, 0x1.282855bd3e6611cfef751a206622p-1Q, 0x1.040b9c9ba65cbbcc9c304a8323e2p-1Q, 0x1.2df9be17f630713a1ee1adb275ebp-4Q, -0x1.403b658e1e270b5094f497dac5a2p-2Q, -0x1.9ac39bc6a693ea6805616ea07bd7p-3Q, 0x1.501016e351cb1dea06a54dd049bp-3Q, 0x1.7095c864b0ccc00c06f07ad7df02p-3Q, -0x1.8dc40d7416ec5cc24d97996382b6p-4Q, -0x1.0ddc7410272dcf4ab45934d4cf13p-3Q, 0x1.16d7307f2f198a2aec11f34d1e9fp-4Q, 0x1.5a58d5e218e8b247e862b3c1695fp-4Q, -0x1.a4c6a60c82a995e3152af9622fcap-5Q, -0x1.7d2e2f61c66bce3ea7e2b78a28c2p-5Q, 0x1.2edd7c2485c6bbc4d1a2c115a8a7p-5Q, 0x1.514ae8ff8882d1f2c15a47cd6559p-6Q, -0x1.80b243789dd9141e3fff7c22096dp-6Q, -0x1.9739fa1f59fdada5471944d8c62dp-8Q, 0x1.9bb88df2b07f25c8944100438d61p-7Q, 0x1.3ab784f96ef948279489735c5a1cp-12Q, -0x1.658b52a857f979d8d4ec9b9f73a9p-8Q, 0x1.11bf26e4a8f4a17dea14a455c454p-10Q, 0x1.def099502d06dd70a82c80e4bd5ep-10Q, -0x1.941064b6e88a5abad07f7589e66dp-11Q, -0x1.bc5f905d400af53d3eed609ad591p-12Q, 0x1.58926afecb2917c8a7cf6285c131p-12Q, 0x1.6c8f7d64132f3286043bbcbfb14ep-15Q, -0x1.8a7bd1deebb29772b3b880563654p-14Q, 0x1.7da8eb6c7dd38b3094b5e1389c85p-17Q, 0x1.237bb7cb019ef32d902afce7d618p-16Q, -0x1.9dd79a5aef3d0583abb88bd3c2cp-18Q, -0x1.a4264a7b9f194a9cadbc3e265f85p-20Q, 0x1.5bac3bb6b7df31e28d50f39c71ffp-20Q, -0x1.7917ccd42a173c285afd81440ef2p-24Q, -0x1.139827c14728d9384a9bd9717ddp-23Q, 0x1.43164b7e12197c8ececb2f261f6bp-25Q, 0x1.cdd78d40a514d5664ee974c433ep-30Q, -0x1.772813927397b73b1b90436f0da9p-29Q, 0x1.2558a9abd04671533bb0e6556b43p-31Q, -0x1.3cd8627d9b084f8342fbe01d8e11p-35Q}; + } + #endif + } + if constexpr (p == 23) { + if constexpr (std::is_same_v) { + return {0x1.1d1cbap-12f, 0x1.136e6ep-8f, 0x1.e0371p-6f, 0x1.eda1b2p-4f, 0x1.4617f8p-2f, 0x1.170138p-1f, 0x1.1a1f1ap-1f, 0x1.737dfap-3f, -0x1.0baa62p-2f, -0x1.15ea6ep-2f, 0x1.79587ep-4f, 0x1.c9e0fcp-3f, -0x1.0ea48cp-5f, -0x1.4fe52ap-3f, 0x1.4c5162p-6f, 0x1.cbf7fcp-4f, -0x1.5a21c2p-6f, -0x1.1f91cap-4f, 0x1.649c9ep-6f, 0x1.3b5a9p-5f, -0x1.2f7d4p-6f, -0x1.1f53eep-6f, 0x1.a1db1p-7f, 0x1.8b4d7ep-8f, -0x1.cfb028p-8f, -0x1.297f88p-10f, 0x1.995258p-9f, -0x1.0279b8p-12f, -0x1.163206p-10f, 0x1.4eefcap-12f, 0x1.0d3c26p-12f, -0x1.3a9e5ep-13f, -0x1.1b7136p-15f, 0x1.734928p-15f, -0x1.61b10ep-19f, -0x1.181bb4p-17f, 0x1.41cbdcp-19f, 0x1.b56b6ap-21f, -0x1.1ea2bcp-21f, 0x1.3e5bd6p-26f, 0x1.d15d2ap-25f, -0x1.e103ap-27f, -0x1.046382p-30f, 0x1.20be9ap-30f, -0x1.a8f0bcp-33f, 0x1.b7e04ep-37f}; + } + if constexpr (std::is_same_v) { + return {0x1.1d1cb9f15ca3p-12, 0x1.136e6d0cada7ap-8, 0x1.e03710ca000b2p-6, 0x1.eda1b1bac15d3p-4, 0x1.4617f85b87d2cp-2, 0x1.1701372560847p-1, 0x1.1a1f195e16c2fp-1, 0x1.737dfa0d62dcfp-3, -0x1.0baa621ce4279p-2, -0x1.15ea6e8658872p-2, 0x1.79587da8cb753p-4, 0x1.c9e0fc732c538p-3, -0x1.0ea48c5a06944p-5, -0x1.4fe52af139a58p-3, 0x1.4c51617dbe58bp-6, 0x1.cbf7fc1c6fa45p-4, -0x1.5a21c1ca225bep-6, -0x1.1f91c92c06d32p-4, 0x1.649c9ed18296ap-6, 0x1.3b5a90477563fp-5, -0x1.2f7d3f55674e5p-6, -0x1.1f53eed1947bfp-6, 0x1.a1db0f12bb42p-7, 0x1.8b4d7e5397f08p-8, -0x1.cfb028e3aae51p-8, -0x1.297f885faab6dp-10, 0x1.995258715da31p-9, -0x1.0279b74217beap-12, -0x1.163205afadf6dp-10, 0x1.4eefc91e26cfap-12, 0x1.0d3c2558f1652p-12, -0x1.3a9e5e1c22af4p-13, -0x1.1b7136cbb5aep-15, 0x1.734927c4130bfp-15, -0x1.61b10dba0880bp-19, -0x1.181bb48217362p-17, 0x1.41cbdcc2df4d9p-19, 0x1.b56b6a75fa292p-21, -0x1.1ea2bb46afa08p-21, 0x1.3e5bd6b02b53fp-26, 0x1.d15d2a9531ecbp-25, -0x1.e103a0e0c3b96p-27, -0x1.0463822ac124p-30, 0x1.20be99079e759p-30, -0x1.a8f0bc9b067e6p-33, 0x1.b7e04d72be8f7p-37}; + } + if constexpr (std::is_same_v) { + return {0x8.e8e5cf8ae517d2ep-15L, 0x8.9b7368656d3d159p-11L, 0xf.01b886500058d29p-9L, 0xf.6d0d8dd60ae956bp-7L, 0xa.30bfc2dc3e9620cp-5L, 0x8.b809b92b0423412p-4L, 0x8.d0f8caf0b617657p-4L, 0xb.9befd06b16e7779p-6L, -0x8.5d5310e7213cb45p-5L, -0x8.af537432c439318p-5L, 0xb.cac3ed465ba98efp-7L, 0xe.4f07e399629c099p-6L, -0x8.752462d034a1f39p-8L, -0xa.7f295789cd2c17ap-6L, 0xa.628b0bedf2c55d4p-9L, 0xe.5fbfe0e37d2292p-7L, -0xa.d10e0e5112df11ap-9L, -0x8.fc8e49603699185p-7L, 0xb.24e4f68c14b4ebbp-9L, 0x9.dad4823bab1fbp-8L, -0x9.7be9faab3a727aap-9L, -0x8.fa9f768ca3df844p-9L, 0xd.0ed87895da0fea4p-10L, 0xc.5a6bf29cbf83d82p-11L, -0xe.7d81471d5728bb2p-11L, -0x9.4bfc42fd55b69dep-13L, 0xc.ca92c38aed18631p-12L, -0x8.13cdba10bdf515p-15L, -0x8.b1902d7d6fb67f6p-13L, 0xa.777e48f1367d0a5p-15L, 0x8.69e12ac78b28dbcp-15L, -0x9.d4f2f0e11579f3cp-16L, -0x8.db89b65dad6fc16p-18L, 0xb.9a493e20985f9bfp-18L, -0xb.0d886dd044054a4p-22L, -0x8.c0dda410b9b125ap-20L, 0xa.0e5ee616fa6c626p-22L, 0xd.ab5b53afd14926ap-24L, -0x8.f515da357d03ea3p-24L, 0x9.f2deb5815a9f567p-29L, 0xe.8ae954a98f65bb4p-28L, -0xf.081d07061dcaca2p-30L, -0x8.231c1156091fc3ap-33L, 0x9.05f4c83cf3acb2cp-33L, -0xd.4785e4d833f33e2p-36L, 0xd.bf026b95f47b713p-40L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.1d1cb9f15ca2fa5bd9123de7bf02p-12Q, 0x1.136e6d0cada7a2b148b6e8855daap-8Q, 0x1.e03710ca000b1a51a7d181d489bp-6Q, 0x1.eda1b1bac15d2ad6ddbdb3147e36p-4Q, 0x1.4617f85b87d2c4188e472323232cp-2Q, 0x1.1701372560846824bce2d06e180cp-1Q, 0x1.1a1f195e16c2ecad981d672e54f9p-1Q, 0x1.737dfa0d62dceef2a6ae0dd9fae6p-3Q, -0x1.0baa621ce427968960a0c4171c1cp-2Q, -0x1.15ea6e865887262fe21b5ed288ddp-2Q, 0x1.79587da8cb7531de57b391307b2ep-4Q, 0x1.c9e0fc732c5381328729c7899645p-3Q, -0x1.0ea48c5a06943e72865d8b0a9865p-5Q, -0x1.4fe52af139a582f4b4bfddd5990ap-3Q, 0x1.4c51617dbe58aba744aaa9e2e84dp-6Q, 0x1.cbf7fc1c6fa4523fc35d6c595afp-4Q, -0x1.5a21c1ca225be23388c3683c5f1ap-6Q, -0x1.1f91c92c06d3230ad5ace9dd7e2ap-4Q, 0x1.649c9ed182969d7683dcc682acbcp-6Q, 0x1.3b5a90477563f5ff5ff6e6498f97p-5Q, -0x1.2f7d3f55674e4f5496795e1de4a5p-6Q, -0x1.1f53eed1947bf0871dd1fee02046p-6Q, 0x1.a1db0f12bb41fd473a2e8421b507p-7Q, 0x1.8b4d7e5397f07b04d41a59615574p-8Q, -0x1.cfb028e3aae51764ab65b4e360fbp-8Q, -0x1.297f885faab6d3bcc655cccba49p-10Q, 0x1.995258715da30c618d8b26e9df7bp-9Q, -0x1.0279b74217bea2a0847d1e93003bp-12Q, -0x1.163205afadf6cfebfb69e0b0f9f9p-10Q, 0x1.4eefc91e26cfa14abc8a3c8c31bep-12Q, 0x1.0d3c2558f1651b77d56d78be87a6p-12Q, -0x1.3a9e5e1c22af3e7828bfcf5d2f48p-13Q, -0x1.1b7136cbb5adf82b0d9aad06bd7cp-15Q, 0x1.734927c4130bf37e18cb5a04041ap-15Q, -0x1.61b10dba0880a94866a6f32c90e9p-19Q, -0x1.181bb482173624b3f677525a8993p-17Q, 0x1.41cbdcc2df4d8c4b6d915e9702b2p-19Q, 0x1.b56b6a75fa2924d359ae84bf18d8p-21Q, -0x1.1ea2bb46afa07d45b08cabbea3b6p-21Q, 0x1.3e5bd6b02b53eacdcf10b59b874fp-26Q, 0x1.d15d2a9531ecb7682cdf70f5d33bp-25Q, -0x1.e103a0e0c3b959430c8cac42a206p-27Q, -0x1.0463822ac123f874c86ec02d6961p-30Q, 0x1.20be99079e7596586119e6bc965cp-30Q, -0x1.a8f0bc9b067e67c3b0dec15337bdp-33Q, 0x1.b7e04d72be8f6e258b11c231fbfep-37Q}; + } + #endif + } + if constexpr (p == 24) { + if constexpr (std::is_same_v) { + return {0x1.91785p-13f, 0x1.93f98p-9f, 0x1.7059c4p-6f, 0x1.8e62d8p-4f, 0x1.17757p-2f, 0x1.023cecp-1f, 0x1.265e6ep-1f, 0x1.1fbaaep-2f, -0x1.7f8826p-3f, -0x1.4592dep-2f, 0x1.390a48p-8f, 0x1.e9f54ap-3f, 0x1.5c6536p-5f, -0x1.5e912ep-3f, -0x1.3da9ap-5f, 0x1.efaecap-4f, 0x1.57bcfap-6f, -0x1.5088bep-4f, -0x1.2c0d6ap-8f, 0x1.a4434cp-5f, -0x1.440e76p-8f, -0x1.ce3e5ap-6f, 0x1.f61e5cp-8f, 0x1.ab9f18p-7f, -0x1.9c50c6p-8f, -0x1.371236p-8f, 0x1.e9b0e8p-9f, 0x1.2e73dap-10f, -0x1.bcb74ap-10f, -0x1.7274d8p-15f, 0x1.334ca4p-11f, -0x1.ef71f4p-14f, -0x1.32337p-13f, 0x1.131ee6p-14f, 0x1.6e4982p-16f, -0x1.536264p-16f, 0x1.ccd17cp-27f, 0x1.05cc64p-18f, -0x1.e21fa8p-21f, -0x1.b0fcbap-22f, 0x1.d137c8p-23f, -0x1.160c08p-31f, -0x1.838882p-26f, 0x1.627092p-28f, 0x1.050b72p-31f, -0x1.ba8412p-32f, 0x1.3380aep-34f, -0x1.31989ep-38f}; + } + if constexpr (std::is_same_v) { + return {0x1.91785023a9879p-13, 0x1.93f9805696b9cp-9, 0x1.7059c4b494de9p-6, 0x1.8e62d8a0a8ffcp-4, 0x1.17756f5530d69p-2, 0x1.023cebcae9f67p-1, 0x1.265e6eff960ccp-1, 0x1.1fbaad4726276p-2, -0x1.7f8826c061991p-3, -0x1.4592ded92acf9p-2, 0x1.390a478f54bbbp-8, 0x1.e9f54ac655c14p-3, 0x1.5c6535de6b4e5p-5, -0x1.5e912ec022b6p-3, -0x1.3da9a08b26c34p-5, 0x1.efaeca9aee192p-4, 0x1.57bcf98fd11cep-6, -0x1.5088bd1cf023ep-4, -0x1.2c0d69ece949fp-8, 0x1.a4434b89b6915p-5, -0x1.440e7548329f5p-8, -0x1.ce3e5912a2303p-6, 0x1.f61e5ce9a7ff1p-8, 0x1.ab9f170d72cc6p-7, -0x1.9c50c528bc778p-8, -0x1.371235b499d34p-8, 0x1.e9b0e84ddc047p-9, 0x1.2e73daaf19dbbp-10, -0x1.bcb74a39ee4ap-10, -0x1.7274d8ffa9744p-15, 0x1.334ca46898daep-11, -0x1.ef71f401aeeebp-14, -0x1.32337036c1617p-13, 0x1.131ee63336347p-14, 0x1.6e4981b862b8bp-16, -0x1.536263fe83a12p-16, 0x1.ccd17bbbe3d04p-27, 0x1.05cc64bbcf96p-18, -0x1.e21fa8ce8bf7ap-21, -0x1.b0fcbaac8055ep-22, 0x1.d137c82c35ed7p-23, -0x1.160c0805b95d3p-31, -0x1.838882edd8948p-26, 0x1.627091a0c660dp-28, 0x1.050b72dfcacecp-31, -0x1.ba8411e011af6p-32, 0x1.3380aec6c4cc7p-34, -0x1.31989d5a96be3p-38}; + } + if constexpr (std::is_same_v) { + return {0xc.8bc2811d4c3c975p-16L, 0xc.9fcc02b4b5cdd4fp-12L, 0xb.82ce25a4a6f4946p-9L, 0xc.7316c50547fde96p-7L, 0x8.bbab7aa986b4822p-5L, 0x8.11e75e574fb369fp-4L, 0x9.32f377fcb066266p-4L, 0x8.fdd56a39313b02ap-5L, -0xb.fc4136030cc8af3p-6L, -0xa.2c96f6c9567c64ep-5L, 0x9.c8523c7aa5dd6c6p-11L, 0xf.4faa5632ae09cacp-6L, 0xa.e329aef35a72807p-8L, -0xa.f489760115afe5ap-6L, -0x9.ed4d0459361a0cbp-8L, 0xf.7d7654d770c90fap-7L, 0xa.bde7cc7e88e7341p-9L, -0xa.8445e8e7811ed17p-7L, -0x9.606b4f674a4f729p-11L, 0xd.221a5c4db48a85p-8L, -0xa.2073aa4194fa9f4p-11L, -0xe.71f2c8951181b37p-9L, 0xf.b0f2e74d3ff8483p-11L, 0xd.5cf8b86b966301bp-10L, -0xc.e2862945e3bc0bdp-11L, -0x9.b891ada4ce99f42p-11L, 0xf.4d87426ee023471p-12L, 0x9.739ed578cedd928p-13L, -0xd.e5ba51cf724ff04p-13L, -0xb.93a6c7fd4ba228cp-18L, 0x9.9a652344c6d708fp-14L, -0xf.7b8fa00d7775af1p-17L, -0x9.919b81b60b0b6ddp-16L, 0x8.98f73199b1a34dep-17L, 0xb.724c0dc315c5bebp-19L, -0xa.9b131ff41d09255p-19L, 0xe.668bdddf1e8204p-30L, 0x8.2e6325de7cafddbp-21L, -0xf.10fd46745fbd3a3p-24L, -0xd.87e5d56402aecbp-25L, 0xe.89be4161af6badap-26L, -0x8.b060402dcae9786p-34L, -0xc.1c44176ec4a3d56p-29L, 0xb.13848d0633067f9p-31L, 0x8.285b96fe5675d57p-34L, -0xd.d4208f008d7b156p-35L, 0x9.9c0576362663aafp-37L, -0x9.8cc4ead4b5f196ap-41L}; + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + return {0x1.91785023a98792eac41b5272c04bp-13Q, 0x1.93f9805696b9ba9d87c3df41a8d9p-9Q, 0x1.7059c4b494de928c16cf6cacf0a7p-6Q, 0x1.8e62d8a0a8ffbd2cc57d79f83e08p-4Q, 0x1.17756f5530d69044d0184f790b3ep-2Q, 0x1.023cebcae9f66d3d390049f78dcp-1Q, 0x1.265e6eff960cc4ccf24089549b66p-1Q, 0x1.1fbaad4726276054f5d700d1bfb6p-2Q, -0x1.7f8826c0619915e6978c42a74dfcp-3Q, -0x1.4592ded92acf8c9c5ecd6ba9faddp-2Q, 0x1.390a478f54bbad8c711b3d202a1ap-8Q, 0x1.e9f54ac655c13958344e31a88778p-3Q, 0x1.5c6535de6b4e500e1e067af4d00ep-5Q, -0x1.5e912ec022b5fcb42ec3601ecf9bp-3Q, -0x1.3da9a08b26c34196db8bd596e813p-5Q, 0x1.efaeca9aee1921f4bc36a577b638p-4Q, 0x1.57bcf98fd11ce6827e350101b72ep-6Q, -0x1.5088bd1cf023da2d878ac9ebafc5p-4Q, -0x1.2c0d69ece949ee5284dcfb042baap-8Q, 0x1.a4434b89b691509ff6541a080cecp-5Q, -0x1.440e7548329f53e7873db8128a63p-8Q, -0x1.ce3e5912a230366d14a862ea3672p-6Q, 0x1.f61e5ce9a7ff0906541711dfe2e7p-8Q, 0x1.ab9f170d72cc6036a5092b63c08ap-7Q, -0x1.9c50c528bc77817ae0788ffc773ap-8Q, -0x1.371235b499d33e83c0b1b543f6e8p-8Q, 0x1.e9b0e84ddc0468e17e4fa3636bf9p-9Q, 0x1.2e73daaf19dbb24f6ae6d9d95255p-10Q, -0x1.bcb74a39ee49fe08e2b9fd7aeef1p-10Q, -0x1.7274d8ffa9744517f2f1470cebeep-15Q, 0x1.334ca46898dae11da29a57e9f92ap-11Q, -0x1.ef71f401aeeeb5e13dd40efc0a0cp-14Q, -0x1.32337036c1616db93444903d828ep-13Q, 0x1.131ee633363469bb9bebca29a839p-14Q, 0x1.6e4981b862b8b7d5bb86d25cc3eap-16Q, -0x1.536263fe83a124aaa2092f47c711p-16Q, 0x1.ccd17bbbe3d0407ffce581eb4165p-27Q, 0x1.05cc64bbcf95fbb57637394fb838p-18Q, -0x1.e21fa8ce8bf7a7465a57d37cce9ap-21Q, -0x1.b0fcbaac8055d95fcb97dc94d8aap-22Q, 0x1.d137c82c35ed75b3cca32ab07fp-23Q, -0x1.160c0805b95d2f0cf1ffb7605bf2p-31Q, -0x1.838882edd8947aab05cd00305346p-26Q, 0x1.627091a0c660cff16c28fc227cd6p-28Q, 0x1.050b72dfcacebaae0203f358d56p-31Q, -0x1.ba8411e011af62ac1faf9b23aa51p-32Q, 0x1.3380aec6c4cc755d395c84cee933p-34Q, -0x1.31989d5a96be32d359a4b1032025p-38Q}; + } + #endif + } +} + +template +std::array daubechies_wavelet_filter() { + std::array g; + auto h = daubechies_scaling_filter(); + for (size_t i = 0; i < g.size(); i += 2) + { + g[i] = h[g.size() - i - 1]; + g[i+1] = -h[g.size() - i - 2]; + } + return g; +} + +} // namespaces +#endif diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp new file mode 100644 index 000000000..d58e30ed6 --- /dev/null +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -0,0 +1,352 @@ +/* + * Copyright Nick Thompson, 2019 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#ifndef BOOST_MATH_SPECIAL_DAUBECHIES_SCALING_HPP +#define BOOST_MATH_SPECIAL_DAUBECHIES_SCALING_HPP +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace boost::math { + +namespace detail { + +template +std::vector dyadic_grid(size_t j_max) +{ + auto c = boost::math::filters::daubechies_scaling_filter(); + Real scale = boost::math::constants::root_two()*(1 << order); + for (auto & x : c) + { + x *= scale; + } + + auto phik = daubechies_scaling_integer_grid(); + + // Maximum sensible j for 32 bit floats is j_max = 22: + std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); + v.resize(2*p + (2*p-1)*((1<::quiet_NaN()); + v[0] = 0; + v[v.size()-1] = 0; + for (size_t i = 0; i < phik.size(); ++i) { + v[i*(1<<(j_max))] = phik[i]; + } + + for (size_t j = 1; j <= j_max; ++j) + { + size_t k_max = v.size()/(1 << (j_max-j)); + for (size_t k = 1; k < k_max; k += 2) + { + // Where this value will go: + size_t delivery_idx = k*(1 << (j_max-j)); + if (delivery_idx >= v.size()) + { + std::cout << "Delivery index out of range!\n"; + continue; + } + Real term = 0; + for (size_t l = 0; l < c.size(); ++l) { + size_t idx = k*(1 << (j_max - j + 1)) - l*(1 << j_max); + if (idx >= 0 && idx < v.size()) { + term += c[l]*v[idx]; + } + } + if (!isnan(v[delivery_idx])) { + std::cout << "Delivery index already populated!, = " << v[delivery_idx] << "\n"; + std::cout << "would overwrite with " << term << "\n"; + } + v[delivery_idx] = term; + } + } + + + return v; +} + +} + +template +class daubechies_scaling { +public: + daubechies_scaling(int levels = -1) + { + using boost::multiprecision::float128; + if (levels < 0) + { + m_levels = 22; + } + else { + m_levels = levels; + } + + auto f1 = [this] { + auto v = detail::dyadic_grid(this->m_levels); + this->m_v.resize(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + this->m_v[i] = static_cast(v[i]); + } + }; + + auto f2 = [this] { + auto v_prime = detail::dyadic_grid(this->m_levels); + this->m_v_prime.resize(v_prime.size()); + for (size_t i = 0; i < v_prime.size(); ++i) { + this->m_v_prime[i] = static_cast(v_prime[i]); + } + }; + + + auto f3 = [this] { + auto v_dbl_prime = detail::dyadic_grid(this->m_levels); + this->m_v_dbl_prime.resize(v_dbl_prime.size()); + for (size_t i = 0; i < v_dbl_prime.size(); ++i) { + this->m_v_dbl_prime[i] = static_cast(v_dbl_prime[i]); + } + }; + + std::thread t1(f1); + std::thread t2(f2); + std::thread t3(f3); + + t1.join(); + t2.join(); + t3.join(); + + m_inv_spacing = (1 << m_levels); + + m_c = boost::math::filters::daubechies_scaling_filter(); + Real scale = boost::math::constants::root_two(); + for (auto & x : m_c) + { + x *= scale; + } + } + + Real operator()(Real x) const { return this->linear_interpolation(x); } + + std::pair support() const { + return {0, 2*p-1}; + } + + Real constant_interpolation(Real x) const { + if (x <= 0 || x >= 2*p-1) { + return Real(0); + } + using std::floor; + Real y = (1 << m_levels)*x; + Real k = floor(y); + + if (y - k < k + 1 - y) + { + return m_v[static_cast(k)]; + } + return m_v[static_cast(k)+1]; + } + + Real linear_interpolation(Real x) const { + if (x <= 0 || x >= 2*p-1) { + return Real(0); + } + using std::floor; + + Real y = (1<(k); + + Real t = y - k; + return (1-t)*m_v[kk] + t*m_v[kk+1]; + } + + Real single_crank_linear(Real x) const { + if (x <= 0 || x >= 2*p-1) { + return Real(0); + } + using std::floor; + Real y = (1<= 0 && idx < m_v.size()) { + term += m_c[l]*m_v[idx]; + } + } + + if (y - idx1 < idx1 + 1 - y) + { + Real t = 2*(y - idx1); + return (1-t)*m_v[static_cast(idx1)] + t*term; + } + else { + Real t = 2*(idx1 + 1 - y); + return t*term + (1-t)*m_v[static_cast(idx1)+1]; + } + } + + Real single_crank_quadratic(Real x) const { + if (x <= 0 || x >= 2*p-1) { + return Real(0); + } + using std::floor; + Real y = (1<= 0 && idx < m_v.size()) { + term += m_c[l]*m_v[idx]; + } + } + + Real y0 = m_v[static_cast(idx1)]; + Real y1 = term; + Real y2 = m_v[static_cast(idx1)+1]; + + Real a = (y2+y0-2*y1)/2; + Real b = (4*y1-3*y0 - y2)/2; + Real t = 2*(y - idx1); + return a*t*t + b*t + y0; + } + + + Real double_crank_linear(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + + Real first_order_taylor(Real x) const { + if (x <= 0 || x >= 2*p-1) { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1<= 2*p-1) { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1<::quiet_NaN(); + } + + Real single_crank_first_order_taylor(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + Real double_crank_first_order_taylor(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + Real single_crank_second_order_taylor(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + Real double_crank_second_order_taylor(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + Real single_crank_third_order_taylor(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + Real double_crank_third_order_taylor(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + + size_t bytes() const + { + size_t s = sizeof(*this); + s += m_v.size()*sizeof(Real); + return s; + } + + size_t size() const { + return m_v.size(); + } + + Real index_to_abscissa(size_t i) { + return i/m_inv_spacing; + } + + // This is for debugging only; use the .at() + Real operator[](size_t i) const { + return m_v.at(i); + } + + Real prime(size_t i) const { + return m_v_prime.at(i); + } + + Real spacing() const { + return 1/m_inv_spacing; + } + + auto begin() const { + return m_v.begin(); + } + + auto end() const { + return m_v.end(); + } + + auto data() const { + return m_v.data(); + } + +private: + size_t m_levels; + Real m_inv_spacing; + std::array m_c; + std::vector m_v; + std::vector m_v_prime; + std::vector m_v_dbl_prime; +}; + +} +#endif diff --git a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp new file mode 100644 index 000000000..fe3296832 --- /dev/null +++ b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp @@ -0,0 +1,1830 @@ +/* + * Copyright Nick Thompson, 2019 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +// THIS FILE GENERATED BY EXAMPLE/DAUBECHIES_SCALING_INTEGER_GRID.CPP, DO NOT EDIT. +#ifndef BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP +#define BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP +#include +#ifdef BOOST_HAS_FLOAT128 +#include +#endif +namespace boost::math::detail { + +template +constexpr std::array daubechies_scaling_integer_grid() +{ + static_assert(sizeof(Real) <= 16, "Integer grids only computed up to 128 bits of precision."); + static_assert(p <= 15, "Integer grids only implemented up to 15."); + static_assert(p > 1, "Integer grids only implemented for p >= 2."); + if constexpr (p == 2) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.5db3d8p+0f, -0x1.76cf5ep-2f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1p+0f, -0x1p+0f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.5db3d742c2655p+0, -0x1.76cf5d0b09955p-2, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1p+0, -0x1p+0, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xa.ed9eba16132a9cfp-3L, -0xb.b67ae8584caa73bp-5L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0x8p-3L, -0x8p-3L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.5db3d742c265539d92ba16b83c5dp+0Q, -0x1.76cf5d0b09954e764ae85ae0f172p-2Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.0000000000000000000000000003p+0Q, -0x1.0000000000000000000000000001p+0Q, -0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 3) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.494d42p+0f, -0x1.8b18d8p-2f, 0x1.863744p-4f, 0x1.158088p-8f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.a3719cp+0f, -0x1.1dcb06p+1f, 0x1.19ae7cp-1f, 0x1.69a5e8p-5f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.cef9ccp-1f, -0x1.b676b2p+0f, 0x1.6ced64p-1f, 0x1.8831a2p-4f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.494d414ee19a1p+0, -0x1.8b18d8251ec88p-2, 0x1.863743274d78dp-4, 0x1.158087f14084dp-8, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.a3719cd426dbdp+0, -0x1.1dcb0537f529p+1, 0x1.19ae7cc6c0212p-1, 0x1.69a5e70c6cb47p-5, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.cef9cbb90bf24p-1, -0x1.b676b19591eb6p+0, 0x1.6ced632b23d6cp-1, 0x1.8831a237a06dfp-4, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xa.4a6a0a770cd07e1p-3L, -0xc.58c6c128f64431dp-5L, 0xc.31ba193a6bc67f2p-7L, 0x8.ac043f8a042675ap-11L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xd.1b8ce6a136deae1p-3L, -0x8.ee5829bfa948208p-2L, 0x8.cd73e6360108efbp-4L, 0xb.4d2f386365a363ap-8L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xe.77ce5dc85f9214cp-4L, -0xd.b3b58cac8f5b1f2p-3L, 0xb.676b19591eb63e3p-4L, 0xc.418d11bd036f5a2p-7L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.494d414ee19a0fc1701f9345a28ap+0Q, -0x1.8b18d8251ec886399fc357ab26c5p-2Q, 0x1.863743274d78cfe42daf1d262e3fp-4Q, 0x1.158087f14084ceb4f650d2c442ep-8Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.a3719cd426dbd5c2283e8b6cd967p+0Q, -0x1.1dcb0537f52904105ab1d13c6abp+1Q, 0x1.19ae7cc6c0211df5e41745563cadp-1Q, 0x1.69a5e70c6cb46c73632e8c1bb2cp-5Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.cef9cbb90bf242979b344cdd1e16p-1Q, -0x1.b676b19591eb63e368ce734bad21p+0Q, 0x1.6ced632b23d6c7c6d19ce6975a1dp-1Q, 0x1.8831a237a06deb43265d99170ff8p-4Q, -0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 4) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.01d5e4p+0f, -0x1.15313cp-5f, 0x1.447d2ap-5f, -0x1.817e96p-7f, -0x1.3a0992p-10f, 0x1.3be7b6p-16f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.c6aca8p+0f, -0x1.648654p+1f, 0x1.314492p+0f, -0x1.0d0e14p-3f, -0x1.b6da96p-5f, 0x1.d0194cp-10f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.cf8cc6p+0f, -0x1.0eaaap+2f, 0x1.66e46cp+1f, -0x1.26d9a4p-3f, -0x1.0ae7c2p-2f, 0x1.3a82a2p-6f, 0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.bb2f44p-1f, -0x1.2d48b8p+1f, 0x1.c2597p+0f, 0x1.83800cp-3f, -0x1.233972p-1f, 0x1.bcd16ep-4f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.01d5e443d831dp+0, -0x1.15313c61b3acbp-5, 0x1.447d293e37265p-5, -0x1.817e96e0425edp-7, -0x1.3a0992ca51117p-10, 0x1.3be7b6cb630ap-16, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.c6aca7b3a61bp+0, -0x1.6486543c8460bp+1, 0x1.314491c6de2d3p+0, -0x1.0d0e14f1f7dc6p-3, -0x1.b6da96c702378p-5, 0x1.d0194bee1a174p-10, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.cf8cc69cc42a4p+0, -0x1.0eaaa0c1e1c35p+2, 0x1.66e46b718b501p+1, -0x1.26d9a4de19b74p-3, -0x1.0ae7c18dd841ep-2, 0x1.3a82a1b96295bp-6, 0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.bb2f43bc30b81p-1, -0x1.2d48b852668c6p+1, 0x1.c2596fe640caep+0, 0x1.83800be8c4de9p-3, -0x1.233972e072028p-1, 0x1.bcd16d3945752p-4, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0x8.0eaf221ec18e913p-3L, -0x8.a989e30d9d65a3ap-8L, 0xa.23e949f1b93272cp-8L, -0xc.0bf4b70212f684ap-10L, -0x9.d04c9652888ba27p-13L, 0x9.df3db65b184ff7ep-19L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xe.35653d9d30d7c1cp-3L, -0xb.2432a1e4230589p-2L, 0x9.8a248e36f1695bdp-3L, -0x8.6870a78fbee2d2ap-6L, -0xd.b6d4b63811bbfa2p-8L, 0xe.80ca5f70d0ba167p-13L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xe.7c6634e62152087p-3L, -0x8.7555060f0e1aa31p-1L, 0xb.37235b8c5a805d9p-2L, -0x9.36cd26f0cdb9e9ap-6L, -0x8.573e0c6ec20ec34p-5L, 0x9.d4150dcb14ada24p-9L, 0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xd.d97a1de185c06cap-4L, -0x9.6a45c2933463235p-2L, 0xe.12cb7f320656fb6p-3L, 0xc.1c005f4626f4b41p-6L, -0x9.19cb97039014287p-4L, 0xd.e68b69ca2ba92a2p-7L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.01d5e443d831d2252369827793d4p+0Q, -0x1.15313c61b3acb474231dab07815dp-5Q, 0x1.447d293e37264e578b865081224p-5Q, -0x1.817e96e0425ed094fa1a3a5cf10fp-7Q, -0x1.3a0992ca5111744ed1b4ed1a6607p-10Q, 0x1.3be7b6cb6309fefbda0c9fa167f7p-16Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.c6aca7b3a61af838bb3208359ff3p+0Q, -0x1.6486543c8460b11f1a4b4a357fa3p+1Q, 0x1.314491c6de2d2b798153746ca802p+0Q, -0x1.0d0e14f1f7dc5a54f21ce3ff4227p-3Q, -0x1.b6da96c702377f43a25f74c9465cp-5Q, 0x1.d0194bee1a1742cd9ebfbba7180ap-10Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.cf8cc69cc42a410e51b272a7a397p+0Q, -0x1.0eaaa0c1e1c354610b35262e906ap+2Q, 0x1.66e46b718b500bb2be3ec05c7ac4p+1Q, -0x1.26d9a4de19b73d34cbab42cdd8b6p-3Q, -0x1.0ae7c18dd841d8689ede2f52573fp-2Q, 0x1.3a82a1b96295b447f46661fe5c5ap-6Q, 0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.bb2f43bc30b80d947c8a537a21d9p-1Q, -0x1.2d48b852668c646a630392a2b72ap+1Q, 0x1.c2596fe640cadf6ca968f3b31114p+0Q, 0x1.83800be8c4de9681c9e31925cc1cp-3Q, -0x1.233972e07202850d1be1b9fc8353p-1Q, 0x1.bcd16d394575254330d81aed475ep-4Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 5) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.646bf2p-1f, 0x1.cbd5c2p-2f, -0x1.754196p-3f, 0x1.3100cap-5f, 0x1.8dd2bep-10f, -0x1.c4ab56p-10f, 0x1.3b27d2p-15f, 0x1.75f2b2p-23f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.8eee7ap+0f, -0x1.37cf44p+1f, 0x1.3c6448p+0f, -0x1.784198p-2f, -0x1.64d96ap-6f, 0x1.08fcfcp-5f, -0x1.5e1ffp-10f, -0x1.984da2p-17f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.22c5ccp+1f, -0x1.83ccap+2f, 0x1.524518p+2f, -0x1.2d10dcp+0f, -0x1.549f4cp-1f, 0x1.882acap-2f, -0x1.3d5d0ep-5f, -0x1.65cdcp-11f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.9877acp+1f, -0x1.48c27ap+3f, 0x1.f7fdf6p+2f, 0x1.0b1eap+3f, -0x1.15aaf4p+4f, 0x1.4a4504p+3f, -0x1.050134p+1f, -0x1.13ee46p-4f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.13b9e8p-1f, -0x1.e1e5e6p+0f, 0x1.29ab2ep+1f, -0x1.3d6cc6p+0f, 0x1.0227f8p-1f, -0x1.9ada2ap-2f, 0x1.2c68dap-3f, 0x1.1a66dcp-7f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.646bf1ec64a31p-1, 0x1.cbd5c1bab5148p-2, -0x1.754196833f707p-3, 0x1.3100cab7c3f5fp-5, 0x1.8dd2be8c89c52p-10, -0x1.c4ab558ff2dcfp-10, 0x1.3b27d2d798eedp-15, 0x1.75f2b16626e98p-23, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.8eee7927087b2p+0, -0x1.37cf445237f1bp+1, 0x1.3c64475174b4ap+0, -0x1.7841978e876dbp-2, -0x1.64d969ffaac15p-6, 0x1.08fcfb4783fa8p-5, -0x1.5e1fef6185af9p-10, -0x1.984da10897439p-17, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.22c5cb8d3f23bp+1, -0x1.83cca07a3ead8p+2, 0x1.5245172406b78p+2, -0x1.2d10dba463fc2p+0, -0x1.549f4c5e04f3ap-1, 0x1.882ac9029ddc7p-2, -0x1.3d5d0eda32d8bp-5, -0x1.65cdc06ecf654p-11, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.9877ac926fb3cp+1, -0x1.48c27a70b93cep+3, 0x1.f7fdf60845cfcp+2, 0x1.0b1ea0ee5f9edp+3, -0x1.15aaf38ada16ap+4, 0x1.4a45041b91e1cp+3, -0x1.05013480812dfp+1, -0x1.13ee46114fd85p-4, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.13b9e8c4fdc5p-1, -0x1.e1e5e5cfd0a8p+0, 0x1.29ab2ec864d45p+1, -0x1.3d6cc61e0f6a4p+0, 0x1.0227f72aa277ep-1, -0x1.9ada2a6a9a218p-2, 0x1.2c68da3893cd6p-3, 0x1.1a66dc6d2cfbfp-7, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xb.235f8f632518463p-4L, 0xe.5eae0dd5a8a4298p-5L, -0xb.aa0cb419fb8363cp-6L, 0x9.880655be1fafa7dp-8L, 0xc.6e95f4644e28f3ep-13L, -0xe.255aac7f96e75fp-13L, 0x9.d93e96bcc776751p-18L, 0xb.af958b31374c3acp-26L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xc.7773c93843d9207p-3L, -0x9.be7a2291bf8db95p-2L, 0x9.e3223a8ba5a5065p-3L, -0xb.c20cbc743b6db2dp-5L, -0xb.26cb4ffd560a9d3p-9L, 0x8.47e7da3c1fd3e92p-8L, -0xa.f0ff7b0c2d7cb32p-13L, -0xc.c26d0844ba1cb28p-20L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0x9.162e5c69f91da28p-2L, -0xc.1e6503d1f56bc54p-1L, 0xa.9228b92035bbe8fp-1L, -0x9.6886dd231fe0c2p-3L, -0xa.a4fa62f0279cc8ap-4L, 0xc.41564814eee395ap-5L, -0x9.eae876d196c5b0fp-8L, -0xb.2e6e03767b2a39ap-14L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xc.c3bd64937d9deedp-2L, -0xa.4613d385c9e6eeep+0L, 0xf.bfefb0422e7dd11p-1L, 0x8.58f50772fcf6838p+0L, -0x8.ad579c56d0b531bp+1L, 0xa.522820dc8f0dd92p+0L, -0x8.2809a404096fa64p-2L, -0x8.9f72308a7ec28cep-7L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0x8.9dcf4627ee27fcfp-4L, -0xf.0f2f2e7e85400fbp-3L, 0x9.4d59764326a2533p-2L, -0x9.eb6630f07b521f1p-3L, 0x8.113fb95513bed76p-4L, -0xc.d6d15354d10bf47p-5L, 0x9.6346d1c49e6ae26p-6L, 0x8.d336e36967df815p-10L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.646bf1ec64a308c5df07d89c8e9ap-1Q, 0x1.cbd5c1bab5148530b0e77ecbff8fp-2Q, -0x1.754196833f706c7834855fa5579ap-3Q, 0x1.3100cab7c3f5f4fa75b80a67ed4ap-5Q, 0x1.8dd2be8c89c51e7b28b04315345ap-10Q, -0x1.c4ab558ff2dcebdfdc6142054ddfp-10Q, 0x1.3b27d2d798eecea1adaf099c04dp-15Q, 0x1.75f2b16626e9875840e692dcf345p-23Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.8eee7927087b240ec5ade1ac8194p+0Q, -0x1.37cf445237f1b72a99ae1be26162p+1Q, 0x1.3c64475174b4a0c9b8a3ee3dfc17p+0Q, -0x1.7841978e876db6599aa4ad109929p-2Q, -0x1.64d969ffaac153a6af06dc9cfb6cp-6Q, 0x1.08fcfb4783fa7d234eba36053963p-5Q, -0x1.5e1fef6185af966378a125175a7ap-10Q, -0x1.984da1089743964ff5ac0959c3cp-17Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.22c5cb8d3f23b44faf592c365fa4p+1Q, -0x1.83cca07a3ead78a73330d7cf1ab1p+2Q, 0x1.5245172406b77d1d4fdfd2192e03p+2Q, -0x1.2d10dba463fc1840fd45963c56f2p+0Q, -0x1.549f4c5e04f3991456e630b15647p-1Q, 0x1.882ac9029ddc72b4c74d388daa79p-2Q, -0x1.3d5d0eda32d8b61e7ff27a395996p-5Q, -0x1.65cdc06ecf6547344a6a8d5280b2p-11Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.9877ac926fb3bdd992f46d8483bfp+1Q, -0x1.48c27a70b93cdddc043571f4721ap+3Q, 0x1.f7fdf60845cfba22e0c6bd0437bdp+2Q, 0x1.0b1ea0ee5f9ed06f5107d79a0311p+3Q, -0x1.15aaf38ada16a6358cd77355dd37p+4Q, 0x1.4a45041b91e1bb24fe9a63ad0148p+3Q, -0x1.05013480812df4c7388d78da948bp+1Q, -0x1.13ee46114fd8519c5d7f29b7c3fap-4Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.13b9e8c4fdc4ff9d9c7b93fda525p-1Q, -0x1.e1e5e5cfd0a801f531eaef0fe568p+0Q, 0x1.29ab2ec864d44a65c8f8abfdaaf8p+1Q, -0x1.3d6cc61e0f6a43e21f6553d106aap+0Q, 0x1.0227f72aa277daecfc1fddb3c489p-1Q, -0x1.9ada2a6a9a217e8dbe2b55c6b9fep-2Q, 0x1.2c68da3893cd5c4c84ac50c60e4ep-3Q, 0x1.1a66dc6d2cfbf029033eb2e703a5p-7Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 6) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.bf65e8p-2f, 0x1.aa2466p-1f, -0x1.89fd1p-2f, 0x1.24737ep-3f, -0x1.a1e9c8p-6f, -0x1.cec09ap-9f, 0x1.cd4fecp-10f, 0x1.05937cp-16f, -0x1.5a00dp-19f, 0x1.0fbc42p-28f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.2faeacp+0f, -0x1.801498p+0f, 0x1.050336p-1f, -0x1.0ffe44p-2f, 0x1.0b11b2p-4f, 0x1.721a1ep-7f, -0x1.af662cp-8f, -0x1.a69b86p-15f, 0x1.45b126p-16f, -0x1.018922p-24f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.1e62dep+1f, -0x1.980b4p+2f, 0x1.a34deap+2f, -0x1.45eb5ep+1f, -0x1.0310f6p-1f, 0x1.da7724p-1f, -0x1.4137dp-2f, 0x1.7eb866p-6f, 0x1.4ebb22p-9f, -0x1.0c5bep-16f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.422fap-2f, -0x1.255a76p+0f, 0x1.484b54p+3f, -0x1.3c98d8p+5f, 0x1.10b7fap+6f, -0x1.d54dd2p+5f, 0x1.804948p+4f, -0x1.77f884p+1f, -0x1.d3687ap-2f, 0x1.816ef8p-8f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.8faefp+0f, -0x1.93816ep+2f, 0x1.33788p+3f, -0x1.c3f2cep+2f, 0x1.c7801ep+1f, -0x1.46377ep+1f, 0x1.77a6f6p+0f, -0x1.c41888p-3f, -0x1.f8b0a6p-5f, 0x1.b96594p-10f, -0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.cb9194p-2f, -0x1.e6b982p+0f, 0x1.7b2e48p+1f, -0x1.fa645ep+0f, 0x1.29da94p-1f, -0x1.8461e6p-2f, 0x1.67c138p-2f, -0x1.c1a09cp-5f, -0x1.0c11f4p-5f, 0x1.0ac90ap-9f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.bf65e79817d28p-2, 0x1.aa2466d50e4a5p-1, -0x1.89fd104c6ff15p-2, 0x1.24737e6f8ebf1p-3, -0x1.a1e9c758a51a1p-6, -0x1.cec09a7ccf05bp-9, 0x1.cd4feb82d2494p-10, 0x1.05937b8388af2p-16, -0x1.5a00cfad970a8p-19, 0x1.0fbc42c672231p-28, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.2faeacbb8e754p+0, -0x1.8014975295b21p+0, 0x1.05033635f5402p-1, -0x1.0ffe44cc8bc7fp-2, 0x1.0b11b28c7d67bp-4, 0x1.721a1d14b8323p-7, -0x1.af662c52c3b7bp-8, -0x1.a69b860b67a33p-15, 0x1.45b12643cf82p-16, -0x1.01892163486cbp-24, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.1e62ddd540b06p+1, -0x1.980b3fe2011f8p+2, 0x1.a34dea8cd59b4p+2, -0x1.45eb5e5e7e3cap+1, -0x1.0310f5a5d86dep-1, 0x1.da7724c65802cp-1, -0x1.4137cfe85b9e6p-2, 0x1.7eb866ddca6bap-6, 0x1.4ebb22d1ac076p-9, -0x1.0c5bdfb916a45p-16, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.422f9f5227e8p-2, -0x1.255a76df553ccp+0, 0x1.484b537c56dedp+3, -0x1.3c98d8a74cd77p+5, 0x1.10b7f9c607064p+6, -0x1.d54dd14cd31afp+5, 0x1.8049478b6740dp+4, -0x1.77f8847acd28bp+1, -0x1.d3687a3bc3933p-2, 0x1.816ef86832622p-8, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.8faeef62b3a8p+0, -0x1.93816e52ba1c8p+2, 0x1.337880b3a9a71p+3, -0x1.c3f2cd3d53133p+2, 0x1.c7801db767804p+1, -0x1.46377db27f625p+1, 0x1.77a6f5e8321cdp+0, -0x1.c4188733407f2p-3, -0x1.f8b0a606c7f79p-5, 0x1.b965933f534b2p-10, -0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.cb91942378a6bp-2, -0x1.e6b982120ca32p+0, 0x1.7b2e4714b2703p+1, -0x1.fa645ee8ca231p+0, 0x1.29da9349c32a2p-1, -0x1.8461e6acf9cb3p-2, 0x1.67c137342024dp-2, -0x1.c1a09b7773a5ap-5, -0x1.0c11f4efd5c0bp-5, 0x1.0ac90a45b7a47p-9, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xd.fb2f3cc0be93e54p-5L, 0xd.512336a872527e6p-4L, -0xc.4fe882637f8a4ep-5L, 0x9.239bf37c75f8764p-6L, -0xd.0f4e3ac528d0419p-9L, -0xe.7604d3e6782db77p-12L, 0xe.6a7f5c169249c7ap-13L, 0x8.2c9bdc1c4579256p-19L, -0xa.d0067d6cb853e5ep-22L, 0x8.7de216339118a43p-31L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0x9.7d7565dc73a9dap-3L, -0xc.00a4ba94ad909b7p-3L, 0x8.2819b1afaa00e4ep-4L, -0x8.7ff226645e3f525p-5L, 0x8.588d9463eb3d6b2p-7L, 0xb.90d0e8a5c191592p-10L, -0xd.7b3162961dbd72bp-11L, -0xd.34dc305b3d198bdp-18L, 0xa.2d89321e7c101dfp-19L, -0x8.0c490b1a4365a0ep-27L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0x8.f316eeaa0582d86p-2L, -0xc.c059ff1008fbde4p-1L, 0xd.1a6f5466acda0c4p-1L, -0xa.2f5af2f3f1e4f4dp-2L, -0x8.1887ad2ec36f306p-4L, 0xe.d3b92632c015e4bp-4L, -0xa.09be7f42dcf2d82p-5L, 0xb.f5c336ee535d213p-9L, 0xa.75d9168d603b071p-12L, -0x8.62defdc8b5224edp-19L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xa.117cfa913f3fd65p-5L, -0x9.2ad3b6faa9e5fc2p-3L, 0xa.425a9be2b6f651fp+0L, -0x9.e4c6c53a66bb9b6p+2L, 0x8.85bfce3038320c3p+3L, -0xe.aa6e8a6698d7b2fp+2L, 0xc.024a3c5b3a06863p+1L, -0xb.bfc423d6694569bp-2L, -0xe.9b43d1de1c99addp-5L, 0xc.0b77c3419310f5ep-11L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xc.7d777b159d3fe93p-3L, -0xc.9c0b7295d0e4242p-1L, 0x9.9bc4059d4d38bf3p+0L, -0xe.1f9669ea9899554p-1L, 0xe.3c00edbb3c02374p-2L, -0xa.31bbed93fb124adp-2L, 0xb.bd37af4190e69cdp-3L, -0xe.20c4399a03f920dp-6L, -0xf.c58530363fbca91p-8L, 0xd.cb2c99fa9a58d79p-13L, -0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xe.5c8ca11bc53594fp-5L, -0xf.35cc10906518e34p-3L, 0xb.d97238a59381a17p-2L, -0xf.d322f7465118802p-3L, 0x9.4ed49a4e1950cdfp-4L, -0xc.230f3567ce5957dp-5L, 0xb.3e09b9a10126b64p-5L, -0xe.0d04dbbb9d2ce8dp-8L, -0x8.608fa77eae05beap-8L, 0x8.5648522dbd23badp-12L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.bf65e79817d27ca7c78972c65f34p-2Q, 0x1.aa2466d50e4a4fcbbebe54f94c37p-1Q, -0x1.89fd104c6ff149bf7514a7ddf379p-2Q, 0x1.24737e6f8ebf0ec8bb9fcc85bb6cp-3Q, -0x1.a1e9c758a51a08321aa63e9af1d2p-6Q, -0x1.cec09a7ccf05b6ee1ea8f3c17f38p-9Q, 0x1.cd4feb82d24938f30e41e1af2e9p-10Q, 0x1.05937b8388af24ac43ec83967a3ap-16Q, -0x1.5a00cfad970a7cbc309138fd3f9dp-19Q, 0x1.0fbc42c672231485a0bcbfe7e33cp-28Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.2faeacbb8e753b40eb856e00f52fp+0Q, -0x1.8014975295b2136d5a1adb45438cp+0Q, 0x1.05033635f5401c9b60636a325269p-1Q, -0x1.0ffe44cc8bc7ea4a6ce4734d8d3ap-2Q, 0x1.0b11b28c7d67ad63229fbc3aa7e2p-4Q, 0x1.721a1d14b8322b2431432e8b8011p-7Q, -0x1.af662c52c3b7ae55063672df3c81p-8Q, -0x1.a69b860b67a33179a8c7a5f6b347p-15Q, 0x1.45b12643cf8203bdf796367d51ecp-16Q, -0x1.01892163486cb41cb64453f7616bp-24Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.1e62ddd540b05b0cc5ce5870089ep+1Q, -0x1.980b3fe2011f7bc878be7d3998f1p+2Q, 0x1.a34dea8cd59b4187717c6efb0807p+2Q, -0x1.45eb5e5e7e3c9e9ae26ca4aa21b4p+1Q, -0x1.0310f5a5d86de60ba877dea68891p-1Q, 0x1.da7724c65802bc95482213f98417p-1Q, -0x1.4137cfe85b9e5b04e10239758ca5p-2Q, 0x1.7eb866ddca6ba425f9e4eb854dbfp-6Q, 0x1.4ebb22d1ac0760e1461881059b61p-9Q, -0x1.0c5bdfb916a449da5acc3ccfdf5cp-16Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.422f9f5227e7facaa94dd7e1c4ccp-2Q, -0x1.255a76df553cbf84e8a0b06861f6p+0Q, 0x1.484b537c56deca3daefc656e764dp+3Q, -0x1.3c98d8a74cd7736b60af4e5f5a22p+5Q, 0x1.10b7f9c607064185ab2dfc57477p+6Q, -0x1.d54dd14cd31af65e5343fc85bc89p+5Q, 0x1.8049478b6740d0c6b0100478b786p+4Q, -0x1.77f8847acd28ad3549099ae0cd55p+1Q, -0x1.d3687a3bc39335bac7f281e5e3cfp-2Q, 0x1.816ef86832621ebc63e47cd17f95p-8Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.8faeef62b3a7fd26eb98dd7f9293p+0Q, -0x1.93816e52ba1c8483ff81ea3e2cbfp+2Q, 0x1.337880b3a9a717e67b9cd7fec3d9p+3Q, -0x1.c3f2cd3d53132aa78f87aee06f97p+2Q, 0x1.c7801db7678046e8ebdb22cf5b9fp+1Q, -0x1.46377db27f624959a2b9b7777544p+1Q, 0x1.77a6f5e8321cd39a930db3902d99p+0Q, -0x1.c4188733407f241acae534ed07ffp-3Q, -0x1.f8b0a606c7f795229d5947447259p-5Q, 0x1.b965933f534b1af276b67227f5edp-10Q, -0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.cb91942378a6b29e2dd51c51c663p-2Q, -0x1.e6b982120ca31c68b89329c09f76p+0Q, 0x1.7b2e4714b270342ea6ba89978b55p+1Q, -0x1.fa645ee8ca231003817fbe32abe9p+0Q, 0x1.29da9349c32a19bed5b810cc5091p-1Q, -0x1.8461e6acf9cb2af90934d76c7fc3p-2Q, 0x1.67c137342024d6c8052e3d87701ap-2Q, -0x1.c1a09b7773a59d1a65f356774442p-5Q, -0x1.0c11f4efd5c0b7d44ac1c3a07541p-5Q, 0x1.0ac90a45b7a47759a7a92738ff23p-9Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 7) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.033292p-2f, 0x1.027f6cp+0f, -0x1.919d92p-2f, 0x1.7a0caap-3f, -0x1.1142c4p-4f, 0x1.50e2d6p-7f, 0x1.d0243ap-10f, -0x1.1d4c6cp-11f, -0x1.17d0b4p-14f, 0x1.310ffep-19f, -0x1.509d12p-25f, -0x1.57f8e6p-36f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.9ec434p-1f, -0x1.ca0692p-2f, -0x1.2d988ap-1f, 0x1.145888p-2f, -0x1.4ab3dp-6f, -0x1.4e8938p-5f, 0x1.5cb5dep-6f, -0x1.051eecp-8f, 0x1.0efaecp-14f, 0x1.6a87a6p-15f, -0x1.4e8b2ap-23f, -0x1.54fd9p-33f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.e0eaccp+0f, -0x1.5362d8p+2f, 0x1.70aa18p+2f, -0x1.86bc52p+1f, 0x1.570932p-2f, 0x1.9d599ap-1f, -0x1.18b244p-1f, 0x1.fe16d2p-4f, 0x1.eb4ccap-12f, -0x1.4e09dp-9f, 0x1.c4a78ap-16f, 0x1.cb0cccp-25f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.4ca934p-1f, -0x1.492e7p+1f, 0x1.171de6p+4f, -0x1.1e704ep+6f, 0x1.23bcc4p+7f, -0x1.415156p+7f, 0x1.7ff792p+6f, -0x1.a43b42p+4f, 0x1.833e7p-4f, 0x1.13b5aap+0f, -0x1.6365bp-6f, -0x1.64d198p-14f, 0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.525f0cp+1f, -0x1.7eda4cp+3f, 0x1.578438p+4f, -0x1.40c582p+4f, 0x1.9815ccp+3f, -0x1.22247ap+3f, 0x1.8c2cccp+2f, -0x1.ffd4fcp+0f, -0x1.3be428p-3f, 0x1.7c490ep-3f, -0x1.23f976p-7f, -0x1.1f66b2p-14f, -0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.80a316p+0f, -0x1.ce7e68p+2f, 0x1.ac8b3cp+3f, -0x1.74c81ep+3f, 0x1.4010d2p+2f, -0x1.34da8p+1f, 0x1.2d09cap+1f, -0x1.97de12p-1f, -0x1.9df5b4p-2f, 0x1.16c54ap-2f, -0x1.e323c6p-6f, -0x1.c9a574p-12f, 0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.a096c8p-3f, -0x1.01d8c8p+0f, 0x1.099a08p+1f, -0x1.40ce38p+1f, 0x1.2a5764p+1f, -0x1.e6f03p+0f, 0x1.3544c2p+0f, -0x1.6af582p-1f, 0x1.256afep-1f, -0x1.656934p-2f, 0x1.4b884p-4f, 0x1.24061ep-9f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.033291a6c76d7p-2, 0x1.027f6bf7952cep+0, -0x1.919d92c6034c4p-2, 0x1.7a0ca906acc48p-3, -0x1.1142c3515ec43p-4, 0x1.50e2d6421ee26p-7, 0x1.d0243aab613f8p-10, -0x1.1d4c6c249bf0fp-11, -0x1.17d0b3032ba5cp-14, 0x1.310ffd8b56401p-19, -0x1.509d126dab99dp-25, -0x1.57f8e69552537p-36, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.9ec434341eaeep-1, -0x1.ca0692ca7743ap-2, -0x1.2d988a986b0dfp-1, 0x1.145887eacb11p-2, -0x1.4ab3cf0bae2a6p-6, -0x1.4e8938899ee37p-5, 0x1.5cb5de436bfaep-6, -0x1.051eebbefaf7cp-8, 0x1.0efaec65edbccp-14, 0x1.6a87a6b931edcp-15, -0x1.4e8b2a27fe065p-23, -0x1.54fd8f0625f12p-33, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.e0eacca617ebcp+0, -0x1.5362d7fe36c57p+2, 0x1.70aa17b7adc0ep+2, -0x1.86bc52429f3a4p+1, 0x1.5709310e8d1f6p-2, 0x1.9d599937b31fbp-1, -0x1.18b244e50df67p-1, 0x1.fe16d1a3cfb3ep-4, 0x1.eb4cc917dd1cdp-12, -0x1.4e09cf12f0cddp-9, 0x1.c4a78957d2798p-16, 0x1.cb0ccbca08e79p-25, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.4ca9343b32368p-1, -0x1.492e70f2635c1p+1, 0x1.171de5ca88cecp+4, -0x1.1e704d84a1075p+6, 0x1.23bcc34d6a52ap+7, -0x1.415156a34428ap+7, 0x1.7ff7929036dddp+6, -0x1.a43b4147c122cp+4, 0x1.833e6f5afaca5p-4, 0x1.13b5aaaf6c71dp+0, -0x1.6365af2495a87p-6, -0x1.64d19861a8338p-14, 0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.525f0cb11c272p+1, -0x1.7eda4b6a23329p+3, 0x1.578437542fe4fp+4, -0x1.40c582473fa8dp+4, 0x1.9815cb7223c1p+3, -0x1.222479cd96eeap+3, 0x1.8c2cccc6ee34dp+2, -0x1.ffd4fb5b3918p+0, -0x1.3be427404fe7dp-3, 0x1.7c490d447fad3p-3, -0x1.23f9756392d0fp-7, -0x1.1f66b1e781529p-14, -0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.80a316d21a0efp+0, -0x1.ce7e682714367p+2, 0x1.ac8b3ccd718c4p+3, -0x1.74c81d1a27df6p+3, 0x1.4010d1eedca9ap+2, -0x1.34da807d2aaedp+1, 0x1.2d09c9846b582p+1, -0x1.97de12ea03ca1p-1, -0x1.9df5b4fe2e272p-2, 0x1.16c54a229aae1p-2, -0x1.e323c5b92bd16p-6, -0x1.c9a573f22c19bp-12, 0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.a096c8f7fc8abp-3, -0x1.01d8c748e11fap+0, 0x1.099a073a7c7b4p+1, -0x1.40ce386ca776ep+1, 0x1.2a57634989c52p+1, -0x1.e6f030cb23fcp+0, 0x1.3544c2755b1d8p+0, -0x1.6af581a622d41p-1, 0x1.256afda077268p-1, -0x1.6569331439298p-2, 0x1.4b88409bdd117p-4, 0x1.24061e2653bdbp-9, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0x8.19948d363b6b511p-5L, 0x8.13fb5fbca966de8p-3L, -0xc.8cec96301a62254p-5L, 0xb.d0654835662420dp-6L, -0x8.8a161a8af621982p-7L, 0xa.8716b210f7132a1p-10L, 0xe.8121d55b09fc1bcp-13L, -0x8.ea636124df87704p-14L, -0x8.be8598195d2e2f7p-17L, 0x9.887fec5ab2008edp-22L, -0xa.84e8936d5cce758p-28L, -0xa.bfc734aa929b8c7p-39L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xc.f621a1a0f576c66p-4L, -0xe.50349653ba1cf48p-5L, -0x9.6cc454c3586f53bp-4L, 0x8.a2c43f565887ceap-5L, -0xa.559e785d7152dc2p-9L, -0xa.7449c44cf71b8f2p-8L, 0xa.e5aef21b5fd6dcfp-9L, -0x8.28f75df7d7bdeb9p-11L, 0x8.77d7632f6de608ep-17L, 0xb.543d35c98f6e2d6p-18L, -0xa.7459513ff03276p-26L, -0xa.a7ec78312f88c67p-36L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xf.07566530bf5dc3p-3L, -0xa.9b16bff1b62b5b5p-1L, 0xb.8550bdbd6e073adp-1L, -0xc.35e29214f9d1fbdp-2L, 0xa.b849887468fb1bp-5L, 0xc.eaccc9bd98fd7eap-4L, -0x8.c59227286fb3ad2p-4L, 0xf.f0b68d1e7d9f3f6p-7L, 0xf.5a6648bee8e6ab7p-15L, -0xa.704e7897866e7ecp-12L, 0xe.253c4abe93cc026p-19L, 0xe.58665e50473cb0fp-28L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xa.6549a1d991b412ap-4L, -0xa.497387931ae0b61p-2L, 0x8.b8ef2e544676158p+1L, -0x8.f3826c25083a83ap+3L, 0x9.1de61a6b5294d86p+4L, -0xa.0a8ab51a2145353p+4L, 0xb.ffbc9481b6eebc6p+3L, -0xd.21da0a3e0916379p+1L, 0xc.19f37ad7d65262bp-7L, 0x8.9dad557b638eaddp-3L, -0xb.1b2d7924ad4363p-9L, -0xb.268cc30d419bc95p-17L, 0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xa.92f86588e139024p-2L, -0xb.f6d25b5119947a7p+0L, 0xa.bc21baa17f27afep+1L, -0xa.062c1239fd4649cp+1L, 0xc.c0ae5b911e082dep+0L, -0x9.1123ce6cb774e8cp+0L, 0xc.6166663771a6508p-1L, -0xf.fea7dad9c8c0222p-3L, -0x9.df213a027f3e892p-6L, 0xb.e2486a23fd69714p-6L, -0x9.1fcbab1c968774dp-10L, -0x8.fb358f3c0a94afap-17L, -0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xc.0518b690d0776a4p-3L, -0xe.73f34138a1b3bfep-1L, 0xd.6459e66b8c620fp+0L, -0xb.a640e8d13efae1ap+0L, 0xa.00868f76e54ce56p-1L, -0x9.a6d403e95576488p-2L, 0x9.684e4c235ac0d81p-2L, -0xc.bef097501e50849p-4L, -0xc.efada7f17138d13p-5L, 0x8.b62a5114d570977p-5L, -0xf.191e2dc95e8b372p-9L, -0xe.4d2b9f9160cd482p-15L, 0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xd.04b647bfe4558acp-6L, -0x8.0ec63a4708fd39bp-3L, 0x8.4cd039d3e3da0c5p-2L, -0xa.0671c3653bb7036p-2L, 0x9.52bb1a4c4e28fdbp-2L, -0xf.378186591fdfef3p-3L, 0x9.aa2613aad8ec175p-3L, -0xb.57ac0d3116a0b56p-4L, 0x9.2b57ed03b933f03p-4L, -0xb.2b4998a1c94bea3p-5L, 0xa.5c4204dee88b95dp-7L, 0x9.2030f1329ded9e3p-12L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.033291a6c76d6a2177301a6491ep-2Q, 0x1.027f6bf7952cdbcf397ade5b83a2p+0Q, -0x1.919d92c6034c44a7ed45a5787141p-2Q, 0x1.7a0ca906acc4841a1191b023a48bp-3Q, -0x1.1142c3515ec433047c393c69963p-4Q, 0x1.50e2d6421ee2654230b30972367cp-7Q, 0x1.d0243aab613f83777184da54a816p-10Q, -0x1.1d4c6c249bf0ee08cde9105ae0e7p-11Q, -0x1.17d0b3032ba5c5edbe3115298754p-14Q, 0x1.310ffd8b564011dafec30497e54dp-19Q, -0x1.509d126dab99ceafee21c5b15f2dp-25Q, -0x1.57f8e6955253718d03dd42dcc05dp-36Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.9ec434341eaed8ccc6e8d7244a2p-1Q, -0x1.ca0692ca77439e8f752ca148c129p-2Q, -0x1.2d988a986b0dea756341b6b8b7c1p-1Q, 0x1.145887eacb10f9d392eed69a933p-2Q, -0x1.4ab3cf0bae2a5b8432a0a18163adp-6Q, -0x1.4e8938899ee371e40cd7b7528ae1p-5Q, 0x1.5cb5de436bfadb9e555d33c55725p-6Q, -0x1.051eebbefaf7bd71954e297a6202p-8Q, 0x1.0efaec65edbcc11b181ba7073ddfp-14Q, 0x1.6a87a6b931edc5ab5423dbf1bacbp-15Q, -0x1.4e8b2a27fe064ec01f6271830448p-23Q, -0x1.54fd8f0625f118cd9bcdded88df8p-33Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.e0eacca617ebb860573873f7b257p+0Q, -0x1.5362d7fe36c56b6a443e9d614224p+2Q, 0x1.70aa17b7adc0e75a9ffe0b5a343p+2Q, -0x1.86bc52429f3a3f79bb4f1cb737ebp+1Q, 0x1.5709310e8d1f635f77e733f3171p-2Q, 0x1.9d599937b31fafd3d66db2bf1cfap-1Q, -0x1.18b244e50df675a487d76601b122p-1Q, 0x1.fe16d1a3cfb3e7ecc6834f20623cp-4Q, 0x1.eb4cc917dd1cd56dce6a9280b19ap-12Q, -0x1.4e09cf12f0cdcfd873bae55835b6p-9Q, 0x1.c4a78957d279804ccd5115f614bcp-16Q, 0x1.cb0ccbca08e7961d7bc2f676b681p-25Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.4ca9343b3236825367445e1bcc76p-1Q, -0x1.492e70f2635c16c262e618fc71c9p+1Q, 0x1.171de5ca88cec2afbea54998e4afp+4Q, -0x1.1e704d84a10750732762c3f7a7d9p+6Q, 0x1.23bcc34d6a529b0b422faf6a8faap+7Q, -0x1.415156a34428a6a6c08cde81cb46p+7Q, 0x1.7ff7929036ddd78bf54cfc3c1e07p+6Q, -0x1.a43b4147c122c6f143d7b5960278p+4Q, 0x1.833e6f5afaca4c566ce5985f38e4p-4Q, 0x1.13b5aaaf6c71d5b914583e4be0c9p+0Q, -0x1.6365af2495a86c5f48d9bd1e4466p-6Q, -0x1.64d19861a833792a3ce80f88bd23p-14Q, 0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.525f0cb11c2720485c66b9e1a4ecp+1Q, -0x1.7eda4b6a23328f4e2cec098f6dc4p+3Q, 0x1.578437542fe4f5fbe4cefec745eep+4Q, -0x1.40c582473fa8c93703a1216d1bfdp+4Q, 0x1.9815cb7223c105bc2b63ed01aaa9p+3Q, -0x1.222479cd96ee9d17f59bff4df756p+3Q, 0x1.8c2cccc6ee34ca0f24458389d70cp+2Q, -0x1.ffd4fb5b3918044492967474d7b2p+0Q, -0x1.3be427404fe7d12432d600f4467cp-3Q, 0x1.7c490d447fad2e27fa6b12a0df79p-3Q, -0x1.23f9756392d0ee9915448c1beeeap-7Q, -0x1.1f66b1e7815295f48755fd4e4048p-14Q, -0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.80a316d21a0eed480c84ea711c72p+0Q, -0x1.ce7e6827143677fbd12dabe06d43p+2Q, 0x1.ac8b3ccd718c41df56b9c167f4f2p+3Q, -0x1.74c81d1a27df5c33454de2219d72p+3Q, 0x1.4010d1eedca99cac8148c1188814p+2Q, -0x1.34da807d2aaec910bcf3aa770b5fp+1Q, 0x1.2d09c9846b581b01a4323f49dd86p+1Q, -0x1.97de12ea03ca10913f6e6b1c02a9p-1Q, -0x1.9df5b4fe2e271a26f87f7a1f7732p-2Q, 0x1.16c54a229aae12ed509d340baa4cp-2Q, -0x1.e323c5b92bd166e33ab5b4f96118p-6Q, -0x1.c9a573f22c19a9032c5430df4acdp-12Q, 0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.a096c8f7fc8ab1575820ee7aa2a9p-3Q, -0x1.01d8c748e11fa735da05e73f9139p+0Q, 0x1.099a073a7c7b41898468a5bd1aap+1Q, -0x1.40ce386ca776e06ba6f31ba7c1p+1Q, 0x1.2a57634989c51fb583fc11fbe69fp+1Q, -0x1.e6f030cb23fbfde6dfddcd331b76p+0Q, 0x1.3544c2755b1d82eac792a585c22cp+0Q, -0x1.6af581a622d416ac06a3c40afddbp-1Q, 0x1.256afda077267e050d8164de576cp-1Q, -0x1.6569331439297d46e21a065cd1e4p-2Q, 0x1.4b88409bdd1172b9682df895c7b5p-4Q, 0x1.24061e2653bdb3c5fd153e81e5dap-9Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 8) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.184a0cp-3f, 0x1.fbaa04p-1f, -0x1.596f5cp-3f, 0x1.234876p-4f, -0x1.90a568p-5f, 0x1.82b42ep-6f, -0x1.96b60cp-8f, 0x1.8430d2p-11f, -0x1.92df02p-14f, 0x1.da6faap-16f, 0x1.b237bcp-20f, 0x1.66eb1ap-25f, -0x1.f6ebd8p-33f, 0x1.569072p-45f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.03034p-1f, 0x1.8347dap-2f, -0x1.7d2f18p+0f, 0x1.c3013ep-1f, -0x1.4be40ep-2f, 0x1.458036p-6f, 0x1.7e9e8ep-5f, -0x1.594cfap-6f, 0x1.27c566p-9f, 0x1.e972ap-12f, -0x1.1649ecp-14f, 0x1.c99c42p-23f, 0x1.81519ep-26f, -0x1.06b5eep-37f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.666d54p+0f, -0x1.c03746p+1f, 0x1.a43ebap+1f, -0x1.d62736p+0f, 0x1.891e36p-1f, 0x1.a23c1ap-6f, -0x1.d9c16ep-3f, 0x1.b6728ep-4f, -0x1.66849cp-7f, -0x1.fc6302p-9f, 0x1.7e62aep-11f, -0x1.2c21cp-17f, -0x1.15f344p-21f, 0x1.7bbd84p-32f, 0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.b44c4ep+1f, -0x1.c1f7ep+3f, 0x1.1601a8p+4f, 0x1.e5bffcp+3f, -0x1.38f35cp+6f, 0x1.d1869cp+6f, -0x1.70d204p+6f, 0x1.34930ep+5f, -0x1.4b77b4p+2f, -0x1.d27f3cp+0f, 0x1.32a2c6p-1f, -0x1.2fc65p-7f, -0x1.c48022p-11f, 0x1.364c0ap-20f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.afe05cp+1f, -0x1.0a8c44p+4f, 0x1.0f6c04p+5f, -0x1.306ff2p+5f, 0x1.da6956p+4f, -0x1.6a2c2p+4f, 0x1.0e28c8p+4f, -0x1.ee4b3cp+2f, 0x1.050e3ep-1f, 0x1.0ea6cap+0f, -0x1.6566f6p-2f, 0x1.0b828ap-6f, 0x1.3201b6p-10f, -0x1.a6f024p-19f, 0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.77885ep+1f, -0x1.f5abb2p+3f, 0x1.0a779ep+5f, -0x1.164dap+5f, 0x1.233374p+4f, -0x1.af306ap+2f, 0x1.6dba5cp+2f, -0x1.17ffcap+1f, -0x1.9f39e8p+1f, 0x1.d0d0a8p+1f, -0x1.4ac5cap+0f, 0x1.049fbp-3f, 0x1.5ad37ap-7f, -0x1.e6e9a6p-15f, -0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.1912b6p+0f, -0x1.85c00cp+2f, 0x1.b7d754p+3f, -0x1.076d5p+4f, 0x1.92a29ep+3f, -0x1.20f516p+3f, 0x1.dcba52p+2f, -0x1.3fe312p+2f, 0x1.5e9b74p+1f, -0x1.a6996ap+0f, 0x1.806826p-1f, -0x1.ddc83ep-4f, -0x1.e09e82p-7f, 0x1.5c5b72p-13f, -0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.eae802p-3f, -0x1.5a965ap+0f, 0x1.851aep+1f, -0x1.b139cp+1f, 0x1.ffefb8p+0f, -0x1.025406p+0f, 0x1.ff103cp-1f, -0x1.7a4f7p-1f, 0x1.09dce6p-2f, -0x1.c2f7cep-4f, 0x1.41c46cp-4f, -0x1.03531cp-6f, -0x1.c24ed2p-9f, 0x1.5d1ed8p-14f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.184a0c288d22bp-3, 0x1.fbaa047a94a61p-1, -0x1.596f5b6b28cbp-3, 0x1.234875f46000ep-4, -0x1.90a568ef3b94bp-5, 0x1.82b42ea0f8a16p-6, -0x1.96b60b10e5956p-8, 0x1.8430d19335685p-11, -0x1.92df023007909p-14, 0x1.da6faa7679627p-16, 0x1.b237bc2c3b525p-20, 0x1.66eb1a28068aep-25, -0x1.f6ebd7398c4a4p-33, 0x1.5690727034a8ap-45, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.03033f41d9947p-1, 0x1.8347da7a3030cp-2, -0x1.7d2f17f2a95afp+0, 0x1.c3013eaebde94p-1, -0x1.4be40ed86f2cdp-2, 0x1.4580356ca34ffp-6, 0x1.7e9e8eefc30b4p-5, -0x1.594cf912461bcp-6, 0x1.27c56651be6eep-9, 0x1.e972a09b0f4ddp-12, -0x1.1649ec5e54141p-14, 0x1.c99c42a59648bp-23, 0x1.81519dee82fp-26, -0x1.06b5ee4f0712p-37, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.666d532df9dfp+0, -0x1.c0374596ee4d9p+1, 0x1.a43eb9f4500c3p+1, -0x1.d627359f84d25p+0, 0x1.891e36789053ap-1, 0x1.a23c19ecf2debp-6, -0x1.d9c16d05d7787p-3, 0x1.b6728d569b4c7p-4, -0x1.66849bebd2ebep-7, -0x1.fc6301aedca9p-9, 0x1.7e62ae52149bdp-11, -0x1.2c21c0130a3ebp-17, -0x1.15f344e8ed1b2p-21, 0x1.7bbd836b1bf85p-32, 0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.b44c4e267cbb5p+1, -0x1.c1f7df3ad7ab8p+3, 0x1.1601a8a979c79p+4, 0x1.e5bffb29b3c53p+3, -0x1.38f35bf0e9ee1p+6, 0x1.d1869b3f8e2b4p+6, -0x1.70d2038145a54p+6, 0x1.34930dde67aeap+5, -0x1.4b77b4fb36749p+2, -0x1.d27f3b25c1fd7p+0, 0x1.32a2c5a3dfe81p-1, -0x1.2fc64ff8d3421p-7, -0x1.c48021ad9bc16p-11, 0x1.364c0a7c4c64bp-20, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.afe05c7a6ada2p+1, -0x1.0a8c44cdd47bfp+4, 0x1.0f6c0325c5e14p+5, -0x1.306ff1c62c833p+5, 0x1.da69559cc9113p+4, -0x1.6a2c1f828fe2ep+4, 0x1.0e28c771588c3p+4, -0x1.ee4b3cc46d89p+2, 0x1.050e3e4d4732ap-1, 0x1.0ea6cad7a5a8p+0, -0x1.6566f5ac7d805p-2, 0x1.0b828ad29e43fp-6, 0x1.3201b5c3bc1c2p-10, -0x1.a6f0242017b15p-19, 0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.77885e6e270a7p+1, -0x1.f5abb22b1b6ecp+3, 0x1.0a779dee6c7bep+5, -0x1.164d9f148bde5p+5, 0x1.2333738e736f1p+4, -0x1.af306993826a7p+2, 0x1.6dba5c59397a4p+2, -0x1.17ffc928dd1d9p+1, -0x1.9f39e7400cf5dp+1, 0x1.d0d0a8f3b805ep+1, -0x1.4ac5cadf9fb15p+0, 0x1.049faf6ae6899p-3, 0x1.5ad3792bdac36p-7, -0x1.e6e9a51e3663ap-15, -0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.1912b6ad90d43p+0, -0x1.85c00c80d7a19p+2, 0x1.b7d753e3c818ap+3, -0x1.076d50e7f7851p+4, 0x1.92a29d7ac0e1ep+3, -0x1.20f516098425cp+3, 0x1.dcba519c323cfp+2, -0x1.3fe31292805cp+2, 0x1.5e9b74431b073p+1, -0x1.a6996ae95f76fp+0, 0x1.806826de1640bp-1, -0x1.ddc83de4acfafp-4, -0x1.e09e81650c6b7p-7, 0x1.5c5b71613d71bp-13, -0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.eae80165a34adp-3, -0x1.5a965a7535366p+0, 0x1.851adfd49d1a7p+1, -0x1.b139c010d5d8fp+1, 0x1.ffefb70380437p+0, -0x1.0254056f57104p+0, 0x1.ff103b26e087ep-1, -0x1.7a4f70cc2f5d8p-1, 0x1.09dce627745a6p-2, -0x1.c2f7ce5c8a37cp-4, 0x1.41c46b919c33fp-4, -0x1.03531c096423ap-6, -0x1.c24ed1e998c51p-9, 0x1.5d1ed72a09587p-14, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0x8.c250614469156ecp-6L, 0xf.dd5023d4a530983p-4L, -0xa.cb7adb594658341p-6L, 0x9.1a43afa30007147p-7L, -0xc.852b4779dca57d6p-8L, 0xc.15a17507c50b09fp-9L, -0xc.b5b058872cab3ebp-11L, 0xc.21868c99ab4273bp-14L, -0xc.96f811803c8446bp-17L, 0xe.d37d53b3cb1391fp-19L, 0xd.91bde161da92bd9p-23L, 0xb.3758d14034571f5p-28L, -0xf.b75eb9cc6251d52p-36L, 0xa.b4839381a545259p-48L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0x8.1819fa0ecca3abdp-4L, 0xc.1a3ed3d18185c5ap-5L, -0xb.e978bf954ad7b4cp-3L, 0xe.1809f575ef4a37dp-4L, -0xa.5f2076c37966861p-5L, 0xa.2c01ab651a7f8e8p-9L, 0xb.f4f4777e185a2cbp-8L, -0xa.ca67c89230ddcadp-9L, 0x9.3e2b328df376c3ap-12L, 0xf.4b9504d87a6e47fp-15L, -0x8.b24f62f2a0a04dcp-17L, 0xe.4ce2152cb245585p-26L, 0xc.0a8cef7417800e8p-29L, -0x8.35af7278388fe4bp-40L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xb.336a996fcef7c52p-3L, -0xe.01ba2cb7726c73bp-2L, 0xd.21f5cfa280614c9p-2L, -0xe.b139acfc2692864p-3L, 0xc.48f1b3c4829d099p-4L, 0xd.11e0cf6796f5a28p-9L, -0xe.ce0b682ebbc393bp-6L, 0xd.b3946ab4da635ap-7L, -0xb.3424df5e975efd8p-10L, -0xf.e3180d76e5481d1p-12L, 0xb.f3157290a4debfp-14L, -0x9.610e009851f575p-20L, -0x8.af9a274768d9303p-24L, 0xb.ddec1b58dfc26aap-35L, 0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xd.a2627133e5da6a2p-2L, -0xe.0fbef9d6bd5bcc5p+0L, 0x8.b00d454bce3c7c1p+1L, 0xf.2dffd94d9e295dcp+0L, -0x9.c79adf874f70573p+3L, 0xe.8c34d9fc715a214p+3L, -0xb.86901c0a2d2a313p+3L, 0x9.a4986ef33d75017p+2L, -0xa.5bbda7d9b3a4ab2p-1L, -0xe.93f9d92e0feb674p-3L, 0x9.95162d1eff408cfp-4L, -0x9.7e327fc69a10719p-10L, -0xe.24010d6cde0b23p-14L, 0x9.b26053e2632577ap-23L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xd.7f02e3d356d0e5bp-2L, -0x8.5462266ea3dfa72p+1L, 0x8.7b60192e2f0a0a5p+2L, -0x9.837f8e316419b55p+2L, 0xe.d34aace64889869p+1L, -0xb.5160fc147f16c08p+1L, 0x8.71463b8ac46182cp+1L, -0xf.7259e6236c483c5p-1L, 0x8.2871f26a39950e3p-4L, 0x8.753656bd2d3fd71p-3L, -0xb.2b37ad63ec0243dp-5L, 0x8.5c145694f21f58cp-9L, 0x9.900dae1de0e10ep-13L, -0xd.37812100bd8a443p-22L, 0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xb.bc42f3713853a26p-2L, -0xf.ad5d9158db75d9ap+0L, 0x8.53bcef7363deeep+2L, -0x8.b26cf8a45ef2551p+2L, 0x9.199b9c739b78925p+1L, -0xd.79834c9c135345p-1L, 0xb.6dd2e2c9cbd2213p-1L, -0x8.bffe4946e8ec5f8p-2L, -0xc.f9cf3a0067ae91ap-2L, 0xe.8685479dc02ed7ep-2L, -0xa.562e56fcfd8a5e2p-3L, 0x8.24fd7b57344ca47p-6L, 0xa.d69bc95ed61ae29p-10L, -0xf.374d28f1b31ceb4p-18L, -0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0x8.c895b56c86a1b02p-3L, -0xc.2e006406bd0c7e6p-1L, 0xd.beba9f1e40c4cbdp+0L, -0x8.3b6a873fbc285cap+1L, 0xc.9514ebd6070fp+0L, -0x9.07a8b04c212dd91p+0L, 0xe.e5d28ce191e76fcp-1L, -0x9.ff18949402e0231p-1L, 0xa.f4dba218d8396ddp-2L, -0xd.34cb574afbb77c5p-3L, 0xc.034136f0b2057f9p-4L, -0xe.ee41ef2567d7906p-7L, -0xf.04f40b28635ba7ep-10L, 0xa.e2db8b09eb8dbb5p-16L, -0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0xf.57400b2d1a568f9p-6L, -0xa.d4b2d3a9a9b32a1p-3L, 0xc.28d6fea4e8d3b6dp-2L, -0xd.89ce0086aec77acp-2L, 0xf.ff7db81c021b9bdp-3L, -0x8.12a02b7ab881d9bp-3L, 0xf.f881d937043f115p-4L, -0xb.d27b86617aebd37p-4L, 0x8.4ee7313ba2d30a8p-5L, -0xe.17be72e451bdc7ep-7L, 0xa.0e235c8ce19f70ep-7L, -0x8.1a98e04b211d3d4p-9L, -0xe.12768f4cc6289abp-12L, 0xa.e8f6b9504ac38b3p-17L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.184a0c288d22add7ea26104df2f3p-3Q, 0x1.fbaa047a94a613069e6f550b4e0cp-1Q, -0x1.596f5b6b28cb0681bf78a3e54b76p-3Q, 0x1.234875f46000e28dce7c3f34208fp-4Q, -0x1.90a568ef3b94afacf755834bab9dp-5Q, 0x1.82b42ea0f8a1613dc5ff9725c04ep-6Q, -0x1.96b60b10e59567d6b2c6577bad37p-8Q, 0x1.8430d19335684e7577fd3b69976cp-11Q, -0x1.92df0230079088d5ad0746147157p-14Q, 0x1.da6faa767962723e71f08f2e9079p-16Q, 0x1.b237bc2c3b5257b1d937078b73a9p-20Q, 0x1.66eb1a28068ae3ea1bd5d268325dp-25Q, -0x1.f6ebd7398c4a3aa441e024a57151p-33Q, 0x1.5690727034a8a4b1353895ae261dp-45Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.03033f41d994757a2b4934423535p-1Q, 0x1.8347da7a3030b8b37cdc36ec3be2p-2Q, -0x1.7d2f17f2a95af6988be8eca125cap+0Q, 0x1.c3013eaebde946f9eaa42bce8cdbp-1Q, -0x1.4be40ed86f2cd0c168ad24949287p-2Q, 0x1.4580356ca34ff1cf3c18408b1ce2p-6Q, 0x1.7e9e8eefc30b45959dcb8ab52398p-5Q, -0x1.594cf912461bb959724fb77ad3c3p-6Q, 0x1.27c56651be6ed873712071c19326p-9Q, 0x1.e972a09b0f4dc8fdb93114f9ed2dp-12Q, -0x1.1649ec5e541409b8483ac00aa993p-14Q, 0x1.c99c42a59648ab096d412a5873a5p-23Q, 0x1.81519dee82f001d0cfd286a4bf35p-26Q, -0x1.06b5ee4f0711fc96e3337209d4fap-37Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.666d532df9def8a39e69d4c9dafcp+0Q, -0x1.c0374596ee4d8e750b0b0f065a7p+1Q, 0x1.a43eb9f4500c29913bdae70f2e18p+1Q, -0x1.d627359f84d250c8825852fe214cp+0Q, 0x1.891e36789053a132cb4397963b98p-1Q, 0x1.a23c19ecf2deb44f4177f3e94959p-6Q, -0x1.d9c16d05d77872764189280b3b87p-3Q, 0x1.b6728d569b4c6b3f03c9c20fd92ap-4Q, -0x1.66849bebd2ebdfafabb131376074p-7Q, -0x1.fc6301aedca903a123de4bcecb7dp-9Q, 0x1.7e62ae52149bd7e06a18746f5d38p-11Q, -0x1.2c21c0130a3eaea0bd3721b2b938p-17Q, -0x1.15f344e8ed1b26069acbf2a1a5a3p-21Q, 0x1.7bbd836b1bf84d53feb61580de7bp-32Q, 0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.b44c4e267cbb4d43745305f7f1d1p+1Q, -0x1.c1f7df3ad7ab79897dce80d6fdc1p+3Q, 0x1.1601a8a979c78f82e398ce85d132p+4Q, 0x1.e5bffb29b3c52bb885497a61677fp+3Q, -0x1.38f35bf0e9ee0ae5b17729526ffp+6Q, 0x1.d1869b3f8e2b44288688d26f2b6fp+6Q, -0x1.70d2038145a54625eb25d8766c13p+6Q, 0x1.34930dde67aea02e0a703b771d79p+5Q, -0x1.4b77b4fb3674956338abd182d2e5p+2Q, -0x1.d27f3b25c1fd6ce83b2a8b0b03e8p+0Q, 0x1.32a2c5a3dfe8119d379b7145ac19p-1Q, -0x1.2fc64ff8d3420e31f2a6dd484c8ap-7Q, -0x1.c48021ad9bc1646021c012f661fp-11Q, 0x1.364c0a7c4c64aef45189b313663dp-20Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.afe05c7a6ada1cb6172616d2f2ffp+1Q, -0x1.0a8c44cdd47bf4e495a5398430e1p+4Q, 0x1.0f6c0325c5e1414a9285f59e7d75p+5Q, -0x1.306ff1c62c8336aad5c3f9888cf8p+5Q, 0x1.da69559cc91130d28dd4b6368cc9p+4Q, -0x1.6a2c1f828fe2d81030f1ad526958p+4Q, 0x1.0e28c771588c30581ce7071755d2p+4Q, -0x1.ee4b3cc46d890789fa8b15b80159p+2Q, 0x1.050e3e4d4732a1c55c0c971f29e5p-1Q, 0x1.0ea6cad7a5a7fae2eab7d74b48fbp+0Q, -0x1.6566f5ac7d80487971d04a5977aep-2Q, 0x1.0b828ad29e43eb178f6b65b924cep-6Q, 0x1.3201b5c3bc1c21bf7086981d037bp-10Q, -0x1.a6f0242017b1488503cf0ef0a318p-19Q, 0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.77885e6e270a744c868654d77bep+1Q, -0x1.f5abb22b1b6ebb333fd9f11e28cbp+3Q, 0x1.0a779dee6c7bddbff2f0d8b96185p+5Q, -0x1.164d9f148bde4aa13b66fabb8275p+5Q, 0x1.2333738e736f124a0ec3de55d4acp+4Q, -0x1.af306993826a689f7543995743eap+2Q, 0x1.6dba5c59397a4426e98586a9dbfbp+2Q, -0x1.17ffc928dd1d8bf0f209d0c25564p+1Q, -0x1.9f39e7400cf5d234f22720c7e994p+1Q, 0x1.d0d0a8f3b805dafc2d2b539dd42dp+1Q, -0x1.4ac5cadf9fb14bc48382ff0eff77p+0Q, 0x1.049faf6ae689948e66d5e513815cp-3Q, 0x1.5ad3792bdac35c5163486d90e7a1p-7Q, -0x1.e6e9a51e36639d68c6db7d754f12p-15Q, -0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.1912b6ad90d43603284e2902f0abp+0Q, -0x1.85c00c80d7a18fcc693e4762b85p+2Q, 0x1.b7d753e3c818997a04ded98db7dep+3Q, -0x1.076d50e7f7850b94ae780b4ac761p+4Q, 0x1.92a29d7ac0e1e0002558af84767fp+3Q, -0x1.20f516098425bb22664ce4abb09dp+3Q, 0x1.dcba519c323cedf78dcb77920137p+2Q, -0x1.3fe31292805c0462ca96ae1f196p+2Q, 0x1.5e9b74431b072dba61e526bdae0cp+1Q, -0x1.a6996ae95f76ef890f12b5a360bp+0Q, 0x1.806826de1640aff2fbfd8d0aa94cp-1Q, -0x1.ddc83de4acfaf20be5fee510530ep-4Q, -0x1.e09e81650c6b74fbce41e534d5fbp-7Q, 0x1.5c5b71613d71b7692e7e5f0a2ebfp-13Q, -0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.eae80165a34ad1f2080107f87ddap-3Q, -0x1.5a965a7535366541f0a1afe5a2b4p+0Q, 0x1.851adfd49d1a76d9d23c3531fc86p+1Q, -0x1.b139c010d5d8ef58fb69c4f1a06p+1Q, 0x1.ffefb7038043737a18fc832ffa5dp+0Q, -0x1.0254056f57103b364cf4bcb0546p+0Q, 0x1.ff103b26e087e22aa6dbe24a6942p-1Q, -0x1.7a4f70cc2f5d7a6d2a4e62af8416p-1Q, 0x1.09dce627745a61500e94719899a9p-2Q, -0x1.c2f7ce5c8a37b8fcabdaf25e5004p-4Q, 0x1.41c46b919c33ee1c6941aae7a0ebp-4Q, -0x1.03531c096423a7a88f95e3dc75eap-6Q, -0x1.c24ed1e998c51356546e2438785p-9Q, 0x1.5d1ed72a09587166cbb2e53232dap-14Q, -0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 9) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.1d2fcp-4f, 0x1.b1b652p-1f, 0x1.8b08d6p-3f, -0x1.4aef16p-3f, 0x1.fd1878p-5f, -0x1.7ee87p-8f, -0x1.097588p-7f, 0x1.3d3ef8p-8f, -0x1.291474p-10f, 0x1.b33accp-15f, 0x1.7e6498p-16f, -0x1.53f94ap-19f, -0x1.58c1d8p-24f, 0x1.278ba2p-29f, -0x1.705a7ap-38f, -0x1.4fb4eep-52f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.2b90f8p-2f, 0x1.af96b8p-1f, -0x1.d3c16cp+0f, 0x1.169004p+0f, -0x1.1f4f38p-1f, 0x1.82c926p-3f, -0x1.540e9cp-7f, -0x1.49841cp-6f, 0x1.96a364p-8f, 0x1.0c494ap-11f, -0x1.b592fcp-12f, 0x1.9d3f0ap-16f, 0x1.8562bp-23f, -0x1.13cc2ep-24f, 0x1.2234ep-34f, 0x1.08644ap-47f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.e4c00ep-1f, -0x1.aad7p+0f, 0x1.135c58p-2f, 0x1.5b4146p-1f, -0x1.c92ba8p-4f, -0x1.4f00eap-2f, 0x1.61aa48p-2f, -0x1.66761ap-3f, 0x1.723502p-5f, -0x1.85c5f4p-10f, -0x1.2bb318p-9f, 0x1.b3d73ep-12f, 0x1.bca3f2p-17f, -0x1.261d8ap-20f, 0x1.36693ap-28f, 0x1.1a9906p-40f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.27d6ep+1f, -0x1.2ded7ap+3f, 0x1.e79fd8p+3f, -0x1.304a1ap+3f, -0x1.effd26p+2f, 0x1.7ce73p+4f, -0x1.985f02p+4f, 0x1.d3cfacp+3f, -0x1.e1a25p+1f, -0x1.9b8564p-2f, 0x1.fe4766p-2f, -0x1.73f12ep-4f, -0x1.20ddep-10f, 0x1.ffd29p-12f, -0x1.fa8378p-20f, -0x1.cc794ap-31f, 0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.c7cedp+1f, -0x1.2ab8cap+4f, 0x1.4df684p+5f, -0x1.af3bfap+5f, 0x1.8eeb18p+5f, -0x1.541e9cp+5f, 0x1.12ea48p+5f, -0x1.35c8bp+4f, 0x1.d829e2p+1f, 0x1.69d6eap+1f, -0x1.023562p+1f, 0x1.b42324p-2f, -0x1.2e2904p-8f, -0x1.22b4e2p-8f, 0x1.654cep-16f, 0x1.43e712p-26f, -0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.1617a4p+2f, -0x1.94d9c6p+4f, 0x1.dd0eb6p+5f, -0x1.168c04p+6f, 0x1.24c19cp+5f, -0x1.016a68p+0f, -0x1.c94ed2p+2f, 0x1.669c08p+3f, -0x1.88dca4p+4f, 0x1.b958d8p+4f, -0x1.eccebap+3f, 0x1.f4375ep+1f, -0x1.2ade5ep-3f, -0x1.491f18p-4f, 0x1.5bccdep-11f, 0x1.398368p-20f, -0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.384148p+1f, -0x1.dd3c5ap+3f, 0x1.30352ap+5f, -0x1.a86d9ep+5f, 0x1.7d0e6cp+5f, -0x1.25c844p+5f, 0x1.f5b3e2p+4f, -0x1.815eep+4f, 0x1.ca4482p+3f, -0x1.050826p+3f, 0x1.1eeca8p+2f, -0x1.6df696p+0f, 0x1.75a7acp-5f, 0x1.ebd4ap-5f, -0x1.434438p-10f, -0x1.202646p-18f, 0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.041f76p+0f, -0x1.96fe7ap+2f, 0x1.04a7fep+4f, -0x1.5c5edep+4f, 0x1.0b593cp+4f, -0x1.3ddf52p+3f, 0x1.12f0bcp+3f, -0x1.d4ebfcp+2f, 0x1.d31828p+1f, -0x1.6bf238p+0f, 0x1.d1d5cp-1f, -0x1.794e94p-2f, -0x1.2e59eap-6f, 0x1.26fbfep-5f, -0x1.e662fap-10f, -0x1.a81802p-17f, -0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.9024ep-3f, -0x1.3caa56p+0f, 0x1.947e64p+1f, -0x1.033a7ap+2f, 0x1.51b6cap+1f, -0x1.0bd63p+0f, 0x1.028beep+0f, -0x1.1620dap+0f, 0x1.b5ef82p-2f, -0x1.b7954cp-6f, 0x1.054d18p-4f, -0x1.481726p-5f, -0x1.8ce86ep-6f, 0x1.2926b8p-6f, -0x1.20ae94p-9f, -0x1.e260bp-16f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.1d2fbfac2394ap-4, 0x1.b1b6520101e0ep-1, 0x1.8b08d5cd4a2adp-3, -0x1.4aef16c7e666fp-3, 0x1.fd1877f1138bep-5, -0x1.7ee87092fa243p-8, -0x1.09758849af605p-7, 0x1.3d3ef7388a3aep-8, -0x1.29147421d5711p-10, 0x1.b33acccf47f1cp-15, 0x1.7e6498cdbddd5p-16, -0x1.53f9494edf128p-19, -0x1.58c1d88e09b31p-24, 0x1.278ba12dc249ap-29, -0x1.705a7a4d8345p-38, -0x1.4fb4ee678fa0ep-52, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.2b90f77070093p-2, 0x1.af96b810375aep-1, -0x1.d3c16b16ba87ap+0, 0x1.1690032de8cfbp+0, -0x1.1f4f37268ff74p-1, 0x1.82c9256a70f8fp-3, -0x1.540e9bea7c732p-7, -0x1.49841c554fed2p-6, 0x1.96a364065f27dp-8, 0x1.0c49493de5a6fp-11, -0x1.b592fbb7be41bp-12, 0x1.9d3f09be0cea7p-16, 0x1.8562af0388b7ep-23, -0x1.13cc2e0d34f25p-24, 0x1.2234e02ed8631p-34, 0x1.08644a120d1efp-47, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.e4c00e361fc68p-1, -0x1.aad6ffd5d77f1p+0, 0x1.135c57711e671p-2, 0x1.5b41454ff0957p-1, -0x1.c92ba77b267a3p-4, -0x1.4f00ea2c2d363p-2, 0x1.61aa479f9dc68p-2, -0x1.6676194262896p-3, 0x1.7235017b58d32p-5, -0x1.85c5f4a449273p-10, -0x1.2bb318efa4d23p-9, 0x1.b3d73e818e5c9p-12, 0x1.bca3f26f194dp-17, -0x1.261d8947cb727p-20, 0x1.36693a4632269p-28, 0x1.1a9906065291fp-40, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.27d6df36685a8p+1, -0x1.2ded79e41fdb1p+3, 0x1.e79fd7c0b1c0fp+3, -0x1.304a1a210a5fap+3, -0x1.effd2573aa9abp+2, 0x1.7ce72fdc2cb91p+4, -0x1.985f0196c72e5p+4, 0x1.d3cfac07a9d2bp+3, -0x1.e1a24f8472a68p+1, -0x1.9b8563bd7c7d8p-2, 0x1.fe4766e3faf54p-2, -0x1.73f12d4155f36p-4, -0x1.20dddf659ee51p-10, 0x1.ffd28fb3400bfp-12, -0x1.fa83788d3f78dp-20, -0x1.cc794a76e5f16p-31, 0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.c7ced0f66aeadp+1, -0x1.2ab8c9c81252ep+4, 0x1.4df684dede46dp+5, -0x1.af3bf949d62bap+5, 0x1.8eeb17bed133cp+5, -0x1.541e9c27826e5p+5, 0x1.12ea47c60decp+5, -0x1.35c8b07214e14p+4, 0x1.d829e1a762882p+1, 0x1.69d6e9c20f73dp+1, -0x1.0235621854eefp+1, 0x1.b423243b8b469p-2, -0x1.2e290398a3fe3p-8, -0x1.22b4e2598d44bp-8, 0x1.654cdf573874bp-16, 0x1.43e711e678672p-26, -0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.1617a4f9d8857p+2, -0x1.94d9c534a28d4p+4, 0x1.dd0eb6aa76ffep+5, -0x1.168c0447c1b6fp+6, 0x1.24c19c047007fp+5, -0x1.016a68491e4d8p+0, -0x1.c94ed28aba0f5p+2, 0x1.669c08c9522f3p+3, -0x1.88dca456f3456p+4, 0x1.b958d77e385a9p+4, -0x1.eccebab605f4bp+3, 0x1.f4375d664ce34p+1, -0x1.2ade5d60c4581p-3, -0x1.491f178ce5646p-4, 0x1.5bccddec65e54p-11, 0x1.398367062ce37p-20, -0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.3841475e9a364p+1, -0x1.dd3c5aa19c52ep+3, 0x1.303529a28e47p+5, -0x1.a86d9ebb6edc4p+5, 0x1.7d0e6c4e24171p+5, -0x1.25c8439d2df8ap+5, 0x1.f5b3e1ac99667p+4, -0x1.815ee05c85e8bp+4, 0x1.ca4482f4236a5p+3, -0x1.050825dec75a9p+3, 0x1.1eeca8acc3a79p+2, -0x1.6df69657c972dp+0, 0x1.75a7ac677c4efp-5, 0x1.ebd49f3810c89p-5, -0x1.4344372e1b6fcp-10, -0x1.20264586c6bb9p-18, 0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.041f759e862aap+0, -0x1.96fe795439509p+2, 0x1.04a7fd5b5e592p+4, -0x1.5c5ede521aae6p+4, 0x1.0b593b29c51bcp+4, -0x1.3ddf51285055ap+3, 0x1.12f0bcbe3fa44p+3, -0x1.d4ebfbf56d996p+2, 0x1.d31827f76dc61p+1, -0x1.6bf237312f18dp+0, 0x1.d1d5c0ac4dc0cp-1, -0x1.794e93c6506ddp-2, -0x1.2e59e90e0a11dp-6, 0x1.26fbfe966bb82p-5, -0x1.e662faa96110fp-10, -0x1.a81802ebf94f1p-17, -0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.9024e0f887aa3p-3, -0x1.3caa56e1c68fap+0, 0x1.947e636a9e374p+1, -0x1.033a79f260cefp+2, 0x1.51b6c9e0d0443p+1, -0x1.0bd62fc1e0455p+0, 0x1.028bee5b6619fp+0, -0x1.1620d9bfc03ebp+0, 0x1.b5ef819dccd9ap-2, -0x1.b7954b06be8afp-6, 0x1.054d18d1cc90cp-4, -0x1.4817258dd2847p-5, -0x1.8ce86e181d425p-6, 0x1.2926b8981e2a7p-6, -0x1.20ae937e7a93p-9, -0x1.e260b0ee2a093p-16, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0x8.e97dfd611ca4d0fp-7L, 0xd.8db290080f07364p-4L, 0xc.5846ae6a5156a59p-6L, -0xa.5778b63f3337b8dp-6L, 0xf.e8c3bf889c5f1c6p-8L, -0xb.f7438497d12158fp-11L, -0x8.4bac424d7b02898p-10L, 0x9.e9f7b9c451d6f5p-11L, -0x9.48a3a10eab88924p-13L, 0xd.99d6667a3f8ded1p-18L, 0xb.f324c66deeea6e7p-19L, -0xa.9fca4a76f894114p-22L, -0xa.c60ec4704d98582p-27L, 0x9.3c5d096e124d267p-32L, -0xb.82d3d26c1a28344p-41L, -0xa.7da7733c7d070cap-55L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0x9.5c87bb838049b9dp-5L, 0xd.7cb5c081bad7186p-4L, -0xe.9e0b58b5d43cc82p-3L, 0x8.b480196f467d6c9p-3L, -0x8.fa79b9347fb9e82p-4L, 0xc.16492b5387c74b6p-6L, -0xa.a074df53e3990b8p-10L, -0xa.4c20e2aa7f68ebp-9L, 0xc.b51b2032f93e669p-11L, 0x8.624a49ef2d3764bp-14L, -0xd.ac97ddbdf20daf5p-15L, 0xc.e9f84df067536c7p-19L, 0xc.2b15781c45bef81p-26L, -0x8.9e617069a792bafp-27L, 0x9.11a70176c31860ap-37L, 0x8.4322509068f7b78p-50L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xf.260071b0fe33d17p-4L, -0xd.56b7feaebbf8a9ep-3L, 0x8.9ae2bb88f3384cep-5L, 0xa.da0a2a7f84ab917p-4L, -0xe.495d3bd933d14bbp-7L, -0xa.7807516169b18a5p-5L, 0xb.0d523cfcee33daap-5L, -0xb.33b0ca13144b196p-6L, 0xb.91a80bdac698e63p-8L, -0xc.2e2fa52249396c6p-13L, -0x9.5d98c77d2691ac4p-12L, 0xd.9eb9f40c72e4aacp-15L, 0xd.e51f9378ca67c3cp-20L, -0x9.30ec4a3e5b93bbap-23L, 0x9.b349d2319134721p-31L, 0x8.d4c83032948f76p-43L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0x9.3eb6f9b342d3cadp-2L, -0x9.6f6bcf20fed8622p+0L, 0xf.3cfebe058e075ecp+0L, -0x9.8250d10852fce74p+0L, -0xf.7fe92b9d54d57e6p-1L, 0xb.e7397ee165c88c5p+1L, -0xc.c2f80cb639729f3p+1L, 0xe.9e7d603d4e95463p+0L, -0xf.0d127c23953405cp-2L, -0xc.dc2b1debe3ebee3p-5L, 0xf.f23b371fd7a9d87p-5L, -0xb.9f896a0aaf9ad9fp-7L, -0x9.06eefb2cf7284e3p-13L, 0xf.fe947d9a005fa2fp-15L, -0xf.d41bc469fbc68cdp-23L, -0xe.63ca53b72f8b2fep-34L, 0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xe.3e7687b3575667ep-2L, -0x9.55c64e409297236p+1L, 0xa.6fb426f6f2369dp+2L, -0xd.79dfca4eb15ce04p+2L, 0xc.7758bdf6899e1b4p+2L, -0xa.a0f4e13c13724e9p+2L, 0x8.97523e306f6022p+2L, -0x9.ae458390a70a077p+1L, 0xe.c14f0d3b14410dep-2L, 0xb.4eb74e107b9e597p-2L, -0x8.11ab10c2a7777ccp-2L, 0xd.a11921dc5a34834p-5L, -0x9.71481cc51ff17e4p-11L, -0x9.15a712cc6a2586fp-11L, 0xb.2a66fab9c3a5b39p-19L, 0xa.1f388f33c339298p-29L, -0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0x8.b0bd27cec42baaep-1L, -0xc.a6ce29a51469f7p+1L, 0xe.e875b553b7fed21p+2L, -0x8.b460223e0db7486p+3L, 0x9.260ce023803fb4p+2L, -0x8.0b534248f26c38ep-3L, -0xe.4a769455d07a8e6p-1L, 0xb.34e0464a91798aep+0L, -0xc.46e522b79a2b2aep+1L, 0xd.cac6bbf1c2d48b2p+1L, -0xf.6675d5b02fa596cp+0L, 0xf.a1baeb32671a172p-2L, -0x9.56f2eb0622c089cp-6L, -0xa.48f8bc672b2306bp-7L, 0xa.de66ef632f29e0ep-14L, 0x9.cc1b3831671b9dbp-23L, -0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0x9.c20a3af4d1b1cfep-2L, -0xe.e9e2d50ce2972e4p+0L, 0x9.81a94d147237d62p+2L, -0xd.436cf5db76e1e52p+2L, 0xb.e873627120b85ap+2L, -0x9.2e421ce96fc4fd3p+2L, 0xf.ad9f0d64cb33437p+1L, -0xc.0af702e42f45538p+1L, 0xe.522417a11b52a8bp+0L, -0x8.28412ef63ad4b3p+0L, 0x8.f76545661d3c9p-1L, -0xb.6fb4b2be4b96476p-3L, 0xb.ad3d633be277714p-8L, 0xf.5ea4f9c08644463p-8L, -0xa.1a21b970db7e3c3p-13L, -0x9.01322c3635dc8d8p-21L, 0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0x8.20fbacf4315510dp-3L, -0xc.b7f3caa1ca84594p-1L, 0x8.253feadaf2c91fcp+1L, -0xa.e2f6f290d572f2cp+1L, 0x8.5ac9d94e28ddf7fp+1L, -0x9.eefa894282acd81p+0L, 0x8.9785e5f1fd2220dp+0L, -0xe.a75fdfab6ccb19fp-1L, 0xe.98c13fbb6e30aacp-2L, -0xb.5f91b98978c679ep-3L, 0xe.8eae05626e0638ap-4L, -0xb.ca749e32836e5f1p-5L, -0x9.72cf4870508e45cp-9L, 0x9.37dff4b35dc1001p-8L, -0xf.3317d54b0887a0cp-13L, -0xd.40c0175fca78546p-20L, -0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0xc.812707c43d519efp-6L, -0x9.e552b70e347cfbdp-3L, 0xc.a3f31b54f1b9fa4p-2L, -0x8.19d3cf93067786bp-1L, 0xa.8db64f068221badp-2L, -0x8.5eb17e0f022abcep-3L, 0x8.145f72db30cf502p-3L, -0x8.b106cdfe01f5b31p-3L, 0xd.af7c0cee66cd13ep-5L, -0xd.bcaa5835f4575cbp-9L, 0x8.2a68c68e64863cdp-7L, -0xa.40b92c6e94234bfp-8L, -0xc.674370c0ea12a57p-9L, 0x9.4935c4c0f1539cfp-9L, -0x9.05749bf3d4982dep-12L, -0xf.1305877150497c2p-19L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.1d2fbfac23949a1e129ec9f83912p-4Q, 0x1.b1b6520101e0e6c7ddaa9da59f1ep-1Q, 0x1.8b08d5cd4a2ad4b181244736a729p-3Q, -0x1.4aef16c7e666f719f7698e178af8p-3Q, 0x1.fd1877f1138be38ba53889d72502p-5Q, -0x1.7ee87092fa242b1ef789aaf8df0bp-8Q, -0x1.09758849af60512fff4fa06073a1p-7Q, 0x1.3d3ef7388a3ade9f5adf4b3f580fp-8Q, -0x1.29147421d57112477f4b7b3491f7p-10Q, 0x1.b33acccf47f1bda17f46b81064b7p-15Q, 0x1.7e6498cdbddd4dce209effce7067p-16Q, -0x1.53f9494edf1282277c1de6dc67e2p-19Q, -0x1.58c1d88e09b30b0364784ebc1f6cp-24Q, 0x1.278ba12dc249a4cd49c8d69ab618p-29Q, -0x1.705a7a4d83450688cb9e189ad73cp-38Q, -0x1.4fb4ee678fa0e1946f2bc7ed6f9ap-52Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.2b90f770700937399f9f525fd16p-2Q, 0x1.af96b810375ae30c4c41bf8dddfep-1Q, -0x1.d3c16b16ba8799042d28d9c49847p+0Q, 0x1.1690032de8cfad91fdf041ea0eaap+0Q, -0x1.1f4f37268ff73d0393fe0f677908p-1Q, 0x1.82c9256a70f8e96c68d16f2e332cp-3Q, -0x1.540e9bea7c732170245209a303ap-7Q, -0x1.49841c554fed1d5f2443e15a5a69p-6Q, 0x1.96a364065f27ccd19657d67cdf44p-8Q, 0x1.0c49493de5a6ec95d0bb4c3aca7fp-11Q, -0x1.b592fbb7be41b5e92f003f6109e3p-12Q, 0x1.9d3f09be0cea6d8d6f8ed455253cp-16Q, 0x1.8562af0388b7df01536ccb66a54fp-23Q, -0x1.13cc2e0d34f2575dd283b068f4aep-24Q, 0x1.2234e02ed8630c149658a9630027p-34Q, 0x1.08644a120d1ef6f0d4b961ae18cfp-47Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.e4c00e361fc67a2e12b083b2dedp-1Q, -0x1.aad6ffd5d77f153c17f1c88238b1p+0Q, 0x1.135c57711e67099c1758b9c71774p-2Q, 0x1.5b41454ff095722d0f803ea680d3p-1Q, -0x1.c92ba77b267a297500d5b5d446e8p-4Q, -0x1.4f00ea2c2d363149504e045fbe3dp-2Q, 0x1.61aa479f9dc67b53226c771010a3p-2Q, -0x1.667619426289632c2e8907dc17f4p-3Q, 0x1.7235017b58d31cc6ca2ab84f7b18p-5Q, -0x1.85c5f4a449272d8bf24d90db58dfp-10Q, -0x1.2bb318efa4d23587f50785ea349bp-9Q, 0x1.b3d73e818e5c9557fa6b95207e7cp-12Q, 0x1.bca3f26f194cf877e2358ca6ef83p-17Q, -0x1.261d8947cb7277733f476ea3b783p-20Q, 0x1.36693a4632268e426c4014035393p-28Q, 0x1.1a9906065291eec094ff6b81726cp-40Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.27d6df36685a79598b6c86ce4186p+1Q, -0x1.2ded79e41fdb0c43d1210e12d21ep+3Q, 0x1.e79fd7c0b1c0ebd84f460885d881p+3Q, -0x1.304a1a210a5f9ce8bc8b8a0cffdep+3Q, -0x1.effd2573aa9aafcb53e5889f37dap+2Q, 0x1.7ce72fdc2cb91189ae6d5e0871cfp+4Q, -0x1.985f0196c72e53e6d1cfdee7b628p+4Q, 0x1.d3cfac07a9d2a8c51198c073e7cep+3Q, -0x1.e1a24f8472a680b7d24d0580978cp+1Q, -0x1.9b8563bd7c7d7dc5768ba3de4d6cp-2Q, 0x1.fe4766e3faf53b0d1248280765afp-2Q, -0x1.73f12d4155f35b3e8452b4fe648dp-4Q, -0x1.20dddf659ee509c6befdf1c741e4p-10Q, 0x1.ffd28fb3400bf45efe5c328ed98fp-12Q, -0x1.fa83788d3f78d19a901b7476cd3dp-20Q, -0x1.cc794a76e5f165fc8108c92a1bffp-31Q, 0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.c7ced0f66aeaccfcda165890b07cp+1Q, -0x1.2ab8c9c81252e46b55777de4d947p+4Q, 0x1.4df684dede46d3a014591fd079e5p+5Q, -0x1.af3bf949d62b9c07b05b4ac5a7abp+5Q, 0x1.8eeb17bed133c367f65a67fd697cp+5Q, -0x1.541e9c27826e49d24f626bb2a444p+5Q, 0x1.12ea47c60dec043f14d3664d56dbp+5Q, -0x1.35c8b07214e140ed7f1d44702883p+4Q, 0x1.d829e1a7628821bc837255ba8e2p+1Q, 0x1.69d6e9c20f73cb2d14ff73520816p+1Q, -0x1.0235621854eeef97bfd3d4e40fecp+1Q, 0x1.b423243b8b46906701ef92e186fap-2Q, -0x1.2e290398a3fe2fc8cc3aebac6855p-8Q, -0x1.22b4e2598d44b0dd2f4a293dd307p-8Q, 0x1.654cdf573874b672ebfe3509eb92p-16Q, 0x1.43e711e67867252f78e7e45acf76p-26Q, -0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.1617a4f9d885755cd347730680b6p+2Q, -0x1.94d9c534a28d3ee0a8bf210bcdbcp+4Q, 0x1.dd0eb6aa76ffda42c87706ab28dep+5Q, -0x1.168c0447c1b6e90c330602af557cp+6Q, 0x1.24c19c047007f67f0d2fc48525bep+5Q, -0x1.016a68491e4d871ca5058c90ecfbp+0Q, -0x1.c94ed28aba0f51cc92c5b4e86742p+2Q, 0x1.669c08c9522f315c7b041fba43e2p+3Q, -0x1.88dca456f345655b7cb4359b9a4bp+4Q, 0x1.b958d77e385a9163a2eb3b5063f1p+4Q, -0x1.eccebab605f4b2d725512d8a373ap+3Q, 0x1.f4375d664ce342e4e518679a8a7p+1Q, -0x1.2ade5d60c45811382f7ff19b2adep-3Q, -0x1.491f178ce56460d544cbe168f85cp-4Q, 0x1.5bccddec65e53c1b0416c331875ep-11Q, 0x1.398367062ce373b6810676d7e87ep-20Q, -0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.3841475e9a3639fcb27c2a8a346bp+1Q, -0x1.dd3c5aa19c52e5c8a273f6e1052ep+3Q, 0x1.303529a28e46fac3a8f56eaa0a35p+5Q, -0x1.a86d9ebb6edc3ca33aa7af776936p+5Q, 0x1.7d0e6c4e24170b40a4b957521101p+5Q, -0x1.25c8439d2df89fa5007905a4ba91p+5Q, 0x1.f5b3e1ac9966686ed844c70c24b5p+4Q, -0x1.815ee05c85e8aa70418061334f18p+4Q, 0x1.ca4482f4236a5516d7f638fa35c2p+3Q, -0x1.050825dec75a966028608d17675cp+3Q, 0x1.1eeca8acc3a791ffedf80bed61f9p+2Q, -0x1.6df69657c972c8ebec75c92acc68p+0Q, 0x1.75a7ac677c4eee273d03fc67aefp-5Q, 0x1.ebd49f3810c888c69855753565b4p-5Q, -0x1.4344372e1b6fc786ddf90f2b7b7p-10Q, -0x1.20264586c6bb91b0aa0b4d1a440fp-18Q, 0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.041f759e862aa2196b99e328e887p+0Q, -0x1.96fe795439508b28db42654510a5p+2Q, 0x1.04a7fd5b5e5923f7f627bd68cd65p+4Q, -0x1.5c5ede521aae5e58438f371fca07p+4Q, 0x1.0b593b29c51bbefd0a21a466fe1fp+4Q, -0x1.3ddf512850559b028d830987fbd1p+3Q, 0x1.12f0bcbe3fa44419a6b523028ff1p+3Q, -0x1.d4ebfbf56d99633e38e575351ca4p+2Q, 0x1.d31827f76dc61557ae5c1ea5b48p+1Q, -0x1.6bf237312f18cf3b573ffc6b9b12p+0Q, 0x1.d1d5c0ac4dc0c7147f916f8d0ae2p-1Q, -0x1.794e93c6506dcbe26714d9f578b4p-2Q, -0x1.2e59e90e0a11c8b7ce9f91036827p-6Q, 0x1.26fbfe966bb82001d50ae9267a6ep-5Q, -0x1.e662faa96110f417469ce7821db9p-10Q, -0x1.a81802ebf94f0a8bc8124e278c59p-17Q, -0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.9024e0f887aa33deb80194db918fp-3Q, -0x1.3caa56e1c68f9f7ad07fd6873ac5p+0Q, 0x1.947e636a9e373f489450f99a494ep+1Q, -0x1.033a79f260cef0d616212b14ddbcp+2Q, 0x1.51b6c9e0d0443759a67a3c353747p+1Q, -0x1.0bd62fc1e045579c86e940e528b1p+0Q, 0x1.028bee5b6619ea0406791e99bae6p+0Q, -0x1.1620d9bfc03eb662d8d654bb92cfp+0Q, 0x1.b5ef819dccd9a27cb2716f32c63ap-2Q, -0x1.b7954b06be8aeb961960232cc863p-6Q, 0x1.054d18d1cc90c79a1ef0360672efp-4Q, -0x1.4817258dd284697ebc00b788ce26p-5Q, -0x1.8ce86e181d4254ae37719aa328a7p-6Q, 0x1.2926b8981e2a739eefaa1e5b74bcp-6Q, -0x1.20ae937e7a9305bbde13268ad288p-9Q, -0x1.e260b0ee2a092f8355b87bff022bp-16Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 10) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.12cb0ap-5f, 0x1.4e2c28p-1f, 0x1.1c4636p-1f, -0x1.85d2eep-2f, 0x1.9e3daep-3f, -0x1.494bcp-4f, 0x1.1d23ep-6f, 0x1.d4ed16p-10f, -0x1.2885ecp-9f, 0x1.94f202p-12f, 0x1.44e94ep-14f, -0x1.b37dfap-16f, 0x1.403906p-24f, 0x1.c9437p-24f, -0x1.58dbb8p-28f, 0x1.db3584p-37f, 0x1.afee7cp-44f, -0x1.098874p-59f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.43cfccp-3f, 0x1.f5f9c2p-1f, -0x1.94bc28p+0f, 0x1.61584ep-1f, -0x1.a2cb68p-2f, 0x1.eef0eap-3f, -0x1.ac223p-4f, 0x1.c84ec2p-6f, -0x1.213456p-8f, 0x1.2c315ap-10f, -0x1.f37546p-12f, 0x1.ce036p-15f, 0x1.06ba9ap-17f, 0x1.2eea96p-21f, 0x1.f125fap-26f, -0x1.51db7ap-33f, -0x1.3ced9ep-40f, 0x1.85b824p-55f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.2d6cb8p-1f, -0x1.01b00cp-2f, -0x1.0fd09ap+1f, 0x1.8bd77ap+1f, -0x1.c8684ep+0f, 0x1.6e6d86p-2f, 0x1.86e852p-2f, -0x1.9dcbe6p-2f, 0x1.55c762p-3f, -0x1.35a482p-6f, -0x1.51b88cp-7f, 0x1.076728p-8f, -0x1.67961ap-12f, -0x1.2b4a08p-15f, 0x1.bb4b6cp-19f, 0x1.3f418cp-28f, -0x1.0d99c2p-32f, 0x1.4b9c06p-46f, 0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.a8daep+0f, -0x1.8d688ep+2f, 0x1.317cc4p+3f, -0x1.00fa12p+3f, 0x1.9e984cp+1f, 0x1.0dcc3cp+1f, -0x1.41a436p+2f, 0x1.075a46p+2f, -0x1.9984ccp+0f, 0x1.9cf2e8p-5f, 0x1.c91578p-3f, -0x1.60b8bp-4f, 0x1.32422ap-7f, 0x1.dd5da6p-11f, -0x1.351528p-13f, -0x1.03c426p-22f, 0x1.7713ap-26f, -0x1.cd96fcp-39f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.a04f8p+1f, -0x1.18f0a4p+4f, 0x1.4ce384p+5f, -0x1.dc75fap+5f, 0x1.fdbc98p+5f, -0x1.eefc0cp+5f, 0x1.b92a7cp+5f, -0x1.2299d6p+5f, 0x1.6502b8p+3f, 0x1.11f34p+2f, -0x1.73b0a4p+2f, 0x1.244d46p+1f, -0x1.35466cp-2f, -0x1.fc20c8p-6f, 0x1.0d9c8cp-7f, 0x1.a4010cp-19f, -0x1.49b0cap-19f, 0x1.962a6ep-31f, -0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.55886ep+2f, -0x1.09d96p+5f, 0x1.505f98p+6f, -0x1.96ec36p+6f, 0x1.17b23p+5f, 0x1.fc1722p+5f, -0x1.b35f4ap+6f, 0x1.d17f22p+6f, -0x1.12118cp+7f, 0x1.207a74p+7f, -0x1.934736p+6f, 0x1.3fa55cp+5f, -0x1.959602p+2f, -0x1.9505e8p-1f, 0x1.43d264p-2f, -0x1.38e018p-10f, -0x1.968e84p-13f, 0x1.f5ed4cp-24f, -0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.f3cda2p+1f, -0x1.9eeda2p+4f, 0x1.260fdap+6f, -0x1.d673d8p+6f, 0x1.f01b3p+6f, -0x1.addb2cp+6f, 0x1.7db87cp+6f, -0x1.3f986p+6f, 0x1.ae7316p+5f, -0x1.fb5cc4p+4f, 0x1.259afcp+4f, -0x1.fe186ep+2f, 0x1.4d0298p+0f, 0x1.a1f0a6p-2f, -0x1.40c0aep-3f, 0x1.ba72fap-9f, 0x1.c193f2p-13f, -0x1.16b49ap-22f, 0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.3586dap+1f, -0x1.08fa64p+4f, 0x1.7c41fp+5f, -0x1.276b64p+6f, 0x1.14f1dp+6f, -0x1.83d54ap+5f, 0x1.4053c8p+5f, -0x1.209b54p+5f, 0x1.657834p+4f, -0x1.2ddf68p+3f, 0x1.38745p+2f, -0x1.4065c2p+1f, 0x1.6763c6p-4f, 0x1.181d4ep-1f, -0x1.87564p-3f, 0x1.843d22p-7f, 0x1.52be3cp-11f, -0x1.a79c62p-20f, -0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.7a3cf4p+0f, -0x1.48b25ep+3f, 0x1.cbd932p+4f, -0x1.37885ep+5f, 0x1.4db4fcp+4f, 0x1.74ac2ep+2f, -0x1.11ca3p+3f, 0x1.9fa6aap-4f, -0x1.8ceb32p+2f, 0x1.e686e4p+3f, -0x1.7e0b78p+3f, 0x1.7e1a34p+2f, -0x1.247b58p+2f, 0x1.b8a4e2p+1f, -0x1.4f17d6p+0f, 0x1.4b4084p-3f, 0x1.726478p-7f, -0x1.d74fd6p-15f, -0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.f6438ap-4f, -0x1.b7ba92p-1f, 0x1.3f509cp+1f, -0x1.eac616p+1f, 0x1.ae9244p+1f, -0x1.00d5dp+1f, 0x1.9413f4p+0f, -0x1.9bd984p+0f, 0x1.16aae2p+0f, -0x1.158768p-1f, 0x1.8145e4p-2f, -0x1.faf556p-3f, 0x1.8ec972p-4f, -0x1.49980ep-5f, 0x1.5730c4p-6f, -0x1.0952d6p-8f, -0x1.ce071ep-12f, 0x1.30a436p-18f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.12cb0a33640b5p-5, 0x1.4e2c27be21e0ep-1, 0x1.1c4636ef189edp-1, -0x1.85d2edb33e46ep-2, 0x1.9e3dada7662aap-3, -0x1.494bbf8e53bfcp-4, 0x1.1d23df75685c9p-6, 0x1.d4ed15a068488p-10, -0x1.2885ec2406341p-9, 0x1.94f202846521cp-12, 0x1.44e94de53f6f6p-14, -0x1.b37df99b75f09p-16, 0x1.403905df41d32p-24, 0x1.c94370d7ecc92p-24, -0x1.58dbb791a7fb7p-28, 0x1.db358382953c4p-37, 0x1.afee7cd299cd6p-44, -0x1.0988745ca3ec4p-59, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.43cfcb9d73923p-3, 0x1.f5f9c20090df3p-1, -0x1.94bc27297b9f9p+0, 0x1.61584eb9fe3a6p-1, -0x1.a2cb67ff996a9p-2, 0x1.eef0eaaf4989ep-3, -0x1.ac22308c89e82p-4, 0x1.c84ec23c8cdbep-6, -0x1.213456d8479d6p-8, 0x1.2c315a17e4064p-10, -0x1.f375455c5c9e6p-12, 0x1.ce035ff90a79bp-15, 0x1.06ba9aa22e87cp-17, 0x1.2eea964fb1e8p-21, 0x1.f125f98e34b08p-26, -0x1.51db791710beap-33, -0x1.3ced9d37da5d3p-40, 0x1.85b82452d9269p-55, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.2d6cb779664d4p-1, -0x1.01b00cc8d5d06p-2, -0x1.0fd0995df5aa3p+1, 0x1.8bd77a675e828p+1, -0x1.c8684eac579b4p+0, 0x1.6e6d859b2e73p-2, 0x1.86e851ba85835p-2, -0x1.9dcbe6db37906p-2, 0x1.55c762fd5a0dfp-3, -0x1.35a481158ac34p-6, -0x1.51b88ceed7adep-7, 0x1.0767285c8f106p-8, -0x1.67961ae7bb9ap-12, -0x1.2b4a0836ed60bp-15, 0x1.bb4b6c6c9a6fbp-19, 0x1.3f418b80d3d45p-28, -0x1.0d99c100eff2ep-32, 0x1.4b9c0643323fbp-46, 0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.a8dadfc02dd04p+0, -0x1.8d688d31d04a4p+2, 0x1.317cc4a10faf4p+3, -0x1.00fa12867f491p+3, 0x1.9e984b48af592p+1, 0x1.0dcc3bbac5e09p+1, -0x1.41a435a1df481p+2, 0x1.075a464fd9704p+2, -0x1.9984cb75bad51p+0, 0x1.9cf2e7196d1ccp-5, 0x1.c915787e3612ep-3, -0x1.60b8b0c3b1139p-4, 0x1.324229742ef44p-7, 0x1.dd5da666efa59p-11, -0x1.351528a4bd817p-13, -0x1.03c4250827b69p-22, 0x1.77139f17861ebp-26, -0x1.cd96fccfe9f0bp-39, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.a04f8069ea8b5p+1, -0x1.18f0a34d9f68ep+4, 0x1.4ce3831796a62p+5, -0x1.dc75f9b0b9a1p+5, 0x1.fdbc97313e6edp+5, -0x1.eefc0cdda4efap+5, 0x1.b92a7c1b6a88ap+5, -0x1.2299d502734c4p+5, 0x1.6502b707871dfp+3, 0x1.11f33f4ede648p+2, -0x1.73b0a319e688ap+2, 0x1.244d452e76301p+1, -0x1.35466c5650c62p-2, -0x1.fc20c8dd92f1ap-6, 0x1.0d9c8b9d476f8p-7, 0x1.a4010b80e5496p-19, -0x1.49b0c99eb9c65p-19, 0x1.962a6dd57b7dbp-31, -0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.55886d2f64381p+2, -0x1.09d95f1cede32p+5, 0x1.505f98e4bf277p+6, -0x1.96ec354b30307p+6, 0x1.17b23075f801p+5, 0x1.fc17211fa4d6fp+5, -0x1.b35f4a36b31c4p+6, 0x1.d17f22f2480f9p+6, -0x1.12118c5678b4dp+7, 0x1.207a74ca5ad8cp+7, -0x1.934735f943482p+6, 0x1.3fa55ba9206e4p+5, -0x1.959601005ec55p+2, -0x1.9505e84d98e61p-1, 0x1.43d2632e32cd1p-2, -0x1.38e017336cd06p-10, -0x1.968e83ac595b9p-13, 0x1.f5ed4b124df3bp-24, -0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.f3cda2f9b1354p+1, -0x1.9eeda12641b62p+4, 0x1.260fdaadd19ebp+6, -0x1.d673d80eeade5p+6, 0x1.f01b2fa154d03p+6, -0x1.addb2c4ad791ep+6, 0x1.7db87bda6fdf9p+6, -0x1.3f9860f6c4906p+6, 0x1.ae731643e9199p+5, -0x1.fb5cc3351ebc1p+4, 0x1.259afcbb8804dp+4, -0x1.fe186e46030ap+2, 0x1.4d0298c218927p+0, 0x1.a1f0a66406a12p-2, -0x1.40c0addfd8554p-3, 0x1.ba72fac37f088p-9, 0x1.c193f16bb678ep-13, -0x1.16b4995bb4f07p-22, 0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.3586d9a9e0e3ep+1, -0x1.08fa63342ecc2p+4, 0x1.7c41f01d6960dp+5, -0x1.276b64d22e135p+6, 0x1.14f1cf74869cp+6, -0x1.83d54ac636b82p+5, 0x1.4053c8a2c8d3p+5, -0x1.209b538b18df2p+5, 0x1.65783340b3783p+4, -0x1.2ddf670e51dfdp+3, 0x1.38744fdae2125p+2, -0x1.4065c212ba5cp+1, 0x1.6763c5d11b775p-4, 0x1.181d4d676ea1fp-1, -0x1.87564028831fcp-3, 0x1.843d22529bb4ap-7, 0x1.52be3b0b8c7afp-11, -0x1.a79c626c8654fp-20, -0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.7a3cf471120ecp+0, -0x1.48b25e52d274bp+3, 0x1.cbd93276e7d59p+4, -0x1.37885d5242031p+5, 0x1.4db4fb7a5ecdcp+4, 0x1.74ac2dca21f56p+2, -0x1.11ca2f9f0b7dp+3, 0x1.9fa6aaf0c8d98p-4, -0x1.8ceb3288570cdp+2, 0x1.e686e3fbc3fbfp+3, -0x1.7e0b780d60232p+3, 0x1.7e1a3482e160cp+2, -0x1.247b57131543cp+2, 0x1.b8a4e1c96768dp+1, -0x1.4f17d502240a9p+0, 0x1.4b408438ac869p-3, 0x1.7264788c9473ep-7, -0x1.d74fd6a021548p-15, -0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.f6438a3a8846p-4, -0x1.b7ba9255f9c78p-1, 0x1.3f509b3842149p+1, -0x1.eac616f0d4f87p+1, 0x1.ae9244fef585dp+1, -0x1.00d5d03220f3cp+1, 0x1.9413f3bab26fdp+0, -0x1.9bd9847a10dd5p+0, 0x1.16aae27d18a67p+0, -0x1.1587682f48216p-1, 0x1.8145e3cc3cfccp-2, -0x1.faf556e68970ep-3, 0x1.8ec972676b06bp-4, -0x1.49980ed40883dp-5, 0x1.5730c48bae56ap-6, -0x1.0952d6b855c64p-8, -0x1.ce071dd8df1efp-12, 0x1.30a4361eb25b4p-18, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0x8.9658519b205ab72p-8L, 0xa.71613df10f0723dp-4L, 0x8.e231b778c4f6662p-4L, -0xc.2e976d99f236ef3p-5L, 0xc.f1ed6d3b3154c33p-6L, -0xa.4a5dfc729dfe012p-7L, 0x8.e91efbab42e4488p-9L, 0xe.a768ad03424408ap-13L, -0x9.442f612031a0acp-12L, 0xc.a7901423290dc7ep-15L, 0xa.274a6f29fb7b195p-17L, -0xd.9befccdbaf8457bp-19L, 0xa.01c82efa0e991ep-27L, 0xe.4a1b86bf6648ca3p-27L, -0xa.c6ddbc8d3fdb61fp-31L, 0xe.d9ac1c14a9e22dfp-40L, 0xd.7f73e694ce6b23p-47L, -0x8.4c43a2e51f61f4ap-62L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xa.1e7e5ceb9c91909p-6L, 0xf.afce100486f966ap-4L, -0xc.a5e1394bdcfcb6dp-3L, 0xb.0ac275cff1d33d6p-4L, -0xd.165b3ffccb5480ap-5L, 0xf.7787557a4c4f14ep-6L, -0xd.611184644f4100cp-7L, 0xe.427611e466df078p-9L, -0x9.09a2b6c23cead05p-11L, 0x9.618ad0bf2031fa3p-13L, -0xf.9baa2ae2e4f30dfp-15L, 0xe.701affc853cdb21p-18L, 0x8.35d4d511743e237p-20L, 0x9.7754b27d8f401bap-24L, 0xf.892fcc71a583f65p-29L, -0xa.8edbc8b885f4c32p-36L, -0x9.e76ce9bed2e946cp-43L, 0xc.2dc12296c934a42p-58L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0x9.6b65bbcb326a224p-4L, -0x8.0d806646ae83286p-5L, -0x8.7e84caefad51526p-2L, 0xc.5ebbd33af4141bap-2L, -0xe.43427562bcd9f08p-3L, 0xb.736c2cd97397c01p-5L, 0xc.37428dd42c1a763p-5L, -0xc.ee5f36d9bc83386p-5L, 0xa.ae3b17ead06fb26p-6L, -0x9.ad2408ac5619da4p-9L, -0xa.8dc46776bd6ee4dp-10L, 0x8.3b3942e4788322ap-11L, -0xb.3cb0d73ddccfdfep-15L, -0x9.5a5041b76b0571dp-18L, 0xd.da5b6364d37d7c6p-22L, 0x9.fa0c5c069ea261fp-31L, -0x8.6cce08077f97363p-35L, 0xa.5ce0321991fd8ep-49L, 0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xd.46d6fe016e82146p-3L, -0xc.6b44698e825210ap-1L, 0x9.8be625087d79ffdp+0L, -0x8.07d09433fa48997p+0L, 0xc.f4c25a457ac90c1p-2L, 0x8.6e61ddd62f0442fp-2L, -0xa.0d21ad0efa407b6p-1L, 0x8.3ad2327ecb81caap-1L, -0xc.cc265badd6a86efp-3L, 0xc.e79738cb68e5e97p-8L, 0xe.48abc3f1b09716ap-6L, -0xb.05c5861d889c6fap-7L, 0x9.92114ba177a20b1p-10L, 0xe.eaed33377d2c762p-14L, -0x9.a8a94525ec0bb0bp-16L, -0x8.1e2128413db47b5p-25L, 0xb.b89cf8bc30f58d6p-29L, -0xe.6cb7e67f4f857ddp-42L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xd.027c034f545a722p-2L, -0x8.c7851a6cfb47268p+1L, 0xa.671c18bcb530f7bp+2L, -0xe.e3afcd85cd0820fp+2L, 0xf.ede4b989f376b43p+2L, -0xf.77e066ed277d141p+2L, 0xd.c953e0db5444e19p+2L, -0x9.14cea8139a61e4ep+2L, 0xb.2815b83c38efa28p+0L, 0x8.8f99fa76f323eadp-1L, -0xb.9d8518cf3444f4dp-1L, 0x9.226a2973b180497p-2L, -0x9.aa3362b28630f09p-5L, -0xf.e10646ec978cdc7p-9L, 0x8.6ce45cea3b7be89p-10L, 0xd.20085c072a4ae87p-22L, -0xa.4d864cf5ce32429p-22L, 0xc.b1536eabdbed537p-34L, -0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xa.ac43697b21c05d7p-1L, -0x8.4ecaf8e76f18fe7p+2L, 0xa.82fcc725f93bb38p+3L, -0xc.b761aa5981834ffp+3L, 0x8.bd9183afc008112p+2L, 0xf.e0b908fd26b79fbp+2L, -0xd.9afa51b598e1c25p+3L, 0xe.8bf91792407c46p+3L, -0x8.908c62b3c5a6a21p+4L, 0x9.03d3a652d6c5fe1p+4L, -0xc.9a39afca1a40e4p+3L, 0x9.fd2add490371c09p+2L, -0xc.acb00802f62a439p-1L, -0xc.a82f426cc7309e8p-4L, 0xa.1e93197196686f8p-5L, -0x9.c700b99b66830a5p-13L, -0xc.b4741d62cadc637p-16L, 0xf.af6a58926f9d684p-27L, -0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xf.9e6d17cd89aa012p-2L, -0xc.f76d09320db0f5ep+1L, 0x9.307ed56e8cf58f8p+3L, -0xe.b39ec07756f2504p+3L, 0xf.80d97d0aa681a95p+3L, -0xd.6ed96256bc8f10cp+3L, 0xb.edc3ded37efc53ap+3L, -0x9.fcc307b62482f39p+3L, 0xd.7398b21f48cc731p+2L, -0xf.dae619a8f5e0bb5p+1L, 0x9.2cd7e5dc4026b75p+1L, -0xf.f0c37230184fee7p-1L, 0xa.6814c610c493aa3p-3L, 0xd.0f8533203509157p-5L, -0xa.06056efec2aa1d8p-6L, 0xd.d397d61bf843e3dp-12L, 0xe.0c9f8b5db3c72d8p-16L, -0x8.b5a4cadda783993p-25L, 0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0x9.ac36cd4f071eccfp-2L, -0x8.47d319a17660e21p+1L, 0xb.e20f80eb4b065edp+2L, -0x9.3b5b2691709a7f2p+3L, 0x8.a78e7ba434e03bep+3L, -0xc.1eaa5631b5c1221p+2L, 0xa.029e45164697e35p+2L, -0x9.04da9c58c6f9312p+2L, 0xb.2bc19a059bc163fp+1L, -0x9.6efb38728efe53fp+0L, 0x9.c3a27ed71092bccp-1L, -0xa.032e1095d2e022bp-2L, 0xb.3b1e2e88dbba717p-7L, 0x8.c0ea6b3b750f81fp-4L, -0xc.3ab2014418fdea7p-6L, 0xc.21e91294dda4d8cp-10L, 0xa.95f1d85c63d7aadp-14L, -0xd.3ce3136432a75eep-23L, -0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0xb.d1e7a38890760ccp-3L, -0xa.4592f29693a58f2p+0L, 0xe.5ec993b73eacb21p+1L, -0x9.bc42ea921018403p+2L, 0xa.6da7dbd2f66dc91p+1L, 0xb.a5616e510faadd9p-1L, -0x8.8e517cf85be82f9p+0L, 0xc.fd35578646cc028p-7L, -0xc.67599442b866996p-1L, 0xf.34371fde1fdf9acp+0L, -0xb.f05bc06b0118d26p+0L, 0xb.f0d1a4170b05fe8p-1L, -0x9.23dab898aa1de5fp-1L, 0xd.c5270e4b3b4644bp-2L, -0xa.78bea8112054738p-3L, 0xa.5a0421c564344a9p-6L, 0xb.9323c464a39ee53p-10L, -0xe.ba7eb5010aa3e4p-18L, -0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0xf.b21c51d44230049p-7L, -0xd.bdd492afce3bd22p-4L, 0x9.fa84d9c210a45adp-2L, -0xf.5630b786a7c34dfp-2L, 0xd.749227f7ac2e953p-2L, -0x8.06ae8191079dde4p-2L, 0xc.a09f9dd5937e42dp-3L, -0xc.decc23d086ea9cp-3L, 0x8.b55713e8c533b1cp-3L, -0x8.ac3b417a410ae11p-4L, 0xc.0a2f1e61e7e5e62p-5L, -0xf.d7aab7344b86da8p-6L, 0xc.764b933b583557ap-7L, -0xa.4cc076a0441e56ep-8L, 0xa.b986245d72b5275p-9L, -0x8.4a96b5c2ae31c5dp-11L, -0xe.7038eec6f8f774fp-15L, 0x9.8521b0f592d9c7fp-21L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.12cb0a33640b56e423474a1328fcp-5Q, 0x1.4e2c27be21e0e479b88ad485160cp-1Q, 0x1.1c4636ef189eccc399682014d9c9p-1Q, -0x1.85d2edb33e46dde58a5a504a9aap-2Q, 0x1.9e3dada7662a9865be6b99b2427ep-3Q, -0x1.494bbf8e53bfc023fe7e0915ab57p-4Q, 0x1.1d23df75685c890f2df5ab229b8bp-6Q, 0x1.d4ed15a06848811344377f87f82cp-10Q, -0x1.2885ec240634157f42540c2ec5a5p-9Q, 0x1.94f202846521b8fb6dee9352c083p-12Q, 0x1.44e94de53f6f632a67cbb5854d2p-14Q, -0x1.b37df99b75f08af621654dd8f548p-16Q, 0x1.403905df41d323c0c33072aaf467p-24Q, 0x1.c94370d7ecc9194547661e1cf7bbp-24Q, -0x1.58dbb791a7fb6c3e33eb2a850b1bp-28Q, 0x1.db358382953c45bea25d9891f3a2p-37Q, 0x1.afee7cd299cd64600d2193c416e5p-44Q, -0x1.0988745ca3ec3e945e33c4d42e0fp-59Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.43cfcb9d739232114ccf7b42f288p-3Q, 0x1.f5f9c20090df2cd39669639ec82fp-1Q, -0x1.94bc27297b9f96d98ca06b8b7823p+0Q, 0x1.61584eb9fe3a67acec590408bcaep-1Q, -0x1.a2cb67ff996a90130726bb55186ep-2Q, 0x1.eef0eaaf4989e29be4ba95e2f142p-3Q, -0x1.ac22308c89e820172f07afea77ffp-4Q, 0x1.c84ec23c8cdbe0f0d252ca4a6014p-6Q, -0x1.213456d8479d5a0a002e8a35429fp-8Q, 0x1.2c315a17e4063f457d1b74aaa599p-10Q, -0x1.f375455c5c9e61be4fa670796ca9p-12Q, 0x1.ce035ff90a79b6418f9714e01ff9p-15Q, 0x1.06ba9aa22e87c46e9b5b517bfa1bp-17Q, 0x1.2eea964fb1e803735b7cbdec44b7p-21Q, 0x1.f125f98e34b07ec90a3117922e68p-26Q, -0x1.51db791710be9863d69c55fb8fa2p-33Q, -0x1.3ced9d37da5d28d7002692ae72b6p-40Q, 0x1.85b82452d92694835d294f84ab3ep-55Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.2d6cb779664d44484073db45451fp-1Q, -0x1.01b00cc8d5d0650bb7d9e87582f1p-2Q, -0x1.0fd0995df5aa2a4c5f39f931817fp+1Q, 0x1.8bd77a675e82837408b645325c9ap+1Q, -0x1.c8684eac579b3e1019c502de86a6p+0Q, 0x1.6e6d859b2e72f80278552877475p-2Q, 0x1.86e851ba85834ec58a127f16fee8p-2Q, -0x1.9dcbe6db3790670c84be0eec3058p-2Q, 0x1.55c762fd5a0df64b9c06acd53251p-3Q, -0x1.35a481158ac33b4716b6e91c54eep-6Q, -0x1.51b88ceed7addc9a97168ddbee02p-7Q, 0x1.0767285c8f10645316c4c221faa4p-8Q, -0x1.67961ae7bb99fbfcc0d26144bd1bp-12Q, -0x1.2b4a0836ed60ae3a1490ad53ccb1p-15Q, 0x1.bb4b6c6c9a6faf8c7dd84be23d19p-19Q, 0x1.3f418b80d3d44c3e61fe90bb84e6p-28Q, -0x1.0d99c100eff2e6c61779a48505a8p-32Q, 0x1.4b9c0643323fb1c0ce2d07b0b0abp-46Q, 0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.a8dadfc02dd0428b41cd0c1bc321p+0Q, -0x1.8d688d31d04a4214094b65c4debbp+2Q, 0x1.317cc4a10faf3ff9c44aa0718d64p+3Q, -0x1.00fa12867f49132d26f6109f247ep+3Q, 0x1.9e984b48af59218135976f5867cdp+1Q, 0x1.0dcc3bbac5e0885ef946fb57406ap+1Q, -0x1.41a435a1df480f6b501eca709ce9p+2Q, 0x1.075a464fd9703954dc501fa92bp+2Q, -0x1.9984cb75bad50ddd23b7c6a93e49p+0Q, 0x1.9cf2e7196d1cbd2ef1ba36ca60f1p-5Q, 0x1.c915787e3612e2d3277f4d85346ap-3Q, -0x1.60b8b0c3b1138df4716646253fep-4Q, 0x1.324229742ef4416185466d935a63p-7Q, 0x1.dd5da666efa58ec47474db0b7be4p-11Q, -0x1.351528a4bd8176153593c8a5aa54p-13Q, -0x1.03c4250827b68f69b983f44799e9p-22Q, 0x1.77139f17861eb1acd308dc031a76p-26Q, -0x1.cd96fccfe9f0afba4ba09dac4612p-39Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.a04f8069ea8b4e447d853aa59d25p+1Q, -0x1.18f0a34d9f68e4d06a24b5ca38e6p+4Q, 0x1.4ce3831796a61ef6af32be9c5755p+5Q, -0x1.dc75f9b0b9a1041da91933798254p+5Q, 0x1.fdbc97313e6ed6865f9096b019f1p+5Q, -0x1.eefc0cdda4efa281b21fc8a20dabp+5Q, 0x1.b92a7c1b6a889c31c867c0d1a21p+5Q, -0x1.2299d502734c3c9b7e4c9a715a66p+5Q, 0x1.6502b707871df45089990b52d40bp+3Q, 0x1.11f33f4ede647d59a412fb3a4509p+2Q, -0x1.73b0a319e6889e9aa2e82f291565p+2Q, 0x1.244d452e7630092d6c490c8ed14ap+1Q, -0x1.35466c5650c61e120220d047deb3p-2Q, -0x1.fc20c8dd92f19b8d6ed30b21296p-6Q, 0x1.0d9c8b9d476f7d129de2a5d31814p-7Q, 0x1.a4010b80e5495d0ed9331143d19p-19Q, -0x1.49b0c99eb9c648511ea730b736bdp-19Q, 0x1.962a6dd57b7daa6dc5023a342508p-31Q, -0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.55886d2f64380baeb961079552b9p+2Q, -0x1.09d95f1cede31fcd15d2c7ff10a6p+5Q, 0x1.505f98e4bf27766f2f4d3b847255p+6Q, -0x1.96ec354b303069fd664614814e6ep+6Q, 0x1.17b23075f8010224c348afc6cdeep+5Q, 0x1.fc17211fa4d6f3f6a3261645172p+5Q, -0x1.b35f4a36b31c3849a4f0629dcf72p+6Q, 0x1.d17f22f2480f88bf1a425e07fe7dp+6Q, -0x1.12118c5678b4d442de8a0eede2e7p+7Q, 0x1.207a74ca5ad8bfc2ee103b7b451ap+7Q, -0x1.934735f943481c7f74f56dd50a8cp+6Q, 0x1.3fa55ba9206e3812ee32da23b318p+5Q, -0x1.959601005ec548729558e21bc187p+2Q, -0x1.9505e84d98e613cfe4ec3f6e6e46p-1Q, 0x1.43d2632e32cd0df0bb4a95d5e374p-2Q, -0x1.38e017336cd0614a6ed2ffd6195cp-10Q, -0x1.968e83ac595b8c6d9c1729fe9a6bp-13Q, 0x1.f5ed4b124df3ad0700a32c83080bp-24Q, -0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.f3cda2f9b135402362018238b572p+1Q, -0x1.9eeda12641b61ebb7d840ed67404p+4Q, 0x1.260fdaadd19eb1efc078d802d296p+6Q, -0x1.d673d80eeade4a070ce0e70cb866p+6Q, 0x1.f01b2fa154d0352990b16aadcb37p+6Q, -0x1.addb2c4ad791e217324c7ab3e2p+6Q, 0x1.7db87bda6fdf8a74bb08213eb30cp+6Q, -0x1.3f9860f6c4905e7132b1781da9d9p+6Q, 0x1.ae731643e9198e62164858360f7bp+5Q, -0x1.fb5cc3351ebc176988bf64799f2ap+4Q, 0x1.259afcbb8804d6eae552ab39b9b8p+4Q, -0x1.fe186e460309fdcedab5ec39f27p+2Q, 0x1.4d0298c21892754606c3d8eb8426p+0Q, 0x1.a1f0a66406a122ae435ed98cb7f1p-2Q, -0x1.40c0addfd85543af466cc7e3fef1p-3Q, 0x1.ba72fac37f087c7aee39dd7f1012p-9Q, 0x1.c193f16bb678e5af6510cd5c2355p-13Q, -0x1.16b4995bb4f073263c20b5bede1p-22Q, 0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.3586d9a9e0e3d99d2b93a0256171p+1Q, -0x1.08fa63342ecc1c41a46b366506c6p+4Q, 0x1.7c41f01d6960cbda171d22bf8adfp+5Q, -0x1.276b64d22e134fe3903178671e17p+6Q, 0x1.14f1cf74869c077b4ddd6015e432p+6Q, -0x1.83d54ac636b8244258f1e3dbaa06p+5Q, 0x1.4053c8a2c8d2fc6aef1621f86f1fp+5Q, -0x1.209b538b18df262448ee3cf880b8p+5Q, 0x1.65783340b3782c7d703e94c62d9ep+4Q, -0x1.2ddf670e51dfca7d85e8eebe7331p+3Q, 0x1.38744fdae212579791ea9e6fe9ebp+2Q, -0x1.4065c212ba5c0456783637883b7p+1Q, 0x1.6763c5d11b774e2d99bb556bddebp-4Q, 0x1.181d4d676ea1f03e7d8c57b474fp-1Q, -0x1.87564028831fbd4eb29dad94592bp-3Q, 0x1.843d22529bb49b17cf15d63953b5p-7Q, 0x1.52be3b0b8c7af55af9d914a987b4p-11Q, -0x1.a79c626c8654ebdb591ae56046e7p-20Q, -0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.7a3cf471120ec198713995bd540fp+0Q, -0x1.48b25e52d274b1e47c88655cec4bp+3Q, 0x1.cbd93276e7d596419b912e942e9bp+4Q, -0x1.37885d5242030806d66e5d6872f8p+5Q, 0x1.4db4fb7a5ecdb9227e88240cd0ebp+4Q, 0x1.74ac2dca21f55bb24886bcb3619p+2Q, -0x1.11ca2f9f0b7d05f1c1618e42e113p+3Q, 0x1.9fa6aaf0c8d980502f8417a8ec05p-4Q, -0x1.8ceb3288570cd32c2591a09c3995p+2Q, 0x1.e686e3fbc3fbf35811a68ef5ccfap+3Q, -0x1.7e0b780d60231a4c786ec6e1bf8dp+3Q, 0x1.7e1a3482e160bfcf5bb19766022ep+2Q, -0x1.247b57131543bcbee8b060f013c2p+2Q, 0x1.b8a4e1c96768c895a2f367776819p+1Q, -0x1.4f17d502240a8e6f55c9e0d7f0cfp+0Q, 0x1.4b408438ac8689521da23fc4a9bap-3Q, 0x1.7264788c9473dca575636e2ed518p-7Q, -0x1.d74fd6a021547c7f9f7dd3ce0b46p-15Q, -0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.f6438a3a88460091e0ea851f2c9bp-4Q, -0x1.b7ba9255f9c77a442c3315faffdep-1Q, 0x1.3f509b3842148b5acdb05e01c1ap+1Q, -0x1.eac616f0d4f869be16ce06dc94d2p+1Q, 0x1.ae9244fef585d2a56f1cb6a3721cp+1Q, -0x1.00d5d03220f3bbc8a51448af242cp+1Q, 0x1.9413f3bab26fc85ab60692f2dd27p+0Q, -0x1.9bd9847a10dd537f2de875e80d0ep+0Q, 0x1.16aae27d18a67638fdda8ca2a252p+0Q, -0x1.1587682f48215c21c42b36d7c2d1p-1Q, 0x1.8145e3cc3cfcbcc409c895e52cdp-2Q, -0x1.faf556e68970db4f5325d215482dp-3Q, 0x1.8ec972676b06aaf4a1909e62a833p-4Q, -0x1.49980ed40883cadc7b702f738062p-5Q, 0x1.5730c48bae56a4ea4426b04ea74bp-6Q, -0x1.0952d6b855c638b977457b5132a1p-8Q, -0x1.ce071dd8df1eee9d16331f09e775p-12Q, 0x1.30a4361eb25b38fd9207742eecebp-18Q, -0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 11) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.f82d86p-7f, 0x1.da87aep-2f, 0x1.a074eap-1f, -0x1.d3dbc2p-2f, 0x1.07dc8cp-2f, -0x1.17e06ap-3f, 0x1.d853p-5f, -0x1.071062p-6f, 0x1.0182ap-9f, 0x1.d91cd2p-14f, 0x1.f2bfaap-15f, -0x1.d7e9bap-15f, 0x1.5c274ep-18f, 0x1.63562ep-20f, -0x1.0af58p-26f, 0x1.1409ccp-28f, -0x1.160128p-35f, -0x1.4f944ep-42f, -0x1.ad914cp-53f, -0x1.65d844p-70f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.4988f6p-4f, 0x1.cd9786p-1f, -0x1.f03418p-1f, -0x1.075e3cp-3f, 0x1.303436p-3f, -0x1.71d07ep-12f, -0x1.321c6cp-4f, 0x1.0f00fp-4f, -0x1.fec808p-6f, 0x1.092c0ap-7f, -0x1.185782p-11f, -0x1.693106p-12f, 0x1.a2acf4p-14f, -0x1.c4d82p-19f, -0x1.e02848p-20f, 0x1.7db784p-25f, 0x1.739c16p-30f, -0x1.d9433ap-36f, 0x1.651bd6p-46f, 0x1.29783p-62f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.5c07e6p-2f, 0x1.307a2ap-1f, -0x1.a41fd4p+1f, 0x1.08f33p+2f, -0x1.6a2a88p+1f, 0x1.5f04aep+0f, -0x1.150c78p-2f, -0x1.78ed1cp-3f, 0x1.4f999p-3f, -0x1.41156ep-5f, -0x1.6c5862p-7f, 0x1.21e04ap-7f, -0x1.cd1c36p-10f, 0x1.af648p-17f, 0x1.0136c4p-15f, -0x1.6928bp-19f, -0x1.6377bp-25f, 0x1.64323cp-30f, -0x1.6fb512p-40f, -0x1.32449ep-55f, 0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.1c297ep+0f, -0x1.a72bc4p+1f, 0x1.8e9818p+1f, -0x1.8f506ep-1f, 0x1.02364ap-1f, -0x1.0fb22ap+1f, 0x1.80597ep+1f, -0x1.38ad98p+1f, 0x1.339d14p+0f, -0x1.08b97cp-2f, -0x1.3f8a26p-4f, 0x1.2b8bd2p-4f, -0x1.35b764p-6f, 0x1.f33a86p-12f, 0x1.1c307ep-11f, -0x1.950dccp-15f, -0x1.f90492p-21f, 0x1.8b6cb6p-25f, -0x1.21deep-34f, -0x1.e2c778p-49f, 0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.51d8dcp+1f, -0x1.c33b04p+3f, 0x1.0e7952p+5f, -0x1.9aba4p+5f, 0x1.f144c4p+5f, -0x1.17ce56p+6f, 0x1.1abf8ep+6f, -0x1.aeeda8p+5f, 0x1.6d1976p+4f, 0x1.64c18ap+1f, -0x1.4b3d36p+3f, 0x1.8e7526p+2f, -0x1.9e20d2p+0f, 0x1.8f714p-5f, 0x1.002e9ap-4f, -0x1.22b5dp-7f, -0x1.695b64p-13f, 0x1.ba1b22p-17f, -0x1.df066ep-26f, -0x1.8ec07p-39f, 0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.553842p+2f, -0x1.1648a2p+5f, 0x1.7429c4p+6f, -0x1.d2259cp+6f, 0x1.36cbd8p+4f, 0x1.4a282ep+7f, -0x1.2e04acp+8f, 0x1.5f18c6p+8f, -0x1.80bbfp+8f, 0x1.90ad4cp+8f, -0x1.4159ep+8f, 0x1.4eba06p+7f, -0x1.6db5a8p+5f, 0x1.66137p-1f, 0x1.7dbb7ep+1f, -0x1.1851aap-1f, -0x1.230c94p-7f, 0x1.7e95e2p-10f, -0x1.136d24p-18f, -0x1.ca2f1p-31f, -0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.43e57ap+2f, -0x1.201578p+5f, 0x1.be9ebp+6f, -0x1.917bfcp+7f, 0x1.e7564ap+7f, -0x1.dd46b6p+7f, 0x1.c24b2cp+7f, -0x1.9299f8p+7f, 0x1.2da088p+7f, -0x1.7f74fcp+6f, 0x1.cafceap+5f, -0x1.cfad0ap+4f, 0x1.f4f5eap+2f, 0x1.14b6dap+0f, -0x1.5e908ap+0f, 0x1.1ee7d4p-2f, -0x1.1e668p-11f, -0x1.81c424p-10f, 0x1.28216ep-18f, 0x1.ebdb46p-30f, -0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.0e918ep+2f, -0x1.f54b1ep+4f, 0x1.8cc936p+6f, -0x1.5d87f4p+7f, 0x1.7fbdfcp+7f, -0x1.356154p+7f, 0x1.00a2fp+7f, -0x1.d61ad6p+6f, 0x1.4b192ep+6f, -0x1.2bd7eep+5f, 0x1.d23af8p+3f, -0x1.a5a3f6p+2f, -0x1.0097bap+0f, 0x1.29abecp+2f, -0x1.6d63c6p+1f, 0x1.521b96p-1f, -0x1.89a1eap-6f, -0x1.cc0f8cp-8f, 0x1.9e94aap-16f, 0x1.5739aap-26f, 0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.c2a5p+0f, -0x1.a9c968p+3f, 0x1.5bbb8cp+5f, -0x1.452574p+6f, 0x1.91c80cp+6f, -0x1.84d65cp+6f, 0x1.678e1ep+6f, -0x1.493302p+6f, 0x1.14413cp+6f, -0x1.b51d9ap+5f, 0x1.483818p+5f, -0x1.a72562p+4f, 0x1.e00e48p+3f, -0x1.1522f8p+3f, 0x1.152962p+2f, -0x1.3d9d88p+0f, 0x1.3f1c58p-4f, 0x1.b3efb4p-6f, -0x1.baa15ap-13f, -0x1.6c2d94p-22f, 0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.480f32p-1f, -0x1.38fe3p+2f, 0x1.f8f412p+3f, -0x1.bc60c4p+4f, 0x1.d3d44ap+4f, -0x1.536d7p+4f, 0x1.0953a8p+4f, -0x1.0c0dcap+4f, 0x1.af56b2p+3f, -0x1.f62894p+2f, 0x1.3ef834p+2f, -0x1.c75ab6p+1f, 0x1.cb38bcp+0f, -0x1.624786p-1f, 0x1.61b17ap-2f, -0x1.0b6248p-3f, 0x1.c9b3fp-8f, 0x1.7c528ap-8f, -0x1.0c4738p-13f, -0x1.b40e78p-22f, 0x0p+0f}; + } + if constexpr (order == 10) { + return {0x0p+0f, 0x1.8a25fep-4f, -0x1.79dddep-1f, 0x1.2f9284p+1f, -0x1.04a532p+2f, 0x1.fbc728p+1f, -0x1.2e8a4ep+1f, 0x1.96ff88p+0f, -0x1.db8c8p+0f, 0x1.8867ecp+0f, -0x1.7019bcp-1f, 0x1.a30d2p-2f, -0x1.7340e8p-2f, 0x1.68181ap-3f, -0x1.50a6f6p-5f, 0x1.8d3b22p-6f, -0x1.b7227ep-7f, -0x1.a3115p-12f, 0x1.71e7a4p-10f, -0x1.4eea02p-14f, -0x1.09aedap-21f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.f82d860ed311dp-7, 0x1.da87adf545deap-2, 0x1.a074ea6831a18p-1, -0x1.d3dbc22db3363p-2, 0x1.07dc8c4b5880ap-2, -0x1.17e06a0deb07p-3, 0x1.d85300a8e9a5ap-5, -0x1.0710616766f9ep-6, 0x1.0182a0c9a44bbp-9, 0x1.d91cd19825f46p-14, 0x1.f2bfaace30f59p-15, -0x1.d7e9ba7b3ac47p-15, 0x1.5c274e2e04a65p-18, 0x1.63562e1b18da8p-20, -0x1.0af5800900cccp-26, 0x1.1409cb495cfabp-28, -0x1.1601287f207ddp-35, -0x1.4f944d6c974a1p-42, -0x1.ad914b3b9c645p-53, -0x1.65d8440cb590ap-70, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.4988f615d8fc2p-4, 0x1.cd9786f046dbdp-1, -0x1.f034187a5d753p-1, -0x1.075e3bcf1d71fp-3, 0x1.303436308c6p-3, -0x1.71d07ef81053fp-12, -0x1.321c6b5970b99p-4, 0x1.0f00f07475782p-4, -0x1.fec807d6bcde3p-6, 0x1.092c0960e80ecp-7, -0x1.1857810566103p-11, -0x1.693105a2bb707p-12, 0x1.a2acf3b1f9d07p-14, -0x1.c4d81f25bbab6p-19, -0x1.e0284772a21efp-20, 0x1.7db784c0b0131p-25, 0x1.739c15dc80c55p-30, -0x1.d9433a2520a2ep-36, 0x1.651bd505e5aabp-46, 0x1.29782f98b98d9p-62, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.5c07e5083d709p-2, 0x1.307a2a8e783eap-1, -0x1.a41fd4c6e5304p+1, 0x1.08f3303fd9b5fp+2, -0x1.6a2a8758fd08cp+1, 0x1.5f04ae9c9034bp+0, -0x1.150c77d31565dp-2, -0x1.78ed1cb9b0ec2p-3, 0x1.4f99902d11603p-3, -0x1.41156e1c846c4p-5, -0x1.6c5861062a836p-7, 0x1.21e04958552e7p-7, -0x1.cd1c35ab2ad93p-10, 0x1.af6480e4adc47p-17, 0x1.0136c3fb4b19cp-15, -0x1.6928b0e495d08p-19, -0x1.6377af73884cp-25, 0x1.64323c063686ap-30, -0x1.6fb51174aa8e3p-40, -0x1.32449da1b9609p-55, 0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.1c297e1a72297p+0, -0x1.a72bc3c00615fp+1, 0x1.8e98178e99b32p+1, -0x1.8f506e2a5e0ebp-1, 0x1.02364935e2223p-1, -0x1.0fb2290536b32p+1, 0x1.80597d49465bfp+1, -0x1.38ad9781c7501p+1, 0x1.339d144fd9551p+0, -0x1.08b97b33caeccp-2, -0x1.3f8a268debfb7p-4, 0x1.2b8bd1a4fd0ebp-4, -0x1.35b764060a714p-6, 0x1.f33a86db42466p-12, 0x1.1c307da269deep-11, -0x1.950dcb7c8e982p-15, -0x1.f904916865d4dp-21, 0x1.8b6cb6bf7586bp-25, -0x1.21dedfd7476c5p-34, -0x1.e2c7778c519ap-49, 0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.51d8dbccf9207p+1, -0x1.c33b049bfbce6p+3, 0x1.0e79522ccf3ddp+5, -0x1.9aba40cee29c1p+5, 0x1.f144c4df7513dp+5, -0x1.17ce56ad9d902p+6, 0x1.1abf8d1adcc3ep+6, -0x1.aeeda88b7fe88p+5, 0x1.6d1975fc2f42ep+4, 0x1.64c18afe2844cp+1, -0x1.4b3d36d8f9771p+3, 0x1.8e75251a7f5bfp+2, -0x1.9e20d1654131ap+0, 0x1.8f713f264dac3p-5, 0x1.002e9aac59197p-4, -0x1.22b5d07d79f25p-7, -0x1.695b63166e6d6p-13, 0x1.ba1b21857af83p-17, -0x1.df066d7576ffdp-26, -0x1.8ec06f9de2f7dp-39, 0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.553841cb8504cp+2, -0x1.1648a261cfac8p+5, 0x1.7429c31b8bcdcp+6, -0x1.d2259be1a7819p+6, 0x1.36cbd86221f4cp+4, 0x1.4a282d1320ed7p+7, -0x1.2e04ab290e2ep+8, 0x1.5f18c6755ba05p+8, -0x1.80bbefefb8959p+8, 0x1.90ad4b61c673ep+8, -0x1.4159e0e62036cp+8, 0x1.4eba06db33d53p+7, -0x1.6db5a82568a44p+5, 0x1.6613709f48646p-1, 0x1.7dbb7d4fa2b47p+1, -0x1.1851a9519e35ep-1, -0x1.230c93cadc0b8p-7, 0x1.7e95e283d8ce3p-10, -0x1.136d2374e3712p-18, -0x1.ca2f0f4b75006p-31, -0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.43e579b56aec7p+2, -0x1.2015783789a13p+5, 0x1.be9eb07640a6ep+6, -0x1.917bfbcd50104p+7, 0x1.e7564ac670465p+7, -0x1.dd46b6e14bd99p+7, 0x1.c24b2cb18bb3p+7, -0x1.9299f7098407ep+7, 0x1.2da088f392f17p+7, -0x1.7f74fc0a8fbbcp+6, 0x1.cafceab55c222p+5, -0x1.cfad0a751fefdp+4, 0x1.f4f5eade96654p+2, 0x1.14b6d949957a5p+0, -0x1.5e908a00f74dap+0, 0x1.1ee7d490234e2p-2, -0x1.1e667fbdaff18p-11, -0x1.81c4231f27f24p-10, 0x1.28216d550397dp-18, 0x1.ebdb45ca159a6p-30, -0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.0e918e0751a5fp+2, -0x1.f54b1dc71e94cp+4, 0x1.8cc935a5962f3p+6, -0x1.5d87f4fd9af88p+7, 0x1.7fbdfc1f5c92bp+7, -0x1.356154b8ce2cp+7, 0x1.00a2f00b6f36p+7, -0x1.d61ad68084632p+6, 0x1.4b192d711636ap+6, -0x1.2bd7eeccbbd8bp+5, 0x1.d23af72a92131p+3, -0x1.a5a3f6309aca8p+2, -0x1.0097ba319005fp+0, 0x1.29abec5ca24e5p+2, -0x1.6d63c669ef72ap+1, 0x1.521b96f1f012p-1, -0x1.89a1e9b6409a4p-6, -0x1.cc0f8b0b31976p-8, 0x1.9e94a90cc2ee8p-16, 0x1.5739a9ee6eb1dp-26, 0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.c2a4ffe966119p+0, -0x1.a9c9682497d43p+3, 0x1.5bbb8c487ae5cp+5, -0x1.452573aebb3bfp+6, 0x1.91c80b52c3671p+6, -0x1.84d65b83affb6p+6, 0x1.678e1d36597aep+6, -0x1.4933025bdb689p+6, 0x1.14413c8e18076p+6, -0x1.b51d99f667842p+5, 0x1.483818775e0cbp+5, -0x1.a72562d5d8065p+4, 0x1.e00e48c9f7714p+3, -0x1.1522f77734c2fp+3, 0x1.152961e6e0f57p+2, -0x1.3d9d88a64fae4p+0, 0x1.3f1c58e4e2a68p-4, 0x1.b3efb441a4e1bp-6, -0x1.baa159e67dd4fp-13, -0x1.6c2d94cde3ae2p-22, 0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.480f31520e3f3p-1, -0x1.38fe2f09aac58p+2, 0x1.f8f411bacc9f9p+3, -0x1.bc60c3b54f90bp+4, 0x1.d3d44a6a16adbp+4, -0x1.536d6f833b667p+4, 0x1.0953a7a524acbp+4, -0x1.0c0dca303e8e2p+4, 0x1.af56b1534f29ep+3, -0x1.f628948ceff74p+2, 0x1.3ef834c3289aap+2, -0x1.c75ab5e1afc76p+1, 0x1.cb38bb2c5f4bfp+0, -0x1.624785bf15dbep-1, 0x1.61b17ae5ff0c1p-2, -0x1.0b62472bd3d78p-3, 0x1.c9b3ef0688e89p-8, 0x1.7c528a3f2156cp-8, -0x1.0c4738028aec9p-13, -0x1.b40e785cb8808p-22, 0x0p+0}; + } + if constexpr (order == 10) { + return {0x0p+0, 0x1.8a25fe79d1c4ep-4, -0x1.79dddd860d214p-1, 0x1.2f92842080f08p+1, -0x1.04a53246109b7p+2, 0x1.fbc727fc23efp+1, -0x1.2e8a4ebac6b5ep+1, 0x1.96ff87cfe4cc5p+0, -0x1.db8c7f7bf2c3ap+0, 0x1.8867eccd39d1bp+0, -0x1.7019bc278ffcp-1, 0x1.a30d20b4e67c7p-2, -0x1.7340e7a399e64p-2, 0x1.68181929e64c5p-3, -0x1.50a6f5e8f3b31p-5, 0x1.8d3b211eb839bp-6, -0x1.b7227d5381373p-7, -0x1.a3114fdf2fbcp-12, 0x1.71e7a3b4d88bfp-10, -0x1.4eea023db8bd5p-14, -0x1.09aed93888304p-21, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xf.c16c3076988ebbcp-10L, 0xe.d43d6faa2ef51b8p-5L, 0xd.03a753418d0bce6p-4L, -0xe.9ede116d99b1966p-5L, 0x8.3ee4625ac404c6dp-5L, -0x8.bf03506f5837fe3p-6L, 0xe.c29805474d2cedap-8L, -0x8.38830b3b37cedbcp-9L, 0x8.0c15064d225d41p-12L, 0xe.c8e68cc12fa31cbp-17L, 0xf.95fd567187ac541p-18L, -0xe.bf4dd3d9d6239bp-18L, 0xa.e13a71702532bafp-21L, 0xb.1ab170d8c6d3fd6p-23L, -0x8.57ac00480665f53p-29L, 0x8.a04e5a4ae7d54e6p-31L, -0x8.b00943f903ee402p-38L, -0xa.7ca26b64ba505d1p-45L, -0xd.6c8a59dce3224e2p-56L, -0xb.2ec22065ac84f3fp-73L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xa.4c47b0aec7e1081p-7L, 0xe.6cbc378236de837p-4L, -0xf.81a0c3d2eba999fp-4L, -0x8.3af1de78eb8f98bp-6L, 0x9.81a1b1846300118p-6L, -0xb.8e83f7c0829f529p-15L, -0x9.90e35acb85cca72p-7L, 0x8.780783a3abc1044p-7L, -0xf.f6403eb5e6f17b6p-9L, 0x8.49604b074075f3ap-10L, -0x8.c2bc082b308154p-14L, -0xb.49882d15db83441p-15L, 0xd.15679d8fce83a4ap-17L, -0xe.26c0f92ddd5b332p-22L, -0xf.01423b9510f7584p-23L, 0xb.edbc2605809849dp-28L, 0xb.9ce0aee4062aafdp-33L, -0xe.ca19d1290517188p-39L, 0xb.28dea82f2d5572ep-49L, 0x9.4bc17cc5cc6c599p-65L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xa.e03f2841eb84819p-5L, 0x9.83d15473c1f50fdp-4L, -0xd.20fea63729823dcp-2L, 0x8.479981fecdaf816p-1L, -0xb.51543ac7e845d9fp-2L, 0xa.f82574e481a558dp-3L, -0x8.a863be98ab2e9afp-5L, -0xb.c768e5cd8760f3bp-6L, 0xa.7ccc81688b01b9cp-6L, -0xa.08ab70e42362325p-8L, -0xb.62c30831541b0b7p-10L, 0x9.0f024ac2a973782p-10L, -0xe.68e1ad5956c95f9p-13L, 0xd.7b2407256e2365dp-20L, 0x8.09b61fda58cdcd9p-18L, -0xb.49458724ae83fdap-22L, -0xb.1bbd7b9c425fd7p-28L, 0xb.2191e031b4353cfp-33L, -0xb.7da88ba55471baap-43L, -0x9.9224ed0dcb0440cp-58L, 0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0x8.e14bf0d3914bbd4p-3L, -0xd.395e1e0030afb9ep-2L, 0xc.74c0bc74cd98ea3p-2L, -0xc.7a837152f075af7p-4L, 0x8.11b249af1111423p-4L, -0x8.7d914829b598f95p-2L, 0xc.02cbea4a32dfa62p-2L, -0x9.c56cbc0e3a809b2p-2L, 0x9.9ce8a27ecaa85dcp-3L, -0x8.45cbd99e57663b5p-5L, -0x9.fc51346f5fdbbd1p-7L, 0x9.5c5e8d27e8757a5p-7L, -0x9.adbb20305389e61p-9L, 0xf.99d436da1232d03p-15L, 0x8.e183ed134ef71abp-14L, -0xc.a86e5be474c0e96p-18L, -0xf.c8248b432ea6598p-24L, 0xc.5b65b5fbac3587ap-28L, -0x9.0ef6feba3b62aaap-37L, -0xf.163bbc628cd0205p-52L, 0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xa.8ec6de67c9035e6p-2L, -0xe.19d824dfde72f6dp+0L, 0x8.73ca916679ee85cp+2L, -0xc.d5d2067714e04fcp+2L, 0xf.8a2626fba89eb9ep+2L, -0x8.be72b56cec81364p+3L, 0x8.d5fc68d6e61f284p+3L, -0xd.776d445bff43fe9p+2L, 0xb.68cbafe17a170d9p+1L, 0xb.260c57f14226301p-2L, -0xa.59e9b6c7cbb8775p+0L, 0xc.73a928d3fadf73cp-1L, -0xc.f1068b2a098cfb7p-3L, 0xc.7b89f9326d61459p-8L, 0x8.0174d562c8cba6dp-7L, -0x9.15ae83ebcf927bfp-10L, -0xb.4adb18b3736b1d7p-16L, 0xd.d0d90c2bd7c17dcp-20L, -0xe.f8336babb7fe566p-29L, -0xc.76037cef17bea43p-42L, 0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xa.a9c20e5c28262cfp-1L, -0x8.b245130e7d6435p+2L, 0xb.a14e18dc5e6e3bcp+3L, -0xe.912cdf0d3c0c767p+3L, 0x9.b65ec3110fa60e2p+1L, 0xa.51416899076b9c3p+4L, -0x9.702559487170317p+5L, 0xa.f8c633aadd02508p+5L, -0xc.05df7f7dc4ac954p+5L, 0xc.856a5b0e339f38dp+5L, -0xa.0acf073101b6074p+5L, 0xa.75d036d99ea9702p+4L, -0xb.6dad412b4521e9bp+2L, 0xb.309b84fa4322d85p-4L, 0xb.eddbea7d15a390ap-2L, -0x8.c28d4a8cf1aeca5p-4L, -0x9.18649e56e05bc3p-10L, 0xb.f4af141ec671a67p-13L, -0x8.9b691ba71b88c22p-21L, -0xe.51787a5ba8032eep-34L, -0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xa.1f2bcdab57636dcp-1L, -0x9.00abc1bc4d0982ep+2L, 0xd.f4f583b2053726ep+3L, -0xc.8bdfde6a8082091p+4L, 0xf.3ab256338232753p+4L, -0xe.ea35b70a5ecc9fep+4L, 0xe.1259658c5d981b4p+4L, -0xc.94cfb84c203ee2p+4L, 0x9.6d04479c978badep+4L, -0xb.fba7e0547ddde95p+3L, 0xe.57e755aae11112fp+2L, -0xe.7d6853a8ff7e50ap+1L, 0xf.a7af56f4b329d5ep-1L, 0x8.a5b6ca4cabd2b23p-3L, -0xa.f4845007ba6cfc8p-3L, 0x8.f73ea4811a71163p-5L, -0x8.f333fded7f8c399p-14L, -0xc.0e2118f93f91f36p-13L, 0x9.410b6aa81cbea18p-21L, 0xf.5eda2e50acd327dp-33L, -0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0x8.748c703a8d2f937p-1L, -0xf.aa58ee38f4a5c91p+1L, 0xc.6649ad2cb179936p+3L, -0xa.ec3fa7ecd7c41f4p+4L, 0xb.fdefe0fae49564ap+4L, -0x9.ab0aa5c6715fdd9p+4L, 0x8.0517805b79afde9p+4L, -0xe.b0d6b4042318ee3p+3L, 0xa.58c96b88b1b4fe8p+3L, -0x9.5ebf7665dec59a9p+2L, 0xe.91d7b95490989a7p+0L, -0xd.2d1fb184d6542c6p-1L, -0x8.04bdd18c802f85cp-3L, 0x9.4d5f62e5127240ep-1L, -0xb.6b1e334f7b950afp-2L, 0xa.90dcb78f808ffecp-4L, -0xc.4d0f4db204d1cc9p-9L, -0xe.607c58598cbad8fp-11L, 0xc.f4a5486617740b1p-19L, 0xa.b9cd4f73758e428p-29L, 0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0xe.1527ff4b308c86p-3L, -0xd.4e4b4124bea1ab6p+0L, 0xa.dddc6243d72ddb1p+2L, -0xa.292b9d75d9dfa3ap+3L, 0xc.8e405a961b38a93p+3L, -0xc.26b2dc1d7fdae55p+3L, 0xb.3c70e9b2cbd6e2ap+3L, -0xa.499812dedb44ac4p+3L, 0x8.a209e470c03af8ap+3L, -0xd.a8eccfb33c210d9p+2L, 0xa.41c0c3baf0658a2p+2L, -0xd.392b16aec032585p+1L, 0xf.0072464fbb8a1e7p+0L, -0x8.a917bbb9a6176d9p+0L, 0x8.a94b0f3707ab7abp-1L, -0x9.ecec45327d721f6p-3L, 0x9.f8e2c727153415ep-7L, 0xd.9f7da20d270d536p-9L, -0xd.d50acf33eea750ap-16L, -0xb.616ca66f1d70df8p-25L, 0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0xa.40798a9071f9886p-4L, -0x9.c7f1784d562bdc9p-1L, 0xf.c7a08dd664fcb0ep+0L, -0xd.e3061daa7c85492p+1L, 0xe.9ea25350b56d92ap+1L, -0xa.9b6b7c19db33b9dp+1L, 0x8.4a9d3d29256548ap+1L, -0x8.606e5181f471318p+1L, 0xd.7ab58a9a794ee91p+0L, -0xf.b144a4677fb9db7p-1L, 0x9.f7c1a61944d51aep-1L, -0xe.3ad5af0d7e3ad17p-2L, 0xe.59c5d962fa5f5d7p-3L, -0xb.123c2df8aedf04ap-4L, 0xb.0d8bd72ff86061cp-5L, -0x8.5b12395e9ebc248p-6L, 0xe.4d9f7834474485cp-11L, 0xb.e29451f90ab62c4p-11L, -0x8.6239c0145764987p-16L, -0xd.a073c2e5c404378p-25L, 0x0p+0L}; + } + if constexpr (order == 10) { + return {0x0p+0L, 0xc.512ff3ce8e26ed6p-7L, -0xb.ceeeec30690a3d4p-4L, 0x9.7c942104078413dp-2L, -0x8.2529923084db5b6p-1L, 0xf.de393fe11f77db2p-2L, -0x9.745275d635af24dp-2L, 0xc.b7fc3e7f2662817p-3L, -0xe.dc63fbdf961d121p-3L, 0xc.433f6669ce8d77ap-3L, -0xb.80cde13c7fe01dap-4L, 0xd.186905a733e3482p-5L, -0xb.9a073d1ccf31d0dp-5L, 0xb.40c0c94f326298p-6L, -0xa.8537af479d9846bp-8L, 0xc.69d908f5c1cd609p-9L, -0xd.b913ea9c09b9ab5p-10L, -0xd.188a7ef97de034bp-15L, 0xb.8f3d1da6c45f8b5p-13L, -0xa.775011edc5ea48p-17L, -0x8.4d76c9c441821a3p-24L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.f82d860ed311d7772f0a5fc02aa2p-7Q, 0x1.da87adf545dea36f29603c50206fp-2Q, 0x1.a074ea6831a179cbcefe13bdeb27p-1Q, -0x1.d3dbc22db33632cb9d3eeea9309ep-2Q, 0x1.07dc8c4b588098d99d74923fef11p-2Q, -0x1.17e06a0deb06ffc5a354422c2917p-3Q, 0x1.d85300a8e9a59db3d8e328544722p-5Q, -0x1.0710616766f9db787dd784803608p-6Q, 0x1.0182a0c9a44ba81f2b490da87ce3p-9Q, 0x1.d91cd19825f46395eba40bde2571p-14Q, 0x1.f2bfaace30f58a825ed0b3a11e16p-15Q, -0x1.d7e9ba7b3ac4736029b548526141p-15Q, 0x1.5c274e2e04a6575e26e75abeb4d6p-18Q, 0x1.63562e1b18da7fac5905b88575eep-20Q, -0x1.0af5800900ccbea5a647053aa06fp-26Q, 0x1.1409cb495cfaa9cc50f1fb2798a1p-28Q, -0x1.1601287f207dc804b32b2b372bd4p-35Q, -0x1.4f944d6c974a0ba10244cbd7bf6ap-42Q, -0x1.ad914b3b9c6449c459a4d88261fp-53Q, -0x1.65d8440cb5909e7eb82f547cb7ffp-70Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.4988f615d8fc21013726786516bbp-4Q, 0x1.cd9786f046dbd06d9795ae530616p-1Q, -0x1.f034187a5d75333e9dbb5b104718p-1Q, -0x1.075e3bcf1d71f31524cf997afba1p-3Q, 0x1.303436308c600230256305532d4ep-3Q, -0x1.71d07ef81053ea5196f6a9c9bd7ap-12Q, -0x1.321c6b5970b994e47d89204a7748p-4Q, 0x1.0f00f0747578208709a35dbb5683p-4Q, -0x1.fec807d6bcde2f6b9da93df4aa7bp-6Q, 0x1.092c0960e80ebe73a0fb5f592a93p-7Q, -0x1.1857810566102a80b03f6d574873p-11Q, -0x1.693105a2bb706882bf9e39158ac2p-12Q, 0x1.a2acf3b1f9d0749452e4dc44d928p-14Q, -0x1.c4d81f25bbab666371fdd702fd07p-19Q, -0x1.e0284772a21eeb07c87b76642dabp-20Q, 0x1.7db784c0b013093ad9874c402643p-25Q, 0x1.739c15dc80c555f970d134b64534p-30Q, -0x1.d9433a2520a2e30f13e7c351f19ep-36Q, 0x1.651bd505e5aaae5cab5b708f20d3p-46Q, 0x1.29782f98b98d8b31230d837a9eebp-62Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.5c07e5083d7090314f4044902659p-2Q, 0x1.307a2a8e783ea1f99bb361a3cef6p-1Q, -0x1.a41fd4c6e53047b890408086b56p+1Q, 0x1.08f3303fd9b5f02cbec87edc4433p+2Q, -0x1.6a2a8758fd08bb3ed6b347424ce1p+1Q, 0x1.5f04ae9c9034ab19fcfae00d09d5p+0Q, -0x1.150c77d31565d35edf80240e5f13p-2Q, -0x1.78ed1cb9b0ec1e760990f81b5f62p-3Q, 0x1.4f99902d11603738023acee04ff8p-3Q, -0x1.41156e1c846c464a303629e297f8p-5Q, -0x1.6c5861062a83616dee9275c18c3cp-7Q, 0x1.21e04958552e6f03502dd79356aap-7Q, -0x1.cd1c35ab2ad92bf156188522c4d7p-10Q, 0x1.af6480e4adc46cb9e0c7649b6bfap-17Q, 0x1.0136c3fb4b19b9b10157d7a8345p-15Q, -0x1.6928b0e495d07fb474aad680049ap-19Q, -0x1.6377af73884bfae0ae8534a755ap-25Q, 0x1.64323c063686a79e3f723a6f6a99p-30Q, -0x1.6fb51174aa8e375496c635af8171p-40Q, -0x1.32449da1b960881894abd22269dap-55Q, 0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.1c297e1a722977a767a1ff2272dcp+0Q, -0x1.a72bc3c00615f73ba93716b01652p+1Q, 0x1.8e98178e99b31d46ae26eec0a62ep+1Q, -0x1.8f506e2a5e0eb5edc0313f13910ap-1Q, 0x1.02364935e2222846b9cdda1bad5bp-1Q, -0x1.0fb2290536b31f2a2fbff34045aap+1Q, 0x1.80597d49465bf4c4d8869fb53015p+1Q, -0x1.38ad9781c750136475272cd6e5fep+1Q, 0x1.339d144fd9550bb8463b544a639ep+0Q, -0x1.08b97b33caecc76a026ab8335ac7p-2Q, -0x1.3f8a268debfb77a1cde76d550dc6p-4Q, 0x1.2b8bd1a4fd0eaf4aaa08a96cf13fp-4Q, -0x1.35b764060a713cc242948b5c3e5ep-6Q, 0x1.f33a86db42465a05a6ee3ed1f1c2p-12Q, 0x1.1c307da269dee355c5c2d340dc8p-11Q, -0x1.950dcb7c8e981d2c1ff88549c6afp-15Q, -0x1.f904916865d4cb30ef383c46a7ddp-21Q, 0x1.8b6cb6bf7586b0f4f1fcded43d5cp-25Q, -0x1.21dedfd7476c5553241f507abe95p-34Q, -0x1.e2c7778c519a040a7c97727eda55p-49Q, 0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.51d8dbccf9206bcc4420e8d9a9eap+1Q, -0x1.c33b049bfbce5ed995e580451e63p+3Q, 0x1.0e79522ccf3dd0b86ea89a553ap+5Q, -0x1.9aba40cee29c09f71dc38c35b29bp+5Q, 0x1.f144c4df7513d73b0fd71dc9dfb5p+5Q, -0x1.17ce56ad9d9026c80fe9053e2d6dp+6Q, 0x1.1abf8d1adcc3e5071c7209bb681cp+6Q, -0x1.aeeda88b7fe87fd16bcf8e052138p+5Q, 0x1.6d1975fc2f42e1b2096263c936fdp+4Q, 0x1.64c18afe2844c60255dd74d11ep+1Q, -0x1.4b3d36d8f9770ee95e2721f914bbp+3Q, 0x1.8e75251a7f5bee7754c2a951492ep+2Q, -0x1.9e20d16541319f6d732cb61c0c9ap+0Q, 0x1.8f713f264dac28b16bf91d5056c3p-5Q, 0x1.002e9aac591974da848a16c85358p-4Q, -0x1.22b5d07d79f24f7de83980b60562p-7Q, -0x1.695b63166e6d63ad77759faf5052p-13Q, 0x1.ba1b21857af82fb76bf474298db1p-17Q, -0x1.df066d7576ffcacbc6c94f3c5a26p-26Q, -0x1.8ec06f9de2f7d48618cf3f2e50ccp-39Q, 0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.553841cb8504c59ec882878d66e2p+2Q, -0x1.1648a261cfac86a07a57717eb0e3p+5Q, 0x1.7429c31b8bcdc777e068523e1aeap+6Q, -0x1.d2259be1a7818ecd1bf98b178549p+6Q, 0x1.36cbd86221f4c1c3813018fd6cbfp+4Q, 0x1.4a282d1320ed73864b5c77ade623p+7Q, -0x1.2e04ab290e2e062d6018a9efa98fp+8Q, 0x1.5f18c6755ba04a0fe584709ac85dp+8Q, -0x1.80bbefefb89592a7731266a97561p+8Q, 0x1.90ad4b61c673e71a7b1a662f6ff2p+8Q, -0x1.4159e0e62036c0e7d3a9392e2704p+8Q, 0x1.4eba06db33d52e049a4997516cf9p+7Q, -0x1.6db5a82568a43d359e1327442546p+5Q, 0x1.6613709f48645b09020d12e639edp-1Q, 0x1.7dbb7d4fa2b472146ed1344dc15bp+1Q, -0x1.1851a9519e35d9490483602f6703p-1Q, -0x1.230c93cadc0b78607a6df81f1b6fp-7Q, 0x1.7e95e283d8ce34ce8180ea4f4ca4p-10Q, -0x1.136d2374e371184371f1175ee7a9p-18Q, -0x1.ca2f0f4b750065dbf1a921be61p-31Q, -0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.43e579b56aec6db8f44fad025d31p+2Q, -0x1.2015783789a1305c4b04f4166dd8p+5Q, 0x1.be9eb07640a6e4dcf71e8ec13b53p+6Q, -0x1.917bfbcd50104121d7cf2e45b56cp+7Q, 0x1.e7564ac670464ea6f5bb02fedc24p+7Q, -0x1.dd46b6e14bd993fb7d27e48ccc74p+7Q, 0x1.c24b2cb18bb303674bf660cced48p+7Q, -0x1.9299f7098407dc40f69f41c308ebp+7Q, 0x1.2da088f392f175bbf1502adde1fap+7Q, -0x1.7f74fc0a8fbbbd2a6629268e303fp+6Q, 0x1.cafceab55c22225d33d1409b59ap+5Q, -0x1.cfad0a751fefca13c3b32651d4a9p+4Q, 0x1.f4f5eade96653abb41ce938b652dp+2Q, 0x1.14b6d949957a5646a55036bfd229p+0Q, -0x1.5e908a00f74d9f8f6b65d27bbd91p+0Q, 0x1.1ee7d490234e22c547ade06a389fp-2Q, -0x1.1e667fbdaff187310b0175bb8ebfp-11Q, -0x1.81c4231f27f23e6bc64b0c485b78p-10Q, 0x1.28216d550397d430f87999376f2cp-18Q, 0x1.ebdb45ca159a64fa9f199a6004f2p-30Q, -0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.0e918e0751a5f26d66d32652a3c3p+2Q, -0x1.f54b1dc71e94b922c8b7d9cedc49p+4Q, 0x1.8cc935a5962f326b8767ea0da425p+6Q, -0x1.5d87f4fd9af883e7ca8f85fa5bb5p+7Q, 0x1.7fbdfc1f5c92ac9439f72daa4354p+7Q, -0x1.356154b8ce2bfbb26ff261795e76p+7Q, 0x1.00a2f00b6f35fbd2365b8c89c9e7p+7Q, -0x1.d61ad68084631dc5b1cb3579539ep+6Q, 0x1.4b192d7116369fcf46bbc7a85648p+6Q, -0x1.2bd7eeccbbd8b3529c9ec84730c4p+5Q, 0x1.d23af72a9213134d138ab8713629p+3Q, -0x1.a5a3f6309aca858b5548cd2e0f1fp+2Q, -0x1.0097ba319005f0b824ee38e92ecp+0Q, 0x1.29abec5ca24e481b150656fe0d65p+2Q, -0x1.6d63c669ef72a15dead10bcfb7ep+1Q, 0x1.521b96f1f011ffd834fe0c58029ap-1Q, -0x1.89a1e9b6409a39917b2558e5c9cap-6Q, -0x1.cc0f8b0b31975b1da167d6c2e885p-8Q, 0x1.9e94a90cc2ee8162e5d90cd367bep-16Q, 0x1.5739a9ee6eb1c850a9597ef2cebp-26Q, 0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.c2a4ffe9661190c09a7af6cb9ca4p+0Q, -0x1.a9c9682497d4356cc97c764c71e1p+3Q, 0x1.5bbb8c487ae5bb615e8e71957082p+5Q, -0x1.452573aebb3bf474bf24d39c0c75p+6Q, 0x1.91c80b52c3671525c3375728fd33p+6Q, -0x1.84d65b83affb5ca97ccaf4bcaa17p+6Q, 0x1.678e1d36597adc53993fd53deeacp+6Q, -0x1.4933025bdb6895888c17391d3c87p+6Q, 0x1.14413c8e18075f1444cc50c11326p+6Q, -0x1.b51d99f6678421b18139cf56717cp+5Q, 0x1.483818775e0cb14480b3264cce69p+5Q, -0x1.a72562d5d8064b092b7ba7b739cp+4Q, 0x1.e00e48c9f77143cec0c43437c4bep+3Q, -0x1.1522f77734c2edb19342dec0265fp+3Q, 0x1.152961e6e0f56f56720078cacb8p+2Q, -0x1.3d9d88a64fae43ec46db6df5abf8p+0Q, 0x1.3f1c58e4e2a682bc6ff0544f4ae4p-4Q, 0x1.b3efb441a4e1aa6b7bfce49b9d8ep-6Q, -0x1.baa159e67dd4ea14a46823aaab92p-13Q, -0x1.6c2d94cde3ae1bef5e760af7804dp-22Q, 0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.480f31520e3f310c306bdc1e8024p-1Q, -0x1.38fe2f09aac57b92aacdab2b4e96p+2Q, 0x1.f8f411bacc9f961bc5fe565a48cfp+3Q, -0x1.bc60c3b54f90a9241998e1a7c135p+4Q, 0x1.d3d44a6a16adb2540f6c000e54a3p+4Q, -0x1.536d6f833b66773a9702164e108p+4Q, 0x1.0953a7a524aca913282b25214d25p+4Q, -0x1.0c0dca303e8e262fc968302773e3p+4Q, 0x1.af56b1534f29dd21b9240ac133b1p+3Q, -0x1.f628948ceff73b6d1ae734867e3p+2Q, 0x1.3ef834c3289aa35b262758c2782ep+2Q, -0x1.c75ab5e1afc75a2d9d28a2f8d82cp+1Q, 0x1.cb38bb2c5f4bebadf622e77e6e2bp+0Q, -0x1.624785bf15dbe093496ba0bcf74cp-1Q, 0x1.61b17ae5ff0c0c37a77beb09baeep-2Q, -0x1.0b62472bd3d7849095f6de060b33p-3Q, 0x1.c9b3ef0688e890b76d9f1545a8bdp-8Q, 0x1.7c528a3f2156c58889998659bd68p-8Q, -0x1.0c4738028aec930d4308dfe577d7p-13Q, -0x1.b40e785cb88086ef360909d3183cp-22Q, 0x0p+0Q}; + } + if constexpr (order == 10) { + return {0x0p+0Q, 0x1.8a25fe79d1c4ddac335be805ed36p-4Q, -0x1.79dddd860d2147a741654102c6e4p-1Q, 0x1.2f92842080f0827925b021c0be64p+1Q, -0x1.04a53246109b6b6c0d3ef6e90b5fp+2Q, 0x1.fbc727fc23eefb6381085f0dbe0ep+1Q, -0x1.2e8a4ebac6b5e49a84fad579cb0bp+1Q, 0x1.96ff87cfe4cc502ebda9734be9aep+0Q, -0x1.db8c7f7bf2c3a242351f98d5116p+0Q, 0x1.8867eccd39d1aef37286907e6727p+0Q, -0x1.7019bc278ffc03b406b2fe913c47p-1Q, 0x1.a30d20b4e67c690471d7cb32e446p-2Q, -0x1.7340e7a399e63a19859bd63999a6p-2Q, 0x1.68181929e64c530045ddd9689347p-3Q, -0x1.50a6f5e8f3b308d50e585e890eebp-5Q, 0x1.8d3b211eb839ac111937339fb303p-6Q, -0x1.b7227d5381373569d6206bc13579p-7Q, -0x1.a3114fdf2fbc06953fcb9948c145p-12Q, 0x1.71e7a3b4d88bf16a9f3c250c332p-10Q, -0x1.4eea023db8bd4900ec558c34e57cp-14Q, -0x1.09aed93888304346e30d1466764ap-21Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 12) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.ba5636p-8f, 0x1.3af728p-2f, 0x1.da1522p-1f, -0x1.5c6f66p-2f, 0x1.4840a4p-3f, -0x1.9d4fdcp-4f, 0x1.042a86p-4f, -0x1.08554cp-5f, 0x1.86c906p-7f, -0x1.8785b4p-9f, 0x1.f00fcp-12f, -0x1.43b7cep-15f, -0x1.dafa2ep-18f, 0x1.2d678cp-18f, -0x1.f0554cp-22f, -0x1.934a0ep-24f, -0x1.3a5d96p-29f, 0x1.0e0d22p-33f, -0x1.652334p-41f, 0x1.02e74cp-47f, 0x1.bb358cp-60f, -0x1.f67e04p-79f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.3daa14p-5f, 0x1.716f56p-1f, -0x1.16beeap-2f, -0x1.f51bdap-1f, 0x1.97243cp-1f, -0x1.b8eefp-2f, 0x1.2402bcp-3f, 0x1.805958p-10f, -0x1.fa47fap-6f, 0x1.025a88p-6f, -0x1.3d712ap-9f, -0x1.c5c0dp-11f, 0x1.c45b6ap-12f, -0x1.6a167p-15f, -0x1.13c0d6p-17f, 0x1.b2cff8p-20f, -0x1.9ee91p-25f, -0x1.c87e12p-29f, 0x1.b076eap-34f, 0x1.71c42cp-44f, -0x1.e6d8e6p-52f, 0x1.13fd18p-69f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.77fed2p-3f, 0x1.e1d108p-1f, -0x1.9e9c7cp+1f, 0x1.bc153ap+1f, -0x1.240fe4p+1f, 0x1.80cee2p+0f, -0x1.abf5ep-1f, 0x1.50c7e8p-2f, -0x1.4654eep-4f, 0x1.091b1ep-6f, -0x1.59c476p-7f, 0x1.935e46p-8f, -0x1.8fe152p-10f, 0x1.90febp-15f, 0x1.09bd2p-15f, -0x1.da6da6p-19f, 0x1.a3887p-21f, 0x1.0f785p-26f, -0x1.63226ep-31f, -0x1.84d7e4p-38f, 0x1.75cc98p-48f, -0x1.a7d232p-65f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.60087cp-1f, -0x1.1c49e2p+0f, -0x1.f023b2p+0f, 0x1.8d30cp+2f, -0x1.80e0dep+2f, 0x1.c1feacp+0f, 0x1.3621acp+1f, -0x1.f3ab98p+1f, 0x1.5e6794p+1f, -0x1.c702ecp-1f, -0x1.ee149ap-4f, 0x1.ffde0cp-3f, -0x1.a2cbbap-4f, 0x1.d58bf4p-7f, 0x1.206bp-9f, -0x1.dfc88ap-11f, 0x1.f86e54p-15f, 0x1.28c92p-18f, -0x1.9c90e4p-23f, -0x1.7e8cfp-32f, 0x1.cc8984p-39f, -0x1.051a2p-54f, 0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.efa02p+0f, -0x1.34df3ep+3f, 0x1.596114p+4f, -0x1.014d7ap+5f, 0x1.5a4b7p+5f, -0x1.d72d9cp+5f, 0x1.1a6ca8p+6f, -0x1.f8d9fp+5f, 0x1.142ce2p+5f, -0x1.90f39p+1f, -0x1.822b1ap+3f, 0x1.52a34ep+3f, -0x1.0b934ap+2f, 0x1.335fd6p-1f, 0x1.17c48ap-3f, -0x1.003386p-4f, 0x1.68d464p-8f, 0x1.b6ad0ep-12f, -0x1.c361dcp-16f, -0x1.d59d4cp-25f, 0x1.f6c8c6p-31f, -0x1.1d1866p-45f, 0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.1672f8p+2f, -0x1.d05e84p+4f, 0x1.49fc06p+6f, -0x1.e4421p+6f, 0x1.09c53p+6f, 0x1.677b64p+6f, -0x1.fbf398p+7f, 0x1.628082p+8f, -0x1.a2714ep+8f, 0x1.cb4de8p+8f, -0x1.9cacd4p+8f, 0x1.055f48p+8f, -0x1.8ddf94p+6f, 0x1.95561cp+3f, 0x1.8ab9ccp+2f, -0x1.6e4fp+1f, 0x1.43d702p-2f, 0x1.951dp-6f, -0x1.5137c2p-9f, -0x1.3e3df8p-18f, 0x1.78041p-23f, -0x1.aa8cd8p-37f, -0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.6688e4p+2f, -0x1.50ba26p+5f, 0x1.18d5fcp+7f, -0x1.16422p+8f, 0x1.7cdc34p+8f, -0x1.a2f3c4p+8f, 0x1.aa319ep+8f, -0x1.958a02p+8f, 0x1.4bb5b2p+8f, -0x1.caa92ap+7f, 0x1.1f2d7ap+7f, -0x1.3b920ep+6f, 0x1.bc14b2p+4f, 0x1.8c237ap-1f, -0x1.7f694cp+2f, 0x1.3f67e2p+1f, -0x1.4cc6cp-2f, -0x1.6b5574p-6f, 0x1.38d6e4p-8f, 0x1.260d96p-17f, -0x1.5c7912p-21f, 0x1.8b88d4p-34f, 0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.80f666p+2f, -0x1.7dd222p+5f, 0x1.48b0d8p+7f, -0x1.41512cp+8f, 0x1.8f56fp+8f, -0x1.675a3ap+8f, 0x1.2e9626p+8f, -0x1.12635ap+8f, 0x1.969994p+7f, -0x1.59e9b6p+6f, 0x1.09d1ap+3f, 0x1.cc8ab2p+3f, -0x1.93c8d6p+4f, 0x1.013c24p+5f, -0x1.784654p+4f, 0x1.21acdep+3f, -0x1.6fa584p+0f, -0x1.39157p-4f, 0x1.343728p-5f, 0x1.c53d4ap-15f, -0x1.57bc52p-17f, 0x1.869c12p-29f, 0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.d573dcp+1f, -0x1.ddfb9cp+4f, 0x1.a873c2p+6f, -0x1.b2204ep+7f, 0x1.23910ep+8f, -0x1.29c6cep+8f, 0x1.1c64b2p+8f, -0x1.156986p+8f, 0x1.ef2b6p+7f, -0x1.84734ap+7f, 0x1.20e874p+7f, -0x1.93d454p+6f, 0x1.e8c646p+5f, -0x1.0a8b2ep+5f, 0x1.14ef6ep+4f, -0x1.bab6f4p+2f, 0x1.4e6abp+0f, 0x1.e57eccp-4f, -0x1.0f174cp-4f, 0x1.a1f2dcp-12f, 0x1.400292p-15f, -0x1.6c7e6p-26f, -0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.d2f4ep+0f, -0x1.e196ep+3f, 0x1.ab061ep+5f, -0x1.a7b25ap+6f, 0x1.04d398p+7f, -0x1.c308c4p+6f, 0x1.759cb8p+6f, -0x1.73a4dcp+6f, 0x1.4d02e4p+6f, -0x1.c4dfc6p+5f, 0x1.217c84p+5f, -0x1.9d3e5ep+4f, 0x1.eced02p+3f, -0x1.ab1578p+2f, 0x1.780b78p+1f, -0x1.59e4e8p+0f, 0x1.04013ap-2f, 0x1.63e904p-4f, -0x1.26b33ap-5f, 0x1.1fc084p-10f, 0x1.9c18e6p-15f, -0x1.d792bap-25f, 0x0p+0f}; + } + if constexpr (order == 10) { + return {0x0p+0f, 0x1.19eec2p-1f, -0x1.249f96p+2f, 0x1.0297dcp+4f, -0x1.f4e8dcp+4f, 0x1.1efd1cp+5f, -0x1.a397ap+4f, 0x1.239464p+4f, -0x1.3946dp+4f, 0x1.289832p+4f, -0x1.5bb8e2p+3f, 0x1.68255cp+2f, -0x1.21aae8p+2f, 0x1.64fab4p+1f, -0x1.75b64cp-1f, 0x1.22ff2ap-3f, -0x1.07ed62p-3f, -0x1.4a01e6p-6f, 0x1.2e7cdcp-4f, -0x1.b7f686p-6f, 0x1.17b65cp-9f, 0x1.910e04p-14f, -0x1.cf434ap-23f, 0x0p+0f}; + } + if constexpr (order == 11) { + return {0x0p+0f, 0x1.a6c51cp-5f, -0x1.b83154p-2f, 0x1.89e13cp+0f, -0x1.8aa498p+1f, 0x1.eb2b7ep+1f, -0x1.a9173ap+1f, 0x1.4e8702p+1f, -0x1.31bb74p+1f, 0x1.0e1264p+1f, -0x1.9cd0dcp+0f, 0x1.3cec22p+0f, -0x1.daf36p-1f, 0x1.329c32p-1f, -0x1.8936aep-2f, 0x1.00deep-2f, -0x1.07bd18p-3f, 0x1.cec02p-5f, -0x1.e6ef9ep-6f, 0x1.8f4f48p-7f, -0x1.e72d5p-10f, -0x1.e19176p-14f, 0x1.1b79fap-21f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.ba5636194c094p-8, 0x1.3af72853b189p-2, 0x1.da1521352f488p-1, -0x1.5c6f665240adep-2, 0x1.4840a35a3e507p-3, -0x1.9d4fdc34ae4eep-4, 0x1.042a86a360592p-4, -0x1.08554bd18ab25p-5, 0x1.86c905bef28a7p-7, -0x1.8785b403c86f7p-9, 0x1.f00fc00fce26fp-12, -0x1.43b7ce1fa4e5bp-15, -0x1.dafa2eb6c7f5dp-18, 0x1.2d678c174b94dp-18, -0x1.f0554b8e5712dp-22, -0x1.934a0de4da293p-24, -0x1.3a5d95f1928efp-29, 0x1.0e0d213886187p-33, -0x1.652333b32760ap-41, 0x1.02e74c07e6081p-47, 0x1.bb358cf4adf4ep-60, -0x1.f67e04f08f215p-79, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.3daa1461d0cf4p-5, 0x1.716f56bac1b11p-1, -0x1.16bee99870719p-2, -0x1.f51bd9fa1cf2ep-1, 0x1.97243be7bf084p-1, -0x1.b8eef0110c9fap-2, 0x1.2402bce395302p-3, 0x1.80595820660c9p-10, -0x1.fa47fa3f4b022p-6, 0x1.025a88022a414p-6, -0x1.3d712aaad7776p-9, -0x1.c5c0d04fc8743p-11, 0x1.c45b69075cdb6p-12, -0x1.6a1670435bfddp-15, -0x1.13c0d643a27dcp-17, 0x1.b2cff79438463p-20, -0x1.9ee90facd3d13p-25, -0x1.c87e1185ca55bp-29, 0x1.b076e96662045p-34, 0x1.71c42c5b1e647p-44, -0x1.e6d8e5785ac94p-52, 0x1.13fd176d0c255p-69, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.77fed2e016936p-3, 0x1.e1d10780fb061p-1, -0x1.9e9c7ce63835dp+1, 0x1.bc153af50c24cp+1, -0x1.240fe3f248861p+1, 0x1.80cee17390c18p+0, -0x1.abf5df7fd7acp-1, 0x1.50c7e71a108bbp-2, -0x1.4654ed4660724p-4, 0x1.091b1dd62c3e6p-6, -0x1.59c475f85d7f4p-7, 0x1.935e464b93aa4p-8, -0x1.8fe1513629012p-10, 0x1.90feb0894b435p-15, 0x1.09bd1f2d4e386p-15, -0x1.da6da6ad5e76cp-19, 0x1.a3886fa6d48c5p-21, 0x1.0f7850b94c92bp-26, -0x1.63226d50629cp-31, -0x1.84d7e34db15d3p-38, 0x1.75cc980993529p-48, -0x1.a7d23115de573p-65, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.60087b087d2efp-1, -0x1.1c49e2797e56dp+0, -0x1.f023b1706ef0ep+0, 0x1.8d30c07e51574p+2, -0x1.80e0de445b21ap+2, 0x1.c1feac4e70c18p+0, 0x1.3621ab0ea1b05p+1, -0x1.f3ab98611d47ap+1, 0x1.5e6794d526a25p+1, -0x1.c702eca93a33dp-1, -0x1.ee149aa686bb3p-4, 0x1.ffde0ca5fc1a1p-3, -0x1.a2cbb989ecd0ap-4, 0x1.d58bf4f6c76eap-7, 0x1.206affc103ba1p-9, -0x1.dfc88961f6b15p-11, 0x1.f86e53415f2ap-15, 0x1.28c920e4a3f6cp-18, -0x1.9c90e430666c9p-23, -0x1.7e8cf0898f333p-32, 0x1.cc8984cca607fp-39, -0x1.051a1f819156cp-54, 0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.efa01fe281c9p+0, -0x1.34df3dac7fcd4p+3, 0x1.5961138d5be95p+4, -0x1.014d7a672544ap+5, 0x1.5a4b6fa251ebp+5, -0x1.d72d9b409f2b2p+5, 0x1.1a6ca7d65632dp+6, -0x1.f8d9ef0a2890cp+5, 0x1.142ce1c1f06e2p+5, -0x1.90f390767ce47p+1, -0x1.822b1a96e2d92p+3, 0x1.52a34d125b1bep+3, -0x1.0b934a511e089p+2, 0x1.335fd67def29fp-1, 0x1.17c48a3b6f0b8p-3, -0x1.0033850ae8807p-4, 0x1.68d4635bbce68p-8, 0x1.b6ad0e03e206fp-12, -0x1.c361dbb11082cp-16, -0x1.d59d4ba004a56p-25, 0x1.f6c8c69c71b98p-31, -0x1.1d186572e3d31p-45, 0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.1672f76c48a3bp+2, -0x1.d05e83fe81472p+4, 0x1.49fc051fc99a8p+6, -0x1.e442104e65336p+6, 0x1.09c52f838d2fdp+6, 0x1.677b64cbf326ep+6, -0x1.fbf39786bea7bp+7, 0x1.628081b6fdd81p+8, -0x1.a2714ddd5c22bp+8, 0x1.cb4de777b4f36p+8, -0x1.9cacd3aee3a7ep+8, 0x1.055f4806a8346p+8, -0x1.8ddf94a470b87p+6, 0x1.95561c2d77ea8p+3, 0x1.8ab9cc38b4949p+2, -0x1.6e4f007cb3f6fp+1, 0x1.43d7023213a8p-2, 0x1.951cff21de4acp-6, -0x1.5137c147339bcp-9, -0x1.3e3df8b2da275p-18, 0x1.78040f51a9568p-23, -0x1.aa8cd8e6f8972p-37, -0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.6688e31cf50ep+2, -0x1.50ba2688bc043p+5, 0x1.18d5fc503a177p+7, -0x1.16422099d0e7p+8, 0x1.7cdc33f38c2d1p+8, -0x1.a2f3c3b8e6e4bp+8, 0x1.aa319d6af6ec9p+8, -0x1.958a02a102449p+8, 0x1.4bb5b15c50a64p+8, -0x1.caa9291eb011fp+7, 0x1.1f2d7abf22a73p+7, -0x1.3b920d0f7e0d1p+6, 0x1.bc14b21b62b93p+4, 0x1.8c237a0fa26d7p-1, -0x1.7f694c35d9d22p+2, 0x1.3f67e104a689cp+1, -0x1.4cc6c058f371dp-2, -0x1.6b557354b8d85p-6, 0x1.38d6e371bb052p-8, 0x1.260d95329ea8ep-17, -0x1.5c7911e0053bcp-21, 0x1.8b88d3fa551cp-34, 0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.80f665163dff6p+2, -0x1.7dd2228ef0449p+5, 0x1.48b0d88030936p+7, -0x1.41512ba753d05p+8, 0x1.8f56f07493efp+8, -0x1.675a39773b248p+8, 0x1.2e9626a21624ep+8, -0x1.1263590aebe89p+8, 0x1.9699942af2221p+7, -0x1.59e9b6e0b9c21p+6, 0x1.09d1a0b7c5832p+3, 0x1.cc8ab1005087cp+3, -0x1.93c8d50945095p+4, 0x1.013c24badc627p+5, -0x1.784654bbd7368p+4, 0x1.21acdd98ca7e4p+3, -0x1.6fa583815aba2p+0, -0x1.39156fe5f0a3bp-4, 0x1.34372727b2155p-5, 0x1.c53d49d197175p-15, -0x1.57bc52155abeap-17, 0x1.869c11b6398bcp-29, 0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.d573db31c98a6p+1, -0x1.ddfb9c5686a4fp+4, 0x1.a873c238f1ad9p+6, -0x1.b2204de17a53ap+7, 0x1.23910ebcbe60dp+8, -0x1.29c6cec686025p+8, 0x1.1c64b27b4c108p+8, -0x1.156985f5c8bcep+8, 0x1.ef2b60fc7ce31p+7, -0x1.84734ae811783p+7, 0x1.20e874beb6698p+7, -0x1.93d454c0120c5p+6, 0x1.e8c645d503448p+5, -0x1.0a8b2e2c06173p+5, 0x1.14ef6d11452bcp+4, -0x1.bab6f3f4dbb55p+2, 0x1.4e6aaf12e910ep+0, 0x1.e57ecc0ee730ep-4, -0x1.0f174cea8c306p-4, 0x1.a1f2dc12ec55dp-12, 0x1.4002914419fbbp-15, -0x1.6c7e600f14b1p-26, -0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.d2f4e044749b5p+0, -0x1.e196df480fe72p+3, 0x1.ab061d20276fp+5, -0x1.a7b259e6037ecp+6, 0x1.04d3977e22f61p+7, -0x1.c308c46a51aa1p+6, 0x1.759cb7054906p+6, -0x1.73a4db524ebc3p+6, 0x1.4d02e405c664p+6, -0x1.c4dfc682dd95ep+5, 0x1.217c835a844bfp+5, -0x1.9d3e5e5e09252p+4, 0x1.eced01c912f6cp+3, -0x1.ab15772777a66p+2, 0x1.780b7892927c5p+1, -0x1.59e4e79f9d385p+0, 0x1.04013ac7f90edp-2, 0x1.63e903ad632e8p-4, -0x1.26b339b06c46fp-5, 0x1.1fc083a0e2c36p-10, 0x1.9c18e59aa15abp-15, -0x1.d792baac952f3p-25, 0x0p+0}; + } + if constexpr (order == 10) { + return {0x0p+0, 0x1.19eec26520f72p-1, -0x1.249f95db3c6a8p+2, 0x1.0297dba66cdd3p+4, -0x1.f4e8dc0eb78aap+4, 0x1.1efd1b3c60e0bp+5, -0x1.a397a05a5f775p+4, 0x1.239464bf9e82cp+4, -0x1.3946d065739bfp+4, 0x1.2898316e66a7fp+4, -0x1.5bb8e2c464278p+3, 0x1.68255c99ba4c7p+2, -0x1.21aae7ae7df32p+2, 0x1.64fab317448fbp+1, -0x1.75b64c97e0968p-1, 0x1.22ff2ac4d8b9cp-3, -0x1.07ed621dcab47p-3, -0x1.4a01e6ee0860ep-6, 0x1.2e7cdbbc90031p-4, -0x1.b7f6865bae123p-6, 0x1.17b65cad3d541p-9, 0x1.910e0462410b6p-14, -0x1.cf434a44d45d4p-23, 0x0p+0}; + } + if constexpr (order == 11) { + return {0x0p+0, 0x1.a6c51bc471a31p-5, -0x1.b8315371d42a5p-2, 0x1.89e13c889a74dp+0, -0x1.8aa497719f071p+1, 0x1.eb2b7ee2bc88dp+1, -0x1.a91739cfcb437p+1, 0x1.4e87023b22be2p+1, -0x1.31bb74af8ae4ep+1, 0x1.0e1263d4463c8p+1, -0x1.9cd0db1b42b97p+0, 0x1.3cec213a53552p+0, -0x1.daf35f59b2442p-1, 0x1.329c321d7ff6bp-1, -0x1.8936ae8cb907cp-2, 0x1.00dee0f33922ap-2, -0x1.07bd180d95969p-3, 0x1.cec01fe9b05f6p-5, -0x1.e6ef9d5209f88p-6, 0x1.8f4f47250e3a5p-7, -0x1.e72d4f4950c8ap-10, -0x1.e19176d7ba691p-14, 0x1.1b79fa688c947p-21, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xd.d2b1b0ca6049ce2p-11L, 0x9.d7b9429d8c4819ap-5L, 0xe.d0a909a97a43f8ep-4L, -0xa.e37b3292056ef1ap-5L, 0xa.42051ad1f283b58p-6L, -0xc.ea7ee1a57276e59p-7L, 0x8.2154351b02c8eb6p-7L, -0x8.42aa5e8c5592b7bp-8L, 0xc.36482df7945344bp-10L, -0xc.3c2da01e437b7bbp-12L, 0xf.807e007e7137774p-15L, -0xa.1dbe70fd272d8b1p-18L, -0xe.d7d175b63fae5edp-21L, 0x9.6b3c60ba5ca6825p-21L, -0xf.82aa5c72b896837p-25L, -0xc.9a506f26d1499c5p-27L, -0x9.d2ecaf8c9477601p-32L, 0x8.706909c430c3afbp-36L, -0xb.29199d993b04f39p-44L, 0x8.173a603f30404d9p-50L, 0xd.d9ac67a56fa6d35p-63L, -0xf.b3f02784790a955p-82L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0x9.ed50a30e867a4p-8L, 0xb.8b7ab5d60d88817p-4L, -0x8.b5f74cc3838cb01p-5L, -0xf.a8decfd0e796cf1p-4L, 0xc.b921df3df8422acp-4L, -0xd.c777808864fd26fp-5L, 0x9.2015e71ca980e98p-6L, 0xc.02cac1033064418p-13L, -0xf.d23fd1fa5810e5dp-9L, 0x8.12d440115209d8bp-9L, -0x9.eb895556bbbac58p-12L, -0xe.2e06827e43a1813p-14L, 0xe.22db483ae6db17p-15L, -0xb.50b3821adfeea95p-18L, -0x8.9e06b21d13ee1f3p-20L, 0xd.967fbca1c231ae8p-23L, -0xc.f7487d669e89999p-28L, -0xe.43f08c2e52ad9ddp-32L, 0xd.83b74b331022454p-37L, 0xb.8e2162d8f32359fp-47L, -0xf.36c72bc2d649c0fp-55L, 0x8.9fe8bb68612a695p-72L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xb.bff69700b49b018p-6L, 0xf.0e883c07d830881p-4L, -0xc.f4e3e731c1ae738p-2L, 0xd.e0a9d7a86125cacp-2L, -0x9.207f1f9244307c8p-2L, 0xc.06770b9c860beebp-3L, -0xd.5faefbfebd5fdcdp-4L, 0xa.863f38d0845d7acp-5L, -0xa.32a76a330391e66p-7L, 0x8.48d8eeb161f2f82p-9L, -0xa.ce23afc2ebf9f61p-10L, 0xc.9af2325c9d52281p-11L, -0xc.7f0a89b14808e6ap-13L, 0xc.87f5844a5a1a6fp-18L, 0x8.4de8f96a71c3322p-18L, -0xe.d36d356af3b5c2cp-22L, 0xd.1c437d36a462b4ap-24L, 0x8.7bc285ca6495b9cp-29L, -0xb.19136a8314dfe24p-34L, -0xc.26bf1a6d8ae9884p-41L, 0xb.ae64c04c9a9494fp-51L, -0xd.3e9188aef2b98edp-68L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xb.0043d843e977a5cp-4L, -0x8.e24f13cbf2b6563p-3L, -0xf.811d8b837786d61p-3L, 0xc.698603f28aba1a9p-1L, -0xc.0706f222d90cfdfp-1L, 0xe.0ff56273860c0ebp-3L, 0x9.b10d58750d82957p-2L, -0xf.9d5cc308ea3d3cbp-2L, 0xa.f33ca6a935126f2p-2L, -0xe.38176549d19e5a8p-4L, -0xf.70a4d53435d97d5p-7L, 0xf.fef0652fe0d0a8dp-6L, -0xd.165dcc4f668505cp-7L, 0xe.ac5fa7b63b752dbp-10L, 0x9.0357fe081dd0544p-12L, -0xe.fe444b0fb58abf3p-14L, 0xf.c3729a0af95006dp-18L, 0x9.464907251fb5d88p-21L, -0xc.e487218333646a4p-26L, -0xb.f467844c7999b52p-35L, 0xe.644c2665303f8d2p-42L, -0x8.28d0fc0c8ab5d4ep-57L, 0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xf.7d00ff140e483d9p-3L, -0x9.a6f9ed63fe69fc4p+0L, 0xa.cb089c6adf4abc4p+1L, -0x8.0a6bd3392a250e2p+2L, 0xa.d25b7d128f57c87p+2L, -0xe.b96cda04f958dddp+2L, 0x8.d3653eb2b19664fp+3L, -0xf.c6cf785144862cap+2L, 0x8.a1670e0f8370cfp+2L, -0xc.879c83b3e72381bp-2L, -0xc.1158d4b716c8e65p+0L, 0xa.951a6892d8df2a8p+0L, -0x8.5c9a5288f0446cfp-1L, 0x9.9afeb3ef794f7dcp-4L, 0x8.be2451db785c08ap-6L, -0x8.019c285744039edp-7L, 0xb.46a31adde7341a9p-11L, 0xd.b568701f1037966p-15L, -0xe.1b0edd888415d06p-19L, -0xe.acea5d00252b3f7p-28L, 0xf.b64634e38dcc13ap-34L, -0x8.e8c32b971e9855bp-48L, 0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0x8.b397bb62451d843p-1L, -0xe.82f41ff40a38e2ap+1L, 0xa.4fe028fe4cd412cp+3L, -0xf.22108273299ad98p+3L, 0x8.4e297c1c697e50ep+3L, 0xb.3bdb265f99372aep+3L, -0xf.df9cbc35f53d89cp+4L, 0xb.14040db7eec0855p+5L, -0xd.138a6eeae115b02p+5L, 0xe.5a6f3bbda79b16cp+5L, -0xc.e5669d771d3f14bp+5L, 0x8.2afa403541a338fp+5L, -0xc.6efca52385c3629p+3L, 0xc.aab0e16bbf53e59p+0L, 0xc.55ce61c5a4a452bp-1L, -0xb.727803e59fb7b2ap-2L, 0xa.1eb811909d4016fp-5L, 0xc.a8e7f90ef2563f2p-9L, -0xa.89be0a399cde158p-12L, -0x9.f1efc596d13a96ep-21L, 0xb.c0207a8d4ab3f5dp-26L, -0xd.5466c737c4b8e72p-40L, -0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xb.344718e7a8702b2p-1L, -0xa.85d13445e021855p+2L, 0x8.c6afe281d0bb969p+4L, -0x8.b21104ce8738061p+5L, 0xb.e6e19f9c6168b44p+5L, -0xd.179e1dc73725588p+5L, 0xd.518ceb57b764b3fp+5L, -0xc.ac50150812244abp+5L, 0xa.5dad8ae285323a8p+5L, -0xe.554948f5808f966p+4L, 0x8.f96bd5f915394b1p+4L, -0x9.dc90687bf0684d6p+3L, 0xd.e0a590db15c99a5p+1L, 0xc.611bd07d136ba02p-4L, -0xb.fb4a61aece9122bp-1L, 0x9.fb3f0825344de52p-2L, -0xa.663602c79b8e8ecp-5L, -0xb.5aab9aa5c6c2553p-9L, 0x9.c6b71b8dd828c64p-11L, 0x9.306ca994f547077p-20L, -0xa.e3c88f0029de0d1p-24L, 0xc.5c469fd2a8dfc22p-37L, 0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0xc.07b328b1effb03p-1L, -0xb.ee9114778224972p+2L, 0xa.4586c401849b3a9p+4L, -0xa.0a895d3a9e82ae4p+5L, 0xc.7ab783a49f782e2p+5L, -0xb.3ad1cbb9d9242edp+5L, 0x9.74b13510b126f8ep+5L, -0x8.931ac8575f4469p+5L, 0xc.b4cca1579110a15p+4L, -0xa.cf4db705ce10894p+3L, 0x8.4e8d05be2c19216p+0L, 0xe.64558802843df89p+0L, -0xc.9e46a84a284ab95p+1L, 0x8.09e125d6e31381bp+2L, -0xb.c232a5deb9b3ce5p+1L, 0x9.0d66ecc653f1d47p+0L, -0xb.7d2c1c0ad5d0d11p-3L, -0x9.c8ab7f2f851da2dp-7L, 0x9.a1b9393d90aa708p-8L, 0xe.29ea4e8cb8baa35p-18L, -0xa.bde290aad5f5239p-20L, 0xc.34e08db1cc5dff7p-32L, 0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0xe.ab9ed98e4c52c95p-2L, -0xe.efdce2b435277e9p+1L, 0xd.439e11c78d6c4d6p+3L, -0xd.91026f0bd29d199p+4L, 0x9.1c8875e5f3069d6p+5L, -0x9.4e367634301286p+5L, 0x8.e32593da6083e54p+5L, -0x8.ab4c2fae45e736fp+5L, 0xf.795b07e3e718ad3p+4L, -0xc.239a57408bc15f7p+4L, 0x9.0743a5f5b34bf5fp+4L, -0xc.9ea2a6009062863p+3L, 0xf.46322ea81a241fbp+2L, -0x8.5459716030b981p+2L, 0x8.a77b688a295dd83p+1L, -0xd.d5b79fa6ddaa942p-1L, 0xa.735578974886db3p-3L, 0xf.2bf66077398705p-7L, -0x8.78ba67546182ecp-7L, 0xd.0f96e09762ae4b7p-15L, 0xa.00148a20cfdd93dp-18L, -0xb.63f30078a588239p-29L, -0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0xe.97a70223a4da73dp-3L, -0xf.0cb6fa407f38df5p+0L, 0xd.5830e9013b783a8p+2L, -0xd.3d92cf301bf5fbep+3L, 0x8.269cbbf117b07a3p+4L, -0xe.184623528d5047ap+3L, 0xb.ace5b82a4830181p+3L, -0xb.9d26da9275e177fp+3L, 0xa.6817202e331ffc5p+3L, -0xe.26fe3416ecaefa6p+2L, 0x9.0be41ad4225f98dp+2L, -0xc.e9f2f2f049291ep+1L, 0xf.67680e4897b60bep+0L, -0xd.58abb93bbd32d48p-1L, 0xb.c05bc49493e294p-2L, -0xa.cf273cfce9c2447p-3L, 0x8.2009d63fc87650fp-5L, 0xb.1f481d6b1973f98p-7L, -0x9.3599cd8362377f9p-8L, 0x8.fe041d07161ad18p-13L, 0xc.e0c72cd50ad59f6p-18L, -0xe.bc95d564a979727p-28L, 0x0p+0L}; + } + if constexpr (order == 10) { + return {0x0p+0L, 0x8.cf76132907b923fp-4L, -0x9.24fcaed9e3542f7p-1L, 0x8.14bedd3366e9a26p+1L, -0xf.a746e075bc553f8p+1L, 0x8.f7e8d9e307059b7p+2L, -0xd.1cbd02d2fbba7a7p+1L, 0x9.1ca325fcf41627ep+1L, -0x9.ca36832b9cdf557p+1L, 0x9.44c18b73353f954p+1L, -0xa.ddc71623213c14ap+0L, 0xb.412ae4cdd263584p-1L, -0x9.0d573d73ef98e15p-1L, 0xb.27d598ba247d824p-2L, -0xb.adb264bf04b4353p-4L, 0x9.17f95626c5ce28p-6L, -0x8.3f6b10ee55a3b6fp-6L, -0xa.500f37704306c4bp-9L, 0x9.73e6dde48018975p-7L, -0xd.bfb432dd7091673p-9L, 0x8.bdb2e569eaa0703p-12L, 0xc.88702312085adcbp-17L, -0xe.7a1a5226a2ea342p-26L, 0x0p+0L}; + } + if constexpr (order == 11) { + return {0x0p+0L, 0xd.3628de238d184c6p-8L, -0xd.c18a9b8ea152a17p-5L, 0xc.4f09e444d3a6404p-3L, -0xc.5524bb8cf8387b7p-2L, 0xf.595bf715e446977p-2L, -0xd.48b9ce7e5a1ba57p-2L, 0xa.743811d915f0f83p-2L, -0x9.8ddba57c5726fd3p-2L, 0x8.70931ea231e404ep-2L, -0xc.e686d8da15cb65bp-3L, 0x9.e76109d29aa8d6cp-3L, -0xe.d79afacd9220eb9p-4L, 0x9.94e190ebffb5bb9p-4L, -0xc.49b57465c83ddabp-5L, 0x8.06f70799c914d0ap-5L, -0x8.3de8c06cacb4875p-6L, 0xe.7600ff4d82fb121p-8L, -0xf.377cea904fc3cf9p-9L, 0xc.7a7a392871d2799p-10L, -0xf.396a7a4a8644d53p-13L, -0xf.0c8bb6bdd348a37p-17L, 0x8.dbcfd34464a37e2p-24L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.ba5636194c0939c427c9ec5958bcp-8Q, 0x1.3af72853b1890334601f92a1285cp-2Q, 0x1.da1521352f487f1b71f5ba20803ep-1Q, -0x1.5c6f665240adde3380bdc0aea43fp-2Q, 0x1.4840a35a3e5076b07b9bb98536c9p-3Q, -0x1.9d4fdc34ae4edcb2a06a461fd223p-4Q, 0x1.042a86a360591d6b2ba9327c6214p-4Q, -0x1.08554bd18ab256f6f2efbe750debp-5Q, 0x1.86c905bef28a68962be82a3bfae1p-7Q, -0x1.8785b403c86f6f7548c23ebef91ep-9Q, 0x1.f00fc00fce26eee7a53c75fa9281p-12Q, -0x1.43b7ce1fa4e5b162d9e05ba16226p-15Q, -0x1.dafa2eb6c7f5cbd9451ac8b8db32p-18Q, 0x1.2d678c174b94d04aa232fc24fe04p-18Q, -0x1.f0554b8e5712d06e0273c8cb5028p-22Q, -0x1.934a0de4da29338aed7c3945f163p-24Q, -0x1.3a5d95f1928eec0223d4d9335852p-29Q, 0x1.0e0d2138861875f5d48c437e1967p-33Q, -0x1.652333b327609e7169123d062a6bp-41Q, 0x1.02e74c07e60809b1acff78842c2ep-47Q, 0x1.bb358cf4adf4da69e5fa9c48097p-60Q, -0x1.f67e04f08f2152aabe6eb786b11ap-79Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.3daa1461d0cf47fff25f3df9640bp-5Q, 0x1.716f56bac1b1102dab376b1a4013p-1Q, -0x1.16bee9987071960277d4321df089p-2Q, -0x1.f51bd9fa1cf2d9e12262aabd142cp-1Q, 0x1.97243be7bf08455883f653e15918p-1Q, -0x1.b8eef0110c9fa4de8e71d38444edp-2Q, 0x1.2402bce395301d2ffcfa2c7a494fp-3Q, 0x1.80595820660c8830537a9f5a0fdp-10Q, -0x1.fa47fa3f4b021cbace01025dd983p-6Q, 0x1.025a88022a413b155a9680077b56p-6Q, -0x1.3d712aaad77758afb71e5644bf96p-9Q, -0x1.c5c0d04fc87430265835a2d868fdp-11Q, 0x1.c45b69075cdb62e0f0501d72eae6p-12Q, -0x1.6a1670435bfdd529f00d82c5e461p-15Q, -0x1.13c0d643a27dc3e64f7aa5ea1b46p-17Q, 0x1.b2cff794384635cf6c5bd8331b3p-20Q, -0x1.9ee90facd3d1333133d7e205e0a2p-25Q, -0x1.c87e1185ca55b3b93aa7457169a2p-29Q, 0x1.b076e966620448a8ccbae1de566ap-34Q, 0x1.71c42c5b1e646b3eaaa36a5a3022p-44Q, -0x1.e6d8e5785ac9381d9a7b909296b9p-52Q, 0x1.13fd176d0c254d2994cc4f8bbb17p-69Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.77fed2e01693602fb8497759708ep-3Q, 0x1.e1d10780fb06110288f8999dc1b7p-1Q, -0x1.9e9c7ce63835ce70bd9f1949b4fbp+1Q, 0x1.bc153af50c24b9575bdc1b7eea7cp+1Q, -0x1.240fe3f248860f90966b383ce1ccp+1Q, 0x1.80cee17390c17dd6afdc8b5e9badp+0Q, -0x1.abf5df7fd7abfb9aaab015caa89bp-1Q, 0x1.50c7e71a108baf578aa06cfc53efp-2Q, -0x1.4654ed4660723ccc0f0acc159fc7p-4Q, 0x1.091b1dd62c3e5f033d13bd90eb7fp-6Q, -0x1.59c475f85d7f3ec16b121b44ed34p-7Q, 0x1.935e464b93aa450281cf24f670a1p-8Q, -0x1.8fe1513629011cd322fa61848c65p-10Q, 0x1.90feb0894b434ddffdbc8185ec19p-15Q, 0x1.09bd1f2d4e386644ae469eb8633p-15Q, -0x1.da6da6ad5e76b8585347757536dfp-19Q, 0x1.a3886fa6d48c5693a0b3ec42df61p-21Q, 0x1.0f7850b94c92b737f20b8005c2b9p-26Q, -0x1.63226d50629bfc487dd5a4e8ece6p-31Q, -0x1.84d7e34db15d3108fdfa03f5826ep-38Q, 0x1.75cc98099352929e39911fd4363dp-48Q, -0x1.a7d23115de5731da90d3ce0c92b1p-65Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.60087b087d2ef4b82953952dae77p-1Q, -0x1.1c49e2797e56cac67a206b15099bp+0Q, -0x1.f023b1706ef0dac15d9852fed0cdp+0Q, 0x1.8d30c07e51574352c1f1eb201d3dp+2Q, -0x1.80e0de445b219fbdea6ef733b9e6p+2Q, 0x1.c1feac4e70c181d6b4fca6d2077fp+0Q, 0x1.3621ab0ea1b052aecf48cff76ee3p+1Q, -0x1.f3ab98611d47a796d9c54636510bp+1Q, 0x1.5e6794d526a24de36780aeba10e8p+1Q, -0x1.c702eca93a33cb508d7b1d004b3dp-1Q, -0x1.ee149aa686bb2faa29ff6d4c03ddp-4Q, 0x1.ffde0ca5fc1a1519c08ba08f2c0bp-3Q, -0x1.a2cbb989ecd0a0b85c48b0ef17a6p-4Q, 0x1.d58bf4f6c76ea5b68a5554196c66p-7Q, 0x1.206affc103ba0a875625f458349fp-9Q, -0x1.dfc88961f6b157e54f77890beee7p-11Q, 0x1.f86e53415f2a00da542f82566187p-15Q, 0x1.28c920e4a3f6bb0fc001a36c7514p-18Q, -0x1.9c90e430666c8d48daf02182994fp-23Q, -0x1.7e8cf0898f3336a3b6d1b959decdp-32Q, 0x1.cc8984cca607f1a4cd24395b6b4ap-39Q, -0x1.051a1f819156ba9bc5cb80613b7p-54Q, 0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.efa01fe281c907b167ef08ad02bfp+0Q, -0x1.34df3dac7fcd3f885ed5b138fecap+3Q, 0x1.5961138d5be957877d8cfd1a3db6p+4Q, -0x1.014d7a672544a1c4d79025387afbp+5Q, 0x1.5a4b6fa251eaf90e3115b0c4b844p+5Q, -0x1.d72d9b409f2b1bb94911072b924bp+5Q, 0x1.1a6ca7d65632cc9e3b88e5271a3dp+6Q, -0x1.f8d9ef0a2890c5946bb98eca0c52p+5Q, 0x1.142ce1c1f06e19e0c6f07b09b256p+5Q, -0x1.90f390767ce4703536c74ea5d48p+1Q, -0x1.822b1a96e2d91cc911472931b073p+3Q, 0x1.52a34d125b1be5508a31d4571b97p+3Q, -0x1.0b934a511e088d9de4577e69f953p+2Q, 0x1.335fd67def29efb717b6672f0127p-1Q, 0x1.17c48a3b6f0b811400fc04e03edcp-3Q, -0x1.0033850ae88073da0780e3e27f81p-4Q, 0x1.68d4635bbce683527c3478757d85p-8Q, 0x1.b6ad0e03e206f2cc34c3ad5363ddp-12Q, -0x1.c361dbb11082ba0b86af7e6af24bp-16Q, -0x1.d59d4ba004a567edb22672cba48ap-25Q, 0x1.f6c8c69c71b982736f46aeba6448p-31Q, -0x1.1d186572e3d30ab58425e9abcaa6p-45Q, 0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.1672f76c48a3b085a419d3a4a516p+2Q, -0x1.d05e83fe81471c548c376fdd2e88p+4Q, 0x1.49fc051fc99a825862e53c01bf24p+6Q, -0x1.e442104e65335b30f1932f27a50ap+6Q, 0x1.09c52f838d2fca1c275b6969c956p+6Q, 0x1.677b64cbf326e55bcfc7688cab53p+6Q, -0x1.fbf39786bea7b138ef97d6e9bf1fp+7Q, 0x1.628081b6fdd810aa965a5e7f3421p+8Q, -0x1.a2714ddd5c22b603c83ee95dc4cp+8Q, 0x1.cb4de777b4f362d79e6f07abbc76p+8Q, -0x1.9cacd3aee3a7e296cd7191fe8607p+8Q, 0x1.055f4806a834671e4070626e14f2p+8Q, -0x1.8ddf94a470b86c5104b74e18273dp+6Q, 0x1.95561c2d77ea7cb1b418f2fb6391p+3Q, 0x1.8ab9cc38b4948a55522c3044f42ap+2Q, -0x1.6e4f007cb3f6f6544bd7ca0f31d2p+1Q, 0x1.43d7023213a802dd64336017585bp-2Q, 0x1.951cff21de4ac7e4a1f0a8263acfp-6Q, -0x1.5137c147339bc2af2a69107ce017p-9Q, -0x1.3e3df8b2da2752dcb7f7472265e7p-18Q, 0x1.78040f51a9567ebaa0b6d94a065ep-23Q, -0x1.aa8cd8e6f8971ce4ff3376356067p-37Q, -0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.6688e31cf50e0564efea7bdd5fb4p+2Q, -0x1.50ba2688bc0430a9ee74607c1048p+5Q, 0x1.18d5fc503a1772d2730b3e2d1b1p+7Q, -0x1.16422099d0e700c2cc83b4dddfb9p+8Q, 0x1.7cdc33f38c2d168782ab508fe333p+8Q, -0x1.a2f3c3b8e6e4ab101396a85ce4c7p+8Q, 0x1.aa319d6af6ec967e381e228e6cdbp+8Q, -0x1.958a02a1024489567edfcd0c6458p+8Q, 0x1.4bb5b15c50a647500af4903c157ep+8Q, -0x1.caa9291eb011f2ccec5253008c2ep+7Q, 0x1.1f2d7abf22a7296277eac00e42f8p+7Q, -0x1.3b920d0f7e0d09abc1f29b5777d5p+6Q, 0x1.bc14b21b62b9334a0ec071c6d27ap+4Q, 0x1.8c237a0fa26d740497614e6ce7f9p-1Q, -0x1.7f694c35d9d2245677a757e7ef74p+2Q, 0x1.3f67e104a689bca4d8d6dc3c9573p+1Q, -0x1.4cc6c058f371d1d7aadbd3825648p-2Q, -0x1.6b557354b8d84aa675e72e4aa2cep-6Q, 0x1.38d6e371bb0518c7efdfa45f408ep-8Q, 0x1.260d95329ea8e0edce58678f53a3p-17Q, -0x1.5c7911e0053bc1a14fff7b8b350cp-21Q, 0x1.8b88d3fa551bf8449851729a705p-34Q, 0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.80f665163dff60603105451a6e5dp+2Q, -0x1.7dd2228ef04492e49ffcbb4c7665p+5Q, 0x1.48b0d88030936751bd070e523483p+7Q, -0x1.41512ba753d055c75dc8c691e375p+8Q, 0x1.8f56f07493ef05c30063bbd4a838p+8Q, -0x1.675a39773b2485da34f83284198fp+8Q, 0x1.2e9626a21624df1cdd8e3378c5edp+8Q, -0x1.1263590aebe88d200657bdb9b2c3p+8Q, 0x1.9699942af2221429cba46fea0168p+7Q, -0x1.59e9b6e0b9c21128db1639ea581fp+6Q, 0x1.09d1a0b7c583242c5ad2ce6cf431p+3Q, 0x1.cc8ab1005087bf119ad7cb575125p+3Q, -0x1.93c8d5094509572acb009f2e7dd8p+4Q, 0x1.013c24badc62703530bdc5ef098ep+5Q, -0x1.784654bbd73679c9f2def8e43e7p+4Q, 0x1.21acdd98ca7e3a8d97a5878ef247p+3Q, -0x1.6fa583815aba1a21d8baa02798f2p+0Q, -0x1.39156fe5f0a3b45977f7ccd1d734p-4Q, 0x1.34372727b2154e0f6338311dea7cp-5Q, 0x1.c53d49d19717546a333396c8797dp-15Q, -0x1.57bc52155abea4723bbb49833b9ep-17Q, 0x1.869c11b6398bbfee9ec13fe04d71p-29Q, 0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.d573db31c98a592a2b6a75f0e508p+1Q, -0x1.ddfb9c5686a4efd2bd1e32872343p+4Q, 0x1.a873c238f1ad89ace04b72e9c756p+6Q, -0x1.b2204de17a53a3315364d23c8cd4p+7Q, 0x1.23910ebcbe60d3ac8690288b0ac9p+8Q, -0x1.29c6cec6860250c0db3c6cf44b1cp+8Q, 0x1.1c64b27b4c107ca71ade21f474f5p+8Q, -0x1.156985f5c8bce6de73bf215034a9p+8Q, 0x1.ef2b60fc7ce315a6b8de28e5d19dp+7Q, -0x1.84734ae811782beee80a7706ee5bp+7Q, 0x1.20e874beb6697ebef627236a9ac2p+7Q, -0x1.93d454c0120c50c5e5f45832b468p+6Q, 0x1.e8c645d5034483f58d32bb3f4e3bp+5Q, -0x1.0a8b2e2c06173020781b634ff3fbp+5Q, 0x1.14ef6d11452bbb05715fc7688438p+4Q, -0x1.bab6f3f4dbb55284f992570f49b4p+2Q, 0x1.4e6aaf12e910db6611cb1059823cp+0Q, 0x1.e57ecc0ee730e09fd58c24db0642p-4Q, -0x1.0f174cea8c305d809bddceff1132p-4Q, 0x1.a1f2dc12ec55c96d12f54ea71a2fp-12Q, 0x1.4002914419fbb27ad65f3fceabe7p-15Q, -0x1.6c7e600f14b10472b7579ae3bc81p-26Q, -0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.d2f4e044749b4e7a1c71af625a42p+0Q, -0x1.e196df480fe71bea5cbbf54b35dp+3Q, 0x1.ab061d20276f0750e2a71f034e04p+5Q, -0x1.a7b259e6037ebf7c8e2ada0b5ba1p+6Q, 0x1.04d3977e22f60f45b515e22f405p+7Q, -0x1.c308c46a51aa08f31731abdc9396p+6Q, 0x1.759cb70549060301bbf1e90c0d7dp+6Q, -0x1.73a4db524ebc2efdc465df1eceafp+6Q, 0x1.4d02e405c663ff8abf63f13a14eap+6Q, -0x1.c4dfc682dd95df4b0a54f464f5c5p+5Q, 0x1.217c835a844bf319c913a98fb0dfp+5Q, -0x1.9d3e5e5e092523c0105752b9ec75p+4Q, 0x1.eced01c912f6c17b1d53692fa574p+3Q, -0x1.ab15772777a65a90ae2d7cd7191bp+2Q, 0x1.780b7892927c5280dd5becc68e9dp+1Q, -0x1.59e4e79f9d38488dc3c592823598p+0Q, 0x1.04013ac7f90eca1ecf033967d8bdp-2Q, 0x1.63e903ad632e7f3030703fcb6c64p-4Q, -0x1.26b339b06c46eff13165e26c3ea5p-5Q, 0x1.1fc083a0e2c35a300d5c6f8e06aap-10Q, 0x1.9c18e59aa15ab3ece464b5d35415p-15Q, -0x1.d792baac952f2e4df120dee55ebdp-25Q, 0x0p+0Q}; + } + if constexpr (order == 10) { + return {0x0p+0Q, 0x1.19eec26520f7247ef7c6a50c30c1p-1Q, -0x1.249f95db3c6a85ee060075e867d8p+2Q, 0x1.0297dba66cdd344c6014add13643p+4Q, -0x1.f4e8dc0eb78aa7eff1fa777a2d3cp+4Q, 0x1.1efd1b3c60e0b36de4fe2959cc4p+5Q, -0x1.a397a05a5f774f4ee2078ee612bfp+4Q, 0x1.239464bf9e82c4fc4fdd7d10ceaep+4Q, -0x1.3946d065739beaad7a016889ae55p+4Q, 0x1.2898316e66a7f2a70e1a6d4e83adp+4Q, -0x1.5bb8e2c4642782930886e734cb84p+3Q, 0x1.68255c99ba4c6b07d8215b80d139p+2Q, -0x1.21aae7ae7df31c2992880869d80ap+2Q, 0x1.64fab317448fb04743119877b3a8p+1Q, -0x1.75b64c97e09686a5bb55ff7e3516p-1Q, 0x1.22ff2ac4d8b9c4ff1398067e3f99p-3Q, -0x1.07ed621dcab476dea8f9c1c1f859p-3Q, -0x1.4a01e6ee0860d89681b640d3090fp-6Q, 0x1.2e7cdbbc900312ead84b8f4ecdafp-4Q, -0x1.b7f6865bae122ce58cd5b6b5db5p-6Q, 0x1.17b65cad3d540e056708b920004dp-9Q, 0x1.910e0462410b5b96ed51c6158bb4p-14Q, -0x1.cf434a44d45d4684dfb9a8c3dc56p-23Q, 0x0p+0Q}; + } + if constexpr (order == 11) { + return {0x0p+0Q, 0x1.a6c51bc471a3098c7c3ba6f25a23p-5Q, -0x1.b8315371d42a542d22b5306cc4fcp-2Q, 0x1.89e13c889a74c808a95f3d0a6799p+0Q, -0x1.8aa497719f070f6dc765c9fe7e51p+1Q, 0x1.eb2b7ee2bc88d2eef92b7b69cb04p+1Q, -0x1.a91739cfcb4374adc78a37551409p+1Q, 0x1.4e87023b22be1f061884bc9409e9p+1Q, -0x1.31bb74af8ae4dfa54f81310a9052p+1Q, 0x1.0e1263d4463c809bd84430b64506p+1Q, -0x1.9cd0db1b42b96cb6927f658a63e7p+0Q, 0x1.3cec213a53551ad84004db21dcp+0Q, -0x1.daf35f59b2441d717c169614a5aap-1Q, 0x1.329c321d7ff6b77198e763d64324p-1Q, -0x1.8936ae8cb907bb56ce7129ca7fc2p-2Q, 0x1.00dee0f339229a14bdfc09c4e162p-2Q, -0x1.07bd180d959690eaf41df912a76dp-3Q, 0x1.cec01fe9b05f624125be2b70170dp-5Q, -0x1.e6ef9d5209f879f2bf7a3f0d08eap-6Q, 0x1.8f4f47250e3a4f324676c82d9528p-7Q, -0x1.e72d4f4950c89aa59da6f47aed33p-10Q, -0x1.e19176d7ba69146eb048ef5a5e41p-14Q, 0x1.1b79fa688c946fc4993e55c900d5p-21Q, -0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 13) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.749078p-9f, 0x1.8ae6a8p-3f, 0x1.d0088ap-1f, -0x1.20e16ep-4f, -0x1.f688bep-5f, 0x1.2fca44p-5f, -0x1.505c64p-12f, -0x1.014518p-6f, 0x1.c908bep-7f, -0x1.beac12p-8f, 0x1.0006aap-9f, -0x1.d4cc28p-13f, -0x1.a08b66p-15f, 0x1.5f413ap-16f, -0x1.5c34d2p-20f, -0x1.2dc446p-21f, 0x1.74f33ap-24f, 0x1.ddb5ep-29f, -0x1.07969cp-32f, 0x1.2c5958p-38f, 0x1.52fae6p-45f, -0x1.d83da4p-53f, 0x1.1342e6p-65f, 0x1.aa25eep-86f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.239236p-6f, 0x1.0c0768p-1f, 0x1.3373bep-2f, -0x1.856d7ep+0f, 0x1.22d30ap+0f, -0x1.72e38ep-1f, 0x1.8e439cp-2f, -0x1.3bc252p-3f, 0x1.1bc8f6p-5f, 0x1.288446p-11f, -0x1.db22aap-10f, -0x1.3482dcp-11f, 0x1.328522p-11f, -0x1.bbf1c4p-14f, -0x1.17497ap-16f, 0x1.bebecp-18f, -0x1.bc40d8p-22f, 0x1.6454c6p-26f, 0x1.5fce04p-29f, -0x1.12414ap-33f, -0x1.ce70acp-41f, 0x1.8616f6p-48f, -0x1.7b38aep-60f, -0x1.258ba4p-79f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.7e9e9ap-4f, 0x1.e81e74p-1f, -0x1.368292p+1f, 0x1.a1c192p+0f, -0x1.58e6fap-2f, 0x1.2f821p-2f, -0x1.f8fd9cp-2f, 0x1.017de8p-1f, -0x1.5831aep-2f, 0x1.30d718p-3f, -0x1.30a608p-5f, -0x1.632f9ep-11f, 0x1.1cbed4p-8f, -0x1.77d87p-10f, 0x1.50ec24p-14f, 0x1.f99c3cp-15f, -0x1.8453f2p-17f, -0x1.b40566p-23f, 0x1.4c2776p-24f, -0x1.287dbp-29f, -0x1.b00a66p-36f, 0x1.401eb2p-42f, -0x1.715282p-54f, -0x1.1de108p-72f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.95e034p-2f, 0x1.e7908ep-3f, -0x1.29379ap+2f, 0x1.36cc46p+3f, -0x1.433598p+3f, 0x1.9c4d14p+2f, -0x1.ef81d8p+0f, -0x1.2378e8p+0f, 0x1.c6e272p+0f, -0x1.c857e6p-1f, 0x1.3531bp-8f, 0x1.05f57cp-2f, -0x1.38a2dcp-3f, 0x1.35c4a6p-5f, -0x1.fddc3cp-14f, -0x1.2653ap-9f, 0x1.ec5d7p-12f, -0x1.dc01f8p-17f, -0x1.379718p-18f, 0x1.7e5cfep-23f, 0x1.a12416p-29f, -0x1.417132p-35f, 0x1.65f402p-46f, 0x1.15123cp-63f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.4c5d52p+0f, -0x1.5d2572p+2f, 0x1.24b0fp+3f, -0x1.39e0f8p+3f, 0x1.f006ccp+3f, -0x1.0ce3p+5f, 0x1.b8b8bp+5f, -0x1.e69256p+5f, 0x1.503102p+5f, -0x1.6d86aep+3f, -0x1.35b5dcp+3f, 0x1.a6237cp+3f, -0x1.cda456p+2f, 0x1.d5a02cp+0f, 0x1.ecd4c4p-5f, -0x1.660ee6p-3f, 0x1.5158e6p-5f, -0x1.73814cp-10f, -0x1.23460cp-11f, 0x1.fa353cp-16f, 0x1.19c574p-21f, -0x1.4bb43p-27f, 0x1.fc9a2p-38f, 0x1.89a8b8p-54f, 0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.a35158p+1f, -0x1.5a1bc4p+4f, 0x1.fa0a08p+5f, -0x1.a68f66p+6f, 0x1.98403ap+6f, -0x1.03810ep+5f, -0x1.14faaep+6f, 0x1.3d735cp+7f, -0x1.cdbd7ep+7f, 0x1.200434p+8f, -0x1.2591e8p+8f, 0x1.b6219ap+7f, -0x1.a875bap+6f, 0x1.85c7d2p+4f, 0x1.1c0e0ep+2f, -0x1.36efc4p+2f, 0x1.3e3f5cp+0f, -0x1.bffc3ap-5f, -0x1.75f52cp-6f, 0x1.dea5b4p-10f, 0x1.10aa3ep-15f, -0x1.ea6ed6p-21f, 0x1.089ab2p-30f, 0x1.9990a4p-46f, 0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.5d159cp+2f, -0x1.54873ep+5f, 0x1.2c245ep+7f, -0x1.416f5cp+8f, 0x1.e67e2cp+8f, -0x1.298ee6p+9f, 0x1.48ee3ep+9f, -0x1.4e6b46p+9f, 0x1.2782eap+9f, -0x1.bb4938p+8f, 0x1.25dfd4p+8f, -0x1.575e0cp+7f, 0x1.1c029p+6f, -0x1.08a1fep+2f, -0x1.12ed1ep+4f, 0x1.66791ep+3f, -0x1.7aa974p+1f, 0x1.41600cp-3f, 0x1.275514p-4f, -0x1.29374p-7f, -0x1.51ea7ep-13f, 0x1.deb156p-18f, -0x1.6e30fap-27f, -0x1.1b57acp-41f, -0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.d4fe28p+2f, -0x1.ecb0f4p+5f, 0x1.c6da62p+7f, -0x1.e3622ep+8f, 0x1.495088p+9f, -0x1.3d934ap+9f, 0x1.0686p+9f, -0x1.bb4eb6p+8f, 0x1.2c2d3cp+8f, -0x1.6a6f08p+5f, -0x1.48c0f8p+7f, 0x1.bce286p+7f, -0x1.9e035ep+7f, 0x1.737018p+7f, -0x1.15bd06p+7f, 0x1.1609d2p+6f, -0x1.30b382p+4f, 0x1.34c266p+0f, 0x1.56d14ep-1f, -0x1.f82518p-4f, -0x1.1d5d34p-9f, 0x1.599f88p-13f, -0x1.742b04p-22f, -0x1.1fd836p-35f, 0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.6f91b2p+2f, -0x1.8fef12p+5f, 0x1.809c44p+7f, -0x1.b10bfp+8f, 0x1.452582p+9f, -0x1.7231bp+9f, 0x1.7af822p+9f, -0x1.823eap+9f, 0x1.6f4bc2p+9f, -0x1.32f292p+9f, 0x1.d856p+8f, -0x1.59b2fp+8f, 0x1.c4899p+7f, -0x1.01b04cp+7f, 0x1.0ee55p+6f, -0x1.f14982p+4f, 0x1.214136p+3f, -0x1.1e3582p-2f, -0x1.54f128p-1f, 0x1.1dedd2p-3f, 0x1.2b8db4p-10f, -0x1.7cd67ep-12f, 0x1.c17582p-21f, 0x1.5b5402p-33f, -0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.e00f2p+1f, -0x1.09aad6p+5f, 0x1.0083b2p+7f, -0x1.1b0164p+8f, 0x1.8e74c6p+8f, -0x1.907a86p+8f, 0x1.68e4a6p+8f, -0x1.685dfep+8f, 0x1.592f3ap+8f, -0x1.09589ap+8f, 0x1.658b66p+7f, -0x1.f90c72p+6f, 0x1.49a9a8p+6f, -0x1.441338p+5f, 0x1.0b7b2ap+4f, -0x1.d98372p+2f, 0x1.f43ec2p+0f, 0x1.6165b8p-1f, -0x1.4f8a82p-1f, 0x1.267684p-3f, -0x1.8ddc62p-9f, -0x1.979caep-11f, 0x1.95627cp-20f, 0x1.38bcd2p-31f, -0x0p+0f}; + } + if constexpr (order == 10) { + return {0x0p+0f, 0x1.ddc992p+0f, -0x1.0aa6a6p+4f, 0x1.ffd30ap+5f, -0x1.1076bcp+7f, 0x1.5b315p+7f, -0x1.15e62ap+7f, 0x1.73ecdap+6f, -0x1.7ea49ap+6f, 0x1.92fe5p+6f, -0x1.e50ce8p+5f, 0x1.23fe36p+4f, -0x1.1183a6p+3f, 0x1.325da8p+2f, 0x1.b5b93ep+2f, -0x1.6174ccp+3f, 0x1.b8e78ep+2f, -0x1.ffc6e6p+1f, 0x1.807b44p+1f, -0x1.949fp+0f, 0x1.99c706p-2f, -0x1.8b4256p-6f, -0x1.25fbdep-8f, 0x1.a2ffd6p-17f, 0x1.4225e6p-27f, 0x0p+0f}; + } + if constexpr (order == 11) { + return {0x0p+0f, 0x1.82556p-2f, -0x1.b108acp+1f, 0x1.a3afap+3f, -0x1.c92e2ap+4f, 0x1.336156p+5f, -0x1.154d2p+5f, 0x1.af95c6p+4f, -0x1.a382eep+4f, 0x1.a5a57ep+4f, -0x1.48587cp+4f, 0x1.c6519cp+3f, -0x1.64406ep+3f, 0x1.05a0dap+3f, -0x1.34062ap+2f, 0x1.65a332p+1f, -0x1.b27cf8p+0f, 0x1.a5bdc8p-1f, -0x1.571ac2p-2f, 0x1.317678p-3f, -0x1.904f34p-5f, 0x1.0ee4f4p-8f, 0x1.2584f2p-10f, -0x1.373cf6p-17f, -0x1.db60ap-27f, 0x0p+0f}; + } + if constexpr (order == 12) { + return {0x0p+0f, 0x1.8dbb04p-5f, -0x1.bebdc6p-2f, 0x1.aeb7a6p+0f, -0x1.cb9852p+1f, 0x1.240bf6p+2f, -0x1.cab7dp+1f, 0x1.1fd454p+1f, -0x1.1ce974p+1f, 0x1.3bab08p+1f, -0x1.c40e7cp+0f, 0x1.feadc8p-1f, -0x1.a643a4p-1f, 0x1.543b96p-1f, -0x1.577aa6p-2f, 0x1.499f7p-3f, -0x1.d5a152p-4f, 0x1.d4c5bap-5f, -0x1.094f52p-6f, 0x1.cd0926p-8f, -0x1.b2091cp-9f, 0x1.fdc736p-13f, 0x1.4af176p-13f, -0x1.fd199ap-19f, -0x1.7fa406p-27f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.749078c0867aap-9, 0x1.8ae6a79b4939p-3, 0x1.d008898983914p-1, -0x1.20e16d5539e3fp-4, -0x1.f688bd1280c7p-5, 0x1.2fca4301354a5p-5, -0x1.505c64431d7a7p-12, -0x1.0145189baf014p-6, 0x1.c908becee5a6ap-7, -0x1.beac12be1e7dep-8, 0x1.0006a916adee3p-9, -0x1.d4cc286b09e13p-13, -0x1.a08b65bbb5986p-15, 0x1.5f413ab3a7eb9p-16, -0x1.5c34d16af592p-20, -0x1.2dc4454eebde3p-21, 0x1.74f33a2ccbc65p-24, 0x1.ddb5df0a412fdp-29, -0x1.07969b3a158bdp-32, 0x1.2c5958b74836cp-38, 0x1.52fae6e83092p-45, -0x1.d83da475a639cp-53, 0x1.1342e56840ec2p-65, 0x1.aa25edf8f64ffp-86, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.23923550f457dp-6, 0x1.0c0767795d12bp-1, 0x1.3373be839b47cp-2, -0x1.856d7e6b6468cp+0, 0x1.22d30ac28dd9dp+0, -0x1.72e38df054a24p-1, 0x1.8e439b194a1c1p-2, -0x1.3bc2524066e84p-3, 0x1.1bc8f6e410596p-5, 0x1.2884461caa1e3p-11, -0x1.db22a9804aa11p-10, -0x1.3482dca87f01cp-11, 0x1.3285223dae55ap-11, -0x1.bbf1c4306d1a3p-14, -0x1.17497a4dcd45p-16, 0x1.bebec0cbd1f99p-18, -0x1.bc40d833ef35ap-22, 0x1.6454c6cebdf98p-26, 0x1.5fce040bf0fa2p-29, -0x1.1241493325c92p-33, -0x1.ce70ab06ee7ebp-41, 0x1.8616f674ef406p-48, -0x1.7b38ad7c07a3ap-60, -0x1.258ba4702de86p-79, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.7e9e99d93265ep-4, 0x1.e81e73bf7d4e6p-1, -0x1.368292c7be10ep+1, 0x1.a1c192a939b96p+0, -0x1.58e6f9045a40ep-2, 0x1.2f82100ba4f28p-2, -0x1.f8fd9be6cc911p-2, 0x1.017de77081fc3p-1, -0x1.5831ad1464211p-2, 0x1.30d718554c4cbp-3, -0x1.30a6075105b3bp-5, -0x1.632f9e9eb99fcp-11, 0x1.1cbed37ba4dbep-8, -0x1.77d86fa7164cp-10, 0x1.50ec238da0096p-14, 0x1.f99c3b6dd2e63p-15, -0x1.8453f2cbc2d99p-17, -0x1.b4056601f4cp-23, 0x1.4c2776a5f116ep-24, -0x1.287daf168a21ap-29, -0x1.b00a66e2af604p-36, 0x1.401eb1fad689ep-42, -0x1.71528144e6955p-54, -0x1.1de10823e626cp-72, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.95e033565cd46p-2, 0x1.e7908dd5753c9p-3, -0x1.293799fcf6c8ep+2, 0x1.36cc467b08bf8p+3, -0x1.4335983e13577p+3, 0x1.9c4d14b541486p+2, -0x1.ef81d85b23a02p+0, -0x1.2378e73c6b10ap+0, 0x1.c6e27151761e4p+0, -0x1.c857e67243154p-1, 0x1.3531afa42b77fp-8, 0x1.05f57c1a6464dp-2, -0x1.38a2db882124ep-3, 0x1.35c4a5041d9b9p-5, -0x1.fddc3c9f813d7p-14, -0x1.2653a0321997dp-9, 0x1.ec5d6f7ab50c1p-12, -0x1.dc01f8633f4c6p-17, -0x1.379717b64ca38p-18, 0x1.7e5cfdc9a1b18p-23, 0x1.a124166c57861p-29, -0x1.4171311c3a7b2p-35, 0x1.65f402b77f1abp-46, 0x1.15123cc4efb61p-63, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.4c5d516dd5341p+0, -0x1.5d2571cda5544p+2, 0x1.24b0f0352262ap+3, -0x1.39e0f8d13e8dbp+3, 0x1.f006cc927be53p+3, -0x1.0ce2ffa464611p+5, 0x1.b8b8afcf323dp+5, -0x1.e6925570e3f51p+5, 0x1.503102590c0b8p+5, -0x1.6d86add093f07p+3, -0x1.35b5dc1025f2dp+3, 0x1.a6237c764b4a3p+3, -0x1.cda455c3ae393p+2, 0x1.d5a02bb93708ap+0, 0x1.ecd4c4adc076p-5, -0x1.660ee59df078bp-3, 0x1.5158e51b27e5ep-5, -0x1.73814bfd57b68p-10, -0x1.23460c48f637p-11, 0x1.fa353cdebaaabp-16, 0x1.19c5738584247p-21, -0x1.4bb4308ed52p-27, 0x1.fc9a1f4f09859p-38, 0x1.89a8b7b9d28d2p-54, 0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.a35157d8dba57p+1, -0x1.5a1bc35a1cc0ep+4, 0x1.fa0a0878d9a93p+5, -0x1.a68f6523a827p+6, 0x1.98403a971e631p+6, -0x1.03810e60e0205p+5, -0x1.14faaec768465p+6, 0x1.3d735b94c1054p+7, -0x1.cdbd7de801408p+7, 0x1.20043470ad457p+8, -0x1.2591e882d85cdp+8, 0x1.b621996a63c18p+7, -0x1.a875ba068d845p+6, 0x1.85c7d166f26b7p+4, 0x1.1c0e0d6b929f9p+2, -0x1.36efc345fd87ep+2, 0x1.3e3f5c2c93c34p+0, -0x1.bffc3922a3129p-5, -0x1.75f52c4bce394p-6, 0x1.dea5b49d2b29ap-10, 0x1.10aa3eff5f8abp-15, -0x1.ea6ed6c321e75p-21, 0x1.089ab261bfe1dp-30, 0x1.9990a3735f2b8p-46, 0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.5d159c98a090ap+2, -0x1.54873e7e1b3d2p+5, 0x1.2c245e185ac8bp+7, -0x1.416f5cc6c22c2p+8, 0x1.e67e2b7f93304p+8, -0x1.298ee57db6ed6p+9, 0x1.48ee3d90a4e35p+9, -0x1.4e6b4521eb7a5p+9, 0x1.2782e95d7bf9fp+9, -0x1.bb493883e544dp+8, 0x1.25dfd4b9fa45bp+8, -0x1.575e0c206b7eep+7, 0x1.1c028f2725fcep+6, -0x1.08a1fe0ac681ap+2, -0x1.12ed1d6ca773p+4, 0x1.66791e904ad3bp+3, -0x1.7aa9733036516p+1, 0x1.41600caa02956p-3, 0x1.275514f436a32p-4, -0x1.29373f56ac109p-7, -0x1.51ea7d9f34504p-13, 0x1.deb156b08b87fp-18, -0x1.6e30fae8c34eep-27, -0x1.1b57abb7d7f1cp-41, -0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.d4fe27a0835aep+2, -0x1.ecb0f32ca76fbp+5, 0x1.c6da62a20cd0bp+7, -0x1.e3622dd5ba05ep+8, 0x1.49508717a90e8p+9, -0x1.3d934aacf56d1p+9, 0x1.068600d74e1c9p+9, -0x1.bb4eb52dbc23dp+8, 0x1.2c2d3c048caafp+8, -0x1.6a6f07f5d07ddp+5, -0x1.48c0f7b3bed9ep+7, 0x1.bce28601020e5p+7, -0x1.9e035ea535c3bp+7, 0x1.737017c34f7dfp+7, -0x1.15bd065f2789cp+7, 0x1.1609d2e86de1fp+6, -0x1.30b382548236p+4, 0x1.34c266d274d02p+0, 0x1.56d14dbd1c0fp-1, -0x1.f82518456ddfap-4, -0x1.1d5d333a03734p-9, 0x1.599f88826e1dfp-13, -0x1.742b04eba227p-22, -0x1.1fd835e2f3ac3p-35, 0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.6f91b1fb16e46p+2, -0x1.8fef11e8059cfp+5, 0x1.809c444472a8ep+7, -0x1.b10bf090c92b5p+8, 0x1.45258188f7147p+9, -0x1.7231afc08bd27p+9, 0x1.7af82162ac35ap+9, -0x1.823e9f8992b5ap+9, 0x1.6f4bc124eb7dcp+9, -0x1.32f291524b4fdp+9, 0x1.d856007cb8fap+8, -0x1.59b2f057a74e5p+8, 0x1.c4898ffe6b604p+7, -0x1.01b04bb5c7e4fp+7, 0x1.0ee550f2b46fbp+6, -0x1.f149829700499p+4, 0x1.21413698e7cf2p+3, -0x1.1e358290df39dp-2, -0x1.54f12799790c9p-1, 0x1.1dedd290f908p-3, 0x1.2b8db385d6eebp-10, -0x1.7cd67d6099899p-12, 0x1.c1758243d6f69p-21, 0x1.5b5402fbe8db8p-33, -0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.e00f201ca9b48p+1, -0x1.09aad588fc6e2p+5, 0x1.0083b1ed3add2p+7, -0x1.1b01639f15a47p+8, 0x1.8e74c5b415b4dp+8, -0x1.907a858da198ep+8, 0x1.68e4a68143eb6p+8, -0x1.685dfe59eb94fp+8, 0x1.592f39b72049ap+8, -0x1.09589acf597f5p+8, 0x1.658b66c44d2dap+7, -0x1.f90c71880a916p+6, 0x1.49a9a7009f2b2p+6, -0x1.441338caa52dp+5, 0x1.0b7b2a297fde1p+4, -0x1.d98372b1c68d4p+2, 0x1.f43ec1f2a328p+0, 0x1.6165b77555fcbp-1, -0x1.4f8a8171bb09p-1, 0x1.267683e93d2b7p-3, -0x1.8ddc624d415c9p-9, -0x1.979cae945ae1p-11, 0x1.95627b187fdb2p-20, 0x1.38bcd286c35dep-31, -0x0p+0}; + } + if constexpr (order == 10) { + return {0x0p+0, 0x1.ddc9914b8fce2p+0, -0x1.0aa6a6fe474ap+4, 0x1.ffd30a30f104ep+5, -0x1.1076bbdb4cf75p+7, 0x1.5b314fd5bd842p+7, -0x1.15e629a2f07abp+7, 0x1.73ecdaa7dbcd1p+6, -0x1.7ea4991281a8p+6, 0x1.92fe5087093b6p+6, -0x1.e50ce86c3eca3p+5, 0x1.23fe36ce5250dp+4, -0x1.1183a5ac74637p+3, 0x1.325da71616788p+2, 0x1.b5b93d37eb78fp+2, -0x1.6174cc292a978p+3, 0x1.b8e78e1a9ada5p+2, -0x1.ffc6e54f09b8ap+1, 0x1.807b43d233e13p+1, -0x1.949effe4fd5f1p+0, 0x1.99c706ee33d33p-2, -0x1.8b4255eb2ab53p-6, -0x1.25fbde4ae0e29p-8, 0x1.a2ffd5a58a3e6p-17, 0x1.4225e5d67d6a9p-27, 0x0p+0}; + } + if constexpr (order == 11) { + return {0x0p+0, 0x1.82555f0fca682p-2, -0x1.b108ac4bd9d5ep+1, 0x1.a3af9f5e28534p+3, -0x1.c92e2a69bebeap+4, 0x1.336156f19a3ebp+5, -0x1.154d20c532d38p+5, 0x1.af95c6a7f034fp+4, -0x1.a382ed435f8edp+4, 0x1.a5a57db59b67cp+4, -0x1.48587bdb4781p+4, 0x1.c6519b1cdb293p+3, -0x1.64406dc5dece2p+3, 0x1.05a0da2a87dbp+3, -0x1.34062a3bf7c11p+2, 0x1.65a3327bcf1acp+1, -0x1.b27cf7ab49be3p+0, 0x1.a5bdc7192b9c4p-1, -0x1.571ac2983f85ep-2, 0x1.31767817c6adfp-3, -0x1.904f3491bf69cp-5, 0x1.0ee4f3163f55fp-8, 0x1.2584f1f36b43ep-10, -0x1.373cf584c03efp-17, -0x1.db60a068c3378p-27, 0x0p+0}; + } + if constexpr (order == 12) { + return {0x0p+0, 0x1.8dbb03fad2c3p-5, -0x1.bebdc5d3b2391p-2, 0x1.aeb7a5ea21053p+0, -0x1.cb9851522d20bp+1, 0x1.240bf59871b99p+2, -0x1.cab7cf1ed537ep+1, 0x1.1fd4543a5fd8dp+1, -0x1.1ce9744c1c975p+1, 0x1.3bab08bd76345p+1, -0x1.c40e7b4e77557p+0, 0x1.feadc8c7ce87bp-1, -0x1.a643a47d84b4ep-1, 0x1.543b964e0f03ap-1, -0x1.577aa576ffa65p-2, 0x1.499f6f7a97a23p-3, -0x1.d5a15151b9016p-4, 0x1.d4c5badb46707p-5, -0x1.094f5215690dbp-6, 0x1.cd0926fb9e142p-8, -0x1.b2091c2c73ddp-9, 0x1.fdc7350edfaddp-13, 0x1.4af17513fc3a8p-13, -0x1.fd199a3cefa32p-19, -0x1.7fa406e41ed66p-27, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xb.a483c60433d4d39p-12L, 0xc.57353cda49c7dedp-6L, 0xe.80444c4c1c89ecep-4L, -0x9.070b6aa9cf1f929p-7L, -0xf.b445e89406380cap-8L, 0x9.7e521809aa52714p-8L, -0xa.82e32218ebd378fp-15L, -0x8.0a28c4dd780a179p-9L, 0xe.4845f6772d3537ep-10L, -0xd.f56095f0f3ef04ap-11L, 0x8.003548b56f71a16p-12L, -0xe.a66143584f09aacp-16L, -0xd.045b2dddacc33b9p-18L, 0xa.fa09d59d3f5ca6ep-19L, -0xa.e1a68b57ac901bdp-23L, -0x9.6e222a775ef19bdp-24L, 0xb.a799d1665e328c8p-27L, 0xe.edaef852097ea04p-32L, -0x8.3cb4d9d0ac5e8bp-35L, 0x9.62cac5ba41b6085p-41L, 0xa.97d73741848fd34p-48L, -0xe.c1ed23ad31ce184p-56L, 0x8.9a172b420760cedp-68L, 0xd.512f6fc7b27f70ap-89L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0x9.1c91aa87a2be53cp-9L, 0x8.603b3bcae89572fp-4L, 0x9.9b9df41cda3e206p-5L, -0xc.2b6bf35b234616fp-3L, 0x9.169856146ece4d3p-3L, -0xb.971c6f82a511d45p-4L, 0xc.721cd8ca50e0b31p-5L, -0x9.de1292033741f59p-6L, 0x8.de47b72082cb31fp-8L, 0x9.442230e550f1904p-14L, -0xe.d9154c025508998p-13L, -0x9.a416e543f80e22fp-14L, 0x9.942911ed72acc95p-14L, -0xd.df8e218368d1bf8p-17L, -0x8.ba4bd26e6a27feep-19L, 0xd.f5f6065e8fcc9b9p-21L, -0xd.e206c19f79acc2bp-25L, 0xb.22a63675efcbfa2p-29L, 0xa.fe70205f87d115p-32L, -0x8.920a49992e4937dp-36L, -0xe.7385583773f5acap-44L, 0xc.30b7b3a77a02f75p-51L, -0xb.d9c56be03d1d02cp-63L, -0x9.2c5d23816f42d62p-82L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xb.f4f4cec9932f0f6p-7L, 0xf.40f39dfbea733adp-4L, -0x9.b414963df08728ap-2L, 0xd.0e0c9549cdcb3a8p-3L, -0xa.c737c822d206e95p-5L, 0x9.7c10805d27943dp-5L, -0xf.c7ecdf3664887bbp-5L, 0x8.0bef3b840fe187dp-4L, -0xa.c18d68a32108919p-5L, 0x9.86b8c2aa62655e8p-6L, -0x9.85303a882d9d527p-8L, -0xb.197cf4f5ccfe389p-14L, 0x8.e5f69bdd26decb6p-11L, -0xb.bec37d38b25fe46p-13L, 0xa.87611c6d004b37bp-17L, 0xf.cce1db6e973199cp-18L, -0xc.229f965e16ccb5cp-20L, -0xd.a02b300fa5ffc5bp-26L, 0xa.613bb52f88b70ecp-27L, -0x9.43ed78b4510cd51p-32L, -0xd.805337157b01dc1p-39L, 0xa.00f58fd6b44ef03p-45L, -0xb.8a940a2734aa51ap-57L, -0x8.ef08411f3135df8p-75L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xc.af019ab2e6a32f3p-5L, 0xf.3c846eaba9e4babp-6L, -0x9.49bccfe7b646d1p-1L, 0x9.b66233d845fbec5p+0L, -0xa.19acc1f09abba63p+0L, 0xc.e268a5aa0a433dap-1L, -0xf.7c0ec2d91d00d64p-3L, -0x9.1bc739e3588517cp-3L, 0xe.37138a8bb0f1f2cp-3L, -0xe.42bf339218a9d4bp-4L, 0x9.a98d7d215bbfa64p-11L, 0x8.2fabe0d32326ba1p-5L, -0x9.c516dc410926fe2p-6L, 0x9.ae252820ecdca2bp-8L, -0xf.eee1e4fc09eb578p-17L, -0x9.329d0190ccbe8fdp-12L, 0xf.62eb7bd5a860bbfp-15L, -0xe.e00fc319fa6309dp-20L, -0x9.bcb8bdb2651be88p-21L, 0xb.f2e7ee4d0d8bee7p-26L, 0xd.0920b362bc30ba7p-32L, -0xa.0b8988e1d3d9312p-38L, 0xb.2fa015bbf8d5914p-49L, 0x8.a891e6277db069dp-66L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xa.62ea8b6ea9a0684p-3L, -0xa.e92b8e6d2aa1c92p-1L, 0x9.258781a91314f19p+0L, -0x9.cf07c689f46d8f8p+0L, 0xf.80366493df29948p+0L, -0x8.6717fd232308bfp+2L, 0xd.c5c57e7991e8074p+2L, -0xf.3492ab871fa8811p+2L, 0xa.818812c8605bdbdp+2L, -0xb.6c356e849f83a5ep+0L, -0x9.adaee0812f969a5p+0L, 0xd.311be3b25a5141ap+0L, -0xe.6d22ae1d71c94e9p-1L, 0xe.ad015dc9b84519p-3L, 0xf.66a6256e03aff12p-8L, -0xb.30772cef83c5a19p-6L, 0xa.8ac728d93f2edffp-8L, -0xb.9c0a5feabdb40fdp-13L, -0x9.1a306247b1b7d38p-14L, 0xf.d1a9e6f5d555505p-19L, 0x8.ce2b9c2c2123732p-24L, -0xa.5da18476a8fff99p-30L, 0xf.e4d0fa784c2c7aap-41L, 0xc.4d45bdce9468eb9p-57L, 0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xd.1a8abec6dd2b59ap-2L, -0xa.d0de1ad0e606ddbp+1L, 0xf.d05043c6cd499c3p+2L, -0xd.347b291d41380b3p+3L, 0xc.c201d4b8f318b15p+3L, -0x8.1c08730701024ebp+2L, -0x8.a7d5763b4232a87p+3L, 0x9.eb9adca6082a1b5p+4L, -0xe.6debef400a03eb9p+4L, 0x9.0021a3856a2b57ap+5L, -0x9.2c8f4416c2e68c6p+5L, 0xd.b10ccb531e0bf33p+4L, -0xd.43add0346c224eap+3L, 0xc.2e3e8b37935bbc2p+1L, 0x8.e0706b5c94fcaddp-1L, -0x9.b77e1a2fec3f3f9p-1L, 0x9.f1fae1649e1a3cap-3L, -0xd.ffe1c91518944a2p-8L, -0xb.afa9625e71ca263p-9L, 0xe.f52da4e9594cf98p-13L, 0x8.8551f7fafc55605p-18L, -0xf.5376b6190f3a9e1p-24L, 0x8.44d5930dff0e45cp-33L, 0xc.cc851b9af95c09cp-49L, 0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xa.e8ace4c50485103p-1L, -0xa.a439f3f0d9e9083p+2L, 0x9.6122f0c2d6458a6p+4L, -0xa.0b7ae6361160fep+5L, 0xf.33f15bfc9982224p+5L, -0x9.4c772bedb76afeap+6L, 0xa.4771ec85271a548p+6L, -0xa.735a290f5bd2b61p+6L, 0x9.3c174aebdfcfafep+6L, -0xd.da49c41f2a26a23p+5L, 0x9.2efea5cfd22d7f4p+5L, -0xa.baf061035bf7341p+4L, 0x8.e01479392fe733bp+3L, -0x8.450ff056340cfcbp-1L, -0x8.9768eb653b980edp+1L, 0xb.33c8f482569da0fp+0L, -0xb.d54b9981b28ad7fp-2L, 0xa.0b00655014aaec4p-6L, 0x9.3aa8a7a1b518f2bp-7L, -0x9.49b9fab56084ac4p-10L, -0xa.8f53ecf9a28205dp-16L, 0xe.f58ab5845c3f783p-21L, -0xb.7187d7461a76c1bp-30L, -0x8.dabd5dbebf8dd41p-44L, -0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0xe.a7f13d041ad70dp-1L, -0xf.658799653b7da4ap+2L, 0xe.36d31510668543p+4L, -0xf.1b116eadd02ec05p+5L, 0xa.4a8438bd48741b4p+6L, -0x9.ec9a5567ab68514p+6L, 0x8.343006ba70e487p+6L, -0xd.da75a96de11e455p+5L, 0x9.6169e024655745ap+5L, -0xb.53783fae83ee946p+2L, -0xa.4607bd9df6ceea7p+4L, 0xd.e71430081072aa3p+4L, -0xc.f01af529ae1d75fp+4L, 0xb.9b80be1a7bef779p+4L, -0x8.ade832f93c4e129p+4L, 0x8.b04e97436f0fa36p+3L, -0x9.859c12a411afe04p+1L, 0x9.a6133693a681011p-3L, 0xa.b68a6de8e077c6ep-4L, -0xf.c128c22b6efd051p-7L, -0x8.eae999d01b9a034p-12L, 0xa.ccfc441370efba9p-16L, -0xb.a158275d1138117p-25L, -0x8.fec1af179d61b9fp-38L, 0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0xb.7c8d8fd8b7231c8p-1L, -0xc.7f788f402ce76dp+2L, 0xc.04e222239546c21p+4L, -0xd.885f8486495a99bp+5L, 0xa.292c0c47b8a3474p+6L, -0xb.918d7e045e93b18p+6L, 0xb.d7c10b1561accb3p+6L, -0xc.11f4fc4c95acfe3p+6L, 0xb.7a5e09275bee17p+6L, -0x9.97948a925a7e40dp+6L, 0xe.c2b003e5c7d03a7p+5L, -0xa.cd9782bd3a72557p+5L, 0xe.244c7ff35b01e7fp+4L, -0x8.0d825dae3f27671p+4L, 0x8.772a8795a37d803p+3L, -0xf.8a4c14b8024c883p+1L, 0x9.0a09b4c73e78daep+0L, -0x8.f1ac1486f9ce578p-5L, -0xa.a7893ccbc864ac9p-4L, 0x8.ef6e9487c83fc69p-6L, 0x9.5c6d9c2eb77580cp-13L, -0xb.e6b3eb04cc4c723p-15L, 0xe.0bac121eb7b4789p-24L, 0xa.daa017df46dbf37p-36L, -0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0xf.007900e54da3df6p-2L, -0x8.4d56ac47e370e97p+2L, 0x8.041d8f69d6e8efep+4L, -0x8.d80b1cf8ad238cbp+5L, 0xc.73a62da0ada64c1p+5L, -0xc.83d42c6d0cc6daep+5L, 0xb.4725340a1f5b14p+5L, -0xb.42eff2cf5ca79c7p+5L, 0xa.c979cdb9024d1b7p+5L, -0x8.4ac4d67acbfab3fp+5L, 0xb.2c5b3622696cf85p+4L, -0xf.c8638c40548b2c6p+3L, 0xa.4d4d3804f95933ep+3L, -0xa.2099c6552967d07p+2L, 0x8.5bd9514bfef0a5ep+1L, -0xe.cc1b958e3469fa9p-1L, 0xf.a1f60f951940304p-3L, 0xb.0b2dbbaaafe5407p-4L, -0xa.7c540b8dd847e5dp-4L, 0x9.33b41f49e95bb8cp-6L, -0xc.6ee3126a0ae46c7p-12L, -0xc.bce574a2d70819p-14L, 0xc.ab13d8c3fed8cb7p-23L, 0x9.c5e694361aef307p-34L, -0x0p+0L}; + } + if constexpr (order == 10) { + return {0x0p+0L, 0xe.ee4c8a5c7e71374p-3L, -0x8.553537f23a4ffcdp+1L, 0xf.fe98518788271d7p+2L, -0x8.83b5deda67ba93ep+4L, 0xa.d98a7eadec21394p+4L, -0x8.af314d1783d59d9p+4L, 0xb.9f66d53ede688c9p+3L, -0xb.f524c8940d401f5p+3L, 0xc.97f2843849db0a7p+3L, -0xf.28674361f651857p+2L, 0x9.1ff1b672928682ep+1L, -0x8.8c1d2d63a31b528p+0L, 0x9.92ed38b0b3c3d8dp-1L, 0xd.adc9e9bf5bc7971p-1L, -0xb.0ba6614954bbf44p+0L, 0xd.c73c70d4d6d2496p-1L, -0xf.fe372a784dc531cp-2L, 0xc.03da1e919f0994ap-2L, -0xc.a4f7ff27eaf885bp-3L, 0xc.ce3837719e99949p-5L, -0xc.5a12af5955a96fbp-9L, -0x9.2fdef25707148aap-11L, 0xd.17fead2c51f312dp-20L, 0xa.112f2eb3eb54818p-30L, 0x0p+0L}; + } + if constexpr (order == 11) { + return {0x0p+0L, 0xc.12aaf87e5340e4ep-5L, -0xd.8845625eceaef48p-2L, 0xd.1d7cfaf14299ea2p+0L, -0xe.4971534df5f5093p+1L, 0x9.9b0ab78cd1f558dp+2L, -0x8.aa690629969becdp+2L, 0xd.7cae353f81a7b93p+1L, -0xd.1c176a1afc76911p+1L, 0xd.2d2bedacdb3df28p+1L, -0xa.42c3deda3c082c7p+1L, 0xe.328cd8e6d949737p+0L, -0xb.22036e2ef671076p+0L, 0x8.2d06d1543ed7f3cp+0L, -0x9.a03151dfbe084ep-1L, 0xb.2d1993de78d60e7p-2L, -0xd.93e7bd5a4df1be7p-3L, 0xd.2dee38c95ce1d1p-4L, -0xa.b8d614c1fc2f1d3p-5L, 0x9.8bb3c0be356f62ap-6L, -0xc.8279a48dfb4e393p-8L, 0x8.772798b1faafa2dp-11L, 0x9.2c278f9b5a1f3dep-13L, -0x9.b9e7ac2601f7483p-20L, -0xe.db05034619bbe3ap-30L, 0x0p+0L}; + } + if constexpr (order == 12) { + return {0x0p+0L, 0xc.6dd81fd69617fa7p-8L, -0xd.f5ee2e9d91c88f7p-5L, 0xd.75bd2f51082950ep-3L, -0xe.5cc28a9169055e6p-2L, 0x9.205facc38dccbfep-1L, -0xe.55be78f6a9bf069p-2L, 0x8.fea2a1d2fec658fp-2L, -0x8.e74ba260e4bab6fp-2L, 0x9.dd5845ebb1a25a2p-2L, -0xe.2073da73baab7afp-3L, 0xf.f56e463e743d47ep-4L, -0xd.321d23ec25a6d38p-4L, 0xa.a1dcb270781d1d4p-4L, -0xa.bbd52bb7fd3277ep-5L, 0xa.4cfb7bd4bd115e9p-6L, -0xe.ad0a8a8dc80b1aep-7L, 0xe.a62dd6da3383b8ap-8L, -0x8.4a7a90ab486d843p-9L, 0xe.684937dcf0a13c9p-11L, -0xd.9048e1639ee817cp-12L, 0xf.ee39a876fd6e928p-16L, 0xa.578ba89fe1d43b5p-16L, -0xf.e8ccd1e77d18dbbp-22L, -0xb.fd203720f6b2eddp-30L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.749078c0867a9a724454443e786p-9Q, 0x1.8ae6a79b4938fbd909b199343627p-3Q, 0x1.d008898983913d9bf1d194ac98ebp-1Q, -0x1.20e16d5539e3f25296b1c6880b7dp-4Q, -0x1.f688bd1280c70194203f74426669p-5Q, 0x1.2fca4301354a4e285e82fc4b6146p-5Q, -0x1.505c64431d7a6f1e36954a7c7627p-12Q, -0x1.0145189baf0142f2a8862b8be414p-6Q, 0x1.c908becee5a6a6fcccc95605353cp-7Q, -0x1.beac12be1e7de0939dd15f03161ap-8Q, 0x1.0006a916adee342c6b2792c6bd71p-9Q, -0x1.d4cc286b09e13557f3e87a0f9cap-13Q, -0x1.a08b65bbb598677114fddb7b659bp-15Q, 0x1.5f413ab3a7eb94dcb396b2657e81p-16Q, -0x1.5c34d16af592037a11107a487af4p-20Q, -0x1.2dc4454eebde3379c7645c4ba813p-21Q, 0x1.74f33a2ccbc6518fcdedc7d5a964p-24Q, 0x1.ddb5df0a412fd407d061c573b7b3p-29Q, -0x1.07969b3a158bd160a5cdad0ecd8ep-32Q, 0x1.2c5958b74836c10a9059d0bfc5aap-38Q, 0x1.52fae6e83091fa686190e11a0ab7p-45Q, -0x1.d83da475a639c307966abb294442p-53Q, 0x1.1342e56840ec19da921d2c329457p-65Q, 0x1.aa25edf8f64fee132e1b309309a8p-86Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.23923550f457ca7814b0bb3fd63cp-6Q, 0x1.0c0767795d12ae5d156ec5cf442dp-1Q, 0x1.3373be839b47c40b1d36ec3e479ap-2Q, -0x1.856d7e6b6468c2deff8342e75bafp+0Q, 0x1.22d30ac28dd9c9a5de5413538cdcp+0Q, -0x1.72e38df054a23a8a5ebabc499011p-1Q, 0x1.8e439b194a1c16626ebcbea59c97p-2Q, -0x1.3bc2524066e83eb2d5b3ff97e1f2p-3Q, 0x1.1bc8f6e41059663daa79bf4a8b49p-5Q, 0x1.2884461caa1e3207b6de1334aafbp-11Q, -0x1.db22a9804aa1133069d05b96cb79p-10Q, -0x1.3482dca87f01c45e946a258c3e3ep-11Q, 0x1.3285223dae55992a1d57ada1536cp-11Q, -0x1.bbf1c4306d1a37f02d18135ce361p-14Q, -0x1.17497a4dcd44ffdc92c6ebd1a07dp-16Q, 0x1.bebec0cbd1f99371a7867cbe4001p-18Q, -0x1.bc40d833ef3598561d72cdf89c2bp-22Q, 0x1.6454c6cebdf97f43adbbdee1eef5p-26Q, 0x1.5fce040bf0fa22a0bb7f52a52ec5p-29Q, -0x1.1241493325c926f92e656210ed45p-33Q, -0x1.ce70ab06ee7eb593175a3e65f70bp-41Q, 0x1.8616f674ef405eeabf053da9c793p-48Q, -0x1.7b38ad7c07a3a058098173d3a941p-60Q, -0x1.258ba4702de85ac45e001504a5c3p-79Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.7e9e99d93265e1ecb27f1a82e40ep-4Q, 0x1.e81e73bf7d4e6759d9f3db7612c7p-1Q, -0x1.368292c7be10e513188a104c5cc1p+1Q, 0x1.a1c192a939b9674ffcca9b2f1f92p+0Q, -0x1.58e6f9045a40dd2a472104dd130ep-2Q, 0x1.2f82100ba4f2879faa0ab73165e9p-2Q, -0x1.f8fd9be6cc910f763e95aa8ab1d7p-2Q, 0x1.017de77081fc30f9ad09eddaf4ddp-1Q, -0x1.5831ad14642112326c714ae42502p-2Q, 0x1.30d718554c4cabcfafc1434f8aebp-3Q, -0x1.30a6075105b3aa4d5336fc195157p-5Q, -0x1.632f9e9eb99fc711faf42ce1fdf8p-11Q, 0x1.1cbed37ba4dbd96c225d81054e98p-8Q, -0x1.77d86fa7164bfc8c126a64816b23p-10Q, 0x1.50ec238da00966f5e3d28fc92775p-14Q, 0x1.f99c3b6dd2e633388ada35d1c02cp-15Q, -0x1.8453f2cbc2d996b7775a123e93afp-17Q, -0x1.b4056601f4bff8b5e7d36857ce88p-23Q, 0x1.4c2776a5f116e1d85dd046bd9771p-24Q, -0x1.287daf168a219aa1132a37934623p-29Q, -0x1.b00a66e2af603b8210a104b461a3p-36Q, 0x1.401eb1fad689de068ef9a337dccp-42Q, -0x1.71528144e6954a34804ddc8b69bap-54Q, -0x1.1de10823e626bbef4adf3610d3cbp-72Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.95e033565cd465e59fc64a848c0ep-2Q, 0x1.e7908dd5753c97550b1b562a1b99p-3Q, -0x1.293799fcf6c8da1f93fe2d057409p+2Q, 0x1.36cc467b08bf7d8a89d5be8f8643p+3Q, -0x1.4335983e135774c5e5156a450a68p+3Q, 0x1.9c4d14b5414867b3e2c99a218f0bp+2Q, -0x1.ef81d85b23a01ac83af86d64ce2ep+0Q, -0x1.2378e73c6b10a2f7957b04476802p+0Q, 0x1.c6e27151761e3e586f540356142cp+0Q, -0x1.c857e67243153a965a648f8e46c8p-1Q, 0x1.3531afa42b77f4c754018d3dfbb2p-8Q, 0x1.05f57c1a6464d742d9d2e202c63cp-2Q, -0x1.38a2db882124dfc4e44179ad4f8p-3Q, 0x1.35c4a5041d9b9456d2520e65a344p-5Q, -0x1.fddc3c9f813d6aef1f4f22d0d6c7p-14Q, -0x1.2653a0321997d1fa4ad992782112p-9Q, 0x1.ec5d6f7ab50c177dc61e0a187538p-12Q, -0x1.dc01f8633f4c61396f200866219ep-17Q, -0x1.379717b64ca37d0f86a74f66252ap-18Q, 0x1.7e5cfdc9a1b17dce328c7c0b396fp-23Q, 0x1.a124166c5786174e1b984a58659ap-29Q, -0x1.4171311c3a7b2623f4df8ab80088p-35Q, 0x1.65f402b77f1ab227d7a791607b4dp-46Q, 0x1.15123cc4efb60d3af1736012c799p-63Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.4c5d516dd5340d0879832abec56ap+0Q, -0x1.5d2571cda5543923016a3601781dp+2Q, 0x1.24b0f03522629e31e5a0ddf8fe8fp+3Q, -0x1.39e0f8d13e8db1f029ce6257e806p+3Q, 0x1.f006cc927be5328f1a33d6ae0a72p+3Q, -0x1.0ce2ffa4646117df99ed92ff7f71p+5Q, 0x1.b8b8afcf323d00e8ad39d1cbe81p+5Q, -0x1.e6925570e3f510211d732b909262p+5Q, 0x1.503102590c0b7b7ae2742f430edfp+5Q, -0x1.6d86add093f074bc432a452a8a23p+3Q, -0x1.35b5dc1025f2d34a60aa7bf986d8p+3Q, 0x1.a6237c764b4a28340b848880c532p+3Q, -0x1.cda455c3ae3929d25c3c5a3186e9p+2Q, 0x1.d5a02bb93708a320124acceeba3bp+0Q, 0x1.ecd4c4adc075fe2457753c0a3227p-5Q, -0x1.660ee59df078b432fb4f889aa837p-3Q, 0x1.5158e51b27e5dbfe89f577f955e5p-5Q, -0x1.73814bfd57b681fa89fa6df49afcp-10Q, -0x1.23460c48f636fa706d007acab6f4p-11Q, 0x1.fa353cdebaaaaa09ad0c40e91089p-16Q, 0x1.19c5738584246e6431d3352c0155p-21Q, -0x1.4bb4308ed51fff3108f30cb6a721p-27Q, 0x1.fc9a1f4f09858f536f1a575ceb92p-38Q, 0x1.89a8b7b9d28d1d71597812a9e85fp-54Q, 0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.a35157d8dba56b3359c55e1b2f1bp+1Q, -0x1.5a1bc35a1cc0dbb69c71ae20ac28p+4Q, 0x1.fa0a0878d9a933860f512013ce09p+5Q, -0x1.a68f6523a82701663e04e44e02c9p+6Q, 0x1.98403a971e63162a02dd9331873fp+6Q, -0x1.03810e60e02049d57e6cca7b3393p+5Q, -0x1.14faaec76846550eede585da319ep+6Q, 0x1.3d735b94c105436aa6c6acd1ae46p+7Q, -0x1.cdbd7de801407d716cbc3884161p+7Q, 0x1.20043470ad456af43bde8d96fdaap+8Q, -0x1.2591e882d85cd18b0dca9797ee6p+8Q, 0x1.b621996a63c17e6687cb0b211602p+7Q, -0x1.a875ba068d8449d487f82dc4bc08p+6Q, 0x1.85c7d166f26b7783d793e4e78c82p+4Q, 0x1.1c0e0d6b929f95b9e528989abb17p+2Q, -0x1.36efc345fd87e7f12a7cd8f187eap+2Q, 0x1.3e3f5c2c93c347939cad28f604bbp+0Q, -0x1.bffc3922a312894449dea0a83571p-5Q, -0x1.75f52c4bce3944c6d40bd8ed1f5ap-6Q, 0x1.dea5b49d2b299f2f3407a986e912p-10Q, 0x1.10aa3eff5f8aac0902d8bf656d56p-15Q, -0x1.ea6ed6c321e753c1b3e9237c4183p-21Q, 0x1.089ab261bfe1c8b7f19aebf544d2p-30Q, 0x1.9990a3735f2b8137827c0403494ap-46Q, 0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.5d159c98a090a206b1f5a4e9463bp+2Q, -0x1.54873e7e1b3d210625d27844421bp+5Q, 0x1.2c245e185ac8b14c7baac4549349p+7Q, -0x1.416f5cc6c22c1fc04eedaa366dc1p+8Q, 0x1.e67e2b7f933044475571e6b73738p+8Q, -0x1.298ee57db6ed5fd4bacad132e624p+9Q, 0x1.48ee3d90a4e34a8f4d18f9ebf69p+9Q, -0x1.4e6b4521eb7a56c1ef7579e251acp+9Q, 0x1.2782e95d7bf9f5fc360d3847dd8p+9Q, -0x1.bb493883e544d446bc2b8c57d25fp+8Q, 0x1.25dfd4b9fa45afe8f2d50b1eccc2p+8Q, -0x1.575e0c206b7ee6818931b6994d6ep+7Q, 0x1.1c028f2725fce675841ea64b2ffp+6Q, -0x1.08a1fe0ac6819f96e8258ae14398p+2Q, -0x1.12ed1d6ca77301d9871c8664703fp+4Q, 0x1.66791e904ad3b41e47b4403dcaadp+3Q, -0x1.7aa9733036515afd48134b63faf5p+1Q, 0x1.41600caa02955d88aadf0943297p-3Q, 0x1.275514f436a31e564b7d01e0e908p-4Q, -0x1.29373f56ac1095884f483fc367f8p-7Q, -0x1.51ea7d9f345040b9bbf6801a6296p-13Q, 0x1.deb156b08b87ef0592d66c2ead34p-18Q, -0x1.6e30fae8c34ed8366ddfb109de2fp-27Q, -0x1.1b57abb7d7f1ba81ca336dfebef5p-41Q, -0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.d4fe27a0835ae1a04e083919e159p+2Q, -0x1.ecb0f32ca76fb494d571b92b6ab8p+5Q, 0x1.c6da62a20cd0a85f327433229c8ap+7Q, -0x1.e3622dd5ba05d80a963a6735beb4p+8Q, 0x1.49508717a90e836846bfeeb5b43bp+9Q, -0x1.3d934aacf56d0a27027f0d4c671dp+9Q, 0x1.068600d74e1c90df9e5944f06e21p+9Q, -0x1.bb4eb52dbc23c8aa9dac22db8fdep+8Q, 0x1.2c2d3c048caae8b4e7ebda4b0128p+8Q, -0x1.6a6f07f5d07dd28cc713b1beaa3ap+5Q, -0x1.48c0f7b3bed9dd4e2bcfa51c5127p+7Q, 0x1.bce28601020e5546efe486219835p+7Q, -0x1.9e035ea535c3aebdf12725979bb8p+7Q, 0x1.737017c34f7deef2722c93e161f4p+7Q, -0x1.15bd065f2789c251ed52811c0835p+7Q, 0x1.1609d2e86de1f46bc02dc1f1561dp+6Q, -0x1.30b382548235fc08ce2a69131576p+4Q, 0x1.34c266d274d020226722008d15aap+0Q, 0x1.56d14dbd1c0ef8dc071f15458559p-1Q, -0x1.f82518456ddfa0a1ea7fa3e5d12cp-4Q, -0x1.1d5d333a03734067f69cd7ef01cbp-9Q, 0x1.599f88826e1df7529e2526edcc77p-13Q, -0x1.742b04eba227022dc278410d55cbp-22Q, -0x1.1fd835e2f3ac373e68a16573044bp-35Q, 0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.6f91b1fb16e463903f242c426455p+2Q, -0x1.8fef11e8059ceda062dec743d5bap+5Q, 0x1.809c444472a8d8415a2c8fcb90adp+7Q, -0x1.b10bf090c92b5336357d1404e2eap+8Q, 0x1.45258188f71468e863f93e44329ep+9Q, -0x1.7231afc08bd276307932c937c208p+9Q, 0x1.7af82162ac359965f69e88fff2d1p+9Q, -0x1.823e9f8992b59fc66e18911aea8bp+9Q, 0x1.6f4bc124eb7dc2e04c11ba39d8bp+9Q, -0x1.32f291524b4fc819caccda30ea8fp+9Q, 0x1.d856007cb8fa074ef08390247a6ep+8Q, -0x1.59b2f057a74e4aae3ebb655c3f1ep+8Q, 0x1.c4898ffe6b603cfd7a5fca3706d6p+7Q, -0x1.01b04bb5c7e4ece20624aa0d5e2cp+7Q, 0x1.0ee550f2b46fb0067dbfd6b593fep+6Q, -0x1.f149829700499105abd0a04d1745p+4Q, 0x1.21413698e7cf1b5b76cf6ac9da58p+3Q, -0x1.1e358290df39caefe5b55d7f88a9p-2Q, -0x1.54f12799790c9591a3724eefd6adp-1Q, 0x1.1dedd290f907f8d2a85301c5e1c1p-3Q, 0x1.2b8db385d6eeb017f6475d54698ap-10Q, -0x1.7cd67d6099898e46f355585388cap-12Q, 0x1.c1758243d6f68f111636a9a1e06bp-21Q, 0x1.5b5402fbe8db7e6e4a333c1f1c5ap-33Q, -0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.e00f201ca9b47bec13b3982152f1p+1Q, -0x1.09aad588fc6e1d2e5e31f5db6676p+5Q, 0x1.0083b1ed3add1dfc189aa41f7f2fp+7Q, -0x1.1b01639f15a47195db84399877bbp+8Q, 0x1.8e74c5b415b4c982c62a08a4c59cp+8Q, -0x1.907a858da198db5b4a86cd66130bp+8Q, 0x1.68e4a68143eb6280f782117761a4p+8Q, -0x1.685dfe59eb94f38e35f467a408e4p+8Q, 0x1.592f39b72049a36e7924da594eccp+8Q, -0x1.09589acf597f567d3772da9f9396p+8Q, 0x1.658b66c44d2d9f09118ad4461b1dp+7Q, -0x1.f90c71880a91658c0d9a077062e9p+6Q, 0x1.49a9a7009f2b267b39ba9598b5bfp+6Q, -0x1.441338caa52cfa0e2a27b3094033p+5Q, 0x1.0b7b2a297fde14bc6faf1e5cad3dp+4Q, -0x1.d98372b1c68d3f52be822d4ad9e1p+2Q, 0x1.f43ec1f2a32806088746b95241b7p+0Q, 0x1.6165b77555fca80d9c5c139ebf01p-1Q, -0x1.4f8a8171bb08fcb9ccd7e57b6a94p-1Q, 0x1.267683e93d2b771765dfb989358ep-3Q, -0x1.8ddc624d415c8d8d9889336c7b73p-9Q, -0x1.979cae945ae1031f8b5a50d00a19p-11Q, 0x1.95627b187fdb196e7b60f5dc529bp-20Q, 0x1.38bcd286c35de60d5fb4cabb4426p-31Q, -0x0p+0Q}; + } + if constexpr (order == 10) { + return {0x0p+0Q, 0x1.ddc9914b8fce26e89a350da83719p+0Q, -0x1.0aa6a6fe4749ff9a5341c601bbd1p+4Q, 0x1.ffd30a30f104e3ad2ade791fa75cp+5Q, -0x1.1076bbdb4cf7527cd039e9d87117p+7Q, 0x1.5b314fd5bd8427278ea135aa2326p+7Q, -0x1.15e629a2f07ab3b285fb777249b6p+7Q, 0x1.73ecdaa7dbcd11927e44fc6ec254p+6Q, -0x1.7ea4991281a803e96d95b15ddcdfp+6Q, 0x1.92fe5087093b614dba0fb9dcd31ep+6Q, -0x1.e50ce86c3eca30ad8c366d925665p+5Q, 0x1.23fe36ce5250d05c30083be13efbp+4Q, -0x1.1183a5ac74636a4f4f82e9e90688p+3Q, 0x1.325da71616787b1a97d0cf145facp+2Q, 0x1.b5b93d37eb78f2e235ca0e3287edp+2Q, -0x1.6174cc292a977e8769fbfe3294c1p+3Q, 0x1.b8e78e1a9ada492b4dd621bd0ceap+2Q, -0x1.ffc6e54f09b8a6376ab8ee388e04p+1Q, 0x1.807b43d233e13293cd8f064bc042p+1Q, -0x1.949effe4fd5f10b6f0bb08f4fc9cp+0Q, 0x1.99c706ee33d33292c4de096ca957p-2Q, -0x1.8b4255eb2ab52df5046967e93801p-6Q, -0x1.25fbde4ae0e29153ac7874faf054p-8Q, 0x1.a2ffd5a58a3e625ad5ba39971f6dp-17Q, 0x1.4225e5d67d6a903058f2d7206afep-27Q, 0x0p+0Q}; + } + if constexpr (order == 11) { + return {0x0p+0Q, 0x1.82555f0fca681c9ced300e65470bp-2Q, -0x1.b108ac4bd9d5de90a612fd8cb482p+1Q, 0x1.a3af9f5e28533d44a21884894a43p+3Q, -0x1.c92e2a69bebea1255ad98c5c24f3p+4Q, 0x1.336156f19a3eab19184562b4b1e2p+5Q, -0x1.154d20c532d37d99d550b7ecda23p+5Q, 0x1.af95c6a7f034f7267500295c26p+4Q, -0x1.a382ed435f8ed2216764cfb7b5d9p+4Q, 0x1.a5a57db59b67be50825ea97be6b6p+4Q, -0x1.48587bdb4781058d98368c067205p+4Q, 0x1.c6519b1cdb292e6d292e55285478p+3Q, -0x1.64406dc5dece20ec3c4c5d654de5p+3Q, 0x1.05a0da2a87dafe77cb9a5835aad4p+3Q, -0x1.34062a3bf7c109c05654c02a04d6p+2Q, 0x1.65a3327bcf1ac1cee14ec461e42cp+1Q, -0x1.b27cf7ab49be37cde0f46d146d6bp+0Q, 0x1.a5bdc7192b9c3a20ece90c79e905p-1Q, -0x1.571ac2983f85e3a6dc62f787682cp-2Q, 0x1.31767817c6adec541d699bff90f4p-3Q, -0x1.904f3491bf69c7251d1b4755c9b7p-5Q, 0x1.0ee4f3163f55f45905e2e22beb7fp-8Q, 0x1.2584f1f36b43e7bbd83747f8e61dp-10Q, -0x1.373cf584c03ee906a072d01e3b91p-17Q, -0x1.db60a068c3377c744925f1488cc3p-27Q, 0x0p+0Q}; + } + if constexpr (order == 12) { + return {0x0p+0Q, 0x1.8dbb03fad2c2ff4e565f6c62d57bp-5Q, -0x1.bebdc5d3b23911ed14512acd7b2bp-2Q, 0x1.aeb7a5ea21052a1c43ba3ca04a5p+0Q, -0x1.cb9851522d20abcc6f87f81034c7p+1Q, 0x1.240bf59871b997fc41c938fde14cp+2Q, -0x1.cab7cf1ed537e0d17c3940a7425ap+1Q, 0x1.1fd4543a5fd8cb1e3fd20d0065e1p+1Q, -0x1.1ce9744c1c9756de9b809fd2555fp+1Q, 0x1.3bab08bd76344b447fe47700254dp+1Q, -0x1.c40e7b4e77556f5ef84483097e1fp+0Q, 0x1.feadc8c7ce87a8fc67e279160504p-1Q, -0x1.a643a47d84b4da70d0fb106ef69bp-1Q, 0x1.543b964e0f03a3a71ec48db92838p-1Q, -0x1.577aa576ffa64efb7d0e9e6dcc9cp-2Q, 0x1.499f6f7a97a22bd1178c8661fe5ap-3Q, -0x1.d5a15151b901635be5a32ca30fbbp-4Q, 0x1.d4c5badb46707713b03f6aa302e5p-5Q, -0x1.094f5215690db085443c45e218e9p-6Q, 0x1.cd0926fb9e142792dd84079eb378p-8Q, -0x1.b2091c2c73dd02f84cb37e5165a8p-9Q, 0x1.fdc7350edfadd24f5fb7a95b49b7p-13Q, 0x1.4af17513fc3a876960b7d297e5d9p-13Q, -0x1.fd199a3cefa31b76bcac2a313bc8p-19Q, -0x1.7fa406e41ed65db974ed33f4fc9ap-27Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 14) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.2e3c0cp-10f, 0x1.d73cdcp-4f, 0x1.980f08p-1f, 0x1.0b8da8p-2f, -0x1.381b88p-2f, 0x1.a64054p-3f, -0x1.be6cb2p-4f, 0x1.5369f4p-5f, -0x1.e553cp-8f, -0x1.5b9738p-9f, 0x1.3ad93ep-9f, -0x1.6c8658p-11f, 0x1.421438p-16f, 0x1.359cb6p-15f, -0x1.16b1cep-18f, -0x1.1e4702p-19f, 0x1.16b7d8p-21f, -0x1.2a9018p-27f, -0x1.e6603ap-29f, 0x1.ad635ap-33f, -0x1.0b7166p-37f, -0x1.2dcc8ep-43f, 0x1.994c74p-50f, 0x1.d3e7dcp-60f, -0x1.ad34cp-72f, 0x1.c6fd0cp-94f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.ffe6a8p-8f, 0x1.687896p-2f, 0x1.4f6222p-1f, -0x1.9d7a5p+0f, 0x1.ee1a72p-1f, -0x1.3a4c3ep-1f, 0x1.a5124ep-2f, -0x1.fd4714p-3f, 0x1.efeb84p-4f, -0x1.695e5ep-5f, 0x1.73caep-7f, -0x1.fa774ap-10f, 0x1.13b07ep-13f, 0x1.7cb11cp-14f, -0x1.d2ccp-15f, 0x1.74388cp-17f, 0x1.21ff8ap-21f, -0x1.156308p-22f, -0x1.19b91cp-25f, 0x1.f7d83ep-31f, 0x1.509062p-34f, -0x1.405684p-40f, 0x1.6ac07ap-46f, -0x1.9a49fp-55f, -0x1.88bc66p-67f, 0x1.a0541ep-88f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.70e38ep-5f, 0x1.98429p-1f, -0x1.5a23aep+0f, -0x1.ca3a86p-2f, 0x1.f2912p+0f, -0x1.902df6p+0f, 0x1.6e5d8ap-1f, -0x1.7cd74ap-5f, -0x1.cb5138p-3f, 0x1.8970fep-3f, -0x1.2e3ba4p-4f, 0x1.a43728p-9f, 0x1.5d8afap-7f, -0x1.3f213ap-8f, 0x1.438df6p-11f, 0x1.92aaccp-13f, -0x1.4a2a2cp-14f, 0x1.061494p-17f, 0x1.1c615p-21f, -0x1.fed404p-24f, 0x1.9900fap-29f, 0x1.4b71c6p-33f, -0x1.f4e21p-40f, -0x1.ae7642p-50f, 0x1.0753e4p-59f, -0x1.1725d8p-79f, 0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.b64064p-3f, 0x1.b94954p-1f, -0x1.49bc84p+2f, 0x1.255158p+3f, -0x1.254592p+3f, 0x1.bfdd02p+2f, -0x1.258cbp+2f, 0x1.244b68p+1f, -0x1.76e9c8p-1f, 0x1.2db90ep-3f, -0x1.adc00ap-4f, 0x1.077b02p-3f, -0x1.4e1bd4p-4f, 0x1.a8b172p-6f, -0x1.1b67a8p-9f, -0x1.5aa222p-10f, 0x1.0c296ep-11f, -0x1.315112p-14f, -0x1.aa34a6p-23f, 0x1.718ac2p-20f, -0x1.4ed202p-25f, -0x1.6a2c3ep-29f, 0x1.03cb1cp-35f, 0x1.d2ce74p-46f, -0x1.110d8p-54f, 0x1.2175bep-73f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.9bd3bcp-1f, -0x1.218b2p+1f, -0x1.8f073ep-2f, 0x1.10368cp+3f, -0x1.6e5fdp+3f, -0x1.fee6b2p-2f, 0x1.5dae0cp+4f, -0x1.253938p+5f, 0x1.0846cap+5f, -0x1.d3379cp+3f, -0x1.bc1cbep+1f, 0x1.49e86ep+3f, -0x1.e4adep+2f, 0x1.651f3ap+1f, -0x1.14e32ep-2f, -0x1.c20b1ep-3f, 0x1.9dc736p-4f, -0x1.dbb9ecp-7f, -0x1.c7f5c2p-11f, 0x1.a5fc86p-12f, -0x1.07f65ep-16f, -0x1.0e379p-20f, 0x1.69bc58p-26f, 0x1.872aa2p-36f, -0x1.7b8496p-44f, 0x1.92548cp-62f, -0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.29b15ep+1f, -0x1.cfd366p+3f, 0x1.440caap+5f, -0x1.116deap+6f, 0x1.3b639cp+6f, -0x1.0040f6p+6f, 0x1.e6fde6p+4f, 0x1.5c1e9ep+3f, -0x1.b1e5dap+5f, 0x1.7d1f14p+6f, -0x1.d6f4cap+6f, 0x1.9fd808p+6f, -0x1.ecec6ep+5f, 0x1.43fff8p+4f, 0x1.5e941cp-2f, -0x1.d2a078p+1f, 0x1.940e8ap+0f, -0x1.f62a76p-3f, -0x1.2b3b3cp-6f, 0x1.3de2bap-7f, -0x1.21cbeep-11f, -0x1.2150f6p-15f, 0x1.159bf8p-20f, 0x1.b00f5p-30f, -0x1.21e8e2p-37f, 0x1.33590ap-54f, 0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.3069cap+2f, -0x1.2e376ap+5f, 0x1.1366dap+7f, -0x1.37b986p+8f, 0x1.ff3f2ep+8f, -0x1.57d938p+9f, 0x1.9e8b98p+9f, -0x1.c5567ap+9f, 0x1.af9eb4p+9f, -0x1.5e3048p+9f, 0x1.efd932p+8f, -0x1.337ecp+8f, 0x1.1dd7ep+7f, -0x1.34f8d6p+4f, -0x1.1b6424p+5f, 0x1.038eccp+5f, -0x1.9f2074p+3f, 0x1.0d3b24p+1f, 0x1.b93ffcp-3f, -0x1.00284ep-3f, 0x1.52026p-7f, 0x1.4b932p-11f, -0x1.d3b086p-16f, -0x1.e9753p-25f, 0x1.e5cedp-32f, -0x1.0188e4p-47f, -0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.f579b2p+2f, -0x1.13b9ccp+6f, 0x1.0d0d04p+8f, -0x1.309a86p+9f, 0x1.b8e262p+9f, -0x1.b08b28p+9f, 0x1.3c7d2cp+9f, -0x1.7e7dfp+8f, 0x1.9c8804p+5f, 0x1.dc1752p+8f, -0x1.e54a04p+9f, 0x1.1a42e2p+10f, -0x1.f903f4p+9f, 0x1.9d8dbap+9f, -0x1.34174p+9f, 0x1.64eb3cp+8f, -0x1.0b0c44p+7f, 0x1.5f0a54p+4f, 0x1.d8f6bap+1f, -0x1.1c758ap+1f, 0x1.f38ac2p-3f, 0x1.f827p-7f, -0x1.130614p-10f, -0x1.2dc514p-19f, 0x1.1d494ap-25f, -0x1.2e8464p-40f, 0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.e32cc2p+2f, -0x1.1692cap+6f, 0x1.1fa09cp+8f, -0x1.615e68p+9f, 0x1.265c8cp+10f, -0x1.7569eep+10f, 0x1.9e96bep+10f, -0x1.bbbe16p+10f, 0x1.be0802p+10f, -0x1.8f099cp+10f, 0x1.43b838p+10f, -0x1.ee6ad6p+9f, 0x1.58d562p+9f, -0x1.a3b282p+8f, 0x1.c79d62p+7f, -0x1.bc78ccp+6f, 0x1.418e36p+5f, -0x1.3abf36p+2f, -0x1.ad7bb4p+1f, 0x1.a65502p+0f, -0x1.affdcep-3f, -0x1.8341cep-7f, 0x1.b5571p-10f, 0x1.e32174p-19f, -0x1.c53c14p-24f, 0x1.e0c27p-38f, 0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.8d1f8ap+2f, -0x1.d4881ap+5f, 0x1.e86d42p+7f, -0x1.280028p+9f, 0x1.d3eb6p+9f, -0x1.0b82a6p+10f, 0x1.07ceap+10f, -0x1.0d7822p+10f, 0x1.0df61ep+10f, -0x1.c6893ap+9f, 0x1.45ac9ep+9f, -0x1.c9d686p+8f, 0x1.35c4c4p+8f, -0x1.4a58bep+7f, 0x1.01755ap+6f, -0x1.5d1ba8p+4f, 0x1.dadd4ap+1f, 0x1.87b02p+2f, -0x1.9ab15ep+2f, 0x1.46cd6ap+1f, -0x1.8955d8p-2f, -0x1.85245p-7f, 0x1.6f86d4p-8f, 0x1.1b4e3cp-16f, -0x1.7914d8p-21f, 0x1.903b4cp-34f, -0x0p+0f}; + } + if constexpr (order == 10) { + return {0x0p+0f, 0x1.041a0ap+1f, -0x1.3658b6p+4f, 0x1.5194bp+6f, -0x1.c3df82p+7f, 0x1.ad183ep+8f, -0x1.3d9c78p+9f, 0x1.852da4p+9f, -0x1.9cca18p+9f, 0x1.9a6efap+9f, -0x1.a300c2p+9f, 0x1.a73548p+9f, -0x1.7a384cp+9f, 0x1.2afd88p+9f, -0x1.d0f63ap+8f, 0x1.6384c4p+8f, -0x1.d6c26ap+7f, 0x1.089826p+7f, -0x1.1f7e84p+6f, 0x1.2a5702p+5f, -0x1.c18aa4p+3f, 0x1.4dc138p+1f, 0x1.bd5ac2p-5f, -0x1.1aa942p-4f, -0x1.97678cp-14f, 0x1.25b3fcp-16f, -0x1.381ffp-28f, -0x0p+0f}; + } + if constexpr (order == 11) { + return {0x0p+0f, 0x1.456a1ep+0f, -0x1.86731ep+3f, 0x1.99ddaep+5f, -0x1.ebccc2p+6f, 0x1.74f85ep+7f, -0x1.842622p+7f, 0x1.4fbcc2p+7f, -0x1.4776cp+7f, 0x1.573bfp+7f, -0x1.2b0c28p+7f, 0x1.bb5bcap+6f, -0x1.580802p+6f, 0x1.0c1df4p+6f, -0x1.5dea02p+5f, 0x1.997fcap+4f, -0x1.f5c414p+3f, 0x1.1578f4p+3f, -0x1.e11a4cp+1f, 0x1.8c2f5ap+0f, -0x1.42cddep-1f, 0x1.1b3752p-3f, 0x1.61bca4p-7f, -0x1.eeca78p-8f, 0x1.427b38p-14f, 0x1.1c6c3p-18f, -0x1.2f0566p-29f, 0x0p+0f}; + } + if constexpr (order == 12) { + return {0x0p+0f, 0x1.45a484p-2f, -0x1.87cf9ep+1f, 0x1.99aecep+3f, -0x1.e335dep+4f, 0x1.5e3842p+5f, -0x1.48839ep+5f, 0x1.e11a8p+4f, -0x1.bff278p+4f, 0x1.f68b7p+4f, -0x1.a9c89cp+4f, 0x1.147ddap+4f, -0x1.a10eep+3f, 0x1.5d8bap+3f, -0x1.b0eecp+2f, 0x1.b18092p+1f, -0x1.11a2d4p+1f, 0x1.45b0dap+0f, -0x1.d74084p-2f, 0x1.27c112p-3f, -0x1.2ee6a8p-4f, 0x1.0ad11p-6f, 0x1.b719aep-8f, -0x1.7b5726p-9f, 0x1.efe0e8p-14f, 0x1.11683ap-18f, -0x1.24c158p-28f, -0x0p+0f}; + } + if constexpr (order == 13) { + return {0x0p+0f, 0x1.439a96p-5f, -0x1.85e5f8p-2f, 0x1.959ab6p+0f, -0x1.d59128p+1f, 0x1.43a656p+2f, -0x1.0a2c06p+2f, 0x1.27395p+1f, -0x1.050c8cp+1f, 0x1.600ea8p+1f, -0x1.21f61ap+1f, 0x1.19f0e6p+0f, -0x1.8e2104p-1f, 0x1.a07f28p-1f, -0x1.ccce86p-2f, 0x1.e56138p-4f, -0x1.5df48cp-4f, 0x1.19d3fp-4f, -0x1.9e6cdp-9f, -0x1.b966bep-7f, 0x1.824078p-9f, -0x1.1b05a2p-9f, 0x1.7f8554p-9f, -0x1.23710ep-10f, 0x1.cc575ap-14f, 0x1.1f2382p-18f, -0x1.3697eap-27f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.2e3c0bb3f3ad5p-10, 0x1.d73cdc4f17148p-4, 0x1.980f074dbd462p-1, 0x1.0b8da7807c274p-2, -0x1.381b88314120bp-2, 0x1.a64053bd4da41p-3, -0x1.be6cb26620f84p-4, 0x1.5369f32b472a9p-5, -0x1.e553bfb83c482p-8, -0x1.5b97376b07916p-9, 0x1.3ad93e070eb7ap-9, -0x1.6c8658d1b206ep-11, 0x1.421437e7b839dp-16, 0x1.359cb55b7d336p-15, -0x1.16b1cde08937ep-18, -0x1.1e470298289aep-19, 0x1.16b7d7c52ecb7p-21, -0x1.2a9017a9058edp-27, -0x1.e6603a12c622p-29, 0x1.ad635a5532adap-33, -0x1.0b7166f3d598p-37, -0x1.2dcc8d3c8b0cfp-43, 0x1.994c7452dcd31p-50, 0x1.d3e7db27a70eep-60, -0x1.ad34c0383fa64p-72, 0x1.c6fd0b1a8d6a3p-94, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.ffe6a833f41d2p-8, 0x1.6878956519ce3p-2, 0x1.4f62227264623p-1, -0x1.9d7a4f00f9dcp+0, 0x1.ee1a7236f71e4p-1, -0x1.3a4c3d150c11ep-1, 0x1.a5124e1ab47a9p-2, -0x1.fd47140509eb3p-3, 0x1.efeb8355fd2f8p-4, -0x1.695e5e5e49cf8p-5, 0x1.73cae05387f64p-7, -0x1.fa774911ba2d4p-10, 0x1.13b07ddddb3b8p-13, 0x1.7cb11c0b4280bp-14, -0x1.d2cbfff6e2a58p-15, 0x1.74388c9fd28e7p-17, 0x1.21ff895bfb5f3p-21, -0x1.156307b5c128cp-22, -0x1.19b91bff8bef5p-25, 0x1.f7d83e4d41c77p-31, 0x1.5090626b206a4p-34, -0x1.405683426ad01p-40, 0x1.6ac079eed130ep-46, -0x1.9a49f0637a3b6p-55, -0x1.88bc66cc087f2p-67, 0x1.a0541eb1bdcebp-88, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.70e38d13c6dcdp-5, 0x1.98429094e12d2p-1, -0x1.5a23aee5cfcf3p+0, -0x1.ca3a85e30ebf6p-2, 0x1.f2911f6caea6bp+0, -0x1.902df5acb9856p+0, 0x1.6e5d8a32fe3aep-1, -0x1.7cd7499a11b88p-5, -0x1.cb51389df1437p-3, 0x1.8970fdea96db5p-3, -0x1.2e3ba43116d4fp-4, 0x1.a437288ed51abp-9, 0x1.5d8afaeb5ec2ap-7, -0x1.3f213a25a4c3ap-8, 0x1.438df66495fedp-11, 0x1.92aacb344e1abp-13, -0x1.4a2a2b6937dcap-14, 0x1.061494c076ea5p-17, 0x1.1c61500cd5ff6p-21, -0x1.fed404b96c72ep-24, 0x1.9900fa8d5cb81p-29, 0x1.4b71c6cbb7be3p-33, -0x1.f4e20f23251aap-40, -0x1.ae764159a5bb6p-50, 0x1.0753e4c918ed7p-59, -0x1.1725d8c4676c4p-79, 0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.b6406454732d5p-3, 0x1.b949541f458cep-1, -0x1.49bc84198d8efp+2, 0x1.255157167a553p+3, -0x1.254591e8b6e07p+3, 0x1.bfdd01aa9e691p+2, -0x1.258cb0e12f408p+2, 0x1.244b687910818p+1, -0x1.76e9c86768fd8p-1, 0x1.2db90e1b7e224p-3, -0x1.adc00aab7f786p-4, 0x1.077b01cdc29aap-3, -0x1.4e1bd3d7c8107p-4, 0x1.a8b1719f7696ap-6, -0x1.1b67a8fdd5d39p-9, -0x1.5aa2219e8b072p-10, 0x1.0c296ebe05b6fp-11, -0x1.315112d6e2649p-14, -0x1.aa34a64782e4p-23, 0x1.718ac2125512ep-20, -0x1.4ed202350e6d4p-25, -0x1.6a2c3e7b115c9p-29, 0x1.03cb1bd946e2ep-35, 0x1.d2ce73e99c294p-46, -0x1.110d7f1b0bfcp-54, 0x1.2175be08d4af4p-73, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.9bd3bc2473961p-1, -0x1.218b20c923a73p+1, -0x1.8f073ee248543p-2, 0x1.10368c3ad14ecp+3, -0x1.6e5fd027a16b4p+3, -0x1.fee6b19288529p-2, 0x1.5dae0c64ec101p+4, -0x1.253938fa65f9dp+5, 0x1.0846ca351ee33p+5, -0x1.d3379cfd6d393p+3, -0x1.bc1cbd5de053bp+1, 0x1.49e86d68d4cf9p+3, -0x1.e4ade08c4a6c3p+2, 0x1.651f390634957p+1, -0x1.14e32e1f9b6bbp-2, -0x1.c20b1d287136bp-3, 0x1.9dc73570ee73fp-4, -0x1.dbb9ebdd9c09ep-7, -0x1.c7f5c1ec60f69p-11, 0x1.a5fc856e52fadp-12, -0x1.07f65daa0049bp-16, -0x1.0e378f07aff0ap-20, 0x1.69bc58d5ec0cdp-26, 0x1.872aa1bcf3687p-36, -0x1.7b84969608017p-44, 0x1.92548cc9b5b72p-62, -0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.29b15e8e05f49p+1, -0x1.cfd365d614528p+3, 0x1.440caad9c1236p+5, -0x1.116de9d813b39p+6, 0x1.3b639c503b3cfp+6, -0x1.0040f57e975e2p+6, 0x1.e6fde6a95ce33p+4, 0x1.5c1e9e155aab8p+3, -0x1.b1e5da7957b3dp+5, 0x1.7d1f138d16b9dp+6, -0x1.d6f4cad7bdd83p+6, 0x1.9fd808c31039p+6, -0x1.ecec6e1a57ab4p+5, 0x1.43fff7220eba4p+4, 0x1.5e941cd01c025p-2, -0x1.d2a0789936f64p+1, 0x1.940e89f9fbe3cp+0, -0x1.f62a7689777abp-3, -0x1.2b3b3b35a2041p-6, 0x1.3de2ba1c1b055p-7, -0x1.21cbeea2dd955p-11, -0x1.2150f65158194p-15, 0x1.159bf889454c7p-20, 0x1.b00f4f96ce851p-30, -0x1.21e8e13c855cp-37, 0x1.3359091107974p-54, 0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.3069c9b572d78p+2, -0x1.2e376983f6cb7p+5, 0x1.1366d92966ea1p+7, -0x1.37b9852173f07p+8, 0x1.ff3f2db6a15a4p+8, -0x1.57d9383606e5p+9, 0x1.9e8b97533b1ebp+9, -0x1.c556790a27e1dp+9, 0x1.af9eb47abc08ep+9, -0x1.5e3047bf51b55p+9, 0x1.efd9329bb40ffp+8, -0x1.337ec090261a6p+8, 0x1.1dd7e09a26691p+7, -0x1.34f8d53391e96p+4, -0x1.1b6423ffa4135p+5, 0x1.038ecbdebefe4p+5, -0x1.9f2073b507554p+3, 0x1.0d3b2378aacf2p+1, 0x1.b93ffbdcbcfbdp-3, -0x1.00284db90f95bp-3, 0x1.5202609236b6cp-7, 0x1.4b9320a57f232p-11, -0x1.d3b085775602bp-16, -0x1.e975304f42064p-25, 0x1.e5cecfa6ab7bbp-32, -0x1.0188e4a2f5a9ep-47, -0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.f579b17074e37p+2, -0x1.13b9cbe766167p+6, 0x1.0d0d0432bec13p+8, -0x1.309a86e68bfeap+9, 0x1.b8e26231ea03fp+9, -0x1.b08b284517ec4p+9, 0x1.3c7d2b2624502p+9, -0x1.7e7def0dd6c18p+8, 0x1.9c880448390e6p+5, 0x1.dc1752cc2f2f8p+8, -0x1.e54a03fbbc2fap+9, 0x1.1a42e1dae569p+10, -0x1.f903f4a18c30ep+9, 0x1.9d8db91908386p+9, -0x1.34173ffb143e2p+9, 0x1.64eb3c27db565p+8, -0x1.0b0c43171fee6p+7, 0x1.5f0a5375d11c7p+4, 0x1.d8f6b9f1522f3p+1, -0x1.1c75896d6d599p+1, 0x1.f38ac1a749dafp-3, 0x1.f82700b4dc727p-7, -0x1.1306135d4672fp-10, -0x1.2dc514d699914p-19, 0x1.1d494ae1d331fp-25, -0x1.2e8464bcec8d4p-40, 0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.e32cc25ea4da5p+2, -0x1.1692ca6458eaap+6, 0x1.1fa09c1316dfbp+8, -0x1.615e67f0c1ccdp+9, 0x1.265c8c1b4b1aap+10, -0x1.7569ed1c8210dp+10, 0x1.9e96bde5063d4p+10, -0x1.bbbe167a38d63p+10, 0x1.be080201e737dp+10, -0x1.8f099bdabb219p+10, 0x1.43b83815e15a6p+10, -0x1.ee6ad68b3bda5p+9, 0x1.58d561cb84d26p+9, -0x1.a3b282a8407a3p+8, 0x1.c79d620ffafcp+7, -0x1.bc78cb9447aa1p+6, 0x1.418e35902e32dp+5, -0x1.3abf360acc2f7p+2, -0x1.ad7bb3867b3c3p+1, 0x1.a655024ebf2fdp+0, -0x1.affdcd4718ba8p-3, -0x1.8341cd6c6b0aap-7, 0x1.b55710d3ebf55p-10, 0x1.e321738ab1448p-19, -0x1.c53c1373c8858p-24, 0x1.e0c270acb15c6p-38, 0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.8d1f8a3279763p+2, -0x1.d4881995a0c1fp+5, 0x1.e86d414a78e34p+7, -0x1.280027c9b0876p+9, 0x1.d3eb5f0b0594cp+9, -0x1.0b82a55c2799fp+10, 0x1.07ce9f70ddb28p+10, -0x1.0d7822536789ep+10, 0x1.0df61d2a506b2p+10, -0x1.c6893ac6cda6bp+9, 0x1.45ac9e8089788p+9, -0x1.c9d686e237044p+8, 0x1.35c4c3819b31p+8, -0x1.4a58be360f4f4p+7, 0x1.017559c35f761p+6, -0x1.5d1ba7f134742p+4, 0x1.dadd49a935c84p+1, 0x1.87b01fd4326a3p+2, -0x1.9ab15d247f91p+2, 0x1.46cd6a0d33a49p+1, -0x1.8955d7defe0d5p-2, -0x1.85244f4e65bbcp-7, 0x1.6f86d3c431061p-8, 0x1.1b4e3c12a74ep-16, -0x1.7914d82d3193fp-21, 0x1.903b4b44dd8c8p-34, -0x0p+0}; + } + if constexpr (order == 10) { + return {0x0p+0, 0x1.041a0a897aa29p+1, -0x1.3658b5d77609ep+4, 0x1.5194af04e2f85p+6, -0x1.c3df81f0aaf29p+7, 0x1.ad183e8db3dacp+8, -0x1.3d9c782d70077p+9, 0x1.852da35362a6dp+9, -0x1.9cca18f6947ddp+9, 0x1.9a6efa498935ep+9, -0x1.a300c2ebdd39dp+9, 0x1.a735477cbff1cp+9, -0x1.7a384b1c312fcp+9, 0x1.2afd886ee72d7p+9, -0x1.d0f63946d275bp+8, 0x1.6384c4a13f54ep+8, -0x1.d6c269ce8bf35p+7, 0x1.08982647618p+7, -0x1.1f7e83a071123p+6, 0x1.2a5701b5bea0ep+5, -0x1.c18aa4ec1159bp+3, 0x1.4dc13861658a9p+1, 0x1.bd5ac19033245p-5, -0x1.1aa94170fffadp-4, -0x1.97678bd8dc9fap-14, 0x1.25b3fc23ddcf6p-16, -0x1.381fef501218fp-28, -0x0p+0}; + } + if constexpr (order == 11) { + return {0x0p+0, 0x1.456a1d2a45d0dp+0, -0x1.86731e38f2c9fp+3, 0x1.99ddae9b5957ep+5, -0x1.ebccc1d5d759ap+6, 0x1.74f85dd906949p+7, -0x1.8426225b26444p+7, 0x1.4fbcc1bdf3f19p+7, -0x1.4776c0e99319fp+7, 0x1.573bef3fda7ebp+7, -0x1.2b0c271bd883ep+7, 0x1.bb5bca80b625p+6, -0x1.5808025c93fa5p+6, 0x1.0c1df40cf5e4cp+6, -0x1.5dea01151a3e2p+5, 0x1.997fc95198574p+4, -0x1.f5c4140f2a03ep+3, 0x1.1578f4041624bp+3, -0x1.e11a4c4784826p+1, 0x1.8c2f5a8cae554p+0, -0x1.42cdddde9b71fp-1, 0x1.1b37523680cdap-3, 0x1.61bca3fd3effbp-7, -0x1.eeca78cc1dd9bp-8, 0x1.427b3775515b6p-14, 0x1.1c6c30fb5472dp-18, -0x1.2f056506ce5e6p-29, 0x0p+0}; + } + if constexpr (order == 12) { + return {0x0p+0, 0x1.45a484f799a72p-2, -0x1.87cf9eab4f4p+1, 0x1.99aecd437634bp+3, -0x1.e335dd2c6e9dep+4, 0x1.5e3841e21950ap+5, -0x1.48839e048b83dp+5, 0x1.e11a7f30735e3p+4, -0x1.bff27724d4104p+4, 0x1.f68b6fe2ccc31p+4, -0x1.a9c89c30bca22p+4, 0x1.147ddad811d2bp+4, -0x1.a10ee0eb1ccb6p+3, 0x1.5d8b9ffe3cdb9p+3, -0x1.b0eebf69279fp+2, 0x1.b180929e1a69bp+1, -0x1.11a2d370771cap+1, 0x1.45b0d998cab37p+0, -0x1.d74083eaced41p-2, 0x1.27c1113b5bdb8p-3, -0x1.2ee6a8512694ep-4, 0x1.0ad11030da229p-6, 0x1.b719ad4ae716p-8, -0x1.7b5726cd7507bp-9, 0x1.efe0e7fbce7f4p-14, 0x1.116839f7247aep-18, -0x1.24c158fd367dfp-28, -0x0p+0}; + } + if constexpr (order == 13) { + return {0x0p+0, 0x1.439a95b32a47fp-5, -0x1.85e5f8ce20b7p-2, 0x1.959ab595a2ea4p+0, -0x1.d591277dff53ep+1, 0x1.43a6564933b3fp+2, -0x1.0a2c05cc597abp+2, 0x1.273950f6ffd18p+1, -0x1.050c8b9cb84b8p+1, 0x1.600ea820111dp+1, -0x1.21f61a844a105p+1, 0x1.19f0e6ef31a0dp+0, -0x1.8e2103144a726p-1, 0x1.a07f2894f970fp-1, -0x1.ccce8527cee5cp-2, 0x1.e56137866a825p-4, -0x1.5df48c0c87cd7p-4, 0x1.19d3f039c46cep-4, -0x1.9e6cd0f61f4cbp-9, -0x1.b966bdf45728ap-7, 0x1.8240771a20728p-9, -0x1.1b05a2f57f924p-9, 0x1.7f8554959f4a5p-9, -0x1.23710df832eb2p-10, 0x1.cc575afdf3f3dp-14, 0x1.1f238196ae22ep-18, -0x1.3697e9bf4306ap-27, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0x9.71e05d9f9d6a6a5p-13L, 0xe.b9e6e278b8a3ea8p-7L, 0xc.c0783a6dea3101cp-4L, 0x8.5c6d3c03e139c58p-5L, -0x9.c0dc418a090583bp-5L, 0xd.32029dea6d20a27p-6L, -0xd.f365933107c2191p-7L, 0xa.9b4f995a39545fcp-8L, -0xf.2a9dfdc1e240f71p-11L, -0xa.dcb9bb583c8b013p-12L, 0x9.d6c9f03875bcf99p-12L, -0xb.6432c68d9036eap-14L, 0xa.10a1bf3dc1ce972p-19L, 0x9.ace5aadbe99adaep-18L, -0x8.b58e6f0449bf329p-21L, -0x8.f23814c144d7229p-22L, 0x8.b5bebe29765b5fbp-24L, -0x9.5480bd482c76432p-30L, -0xf.3301d09631101f2p-32L, 0xd.6b1ad2a9956cecp-36L, -0x8.5b8b379eacc020ep-40L, -0x9.6e6469e45867b18p-46L, 0xc.ca63a296e698604p-53L, 0xe.9f3ed93d387731ep-63L, -0xd.69a601c1fd321e5p-75L, 0xe.37e858d46b515bp-97L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xf.ff35419fa0e8f21p-11L, 0xb.43c4ab28ce718b1p-5L, 0xa.7b11139323118aep-4L, -0xc.ebd27807cee01bp-3L, 0xf.70d391b7b8f1d7fp-4L, -0x9.d261e8a8608ee81p-4L, 0xd.289270d5a3d484p-5L, -0xf.ea38a0284f599d4p-6L, 0xf.7f5c1aafe97c0a1p-7L, -0xb.4af2f2f24e7c239p-8L, 0xb.9e57029c3fb215dp-10L, -0xf.d3ba488dd169dd9p-13L, 0x8.9d83eeeed9dc1b7p-16L, 0xb.e588e05a14054ecp-17L, -0xe.965fffb7152c15fp-18L, 0xb.a1c464fe94734f4p-20L, 0x9.0ffc4adfdaf948bp-24L, -0x8.ab183dae09460bbp-25L, -0x8.cdc8dffc5f7a7c4p-28L, 0xf.bec1f26a0e3b7cap-34L, 0xa.84831359035218p-37L, -0xa.02b41a135680872p-43L, 0xb.5603cf768986fc1p-49L, -0xc.d24f831bd1db255p-58L, -0xc.45e3366043f8eabp-70L, 0xd.02a0f58dee755b1p-91L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xb.871c689e36e67b2p-8L, 0xc.c21484a70968caap-4L, -0xa.d11d772e7e79982p-3L, -0xe.51d42f1875fb05dp-5L, 0xf.9488fb657535621p-3L, -0xc.816fad65cc2b1fep-3L, 0xb.72ec5197f1d73dap-4L, -0xb.e6ba4cd08dc3e1ep-8L, -0xe.5a89c4ef8a1b6aap-6L, 0xc.4b87ef54b6da459p-6L, -0x9.71dd2188b6a770fp-7L, 0xd.21b94476a8d5992p-12L, 0xa.ec57d75af6152bbp-10L, -0x9.f909d12d261cd27p-11L, 0xa.1c6fb324aff682bp-14L, 0xc.955659a270d5623p-16L, -0xa.51515b49bee533ep-17L, 0x8.30a4a603b752616p-20L, 0x8.e30a8066affb01ep-24L, -0xf.f6a025cb63973cp-27L, 0xc.c807d46ae5c0b92p-32L, 0xa.5b8e365dbdf1a9dp-36L, -0xf.a710791928d528ap-43L, -0xd.73b20acd2ddae47p-53L, 0x8.3a9f2648c76b5adp-62L, -0x8.b92ec6233b61c8p-82L, 0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xd.b20322a3996a6a2p-6L, 0xd.ca4aa0fa2c66c04p-4L, -0xa.4de420cc6c77707p-1L, 0x9.2a8ab8b3d2a9452p+0L, -0x9.2a2c8f45b7035d6p+0L, 0xd.fee80d54f348b5ap-1L, -0x9.2c6587097a03f3cp-1L, 0x9.225b43c8840bfbbp-2L, -0xb.b74e433b47ec0d7p-4L, 0x9.6dc870dbf111c84p-6L, -0xd.6e00555bfbc3311p-7L, 0x8.3bd80e6e14d4ep-6L, -0xa.70de9ebe40837ffp-7L, 0xd.458b8cfbb4b4fcp-9L, -0x8.db3d47eeae9cad3p-12L, -0xa.d5110cf4583900cp-13L, 0x8.614b75f02db74e4p-14L, -0x9.8a8896b713246b3p-17L, -0xd.51a5323c171fee3p-26L, 0xb.8c561092a896f33p-23L, -0xa.769011a8736a082p-28L, -0xb.5161f3d88ae4a18p-32L, 0x8.1e58deca3716d7bp-38L, 0xe.96739f4ce14a1ebp-49L, -0x8.886bf8d85fdfe26p-57L, 0x9.0badf046a579ce9p-76L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xc.de9de1239cb046fp-4L, -0x9.0c5906491d3955ap-2L, -0xc.7839f71242a14d4p-5L, 0x8.81b461d68a76009p+0L, -0xb.72fe813d0b59fd4p+0L, -0xf.f7358c9442947e5p-5L, 0xa.ed7063276080604p+1L, -0x9.29c9c7d32fce6e5p+2L, 0x8.423651a8f719bep+2L, -0xe.99bce7eb69c9558p+0L, -0xd.e0e5eaef029d8dap-2L, 0xa.4f436b46a67c643p+0L, -0xf.256f04625361643p-1L, 0xb.28f9c831a4ab6f7p-2L, -0x8.a71970fcdb5d61fp-5L, -0xe.1058e94389b55dfp-6L, 0xc.ee39ab87739f9d3p-7L, -0xe.ddcf5eece04ef66p-10L, -0xe.3fae0f6307b4b7dp-14L, 0xd.2fe42b7297d6b86p-15L, -0x8.3fb2ed50024d845p-19L, -0x8.71bc783d7f852p-23L, 0xb.4de2c6af60665f8p-29L, 0xc.39550de79b43b5p-39L, -0xb.dc24b4b0400b683p-47L, 0xc.92a4664dadb8e43p-65L, -0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0x9.4d8af4702fa4917p-2L, -0xe.7e9b2eb0a293c0dp+0L, 0xa.206556ce091b04p+2L, -0x8.8b6f4ec09d9c51ap+3L, 0x9.db1ce281d9e7bffp+3L, -0x8.0207abf4baf0d13p+3L, 0xf.37ef354ae719481p+1L, 0xa.e0f4f0aad55bdb4p+0L, -0xd.8f2ed3cabd9e47dp+2L, 0xb.e8f89c68b5ce98dp+3L, -0xe.b7a656bdeec15e3p+3L, 0xc.fec0461881c7ecfp+3L, -0xf.676370d2bd59da4p+2L, 0xa.1fffb91075d1ef3p+1L, 0xa.f4a0e680e012488p-5L, -0xe.9503c4c9b7b1e2cp-2L, 0xc.a0744fcfdf1dc88p-3L, -0xf.b153b44bbbd55dap-6L, -0x9.59d9d9ad1020acfp-9L, 0x9.ef15d0e0d82a945p-10L, -0x9.0e5f7516ecaaaccp-14L, -0x9.0a87b28ac0c9fb1p-18L, 0x8.acdfc44a2a6359cp-23L, 0xd.807a7cb67428b3fp-33L, -0x9.0f4709e42ae00f3p-40L, 0x9.9ac848883cba3fep-57L, 0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0x9.834e4dab96bc376p-1L, -0x9.71bb4c1fb65b59dp+2L, 0x8.9b36c94b3750b19p+4L, -0x9.bdcc290b9f8378cp+5L, 0xf.f9f96db50ad1ec4p+5L, -0xa.bec9c1b0372837ap+6L, 0xc.f45cba99d8f5737p+6L, -0xe.2ab3c8513f0ea1bp+6L, 0xd.7cf5a3d5e047047p+6L, -0xa.f1823dfa8daa614p+6L, 0xf.7ec994dda07fb22p+5L, -0x9.9bf6048130d2edbp+5L, 0x8.eebf04d13348a6p+4L, -0x9.a7c6a99c8f4aeedp+1L, -0x8.db211ffd209a6f3p+2L, 0x8.1c765ef5f7f1ce5p+2L, -0xc.f9039da83aa9c29p+0L, 0x8.69d91bc55678fabp-2L, 0xd.c9ffdee5e7de57ep-6L, -0x8.01426dc87cadac2p-6L, 0xa.90130491b5b5f4ep-10L, 0xa.5c99052bf919189p-14L, -0xe.9d842bbab01556cp-19L, -0xf.4ba9827a103207ap-28L, 0xf.2e767d355bddaa1p-35L, -0x8.0c472517ad4ef83p-50L, -0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0xf.abcd8b83a71b41bp-1L, -0x8.9dce5f3b30b3793p+3L, 0x8.68682195f609a67p+5L, -0x9.84d437345ff4c4dp+6L, 0xd.c713118f501f476p+6L, -0xd.84594228bf62173p+6L, 0x9.e3e95931228123cp+6L, -0xb.f3ef786eb60bf83p+5L, 0xc.e4402241c87301dp+2L, 0xe.e0ba9661797c21bp+5L, -0xf.2a501fdde17d235p+6L, 0x8.d2170ed72b4825ep+7L, -0xf.c81fa50c6187197p+6L, 0xc.ec6dc8c841c327ep+6L, -0x9.a0b9ffd8a1f0ecfp+6L, 0xb.2759e13edab26a3p+5L, -0x8.586218b8ff72c95p+4L, 0xa.f8529bae88e396ep+1L, 0xe.c7b5cf8a917974bp-2L, -0x8.e3ac4b6b6acc633p-2L, 0xf.9c560d3a4ed77bcp-6L, 0xf.c13805a6e393a55p-10L, -0x8.98309aea3397895p-13L, -0x9.6e28a6b4cc8a06ep-22L, 0x8.ea4a570e998fa08p-28L, -0x9.742325e7646a08p-43L, 0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0xf.196612f526d24c2p-1L, -0x8.b4965322c754f1cp+3L, 0x8.fd04e098b6fda5ap+5L, -0xb.0af33f860e6644cp+6L, 0x9.32e460da58d525ap+7L, -0xb.ab4f68e4108651p+7L, 0xc.f4b5ef2831ea0e8p+7L, -0xd.ddf0b3d1c6b1944p+7L, 0xd.f040100f39be9b8p+7L, -0xc.784cded5d90c4c7p+7L, 0xa.1dc1c0af0ad3159p+7L, -0xf.7356b459ded2772p+6L, 0xa.c6ab0e5c26933f6p+6L, -0xd.1d94154203d1881p+5L, 0xe.3ceb107fd7e02c5p+4L, -0xd.e3c65ca23d50927p+3L, 0xa.0c71ac8171966e8p+2L, -0x9.d5f9b056617ba17p-1L, -0xd.6bdd9c33d9e1582p-2L, 0xd.32a81275f97ea1cp-3L, -0xd.7fee6a38c5d3f8dp-6L, -0xc.1a0e6b635854ea4p-10L, 0xd.aab8869f5faa95cp-13L, 0xf.190b9c558a2439ep-22L, -0xe.29e09b9e442c27dp-27L, 0xf.061385658ae2fdbp-41L, 0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0xc.68fc5193cbb1b7bp-1L, -0xe.a440ccad060f512p+2L, 0xf.436a0a53c719d99p+4L, -0x9.40013e4d843ac8dp+6L, 0xe.9f5af8582ca613bp+6L, -0x8.5c152ae13ccf6f4p+7L, 0x8.3e74fb86ed9434dp+7L, -0x8.6bc1129b3c4ec82p+7L, 0x8.6fb0e9528358fc8p+7L, -0xe.3449d6366d35aadp+6L, 0xa.2d64f4044bc4118p+6L, -0xe.4eb43711b821ef6p+5L, 0x9.ae261c0cd987cdbp+5L, -0xa.52c5f1b07a7a10fp+4L, 0x8.0baace1afbb0855p+3L, -0xa.e8dd3f89a3a1196p+1L, 0xe.d6ea4d49ae41ca2p-2L, 0xc.3d80fea19351b34p-1L, -0xc.d58ae923fc87cffp-1L, 0xa.366b50699d24558p-2L, -0xc.4aaebef7f06a90cp-5L, -0xc.29227a732dde266p-10L, 0xb.7c369e218830b25p-11L, 0x8.da71e0953a6ff91p-19L, -0xb.c8a6c1698c9facp-24L, 0xc.81da5a26ec63e05p-37L, -0x0p+0L}; + } + if constexpr (order == 10) { + return {0x0p+0L, 0x8.20d0544bd51475ap-2L, -0x9.b2c5aebbb04f3ccp+1L, 0xa.8ca5782717c2461p+3L, -0xe.1efc0f8557945e6p+4L, 0xd.68c1f46d9ed5f43p+5L, -0x9.ece3c16b803b8afp+6L, 0xc.296d1a9b1536a08p+6L, -0xc.e650c7b4a3ee86bp+6L, 0xc.d377d24c49af172p+6L, -0xd.1806175ee9ce931p+6L, 0xd.39aa3be5ff8dcb3p+6L, -0xb.d1c258e1897df15p+6L, 0x9.57ec4377396b8b8p+6L, -0xe.87b1ca3693ad8c6p+5L, 0xb.1c262509faa6e0bp+5L, -0xe.b6134e745f9a70dp+4L, 0x8.44c1323b0bffc57p+4L, -0x8.fbf41d038891ad4p+3L, 0x9.52b80dadf506ef2p+2L, -0xe.0c5527608acdb69p+0L, 0xa.6e09c30b2c546eap-2L, 0xd.ead60c819922651p-8L, -0x8.d54a0b87ffd6b8cp-7L, -0xc.bb3c5ec6e4fd2a6p-17L, 0x9.2d9fe11eee7aff2p-19L, -0x9.c0ff7a8090c74e6p-31L, -0x0p+0L}; + } + if constexpr (order == 11) { + return {0x0p+0L, 0xa.2b50e9522e86a75p-3L, -0xc.3398f1c7964f4dfp+0L, 0xc.ceed74dacabed45p+2L, -0xf.5e660eaebacd068p+3L, 0xb.a7c2eec834a457bp+4L, -0xc.213112d93221da7p+4L, 0xa.7de60def9f8cb1ep+4L, -0xa.3bb6074c98cfb0fp+4L, 0xa.b9df79fed3f56f5p+4L, -0x9.586138dec41f121p+4L, 0xd.dade5405b127d2ep+3L, -0xa.c04012e49fd2735p+3L, 0x8.60efa067af26275p+3L, -0xa.ef5008a8d1f0cbfp+2L, 0xc.cbfe4a8cc2b9da9p+1L, -0xf.ae20a079501f01bp+0L, 0x8.abc7a020b125872p+0L, -0xf.08d2623c2412c59p-2L, 0xc.617ad46572a9f45p-3L, -0xa.166eeef4db8f41bp-4L, 0x8.d9ba91b4066cd0bp-6L, 0xb.0de51fe9f7fd8e2p-10L, -0xf.7653c660eecd46ap-11L, 0xa.13d9bbaa8adb22dp-17L, 0x8.e36187daa39648ep-21L, -0x9.782b283672f30cdp-32L, 0x0p+0L}; + } + if constexpr (order == 12) { + return {0x0p+0L, 0xa.2d2427bccd39172p-5L, -0xc.3e7cf55a7a0039fp-2L, 0xc.cd766a1bb1a58d8p+0L, -0xf.19aee96374ef183p+1L, 0xa.f1c20f10ca84c7dp+2L, -0xa.441cf0245c1e989p+2L, 0xf.08d3f9839af181p+1L, -0xd.ff93b926a081d89p+1L, 0xf.b45b7f166618b46p+1L, -0xd.4e44e185e5110d4p+1L, 0x8.a3eed6c08e9589p+1L, -0xd.08770758e65b254p+0L, 0xa.ec5cfff1e6dc48ap+0L, -0xd.8775fb493cf7d7dp-1L, 0xd.8c0494f0d34dbf8p-2L, -0x8.8d169b83b8e53edp-2L, 0xa.2d86ccc6559bbf1p-3L, -0xe.ba041f5676a0b08p-5L, 0x9.3e0889dadedbcbbp-6L, -0x9.7735428934a726dp-7L, 0x8.56888186d114aabp-9L, 0xd.b8cd6a5738afd8ap-11L, -0xb.dab9366ba83dabcp-12L, 0xf.7f073fde73fa0bdp-17L, 0x8.8b41cfb923d7022p-21L, -0x9.260ac7e9b3efaabp-31L, -0x0p+0L}; + } + if constexpr (order == 13) { + return {0x0p+0L, 0xa.1cd4ad99523f5acp-8L, -0xc.2f2fc67105b80bcp-5L, 0xc.acd5acad17523e6p-3L, -0xe.ac893beffa9ec6ep-2L, 0xa.1d32b2499d9f84p-1L, -0x8.51602e62cbd5666p-1L, 0x9.39ca87b7fe8bf75p-2L, -0x8.28645ce5c25be28p-2L, 0xb.0075410088e8318p-2L, -0x9.0fb0d4225082783p-2L, 0x8.cf8737798d06934p-3L, -0xc.710818a25393088p-4L, 0xd.03f944a7cb8758ep-4L, -0xe.6674293e772e22ap-5L, 0xf.2b09bc335412a19p-7L, -0xa.efa460643e6b966p-7L, 0x8.ce9f81ce2366f05p-7L, -0xc.f36687b0fa6554ep-12L, -0xd.cb35efa2b9452d3p-10L, 0xc.1203b8d10393dadp-12L, -0x8.d82d17abfc923a4p-12L, 0xb.fc2aa4acfa52995p-12L, -0x9.1b886fc19758c23p-13L, 0xe.62bad7ef9f9e73fp-17L, 0x8.f91c0cb5711719fp-21L, -0x9.b4bf4dfa1834f78p-30L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.2e3c0bb3f3ad4d49ee7e86ec5518p-10Q, 0x1.d73cdc4f17147d4ff78a1eaebc82p-4Q, 0x1.980f074dbd462038712882b2222ep-1Q, 0x1.0b8da7807c2738b0ef8a21bd41e3p-2Q, -0x1.381b88314120b0755faac9b6a20bp-2Q, 0x1.a64053bd4da4144d5c6645aafa57p-3Q, -0x1.be6cb26620f84322f5bc9ad12402p-4Q, 0x1.5369f32b472a8bf80c2615157591p-5Q, -0x1.e553bfb83c481ee1c85b10218134p-8Q, -0x1.5b97376b07916025b5f5ed690f55p-9Q, 0x1.3ad93e070eb79f317793c09c0443p-9Q, -0x1.6c8658d1b206dd40e11227faae72p-11Q, 0x1.421437e7b839d2e408af08229929p-16Q, 0x1.359cb55b7d335b5bc8ff9070d375p-15Q, -0x1.16b1cde08937e6520514fc007dd3p-18Q, -0x1.1e470298289ae452c29404b9c735p-19Q, 0x1.16b7d7c52ecb6bf5c9c270fe3973p-21Q, -0x1.2a9017a9058ec8631bfea23cf0d5p-27Q, -0x1.e6603a12c62203e481a6f751bafcp-29Q, 0x1.ad635a5532ad9d7f9b990f32589fp-33Q, -0x1.0b7166f3d598041c11f82d418c61p-37Q, -0x1.2dcc8d3c8b0cf63074ab4d9fba5fp-43Q, 0x1.994c7452dcd30c07dade8e0a0b53p-50Q, 0x1.d3e7db27a70ee63bd0dc60e06dc1p-60Q, -0x1.ad34c0383fa643c903234154af7ep-72Q, 0x1.c6fd0b1a8d6a2b5f9f47659e9cdcp-94Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.ffe6a833f41d1e41c335a1d663bdp-8Q, 0x1.6878956519ce3162ba29291a8512p-2Q, 0x1.4f6222726462315c1311b1bd0b54p-1Q, -0x1.9d7a4f00f9dc035ff30a13b3dd41p+0Q, 0x1.ee1a7236f71e3afe8c9241dc27eep-1Q, -0x1.3a4c3d150c11dd01e59680a43c0ap-1Q, 0x1.a5124e1ab47a907fdd8a56cf5fb6p-2Q, -0x1.fd47140509eb33a71307cdb49b1ep-3Q, 0x1.efeb8355fd2f814144fb4db02bbdp-4Q, -0x1.695e5e5e49cf847101e5144b6fd9p-5Q, 0x1.73cae05387f642ba0d652b2dbc7ep-7Q, -0x1.fa774911ba2d3bb25d61e69c8c0ap-10Q, 0x1.13b07ddddb3b836ee57d128434e4p-13Q, 0x1.7cb11c0b4280a9d8a95e4eb20f02p-14Q, -0x1.d2cbfff6e2a582bd1061aa2f37f3p-15Q, 0x1.74388c9fd28e69e7d9f0c5af3f3ep-17Q, 0x1.21ff895bfb5f2915922793fd2436p-21Q, -0x1.156307b5c128c175f7e3a714785ap-22Q, -0x1.19b91bff8bef4f88f1ed76cce8b5p-25Q, 0x1.f7d83e4d41c76f94d46210e4d8b7p-31Q, 0x1.5090626b206a430059df75027f9ap-34Q, -0x1.405683426ad010e44f0a98cc99acp-40Q, 0x1.6ac079eed130df81302e2b26c976p-46Q, -0x1.9a49f0637a3b64a9eb35bd52a783p-55Q, -0x1.88bc66cc087f1d558950f224ed94p-67Q, 0x1.a0541eb1bdceab613773d4dca27cp-88Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.70e38d13c6dccf6333417be4b524p-5Q, 0x1.98429094e12d1953c234a36b12cep-1Q, -0x1.5a23aee5cfcf330386719e085b0dp+0Q, -0x1.ca3a85e30ebf60ba5eccc5b7afa3p-2Q, 0x1.f2911f6caea6ac421bc7b6d2cbaap+0Q, -0x1.902df5acb98563fb6c8594126211p+0Q, 0x1.6e5d8a32fe3ae7b3c23b4e6e9a5bp-1Q, -0x1.7cd7499a11b87c3bc4909e0bca27p-5Q, -0x1.cb51389df1436d54630b5c40529cp-3Q, 0x1.8970fdea96db48b13c52294d02f6p-3Q, -0x1.2e3ba43116d4ee1d14ccd7ef1ed2p-4Q, 0x1.a437288ed51ab324c667ecc7c503p-9Q, 0x1.5d8afaeb5ec2a57500ea441b586cp-7Q, -0x1.3f213a25a4c39a4ee9f8ca7fc5d7p-8Q, 0x1.438df66495fed0569b1e66072684p-11Q, 0x1.92aacb344e1aac45946a6dd95aa5p-13Q, -0x1.4a2a2b6937dca67c2fb96409ea9bp-14Q, 0x1.061494c076ea4c2b5c794f2371b3p-17Q, 0x1.1c61500cd5ff603bf7260846f058p-21Q, -0x1.fed404b96c72e77fac42699e643cp-24Q, 0x1.9900fa8d5cb81723cdb543a2519ap-29Q, 0x1.4b71c6cbb7be353ab93ac21700a5p-33Q, -0x1.f4e20f23251aa513b13eb0ad0e35p-40Q, -0x1.ae764159a5bb5c8d340066c073e5p-50Q, 0x1.0753e4c918ed6b59ce15c4a93456p-59Q, -0x1.1725d8c4676c38ff70e1cc358b0cp-79Q, 0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.b6406454732d4d440405d44a6611p-3Q, 0x1.b949541f458cd808c01c6f443873p-1Q, -0x1.49bc84198d8eee0e1769477dce8bp+2Q, 0x1.255157167a5528a3714c438e28f7p+3Q, -0x1.254591e8b6e06babda61e0b5bc24p+3Q, 0x1.bfdd01aa9e6916b30d7fb866c97ap+2Q, -0x1.258cb0e12f407e788c8d24c0406ap+2Q, 0x1.244b687910817f75269b9b13caa9p+1Q, -0x1.76e9c86768fd81ae0140e512e5cp-1Q, 0x1.2db90e1b7e223907d65e185884b8p-3Q, -0x1.adc00aab7f786622c376bd60af55p-4Q, 0x1.077b01cdc29a9bffc5581309684ap-3Q, -0x1.4e1bd3d7c8106ffe51d90e2985dp-4Q, 0x1.a8b1719f76969f8051acdf38be11p-6Q, -0x1.1b67a8fdd5d395a5e1003bc2f0a6p-9Q, -0x1.5aa2219e8b072017d97056f43e75p-10Q, 0x1.0c296ebe05b6e9c7cf2917908c1fp-11Q, -0x1.315112d6e2648d659715640ab8d6p-14Q, -0x1.aa34a64782e3fdc563417214521bp-23Q, 0x1.718ac2125512de66d6a9b5d7a901p-20Q, -0x1.4ed202350e6d4103a23efe8129dbp-25Q, -0x1.6a2c3e7b115c942fffc924e2bab2p-29Q, 0x1.03cb1bd946e2daf6230de1903bdbp-35Q, 0x1.d2ce73e99c2943d672b79f3e0a48p-46Q, -0x1.110d7f1b0bfbfc4b48ffe17563d9p-54Q, 0x1.2175be08d4af39d29c43830b683bp-73Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.9bd3bc24739608dd1ea07282ef41p-1Q, -0x1.218b20c923a72ab49d783c404613p+1Q, -0x1.8f073ee2485429a822c3452a2874p-2Q, 0x1.10368c3ad14ec0121ffa10bcc969p+3Q, -0x1.6e5fd027a16b3fa71b0c6884de45p+3Q, -0x1.fee6b19288528fc9912556543eabp-2Q, 0x1.5dae0c64ec100c07cb64ad03ec4bp+4Q, -0x1.253938fa65f9cdca9dcd99a85c53p+5Q, 0x1.0846ca351ee337bf1cde15fb1fccp+5Q, -0x1.d3379cfd6d392ab0067070da245ep+3Q, -0x1.bc1cbd5de053b1b3e6030ce1e12cp+1Q, 0x1.49e86d68d4cf8c86d821677a6f81p+3Q, -0x1.e4ade08c4a6c2c8507d0732937fap+2Q, 0x1.651f390634956dee37faca825966p+1Q, -0x1.14e32e1f9b6bac3d6ef9b66af2bep-2Q, -0x1.c20b1d287136abbd5724af5f5f6dp-3Q, 0x1.9dc73570ee73f3a5d7e75ae5a9e2p-4Q, -0x1.dbb9ebdd9c09deccb10201529186p-7Q, -0x1.c7f5c1ec60f696f9a40d5c3a09b9p-11Q, 0x1.a5fc856e52fad70c72c88b4e101ap-12Q, -0x1.07f65daa0049b089e54b5e4ff41ap-16Q, -0x1.0e378f07aff0a4003d557ea836c6p-20Q, 0x1.69bc58d5ec0ccbef38bec29b1e3ep-26Q, 0x1.872aa1bcf368769fc21e2888c6ffp-36Q, -0x1.7b84969608016d06bfce8c14af4bp-44Q, 0x1.92548cc9b5b71c86f11e27090a6cp-62Q, -0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.29b15e8e05f4922e7d4e472bcd8ap+1Q, -0x1.cfd365d6145278198eca9cdcf322p+3Q, 0x1.440caad9c12360807dafb40ee49dp+5Q, -0x1.116de9d813b38a3407c4631c8d59p+6Q, 0x1.3b639c503b3cf7fe4e22628885p+6Q, -0x1.0040f57e975e1a258b9875f60498p+6Q, 0x1.e6fde6a95ce32902224ee706d045p+4Q, 0x1.5c1e9e155aab7b67b6f07264ad9dp+3Q, -0x1.b1e5da7957b3c8fabda1d3079971p+5Q, 0x1.7d1f138d16b9d31aa2829abf2c4bp+6Q, -0x1.d6f4cad7bdd82bc575e84c099062p+6Q, 0x1.9fd808c31038fd9d9f982223f243p+6Q, -0x1.ecec6e1a57ab3b47a08d39c75c75p+5Q, 0x1.43fff7220eba3de58880abe282dap+4Q, 0x1.5e941cd01c02491042063bd5bee4p-2Q, -0x1.d2a0789936f63c584facf579998ap+1Q, 0x1.940e89f9fbe3b90fa47d37c5f5dep+0Q, -0x1.f62a7689777aabb4ab21adf5f4dbp-3Q, -0x1.2b3b3b35a204159ed027231f9fb4p-6Q, 0x1.3de2ba1c1b05528a92fff0293ae7p-7Q, -0x1.21cbeea2dd955597cbff136c8ae1p-11Q, -0x1.2150f65158193f62d7d7fa29a2c2p-15Q, 0x1.159bf889454c6b38325ea21f7134p-20Q, 0x1.b00f4f96ce85167dd0220fed62e7p-30Q, -0x1.21e8e13c855c01e5c446a2405ce7p-37Q, 0x1.33590911079747fc32e0ed899892p-54Q, 0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.3069c9b572d786eb96d928fa48f8p+2Q, -0x1.2e376983f6cb6b3abd6845551e34p+5Q, 0x1.1366d92966ea16320047797424ccp+7Q, -0x1.37b9852173f06f1765e1ff0e8531p+8Q, 0x1.ff3f2db6a15a3d87e9d7dfab891bp+8Q, -0x1.57d9383606e506f39f38559de18fp+9Q, 0x1.9e8b97533b1eae6eef5cca38387bp+9Q, -0x1.c556790a27e1d4367bdf83babbd1p+9Q, 0x1.af9eb47abc08e08daae8abacd91fp+9Q, -0x1.5e3047bf51b54c27591544583f14p+9Q, 0x1.efd9329bb40ff6440883f1147f56p+8Q, -0x1.337ec090261a5db68ef97d7b1236p+8Q, 0x1.1dd7e09a266914bfb2df709f94d8p+7Q, -0x1.34f8d53391e95dda3b7a1cf411e9p+4Q, -0x1.1b6423ffa4134de5e81b17a17c11p+5Q, 0x1.038ecbdebefe39ca7724b3c832fcp+5Q, -0x1.9f2073b507553852ed1a72469f32p+3Q, 0x1.0d3b2378aacf1f56c9dbd6da2754p+1Q, 0x1.b93ffbdcbcfbcafb2828e85b9cf7p-3Q, -0x1.00284db90f95b583e4f97482c916p-3Q, 0x1.5202609236b6be9cf16ae9fb3f51p-7Q, 0x1.4b9320a57f2323116dd63710b5p-11Q, -0x1.d3b085775602aad7427a22c98a84p-16Q, -0x1.e975304f420640f339ac29b10f7bp-25Q, 0x1.e5cecfa6ab7bb5421ef8ce75b514p-32Q, -0x1.0188e4a2f5a9df06f68769623342p-47Q, -0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.f579b17074e36836eacdef034d32p+2Q, -0x1.13b9cbe766166f25c9dacf502f0ep+6Q, 0x1.0d0d0432bec134cd566f573a6ab7p+8Q, -0x1.309a86e68bfe9899fc0e7b2c0b24p+9Q, 0x1.b8e26231ea03e8ec859801e86e25p+9Q, -0x1.b08b284517ec42e681060fcc6182p+9Q, 0x1.3c7d2b26245024778e757ad1afa1p+9Q, -0x1.7e7def0dd6c17f062ac250175abcp+8Q, 0x1.9c880448390e60397d60bff8dd4cp+5Q, 0x1.dc1752cc2f2f84356ce88f9e5906p+8Q, -0x1.e54a03fbbc2fa46a839c73f788e9p+9Q, 0x1.1a42e1dae56904bbcf40d542b472p+10Q, -0x1.f903f4a18c30e32dc6c45f366ebp+9Q, 0x1.9d8db919083864fcc4e33e87dba9p+9Q, -0x1.34173ffb143e1d9eed0ece396b8p+9Q, 0x1.64eb3c27db564d469eb22cf2354cp+8Q, -0x1.0b0c43171fee5929daa625b8080cp+7Q, 0x1.5f0a5375d11c72dc55998ba597dbp+4Q, 0x1.d8f6b9f1522f2e96a9e605cbb38dp+1Q, -0x1.1c75896d6d598c65080cc6678602p+1Q, 0x1.f38ac1a749daef77915dd8d10d16p-3Q, 0x1.f82700b4dc7274aa9bdb17c1024cp-7Q, -0x1.1306135d4672f12980f476eef1d1p-10Q, -0x1.2dc514d6999140dbb2a33c5d5ad2p-19Q, 0x1.1d494ae1d331f410d690ac5ec36dp-25Q, -0x1.2e8464bcec8d40ffd77c2dc57367p-40Q, 0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.e32cc25ea4da498425dec5295c6bp+2Q, -0x1.1692ca6458ea9e38b44f5a5caee1p+6Q, 0x1.1fa09c1316dfb4b439ac84209c53p+8Q, -0x1.615e67f0c1ccc897da6e59c7c927p+9Q, 0x1.265c8c1b4b1aa4b3e36ae2efb333p+10Q, -0x1.7569ed1c8210ca209e4700bf211ep+10Q, 0x1.9e96bde5063d41cf09d912f51fep+10Q, -0x1.bbbe167a38d63287ecfd91133a36p+10Q, 0x1.be080201e737d36f7e786ff84c53p+10Q, -0x1.8f099bdabb21898e35971dfd6953p+10Q, 0x1.43b83815e15a62b284efdec504bp+10Q, -0x1.ee6ad68b3bda4ee4ba8a3ff07fd1p+9Q, 0x1.58d561cb84d267ecaf620ab5b2e6p+9Q, -0x1.a3b282a8407a310226d6a98bfd4cp+8Q, 0x1.c79d620ffafc0589079d1ba6c99bp+7Q, -0x1.bc78cb9447aa124d62b13f580945p+6Q, 0x1.418e35902e32cdd0c2f0c12b4efbp+5Q, -0x1.3abf360acc2f742d878f5bcabe87p+2Q, -0x1.ad7bb3867b3c2b046f8005354fafp+1Q, 0x1.a655024ebf2fd4378620fe654a6cp+0Q, -0x1.affdcd4718ba7f1a9653624c15d7p-3Q, -0x1.8341cd6c6b0a9d48905914abd48fp-7Q, 0x1.b55710d3ebf552b754e9b7ff147ep-10Q, 0x1.e321738ab144873b6e430caac23ep-19Q, -0x1.c53c1373c88584f948dc218ab05ap-24Q, 0x1.e0c270acb15c5fb504672c4070dp-38Q, 0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.8d1f8a32797636f66137fdd0b5a1p+2Q, -0x1.d4881995a0c1ea2394012c228a31p+5Q, 0x1.e86d414a78e33b3180b504d86b91p+7Q, -0x1.280027c9b087591ad85eeab44da9p+9Q, 0x1.d3eb5f0b0594c2750ef22285fa37p+9Q, -0x1.0b82a55c2799ede8dec310d6a2c6p+10Q, 0x1.07ce9f70ddb2869a6583adf6dec9p+10Q, -0x1.0d7822536789d9033e721121699dp+10Q, 0x1.0df61d2a506b1f8fcfe8714e12afp+10Q, -0x1.c6893ac6cda6b55a49442539d592p+9Q, 0x1.45ac9e808978822ff4aec18a24f6p+9Q, -0x1.c9d686e237043dec7c0766428b6p+8Q, 0x1.35c4c3819b30f9b6fdd7719012dbp+8Q, -0x1.4a58be360f4f421d89ea2c96a33ep+7Q, 0x1.017559c35f7610aa1b74c79cf6fcp+6Q, -0x1.5d1ba7f13474232b930160e8fda2p+4Q, 0x1.dadd49a935c8394385dd6633289ep+1Q, 0x1.87b01fd4326a3668ccbada1018e4p+2Q, -0x1.9ab15d247f90f9fe7c9c31997416p+2Q, 0x1.46cd6a0d33a48aafbbc2d2b2efc4p+1Q, -0x1.8955d7defe0d52172967ed8290b5p-2Q, -0x1.85244f4e65bbc4ccef79bedeb2b3p-7Q, 0x1.6f86d3c43106164aba3a27d3b092p-8Q, 0x1.1b4e3c12a74dff21568f7bbd6f64p-16Q, -0x1.7914d82d3193f580c3333edc5ffbp-21Q, 0x1.903b4b44dd8c7c0a4e6f8896b442p-34Q, -0x0p+0Q}; + } + if constexpr (order == 10) { + return {0x0p+0Q, 0x1.041a0a897aa28eb3a0d59e3420dep+1Q, -0x1.3658b5d77609e7977d40f266e1abp+4Q, 0x1.5194af04e2f848c2193a50575354p+6Q, -0x1.c3df81f0aaf28bccb605744a68dcp+7Q, 0x1.ad183e8db3dabe867a16ea08db03p+8Q, -0x1.3d9c782d7007715e1138bf8d8bf5p+9Q, 0x1.852da35362a6d4101e0c1842b371p+9Q, -0x1.9cca18f6947dd0d5bebb456e26c7p+9Q, 0x1.9a6efa498935e2e3d81571c175b7p+9Q, -0x1.a300c2ebdd39d2620495c5f7e961p+9Q, 0x1.a735477cbff1b966c87efc4ff1fep+9Q, -0x1.7a384b1c312fbe2a2f241ae26c7ep+9Q, 0x1.2afd886ee72d716fc61db8011095p+9Q, -0x1.d0f63946d275b18c0f2f2351b8f4p+8Q, 0x1.6384c4a13f54dc153d6b4654b173p+8Q, -0x1.d6c269ce8bf34e1952e45981a53dp+7Q, 0x1.08982647617ff8ae60a05f4fb227p+7Q, -0x1.1f7e83a0711235a83ba8d41f6e49p+6Q, 0x1.2a5701b5bea0dde347c9c6a1a0bfp+5Q, -0x1.c18aa4ec1159b6d22d408f93473cp+3Q, 0x1.4dc13861658a8dd406c58e6b6d01p+1Q, 0x1.bd5ac19033244ca1bfd76ff5f84ap-5Q, -0x1.1aa94170fffad7174e6a949842fp-4Q, -0x1.97678bd8dc9fa54b7e11dee71cb2p-14Q, 0x1.25b3fc23ddcf5fe31e8523af1987p-16Q, -0x1.381fef501218e9cc3debb9c868adp-28Q, -0x0p+0Q}; + } + if constexpr (order == 11) { + return {0x0p+0Q, 0x1.456a1d2a45d0d4e9e190da6b0253p+0Q, -0x1.86731e38f2c9e9bd245d8c21307ep+3Q, 0x1.99ddae9b5957da8932ffd7759bbep+5Q, -0x1.ebccc1d5d759a0cf4ae087b81294p+6Q, 0x1.74f85dd906948af50c25a724f709p+7Q, -0x1.8426225b26443b4ef3ccb7b8d05cp+7Q, 0x1.4fbcc1bdf3f1963c49ab7f076eabp+7Q, -0x1.4776c0e99319f61e68a708d5d7adp+7Q, 0x1.573bef3fda7eadeaaa4494427daep+7Q, -0x1.2b0c271bd883e242fddb7fb5c9c1p+7Q, 0x1.bb5bca80b624fa5bb27c8fee01a2p+6Q, -0x1.5808025c93fa4e6af5aadac355cep+6Q, 0x1.0c1df40cf5e4c4ea44443af3add6p+6Q, -0x1.5dea01151a3e197eb05656a3cb23p+5Q, 0x1.997fc95198573b527728fd6a3ac8p+4Q, -0x1.f5c4140f2a03e036d1612965ff32p+3Q, 0x1.1578f4041624b0e3ebbe577cc0e3p+3Q, -0x1.e11a4c47848258b137fd42f6f749p+1Q, 0x1.8c2f5a8cae553e89ef2299c46ab4p+0Q, -0x1.42cdddde9b71e8354b8f6892a693p-1Q, 0x1.1b37523680cd9a16c0e89cedee59p-3Q, 0x1.61bca3fd3effb1c3f582ac5eba63p-7Q, -0x1.eeca78cc1dd9a8d407ad8882646ep-8Q, 0x1.427b3775515b64598a1525510bb3p-14Q, 0x1.1c6c30fb5472c91c3ee448e49edcp-18Q, -0x1.2f056506ce5e619914cfa74f5c81p-29Q, 0x0p+0Q}; + } + if constexpr (order == 12) { + return {0x0p+0Q, 0x1.45a484f799a722e4cd93e3b2b27ep-2Q, -0x1.87cf9eab4f40073db99d0811247ap+1Q, 0x1.99aecd437634b1af52fa61911031p+3Q, -0x1.e335dd2c6e9de306d05b0cd1cef8p+4Q, 0x1.5e3841e2195098fae8b63a8bc104p+5Q, -0x1.48839e048b83d3127ebd4015d2fap+5Q, 0x1.e11a7f30735e301f0eb1189e687ap+4Q, -0x1.bff27724d4103b12e928ab4222e3p+4Q, 0x1.f68b6fe2ccc3168c1a13f5cdae6fp+4Q, -0x1.a9c89c30bca221a764aca7ca6dcfp+4Q, 0x1.147ddad811d2b11feabd90554e5p+4Q, -0x1.a10ee0eb1ccb64a80031cb887a99p+3Q, 0x1.5d8b9ffe3cdb891325e866af6c37p+3Q, -0x1.b0eebf69279efaf954db661df6b8p+2Q, 0x1.b180929e1a69b7ef5326dddd752dp+1Q, -0x1.11a2d370771ca7d9ba7b5ac54127p+1Q, 0x1.45b0d998cab377e10ef261593991p+0Q, -0x1.d74083eaced416102c8bdf26f325p-2Q, 0x1.27c1113b5bdb797524261b6d46bap-3Q, -0x1.2ee6a8512694e4da2e59c12b6ea6p-4Q, 0x1.0ad11030da22955532efbb615d1ap-6Q, 0x1.b719ad4ae715fb13a423a1010a46p-8Q, -0x1.7b5726cd7507b577ab862e7a3077p-9Q, 0x1.efe0e7fbce7f41797c6619cc6d2bp-14Q, 0x1.116839f7247ae044e8df44cc0f86p-18Q, -0x1.24c158fd367df5563092d5399988p-28Q, -0x0p+0Q}; + } + if constexpr (order == 13) { + return {0x0p+0Q, 0x1.439a95b32a47eb5722e3fe0fb9bbp-5Q, -0x1.85e5f8ce20b701780e206438509dp-2Q, 0x1.959ab595a2ea47cca9401bb631dfp+0Q, -0x1.d591277dff53d8dcf592be17f8e1p+1Q, 0x1.43a6564933b3f0805a5abb1bb626p+2Q, -0x1.0a2c05cc597aaccc032e0cf740cp+2Q, 0x1.273950f6ffd17ee92b3278320e9fp+1Q, -0x1.050c8b9cb84b7c5048bc8a039239p+1Q, 0x1.600ea820111d062fdf2aa3ec8771p+1Q, -0x1.21f61a844a104f06b392ed4a3d9ep+1Q, 0x1.19f0e6ef31a0d26707b469b32ea9p+0Q, -0x1.8e2103144a726110a5663399778ep-1Q, 0x1.a07f2894f970eb1bd26c87860d76p-1Q, -0x1.ccce8527cee5c45450ee4b3e11ffp-2Q, 0x1.e56137866a8254327c31b42ae307p-4Q, -0x1.5df48c0c87cd72cb9ba718d2f9cp-4Q, 0x1.19d3f039c46cde096e5a0e03efccp-4Q, -0x1.9e6cd0f61f4caa9b0d4d30e7aa99p-9Q, -0x1.b966bdf45728a5a5bb305da1c562p-7Q, 0x1.8240771a20727b5953c65907a26p-9Q, -0x1.1b05a2f57f924748a24f59ba5cdcp-9Q, 0x1.7f8554959f4a532982e2e14a363ap-9Q, -0x1.23710df832eb1845bb5334680795p-10Q, 0x1.cc575afdf3f3ce7d0de6d2cce6aep-14Q, 0x1.1f238196ae22e33d868784888e07p-18Q, -0x1.3697e9bf43069ef0c328e5cc56bbp-27Q, -0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 15) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.d99d62p-12f, 0x1.0d2f98p-4f, 0x1.4a5392p-1f, 0x1.1fc50ep-1f, -0x1.d49776p-2f, 0x1.3575a8p-2f, -0x1.7e644ap-3f, 0x1.a17858p-4f, -0x1.7135a6p-5f, 0x1.d8cfdcp-7f, -0x1.57e158p-9f, -0x1.5f6332p-15f, 0x1.10a458p-13f, -0x1.592264p-16f, 0x1.899798p-18f, -0x1.4f8412p-18f, 0x1.74953ep-20f, -0x1.f7cb1ap-26f, -0x1.c92be2p-26f, -0x1.3b9a58p-35f, -0x1.6a58cep-35f, 0x1.4bf1ecp-37f, 0x1.697068p-44f, -0x1.513d7ap-49f, -0x1.b3943cp-57f, 0x1.54d33p-67f, -0x1.3f6e1ep-80f, -0x1.d0d882p-104f, 0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.af6738p-9f, 0x1.c7ad46p-3f, 0x1.9756ccp-1f, -0x1.519166p+0f, 0x1.6cc6e8p-2f, -0x1.8cf37ep-4f, 0x1.9a3fa2p-4f, -0x1.0a50bep-3f, 0x1.df3f5p-4f, -0x1.2d4b7ep-4f, 0x1.0681e4p-5f, -0x1.1b50d6p-7f, 0x1.49acd2p-11f, 0x1.16651ap-11f, -0x1.c26d2p-13f, 0x1.300212p-16f, 0x1.49fbecp-17f, -0x1.8781a4p-19f, 0x1.5ed0aep-24f, 0x1.da4a76p-25f, -0x1.7e23c8p-29f, -0x1.bd8f2cp-35f, 0x1.1c615p-37f, -0x1.c1b8b4p-44f, -0x1.95157p-52f, 0x1.d1f8dep-60f, -0x1.34635ep-74f, -0x1.c0c6d2p-97f, -0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.52aa16p-6f, 0x1.2f3864p-1f, -0x1.92da3ep-2f, -0x1.010e6cp+1f, 0x1.ba5e58p+1f, -0x1.6efa1ap+1f, 0x1.e2fp+0f, -0x1.e9e848p-1f, 0x1.3e7bdp-2f, -0x1.3f21e6p-6f, -0x1.00e092p-5f, 0x1.93252ep-8f, 0x1.0cb53cp-7f, -0x1.6ecc66p-8f, 0x1.1da3c8p-10f, 0x1.0f705cp-12f, -0x1.687f18p-13f, 0x1.03bf74p-15f, -0x1.0a570cp-20f, -0x1.b60c86p-22f, 0x1.2f36c8p-24f, -0x1.ab6b4ep-30f, -0x1.b77dbep-33f, 0x1.02e06ap-39f, 0x1.f900dcp-46f, -0x1.5cc6acp-54f, 0x1.79a9bep-67f, 0x1.12cb1cp-88f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.bde47ep-4f, 0x1.ff6e3ap-1f, -0x1.0edf78p+2f, 0x1.788ebp+2f, -0x1.0b9e58p+2f, 0x1.57d72ap+1f, -0x1.5aec5ap+1f, 0x1.66bep+1f, -0x1.257b74p+1f, 0x1.61e6a2p+0f, -0x1.1d6618p-1f, 0x1.7634aep-4f, 0x1.aae5ecp-5f, -0x1.66a2dep-5f, 0x1.9ee5c4p-7f, 0x1.cee452p-12f, -0x1.7d0e64p-10f, 0x1.95a9bcp-12f, -0x1.ac68b8p-17f, -0x1.4a3e54p-17f, 0x1.45a5b2p-20f, -0x1.a0585ep-28f, -0x1.4a4abp-28f, 0x1.818dc4p-34f, 0x1.bc8ec6p-41f, -0x1.1c50f4p-48f, 0x1.541ee6p-61f, 0x1.eef3c6p-82f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.da9efcp-2f, -0x1.0a9636p-2f, -0x1.6ead78p+2f, 0x1.1fb0b8p+4f, -0x1.a26b2p+4f, 0x1.5a3628p+4f, -0x1.c3b938p+2f, -0x1.0393f6p+3f, 0x1.ce0e34p+3f, -0x1.3371f4p+3f, 0x1.04744cp-2f, 0x1.5d5bbap+2f, -0x1.56903ap+2f, 0x1.4f3674p+1f, -0x1.16f1cp-1f, -0x1.0ca608p-3f, 0x1.fd1e64p-4f, -0x1.12756ap-5f, 0x1.031ce4p-9f, 0x1.dbc5a2p-11f, -0x1.6e5758p-13f, 0x1.338c12p-19f, 0x1.ec833cp-21f, -0x1.31ee1ep-26f, -0x1.068ccep-32f, 0x1.ab486ep-40f, -0x1.971ac6p-52f, -0x1.28365cp-71f, -0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.8a28cp+0f, -0x1.0b8eccp+3f, 0x1.301d18p+4f, -0x1.80a5fep+4f, 0x1.4a39e4p+4f, -0x1.114828p+4f, 0x1.18e244p+4f, -0x1.390866p+4f, 0x1.80446cp+4f, -0x1.0a407ap+5f, 0x1.52509ep+5f, -0x1.4b4686p+5f, 0x1.c80f14p+4f, -0x1.82ded4p+3f, 0x1.7610a2p+0f, 0x1.b0a89ap+0f, -0x1.2b516ep+0f, 0x1.48818ap-2f, -0x1.16dd92p-6f, -0x1.957d58p-7f, 0x1.613bdp-9f, -0x1.0adbcp-14f, -0x1.449056p-16f, 0x1.238bd6p-21f, 0x1.0b863cp-27f, -0x1.2dac52p-34f, 0x1.a8ab5ap-46f, 0x1.34fcf8p-64f, 0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.e156f6p+1f, -0x1.d9350cp+4f, 0x1.b03e3ap+6f, -0x1.f51dfap+7f, 0x1.b1d9eep+8f, -0x1.3c90b8p+9f, 0x1.a1026p+9f, -0x1.ee82dcp+9f, 0x1.fcf16ap+9f, -0x1.beee0ep+9f, 0x1.545f4ap+9f, -0x1.c39ca4p+8f, 0x1.d17e6ep+7f, -0x1.8d05e2p+5f, -0x1.a57ddap+5f, 0x1.065bfcp+6f, -0x1.1a783cp+5f, 0x1.2e9f2cp+3f, -0x1.3cad9ap-2f, -0x1.1b4b3ap-1f, 0x1.15a314p-3f, -0x1.5c66a6p-8f, -0x1.5db56p-10f, 0x1.c57be6p-15f, 0x1.c9738p-21f, -0x1.63f652p-27f, 0x1.769768p-38f, 0x1.108b38p-55f, 0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.d870dep+2f, -0x1.0c2b8cp+6f, 0x1.10bd38p+8f, -0x1.4441dap+9f, 0x1.eaed48p+9f, -0x1.dea056p+9f, 0x1.0ea6dep+9f, 0x1.3bb922p+5f, -0x1.7c03d4p+9f, 0x1.b77df6p+10f, -0x1.59dd46p+11f, 0x1.92ad5ep+11f, -0x1.7716eap+11f, 0x1.34cd94p+11f, -0x1.d21086p+10f, 0x1.27e204p+10f, -0x1.0ee014p+9f, 0x1.13ffcp+7f, 0x1.9021aap+1f, -0x1.cb9506p+3f, 0x1.f11cd6p+1f, -0x1.a3fefep-3f, -0x1.a953dap-5f, 0x1.9718bep-9f, 0x1.ad424ap-15f, -0x1.eb70cep-21f, 0x1.72006ap-31f, 0x1.0d3062p-47f, 0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.155158p+3f, -0x1.4fec3ap+6f, 0x1.70dec4p+8f, -0x1.e94cfep+9f, 0x1.bf0b1p+10f, -0x1.392918p+11f, 0x1.79ccf6p+11f, -0x1.ab6c9p+11f, 0x1.c47edap+11f, -0x1.af1006p+11f, 0x1.72a85ap+11f, -0x1.2846e6p+11f, 0x1.b3d87ep+10f, -0x1.1ae106p+10f, 0x1.41e16ep+9f, -0x1.46003p+8f, 0x1.0818e6p+7f, -0x1.8ef0b6p+4f, -0x1.6eb8ecp+3f, 0x1.3aba04p+3f, -0x1.588d6ep+1f, 0x1.5ca064p-3f, 0x1.72c884p-5f, -0x1.2b7b9ap-8f, -0x1.359ad6p-14f, 0x1.0cff08p-19f, -0x1.207536p-29f, -0x1.a3ad9ep-45f, -0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.174fb2p+3f, -0x1.5cf63cp+6f, 0x1.859702p+8f, -0x1.008e38p+10f, 0x1.c03c1cp+10f, -0x1.1e0d3p+11f, 0x1.33504ep+11f, -0x1.4498a4p+11f, 0x1.500c42p+11f, -0x1.2d6f92p+11f, 0x1.c5bd8cp+10f, -0x1.3b7208p+10f, 0x1.a4b182p+9f, -0x1.c03584p+8f, 0x1.1254d6p+7f, 0x1.be195p+2f, -0x1.6abf52p+5f, 0x1.bdfa94p+5f, -0x1.7a9c1p+5f, 0x1.86920ep+4f, -0x1.a9adfcp+2f, 0x1.133764p-1f, 0x1.191c64p-3f, -0x1.88d184p-6f, -0x1.aee4f4p-12f, 0x1.15e5eap-16f, -0x1.bc4492p-26f, -0x1.431c04p-40f, 0x0p+0f}; + } + if constexpr (order == 10) { + return {0x0p+0f, 0x1.57dd2p+2f, -0x1.b426bap+5f, 0x1.ef50bp+7f, -0x1.4da8e6p+9f, 0x1.2d889ap+10f, -0x1.9456ecp+10f, 0x1.ca1f76p+10f, -0x1.f2eaf2p+10f, 0x1.0a60e2p+11f, -0x1.07fe76p+11f, 0x1.e2b37ep+10f, -0x1.a28fdp+10f, 0x1.5596d2p+10f, -0x1.027612p+10f, 0x1.70f45ap+9f, -0x1.edf5a6p+8f, 0x1.27b1e2p+8f, -0x1.3be692p+7f, 0x1.3b71fp+6f, -0x1.11985ep+5f, 0x1.3b5a98p+3f, -0x1.c32c18p-1f, -0x1.5d8e8ap-2f, 0x1.3b1b46p-4f, 0x1.23706ep-10f, -0x1.9c26fcp-14f, 0x1.96293ap-23f, 0x1.27428ap-36f, -0x0p+0f}; + } + if constexpr (order == 11) { + return {0x0p+0f, 0x1.82ba18p+1f, -0x1.ee321ap+4f, 0x1.174e6p+7f, -0x1.6e81d6p+8f, 0x1.368de4p+9f, -0x1.710674p+9f, 0x1.661d22p+9f, -0x1.6833b8p+9f, 0x1.833c1cp+9f, -0x1.704d0cp+9f, 0x1.2a287cp+9f, -0x1.d79574p+8f, 0x1.7a6624p+8f, -0x1.0dddap+8f, 0x1.4f8242p+7f, -0x1.9b8d6ep+6f, 0x1.e6b9cp+5f, -0x1.d872a6p+4f, 0x1.82e4e6p+3f, -0x1.3c81bp+2f, 0x1.87117ep+0f, -0x1.f2d1dcp-6f, -0x1.327c0ep-3f, 0x1.13b8cap-5f, -0x1.094894p-13f, -0x1.78471ap-14f, 0x1.31d268p-23f, 0x1.bc3afp-36f, -0x0p+0f}; + } + if constexpr (order == 12) { + return {0x0p+0f, 0x1.229018p+0f, -0x1.74b098p+3f, 0x1.a3d6fep+5f, -0x1.0ee9fep+7f, 0x1.b7ec28p+7f, -0x1.dcbffep+7f, 0x1.8f9512p+7f, -0x1.7421b2p+7f, 0x1.a17e1ep+7f, -0x1.8b13bap+7f, 0x1.210062p+7f, -0x1.a9798ep+6f, 0x1.62f522p+6f, -0x1.f0d146p+5f, 0x1.0b054p+5f, -0x1.2e7f82p+4f, 0x1.776b1ap+3f, -0x1.390aacp+2f, 0x1.0e68eap+0f, -0x1.1d9e68p-2f, 0x1.1e142p-5f, 0x1.626282p-3f, -0x1.00510ep-3f, 0x1.dda066p-6f, -0x1.397e42p-10f, -0x1.5e278p-13f, 0x1.93d63ep-23f, 0x1.24c486p-34f, 0x0p+0f}; + } + if constexpr (order == 13) { + return {0x0p+0f, 0x1.2dba82p-3f, -0x1.83ba9p+0f, 0x1.bc6ce4p+2f, -0x1.2c97bep+4f, 0x1.0e0692p+5f, -0x1.5f4706p+5f, 0x1.6ea3fcp+5f, -0x1.5a777ep+5f, 0x1.424978p+5f, -0x1.3091p+5f, 0x1.23e442p+5f, -0x1.07fd36p+5f, 0x1.a8f488p+4f, -0x1.499324p+4f, 0x1.0a96d4p+4f, -0x1.8f60cep+3f, 0x1.003bccp+3f, -0x1.433efp+2f, 0x1.a65b7ep+1f, -0x1.d36032p+0f, 0x1.a4a1aep-1f, -0x1.88e9f6p-2f, 0x1.6764fap-3f, -0x1.91c36cp-5f, 0x1.07d03ep-8f, 0x1.362d3ep-11f, -0x1.92dbfep-20f, -0x1.22ff8p-30f, -0x0p+0f}; + } + if constexpr (order == 14) { + return {0x0p+0f, 0x1.8dd6e2p-6f, -0x1.ffb4dep-3f, 0x1.1f8df8p+0f, -0x1.6eae32p+1f, 0x1.200cfep+2f, -0x1.1f2876p+2f, 0x1.90990cp+1f, -0x1.3d166cp+1f, 0x1.74d60ap+1f, -0x1.680266p+1f, 0x1.e76ba8p+0f, -0x1.60830ap+0f, 0x1.48f2a8p+0f, -0x1.e7d09ep-1f, 0x1.1252eep-1f, -0x1.6e9dp-2f, 0x1.0a88fcp-2f, -0x1.16ea72p-3f, 0x1.018afap-4f, -0x1.2fa054p-5f, 0x1.2375eep-6f, -0x1.73b10cp-8f, 0x1.1decc8p-9f, -0x1.b8713ap-11f, 0x1.732712p-14f, 0x1.5deb76p-16f, -0x1.927126p-23f, -0x1.209992p-32f, 0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.d99d611c0465dp-12, 0x1.0d2f985427a1ep-4, 0x1.4a539266aac6ep-1, 0x1.1fc50d04f7f08p-1, -0x1.d497750272bfap-2, 0x1.3575a87d9c163p-2, -0x1.7e644ab118887p-3, 0x1.a1785765bb949p-4, -0x1.7135a6ada8b52p-5, 0x1.d8cfdcbb16189p-7, -0x1.57e157b5bcea8p-9, -0x1.5f633204e95ap-15, 0x1.10a4589d9f87dp-13, -0x1.592264d16e622p-16, 0x1.89979784d7185p-18, -0x1.4f841169a1badp-18, 0x1.74953d3967ccep-20, -0x1.f7cb1acefcf43p-26, -0x1.c92be21aef0cap-26, -0x1.3b9a57c4ce7e8p-35, -0x1.6a58cec0fa225p-35, 0x1.4bf1eb8cd4c9cp-37, 0x1.697067f1715a1p-44, -0x1.513d790bd243p-49, -0x1.b3943c02986a6p-57, 0x1.54d330be5783ep-67, -0x1.3f6e1e631364cp-80, -0x1.d0d882f8587b5p-104, 0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.af673717274afp-9, 0x1.c7ad45d086ea5p-3, 0x1.9756cb092ee07p-1, -0x1.51916657c1834p+0, 0x1.6cc6e8f062405p-2, -0x1.8cf37d6182ca1p-4, 0x1.9a3fa2f41d495p-4, -0x1.0a50be22f2b87p-3, 0x1.df3f4f6c19d45p-4, -0x1.2d4b7e715db6cp-4, 0x1.0681e4c20b9fdp-5, -0x1.1b50d689cbed9p-7, 0x1.49acd134a254cp-11, 0x1.16651955943e4p-11, -0x1.c26d1f2c70c87p-13, 0x1.3002118e762a1p-16, 0x1.49fbecfd7d9c7p-17, -0x1.8781a4a6a5f7dp-19, 0x1.5ed0ad164acd2p-24, 0x1.da4a7558674aep-25, -0x1.7e23c7237f3f9p-29, -0x1.bd8f2cef8c9fp-35, 0x1.1c61501fa1048p-37, -0x1.c1b8b33989e02p-44, -0x1.95156f39cb33ap-52, 0x1.d1f8ddb7d0199p-60, -0x1.34635de67ce8cp-74, -0x1.c0c6d283f741ep-97, -0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.52aa167437ed4p-6, 0x1.2f386450cd36p-1, -0x1.92da3e0f4795fp-2, -0x1.010e6c23362c3p+1, 0x1.ba5e5707337cfp+1, -0x1.6efa1a351e689p+1, 0x1.e2efff792ca6dp+0, -0x1.e9e84815ce29ap-1, 0x1.3e7bcfc83dd35p-2, -0x1.3f21e5e83db9bp-6, -0x1.00e091b8310d8p-5, 0x1.93252ea5d40eep-8, 0x1.0cb53bda124f5p-7, -0x1.6ecc6596fdeb9p-8, 0x1.1da3c88de4594p-10, 0x1.0f705c9109b89p-12, -0x1.687f176415b5ap-13, 0x1.03bf749271ea1p-15, -0x1.0a570c997b8f7p-20, -0x1.b60c856b75c7p-22, 0x1.2f36c8024d478p-24, -0x1.ab6b4d2a0c9ebp-30, -0x1.b77dbd4d624bbp-33, 0x1.02e06a0b52529p-39, 0x1.f900db818405cp-46, -0x1.5cc6aba4a367p-54, 0x1.79a9be1badafp-67, 0x1.12cb1c6610cf6p-88, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.bde47de89537fp-4, 0x1.ff6e39e05bc19p-1, -0x1.0edf7812c7e6fp+2, 0x1.788eafbfef57p+2, -0x1.0b9e58d049e2bp+2, 0x1.57d72a54d9b7ep+1, -0x1.5aec59993d64cp+1, 0x1.66be004fbc258p+1, -0x1.257b730e2148dp+1, 0x1.61e6a248fa766p+0, -0x1.1d66170848573p-1, 0x1.7634ae9385e7dp-4, 0x1.aae5eb36cf234p-5, -0x1.66a2dd81189a5p-5, 0x1.9ee5c38dff3c6p-7, 0x1.cee452b55c63p-12, -0x1.7d0e63753adf8p-10, 0x1.95a9bb14ccec1p-12, -0x1.ac68b8496deeap-17, -0x1.4a3e531dccd5ap-17, 0x1.45a5b2adacfeep-20, -0x1.a0585e72874e5p-28, -0x1.4a4aaf36fdaecp-28, 0x1.818dc3c36642cp-34, 0x1.bc8ec635290e4p-41, -0x1.1c50f4adb4d49p-48, 0x1.541ee5efeba28p-61, 0x1.eef3c669427bap-82, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.da9efb84cd102p-2, -0x1.0a963523c781p-2, -0x1.6ead78b2a7f87p+2, 0x1.1fb0b7ee7fe9bp+4, -0x1.a26b20f9bdefp+4, 0x1.5a362701692b6p+4, -0x1.c3b93743ed5e2p+2, -0x1.0393f54066e2bp+3, 0x1.ce0e335b9b5dp+3, -0x1.3371f4378fc26p+3, 0x1.04744c732a897p-2, 0x1.5d5bbaac2d3ddp+2, -0x1.56903abc9d373p+2, 0x1.4f367450bb029p+1, -0x1.16f1bf1e47dd8p-1, -0x1.0ca6089fc41eep-3, 0x1.fd1e6437298dfp-4, -0x1.127569c6d3d2p-5, 0x1.031ce43d6f2aap-9, 0x1.dbc5a12350174p-11, -0x1.6e57586c99db3p-13, 0x1.338c12c9a95b4p-19, 0x1.ec833bdc8d6abp-21, -0x1.31ee1e222a83p-26, -0x1.068cce25031dp-32, 0x1.ab486d191520ep-40, -0x1.971ac61147c4cp-52, -0x1.28365b5992262p-71, -0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.8a28bf1f4bafp+0, -0x1.0b8ecb513e671p+3, 0x1.301d17ac5e1c7p+4, -0x1.80a5fd5ebbea5p+4, 0x1.4a39e3e1048d6p+4, -0x1.1148278e9d9a1p+4, 0x1.18e244d79a033p+4, -0x1.3908669ba0779p+4, 0x1.80446c71adb15p+4, -0x1.0a40794798e41p+5, 0x1.52509dd04c4f7p+5, -0x1.4b468531c5b1ap+5, 0x1.c80f1430e334ap+4, -0x1.82ded3c89e7eap+3, 0x1.7610a167089f2p+0, 0x1.b0a89a8818c06p+0, -0x1.2b516da5d081p+0, 0x1.488189c0e6323p-2, -0x1.16dd91fce8d2fp-6, -0x1.957d5757f4d58p-7, 0x1.613bcf2c2fc6ap-9, -0x1.0adbc024da551p-14, -0x1.44905597a8908p-16, 0x1.238bd55115864p-21, 0x1.0b863bc593a1dp-27, -0x1.2dac52b5d35bcp-34, 0x1.a8ab5a61388b2p-46, 0x1.34fcf88bcfb4p-64, 0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.e156f58145abap+1, -0x1.d9350b2238c2cp+4, 0x1.b03e3957ecd6ap+6, -0x1.f51dfa789d879p+7, 0x1.b1d9ee3321d94p+8, -0x1.3c90b7e3ca1dcp+9, 0x1.a1025f9df5666p+9, -0x1.ee82dbab6ab1p+9, 0x1.fcf169933904cp+9, -0x1.beee0dc0c8ddbp+9, 0x1.545f49e00f496p+9, -0x1.c39ca355bd5d3p+8, 0x1.d17e6e268802dp+7, -0x1.8d05e2b81cf72p+5, -0x1.a57ddae4deceep+5, 0x1.065bfb9cfed1p+6, -0x1.1a783beefce88p+5, 0x1.2e9f2c1581a69p+3, -0x1.3cad9a2427052p-2, -0x1.1b4b3a7aa70e8p-1, 0x1.15a31469a9cep-3, -0x1.5c66a63c93474p-8, -0x1.5db560cc8a8d9p-10, 0x1.c57be52a95f9ap-15, 0x1.c9738067c590ap-21, -0x1.63f652c472259p-27, 0x1.769767db4423bp-38, 0x1.108b386e39e95p-55, 0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.d870debcc05c4p+2, -0x1.0c2b8b0b28194p+6, 0x1.10bd374d63551p+8, -0x1.4441daef321d4p+9, 0x1.eaed48222cc9cp+9, -0x1.dea055aad4ecbp+9, 0x1.0ea6de87556eap+9, 0x1.3bb921604519dp+5, -0x1.7c03d4dcf5514p+9, 0x1.b77df6c77230cp+10, -0x1.59dd45c186fb1p+11, 0x1.92ad5ee85458dp+11, -0x1.7716e9b298972p+11, 0x1.34cd942cd473ap+11, -0x1.d2108687fa36fp+10, 0x1.27e2041912518p+10, -0x1.0ee0131c1b04fp+9, 0x1.13ffc016f56cap+7, 0x1.9021a9dd4e12bp+1, -0x1.cb9505a70965bp+3, 0x1.f11cd618c3359p+1, -0x1.a3fefe1a942d4p-3, -0x1.a953da883746ep-5, 0x1.9718bee3af729p-9, 0x1.ad4249f39958ep-15, -0x1.eb70cd1aa4051p-21, 0x1.72006a07a097fp-31, 0x1.0d30627e6a2adp-47, 0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.155158ac6ea98p+3, -0x1.4fec3a6a32c1fp+6, 0x1.70dec41eaf97dp+8, -0x1.e94cfecb1efa1p+9, 0x1.bf0b100d34d04p+10, -0x1.39291803fcf48p+11, 0x1.79ccf50afb46ep+11, -0x1.ab6c90991611bp+11, 0x1.c47ed9a17b9cdp+11, -0x1.af1005783c9c1p+11, 0x1.72a859cabb472p+11, -0x1.2846e6b9b14f5p+11, 0x1.b3d87dff6a955p+10, -0x1.1ae10527ae494p+10, 0x1.41e16e9c43533p+9, -0x1.460030c5bf207p+8, 0x1.0818e6dd9acdcp+7, -0x1.8ef0b66c7662cp+4, -0x1.6eb8ec2d2fcfp+3, 0x1.3aba0303f01c4p+3, -0x1.588d6d239648ep+1, 0x1.5ca063a2897a3p-3, 0x1.72c884e06d39ap-5, -0x1.2b7b99da7239bp-8, -0x1.359ad5ec914c6p-14, 0x1.0cff089d4d593p-19, -0x1.207535755ab2fp-29, -0x1.a3ad9d559345cp-45, -0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.174fb1d673064p+3, -0x1.5cf63b4072a08p+6, 0x1.859702b93092p+8, -0x1.008e38c64d405p+10, 0x1.c03c1b8df613fp+10, -0x1.1e0d30516cd0dp+11, 0x1.33504e2e62ab9p+11, -0x1.4498a39b45dd3p+11, 0x1.500c422b7e4d6p+11, -0x1.2d6f916f2f064p+11, 0x1.c5bd8b8beccdbp+10, -0x1.3b7208dc18507p+10, 0x1.a4b1819107c72p+9, -0x1.c03583e492981p+8, 0x1.1254d5dd1a3c8p+7, 0x1.be19509979c25p+2, -0x1.6abf524121ea4p+5, 0x1.bdfa9494723d3p+5, -0x1.7a9c102bdb495p+5, 0x1.86920d3d07ed2p+4, -0x1.a9adfb25c4f27p+2, 0x1.1337641b89dbcp-1, 0x1.191c64622c1b1p-3, -0x1.88d18423866c2p-6, -0x1.aee4f466bb969p-12, 0x1.15e5e9747fe1cp-16, -0x1.bc4491eee0fddp-26, -0x1.431c03e754cd9p-40, 0x0p+0}; + } + if constexpr (order == 10) { + return {0x0p+0, 0x1.57dd202e5e84bp+2, -0x1.b426b94987909p+5, 0x1.ef50af36bc94ap+7, -0x1.4da8e644667e7p+9, 0x1.2d889ab089911p+10, -0x1.9456ec86efc74p+10, 0x1.ca1f75d29c178p+10, -0x1.f2eaf24b48be9p+10, 0x1.0a60e2fdcea78p+11, -0x1.07fe75c2d8539p+11, 0x1.e2b37ed5f4462p+10, -0x1.a28fcff6e684bp+10, 0x1.5596d2be7c1f8p+10, -0x1.02761175eccb5p+10, 0x1.70f45a3e9b6c8p+9, -0x1.edf5a5b354e13p+8, 0x1.27b1e13298bb4p+8, -0x1.3be69243ef2c3p+7, 0x1.3b71f0120f2a4p+6, -0x1.11985d9404f45p+5, 0x1.3b5a9762f053bp+3, -0x1.c32c18767db72p-1, -0x1.5d8e89b8ba2f4p-2, 0x1.3b1b46a97c2fbp-4, 0x1.23706d03f6f74p-10, -0x1.9c26fc84f3ff6p-14, 0x1.962939a138e2bp-23, 0x1.27428a5934f9ep-36, -0x0p+0}; + } + if constexpr (order == 11) { + return {0x0p+0, 0x1.82ba18a281555p+1, -0x1.ee321ac782e81p+4, 0x1.174e5f65a44a6p+7, -0x1.6e81d57c4c979p+8, 0x1.368de3361fae5p+9, -0x1.7106731d7c871p+9, 0x1.661d220cefa1p+9, -0x1.6833b778e773bp+9, 0x1.833c1b7a24cc4p+9, -0x1.704d0cf5b403fp+9, 0x1.2a287b4a8744cp+9, -0x1.d795731af32d5p+8, 0x1.7a6623bbe9af8p+8, -0x1.0ddd9fa1ad022p+8, 0x1.4f824182bb441p+7, -0x1.9b8d6efd833c4p+6, 0x1.e6b9bfc912a61p+5, -0x1.d872a65489bc7p+4, 0x1.82e4e50171641p+3, -0x1.3c81b080d7c59p+2, 0x1.87117e04fd822p+0, -0x1.f2d1dbd395099p-6, -0x1.327c0d249414p-3, 0x1.13b8c9585145fp-5, -0x1.094893076dab2p-13, -0x1.784719262e6dap-14, 0x1.31d26875ab45fp-23, 0x1.bc3aef2e9698bp-36, -0x0p+0}; + } + if constexpr (order == 12) { + return {0x0p+0, 0x1.229017de89889p+0, -0x1.74b098d7b2942p+3, 0x1.a3d6fe58853c2p+5, -0x1.0ee9fe2c639a7p+7, 0x1.b7ec28edec454p+7, -0x1.dcbffedb3a508p+7, 0x1.8f9512e48d1c4p+7, -0x1.7421b1a880459p+7, 0x1.a17e1d21e73d2p+7, -0x1.8b13badbca1d9p+7, 0x1.210062e92f489p+7, -0x1.a9798d44da6c2p+6, 0x1.62f521d1972a8p+6, -0x1.f0d14679f69cp+5, 0x1.0b0540b21cf09p+5, -0x1.2e7f81d72375p+4, 0x1.776b19bc1de7bp+3, -0x1.390aaca35a349p+2, 0x1.0e68e94457017p+0, -0x1.1d9e671612a46p-2, 0x1.1e141f6f8381bp-5, 0x1.626281f06a565p-3, -0x1.00510e27c6afap-3, 0x1.dda065aa933f4p-6, -0x1.397e42b4cc1c2p-10, -0x1.5e2780fee3a22p-13, 0x1.93d63eaebefb8p-23, 0x1.24c485651202dp-34, 0x0p+0}; + } + if constexpr (order == 13) { + return {0x0p+0, 0x1.2dba81606cdf4p-3, -0x1.83ba9062dc10bp+0, 0x1.bc6ce42e9d3a2p+2, -0x1.2c97bd817af95p+4, 0x1.0e06914d93155p+5, -0x1.5f4706680d4aep+5, 0x1.6ea3fbf492341p+5, -0x1.5a777ed4931f2p+5, 0x1.424978021982dp+5, -0x1.3090ff3d7fed6p+5, 0x1.23e4419ddb641p+5, -0x1.07fd356f7673cp+5, 0x1.a8f488a3b6e4bp+4, -0x1.49932384ed8b5p+4, 0x1.0a96d421140ffp+4, -0x1.8f60cd9c05603p+3, 0x1.003bcbf26a5dbp+3, -0x1.433ef046d9ed1p+2, 0x1.a65b7dff93521p+1, -0x1.d36032adf2dbdp+0, 0x1.a4a1ad470bd0ep-1, -0x1.88e9f63513cep-2, 0x1.6764f965c9511p-3, -0x1.91c36b23af1d8p-5, 0x1.07d03d7a1adc2p-8, 0x1.362d3e37ff6cdp-11, -0x1.92dbfdbfa8198p-20, -0x1.22ff804507dbep-30, -0x0p+0}; + } + if constexpr (order == 14) { + return {0x0p+0, 0x1.8dd6e1684e11dp-6, -0x1.ffb4de00653d3p-3, 0x1.1f8df89dea984p+0, -0x1.6eae32a3a7907p+1, 0x1.200cfdab0a888p+2, -0x1.1f287662480abp+2, 0x1.90990b7ee9dd2p+1, -0x1.3d166b62b6086p+1, 0x1.74d60ae1a8cebp+1, -0x1.68026579c2214p+1, 0x1.e76ba8ae988d5p+0, -0x1.60830949d4c83p+0, 0x1.48f2a8ad7050dp+0, -0x1.e7d09d1d5c76ep-1, 0x1.1252ee85de925p-1, -0x1.6e9d007e3ce51p-2, 0x1.0a88fbec92db2p-2, -0x1.16ea71f276b01p-3, 0x1.018afa9348368p-4, -0x1.2fa053de7510ep-5, 0x1.2375ee2696f87p-6, -0x1.73b10c938e4b6p-8, 0x1.1decc8370b235p-9, -0x1.b8713a4dd74a9p-11, 0x1.732711f764c01p-14, 0x1.5deb76c540b6cp-16, -0x1.9271259f10414p-23, -0x1.2099915b93354p-32, 0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xe.cceb08e0232ebfep-15L, 0x8.697cc2a13d0ee1p-7L, 0xa.529c93355636f38p-4L, 0x8.fe286827bf83d25p-4L, -0xe.a4bba81395fd148p-5L, 0x9.abad43ece0b19efp-5L, -0xb.f3225588c443427p-6L, 0xd.0bc2bb2ddca46a9p-7L, -0xb.89ad356d45a90abp-8L, 0xe.c67ee5d8b0c44cdp-10L, -0xa.bf0abdade753fd6p-12L, -0xa.fb1990274acfe19p-18L, 0x8.8522c4ecfc3eb6ep-16L, -0xa.c913268b7310da9p-19L, 0xc.4cbcbc26b8c299cp-21L, -0xa.7c208b4d0dd68c5p-21L, 0xb.a4a9e9cb3e66c66p-23L, -0xf.be58d677e7a1ad2p-29L, -0xe.495f10d77864d6p-29L, -0x9.dcd2be2673f3d47p-38L, -0xb.52c67607d112652p-38L, 0xa.5f8f5c66a64e114p-40L, 0xb.4b833f8b8ad0a0ap-47L, -0xa.89ebc85e9217eeap-52L, -0xd.9ca1e014c35331bp-60L, 0xa.a69985f2bc1edb9p-70L, -0x9.fb70f3189b26326p-83L, -0xe.86c417c2c3da4c7p-107L, 0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xd.7b39b8b93a579b8p-12L, 0xe.3d6a2e84375262fp-6L, 0xc.bab6584977037b5p-4L, -0xa.8c8b32be0c1a23fp-3L, 0xb.663747831202959p-5L, -0xc.679beb0c165058cp-7L, 0xc.d1fd17a0ea4a983p-7L, -0x8.5285f11795c36ecp-6L, 0xe.f9fa7b60cea28cap-7L, -0x9.6a5bf38aedb5fc2p-7L, 0x8.340f26105cfe721p-8L, -0x8.da86b44e5f6c6f9p-10L, 0xa.4d6689a512a5d01p-14L, 0x8.b328caaca1f1c8cp-14L, -0xe.1368f9638643783p-16L, 0x9.80108c73b15088ep-19L, 0xa.4fdf67ebece365dp-20L, -0xc.3c0d25352fbe46dp-22L, 0xa.f68568b2566925p-27L, 0xe.d253aac33a56ee8p-28L, -0xb.f11e391bf9fc9acp-32L, -0xd.ec79677c64f81e9p-38L, 0x8.e30a80fd082403ap-40L, -0xe.0dc599cc4f0122fp-47L, -0xc.a8ab79ce599d1e7p-55L, 0xe.8fc6edbe80cc4a8p-63L, -0x9.a31aef33e745dcdp-77L, -0xe.0636941fba0f2ecp-100L, -0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0xa.9550b3a1bf69d4cp-9L, 0x9.79c3228669b01a3p-4L, -0xc.96d1f07a3cafa97p-5L, -0x8.08736119b1617adp-2L, 0xd.d2f2b8399be77e4p-2L, -0xb.77d0d1a8f344a12p-2L, 0xf.177ffbc96536692p-3L, -0xf.4f4240ae714d2acp-4L, 0x9.f3de7e41ee9a787p-5L, -0x9.f90f2f41edcdbb5p-9L, -0x8.07048dc1886be21p-8L, 0xc.9929752ea076dc3p-11L, 0x8.65a9ded0927a627p-10L, -0xb.76632cb7ef5cbbcp-11L, 0x8.ed1e446f22c9d07p-13L, 0x8.7b82e4884dc45e4p-15L, -0xb.43f8bb20adad0a1p-16L, 0x8.1dfba4938f506e5p-18L, -0x8.52b864cbdc7b5dap-23L, -0xd.b0642b5bae37c7cp-25L, 0x9.79b640126a3c29ep-27L, -0xd.5b5a695064f587ep-33L, -0xd.bbedea6b125d8c1p-36L, 0x8.1703505a92944ccp-42L, 0xf.c806dc0c202de26p-49L, -0xa.e6355d251b37dfep-57L, 0xb.cd4df0dd6d782f3p-70L, 0x8.9658e330867ad2ep-91L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xd.ef23ef44a9bf7e6p-7L, 0xf.fb71cf02de0cb05p-4L, -0x8.76fbc0963f37be8p-1L, 0xb.c4757dff7ab7e6ep-1L, -0x8.5cf2c6824f158e6p-1L, 0xa.beb952a6cdbec82p-2L, -0xa.d762ccc9eb2601dp-2L, 0xb.35f0027de12c188p-2L, -0x9.2bdb98710a46a7ap-2L, 0xb.0f351247d3b2edap-3L, -0x8.eb30b84242b9b67p-4L, 0xb.b1a5749c2f3e942p-7L, 0xd.572f59b67919cdep-8L, -0xb.3516ec08c4d2b92p-8L, 0xc.f72e1c6ff9e2d6dp-10L, 0xe.772295aae3180b3p-15L, -0xb.e8731ba9d6fc085p-13L, 0xc.ad4dd8a66760405p-15L, -0xd.6345c24b6f75385p-20L, -0xa.51f298ee66ad3e4p-20L, 0xa.2d2d956d67f7238p-23L, -0xd.02c2f3943a728d1p-31L, -0xa.525579b7ed76162p-31L, 0xc.0c6e1e1b32163bep-37L, 0xd.e47631a948722aep-44L, -0x8.e287a56da6a461dp-51L, 0xa.a0f72f7f5d13f61p-64L, 0xf.779e334a13dd19fp-85L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0xe.d4f7dc266880dc5p-5L, -0x8.54b1a91e3c07cabp-5L, -0xb.756bc5953fc385dp-1L, 0x8.fd85bf73ff4da1p+1L, -0xd.135907cdef77f86p+1L, 0xa.d1b1380b495aeaap+1L, -0xe.1dc9ba1f6af0fa5p-1L, -0x8.1c9faa033715437p+0L, 0xe.70719adcdae7ec4p+0L, -0x9.9b8fa1bc7e12e6ep+0L, 0x8.23a26399544b84bp-5L, 0xa.eaddd56169ee9cdp-1L, -0xa.b481d5e4e9b9684p-1L, 0xa.79b3a285d814a56p-2L, -0x8.b78df8f23eebd9ap-4L, -0x8.653044fe20f733p-6L, 0xf.e8f321b94c6f489p-7L, -0x8.93ab4e369e900fp-8L, 0x8.18e721eb7954d94p-12L, 0xe.de2d091a80b9ee2p-14L, -0xb.72bac364ced9545p-16L, 0x9.9c60964d4ada3f3p-22L, 0xf.6419dee46b558e8p-24L, -0x9.8f70f1115417f37p-29L, -0x8.3466712818e830ep-35L, 0xd.5a4368c8a906c55p-43L, -0xc.b8d6308a3e25ebp-55L, -0x9.41b2dacc9130e5dp-74L, -0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xc.5145f8fa5d7812bp-3L, -0x8.5c765a89f338723p+0L, 0x9.80e8bd62f0e36d7p+1L, -0xc.052feaf5df5265fp+1L, 0xa.51cf1f08246b12ap+1L, -0x8.8a413c74ecd0982p+1L, 0x8.c71226bcd019464p+1L, -0x9.c84334dd03bcb23p+1L, 0xc.0223638d6d8a444p+1L, -0x8.5203ca3cc7208f6p+2L, 0xa.9284ee82627b576p+2L, -0xa.5a34298e2d8cfacp+2L, 0xe.4078a18719a503cp+1L, -0xc.16f69e44f3f4fd2p+0L, 0xb.b0850b3844f8cadp-3L, 0xd.8544d440c6033bfp-3L, -0x9.5a8b6d2e8407dd6p-3L, 0xa.440c4e0731919f2p-5L, -0x8.b6ec8fe746979d1p-9L, -0xc.abeababfa6ac0f1p-10L, 0xb.09de79617e3529fp-12L, -0x8.56de0126d2a8a97p-17L, -0xa.2482acbd44843d2p-19L, 0x9.1c5eaa88ac31dcbp-24L, 0x8.5c31de2c9d0ea8bp-30L, -0x9.6d6295ae9addc71p-37L, 0xd.455ad309c458ed8p-49L, 0x9.a7e7c45e7d9feeap-67L, 0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xf.0ab7ac0a2d5d3e8p-2L, -0xe.c9a85911c615c82p+1L, 0xd.81f1cabf66b5001p+3L, -0xf.a8efd3c4ec3c419p+4L, 0xd.8ecf71990eca11bp+5L, -0x9.e485bf1e50edc17p+6L, 0xd.0812fcefab32f7bp+6L, -0xf.7416dd5b55881cap+6L, 0xf.e78b4c99c8261c4p+6L, -0xd.f7706e0646ed8ddp+6L, 0xa.a2fa4f007a4af9bp+6L, -0xe.1ce51aadeae94b8p+5L, 0xe.8bf371344016517p+4L, -0xc.682f15c0e7b935cp+2L, -0xd.2beed726f676c5ap+2L, 0x8.32dfdce7f6881c4p+3L, -0x8.d3c1df77e743d81p+2L, 0x9.74f960ac0d34b75p+0L, -0x9.e56cd1213828f04p-5L, -0x8.da59d3d53874134p-4L, 0x8.ad18a34d4e700e2p-6L, -0xa.e33531e49a3a34ep-11L, -0xa.edab0664546ca1p-13L, 0xe.2bdf2954afcd1ep-18L, 0xe.4b9c033e2c84ec9p-24L, -0xb.1fb29623912c4c5p-30L, 0xb.b4bb3eda211db22p-41L, 0x8.8459c371cf4ab4bp-58L, 0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0xe.c386f5e602e22c6p-1L, -0x8.615c585940c9ee7p+3L, 0x8.85e9ba6b1aa85ccp+5L, -0xa.220ed77990ea00bp+6L, 0xf.576a4111664dc93p+6L, -0xe.f502ad56a76577ep+6L, 0x8.7536f43aab75351p+6L, 0x9.ddc90b0228ce8d7p+2L, -0xb.e01ea6e7aa8a396p+6L, 0xd.bbefb63b9185cdp+7L, -0xa.ceea2e0c37d88e3p+8L, 0xc.956af742a2c67bbp+8L, -0xb.b8b74d94c4b8e53p+8L, 0x9.a66ca166a39d2d4p+8L, -0xe.9084343fd1b7644p+7L, 0x9.3f1020c8928bd55p+7L, -0x8.770098e0d827732p+6L, 0x8.9ffe00b7ab651d2p+4L, 0xc.810d4eea709578cp-2L, -0xe.5ca82d384b2dbfdp+0L, 0xf.88e6b0c619ac534p-2L, -0xd.1ff7f0d4a16a0e5p-6L, -0xd.4a9ed441ba370f6p-8L, 0xc.b8c5f71d7b945cfp-12L, 0xd.6a124f9ccac6c82p-18L, -0xf.5b8668d520288fbp-24L, 0xb.9003503d04bfb0cp-34L, 0x8.698313f351569a4p-50L, 0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0x8.aa8ac563754c257p+0L, -0xa.7f61d351960f794p+3L, 0xb.86f620f57cbe932p+5L, -0xf.4a67f658f7d0a3cp+6L, 0xd.f8588069a68203p+7L, -0x9.c948c01fe7a3daep+8L, 0xb.ce67a857da36deap+8L, -0xd.5b6484c8b08d94p+8L, 0xe.23f6cd0bdce6402p+8L, -0xd.78802bc1e4e0454p+8L, 0xb.9542ce55da38fbfp+8L, -0x9.423735cd8a7a408p+8L, 0xd.9ec3effb54aa43bp+7L, -0x8.d708293d724a1cp+7L, 0xa.0f0b74e21a99604p+6L, -0xa.3001862df903727p+5L, 0x8.40c736ecd66e3b7p+4L, -0xc.7785b363b31632ap+1L, -0xb.75c761697e78222p+0L, 0x9.d5d0181f80e2122p+0L, -0xa.c46b691cb246e7cp-2L, 0xa.e5031d144bd1a3cp-6L, 0xb.9644270369ccd47p-8L, -0x9.5bdcced391cd468p-11L, -0x9.acd6af648a62d24p-17L, 0x8.67f844ea6ac9781p-22L, -0x9.03a9abaad597738p-32L, -0xd.1d6ceaac9a2dc82p-48L, -0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0x8.ba7d8eb39831c18p+0L, -0xa.e7b1da03950427fp+3L, 0xc.2cb815c9848fe3fp+5L, -0x8.0471c6326a024f5p+7L, 0xe.01e0dc6fb09f8cp+7L, -0x8.f069828b6686adbp+8L, 0x9.9a827173155c815p+8L, -0xa.24c51cda2ee968bp+8L, 0xa.8062115bf26b28ap+8L, -0x9.6b7c8b797831eb6p+8L, 0xe.2dec5c5f666d9f8p+7L, -0x9.db9046e0c283a87p+7L, 0xd.258c0c883e39073p+6L, -0xe.01ac1f2494c092fp+5L, 0x8.92a6aee8d1e432cp+4L, 0xd.f0ca84cbce12938p-1L, -0xb.55fa92090f522ecp+2L, 0xd.efd4a4a391e9b21p+2L, -0xb.d4e0815eda4a88ap+2L, 0xc.349069e83f691d5p+1L, -0xd.4d6fd92e2793a35p-1L, 0x8.99bb20dc4eddf8ap-4L, 0x8.c8e3231160d8992p-6L, -0xc.468c211c336121fp-9L, -0xd.7727a335dcb4b2ep-15L, 0x8.af2f4ba3ff0ddeep-19L, -0xd.e2248f7707ee606p-29L, -0xa.18e01f3aa66c51bp-43L, 0x0p+0L}; + } + if constexpr (order == 10) { + return {0x0p+0L, 0xa.bee90172f4255c3p-1L, -0xd.a135ca4c3c846a5p+2L, 0xf.7a8579b5e4a4f6ap+4L, -0xa.6d47322333f3562p+6L, 0x9.6c44d5844c887bdp+7L, -0xc.a2b764377e3a1ebp+7L, 0xe.50fbae94e0bc253p+7L, -0xf.9757925a45f487cp+7L, 0x8.530717ee753bcd5p+8L, -0x8.3ff3ae16c29c979p+8L, 0xf.159bf6afa230cc6p+7L, -0xd.147e7fb73425ae6p+7L, 0xa.acb695f3e0fc1c3p+7L, -0x8.13b08baf665a54p+7L, 0xb.87a2d1f4db643efp+6L, -0xf.6fad2d9aa709453p+5L, 0x9.3d8f0994c5d9f7bp+5L, -0x9.df34921f79618f8p+4L, 0x9.db8f809079523d6p+3L, -0x8.8cc2eca027a29bcp+2L, 0x9.dad4bb17829d702p+0L, -0xe.1960c3b3edb91b1p-4L, -0xa.ec744dc5d17a352p-5L, 0x9.d8da354be17d4f6p-7L, 0x9.1b83681fb7ba338p-13L, -0xc.e137e4279ffaf08p-17L, 0xc.b149cd09c7159bbp-26L, 0x9.3a1452c9a7cedecp-39L, -0x0p+0L}; + } + if constexpr (order == 11) { + return {0x0p+0L, 0xc.15d0c5140aaa4eep-2L, -0xf.7190d63c174081fp+1L, 0x8.ba72fb2d2252c3fp+4L, -0xb.740eabe264bca0cp+5L, 0x9.b46f19b0fd72575p+6L, -0xb.883398ebe4385ep+6L, 0xb.30e910677d07ffp+6L, -0xb.419dbbc73b9d5a1p+6L, 0xc.19e0dbd12662221p+6L, -0xb.826867ada01fb9cp+6L, 0x9.5143da543a25f3ap+6L, -0xe.bcab98d7996a714p+5L, 0xb.d3311ddf4d7bdfbp+5L, -0x8.6eecfd0d6810f0bp+5L, 0xa.7c120c15da204bcp+4L, -0xc.dc6b77ec19e1f99p+3L, 0xf.35cdfe48953061cp+2L, -0xe.c39532a44de361dp+1L, 0xc.1727280b8b20591p+0L, -0x9.e40d8406be2c4fap-1L, 0xc.388bf027ec112cbp-3L, -0xf.968ede9ca84c64dp-9L, -0x9.93e06924a09fd14p-6L, 0x8.9dc64ac28a2fbc2p-8L, -0x8.4a44983b6d59171p-16L, -0xb.c238c931736ccdbp-17L, 0x9.8e9343ad5a2f5d8p-26L, 0xd.e1d77974b4c54b1p-39L, -0x0p+0L}; + } + if constexpr (order == 12) { + return {0x0p+0L, 0x9.1480bef44c4469ep-3L, -0xb.a584c6bd94a1187p+0L, 0xd.1eb7f2c429e0f2ep+2L, -0x8.774ff1631cd3a64p+4L, 0xd.bf61476f622a169p+4L, -0xe.e5fff6d9d283fd3p+4L, 0xc.7ca8972468e2375p+4L, -0xb.a10d8d44022caeap+4L, 0xd.0bf0e90f39e8d94p+4L, -0xc.589dd6de50ec435p+4L, 0x9.080317497a44b68p+4L, -0xd.4bcc6a26d36101bp+3L, 0xb.17a90e8cb9542f6p+3L, -0xf.868a33cfb4e032cp+2L, 0x8.582a0590e784928p+2L, -0x9.73fc0eb91ba83cbp+1L, 0xb.bb58cde0ef3d615p+0L, -0x9.c855651ad1a4682p-1L, 0x8.73474a22b80bb4fp-3L, -0x8.ecf338b09522ep-5L, 0x8.f0a0fb7c1c0d8ddp-8L, 0xb.13140f8352b2905p-6L, -0x8.0288713e357cfe6p-6L, 0xe.ed032d5499f9d13p-9L, -0x9.cbf215a660e12a2p-13L, -0xa.f13c07f71d1127bp-16L, 0xc.9eb1f575f7dbcbbp-26L, 0x9.26242b289016945p-37L, 0x0p+0L}; + } + if constexpr (order == 13) { + return {0x0p+0L, 0x9.6dd40b0366fa267p-6L, -0xc.1dd48316e0854aap-3L, 0xd.e3672174e9d1088p-1L, -0x9.64bdec0bd7ca5b2p+1L, 0x8.70348a6c98aa9bbp+2L, -0xa.fa3833406a56d39p+2L, 0xb.751fdfa491a058dp+2L, -0xa.d3bbf6a498f90bp+2L, 0xa.124bc010cc1696ap+2L, -0x9.8487f9ebff6b313p+2L, 0x9.1f220ceedb2076ep+2L, -0x8.3fe9ab7bb39dc96p+2L, 0xd.47a4451db725977p+1L, -0xa.4c991c276c5a664p+1L, 0x8.54b6a108a07f661p+1L, -0xc.7b066ce02b0141p+0L, 0x8.01de5f9352ed819p+0L, -0xa.19f78236cf689c9p-1L, 0xd.32dbeffc9a904b7p-2L, -0xe.9b01956f96deb78p-3L, 0xd.250d6a385e86ee4p-4L, -0xc.474fb1a89e70305p-5L, 0xb.3b27cb2e4a88b76p-6L, -0xc.8e1b591d78ebf4ap-8L, 0x8.3e81ebd0d6e0c17p-11L, 0x9.b169f1bffb66918p-14L, -0xc.96dfedfd40cbd7ep-23L, -0x9.17fc02283edf3c4p-33L, -0x0p+0L}; + } + if constexpr (order == 14) { + return {0x0p+0L, 0xc.6eb70b42708eae9p-9L, -0xf.fda6f00329e9b71p-6L, 0x8.fc6fc4ef54c1db5p-3L, -0xb.7571951d3c8341p-2L, 0x9.0067ed5854443d7p-1L, -0x8.f943b3124055b9cp-1L, 0xc.84c85bf74ee8fcap-2L, -0x9.e8b35b15b042f15p-2L, 0xb.a6b0570d4675539p-2L, -0xb.40132bce1109dcp-2L, 0xf.3b5d4574c46a8f3p-3L, -0xb.04184a4ea6416d5p-3L, 0xa.4795456b82864acp-3L, -0xf.3e84e8eae3b6c57p-4L, 0x8.9297742ef492803p-4L, -0xb.74e803f1e728564p-5L, 0x8.5447df6496d92bp-5L, -0x8.b7538f93b58072dp-6L, 0x8.0c57d49a41b3dccp-7L, -0x9.7d029ef3a886eafp-8L, 0x9.1baf7134b7c3668p-9L, -0xb.9d88649c725b305p-11L, 0x8.ef6641b8591aa6cp-12L, -0xd.c389d26eba54b8ep-14L, 0xb.99388fbb2600ba3p-17L, 0xa.ef5bb62a05b60a1p-19L, -0xc.93892cf88209c7cp-26L, -0x9.04cc8adc99aa115p-35L, 0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.d99d611c0465d7fca8709213621p-12Q, 0x1.0d2f985427a1dc1f62afa99d998cp-4Q, 0x1.4a539266aac6de6ff0ee136fe6bp-1Q, 0x1.1fc50d04f7f07a49e55f06b78357p-1Q, -0x1.d497750272bfa28f3f1990b740d3p-2Q, 0x1.3575a87d9c1633de9f0ee95125b3p-2Q, -0x1.7e644ab11888684db8a7b8d90491p-3Q, 0x1.a1785765bb948d52e0838b0df1ap-4Q, -0x1.7135a6ada8b52155f89869cf22d5p-5Q, 0x1.d8cfdcbb1618899a1617de65e07ep-7Q, -0x1.57e157b5bcea7fac037e4b9b62bp-9Q, -0x1.5f633204e959fc32c151ba98708bp-15Q, 0x1.10a4589d9f87d6dc51e36837ed03p-13Q, -0x1.592264d16e621b5275bdd9d12d4dp-16Q, 0x1.89979784d7185338d2badb26cadp-18Q, -0x1.4f841169a1bad189406e2832bc2dp-18Q, 0x1.74953d3967ccd8cc322dbf25294ep-20Q, -0x1.f7cb1acefcf435a3d287cb8094aap-26Q, -0x1.c92be21aef0c9ac0fb550ddd5f85p-26Q, -0x1.3b9a57c4ce7e7a8e7b0e1df18a41p-35Q, -0x1.6a58cec0fa224ca49741d50416e8p-35Q, 0x1.4bf1eb8cd4c9c2273508a8b73f42p-37Q, 0x1.697067f1715a141417bb7553b3a4p-44Q, -0x1.513d790bd242fdd412e02eaf3fb6p-49Q, -0x1.b3943c02986a6636aaf05d95d85p-57Q, 0x1.54d330be5783db7123cd1333ac81p-67Q, -0x1.3f6e1e631364c64c65f6b5a7fe31p-80Q, -0x1.d0d882f8587b498d8efb759e0601p-104Q, 0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.af673717274af370272903c200ap-9Q, 0x1.c7ad45d086ea4c5ed9ed7e340d9bp-3Q, 0x1.9756cb092ee06f6ac1eb577b9667p-1Q, -0x1.51916657c183447d0774789d62f8p+0Q, 0x1.6cc6e8f0624052b2c0fdcc8950a9p-2Q, -0x1.8cf37d6182ca0b170d0a042e41d9p-4Q, 0x1.9a3fa2f41d4953051b0c6d4a1af5p-4Q, -0x1.0a50be22f2b86dd755f1bb101dbcp-3Q, 0x1.df3f4f6c19d45193b61450be397cp-4Q, -0x1.2d4b7e715db6bf84cb93e1a160d4p-4Q, 0x1.0681e4c20b9fce41d5b4e567565fp-5Q, -0x1.1b50d689cbed8df146901e68b65ap-7Q, 0x1.49acd134a254ba0136bf2c9ddd2bp-11Q, 0x1.16651955943e391787562b8520dbp-11Q, -0x1.c26d1f2c70c86f0644644cef751p-13Q, 0x1.3002118e762a111c6bcee4aaae42p-16Q, 0x1.49fbecfd7d9c6cba55cd30ac0602p-17Q, -0x1.8781a4a6a5f7c8daadd9ede24939p-19Q, 0x1.5ed0ad164acd249f0f9d827483acp-24Q, 0x1.da4a7558674addd03b35614f79bdp-25Q, -0x1.7e23c7237f3f9358779e22d38cap-29Q, -0x1.bd8f2cef8c9f03d137232e9e48dbp-35Q, 0x1.1c61501fa10480730673344e35a7p-37Q, -0x1.c1b8b33989e0245e7c861b898ec7p-44Q, -0x1.95156f39cb33a3cd95db28e3ba68p-52Q, 0x1.d1f8ddb7d01989509bfbf0327cdap-60Q, -0x1.34635de67ce8bb9a35ccd2f4bc82p-74Q, -0x1.c0c6d283f741e5d8d9e1ced44cbap-97Q, -0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.52aa167437ed3a97a2d16e2e814p-6Q, 0x1.2f386450cd3603452775e405d98cp-1Q, -0x1.92da3e0f4795f52ddad3070744b5p-2Q, -0x1.010e6c23362c2f5a0189ea0fe507p+1Q, 0x1.ba5e5707337cefc73943a8303951p+1Q, -0x1.6efa1a351e68942304e8e68b7a36p+1Q, 0x1.e2efff792ca6cd2456dfdb721d3p+0Q, -0x1.e9e84815ce29a5578b4bc0477766p-1Q, 0x1.3e7bcfc83dd34f0d929299012fe2p-2Q, -0x1.3f21e5e83db9b76a1e6a21ec102ep-6Q, -0x1.00e091b8310d7c425038e08db391p-5Q, 0x1.93252ea5d40edb85ff0ddad30d7p-8Q, 0x1.0cb53bda124f4c4d4c0ae3af47ep-7Q, -0x1.6ecc6596fdeb97786cd08cbbbc9bp-8Q, 0x1.1da3c88de4593a0d10cc249b863dp-10Q, 0x1.0f705c9109b88bc792c8e251c2cep-12Q, -0x1.687f176415b5a1410c9f394cb9e8p-13Q, 0x1.03bf749271ea0dc9bfa9a81f431dp-15Q, -0x1.0a570c997b8f6bb3aa2b6fc455bcp-20Q, -0x1.b60c856b75c6f8f8db3b0f76f77ep-22Q, 0x1.2f36c8024d47853b1fc5abd2c44cp-24Q, -0x1.ab6b4d2a0c9eb0fb784066974351p-30Q, -0x1.b77dbd4d624bb182ce2a80889f4fp-33Q, 0x1.02e06a0b525289974212166730a4p-39Q, 0x1.f900db818405bc4cfc19c1904249p-46Q, -0x1.5cc6aba4a366fbfbcb9e7e9b0d93p-54Q, 0x1.79a9be1badaf05e53c8d4ae1d448p-67Q, 0x1.12cb1c6610cf5a5ca8d9bf44c534p-88Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.bde47de89537efcc2943722b96bdp-4Q, 0x1.ff6e39e05bc1960ac6a7468afb9cp-1Q, -0x1.0edf7812c7e6f7d06a00b362f2edp+2Q, 0x1.788eafbfef56fcdc50a685d205b6p+2Q, -0x1.0b9e58d049e2b1cb9469b0149a1ap+2Q, 0x1.57d72a54d9b7d9046e3ca22b7fc2p+1Q, -0x1.5aec59993d64c03ae451f5fb9ac3p+1Q, 0x1.66be004fbc25830ff3a497ea8396p+1Q, -0x1.257b730e2148d4f4b3feb86356b8p+1Q, 0x1.61e6a248fa765db41939b126ff2cp+0Q, -0x1.1d661708485736ce63b6c04b43ccp-1Q, 0x1.7634ae9385e7d28433590ede6772p-4Q, 0x1.aae5eb36cf2339bb1da3727f868ap-5Q, -0x1.66a2dd81189a5724bb1062f0dbecp-5Q, 0x1.9ee5c38dff3c5ada29575f743c4fp-7Q, 0x1.cee452b55c630166e1f1c6509c8cp-12Q, -0x1.7d0e63753adf810a13b7946ecd49p-10Q, 0x1.95a9bb14ccec080a617568800ab6p-12Q, -0x1.ac68b8496deea7093d3eaa370cb3p-17Q, -0x1.4a3e531dccd5a7c88df667aa9ebfp-17Q, 0x1.45a5b2adacfee470f99a3f9ace09p-20Q, -0x1.a0585e72874e51a270db9477885p-28Q, -0x1.4a4aaf36fdaec2c3a3e857f50dfbp-28Q, 0x1.818dc3c36642c77c4040a75f4584p-34Q, 0x1.bc8ec635290e455c58f05f4ab9c8p-41Q, -0x1.1c50f4adb4d48c39b492719c233cp-48Q, 0x1.541ee5efeba27ec1d6332fa503dp-61Q, 0x1.eef3c669427ba33d298eab6d278p-82Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.da9efb84cd101b891a55bf090876p-2Q, -0x1.0a963523c780f95520ba62e0ae99p-2Q, -0x1.6ead78b2a7f870bae850968cd2c2p+2Q, 0x1.1fb0b7ee7fe9b42077abdaf5e253p+4Q, -0x1.a26b20f9bdeeff0cd0b5e87989aep+4Q, 0x1.5a362701692b5d54a80faabeb08bp+4Q, -0x1.c3b93743ed5e1f4aae7ff9680d26p+2Q, -0x1.0393f54066e2a86d4f5766fcb157p+3Q, 0x1.ce0e335b9b5cfd8737f6de07ffafp+3Q, -0x1.3371f4378fc25cdcbf584ed998cep+3Q, 0x1.04744c732a8970957ba707ed40dap-2Q, 0x1.5d5bbaac2d3dd399541ae8c86b98p+2Q, -0x1.56903abc9d372d08f72cf8f9d84fp+2Q, 0x1.4f367450bb0294accf5c9a7e9554p+1Q, -0x1.16f1bf1e47dd7b33b29f107a965cp-1Q, -0x1.0ca6089fc41ee660907b2bb58a89p-3Q, 0x1.fd1e6437298de912355a40f320d6p-4Q, -0x1.127569c6d3d201e096a74c3e9f6bp-5Q, 0x1.031ce43d6f2a9b28afac205cb30cp-9Q, 0x1.dbc5a12350173dc4ceb0edd4094ep-11Q, -0x1.6e57586c99db2a8af6576e5da36dp-13Q, 0x1.338c12c9a95b47e57d454a7c5751p-19Q, 0x1.ec833bdc8d6ab1cf492647695cc2p-21Q, -0x1.31ee1e222a82fe6e397b0f1aa142p-26Q, -0x1.068cce25031d061c7d5229b84eeap-32Q, 0x1.ab486d191520d8a9aefca6d37aefp-40Q, -0x1.971ac61147c4bd5f21d58d94b0d3p-52Q, -0x1.28365b5992261cb91d89a4a5eba6p-71Q, -0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.8a28bf1f4baf0256370de9cbbbf3p+0Q, -0x1.0b8ecb513e670e46e8b61fdb81fap+3Q, 0x1.301d17ac5e1c6daeb2bb90052014p+4Q, -0x1.80a5fd5ebbea4cbe232c3d259f67p+4Q, 0x1.4a39e3e1048d6253983413fa5691p+4Q, -0x1.1148278e9d9a1304c4d279b67053p+4Q, 0x1.18e244d79a0328c7ff6ea967eef5p+4Q, -0x1.3908669ba07796469d99446fcffap+4Q, 0x1.80446c71adb1488769cf4e1f8d42p+4Q, -0x1.0a40794798e411ebd23986f8288ap+5Q, 0x1.52509dd04c4f6aeb9cbf502539fbp+5Q, -0x1.4b468531c5b19f58ba9821786258p+5Q, 0x1.c80f1430e334a07768f1a651dda2p+4Q, -0x1.82ded3c89e7e9fa329e762fc41f5p+3Q, 0x1.7610a167089f1959ecdad356948cp+0Q, 0x1.b0a89a8818c0677d48d730c11145p+0Q, -0x1.2b516da5d080fbac57eada1e0e8ap+0Q, 0x1.488189c0e63233e3103870456b25p-2Q, -0x1.16dd91fce8d2f3a24746d4df4144p-6Q, -0x1.957d5757f4d581e1eb8139ee8367p-7Q, 0x1.613bcf2c2fc6a53ed2c91b812d4dp-9Q, -0x1.0adbc024da55152d1e362e768c76p-14Q, -0x1.44905597a89087a3899ef231d6f7p-16Q, 0x1.238bd55115863b967f9591a85e2bp-21Q, 0x1.0b863bc593a1d515b8c451fdf4ccp-27Q, -0x1.2dac52b5d35bb8e11505ead79853p-34Q, 0x1.a8ab5a61388b1db01ad92615e5f6p-46Q, 0x1.34fcf88bcfb3fdd3eace821f889ap-64Q, 0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.e156f58145aba7d0b30fa35feff6p+1Q, -0x1.d9350b2238c2b904f5fdfd02be6bp+4Q, 0x1.b03e3957ecd6a002d130937fdeb5p+6Q, -0x1.f51dfa789d878832ad001d30e39cp+7Q, 0x1.b1d9ee3321d942364cb8271dfebap+8Q, -0x1.3c90b7e3ca1db82e1a61d27c7ae2p+9Q, 0x1.a1025f9df5665ef6d6390bf01f8bp+9Q, -0x1.ee82dbab6ab103949b52c0019f4cp+9Q, 0x1.fcf169933904c38827bff55b6c1p+9Q, -0x1.beee0dc0c8ddb1ba161390e5fd9fp+9Q, 0x1.545f49e00f495f369a9c2947535ap+9Q, -0x1.c39ca355bd5d296f3796271b492ep+8Q, 0x1.d17e6e268802ca2d8ab4b3a8e721p+7Q, -0x1.8d05e2b81cf726b84ae7af5a8e1fp+5Q, -0x1.a57ddae4deced8b3bcbf5da22cap+5Q, 0x1.065bfb9cfed103880a47e9c73209p+6Q, -0x1.1a783beefce87b0115cd8021056bp+5Q, 0x1.2e9f2c1581a696ea72950a297825p+3Q, -0x1.3cad9a2427051e071bf1f8338794p-2Q, -0x1.1b4b3a7aa70e82673e69d7fdae94p-1Q, 0x1.15a31469a9ce01c4f9e608774673p-3Q, -0x1.5c66a63c9347469ce6f6732b0a8p-8Q, -0x1.5db560cc8a8d9420c2df7832dd62p-10Q, 0x1.c57be52a95f9a3c03fb08e74a459p-15Q, 0x1.c9738067c5909d91761fe5fd95cfp-21Q, -0x1.63f652c47225898a139de258494dp-27Q, 0x1.769767db4423b6439ddbea7dbce4p-38Q, 0x1.108b386e39e95695575898c417c9p-55Q, 0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.d870debcc05c458cb432559ebfc5p+2Q, -0x1.0c2b8b0b28193dcd228c4e6d1c95p+6Q, 0x1.10bd374d63550b983999fd9b98p+8Q, -0x1.4441daef321d4016bb9b098a7297p+9Q, 0x1.eaed48222cc9b9253eb90b0dcf97p+9Q, -0x1.dea055aad4ecaefb97bc94a552f5p+9Q, 0x1.0ea6de87556ea6a2de72c35c89c8p+9Q, 0x1.3bb921604519d1ae8a5d0ccd5d1ep+5Q, -0x1.7c03d4dcf551472cf76721c1c17cp+9Q, 0x1.b77df6c77230b9a06a45739b39aap+10Q, -0x1.59dd45c186fb11c5ad1d0f189e18p+11Q, 0x1.92ad5ee85458cf75ddd23bfc0512p+11Q, -0x1.7716e9b298971ca51bb637e98e57p+11Q, 0x1.34cd942cd473a5a710149f0fdbbdp+11Q, -0x1.d2108687fa36ec88dd75fde72adbp+10Q, 0x1.27e2041912517aaa65b8280aa4e9p+10Q, -0x1.0ee0131c1b04ee634d2080c95b01p+9Q, 0x1.13ffc016f56ca3a3bb7e6018d857p+7Q, 0x1.9021a9dd4e12af1889880347a2f3p+1Q, -0x1.cb9505a70965b7f9ec7d47aa192ap+3Q, 0x1.f11cd618c3358a67a90246f84b5cp+1Q, -0x1.a3fefe1a942d41c95d704e932873p-3Q, -0x1.a953da883746e1eb5fcefdddfb0dp-5Q, 0x1.9718bee3af728b9e4c377574de7ep-9Q, 0x1.ad4249f39958d903ac0c0b219af3p-15Q, -0x1.eb70cd1aa40511f5c136d6883df5p-21Q, 0x1.72006a07a097f617e893c7382f23p-31Q, 0x1.0d30627e6a2ad3489ce1b7745733p-47Q, 0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.155158ac6ea984ad1f39657983b3p+3Q, -0x1.4fec3a6a32c1ef2818fc096fddd7p+6Q, 0x1.70dec41eaf97d263c2e27cc1784ep+8Q, -0x1.e94cfecb1efa1478b21e27ec9309p+9Q, 0x1.bf0b100d34d0405ff79ebd2004c2p+10Q, -0x1.39291803fcf47b5c2680912e1935p+11Q, 0x1.79ccf50afb46dbd4b771bbe9314ap+11Q, -0x1.ab6c90991611b280fa5f8fb17229p+11Q, 0x1.c47ed9a17b9cc8042e74a92f11b8p+11Q, -0x1.af1005783c9c08a75d43de02a3efp+11Q, 0x1.72a859cabb471f7e1c88f5de7fd4p+11Q, -0x1.2846e6b9b14f481005e1b83a4b88p+11Q, 0x1.b3d87dff6a954876ee2d25afa785p+10Q, -0x1.1ae10527ae49437f787df6e5258ep+10Q, 0x1.41e16e9c43532c08707790b425f3p+9Q, -0x1.460030c5bf206e4d0614b974f3a2p+8Q, 0x1.0818e6dd9acdc76d8ca672811999p+7Q, -0x1.8ef0b66c7662c653e52a9a26f648p+4Q, -0x1.6eb8ec2d2fcf0443ad7badae070dp+3Q, 0x1.3aba0303f01c424453f9ef91eafp+3Q, -0x1.588d6d239648dcf73cd93c85e3bap+1Q, 0x1.5ca063a2897a34772f3c4e199577p-3Q, 0x1.72c884e06d399a8e64fd9e5def96p-5Q, -0x1.2b7b99da7239a8d084357a60a47cp-8Q, -0x1.359ad5ec914c5a48afa14674a42fp-14Q, 0x1.0cff089d4d592f01775a283b1eb2p-19Q, -0x1.207535755ab2ee6fe496d4a13eeep-29Q, -0x1.a3ad9d559345b904814202802d71p-45Q, -0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.174fb1d6730638307d208a7b9705p+3Q, -0x1.5cf63b4072a084fdeb8b32e3f8f4p+6Q, 0x1.859702b93091fc7e6589a6acc4cp+8Q, -0x1.008e38c64d4049e94bd5995565e4p+10Q, 0x1.c03c1b8df613f18067635d57973dp+10Q, -0x1.1e0d30516cd0d5b6c114eb50863dp+11Q, 0x1.33504e2e62ab9029d451c22dbffap+11Q, -0x1.4498a39b45dd2d15e6efe9a76837p+11Q, 0x1.500c422b7e4d651447d31248b36bp+11Q, -0x1.2d6f916f2f063d6cac6e50e8332ap+11Q, 0x1.c5bd8b8beccdb3ef65612beb26bfp+10Q, -0x1.3b7208dc1850750db50e8cf692d2p+10Q, 0x1.a4b1819107c720e5477b69693072p+9Q, -0x1.c03583e49298125db8ea16f1c92fp+8Q, 0x1.1254d5dd1a3c865791dce6763bcfp+7Q, 0x1.be19509979c252700b664c41f013p+2Q, -0x1.6abf524121ea45d75b14942386cep+5Q, 0x1.bdfa9494723d3641f8f38a0cc0ebp+5Q, -0x1.7a9c102bdb495114d11c4dc94aa3p+5Q, 0x1.86920d3d07ed23a99340d183d76p+4Q, -0x1.a9adfb25c4f27469db40c9474b64p+2Q, 0x1.1337641b89dbbf1427d9b379e883p-1Q, 0x1.191c64622c1b13245bb01b5d2dc3p-3Q, -0x1.88d18423866c243d7190bc69d463p-6Q, -0x1.aee4f466bb96965b6a3465feff1bp-12Q, 0x1.15e5e9747fe1bbdbc08e7b80eb4fp-16Q, -0x1.bc4491eee0fdcc0c5c68f4d91f7dp-26Q, -0x1.431c03e754cd8a35cd878b071e01p-40Q, 0x0p+0Q}; + } + if constexpr (order == 10) { + return {0x0p+0Q, 0x1.57dd202e5e84ab85696b3b081p+2Q, -0x1.b426b94987908d499f20a9e25757p+5Q, 0x1.ef50af36bc949ed3fa5d7e0a8198p+7Q, -0x1.4da8e644667e6ac3b79bfab28161p+9Q, 0x1.2d889ab089910f7ad40ce0f8df85p+10Q, -0x1.9456ec86efc743d5028d89866bbdp+10Q, 0x1.ca1f75d29c1784a6a77e065e7ddep+10Q, -0x1.f2eaf24b48be90f886aebc94dadbp+10Q, 0x1.0a60e2fdcea779a9912a9120de2ep+11Q, -0x1.07fe75c2d85392f1210e0f990473p+11Q, 0x1.e2b37ed5f446198c3a3c3919467ep+10Q, -0x1.a28fcff6e684b5cca8b59e89af3bp+10Q, 0x1.5596d2be7c1f83852a278b67a766p+10Q, -0x1.02761175eccb4a7f32e2ed6eb998p+10Q, 0x1.70f45a3e9b6c87dda4f640c6221p+9Q, -0x1.edf5a5b354e128a66f72c39ece6fp+8Q, 0x1.27b1e13298bb3ef65c5911d31c4bp+8Q, -0x1.3be69243ef2c31f022d98f8f933ep+7Q, 0x1.3b71f0120f2a47ab2eeb31559ad4p+6Q, -0x1.11985d9404f45378f92bac82976fp+5Q, 0x1.3b5a9762f053ae0408ef30897c49p+3Q, -0x1.c32c18767db723614caa803fec42p-1Q, -0x1.5d8e89b8ba2f46a3384127d85bb4p-2Q, 0x1.3b1b46a97c2fa9eb152314a4a3e9p-4Q, 0x1.23706d03f6f7466fb40930bedc5cp-10Q, -0x1.9c26fc84f3ff5e0f45c2413885cdp-14Q, 0x1.962939a138e2b376292fd9833a65p-23Q, 0x1.27428a5934f9dbd8cb61b82d774ep-36Q, -0x0p+0Q}; + } + if constexpr (order == 11) { + return {0x0p+0Q, 0x1.82ba18a2815549dbb59529e31e5ap+1Q, -0x1.ee321ac782e8103dfdbc2361bd6ap+4Q, 0x1.174e5f65a44a587e237d6c3b553dp+7Q, -0x1.6e81d57c4c979417ab2afd3c009fp+8Q, 0x1.368de3361fae4ae909ed8745994cp+9Q, -0x1.7106731d7c870bc083f73b59d2eep+9Q, 0x1.661d220cefa0ffe013b3cf726fc3p+9Q, -0x1.6833b778e773ab42be67a15c0ce1p+9Q, 0x1.833c1b7a24cc4442e64b44e53f55p+9Q, -0x1.704d0cf5b403f737ee634427f2bbp+9Q, 0x1.2a287b4a8744be736378cf1ad4c7p+9Q, -0x1.d795731af32d4e2789adddfc9044p+8Q, 0x1.7a6623bbe9af7bf6c835c65c7832p+8Q, -0x1.0ddd9fa1ad021e162c7b141c194dp+8Q, 0x1.4f824182bb440977dbefd0a35cbfp+7Q, -0x1.9b8d6efd833c3f31fde4ac45e744p+6Q, 0x1.e6b9bfc912a60c385c629c5efb9fp+5Q, -0x1.d872a65489bc6c3914ee01ff515dp+4Q, 0x1.82e4e50171640b22bb957ff7eae6p+3Q, -0x1.3c81b080d7c589f42c5ce6389905p+2Q, 0x1.87117e04fd822595de53b26cd146p+0Q, -0x1.f2d1dbd395098c995382a933550bp-6Q, -0x1.327c0d249413fa2745d7e64f577bp-3Q, 0x1.13b8c9585145f7834dd210f62242p-5Q, -0x1.094893076dab22e2cc62b655bbffp-13Q, -0x1.784719262e6d99b573a61c97f7f8p-14Q, 0x1.31d26875ab45ebb06f0f6f8f22c8p-23Q, 0x1.bc3aef2e9698a9624f5205459225p-36Q, -0x0p+0Q}; + } + if constexpr (order == 12) { + return {0x0p+0Q, 0x1.229017de89888d3b45dd8cbfea97p+0Q, -0x1.74b098d7b294230e195e9582cce8p+3Q, 0x1.a3d6fe58853c1e5c5b02b3c7091ap+5Q, -0x1.0ee9fe2c639a74c7c040d58ce97ep+7Q, 0x1.b7ec28edec4542d27f8e52ddc0eep+7Q, -0x1.dcbffedb3a507fa5c4eb668bdfccp+7Q, 0x1.8f9512e48d1c46e9ac992677a5b8p+7Q, -0x1.7421b1a8804595d4b26039d25693p+7Q, 0x1.a17e1d21e73d1b2880fd626879bep+7Q, -0x1.8b13badbca1d886a88315897811ap+7Q, 0x1.210062e92f4896d0f004a46e2b61p+7Q, -0x1.a9798d44da6c2035da4b20d5799bp+6Q, 0x1.62f521d1972a85eb2c685554b0c3p+6Q, -0x1.f0d14679f69c06584d129cb1dd4fp+5Q, 0x1.0b0540b21cf0924f554194ec7fd4p+5Q, -0x1.2e7f81d72375079565939ed3cb2dp+4Q, 0x1.776b19bc1de7ac2a6f7b7fc9f33cp+3Q, -0x1.390aaca35a348d0447a8760eee46p+2Q, 0x1.0e68e9445701769efc732f28d561p+0Q, -0x1.1d9e671612a45bff7de530a9d9acp-2Q, 0x1.1e141f6f8381b1b9941445268e56p-5Q, 0x1.626281f06a565209b564a6bd772p-3Q, -0x1.00510e27c6af9fccce79c2c0e3f3p-3Q, 0x1.dda065aa933f3a2523260c5e0824p-6Q, -0x1.397e42b4cc1c2544392f2098e5e3p-10Q, -0x1.5e2780fee3a224f5cbbe3f817e91p-13Q, 0x1.93d63eaebefb797682cedf0250afp-23Q, 0x1.24c485651202d28a48b30f621a03p-34Q, 0x0p+0Q}; + } + if constexpr (order == 13) { + return {0x0p+0Q, 0x1.2dba81606cdf44cd9f079191a5b6p-3Q, -0x1.83ba9062dc10a95420b209411d9dp+0Q, 0x1.bc6ce42e9d3a21102e53db0ffbf5p+2Q, -0x1.2c97bd817af94b6452b9fa0d6cc7p+4Q, 0x1.0e06914d9315537516f325b1a949p+5Q, -0x1.5f4706680d4ada71d400dc2041dap+5Q, 0x1.6ea3fbf492340b1a8748a4fe5e1ep+5Q, -0x1.5a777ed4931f215f8e0bf28ba3b3p+5Q, 0x1.424978021982d2d37f646f8229b6p+5Q, -0x1.3090ff3d7fed662537bdbe4e02dbp+5Q, 0x1.23e4419ddb640edbe25bd0d3d323p+5Q, -0x1.07fd356f7673b92c13aaeedc3102p+5Q, 0x1.a8f488a3b6e4b2eef60e436347eap+4Q, -0x1.49932384ed8b4cc7bb557f0494b6p+4Q, 0x1.0a96d421140fecc2982c96f08508p+4Q, -0x1.8f60cd9c05602820630a2d130bddp+3Q, 0x1.003bcbf26a5db032107ba63bca4dp+3Q, -0x1.433ef046d9ed13921cc7a928013bp+2Q, 0x1.a65b7dff9352096da27656f15252p+1Q, -0x1.d36032adf2dbd6f014be67c6b6d9p+0Q, 0x1.a4a1ad470bd0ddc88c181c767028p-1Q, -0x1.88e9f63513ce060ad4280c3ae552p-2Q, 0x1.6764f965c95116ec3ca65a5d1d99p-3Q, -0x1.91c36b23af1d7e93ac72a63e1ecp-5Q, 0x1.07d03d7a1adc182d3615f97f92d8p-8Q, 0x1.362d3e37ff6cd230a2a84b0df184p-11Q, -0x1.92dbfdbfa8197afc834c0f617825p-20Q, -0x1.22ff804507dbe78851cf26324af8p-30Q, -0x0p+0Q}; + } + if constexpr (order == 14) { + return {0x0p+0Q, 0x1.8dd6e1684e11d5d1ba3d30411455p-6Q, -0x1.ffb4de00653d36e2054f8a61ef33p-3Q, 0x1.1f8df89dea983b6a683ab3dea296p+0Q, -0x1.6eae32a3a790681f248c15595ebap+1Q, 0x1.200cfdab0a8887ae485b249984acp+2Q, -0x1.1f287662480ab738cbe30fecb657p+2Q, 0x1.90990b7ee9dd1f94866e95a6da25p+1Q, -0x1.3d166b62b6085e29fb948fdc0ca7p+1Q, 0x1.74d60ae1a8ceaa71b4a8963d6056p+1Q, -0x1.68026579c2213b7f75e80846b227p+1Q, 0x1.e76ba8ae988d51e585809060cc1fp+0Q, -0x1.60830949d4c82da954f72fb8f218p+0Q, 0x1.48f2a8ad7050c9588f36c847ca49p+0Q, -0x1.e7d09d1d5c76d8ae64a9d1075b8ep-1Q, 0x1.1252ee85de9250052c524f707253p-1Q, -0x1.6e9d007e3ce50ac7539d68d5ba34p-2Q, 0x1.0a88fbec92db255ff32afa74479fp-2Q, -0x1.16ea71f276b00e5a14dbe15b1f7cp-3Q, 0x1.018afa9348367b971e99c9ccc188p-4Q, -0x1.2fa053de7510dd5de4017cd3190dp-5Q, 0x1.2375ee2696f86cd08bc39452c848p-6Q, -0x1.73b10c938e4b6609ab6e783698f5p-8Q, 0x1.1decc8370b2354d839f68c8d33cap-9Q, -0x1.b8713a4dd74a971b6935d59629ecp-11Q, 0x1.732711f764c01745616312d53ea3p-14Q, 0x1.5deb76c540b6c1414e8da0e84c77p-16Q, -0x1.9271259f104138f720caf85fff1dp-23Q, -0x1.2099915b9335422a7d174776e0cbp-32Q, 0x0p+0Q}; + } + } + #endif + } + if constexpr (p == 16) { + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0f, 0x1.674708p-13f, 0x1.27cdb4p-5f, 0x1.f3f9a4p-2f, 0x1.8a1b0ep-1f, -0x1.d00082p-2f, 0x1.06c982p-2f, -0x1.4ec10ap-3f, 0x1.b93c32p-4f, -0x1.09f5f4p-4f, 0x1.0b6a76p-5f, -0x1.a17eb8p-7f, 0x1.cda18ep-9f, -0x1.18156ap-11f, -0x1.547c4ep-15f, 0x1.a1d518p-15f, -0x1.fb90c6p-17f, 0x1.085bbcp-19f, 0x1.4a16eap-22f, -0x1.3b0f84p-23f, 0x1.42695p-28f, 0x1.acf5ccp-29f, 0x1.c7dfc2p-37f, -0x1.99a498p-37f, 0x1.0c54f6p-42f, 0x1.60b622p-49f, -0x1.63607p-54f, 0x1.f308a8p-62f, -0x1.dcd83cp-74f, -0x1.f4c81ep-87f, 0x1.f541a8p-112f, -0x0p+0f}; + } + if constexpr (order == 1) { + return {0x0p+0f, 0x1.5e2be4p-10f, 0x1.115596p-3f, 0x1.8e066ep-1f, -0x1.9a3aeap-1f, -0x1.b4e824p-2f, 0x1.24d79cp-1f, -0x1.96ff08p-2f, 0x1.7cff08p-3f, -0x1.3b2f7p-5f, -0x1.8c4396p-6f, 0x1.d82f62p-6f, -0x1.d30848p-7f, 0x1.b8ca7p-9f, 0x1.4ea26ep-13f, -0x1.44550ap-12f, 0x1.116fb6p-15f, 0x1.e6f46ap-16f, -0x1.73244cp-17f, 0x1.105e3p-20f, 0x1.85ee5ap-23f, -0x1.5ac9f2p-25f, 0x1.d789f4p-30f, 0x1.8d5e3ep-35f, -0x1.c8b384p-37f, 0x1.38fe4p-43f, 0x1.f524d2p-49f, -0x1.a73b7ep-57f, -0x1.c53204p-68f, 0x1.a5354ep-81f, -0x1.a59b92p-105f, 0x0p+0f}; + } + if constexpr (order == 2) { + return {0x0p+0f, 0x1.295efep-7f, 0x1.9d61ccp-2f, 0x1.161d42p-2f, -0x1.5b7a46p+1f, 0x1.d1174ep+1f, -0x1.64fd52p+1f, 0x1.05168ep+1f, -0x1.657508p+0f, 0x1.a38bfp-1f, -0x1.889b16p-2f, 0x1.152c76p-3f, -0x1.1b4c9ap-5f, 0x1.907f1ep-8f, -0x1.48b152p-13f, -0x1.a3276ep-11f, 0x1.19008ap-11f, -0x1.4a0f3p-13f, 0x1.b16d86p-17f, 0x1.3c9bcap-19f, 0x1.899254p-24f, -0x1.e003aep-24f, -0x1.b118f8p-27f, 0x1.a8e81cp-30f, 0x1.472048p-36f, 0x1.0bc546p-41f, -0x1.5b7878p-47f, -0x1.75c578p-53f, -0x1.4450ep-64f, 0x1.74639cp-76f, -0x1.74be14p-99f, -0x0p+0f}; + } + if constexpr (order == 3) { + return {0x0p+0f, 0x1.ade0c6p-5f, 0x1.c28b44p-1f, -0x1.5f4cdp+1f, 0x1.cdb8f6p+0f, 0x1.f77744p+0f, -0x1.dd879cp+1f, 0x1.37053cp+1f, -0x1.1bfa76p-2f, -0x1.2b5034p+0f, 0x1.63e226p+0f, -0x1.a29914p-1f, 0x1.852868p-3f, 0x1.9a9664p-4f, -0x1.c29f78p-4f, 0x1.54d634p-5f, -0x1.41b2a6p-9f, -0x1.225dap-8f, 0x1.f9019ap-10f, -0x1.2c2838p-12f, -0x1.8e8742p-16f, 0x1.c9f58cp-17f, -0x1.61f64ap-20f, -0x1.96b8bp-25f, 0x1.71f48cp-27f, -0x1.b5fc8ep-34f, -0x1.c5963ep-38f, 0x1.6b4e6cp-45f, 0x1.e67136p-58f, -0x1.6aff4p-67f, 0x1.6b579p-89f, -0x0p+0f}; + } + if constexpr (order == 4) { + return {0x0p+0f, 0x1.002834p-2f, 0x1.74f146p-1f, -0x1.d40722p+2f, 0x1.2af6fp+4f, -0x1.a43136p+4f, 0x1.9a15aep+4f, -0x1.38d1bep+4f, 0x1.6c6cdcp+3f, -0x1.13619ap+2f, 0x1.d56ce2p-1f, -0x1.e42908p-1f, 0x1.e52912p+0f, -0x1.ee224ep+0f, 0x1.1f26d6p+0f, -0x1.588844p-2f, -0x1.9e45fcp-7f, 0x1.dcd2d2p-5f, -0x1.93116cp-6f, 0x1.0e0178p-8f, 0x1.31f3fap-12f, -0x1.f6b0ep-13f, 0x1.f05078p-16f, 0x1.2ec5bap-20f, -0x1.47f2bp-22f, 0x1.bcb022p-29f, 0x1.1bcefep-32f, -0x1.34d97ap-39f, -0x1.6f2c8cp-53f, 0x1.34e43ep-60f, -0x1.352f98p-81f, 0x0p+0f}; + } + if constexpr (order == 5) { + return {0x0p+0f, 0x1.e5d8b2p-1f, -0x1.e7e4aep+1f, 0x1.643948p+1f, 0x1.8bf778p+3f, -0x1.39576p+5f, 0x1.f6657cp+5f, -0x1.2981aap+6f, 0x1.0cf3p+6f, -0x1.71528cp+4f, -0x1.136588p+6f, 0x1.5ecf14p+7f, -0x1.ca8fbep+7f, 0x1.83a966p+7f, -0x1.9d9118p+6f, 0x1.818f5cp+4f, 0x1.4e782cp+3f, -0x1.7fba74p+3f, 0x1.361d7ep+2f, -0x1.85fee8p-1f, -0x1.fcc32p-4f, 0x1.30d54cp-4f, -0x1.4236c8p-7f, -0x1.6b6d4cp-12f, 0x1.251cb8p-13f, -0x1.7df628p-19f, -0x1.6d7bap-23f, 0x1.04735p-29f, 0x1.ecabdp-41f, -0x1.035efp-49f, 0x1.039e9p-69f, 0x0p+0f}; + } + if constexpr (order == 6) { + return {0x0p+0f, 0x1.5c435cp+1f, -0x1.45ad88p+4f, 0x1.1ac644p+6f, -0x1.3bcd24p+7f, 0x1.1132bep+8f, -0x1.a33216p+8f, 0x1.2bec4cp+9f, -0x1.83ddd4p+9f, 0x1.b1ad42p+9f, -0x1.9d7a32p+9f, 0x1.5526f8p+9f, -0x1.e99686p+8f, 0x1.186a9ap+8f, -0x1.4f805p+6f, -0x1.84955p+5f, 0x1.59efa2p+6f, -0x1.dac7aep+5f, 0x1.620788p+4f, -0x1.88bb02p+1f, -0x1.04b916p+0f, 0x1.18c698p-1f, -0x1.508ddcp-4f, -0x1.539386p-9f, 0x1.9eab9ap-10f, -0x1.980b92p-15f, -0x1.761c2ap-19f, 0x1.64e7e2p-25f, 0x1.1823b8p-35f, -0x1.623924p-44f, 0x1.6290fap-63f, 0x0p+0f}; + } + if constexpr (order == 7) { + return {0x0p+0f, 0x1.891444p+2f, -0x1.c4b29p+5f, 0x1.d994c4p+7f, -0x1.26defep+9f, 0x1.ddf578p+9f, -0x1.fd207ap+9f, 0x1.36152ap+9f, 0x1.d8616ap+6f, -0x1.190b42p+10f, 0x1.36219cp+11f, -0x1.eed74p+11f, 0x1.31c14ap+12f, -0x1.31807ap+12f, 0x1.07e38p+12f, -0x1.9ca0ep+11f, 0x1.192392p+11f, -0x1.28f7fp+10f, 0x1.8ef118p+8f, -0x1.076216p+5f, -0x1.3734aap+5f, 0x1.2e313ep+4f, -0x1.913ecep+1f, -0x1.aba4ep-4f, 0x1.5578cap-4f, -0x1.f3ff48p-9f, -0x1.bd3a12p-13f, 0x1.29ffeap-18f, 0x1.5e7712p-28f, -0x1.267e4p-36f, 0x1.26c8dap-54f, -0x0p+0f}; + } + if constexpr (order == 8) { + return {0x0p+0f, 0x1.1c0608p+3f, -0x1.65d998p+6f, 0x1.9d8978p+8f, -0x1.24c8d8p+10f, 0x1.21d47ap+11f, -0x1.bbc006p+11f, 0x1.2211c4p+12f, -0x1.5c65p+12f, 0x1.845a36p+12f, -0x1.87e6ep+12f, 0x1.650412p+12f, -0x1.2b9aap+12f, 0x1.cebcfcp+11f, -0x1.3e375cp+11f, 0x1.7d70c6p+10f, -0x1.8fd688p+9f, 0x1.57b6f4p+8f, -0x1.3e2cp+6f, -0x1.f1e0f6p+4f, 0x1.39f676p+5f, -0x1.07f7dep+4f, 0x1.6eaf02p+1f, 0x1.f8896cp-4f, -0x1.b78e4ap-4f, 0x1.faf294p-8f, 0x1.a6b604p-12f, -0x1.9886bep-17f, -0x1.7c0bdep-26f, 0x1.90aca4p-34f, -0x1.91166ep-51f, 0x0p+0f}; + } + if constexpr (order == 9) { + return {0x0p+0f, 0x1.58e7ep+3f, -0x1.c53a2ap+6f, 0x1.0cc18ep+9f, -0x1.7c92fcp+10f, 0x1.6a1946p+11f, -0x1.fab772p+11f, 0x1.254298p+12f, -0x1.407f9ep+12f, 0x1.53233cp+12f, -0x1.3b528cp+12f, 0x1.e2ea28p+11f, -0x1.3d616ap+11f, 0x1.75fce6p+10f, -0x1.2b5b5p+9f, -0x1.18e052p+7f, 0x1.ed1ee2p+8f, -0x1.f5a5a8p+8f, 0x1.920c94p+8f, -0x1.22c138p+8f, 0x1.4b1ba2p+7f, -0x1.ec877p+5f, 0x1.641262p+3f, 0x1.3bac8p-1f, -0x1.3ae0dcp-1f, 0x1.0ba446p-4f, 0x1.c3804ap-9f, -0x1.3c78fcp-13f, -0x1.6e90a4p-22f, 0x1.34c398p-29f, -0x1.351bbcp-45f, 0x0p+0f}; + } + if constexpr (order == 10) { + return {0x0p+0f, 0x1.0cfd94p+3f, -0x1.68c00ep+6f, 0x1.b4a63ap+8f, -0x1.3c4fdp+10f, 0x1.35efeap+11f, -0x1.c3872cp+11f, 0x1.1261acp+12f, -0x1.39e1fap+12f, 0x1.5e4c9ep+12f, -0x1.6b72e4p+12f, 0x1.578fd4p+12f, -0x1.30faf4p+12f, 0x1.0174aep+12f, -0x1.942bc4p+11f, 0x1.25cbc8p+11f, -0x1.914caap+10f, 0x1.f93f04p+9f, -0x1.1b4f5ep+9f, 0x1.1df01cp+8f, -0x1.048db6p+7f, 0x1.730bccp+5f, -0x1.09b56cp+3f, -0x1.4fb834p+0f, 0x1.e38e1p-1f, -0x1.ee07e6p-4f, -0x1.913ceep-8f, 0x1.0726b8p-11f, 0x1.2751c6p-20f, -0x1.00ceb8p-26f, 0x1.012308p-41f, 0x0p+0f}; + } + if constexpr (order == 11) { + return {0x0p+0f, 0x1.6ddd34p+2f, -0x1.ef9ef6p+5f, 0x1.2bec86p+8f, -0x1.ab3138p+9f, 0x1.90171ap+10f, -0x1.0b827ap+11f, 0x1.21c7ccp+11f, -0x1.3291c6p+11f, 0x1.52187ep+11f, -0x1.5764b2p+11f, 0x1.2d82b8p+11f, -0x1.efcf7p+10f, 0x1.96b834p+10f, -0x1.34d67cp+10f, 0x1.9aafbap+9f, -0x1.002f1ep+9f, 0x1.378956p+8f, -0x1.48f682p+7f, 0x1.17de88p+6f, -0x1.abd1c4p+4f, 0x1.18837p+3f, -0x1.72b116p-2f, -0x1.93c736p+0f, 0x1.74105cp-1f, -0x1.a93828p-4f, -0x1.8ee02cp-9f, 0x1.b89c5ep-11f, 0x1.5051p-19f, -0x1.a9ba34p-25f, 0x1.aa6a7ep-39f, -0x0p+0f}; + } + if constexpr (order == 12) { + return {0x0p+0f, 0x1.7e688cp+1f, -0x1.044f66p+5f, 0x1.39d278p+7f, -0x1.b63bb8p+8f, 0x1.86b368p+9f, -0x1.d8001cp+9f, 0x1.b397fp+9f, -0x1.9ca192p+9f, 0x1.d28d7ep+9f, -0x1.daeab6p+9f, 0x1.738e38p+9f, -0x1.0785a4p+9f, 0x1.a556aap+8f, -0x1.320672p+8f, 0x1.33661p+7f, -0x1.d86506p+5f, 0x1.9ebe06p+4f, -0x1.ec9eeap-1f, -0x1.103434p+4f, 0x1.04d752p+4f, -0x1.2fcc8ap+3f, 0x1.7c24bcp+2f, -0x1.c84c14p+1f, 0x1.57bcccp+0f, -0x1.d81dbp-3f, -0x1.20f9f8p-13f, 0x1.c2f2aep-9f, 0x1.baf67p-17f, -0x1.ae94eep-22f, 0x1.af9128p-35f, 0x0p+0f}; + } + if constexpr (order == 13) { + return {0x0p+0f, 0x1.a308fp-1f, -0x1.1df37cp+3f, 0x1.5a47ccp+5f, -0x1.e7cc32p+6f, 0x1.ba5aa6p+7f, -0x1.137ebep+8f, 0x1.07f96cp+8f, -0x1.f176d6p+7f, 0x1.0c09ap+8f, -0x1.12bf1p+8f, 0x1.de16d6p+7f, -0x1.8c7b4ap+7f, 0x1.565926p+7f, -0x1.13d91ap+7f, 0x1.8b69dep+6f, -0x1.15b78cp+6f, 0x1.8188b8p+5f, -0x1.e03c02p+4f, 0x1.12ed8cp+4f, -0x1.36a5bp+3f, 0x1.3d2642p+2f, -0x1.11ef14p+1f, 0x1.c294dap-1f, -0x1.4f57e8p-2f, 0x1.1ebd9ap-4f, 0x1.367918p-14f, -0x1.fdd378p-10f, -0x1.0fc074p-22f, 0x1.f945fcp-22f, -0x1.fb1bdp-34f, 0x0p+0f}; + } + if constexpr (order == 14) { + return {0x0p+0f, 0x1.74ef14p-3f, -0x1.fd9d32p+0f, 0x1.3320f2p+3f, -0x1.a9e31ep+4f, 0x1.73dbdep+5f, -0x1.aa50f2p+5f, 0x1.5e48acp+5f, -0x1.20d7a8p+5f, 0x1.4350bap+5f, -0x1.549ap+5f, 0x1.0d8c72p+5f, -0x1.8fe88ap+4f, 0x1.63da6cp+4f, -0x1.24224p+4f, 0x1.7851e2p+3f, -0x1.e4fd18p+2f, 0x1.610a44p+2f, -0x1.ae4c3ep+1f, 0x1.a6fe28p+0f, -0x1.ccc92p-1f, 0x1.f93894p-2f, -0x1.8612dep-3f, 0x1.fd43fcp-5f, -0x1.aafa1ep-6f, 0x1.b63874p-8f, 0x1.071682p-11f, -0x1.a84c4p-12f, 0x1.a20c24p-18f, 0x1.e7f1cp-23f, -0x1.eb089ap-34f, 0x0p+0f}; + } + if constexpr (order == 15) { + return {0x0p+0f, 0x1.31c72ap-6f, -0x1.a21aa8p-3f, 0x1.f656a4p-1f, -0x1.589b5p+1f, 0x1.250496p+2f, -0x1.3b0f08p+2f, 0x1.bed88p+1f, -0x1.37fe76p+1f, 0x1.75c34ap+1f, -0x1.9f32b2p+1f, 0x1.2a50b6p+1f, -0x1.80aff2p+0f, 0x1.71f9bp+0f, -0x1.40d216p+0f, 0x1.6edc3cp-1f, -0x1.abb5dp-2f, 0x1.5fdcbap-2f, -0x1.af4e9cp-3f, 0x1.57b33ep-4f, -0x1.736294p-5f, 0x1.e1a61ep-6f, -0x1.381382p-7f, 0x1.a99b88p-10f, -0x1.191adap-10f, 0x1.44a23ap-12f, 0x1.4db128p-13f, -0x1.2cad38p-14f, 0x1.f38c66p-19f, 0x1.c87078p-24f, -0x1.cdd01ap-34f, -0x0p+0f}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0, 0x1.674708c20fd28p-13, 0x1.27cdb30a789aap-5, 0x1.f3f9a4213a58ep-2, 0x1.8a1b0e63e768fp-1, -0x1.d0008134e7b25p-2, 0x1.06c9817f611eap-2, -0x1.4ec109006f3abp-3, 0x1.b93c322324f49p-4, -0x1.09f5f4083e297p-4, 0x1.0b6a75dfa25cdp-5, -0x1.a17eb803ff746p-7, 0x1.cda18d3f662aap-9, -0x1.1815693b1e50ap-11, -0x1.547c4d557ee7fp-15, 0x1.a1d518779619bp-15, -0x1.fb90c559a340ap-17, 0x1.085bbb58c3dc6p-19, 0x1.4a16ea18a78a9p-22, -0x1.3b0f83cef7c9dp-23, 0x1.426950d9b6bcap-28, 0x1.acf5cc83787c7p-29, 0x1.c7dfc1cbcd56p-37, -0x1.99a4987142751p-37, 0x1.0c54f6dbbd52bp-42, 0x1.60b6215484a1dp-49, -0x1.6360709f9f94cp-54, 0x1.f308a7934d099p-62, -0x1.dcd83ccd7b40ep-74, -0x1.f4c81d09055a8p-87, 0x1.f541a7bafa402p-112, -0x0p+0}; + } + if constexpr (order == 1) { + return {0x0p+0, 0x1.5e2be3ffc02e6p-10, 0x1.115596e3350edp-3, 0x1.8e066ec21fc6ap-1, -0x1.9a3ae9a2a692bp-1, -0x1.b4e823397cf88p-2, 0x1.24d79baf908bcp-1, -0x1.96ff08990aa2p-2, 0x1.7cff079859d45p-3, -0x1.3b2f6fbc125fp-5, -0x1.8c439625af32p-6, 0x1.d82f61038e0ep-6, -0x1.d308486caa608p-7, 0x1.b8ca6f1e525d9p-9, 0x1.4ea26d28d3087p-13, -0x1.4455094b3efadp-12, 0x1.116fb5095b29ap-15, 0x1.e6f46905743cfp-16, -0x1.73244b5651139p-17, 0x1.105e30d7ecb46p-20, 0x1.85ee598e5c773p-23, -0x1.5ac9f1c76ae72p-25, 0x1.d789f3d703addp-30, 0x1.8d5e3e20027e8p-35, -0x1.c8b3833c3b769p-37, 0x1.38fe40b99904fp-43, 0x1.f524d19d8420ap-49, -0x1.a73b7d5e557e7p-57, -0x1.c5320460bba02p-68, 0x1.a5354de9b5e4cp-81, -0x1.a59b918cf087fp-105, 0x0p+0}; + } + if constexpr (order == 2) { + return {0x0p+0, 0x1.295efeac152d8p-7, 0x1.9d61cc47e5de2p-2, 0x1.161d416b67638p-2, -0x1.5b7a45663376bp+1, 0x1.d1174d09edd0ep+1, -0x1.64fd520a6621ap+1, 0x1.05168da964846p+1, -0x1.6575089c4586dp+0, 0x1.a38bf0b53f437p-1, -0x1.889b16ed752f1p-2, 0x1.152c76b8c5aa6p-3, -0x1.1b4c99876d202p-5, 0x1.907f1e8b42629p-8, -0x1.48b152205d27fp-13, -0x1.a3276d4b1b41fp-11, 0x1.19008ab2bad0ep-11, -0x1.4a0f2fc3a3fe6p-13, 0x1.b16d8531bcd97p-17, 0x1.3c9bc919e0e4ap-19, 0x1.899254d741919p-24, -0x1.e003adff466a7p-24, -0x1.b118f867cd64ep-27, 0x1.a8e81cf9b2bf5p-30, 0x1.472047d4ce812p-36, 0x1.0bc546f1206bp-41, -0x1.5b78778ec812cp-47, -0x1.75c5773026aecp-53, -0x1.4450e0ff79234p-64, 0x1.74639b34e972ap-76, -0x1.74be14820bd54p-99, -0x0p+0}; + } + if constexpr (order == 3) { + return {0x0p+0, 0x1.ade0c67a6df63p-5, 0x1.c28b430a75f2ap-1, -0x1.5f4ccfba427cfp+1, 0x1.cdb8f607de72ep+0, 0x1.f77743196657ap+0, -0x1.dd879ba809268p+1, 0x1.37053c10bce29p+1, -0x1.1bfa76c0a943ap-2, -0x1.2b5034c5e7cecp+0, 0x1.63e2260baa9fep+0, -0x1.a29913a0c0f2ep-1, 0x1.852867c8ceb36p-3, 0x1.9a9664fc9e679p-4, -0x1.c29f78e2de8f5p-4, 0x1.54d634445fcf7p-5, -0x1.41b2a5a54a663p-9, -0x1.225d9fec5c6e9p-8, 0x1.f9019974a7ddbp-10, -0x1.2c283714217e7p-12, -0x1.8e8742bbbfb21p-16, 0x1.c9f58c62dd5d4p-17, -0x1.61f6495ed1b8fp-20, -0x1.96b8b0f8a15e3p-25, 0x1.71f48c99d030bp-27, -0x1.b5fc8d66ab6dp-34, -0x1.c5963ee2273d3p-38, 0x1.6b4e6ce52480bp-45, 0x1.e67135f42b49bp-58, -0x1.6aff40a6dd5b4p-67, 0x1.6b5790e714dd8p-89, -0x0p+0}; + } + if constexpr (order == 4) { + return {0x0p+0, 0x1.002833198203cp-2, 0x1.74f145f5180b5p-1, -0x1.d40722c67b8b3p+2, 0x1.2af6f0f464bc5p+4, -0x1.a43135145799ap+4, 0x1.9a15ae041271p+4, -0x1.38d1bd49e9af3p+4, 0x1.6c6cdb14d7fe1p+3, -0x1.13619aaa119f9p+2, 0x1.d56ce1ec874a1p-1, -0x1.e42907ae7a264p-1, 0x1.e52911f9f6566p+0, -0x1.ee224ef8eb13dp+0, 0x1.1f26d6223d44dp+0, -0x1.5888435f57836p-2, -0x1.9e45fc4e6f7c9p-7, 0x1.dcd2d2ebfb6e4p-5, -0x1.93116bc1ac6b7p-6, 0x1.0e01783e342a4p-8, 0x1.31f3faa90de9fp-12, -0x1.f6b0df77a544p-13, 0x1.f05077a02c3acp-16, 0x1.2ec5b9d224e6cp-20, -0x1.47f2b0eb68edbp-22, 0x1.bcb021bf883a2p-29, 0x1.1bcefd6cfba52p-32, -0x1.34d97adc52a39p-39, -0x1.6f2c8c9ca395p-53, 0x1.34e43d9253e6fp-60, -0x1.352f98f0f2e49p-81, 0x0p+0}; + } + if constexpr (order == 5) { + return {0x0p+0, 0x1.e5d8b15d3664dp-1, -0x1.e7e4ae8313c98p+1, 0x1.643947f56174fp+1, 0x1.8bf77730624fbp+3, -0x1.39575fcf961c1p+5, 0x1.f6657cd6c7e2ap+5, -0x1.2981aaa66ca37p+6, 0x1.0cf300079688ep+6, -0x1.71528cd9cab13p+4, -0x1.13658826409b4p+6, 0x1.5ecf135e336b8p+7, -0x1.ca8fbd8754dc2p+7, 0x1.83a96558c6c07p+7, -0x1.9d91182e0786ap+6, 0x1.818f5ca05f024p+4, 0x1.4e782cc994095p+3, -0x1.7fba734a37797p+3, 0x1.361d7d826bb5bp+2, -0x1.85fee8307d591p-1, -0x1.fcc3205624ce5p-4, 0x1.30d54b861144bp-4, -0x1.4236c7ccc62dfp-7, -0x1.6b6d4bcc089efp-12, 0x1.251cb75a77a65p-13, -0x1.7df627db3ed38p-19, -0x1.6d7ba0319a18p-23, 0x1.047350b843565p-29, 0x1.ecabd0f857c51p-41, -0x1.035ef08b1273dp-49, 0x1.039e900e7fa13p-69, 0x0p+0}; + } + if constexpr (order == 6) { + return {0x0p+0, 0x1.5c435b4994699p+1, -0x1.45ad88073e625p+4, 0x1.1ac643e9c99f9p+6, -0x1.3bcd24e1c22f1p+7, 0x1.1132bead650e6p+8, -0x1.a3321607e3596p+8, 0x1.2bec4ce73b525p+9, -0x1.83ddd4224b9acp+9, 0x1.b1ad4241d86bfp+9, -0x1.9d7a3218170b3p+9, 0x1.5526f87e8214fp+9, -0x1.e996857ebd3fep+8, 0x1.186a9a24f3388p+8, -0x1.4f804f76b6d5cp+6, -0x1.84954fc1821p+5, 0x1.59efa11d2ec7p+6, -0x1.dac7ad3b33c96p+5, 0x1.62078796373e7p+4, -0x1.88bb023e9f2fap+1, -0x1.04b9160269b8ap+0, 0x1.18c6982acbd2dp-1, -0x1.508ddc9d3ccb4p-4, -0x1.539386e1415cfp-9, 0x1.9eab992a4b9abp-10, -0x1.980b92ff814ccp-15, -0x1.761c29381edd3p-19, 0x1.64e7e2ec4af2dp-25, 0x1.1823b743e4c41p-35, -0x1.623923d3ddbafp-44, 0x1.6290fa803758ep-63, 0x0p+0}; + } + if constexpr (order == 7) { + return {0x0p+0, 0x1.891443770e9f6p+2, -0x1.c4b28f7dbecf4p+5, 0x1.d994c46f08418p+7, -0x1.26defe09eb9e3p+9, 0x1.ddf577c4250f8p+9, -0x1.fd2079b0f3ddbp+9, 0x1.36152a2e286dp+9, 0x1.d8616a51db369p+6, -0x1.190b42892374cp+10, 0x1.36219b3961795p+11, -0x1.eed74001662f8p+11, 0x1.31c149450a5eap+12, -0x1.31807a4d8f7d9p+12, 0x1.07e37f0875c29p+12, -0x1.9ca0e06fa4e41p+11, 0x1.192392a49659fp+11, -0x1.28f7ef65a911cp+10, 0x1.8ef1182eeb70cp+8, -0x1.076216da5c43bp+5, -0x1.3734a9c9c5015p+5, 0x1.2e313dce4fbf1p+4, -0x1.913ecda1e3437p+1, -0x1.aba4e0591b35fp-4, 0x1.5578ca229685fp-4, -0x1.f3ff47839e58dp-9, -0x1.bd3a12076a4f5p-13, 0x1.29ffe91412a2ap-18, 0x1.5e7711914b059p-28, -0x1.267e3f1ece052p-36, 0x1.26c8d9be624c4p-54, -0x0p+0}; + } + if constexpr (order == 8) { + return {0x0p+0, 0x1.1c06072fbf26fp+3, -0x1.65d998749f19fp+6, 0x1.9d8978b96f57fp+8, -0x1.24c8d76a7f36dp+10, 0x1.21d479bc00698p+11, -0x1.bbc006c939353p+11, 0x1.2211c4425df9cp+12, -0x1.5c64ff1d8bf67p+12, 0x1.845a35a315834p+12, -0x1.87e6df0fbf8efp+12, 0x1.6504110de640cp+12, -0x1.2b9aa02be2b35p+12, 0x1.cebcfb329a57fp+11, -0x1.3e375c669dacp+11, 0x1.7d70c67fe8974p+10, -0x1.8fd6874952e8bp+9, 0x1.57b6f4096f1cfp+8, -0x1.3e2c004c73161p+6, -0x1.f1e0f66437532p+4, 0x1.39f676c722756p+5, -0x1.07f7de36ead71p+4, 0x1.6eaf02b444bc5p+1, 0x1.f8896c7b27aebp-4, -0x1.b78e4a3636f78p-4, 0x1.faf293c65fc89p-8, 0x1.a6b604defe6a9p-12, -0x1.9886be2865e4cp-17, -0x1.7c0bde2d4dd5p-26, 0x1.90aca39ea2e8bp-34, -0x1.91166efa6d0a9p-51, 0x0p+0}; + } + if constexpr (order == 9) { + return {0x0p+0, 0x1.58e7df673241ap+3, -0x1.c53a29616fa38p+6, 0x1.0cc18d57a1a2p+9, -0x1.7c92fc1b6ca39p+10, 0x1.6a1945d20b68ep+11, -0x1.fab771c0e1bafp+11, 0x1.254298acbb2d4p+12, -0x1.407f9dc95f9b1p+12, 0x1.53233c63dd8a8p+12, -0x1.3b528b3453998p+12, 0x1.e2ea2797d25e5p+11, -0x1.3d6169dd11c9cp+11, 0x1.75fce5d641404p+10, -0x1.2b5b50127f9f5p+9, -0x1.18e0518b142ecp+7, 0x1.ed1ee257a974bp+8, -0x1.f5a5a8d8a9b3cp+8, 0x1.920c943e9e1a2p+8, -0x1.22c1385412c46p+8, 0x1.4b1ba13f6628bp+7, -0x1.ec876f34dee07p+5, 0x1.641261f15a2bcp+3, 0x1.3bac7fcb6882p-1, -0x1.3ae0db5ff49e1p-1, 0x1.0ba445bef297cp-4, 0x1.c3804abda5b0fp-9, -0x1.3c78fba89f7e5p-13, -0x1.6e90a45b17e12p-22, 0x1.34c398a5dd485p-29, -0x1.351bbccd566d6p-45, 0x0p+0}; + } + if constexpr (order == 10) { + return {0x0p+0, 0x1.0cfd9304e9d0fp+3, -0x1.68c00ea69764dp+6, 0x1.b4a63a85c6a12p+8, -0x1.3c4fcf304828fp+10, 0x1.35efe9ab816f7p+11, -0x1.c3872b5b6dcd2p+11, 0x1.1261ac83f506cp+12, -0x1.39e1fa3f00834p+12, 0x1.5e4c9d364466fp+12, -0x1.6b72e41a84906p+12, 0x1.578fd4c404249p+12, -0x1.30faf3648505dp+12, 0x1.0174ad7c89821p+12, -0x1.942bc49f2f52ap+11, 0x1.25cbc7992fd64p+11, -0x1.914caac567631p+10, 0x1.f93f030387c4dp+9, -0x1.1b4f5dfc787bcp+9, 0x1.1df01b8a36a8bp+8, -0x1.048db6f3ab7c2p+7, 0x1.730bcb9c58bfcp+5, -0x1.09b56b87c1c8p+3, -0x1.4fb833b30fa7fp+0, 0x1.e38e1048601a6p-1, -0x1.ee07e572041f7p-4, -0x1.913ced3c0164bp-8, 0x1.0726b83c4032cp-11, 0x1.2751c6763466cp-20, -0x1.00ceb77e39cacp-26, 0x1.0123085a89101p-41, 0x0p+0}; + } + if constexpr (order == 11) { + return {0x0p+0, 0x1.6ddd33f198eb4p+2, -0x1.ef9ef6f596ce4p+5, 0x1.2bec86422c73p+8, -0x1.ab3138ae63b3cp+9, 0x1.90171accf1ae9p+10, -0x1.0b8279e6381aap+11, 0x1.21c7cbc3a51f5p+11, -0x1.3291c6bd3630dp+11, 0x1.52187d4f27825p+11, -0x1.5764b21031afp+11, 0x1.2d82b77758b7bp+11, -0x1.efcf6fd97e751p+10, 0x1.96b834131566ep+10, -0x1.34d67cf0a39aep+10, 0x1.9aafba6f0ff86p+9, -0x1.002f1ef9723b2p+9, 0x1.378956144d5bep+8, -0x1.48f6827b3eeb5p+7, 0x1.17de886be7cb4p+6, -0x1.abd1c377daaf4p+4, 0x1.18836fa0aedf1p+3, -0x1.72b11631904f7p-2, -0x1.93c736e0c44c1p+0, 0x1.74105b4ecfea7p-1, -0x1.a9382883de208p-4, -0x1.8ee02bc822713p-9, 0x1.b89c5ecf7a7b7p-11, 0x1.5051009d42a45p-19, -0x1.a9ba33acc416cp-25, 0x1.aa6a7d0ba8103p-39, -0x0p+0}; + } + if constexpr (order == 12) { + return {0x0p+0, 0x1.7e688b7526a77p+1, -0x1.044f66dd0bb35p+5, 0x1.39d2780b0ad2fp+7, -0x1.b63bb8898df09p+8, 0x1.86b367123a214p+9, -0x1.d8001c1817ddfp+9, 0x1.b397f071da311p+9, -0x1.9ca191acc971ep+9, 0x1.d28d7edb2db09p+9, -0x1.daeab5bf793f1p+9, 0x1.738e37d47cc22p+9, -0x1.0785a3e74df5ap+9, 0x1.a556a97ba7348p+8, -0x1.320671c41025dp+8, 0x1.33661041ead75p+7, -0x1.d86506577d508p+5, 0x1.9ebe065723855p+4, -0x1.ec9ee90429332p-1, -0x1.1034340999c87p+4, 0x1.04d7524f6aap+4, -0x1.2fcc89fd04e89p+3, 0x1.7c24bc012bffcp+2, -0x1.c84c145900f78p+1, 0x1.57bccbd9e4fcfp+0, -0x1.d81daf1af068dp-3, -0x1.20f9f72def1dfp-13, 0x1.c2f2ad7e016f5p-9, 0x1.baf6705e59cacp-17, -0x1.ae94eeab2dbd5p-22, 0x1.af91281d99389p-35, 0x0p+0}; + } + if constexpr (order == 13) { + return {0x0p+0, 0x1.a308ef1d16805p-1, -0x1.1df37cb20ef6dp+3, 0x1.5a47cc2daffcbp+5, -0x1.e7cc32d4c7f06p+6, 0x1.ba5aa6f58d154p+7, -0x1.137ebe2556bb6p+8, 0x1.07f96c27b79bap+8, -0x1.f176d6c3151d9p+7, 0x1.0c09a0e0bcbap+8, -0x1.12bf0f34a9a55p+8, 0x1.de16d55d65d2cp+7, -0x1.8c7b496d3d3fep+7, 0x1.56592506626bcp+7, -0x1.13d919c9693b3p+7, 0x1.8b69de5718a0ap+6, -0x1.15b78c90e7837p+6, 0x1.8188b8db550ffp+5, -0x1.e03c011f666acp+4, 0x1.12ed8b36e9864p+4, -0x1.36a5b057bc26fp+3, 0x1.3d2641cf67e9p+2, -0x1.11ef148707dfap+1, 0x1.c294da23fe2ap-1, -0x1.4f57e7e05e819p-2, 0x1.1ebd9964081cfp-4, 0x1.367917f76eee3p-14, -0x1.fdd37749c94d9p-10, -0x1.0fc0733cbc7d6p-22, 0x1.f945fb653cfdbp-22, -0x1.fb1bcfae6e46dp-34, 0x0p+0}; + } + if constexpr (order == 14) { + return {0x0p+0, 0x1.74ef139ad4e12p-3, -0x1.fd9d32fdef74p+0, 0x1.3320f17be8b7p+3, -0x1.a9e31dbd98dd1p+4, 0x1.73dbdd38a87f5p+5, -0x1.aa50f206f25c7p+5, 0x1.5e48ac9c2f1f2p+5, -0x1.20d7a78e95ecfp+5, 0x1.4350b94e5aa2ep+5, -0x1.5499ff05228dep+5, 0x1.0d8c7214ffee1p+5, -0x1.8fe88996cfa9ap+4, 0x1.63da6bffb7323p+4, -0x1.24223f5c1b9d9p+4, 0x1.7851e19176716p+3, -0x1.e4fd178fcd0efp+2, 0x1.610a439acb289p+2, -0x1.ae4c3e147b71cp+1, 0x1.a6fe28ab7ffaap+0, -0x1.ccc920f98175ep-1, 0x1.f9389387bff6bp-2, -0x1.8612de961fd02p-3, 0x1.fd43fc0e7883fp-5, -0x1.aafa1e0c4a87p-6, 0x1.b638737fa8e8fp-8, 0x1.071682a1f5058p-11, -0x1.a84c3f530239bp-12, 0x1.a20c2374a0f67p-18, 0x1.e7f1c0adda0f6p-23, -0x1.eb089a4058efep-34, 0x0p+0}; + } + if constexpr (order == 15) { + return {0x0p+0, 0x1.31c729360063ep-6, -0x1.a21aa8a66a683p-3, 0x1.f656a46fa2a91p-1, -0x1.589b4fca92a9fp+1, 0x1.25049558932c2p+2, -0x1.3b0f087615a27p+2, 0x1.bed87f332745cp+1, -0x1.37fe75fa2aa3bp+1, 0x1.75c34ae38a12p+1, -0x1.9f32b219f201fp+1, 0x1.2a50b5ebe798ep+1, -0x1.80aff2523d4b3p+0, 0x1.71f9af43c19f1p+0, -0x1.40d21595459ccp+0, 0x1.6edc3b8de7cbdp-1, -0x1.abb5cf29e076bp-2, 0x1.5fdcb9c5e1f88p-2, -0x1.af4e9b9242255p-3, 0x1.57b33e4d63cb5p-4, -0x1.736294d370decp-5, 0x1.e1a61d7964669p-6, -0x1.38138139d6cd8p-7, 0x1.a99b874715d59p-10, -0x1.191ada841d112p-10, 0x1.44a23a1750afbp-12, 0x1.4db128e094988p-13, -0x1.2cad37f3dbf9ep-14, 0x1.f38c667f69482p-19, 0x1.c870773604d03p-24, -0x1.cdd01a024c711p-34, -0x0p+0}; + } + } + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0L, 0xb.3a3846107e93c71p-16L, 0x9.3e6d9853c4d4d26p-8L, 0xf.9fcd2109d2c70bp-5L, 0xc.50d8731f3b477fep-4L, -0xe.800409a73d92674p-5L, 0x8.364c0bfb08f4c1cp-5L, -0xa.7608480379d5af6p-6L, 0xd.c9e1911927a4784p-7L, -0x8.4fafa041f14b7dbp-7L, 0x8.5b53aefd12e6ae9p-8L, -0xd.0bf5c01ffba2e16p-10L, 0xe.6d0c69fb315533p-12L, -0x8.c0ab49d8f284eep-14L, -0xa.a3e26aabf73f753p-18L, 0xd.0ea8c3bcb0cd49bp-18L, -0xf.dc862acd1a0536cp-20L, 0x8.42dddac61ee2f0bp-22L, 0xa.50b750c53c5492bp-25L, -0x9.d87c1e77be4e6b7p-26L, 0xa.134a86cdb5e53d1p-31L, 0xd.67ae641bc3e3b4bp-32L, 0xe.3efe0e5e6ab002dp-40L, -0xc.cd24c38a13a8934p-40L, 0x8.62a7b6ddea955d3p-45L, 0xb.05b10aa4250e4b5p-52L, -0xb.1b0384fcfca5df4p-57L, 0xf.98453c9a684c9f5p-65L, -0xe.e6c1e66bda07395p-77L, -0xf.a640e8482ad4089p-90L, 0xf.aa0d3dd7d200c8bp-115L, -0x0p+0L}; + } + if constexpr (order == 1) { + return {0x0p+0L, 0xa.f15f1ffe0172e5bp-13L, 0x8.8aacb719a8764e8p-6L, 0xc.70337610fe3509fp-4L, -0xc.d1d74d153495bebp-4L, -0xd.a74119cbe7c3dc1p-5L, 0x9.26bcdd7c845def1p-4L, -0xc.b7f844c8550ff96p-5L, 0xb.e7f83cc2cea254cp-6L, -0x9.d97b7de092f7fa8p-8L, -0xc.621cb12d798fd78p-9L, 0xe.c17b081c7070057p-9L, -0xe.984243655303eaap-10L, 0xd.c65378f292ec7e1p-12L, 0xa.751369469843a67p-16L, -0xa.22a84a59f7d64eap-15L, 0x8.8b7da84ad94ceep-18L, 0xf.37a3482ba1e794ep-19L, -0xb.99225ab2889ca73p-20L, 0x8.82f186bf65a2e47p-23L, 0xc.2f72cc72e3b957cp-26L, -0xa.d64f8e3b5739183p-28L, 0xe.bc4f9eb81d6e738p-33L, 0xc.6af1f10013f432fp-38L, -0xe.459c19e1dbb49cp-40L, 0x9.c7f205ccc827418p-46L, 0xf.a9268cec210502dp-52L, -0xd.39dbeaf2abf3a86p-60L, -0xe.29902305dd00cf8p-71L, 0xd.29aa6f4daf25f05p-84L, -0xd.2cdc8c67843fbf1p-108L, 0x0p+0L}; + } + if constexpr (order == 2) { + return {0x0p+0L, 0x9.4af7f560a96bcb2p-10L, 0xc.eb0e623f2ef1314p-5L, 0x8.b0ea0b5b3b1bf47p-5L, -0xa.dbd22b319bb54d5p-2L, 0xe.88ba684f6e872d5p-2L, -0xb.27ea9053310cf1ap-2L, 0x8.28b46d4b2423017p-2L, -0xb.2ba844e22c3642p-3L, 0xd.1c5f85a9fa1b98bp-4L, -0xc.44d8b76ba978ba9p-5L, 0x8.a963b5c62d530fcp-6L, -0x8.da64cc3b6900f46p-8L, 0xc.83f8f45a13145ecp-11L, -0xa.458a9102e93f63ap-16L, -0xd.193b6a58da0f707p-14L, 0x8.c8045595d6873c2p-14L, -0xa.50797e1d1ff33a2p-16L, 0xd.8b6c298de6cba8p-20L, 0x9.e4de48cf0724d64p-22L, 0xc.4c92a6ba0c8c4adp-27L, -0xf.001d6ffa3353439p-27L, -0xd.88c7c33e6b26e41p-30L, 0xd.4740e7cd95fa76bp-33L, 0xa.39023ea674090bcp-39L, 0x8.5e2a378903582b6p-44L, -0xa.dbc3bc7640960d4p-50L, -0xb.ae2bb9813575fa4p-56L, -0xa.228707fbc919e5bp-67L, 0xb.a31cd9a74b94ec4p-79L, -0xb.a5f0a4105eaa2e2p-102L, -0x0p+0L}; + } + if constexpr (order == 3) { + return {0x0p+0L, 0xd.6f0633d36fb15fep-8L, 0xe.145a1853af94c61p-4L, -0xa.fa667dd213e750bp-2L, 0xe.6dc7b03ef3972cbp-3L, 0xf.bbba18cb32bd3c5p-3L, -0xe.ec3cdd404933d4fp-2L, 0x9.b829e085e714688p-2L, -0x8.dfd3b6054a1d126p-5L, -0x9.5a81a62f3e7613dp-3L, 0xb.1f11305d54fef5bp-3L, -0xd.14c89d060796ef7p-4L, 0xc.29433e46759ad44p-6L, 0xc.d4b327e4f33c651p-7L, -0xe.14fbc716f47a93ep-7L, 0xa.a6b1a222fe7b777p-8L, -0xa.0d952d2a5331434p-12L, -0x9.12ecff62e374622p-11L, 0xf.c80ccba53eedb19p-13L, -0x9.6141b8a10bf3aa6p-15L, -0xc.743a15ddfd9089p-19L, 0xe.4fac6316eae9c34p-20L, -0xb.0fb24af68dc7671p-23L, -0xc.b5c587c50af1901p-28L, 0xb.8fa464ce81856ffp-30L, -0xd.afe46b355b67eadp-37L, -0xe.2cb1f71139e968ap-41L, 0xb.5a73672924054c6p-48L, 0xf.3389afa15a4d6d7p-61L, -0xb.57fa0536eada04ep-70L, 0xb.5abc8738a6ec098p-92L, -0x0p+0L}; + } + if constexpr (order == 4) { + return {0x0p+0L, 0x8.014198cc101dfabp-5L, 0xb.a78a2fa8c05a46p-4L, -0xe.a0391633dc59632p-1L, 0x9.57b787a325e2b8ep+1L, -0xd.2189a8a2bccd13fp+1L, 0xc.d0ad7020938821dp+1L, -0x9.c68dea4f4d7949p+1L, 0xb.6366d8a6bff083fp+0L, -0x8.9b0cd5508cfcbdap-1L, 0xe.ab670f643a5062fp-4L, -0xf.21483d73d132347p-4L, 0xf.29488fcfb2b3205p-3L, -0xf.711277c7589ea5dp-3L, 0x8.f936b111ea265a4p-3L, -0xa.c4421afabc1b145p-5L, -0xc.f22fe2737be4b07p-10L, 0xe.e696975fdb72006p-8L, -0xc.988b5e0d635b9p-9L, 0x8.700bc1f1a15234ap-11L, 0x9.8f9fd5486f4f6f1p-15L, -0xf.b586fbbd2a200d7p-16L, 0xf.8283bd0161d5d44p-19L, 0x9.762dce912735e76p-23L, -0xa.3f95875b476d467p-25L, 0xd.e5810dfc41d0fc9p-32L, 0x8.de77eb67dd2905dp-35L, -0x9.a6cbd6e2951c534p-42L, -0xb.796464e51ca7defp-56L, 0x9.a721ec929f3744cp-63L, -0x9.a97cc78797246d9p-84L, 0x0p+0L}; + } + if constexpr (order == 5) { + return {0x0p+0L, 0xf.2ec58ae9b326a91p-4L, -0xf.3f2574189e4c21p-2L, 0xb.21ca3fab0ba7711p-2L, 0xc.5fbbb983127d9a8p+0L, -0x9.cabafe7cb0e079fp+2L, 0xf.b32be6b63f14cdcp+2L, -0x9.4c0d5533651b59dp+3L, 0x8.6798003cb446c2fp+3L, -0xb.8a9466ce5589bd2p+1L, -0x8.9b2c413204da0b9p+3L, 0xa.f6789af19b5be1p+4L, -0xe.547dec3aa6e0c9p+4L, 0xc.1d4b2ac6360394ap+4L, -0xc.ec88c1703c353c7p+3L, 0xc.0c7ae502f811c1cp+1L, 0xa.73c1664ca04a6f6p+0L, -0xb.fdd39a51bbcb87p+0L, 0x9.b0ebec135dad9dap-1L, -0xc.2ff74183eac8757p-4L, -0xf.e61902b12672b5fp-7L, 0x9.86aa5c308a25804p-7L, -0xa.11b63e66316fb48p-10L, -0xb.5b6a5e6044f76b4p-15L, 0x9.28e5bad3bd32814p-16L, -0xb.efb13ed9f69bfabp-22L, -0xb.6bdd018cd0bfce3p-26L, 0x8.239a85c21ab28b1p-32L, 0xf.655e87c2be28938p-44L, -0x8.1af78458939ea43p-52L, 0x8.1cf48073fd095efp-72L, 0x0p+0L}; + } + if constexpr (order == 6) { + return {0x0p+0L, 0xa.e21ada4ca34ca18p-2L, -0xa.2d6c4039f3128bdp+1L, 0x8.d6321f4e4cfc7p+3L, -0x9.de69270e1178454p+4L, 0x8.8995f56b287327p+5L, -0xd.1990b03f1acb0aep+5L, 0x9.5f626739da926f4p+6L, -0xc.1eeea1125cd5fdbp+6L, 0xd.8d6a120ec35f6eap+6L, -0xc.ebd190c0b85945bp+6L, 0xa.a937c3f410a79b7p+6L, -0xf.4cb42bf5e9fec33p+5L, 0x8.c354d12799c3f3ap+5L, -0xa.7c027bb5b6adc35p+3L, -0xc.24aa7e0c10803ep+2L, 0xa.cf7d08e97637cb2p+3L, -0xe.d63d69d99e4aebp+2L, 0xb.103c3cb1b9f39dbp+1L, -0xc.45d811f4f97cc5dp-2L, -0x8.25c8b0134dc4eacp-3L, 0x8.c634c1565e9668ap-4L, -0xa.846ee4e9e65a1e2p-7L, -0xa.9c9c370a0ae7abcp-12L, 0xc.f55cc9525cd59bdp-13L, -0xc.c05c97fc0a662abp-18L, -0xb.b0e149c0f6e94f3p-22L, 0xb.273f17625796a99p-28L, 0x8.c11dba1f262097fp-38L, -0xb.11c91e9eedd7769p-47L, 0xb.1487d401bac7208p-66L, 0x0p+0L}; + } + if constexpr (order == 7) { + return {0x0p+0L, 0xc.48a21bb874fadacp-1L, -0xe.25947bedf679c74p+2L, 0xe.cca62378420be4ep+4L, -0x9.36f7f04f5cf1891p+6L, 0xe.efabbe21287bc6p+6L, -0xf.e903cd879eed94cp+6L, 0x9.b0a951714367f56p+6L, 0xe.c30b528ed9b461fp+3L, -0x8.c85a14491ba6385p+7L, 0x9.b10cd9cb0bcab3ep+8L, -0xf.76ba000b317bf3bp+8L, 0x9.8e0a4a2852f4c19p+9L, -0x9.8c03d26c7bec5cfp+9L, 0x8.3f1bf843ae145d5p+9L, -0xc.e507037d2720736p+8L, 0x8.c91c9524b2cfadfp+8L, -0x9.47bf7b2d488e112p+7L, 0xc.7788c1775b861dcp+5L, -0x8.3b10b6d2e21d939p+2L, -0x9.b9a54e4e280a5b6p+2L, 0x9.7189ee727df88e1p+1L, -0xc.89f66d0f1a1b57cp-2L, -0xd.5d2702c8d9af7bcp-7L, 0xa.abc65114b42fbafp-7L, -0xf.9ffa3c1cf2c6819p-12L, -0xd.e9d0903b527a85p-16L, 0x9.4fff48a09514e9bp-21L, 0xa.f3b88c8a582c5bap-31L, -0x9.33f1f8f67028c1p-39L, 0x9.3646cdf31261e85p-57L, -0x0p+0L}; + } + if constexpr (order == 8) { + return {0x0p+0L, 0x8.e030397df9379acp+0L, -0xb.2eccc3a4f8cf9fbp+3L, 0xc.ec4bc5cb7abf8aap+5L, -0x9.2646bb53f9b6b84p+7L, 0x9.0ea3cde0034bd8ap+8L, -0xd.de003649c9a9964p+8L, 0x9.108e2212efce172p+9L, -0xa.e327f8ec5fb3bd6p+9L, 0xc.22d1ad18ac1a3e5p+9L, -0xc.3f36f87dfc77a18p+9L, 0xb.2820886f3206234p+9L, -0x9.5cd5015f159aa05p+9L, 0xe.75e7d994d2bf56ep+8L, -0x9.f1bae334ed5fea7p+8L, 0xb.eb8633ff44b9f04p+7L, -0xc.7eb43a4a9745482p+6L, 0xa.bdb7a04b78e780bp+5L, -0x9.f160026398b080cp+3L, -0xf.8f07b321ba98ffdp+1L, 0x9.cfb3b63913ab26dp+2L, -0x8.3fbef1b756b8bfp+1L, 0xb.757815a225e2672p-2L, 0xf.c44b63d93d7545p-7L, -0xd.bc7251b1b7bbe9bp-7L, 0xf.d7949e32fe445dap-11L, 0xd.35b026f7f354a7ap-15L, -0xc.c435f1432f26328p-20L, -0xb.e05ef16a6ea832dp-29L, 0xc.85651cf5174561cp-37L, -0xc.88b377d3685495ep-54L, 0x0p+0L}; + } + if constexpr (order == 9) { + return {0x0p+0L, 0xa.c73efb39920cedbp+0L, -0xe.29d14b0b7d1c041p+3L, 0x8.660c6abd0d0fda4p+6L, -0xb.e497e0db651c4abp+7L, 0xb.50ca2e905b46c5dp+8L, -0xf.d5bb8e070dd7927p+8L, 0x9.2a14c565d96a24dp+9L, -0xa.03fcee4afcd8902p+9L, 0xa.9919e31eec53f8cp+9L, -0x9.da9459a29ccbc9bp+9L, 0xf.17513cbe92f2a28p+8L, -0x9.eb0b4ee88e4de52p+8L, 0xb.afe72eb20a022bp+7L, -0x9.5ada8093fcfab6ap+6L, -0x8.c7028c58a1762e5p+4L, 0xf.68f712bd4ba559bp+5L, -0xf.ad2d46c54d9e03ap+5L, 0xc.9064a1f4f0d1331p+5L, -0x9.1609c2a09622ff8p+5L, 0xa.58dd09fb31458efp+4L, -0xf.643b79a6f703a82p+2L, 0xb.20930f8ad15e1ebp+0L, 0x9.dd63fe5b440fe97p-4L, -0x9.d706daffa4f07edp-4L, 0x8.5d222df794bdd1ep-7L, 0xe.1c0255ed2d877d5p-12L, -0x9.e3c7dd44fbf26e9p-16L, -0xb.748522d8bf08c1ap-25L, 0x9.a61cc52eea42bddp-32L, -0x9.a8dde66ab36adabp-48L, 0x0p+0L}; + } + if constexpr (order == 10) { + return {0x0p+0L, 0x8.67ec98274e874f4p+0L, -0xb.46007534bb26601p+3L, 0xd.a531d42e35090ebp+5L, -0x9.e27e798241476f8p+7L, 0x9.af7f4d5c0b7b569p+8L, -0xe.1c395adb6e69289p+8L, 0x8.930d641fa835ff8p+9L, -0x9.cf0fd1f80419d17p+9L, 0xa.f264e9b223377bap+9L, -0xb.5b9720d42482e67p+9L, 0xa.bc7ea62021246d6p+9L, -0x9.87d79b24282e6fbp+9L, 0x8.0ba56be44c10be5p+9L, -0xc.a15e24f97a95118p+8L, 0x9.2e5e3cc97eb1e7ap+8L, -0xc.8a65562b3b184f6p+7L, 0xf.c9f8181c3e2680dp+6L, -0x8.da7aefe3c3dde19p+6L, 0x8.ef80dc51b545874p+5L, -0x8.246db79d5be0e64p+4L, 0xb.985e5ce2c5fe107p+2L, -0x8.4dab5c3e0e3fdbep+0L, -0xa.7dc19d987d3f778p-3L, 0xf.1c70824300d3066p-4L, -0xf.703f2b9020fb9c6p-7L, -0xc.89e769e00b25ab7p-11L, 0x8.3935c1e20195fc1p-14L, 0x9.3a8e33b1a335de3p-23L, -0x8.0675bbf1ce55e11p-29L, 0x8.091842d44880a98p-44L, 0x0p+0L}; + } + if constexpr (order == 11) { + return {0x0p+0L, 0xb.6ee99f8cc759e4bp-1L, -0xf.7cf7b7acb67220ap+2L, 0x9.5f6432116397da5p+5L, -0xd.5989c5731d9e0f1p+6L, 0xc.80b8d6678d74968p+7L, -0x8.5c13cf31c0d515cp+8L, 0x9.0e3e5e1d28fa819p+8L, -0x9.948e35e9b18657fp+8L, 0xa.90c3ea793c12aedp+8L, -0xa.bb2590818d7801fp+8L, 0x9.6c15bbbac5bd569p+8L, -0xf.7e7b7ecbf3a84e5p+7L, 0xc.b5c1a098ab36e4fp+7L, -0x9.a6b3e7851cd6ca3p+7L, 0xc.d57dd3787fc2f5fp+6L, -0x8.0178f7cb91d933p+6L, 0x9.bc4ab0a26adf067p+5L, -0xa.47b413d9f75a975p+4L, 0x8.bef4435f3e59d64p+3L, -0xd.5e8e1bbed57a092p+1L, 0x8.c41b7d0576f88b8p+0L, -0xb.9588b18c827b5eap-5L, -0xc.9e39b70622606d2p-3L, 0xb.a082da767f5360bp-4L, -0xd.49c1441ef103d27p-7L, -0xc.77015e41138988ap-12L, 0xd.c4e2f67bd3dbb98p-14L, 0xa.828804ea1522a4ep-22L, -0xd.4dd19d6620b5d5fp-28L, 0xd.5353e85d40818dap-42L, -0x0p+0L}; + } + if constexpr (order == 12) { + return {0x0p+0L, 0xb.f3445ba9353ba5cp-2L, -0x8.227b36e85d9aaf5p+2L, 0x9.ce93c0585697ae1p+4L, -0xd.b1ddc44c6f84b46p+5L, 0xc.359b3891d109cd3p+6L, -0xe.c000e0c0beef91cp+6L, 0xd.9cbf838ed188ae1p+6L, -0xc.e50c8d664b8f00fp+6L, 0xe.946bf6d96d84894p+6L, -0xe.d755adfbc9f852fp+6L, 0xb.9c71bea3e610ea4p+6L, -0x8.3c2d1f3a6face9p+6L, 0xd.2ab54bdd39a4207p+5L, -0x9.90338e20812e975p+5L, 0x9.9b30820f56ba5f5p+4L, -0xe.c32832bbea8400dp+2L, 0xc.f5f032b91c2a8d1p+1L, -0xf.64f748214999222p-4L, -0x8.81a1a04cce4348p+1L, 0x8.26ba927b54fff92p+1L, -0x9.7e644fe827446adp+0L, 0xb.e125e0095ffe3e9p-1L, -0xe.4260a2c807bbd9ap-2L, 0xa.bde65ecf27e7508p-3L, -0xe.c0ed78d78346885p-6L, -0x9.07cfb96f78ef479p-16L, 0xe.17956bf00b7a939p-12L, 0xd.d7b382f2ce56194p-20L, -0xd.74a775596dea6ap-25L, 0xd.7c8940ecc9c488dp-38L, 0x0p+0L}; + } + if constexpr (order == 13) { + return {0x0p+0L, 0xd.184778e8b402badp-4L, -0x8.ef9be59077b66a9p+0L, 0xa.d23e616d7fe5968p+2L, -0xf.3e6196a63f82e61p+3L, 0xd.d2d537ac68aa3c8p+4L, -0x8.9bf5f12ab5dae19p+5L, 0x8.3fcb613dbcdd0e4p+5L, -0xf.8bb6b618a8ec653p+4L, 0x8.604d0705e5cffc7p+5L, -0x8.95f879a54d2a806p+5L, 0xe.f0b6aaeb2e95db1p+4L, -0xc.63da4b69e9fec14p+4L, 0xa.b2c92833135e147p+4L, -0x8.9ec8ce4b49d9743p+4L, 0xc.5b4ef2b8c504f17p+3L, -0x8.adbc64873c1b94ap+3L, 0xc.0c45c6daa87f51cp+2L, -0xf.01e008fb335633p+1L, 0x8.976c59b74c322cp+1L, -0x9.b52d82bde13767bp+0L, 0x9.e9320e7b3f47defp-1L, -0x8.8f78a4383efd09p-2L, 0xe.14a6d11ff14fe9cp-4L, -0xa.7abf3f02f40c74p-5L, 0x8.f5eccb2040e7b75p-7L, 0x9.b3c8bfbb7771784p-17L, -0xf.ee9bba4e4a6c8ddp-13L, -0x8.7e0399e5e3eb2bep-25L, 0xf.ca2fdb29e7ed48cp-25L, -0xf.d8de7d73723689ep-37L, 0x0p+0L}; + } + if constexpr (order == 14) { + return {0x0p+0L, 0xb.a7789cd6a708f8p-6L, -0xf.ece997ef7b9fe29p-3L, 0x9.99078bdf45b839ap+0L, -0xd.4f18edecc6e84b2p+1L, 0xb.9edee9c543fa832p+2L, -0xd.5287903792e3955p+2L, 0xa.f24564e178f8f8p+2L, -0x9.06bd3c74af67abfp+2L, 0xa.1a85ca72d516d28p+2L, -0xa.a4cff829146ee94p+2L, 0x8.6c6390a7ff70509p+2L, -0xc.7f444cb67d4d2a9p+1L, 0xb.1ed35ffdb991773p+1L, -0x9.2111fae0dceca83p+1L, 0xb.c28f0c8bb38af61p+0L, -0xf.27e8bc7e687797cp-1L, 0xb.08521cd65944bcep-1L, -0xd.7261f0a3db8e14ap-2L, 0xd.37f1455bffd4c88p-3L, -0xe.664907cc0baeeacp-4L, 0xf.c9c49c3dffb59aap-5L, -0xc.3096f4b0fe81145p-6L, 0xf.ea1fe073c41f722p-8L, -0xd.57d0f0625437c47p-9L, 0xd.b1c39bfd474775fp-11L, 0x8.38b4150fa82bf11p-14L, -0xd.4261fa9811cdb2p-15L, 0xd.10611ba507b38p-21L, 0xf.3f8e056ed07b157p-26L, -0xf.5844d202c77f32cp-37L, 0x0p+0L}; + } + if constexpr (order == 15) { + return {0x0p+0L, 0x9.8e3949b0031f00ap-9L, -0xd.10d5453353419edp-6L, 0xf.b2b5237d1548b4fp-4L, -0xa.c4da7e54954f883p-2L, 0x9.2824aac49960d3ep-1L, -0x9.d87843b0ad13405p-1L, 0xd.f6c3f9993a2dfbdp-2L, -0x9.bff3afd1551db4ap-2L, 0xb.ae1a571c508fe19p-2L, -0xc.f99590cf900f84fp-2L, 0x9.5285af5f3cc721cp-2L, -0xc.057f9291ea599a1p-3L, 0xb.8fcd7a1e0cf84a9p-3L, -0xa.0690acaa2ce5ec5p-3L, 0xb.76e1dc6f3e5e678p-4L, -0xd.5dae794f03b58fap-5L, 0xa.fee5ce2f0fc3e14p-5L, -0xd.7a74dc92112ab1p-6L, 0xa.bd99f26b1e5a94cp-7L, -0xb.9b14a69b86f63cfp-8L, 0xf.0d30ebcb2334763p-9L, -0x9.c09c09ceb66c13bp-10L, 0xd.4cdc3a38aeac8ap-13L, -0x8.c8d6d420e888ec5p-13L, 0xa.2511d0ba857d42dp-15L, 0xa.6d894704a4c3cb1p-16L, -0x9.6569bf9edfcf3d1p-17L, 0xf.9c6333fb4a41095p-22L, 0xe.4383b9b026817b9p-27L, -0xe.6e80d0126388779p-37L, -0x0p+0L}; + } + } + #ifdef BOOST_HAS_FLOAT128 + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {0x0p+0Q, 0x1.674708c20fd278e13cb308fc018cp-13Q, 0x1.27cdb30a789a9a4cba57381b8109p-5Q, 0x1.f3f9a4213a58e15fea805c6fce04p-2Q, 0x1.8a1b0e63e768effc8742d136ac68p-1Q, -0x1.d0008134e7b24ce7a0bdb2d5e174p-2Q, 0x1.06c9817f611e98379b152a389faep-2Q, -0x1.4ec109006f3ab5eb9ef4b4145d22p-3Q, 0x1.b93c322324f48f0734b615fc988cp-4Q, -0x1.09f5f4083e296fb6c1df50020f4ap-4Q, 0x1.0b6a75dfa25cd5d117e101973337p-5Q, -0x1.a17eb803ff745c2b927f4b56bb4ap-7Q, 0x1.cda18d3f662aa65f684ad290726ep-9Q, -0x1.1815693b1e509dbfebb4547eb7b2p-11Q, -0x1.547c4d557ee7eea60970ca463ebcp-15Q, 0x1.a1d518779619a935a6506c218d65p-15Q, -0x1.fb90c559a340a6d74429771a6508p-17Q, 0x1.085bbb58c3dc5e159337591d11dp-19Q, 0x1.4a16ea18a78a9255137a36b6eea7p-22Q, -0x1.3b0f83cef7c9cd6e4992ef7a8df5p-23Q, 0x1.426950d9b6bca7a253eba2c282edp-28Q, 0x1.acf5cc83787c76964322f9b1342cp-29Q, 0x1.c7dfc1cbcd560059e1fa3bbb0d88p-37Q, -0x1.99a4987142751268f68b0c6ed2ddp-37Q, 0x1.0c54f6dbbd52aba64c70d9892a39p-42Q, 0x1.60b6215484a1c96af7151c514271p-49Q, -0x1.6360709f9f94bbe775bd0ffbecdcp-54Q, 0x1.f308a7934d0993ea0193288827f6p-62Q, -0x1.dcd83ccd7b40e72afa7a2bb7cfc1p-74Q, -0x1.f4c81d09055a8112f9a8f0e29d27p-87Q, 0x1.f541a7bafa4019158f37f50aca0cp-112Q, -0x0p+0Q}; + } + if constexpr (order == 1) { + return {0x0p+0Q, 0x1.5e2be3ffc02e5cb63d505e4d41fep-10Q, 0x1.115596e3350ec9cfc7fd8b282be7p-3Q, 0x1.8e066ec21fc6a13efd57c0a1a877p-1Q, -0x1.9a3ae9a2a692b7d6fe0312f42f92p-1Q, -0x1.b4e823397cf87b829664fcfb60e4p-2Q, 0x1.24d79baf908bbde12d97a94a7ed1p-1Q, -0x1.96ff08990aa1ff2b3a6156b3a6a7p-2Q, 0x1.7cff079859d44a97134acb0b37c4p-3Q, -0x1.3b2f6fbc125eff4f9e00971a7fffp-5Q, -0x1.8c439625af31faef37a9ac49e531p-6Q, 0x1.d82f61038e0e00ad9adf79408fc1p-6Q, -0x1.d308486caa607d54998083598b6bp-7Q, 0x1.b8ca6f1e525d8fc1aecc19124973p-9Q, 0x1.4ea26d28d30874cd6f1bece4d064p-13Q, -0x1.4455094b3efac9d3c28631c94f7ap-12Q, 0x1.116fb5095b299dc0400b6814e25bp-15Q, 0x1.e6f46905743cf29b32a5a94efc8dp-16Q, -0x1.73244b56511394e5623a6c13b538p-17Q, 0x1.105e30d7ecb45c8d929e54615a9cp-20Q, 0x1.85ee598e5c772af7b4423f5e48b1p-23Q, -0x1.5ac9f1c76ae72306c6963aa9eb21p-25Q, 0x1.d789f3d703adce6fceeb7470eb4ep-30Q, 0x1.8d5e3e20027e865e92d2141a2b67p-35Q, -0x1.c8b3833c3b76938050c849f3c889p-37Q, 0x1.38fe40b99904e82fbd88d14cb2f1p-43Q, 0x1.f524d19d8420a05a730c8d14360bp-49Q, -0x1.a73b7d5e557e750b97979bfe8dccp-57Q, -0x1.c5320460bba019effc9564690e27p-68Q, 0x1.a5354de9b5e4be0a26cfffd8bd46p-81Q, -0x1.a59b918cf087f7e28a66eadc804dp-105Q, 0x0p+0Q}; + } + if constexpr (order == 2) { + return {0x0p+0Q, 0x1.295efeac152d79633d42d6d9172ap-7Q, 0x1.9d61cc47e5de2628b18136c91d91p-2Q, 0x1.161d416b67637e8de5329814da2p-2Q, -0x1.5b7a45663376a9aa5f95ed876f1cp+1Q, 0x1.d1174d09edd0e5a9b8dec824cdfdp+1Q, -0x1.64fd520a66219e33ceb19171c86dp+1Q, 0x1.05168da96484602e8bf4113ac457p+1Q, -0x1.6575089c4586c8407b43149ab041p+0Q, 0x1.a38bf0b53f437316576c7b5f768p-1Q, -0x1.889b16ed752f17512574ee2082eap-2Q, 0x1.152c76b8c5aa61f7d1f86545ce6dp-3Q, -0x1.1b4c99876d201e8bbadda8305d7dp-5Q, 0x1.907f1e8b42628bd87c6dfaa4224dp-8Q, -0x1.48b152205d27ec7322d3d940e06dp-13Q, -0x1.a3276d4b1b41ee0d43115b5aa5e8p-11Q, 0x1.19008ab2bad0e78321ce13187997p-11Q, -0x1.4a0f2fc3a3fe6743d3250b9f059bp-13Q, 0x1.b16d8531bcd974ffcfcfb27586b6p-17Q, 0x1.3c9bc919e0e49ac8c1ec9b7c733dp-19Q, 0x1.899254d74191895a0ee7c7e36bb2p-24Q, -0x1.e003adff466a6871b6189e1534p-24Q, -0x1.b118f867cd64dc8214de14f222d4p-27Q, 0x1.a8e81cf9b2bf4ed6a7f80b7fef41p-30Q, 0x1.472047d4ce812177c2886070e70ap-36Q, 0x1.0bc546f1206b056c51ef6c4e49f4p-41Q, -0x1.5b78778ec812c1a8126f0f850a88p-47Q, -0x1.75c5773026aebf4866564852975ap-53Q, -0x1.4450e0ff79233cb66d7ae040758fp-64Q, 0x1.74639b34e9729d879c349c615547p-76Q, -0x1.74be14820bd545c3f1e6ecd10653p-99Q, -0x0p+0Q}; + } + if constexpr (order == 3) { + return {0x0p+0Q, 0x1.ade0c67a6df62bfb0e80195f5a2fp-5Q, 0x1.c28b430a75f298c1d73bb81e4847p-1Q, -0x1.5f4ccfba427cea15c66f4a5c1f37p+1Q, 0x1.cdb8f607de72e596ea568a0387dfp+0Q, 0x1.f77743196657a78ad5bf74421206p+0Q, -0x1.dd879ba809267a9d7904ab43625dp+1Q, 0x1.37053c10bce28d1022d31ac10de9p+1Q, -0x1.1bfa76c0a943a24b6df5bb2a1509p-2Q, -0x1.2b5034c5e7cec27aa44e7ea3cb6cp+0Q, 0x1.63e2260baa9fdeb5f048ba37b6ebp+0Q, -0x1.a29913a0c0f2ddeebb2bd3c28a1p-1Q, 0x1.852867c8ceb35a88f788b40867b1p-3Q, 0x1.9a9664fc9e678ca180654356d53fp-4Q, -0x1.c29f78e2de8f527b7cd8a08d3865p-4Q, 0x1.54d634445fcf6eedbc5dccf05e12p-5Q, -0x1.41b2a5a54a66286808252915cbfp-9Q, -0x1.225d9fec5c6e8c447caf2b42dbedp-8Q, 0x1.f9019974a7ddb631ebee782882ddp-10Q, -0x1.2c283714217e754b55528b629523p-12Q, -0x1.8e8742bbbfb2111f9226dbaeba4ep-16Q, 0x1.c9f58c62dd5d38676514b49cb9bcp-17Q, -0x1.61f6495ed1b8ece209fc78f1e52ap-20Q, -0x1.96b8b0f8a15e32028c8ee00782fdp-25Q, 0x1.71f48c99d030adfe377a70568859p-27Q, -0x1.b5fc8d66ab6cfd5a83337a0ceda7p-34Q, -0x1.c5963ee2273d2d13e0940bb14697p-38Q, 0x1.6b4e6ce52480a98b4ad64082bf85p-45Q, 0x1.e67135f42b49adad0031055a34f8p-58Q, -0x1.6aff40a6dd5b409b62d449651f14p-67Q, 0x1.6b5790e714dd812f487575d068fp-89Q, -0x0p+0Q}; + } + if constexpr (order == 4) { + return {0x0p+0Q, 0x1.002833198203bf56e8fbb6906848p-2Q, 0x1.74f145f5180b48bf2521976c532bp-1Q, -0x1.d40722c67b8b2c63d49b5a9adf94p+2Q, 0x1.2af6f0f464bc571c8b763a836373p+4Q, -0x1.a43135145799a27dfd1fadf683bp+4Q, 0x1.9a15ae0412710439a9b40c2df6c6p+4Q, -0x1.38d1bd49e9af291f59c9f34bbc8fp+4Q, 0x1.6c6cdb14d7fe107edc16c4947af5p+3Q, -0x1.13619aaa119f97b37d6d1c2a2f99p+2Q, 0x1.d56ce1ec874a0c5dd634fb4d532fp-1Q, -0x1.e42907ae7a26468d6ecb1d9b0202p-1Q, 0x1.e52911f9f656640a2404f83c369fp+0Q, -0x1.ee224ef8eb13d4b961d19b800725p+0Q, 0x1.1f26d6223d44cb481a2910c8c507p+0Q, -0x1.5888435f5783628967f9baa292dep-2Q, -0x1.9e45fc4e6f7c960ebee0a7c6f2b4p-7Q, 0x1.dcd2d2ebfb6e400bbcf752c44dedp-5Q, -0x1.93116bc1ac6b7200b82ddbfbe355p-6Q, 0x1.0e01783e342a4693e98c9eddee16p-8Q, 0x1.31f3faa90de9ede16d91478c925bp-12Q, -0x1.f6b0df77a54401ad9bab43898f0dp-13Q, 0x1.f05077a02c3aba8741da976da8a2p-16Q, 0x1.2ec5b9d224e6bceb5db9ee6f77e8p-20Q, -0x1.47f2b0eb68eda8ce48926b183b67p-22Q, 0x1.bcb021bf883a1f92a78fc9e4385p-29Q, 0x1.1bcefd6cfba520ba0473784ac481p-32Q, -0x1.34d97adc52a38a676a55a69541ap-39Q, -0x1.6f2c8c9ca394fbdec6dda2529befp-53Q, 0x1.34e43d9253e6e8975e6c8e7e1076p-60Q, -0x1.352f98f0f2e48db2a203fb3601f4p-81Q, 0x0p+0Q}; + } + if constexpr (order == 5) { + return {0x0p+0Q, 0x1.e5d8b15d3664d52108fae1119eb3p-1Q, -0x1.e7e4ae8313c9841f6b4ba69959c8p+1Q, 0x1.643947f56174ee22b35087d6e12ep+1Q, 0x1.8bf77730624fb34f058db90d09abp+3Q, -0x1.39575fcf961c0f3da45ce1cc2c7bp+5Q, 0x1.f6657cd6c7e299b7cc89d5ddbefap+5Q, -0x1.2981aaa66ca36b3a94f827b0b8dbp+6Q, 0x1.0cf300079688d85d6be47384ed72p+6Q, -0x1.71528cd9cab137a39829b250a696p+4Q, -0x1.13658826409b41720bd51b25ad91p+6Q, 0x1.5ecf135e336b7c201cd13f369622p+7Q, -0x1.ca8fbd8754dc1920d78e09c343d4p+7Q, 0x1.83a96558c6c07294f0fd7084bf69p+7Q, -0x1.9d91182e0786a78e2338c78e73d6p+6Q, 0x1.818f5ca05f023837d630b0fd1c9bp+4Q, 0x1.4e782cc994094deb15353773c74ap+3Q, -0x1.7fba734a377970e0ae8d81fa7364p+3Q, 0x1.361d7d826bb5b3b3a1616d435b7ap+2Q, -0x1.85fee8307d590ead49f8c8c0db3dp-1Q, -0x1.fcc3205624ce56be678cf8dd8b95p-4Q, 0x1.30d54b861144b0080c77faaf98c5p-4Q, -0x1.4236c7ccc62df6904f17923598dp-7Q, -0x1.6b6d4bcc089eed67f907624e3601p-12Q, 0x1.251cb75a77a65027fa18c44159c1p-13Q, -0x1.7df627db3ed37f55c551bd809c99p-19Q, -0x1.6d7ba0319a17f9c5347fd4990ca2p-23Q, 0x1.047350b843565161f3ac66f52b72p-29Q, 0x1.ecabd0f857c5126fafed07e0ff9fp-41Q, -0x1.035ef08b1273d485ae68801b61a7p-49Q, 0x1.039e900e7fa12bdd9aa0b52e7d7ap-69Q, 0x0p+0Q}; + } + if constexpr (order == 6) { + return {0x0p+0Q, 0x1.5c435b4994699430de1f0c23d617p+1Q, -0x1.45ad88073e6251792d84632e4f3fp+4Q, 0x1.1ac643e9c99f8dff42b4b524dcf6p+6Q, -0x1.3bcd24e1c22f08a7330d93c59d11p+7Q, 0x1.1132bead650e64e0cc624fab813p+8Q, -0x1.a3321607e359615c22640004ddabp+8Q, 0x1.2bec4ce73b524de840d2af23d04bp+9Q, -0x1.83ddd4224b9abfb64ecabda1d5d5p+9Q, 0x1.b1ad4241d86bedd378c0243ed9a2p+9Q, -0x1.9d7a3218170b28b67328a62c7a74p+9Q, 0x1.5526f87e8214f36e89fc5bb73ce9p+9Q, -0x1.e996857ebd3fd865f8b8b92d1e0ep+8Q, 0x1.186a9a24f3387e74b221163382ebp+8Q, -0x1.4f804f76b6d5b86a618f7579c739p+6Q, -0x1.84954fc1821007c0fd22b5bb0514p+5Q, 0x1.59efa11d2ec6f964630b6ee3dd9dp+6Q, -0x1.dac7ad3b33c95d5f07d9022e2d45p+5Q, 0x1.62078796373e73b5598b789d53cp+4Q, -0x1.88bb023e9f2f98b9b7a5cb3efe82p+1Q, -0x1.04b9160269b89d57d0a514a7e722p+0Q, 0x1.18c6982acbd2cd140bf32c40e2bfp-1Q, -0x1.508ddc9d3ccb43c37b8bf5160a7bp-4Q, -0x1.539386e1415cf5772194f932f5bcp-9Q, 0x1.9eab992a4b9ab37998a475e020b6p-10Q, -0x1.980b92ff814cc556c4aed6edadddp-15Q, -0x1.761c29381edd29e5680cf26d10acp-19Q, 0x1.64e7e2ec4af2d5325d3b1b81e06p-25Q, 0x1.1823b743e4c412fe2e1a19821c84p-35Q, -0x1.623923d3ddbaeed10b04f5b48b46p-44Q, 0x1.6290fa803758e40f0b8255ed89fdp-63Q, 0x0p+0Q}; + } + if constexpr (order == 7) { + return {0x0p+0Q, 0x1.891443770e9f5b58ca0b8becb52ep+2Q, -0x1.c4b28f7dbecf38e874d341781c95p+5Q, 0x1.d994c46f08417c9c24a36bb24434p+7Q, -0x1.26defe09eb9e312242e5ff410da3p+9Q, 0x1.ddf577c4250f78c0132b7ac736e1p+9Q, -0x1.fd2079b0f3ddb297d55b16fe84bp+9Q, 0x1.36152a2e286cfeac4352523397cdp+9Q, 0x1.d8616a51db368c3df94db95c5c72p+6Q, -0x1.190b42892374c709dd821decb54p+10Q, 0x1.36219b396179567cea598487367ep+11Q, -0x1.eed74001662f7e761e889a73b6ep+11Q, 0x1.31c149450a5e9832b2f7a4322f07p+12Q, -0x1.31807a4d8f7d8b9ec23aba57ce8ep+12Q, 0x1.07e37f0875c28ba98c5ad47ed33fp+12Q, -0x1.9ca0e06fa4e40e6ba99e5e66481ep+11Q, 0x1.192392a49659f5be4af76f76ab89p+11Q, -0x1.28f7ef65a911c2242d46f559ac11p+10Q, 0x1.8ef1182eeb70c3b810abd66139cfp+8Q, -0x1.076216da5c43b27292caed829f7ap+5Q, -0x1.3734a9c9c5014b6b42adc6c9cbep+5Q, 0x1.2e313dce4fbf11c25ec1c482fcb8p+4Q, -0x1.913ecda1e3436af7caa7765fe945p+1Q, -0x1.aba4e0591b35ef78387e98333cf8p-4Q, 0x1.5578ca229685f75ec4d7ad4713cep-4Q, -0x1.f3ff47839e58d032a19fef9f4efp-9Q, -0x1.bd3a12076a4f509f06e41d1d4df9p-13Q, 0x1.29ffe91412a29d368ce3dc6e38c5p-18Q, 0x1.5e7711914b058b73ae87986d7f1ap-28Q, -0x1.267e3f1ece05182094a61971cb39p-36Q, 0x1.26c8d9be624c3d09b4283ff340e2p-54Q, -0x0p+0Q}; + } + if constexpr (order == 8) { + return {0x0p+0Q, 0x1.1c06072fbf26f358c9f18045c124p+3Q, -0x1.65d998749f19f3f527890dd9f349p+6Q, 0x1.9d8978b96f57f154ef9e43eaf80dp+8Q, -0x1.24c8d76a7f36d7089e403e85e9fap+10Q, 0x1.21d479bc00697b14d91b67255a8bp+11Q, -0x1.bbc006c9393532c76b5f0b5bef94p+11Q, 0x1.2211c4425df9c2e46c413666253fp+12Q, -0x1.5c64ff1d8bf677ab09ae01e0a5e1p+12Q, 0x1.845a35a3158347c96bec7865086bp+12Q, -0x1.87e6df0fbf8ef42fd53aa9972193p+12Q, 0x1.6504110de640c4682cbbe6b8a6e7p+12Q, -0x1.2b9aa02be2b35409ccb01b40da2ap+12Q, 0x1.cebcfb329a57eadc95a91a00a9a1p+11Q, -0x1.3e375c669dabfd4de918596ad52p+11Q, 0x1.7d70c67fe8973e080c2d05792b11p+10Q, -0x1.8fd6874952e8a903dad0f0ef170dp+9Q, 0x1.57b6f4096f1cf0152665b7fd82f9p+8Q, -0x1.3e2c004c73161017d20213f7c5c1p+6Q, -0x1.f1e0f66437531ffa2878e9c69067p+4Q, 0x1.39f676c7227564daf7250a1ee97dp+5Q, -0x1.07f7de36ead717df75680da7494ep+4Q, 0x1.6eaf02b444bc4ce468426b7d5bcep+1Q, 0x1.f8896c7b27aea8a0c13c77300d42p-4Q, -0x1.b78e4a3636f77d36046090a9c9b3p-4Q, 0x1.faf293c65fc88bb39eaf30523dfep-8Q, 0x1.a6b604defe6a94f42a0086be2586p-12Q, -0x1.9886be2865e4c650159b3c14bf08p-17Q, -0x1.7c0bde2d4dd50659d8e7bf0799bbp-26Q, 0x1.90aca39ea2e8ac3870c8fe9456dap-34Q, -0x1.91166efa6d0a92bc7a2ca99b7dfbp-51Q, 0x0p+0Q}; + } + if constexpr (order == 9) { + return {0x0p+0Q, 0x1.58e7df6732419db59e963fb33d94p+3Q, -0x1.c53a29616fa380817d7988f924b1p+6Q, 0x1.0cc18d57a1a1fb48e1055941c825p+9Q, -0x1.7c92fc1b6ca3895680be8b3bffe9p+10Q, 0x1.6a1945d20b68d8baff3e866c5cdap+11Q, -0x1.fab771c0e1baf24e2c87e6ba962ap+11Q, 0x1.254298acbb2d449a7b36affa5b18p+12Q, -0x1.407f9dc95f9b1203f97a18e79578p+12Q, 0x1.53233c63dd8a7f18f09c08d93b73p+12Q, -0x1.3b528b34539979362d85428f478fp+12Q, 0x1.e2ea2797d25e54507eaadbdfe8c3p+11Q, -0x1.3d6169dd11c9bca321155575b38p+11Q, 0x1.75fce5d641404560c110d19350b3p+10Q, -0x1.2b5b50127f9f56d44e8ab9654e78p+9Q, -0x1.18e0518b142ec5c99d4cfb0c02dep+7Q, 0x1.ed1ee257a974ab35fe9854c84beep+8Q, -0x1.f5a5a8d8a9b3c073ca74b7aa8b3fp+8Q, 0x1.920c943e9e1a266133c5fbd7d496p+8Q, -0x1.22c1385412c45fef7248020243cfp+8Q, 0x1.4b1ba13f6628b1dd44c07737a72dp+7Q, -0x1.ec876f34dee07503da6d353b7ff9p+5Q, 0x1.641261f15a2bc3d54eafcffb8c39p+3Q, 0x1.3bac7fcb6881fd2d747e22c3e33ap-1Q, -0x1.3ae0db5ff49e0fda9ef3c1ee8d61p-1Q, 0x1.0ba445bef297ba3c0908ff2bb4d9p-4Q, 0x1.c3804abda5b0efa9daf29b604e6cp-9Q, -0x1.3c78fba89f7e4dd2da6247dd38d1p-13Q, -0x1.6e90a45b17e11834e3133934b3a2p-22Q, 0x1.34c398a5dd4857b9fcc96bbdccaep-29Q, -0x1.351bbccd566d5b56e0d97b1d8b32p-45Q, 0x0p+0Q}; + } + if constexpr (order == 10) { + return {0x0p+0Q, 0x1.0cfd9304e9d0e9e89a58da63527ap+3Q, -0x1.68c00ea69764cc01a57e59f4b6b3p+6Q, 0x1.b4a63a85c6a121d6db74c511805bp+8Q, -0x1.3c4fcf304828edf088a1b16ea07fp+10Q, 0x1.35efe9ab816f6ad2ce45644d2fd8p+11Q, -0x1.c3872b5b6dcd2512d768b35e0756p+11Q, 0x1.1261ac83f506bff0f39595d045e8p+12Q, -0x1.39e1fa3f00833a2dd6cf3f9d927bp+12Q, 0x1.5e4c9d364466ef749b997ff3a6cp+12Q, -0x1.6b72e41a84905cceda4b9c52f497p+12Q, 0x1.578fd4c404248dabc97584331c2p+12Q, -0x1.30faf3648505cdf5f67d9aa16b7dp+12Q, 0x1.0174ad7c898217c9040304ce9297p+12Q, -0x1.942bc49f2f52a22fa3fb0a0c2104p+11Q, 0x1.25cbc7992fd63cf3174ccf32c535p+11Q, -0x1.914caac5676309ecc707d67c3b11p+10Q, 0x1.f93f030387c4d019b699660bf6c3p+9Q, -0x1.1b4f5dfc787bbc3226392268b2fbp+9Q, 0x1.1df01b8a36a8b0e740bc1ec53a5bp+8Q, -0x1.048db6f3ab7c1cc8ce55d6b0a75fp+7Q, 0x1.730bcb9c58bfc20d60d07c0998acp+5Q, -0x1.09b56b87c1c7fb7baefa593d3ee2p+3Q, -0x1.4fb833b30fa7eeef6a7e9c60d9dap+0Q, 0x1.e38e1048601a60cbcefd6c477b1bp-1Q, -0x1.ee07e572041f738c257ecf9ffa9bp-4Q, -0x1.913ced3c0164b56d324da52a041bp-8Q, 0x1.0726b83c4032bf81b9b5324fe2d4p-11Q, 0x1.2751c6763466bbc5b3627d689424p-20Q, -0x1.00ceb77e39cabc22cbb16a695fdap-26Q, 0x1.0123085a8910152fac9e37f89667p-41Q, 0x0p+0Q}; + } + if constexpr (order == 11) { + return {0x0p+0Q, 0x1.6ddd33f198eb3c96ba063e358bd1p+2Q, -0x1.ef9ef6f596ce44132c400459330bp+5Q, 0x1.2bec86422c72fb4a90434380b422p+8Q, -0x1.ab3138ae63b3c1e29f0289d542dap+9Q, 0x1.90171accf1ae92cfd9a8b825cb23p+10Q, -0x1.0b8279e6381aa2b741ba53014abbp+11Q, 0x1.21c7cbc3a51f50320f0eba7f41fcp+11Q, -0x1.3291c6bd3630cafeef000c3ad649p+11Q, 0x1.52187d4f278255d9064abfc39513p+11Q, -0x1.5764b21031af003ebeb2fc812432p+11Q, 0x1.2d82b77758b7aad296d2a3297f76p+11Q, -0x1.efcf6fd97e7509c927947ebcfe7bp+10Q, 0x1.96b834131566dc9e05fa0d23f1dbp+10Q, -0x1.34d67cf0a39ad9453ec607f4238bp+10Q, 0x1.9aafba6f0ff85ebebf990bae7248p+9Q, -0x1.002f1ef9723b265f845856382322p+9Q, 0x1.378956144d5be0ceae49930a1c88p+8Q, -0x1.48f6827b3eeb52ea5b26c2ed113p+7Q, 0x1.17de886be7cb3ac887b94bba647bp+6Q, -0x1.abd1c377daaf4123bc220ca55b7bp+4Q, 0x1.18836fa0aedf116ff461c07e603dp+3Q, -0x1.72b11631904f6bd3fce02c59a632p-2Q, -0x1.93c736e0c44c0da3f44d1f9fb885p+0Q, 0x1.74105b4ecfea6c16422a97b509cfp-1Q, -0x1.a9382883de207a4dbe506bf11d8fp-4Q, -0x1.8ee02bc822713114de4c636e81aep-9Q, 0x1.b89c5ecf7a7b773088b92afebabbp-11Q, 0x1.5051009d42a4549b60d53bde7219p-19Q, -0x1.a9ba33acc416babe2770ada65c3ap-25Q, 0x1.aa6a7d0ba81031b3c996c62600c5p-39Q, -0x0p+0Q}; + } + if constexpr (order == 12) { + return {0x0p+0Q, 0x1.7e688b7526a774b7675960f4a94cp+1Q, -0x1.044f66dd0bb355e9e8503e18e935p+5Q, 0x1.39d2780b0ad2f5c13050620039bcp+7Q, -0x1.b63bb8898df0968b0e8fec1fd9a7p+8Q, 0x1.86b367123a2139a592c1528e8f55p+9Q, -0x1.d8001c1817ddf23795fa181f861ep+9Q, 0x1.b397f071da3115c2852f6422a8c8p+9Q, -0x1.9ca191acc971e01d773c5479fb8dp+9Q, 0x1.d28d7edb2db091286aa35eb84214p+9Q, -0x1.daeab5bf793f0a5db1ed52776228p+9Q, 0x1.738e37d47cc21d48d43df1f6d78p+9Q, -0x1.0785a3e74df59d2028a07275bacep+9Q, 0x1.a556a97ba734840eabbaaf9977bap+8Q, -0x1.320671c41025d2eac6cd6f7d0dadp+8Q, 0x1.33661041ead74be91556b7ad619ap+7Q, -0x1.d86506577d5080199f42262a920cp+5Q, 0x1.9ebe0657238551a24be276081da8p+4Q, -0x1.ec9ee9042933244440176ee46c34p-1Q, -0x1.1034340999c868fff4dcb8a37e58p+4Q, 0x1.04d7524f6a9fff23ce8e27e29df3p+4Q, -0x1.2fcc89fd04e88d59c73ed84bf7b4p+3Q, 0x1.7c24bc012bffc7d1e2142c729735p+2Q, -0x1.c84c145900f77b34a48b3cd01e16p+1Q, 0x1.57bccbd9e4fcea0faae95542b1dcp+0Q, -0x1.d81daf1af068d1091e33cdbbae6bp-3Q, -0x1.20f9f72def1de8f22bf9f5b255c4p-13Q, 0x1.c2f2ad7e016f5272ff0429610dd4p-9Q, 0x1.baf6705e59cac328415a41de4538p-17Q, -0x1.ae94eeab2dbd4d40eaa80ab9debep-22Q, 0x1.af91281d9938911a632b5cd0ed85p-35Q, 0x0p+0Q}; + } + if constexpr (order == 13) { + return {0x0p+0Q, 0x1.a308ef1d1680575961469f8667e2p-1Q, -0x1.1df37cb20ef6cd526ba94f6e5b81p+3Q, 0x1.5a47cc2daffcb2cf20f274a5d38ap+5Q, -0x1.e7cc32d4c7f05cc178a022548d5cp+6Q, 0x1.ba5aa6f58d154790fde028986d8dp+7Q, -0x1.137ebe2556bb5c31390698cc2046p+8Q, 0x1.07f96c27b79ba1c76a43166f429dp+8Q, -0x1.f176d6c3151d8ca65c15ab30195bp+7Q, 0x1.0c09a0e0bcb9ff8d7d5939eac1c2p+8Q, -0x1.12bf0f34a9a5500b54a8cb7aa2b3p+8Q, 0x1.de16d55d65d2bb62ec748b786b23p+7Q, -0x1.8c7b496d3d3fd8274ea834d98fd2p+7Q, 0x1.56592506626bc28d37a6f5de979bp+7Q, -0x1.13d919c9693b2e85ee3bb9c46203p+7Q, 0x1.8b69de5718a09e2e84dbb4686bcep+6Q, -0x1.15b78c90e783729339c279a7a26bp+6Q, 0x1.8188b8db550fea388993af5f214fp+5Q, -0x1.e03c011f666ac66011ab6c26ae29p+4Q, 0x1.12ed8b36e986458009c1cf96319ap+4Q, -0x1.36a5b057bc26ecf63126b2eacd51p+3Q, 0x1.3d2641cf67e8fbde6d1c40fa7b62p+2Q, -0x1.11ef148707dfa11f55a24428d5aap+1Q, 0x1.c294da23fe29fd37f9b451eef74cp-1Q, -0x1.4f57e7e05e818e7ff01d8a0db422p-2Q, 0x1.1ebd9964081cf6e9a358f38d567ap-4Q, 0x1.367917f76eee2f07742561edeafcp-14Q, -0x1.fdd37749c94d91b95e4c419dae2dp-10Q, -0x1.0fc0733cbc7d657bb2162af22ff6p-22Q, 0x1.f945fb653cfda9182e56ec03c70ep-22Q, -0x1.fb1bcfae6e46d13bafa847e0d908p-34Q, 0x0p+0Q}; + } + if constexpr (order == 14) { + return {0x0p+0Q, 0x1.74ef139ad4e11f00f66e50f0812ap-3Q, -0x1.fd9d32fdef73fc52b4e1aac15ce8p+0Q, 0x1.3320f17be8b7073381f61db6e694p+3Q, -0x1.a9e31dbd98dd09635b204c104094p+4Q, 0x1.73dbdd38a87f5064434afb97d3afp+5Q, -0x1.aa50f206f25c72a99ccb3ca40e39p+5Q, 0x1.5e48ac9c2f1f1eff351bab98be85p+5Q, -0x1.20d7a78e95ecf57e7aeb50618786p+5Q, 0x1.4350b94e5aa2da50e62a1b36016ep+5Q, -0x1.5499ff05228ddd2807d9b6ef1056p+5Q, 0x1.0d8c7214ffee0a1235c0b7c3c0bap+5Q, -0x1.8fe88996cfa9a5515805a5fa2aadp+4Q, 0x1.63da6bffb7322ee61ea230916038p+4Q, -0x1.24223f5c1b9d9506d6c2601299dfp+4Q, 0x1.7851e19176715ec2bb51da095d1ap+3Q, -0x1.e4fd178fcd0ef2f7356543216bcep+2Q, 0x1.610a439acb28979c59046810bc68p+2Q, -0x1.ae4c3e147b71c29486543afa4302p+1Q, 0x1.a6fe28ab7ffa991086da6716cc39p+0Q, -0x1.ccc920f98175dd579809ace45452p-1Q, 0x1.f9389387bff6b354c94c19c46a5ap-2Q, -0x1.8612de961fd0228a7f6974df4498p-3Q, 0x1.fd43fc0e7883ee43ba9b27c30441p-5Q, -0x1.aafa1e0c4a86f88db623dcf8b499p-6Q, 0x1.b638737fa8e8eebd49a0e1375a7p-8Q, 0x1.071682a1f5057e2143bccc924ee3p-11Q, -0x1.a84c3f530239b63f7db3d411d854p-12Q, 0x1.a20c2374a0f67000161244836cf3p-18Q, 0x1.e7f1c0adda0f62adb6884d961058p-23Q, -0x1.eb089a4058efe658e6fb3c8b8fp-34Q, 0x0p+0Q}; + } + if constexpr (order == 15) { + return {0x0p+0Q, 0x1.31c729360063e0149d5c21a7efcfp-6Q, -0x1.a21aa8a66a6833da58113cf2bbfap-3Q, 0x1.f656a46fa2a9169e56d7dc88f3edp-1Q, -0x1.589b4fca92a9f10523315f53d228p+1Q, 0x1.25049558932c1a7bf948af8c4d53p+2Q, -0x1.3b0f087615a2680943285adb90b5p+2Q, 0x1.bed87f332745bf792ba1df447904p+1Q, -0x1.37fe75fa2aa3b693bb4d2b4c5752p+1Q, 0x1.75c34ae38a11fc314406fb081d96p+1Q, -0x1.9f32b219f201f09e837dabeb3924p+1Q, 0x1.2a50b5ebe798e437ef1f44157963p+1Q, -0x1.80aff2523d4b3342a82c358ca6abp+0Q, 0x1.71f9af43c19f0952a4d93db93c54p+0Q, -0x1.40d21595459cbd8977223938b804p+0Q, 0x1.6edc3b8de7cbccef39a51cdb458bp-1Q, -0x1.abb5cf29e076b1f30f2dbef2decbp-2Q, 0x1.5fdcb9c5e1f87c285afdd98f767dp-2Q, -0x1.af4e9b9242255620df43c5f22d7fp-3Q, 0x1.57b33e4d63cb5298c708e6fd316dp-4Q, -0x1.736294d370dec79efb385dfdd9c2p-5Q, 0x1.e1a61d7964668ec603c20655891bp-6Q, -0x1.38138139d6cd8275efff1464190ap-7Q, 0x1.a99b874715d59140bd38f0c805c4p-10Q, -0x1.191ada841d111d8ae180fd0e9563p-10Q, 0x1.44a23a1750afa85a3000e1c75486p-12Q, 0x1.4db128e094987961ef3da6b416efp-13Q, -0x1.2cad37f3dbf9e7a2353f8dcbd256p-14Q, 0x1.f38c667f694821291da05561f948p-19Q, 0x1.c870773604d02f72b6510873557cp-24Q, -0x1.cdd01a024c710ef11bd7cd0b9b3cp-34Q, -0x0p+0Q}; + } + } + #endif + } + std::array m{}; + for (auto & x : m) { + x = std::numeric_limits::quiet_NaN(); + } + return m; +} + +} // namespaces +#endif diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp new file mode 100644 index 000000000..9601844cf --- /dev/null +++ b/test/daubechies_scaling_test.cpp @@ -0,0 +1,441 @@ +/* + * Copyright Nick Thompson, 2019 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "math_unit_test.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_HAS_FLOAT128 +#include +using boost::multiprecision::float128; +#endif + + +using boost::math::constants::pi; +using boost::math::constants::root_two; + +// Mallat, Theorem 7.4, characterization number 3: +// A conjugate mirror filter has p vanishing moments iff h^{(n)}(pi) = 0 for 0 <= n < p. +template +void test_daubechies_filters() +{ + Real tol = 3*std::numeric_limits::epsilon(); + using boost::math::filters::daubechies_scaling_filter; + using boost::math::filters::daubechies_wavelet_filter; + + auto h = daubechies_scaling_filter(); + auto g = daubechies_wavelet_filter(); + + auto inner = std::inner_product(h.begin(), h.end(), g.begin(), Real(0)); + CHECK_MOLLIFIED_CLOSE(0, inner, tol); + + // This is implied by Fourier transform of the two-scale dilatation equation; + // If this doesn't hold, the infinite product for m_0 diverges. + Real H0 = 0; + for (size_t j = 0; j < h.size(); ++j) + { + H0 += h[j]; + } + CHECK_MOLLIFIED_CLOSE(root_two(), H0, tol); + + // This is implied if we choose the scaling function to be an orthonormal basis of V0. + Real scaling = 0; + for (size_t j = 0; j < h.size(); ++j) { + scaling += h[j]*h[j]; + } + CHECK_MOLLIFIED_CLOSE(1, scaling, tol); + + using std::pow; + // Daubechies wavelet of order p has p vanishing moments. + // Unfortunately, the condition number of the sum is infinite. + // Hence we must scale the tolerance by the summation condition number to ensure that we don't get spurious test failures. + for (size_t k = 1; k < p; ++k) + { + Real hk = 0; + Real abs_hk = 0; + for (size_t n = 0; n < h.size(); ++n) + { + Real t = pow(n, k)*h[n]; + if (n & 1) + { + hk -= t; + } + else + { + hk += t; + } + abs_hk += abs(t); + } + // Multiply the tolerance by the condition number: + Real cond = abs(hk) > 0 ? abs_hk/abs(hk) : 1/std::numeric_limits::epsilon(); + if (!CHECK_MOLLIFIED_CLOSE(0, hk, cond*tol)) + { + std::cerr << " The " << k << "th moment of the p = " << p << " filter did not vanish\n"; + std::cerr << " Condition number = " << abs_hk/abs(hk) << "\n"; + } + } + + // For the scaling function to be orthonormal to its integer translates, + // sum h_k h_{k-2l} = \delta_{0,l}. + // See Theoretical Numerical Analysis, Atkinson, Exercise 4.5.2. + // This is the last condition we could test to ensure that the filters are correct, + // but I'm not gonna bother because it's painful! +} + +// Test that the filters agree with Daubechies, Ten Lenctures on Wavelets, Table 6.1: + +void test_agreement_with_ten_lectures() +{ + std::array h2 = {0.4829629131445341, 0.8365163037378077, 0.2241438680420134, -0.1294095225512603}; + auto h2_ = boost::math::filters::daubechies_scaling_filter(); + for (size_t i = 0; i < h2.size(); ++i) + { + CHECK_ULP_CLOSE(h2[i], h2_[i], 3); + } + + std::array h3 = {0.3326705529500825, 0.8068915093110924, 0.4598775021184914, -0.1350110200102546, -0.0854412738820267, 0.0352262918857095}; + auto h3_ = boost::math::filters::daubechies_scaling_filter(); + for (size_t i = 0; i < h3.size(); ++i) + { + CHECK_ULP_CLOSE(h3[i], h3_[i], 5); + } + + std::array h4 = {0.2303778133088964, 0.7148465705529154, 0.6308807679298587, -0.0279837694168599, -0.1870348117190931, 0.0308413818355607, 0.0328830116668852 , -0.010597401785069}; + auto h4_ = boost::math::filters::daubechies_scaling_filter(); + for (size_t i = 0; i < h4.size(); ++i) + { + if(!CHECK_ULP_CLOSE(h4[i], h4_[i], 18)) { + std::cerr << " Index " << i << " incorrect.\n"; + } + } + +} + +template +void test_filter_ulp_distance() +{ + using boost::math::filters::daubechies_scaling_filter; + auto h1 = daubechies_scaling_filter(); + auto h2 = daubechies_scaling_filter(); + + for (size_t i = 0; i < h1.size(); ++i) + { + if(!CHECK_ULP_CLOSE(h1[i], h2[i], 0)) + { + std::cerr << " Index " << i << " at order " << p << " failed tolerance check\n"; + } + } +} + + +template +void test_integer_grid() +{ + using boost::math::detail::daubechies_scaling_integer_grid; + using boost::math::tools::summation_condition_number; + Real unit_roundoff = std::numeric_limits::epsilon()/2; + auto grid = daubechies_scaling_integer_grid(); + + if constexpr (order == 0) { + auto cond = summation_condition_number(0); + for (auto & x : grid) { + cond += x; + } + CHECK_MOLLIFIED_CLOSE(1, cond.sum(), 6*cond.l1_norm()*unit_roundoff); + } + + if constexpr (order == 1) { + auto cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += i*grid[i]; + } + CHECK_MOLLIFIED_CLOSE(-1, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + } + + if constexpr (order == 2) { + auto cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += i*i*grid[i]; + } + CHECK_MOLLIFIED_CLOSE(2, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + } + + if constexpr (order == 3) { + auto cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += i*i*i*grid[i]; + } + CHECK_MOLLIFIED_CLOSE(-6, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + } + + if constexpr (order == 4) { + auto cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += i*i*i*i*grid[i]; + } + CHECK_MOLLIFIED_CLOSE(24, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + } + +} + +template +void test_dyadic_grid() +{ + std::cout << "Testing dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; + boost::hana::for_each(std::make_index_sequence<13>(), [&](auto i){ + auto phijk = boost::math::detail::dyadic_grid(0); + auto phik = boost::math::detail::daubechies_scaling_integer_grid(); + assert(phik.size() == phijk.size()); + + for (size_t k = 0; k < phik.size(); ++k) + { + CHECK_ULP_CLOSE(phik[k], phijk[k], 0); + } + + for (size_t j = 1; j < 10; ++j) + { + auto phijk = boost::math::detail::dyadic_grid(j); + auto phik = boost::math::detail::daubechies_scaling_integer_grid(); + for (size_t i = 0; i < phik.size(); ++i) + { + CHECK_ULP_CLOSE(phik[i], phijk[i*(1<(0); + for (size_t i = 0; i < phik.size(); ++i) + { + size_t idx = i*(1<::epsilon()); + } + } + }); +} + + +template +void test_interpolation() +{ + std::cout << "Testing constant interpolation on type " << boost::core::demangle(typeid(Real).name()) << "\n"; + boost::hana::for_each(std::make_index_sequence<13>(), [&](auto i){ + auto phik = boost::math::detail::daubechies_scaling_integer_grid(); + for (size_t j = 0; j < 5; ++j) { + auto phi = boost::math::daubechies_scaling(j); + assert(phik.size()==phi.support().second + 1); + for (size_t k = 1; k < phik.size(); ++k) { + auto expected = phik[k]; + auto computed = phi.constant_interpolation(k); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Constant interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.single_crank_linear(k); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Single crank linear interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.first_order_taylor(k); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " First order Taylor expansion wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.constant_interpolation(k*(1+2*std::numeric_limits::epsilon())); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Constant interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.constant_interpolation(k*(1-2*std::numeric_limits::epsilon())); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Constant interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.linear_interpolation(k); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Linear interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + } + + for (size_t i = 0; i < phi.size() -1; ++i) { + Real x = phi.index_to_abscissa(i); + Real expected = phi[i]; + Real computed = phi.constant_interpolation(x); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Constant interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.linear_interpolation(x); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.single_crank_linear(x); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Single crank linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + computed = phi.first_order_taylor(x); + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " First order Taylor expansion wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + x += phi.spacing()/2; + computed = phi.linear_interpolation(x); + expected = phi[i]/2 + phi[i+1]/2; + if (!CHECK_ULP_CLOSE(expected, computed, 1)) { + std::cerr << " Linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + x *= (1+std::numeric_limits::epsilon()); + computed = phi.constant_interpolation(x); + expected = phi[i+1]; + if (!CHECK_ULP_CLOSE(expected, computed, 0)) { + std::cerr << " Linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; + } + + } + } + }); +} + +// Taken from Lin, 2005, doi:10.1016/j.amc.2004.12.038, +// "Direct algorithm for computation of derivatives of the Daubechies basis functions" +void test_first_derivative() +{ + auto phi1_3 = boost::math::detail::daubechies_scaling_integer_grid(); + std::array lin_3{0.0L, 1.638452340884085725014976L, -2.232758190463137395017742L, 0.5501593582740176149905562L, 0.04414649130503405501220997L, 0.0L}; + for (size_t i = 0; i < lin_3.size(); ++i) + { + if(!CHECK_ULP_CLOSE(lin_3[i], phi1_3[i], 0)) + { + std::cerr << " Index " << i << " is incorrect\n"; + } + } + + auto phi1_4 = boost::math::detail::daubechies_scaling_integer_grid(); + std::array lin_4 = {0.0L, 1.776072007522184640093776L, -2.785349397229543142492785L, 1.192452536632278174347632L, -0.1313745151846729587935189L, -0.05357102822023923595359996L,0.001770396479992522798495351L, 0.0L}; + + for (size_t i = 0; i < lin_4.size(); ++i) + { + if(!CHECK_ULP_CLOSE(lin_4[i], phi1_4[i], 0)) + { + std::cerr << " Index " << i << " is incorrect\n"; + } + } + + std::array lin_5 = {0.0L,1.558326313047001366564379L,-2.436012783189551921436896L,1.235905129801454293947039L,-0.3674377136938866359947561L,-0.02178035117564654658884556L,0.03234719350814368885815854L,-0.001335619912770701035229331L,-0.00001216838474354431384970525L,0.0L}; + auto phi1_5 = boost::math::detail::daubechies_scaling_integer_grid(); + for (size_t i = 0; i < lin_5.size(); ++i) + { + if(!CHECK_ULP_CLOSE(lin_5[i], phi1_5[i], 0)) + { + std::cerr << " Index " << i << " is incorrect\n"; + } + } +} + +int main() +{ + test_agreement_with_ten_lectures(); + test_first_derivative(); + test_dyadic_grid(); + test_dyadic_grid(); + test_dyadic_grid(); + test_dyadic_grid(); + test_interpolation(); + test_interpolation(); + test_interpolation(); + test_interpolation(); + + // All scaling functions have a first derivative. + boost::hana::for_each(std::make_index_sequence<13>(), [&](auto idx){ + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + #ifdef BOOST_HAS_FLOAT128 + test_integer_grid(); + test_integer_grid(); + #endif + }); + + // 4-tap (2 vanishing moment) scaling function does not have a second derivative; + // all other scaling functions do. + boost::hana::for_each(std::make_index_sequence<13>(), [&](auto idx){ + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + #ifdef BOOST_HAS_FLOAT128 + test_integer_grid(); + #endif + }); + + // 8-tap filter (4 vanishing moments) is the first to have a third derivative. + boost::hana::for_each(std::make_index_sequence<12>(), [&](auto idx){ + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + #ifdef BOOST_HAS_FLOAT128 + test_integer_grid(); + #endif + }); + + // 10-tap filter (5 vanishing moments) is the first to have a fourth derivative. + boost::hana::for_each(std::make_index_sequence<11>(), [&](auto idx){ + test_integer_grid(); + test_integer_grid(); + test_integer_grid(); + #ifdef BOOST_HAS_FLOAT128 + test_integer_grid(); + #endif + }); + + boost::hana::for_each(std::make_index_sequence<8>(), [&](auto i){ + test_daubechies_filters(); + }); + + boost::hana::for_each(std::make_index_sequence<12>(), [&](auto i){ + test_daubechies_filters(); + }); + + boost::hana::for_each(std::make_index_sequence<11>(), [&](auto i){ + test_daubechies_filters(); + }); + + + #ifdef BOOST_HAS_FLOAT128 + boost::hana::for_each(std::make_index_sequence<23>(), [&](auto i){ + test_filter_ulp_distance(); + test_filter_ulp_distance(); + test_filter_ulp_distance(); + }); + + boost::hana::for_each(std::make_index_sequence<12>(), [&](auto i){ + test_daubechies_filters(); + }); + #endif + + return boost::math::test::report_errors(); +} From b5188cfabaf0583b6f1fbd3b1907fd148964b34b Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 26 Jan 2020 11:27:28 +0800 Subject: [PATCH 002/104] Continuous Daubechies wavelets: Fight bitrot. --- include/boost/math/filters/daubechies.hpp | 7 ++++ .../special_functions/daubechies_scaling.hpp | 8 ++-- test/Jamfile.v2 | 1 + test/daubechies_scaling_test.cpp | 40 +++++++++++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp index 94e3382c8..74806ca88 100644 --- a/include/boost/math/filters/daubechies.hpp +++ b/include/boost/math/filters/daubechies.hpp @@ -400,7 +400,14 @@ constexpr std::array daubechies_scaling_filter() return {0x1.91785023a98792eac41b5272c04bp-13Q, 0x1.93f9805696b9ba9d87c3df41a8d9p-9Q, 0x1.7059c4b494de928c16cf6cacf0a7p-6Q, 0x1.8e62d8a0a8ffbd2cc57d79f83e08p-4Q, 0x1.17756f5530d69044d0184f790b3ep-2Q, 0x1.023cebcae9f66d3d390049f78dcp-1Q, 0x1.265e6eff960cc4ccf24089549b66p-1Q, 0x1.1fbaad4726276054f5d700d1bfb6p-2Q, -0x1.7f8826c0619915e6978c42a74dfcp-3Q, -0x1.4592ded92acf8c9c5ecd6ba9faddp-2Q, 0x1.390a478f54bbad8c711b3d202a1ap-8Q, 0x1.e9f54ac655c13958344e31a88778p-3Q, 0x1.5c6535de6b4e500e1e067af4d00ep-5Q, -0x1.5e912ec022b5fcb42ec3601ecf9bp-3Q, -0x1.3da9a08b26c34196db8bd596e813p-5Q, 0x1.efaeca9aee1921f4bc36a577b638p-4Q, 0x1.57bcf98fd11ce6827e350101b72ep-6Q, -0x1.5088bd1cf023da2d878ac9ebafc5p-4Q, -0x1.2c0d69ece949ee5284dcfb042baap-8Q, 0x1.a4434b89b691509ff6541a080cecp-5Q, -0x1.440e7548329f53e7873db8128a63p-8Q, -0x1.ce3e5912a230366d14a862ea3672p-6Q, 0x1.f61e5ce9a7ff0906541711dfe2e7p-8Q, 0x1.ab9f170d72cc6036a5092b63c08ap-7Q, -0x1.9c50c528bc77817ae0788ffc773ap-8Q, -0x1.371235b499d33e83c0b1b543f6e8p-8Q, 0x1.e9b0e84ddc0468e17e4fa3636bf9p-9Q, 0x1.2e73daaf19dbb24f6ae6d9d95255p-10Q, -0x1.bcb74a39ee49fe08e2b9fd7aeef1p-10Q, -0x1.7274d8ffa9744517f2f1470cebeep-15Q, 0x1.334ca46898dae11da29a57e9f92ap-11Q, -0x1.ef71f401aeeeb5e13dd40efc0a0cp-14Q, -0x1.32337036c1616db93444903d828ep-13Q, 0x1.131ee633363469bb9bebca29a839p-14Q, 0x1.6e4981b862b8b7d5bb86d25cc3eap-16Q, -0x1.536263fe83a124aaa2092f47c711p-16Q, 0x1.ccd17bbbe3d0407ffce581eb4165p-27Q, 0x1.05cc64bbcf95fbb57637394fb838p-18Q, -0x1.e21fa8ce8bf7a7465a57d37cce9ap-21Q, -0x1.b0fcbaac8055d95fcb97dc94d8aap-22Q, 0x1.d137c82c35ed75b3cca32ab07fp-23Q, -0x1.160c0805b95d2f0cf1ffb7605bf2p-31Q, -0x1.838882edd8947aab05cd00305346p-26Q, 0x1.627091a0c660cff16c28fc227cd6p-28Q, 0x1.050b72dfcacebaae0203f358d56p-31Q, -0x1.ba8411e011af62ac1faf9b23aa51p-32Q, 0x1.3380aec6c4cc755d395c84cee933p-34Q, -0x1.31989d5a96be32d359a4b1032025p-38Q}; } #endif + } + std::array m{}; + for (auto & x : m) { + x = std::numeric_limits::quiet_NaN(); + } + return m; + } template diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index d58e30ed6..e7a67e65f 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -1,5 +1,5 @@ /* - * Copyright Nick Thompson, 2019 + * Copyright Nick Thompson, 2020 * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -51,7 +51,7 @@ std::vector dyadic_grid(size_t j_max) size_t delivery_idx = k*(1 << (j_max-j)); if (delivery_idx >= v.size()) { - std::cout << "Delivery index out of range!\n"; + std::cerr << "Delivery index out of range!\n"; continue; } Real term = 0; @@ -62,8 +62,8 @@ std::vector dyadic_grid(size_t j_max) } } if (!isnan(v[delivery_idx])) { - std::cout << "Delivery index already populated!, = " << v[delivery_idx] << "\n"; - std::cout << "would overwrite with " << term << "\n"; + std::cerr << "Delivery index already populated!, = " << v[delivery_idx] << "\n"; + std::cerr << "would overwrite with " << term << "\n"; } v[delivery_idx] = term; } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 141214e4f..7be0bfe7d 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -942,6 +942,7 @@ test-suite misc : [ run cardinal_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] + [ run daubechies_scaling_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quadratic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quintic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index 9601844cf..f4362aebc 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -32,6 +32,7 @@ using boost::math::constants::root_two; template void test_daubechies_filters() { + std::cout << "Testing Daubechies filters with " << p << " vanishing moments on type " << boost::core::demangle(typeid(Real).name()) << "\n"; Real tol = 3*std::numeric_limits::epsilon(); using boost::math::filters::daubechies_scaling_filter; using boost::math::filters::daubechies_wavelet_filter; @@ -99,6 +100,7 @@ void test_daubechies_filters() void test_agreement_with_ten_lectures() { + std::cout << "Testing agreement with Ten Lectures\n"; std::array h2 = {0.4829629131445341, 0.8365163037378077, 0.2241438680420134, -0.1294095225512603}; auto h2_ = boost::math::filters::daubechies_scaling_filter(); for (size_t i = 0; i < h2.size(); ++i) @@ -127,6 +129,9 @@ void test_agreement_with_ten_lectures() template void test_filter_ulp_distance() { + std::cout << "Testing filters ULP distance between types " + << boost::core::demangle(typeid(Real1).name()) << "and" + << boost::core::demangle(typeid(Real2).name()) << "\n"; using boost::math::filters::daubechies_scaling_filter; auto h1 = daubechies_scaling_filter(); auto h2 = daubechies_scaling_filter(); @@ -144,6 +149,7 @@ void test_filter_ulp_distance() template void test_integer_grid() { + std::cout << "Testing integer grid with " << p << " vanishing moments and " << order << " derivative on type " << boost::core::demangle(typeid(Real).name()) << "\n"; using boost::math::detail::daubechies_scaling_integer_grid; using boost::math::tools::summation_condition_number; Real unit_roundoff = std::numeric_limits::epsilon()/2; @@ -163,6 +169,13 @@ void test_integer_grid() cond += i*grid[i]; } CHECK_MOLLIFIED_CLOSE(-1, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + + // Differentiate \sum_{k} \phi(x-k) = 1 to get this: + cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += grid[i]; + } + CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); } if constexpr (order == 2) { @@ -171,6 +184,13 @@ void test_integer_grid() cond += i*i*grid[i]; } CHECK_MOLLIFIED_CLOSE(2, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + + // Differentiate \sum_{k} \phi(x-k) = 1 to get this: + cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += grid[i]; + } + CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); } if constexpr (order == 3) { @@ -179,6 +199,14 @@ void test_integer_grid() cond += i*i*i*grid[i]; } CHECK_MOLLIFIED_CLOSE(-6, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + + // Differentiate \sum_{k} \phi(x-k) = 1 to get this: + cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += grid[i]; + } + CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + } if constexpr (order == 4) { @@ -187,6 +215,13 @@ void test_integer_grid() cond += i*i*i*i*grid[i]; } CHECK_MOLLIFIED_CLOSE(24, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + + // Differentiate \sum_{k} \phi(x-k) = 1 to get this: + cond = summation_condition_number(0); + for (size_t i = 0; i < grid.size(); ++i) { + cond += grid[i]; + } + CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); } } @@ -361,11 +396,16 @@ int main() test_dyadic_grid(); test_dyadic_grid(); test_dyadic_grid(); + #ifdef BOOST_HAS_FLOAT128 test_dyadic_grid(); + #endif + /* test_interpolation(); test_interpolation(); test_interpolation(); + #if BOOST_HAS_FLOAT128 test_interpolation(); + #endif*/ // All scaling functions have a first derivative. boost::hana::for_each(std::make_index_sequence<13>(), [&](auto idx){ From 01b7bfe8b5530d9b66523db6e9386133e03902aa Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 26 Jan 2020 13:38:25 +0800 Subject: [PATCH 003/104] Daubechies scaling: Remove superfluous initialization. [CI SKIP] --- include/boost/math/special_functions/daubechies_scaling.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index e7a67e65f..c478c0175 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -24,6 +24,7 @@ namespace detail { template std::vector dyadic_grid(size_t j_max) { + using std::isnan; auto c = boost::math::filters::daubechies_scaling_filter(); Real scale = boost::math::constants::root_two()*(1 << order); for (auto & x : c) @@ -35,11 +36,10 @@ std::vector dyadic_grid(size_t j_max) // Maximum sensible j for 32 bit floats is j_max = 22: std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); - v.resize(2*p + (2*p-1)*((1<::quiet_NaN()); v[0] = 0; v[v.size()-1] = 0; for (size_t i = 0; i < phik.size(); ++i) { - v[i*(1<<(j_max))] = phik[i]; + v[i*(1< Date: Mon, 27 Jan 2020 14:21:10 +0800 Subject: [PATCH 004/104] Static assert on the number of derivatives [CI SKIP] --- .../special_functions/detail/daubechies_scaling_integer_grid.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp index fe3296832..c328db53b 100644 --- a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +++ b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp @@ -20,6 +20,7 @@ constexpr std::array daubechies_scaling_integer_grid() static_assert(p <= 15, "Integer grids only implemented up to 15."); static_assert(p > 1, "Integer grids only implemented for p >= 2."); if constexpr (p == 2) { + static_assert(order <= 1 && order >= 0, "The 2 vanishing moment Daubechies scaling function only has one derivative."); if constexpr (std::is_same_v) { if constexpr (order == 0) { return {0x0p+0f, 0x1.5db3d8p+0f, -0x1.76cf5ep-2f, 0x0p+0f}; From 3db1f564aacfecf946fadc34577b6388631915d8 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 4 Feb 2020 16:19:44 -0500 Subject: [PATCH 005/104] Used signed integer indexes in Daubechies scaling [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index c478c0175..12b37f6e9 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -22,7 +23,7 @@ namespace boost::math { namespace detail { template -std::vector dyadic_grid(size_t j_max) +std::vector dyadic_grid(int64_t j_max) { using std::isnan; auto c = boost::math::filters::daubechies_scaling_filter(); @@ -38,26 +39,29 @@ std::vector dyadic_grid(size_t j_max) std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); v[0] = 0; v[v.size()-1] = 0; - for (size_t i = 0; i < phik.size(); ++i) { + for (int64_t i = 0; i < (int64_t) phik.size(); ++i) { v[i*(1<= v.size()) + int64_t delivery_idx = k*(1 << (j_max-j)); + if (delivery_idx >= (int64_t) v.size()) { std::cerr << "Delivery index out of range!\n"; continue; } Real term = 0; - for (size_t l = 0; l < c.size(); ++l) { - size_t idx = k*(1 << (j_max - j + 1)) - l*(1 << j_max); - if (idx >= 0 && idx < v.size()) { + for (int64_t l = 0; l < (int64_t) c.size(); ++l) { + int64_t idx = k*(1 << (j_max - j + 1)) - l*(1 << j_max); + if (idx < 0) { + break; + } + if (idx < (int64_t) v.size()) { term += c[l]*v[idx]; } } From ef0532c8c32767f47e92c5e5b65b7b0905a02014 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 4 Feb 2020 18:05:42 -0500 Subject: [PATCH 006/104] Use cubic and quintic hermite interpolators for Daubechies scaling [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 81 ++++++++++++++++--- 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 12b37f6e9..b76d5cf66 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -11,11 +11,14 @@ #include #include #include +#include #include #include #include #include #include +#include +#include namespace boost::math { @@ -82,18 +85,52 @@ std::vector dyadic_grid(int64_t j_max) template class daubechies_scaling { public: - daubechies_scaling(int levels = -1) + daubechies_scaling(int grid_refinements = -1) { using boost::multiprecision::float128; - if (levels < 0) + if (grid_refinements < 0) { - m_levels = 22; - } - else { - m_levels = levels; + grid_refinements = 20; } - auto f1 = [this] { + if (p < 4) { + throw std::domain_error("only p>=5 is currently implemented!"); + } + + // Compute the refined grid: + std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); + // Compute the derivative of the refined grid: + std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); + + // if necessary, compute the second derivative: + std::vector d2ydx2; + if constexpr(p >= 6) { + std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); + d2ydx2 = t3.get(); + } + + auto y = t0.get(); + auto dydx = t1.get(); + + + + // Storing the vector of x's is unnecessary; it's only because I haven't implemented an equispaced cubic Hermite interpolator: + std::vector x(y.size()); + Real h = Real(2*p-1)/(x.size()-1); + for (size_t i = 0; i < x.size(); ++i) { + x[i] = i*h; + } + + if constexpr (p == 4 || p == 5) { + m_cbh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx)); + } + else if constexpr (p >= 6) { + + m_qh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); + } + + + /*auto f1 = [this] { auto v = detail::dyadic_grid(this->m_levels); this->m_v.resize(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -133,16 +170,40 @@ public: for (auto & x : m_c) { x *= scale; + }*/ + } + + + Real operator()(Real x) const { + if constexpr (p==4 || p ==5) { + return m_cbh->operator()(x); + } + else if constexpr (p >= 6) { + return m_qh->operator()(x); } } - Real operator()(Real x) const { return this->linear_interpolation(x); } + Real prime(Real x) const { + if constexpr (p==4 || p ==5) { + return m_cbh->prime(x); + } + else if constexpr (p >= 6) { + return m_qh->prime(x); + } + } std::pair support() const { return {0, 2*p-1}; } - Real constant_interpolation(Real x) const { +private: + size_t m_levels; + // need this for p = 4,5: + std::shared_ptr>> m_cbh; + // need this for p >= 6: + std::shared_ptr>> m_qh; + + /*Real constant_interpolation(Real x) const { if (x <= 0 || x >= 2*p-1) { return Real(0); } @@ -349,7 +410,7 @@ private: std::array m_c; std::vector m_v; std::vector m_v_prime; - std::vector m_v_dbl_prime; + std::vector m_v_dbl_prime;*/ }; } From a57144148194cba878d4da7954554ad04256248c Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 5 Feb 2020 09:38:18 -0500 Subject: [PATCH 007/104] Matched Holder interpolation for Daubechies 2 [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 103 +++++++++--------- 1 file changed, 54 insertions(+), 49 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index b76d5cf66..8eb8ec393 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -80,6 +80,44 @@ std::vector dyadic_grid(int64_t j_max) return v; } +template +class matched_holder { +public: + using Real = typename RandomAccessContainer::value_type; + + matched_holder(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements) : y_{std::move(y)}, dydx_{std::move(dydx)} + { + h_ = Real(1)/(1<< grid_refinements); + } + + Real operator()(Real x) const { + using std::log; + using std::floor; + using std::sqrt; + using std::pow; + if (x <= 0 || x >= 3) { + return 0; + } + // This is the exact Holder exponent, but it's pessimistic almost everywhere! + // It's only exactly right at dyadic rationals. + //Real constexpr const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); + // So we're gonna make the graph dip a little harder; this will capture more of the self-similar behavior: + Real constexpr const alpha = 0.35; + int64_t i = static_cast(std::floor(x/h_)); + Real t = (x- i*h_)/h_; + Real v = y_[i]; + Real dphi = dydx_[i+1]*h_; + v += (dphi - alpha*(y_[i+1] - y_[i]))*t/(1-alpha); + v += (-dphi + y_[i+1] - y_[i])*pow(t, alpha)/(1-alpha); + return v; + } + +private: + Real h_; + RandomAccessContainer y_; + RandomAccessContainer dydx_; +}; + } template @@ -93,18 +131,18 @@ public: grid_refinements = 20; } - if (p < 4) { - throw std::domain_error("only p>=5 is currently implemented!"); + if (p==3) { + throw std::domain_error("p = 3 is not yet implemented!"); } - // Compute the refined grid: + // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); // if necessary, compute the second derivative: std::vector d2ydx2; - if constexpr(p >= 6) { + if constexpr (p >= 6) { std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); d2ydx2 = t3.get(); } @@ -121,60 +159,22 @@ public: x[i] = i*h; } + if constexpr (p==2) { + m_mh = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); + } if constexpr (p == 4 || p == 5) { m_cbh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx)); } else if constexpr (p >= 6) { - m_qh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); } - - - /*auto f1 = [this] { - auto v = detail::dyadic_grid(this->m_levels); - this->m_v.resize(v.size()); - for (size_t i = 0; i < v.size(); ++i) { - this->m_v[i] = static_cast(v[i]); - } - }; - - auto f2 = [this] { - auto v_prime = detail::dyadic_grid(this->m_levels); - this->m_v_prime.resize(v_prime.size()); - for (size_t i = 0; i < v_prime.size(); ++i) { - this->m_v_prime[i] = static_cast(v_prime[i]); - } - }; - - - auto f3 = [this] { - auto v_dbl_prime = detail::dyadic_grid(this->m_levels); - this->m_v_dbl_prime.resize(v_dbl_prime.size()); - for (size_t i = 0; i < v_dbl_prime.size(); ++i) { - this->m_v_dbl_prime[i] = static_cast(v_dbl_prime[i]); - } - }; - - std::thread t1(f1); - std::thread t2(f2); - std::thread t3(f3); - - t1.join(); - t2.join(); - t3.join(); - - m_inv_spacing = (1 << m_levels); - - m_c = boost::math::filters::daubechies_scaling_filter(); - Real scale = boost::math::constants::root_two(); - for (auto & x : m_c) - { - x *= scale; - }*/ - } + } Real operator()(Real x) const { + if constexpr (p==2) { + return m_mh->operator()(x); + } if constexpr (p==4 || p ==5) { return m_cbh->operator()(x); } @@ -184,6 +184,9 @@ public: } Real prime(Real x) const { + if constexpr (p==2) { + throw std::domain_error("The 2-vanishing moment Daubechies scaling function is not continuously differentiable."); + } if constexpr (p==4 || p ==5) { return m_cbh->prime(x); } @@ -198,6 +201,8 @@ public: private: size_t m_levels; + // Need this for p = 2: + std::shared_ptr>> m_mh; // need this for p = 4,5: std::shared_ptr>> m_cbh; // need this for p >= 6: From ae13e5b0bc9912ac0e2164900984ce940ab0f9b8 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Wed, 5 Feb 2020 09:57:21 -0500 Subject: [PATCH 008/104] Daubechies scaling: Also compute filters and grids in oct precision [CI SKIP] --- example/daubechies_accuracy.cpp | 649 ++++++++++ example/daubechies_coefficients.cpp | 15 +- example/daubechies_scaling_integer_grid.cpp | 21 +- include/boost/math/filters/daubechies.hpp | 148 +-- .../daubechies_scaling_integer_grid.hpp | 1099 ++++++++++++----- 5 files changed, 1507 insertions(+), 425 deletions(-) create mode 100644 example/daubechies_accuracy.cpp diff --git a/example/daubechies_accuracy.cpp b/example/daubechies_accuracy.cpp new file mode 100644 index 000000000..87e7fdb0f --- /dev/null +++ b/example/daubechies_accuracy.cpp @@ -0,0 +1,649 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using boost::multiprecision::float128; + +template +void do_ulp() +{ + std::cout << "Creating ULP plot on type " << boost::core::demangle(typeid(Real).name()) << " and " << p << " vanishing moments.\n"; + using std::floor; + using std::ceil; + using std::abs; + int rmax = 14; + std::cout << "Computing phi_dense\n"; + std::future> f1 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax); }); + std::future> f2 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax); }); + + std::cout << "Computing phi and phi_prime\n"; + std::future> f3 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax-2); }); + std::future> f4 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax-2); }); + auto phi_dense = f1.get(); + auto phi_dense_prime = f2.get(); + auto phi_accurate = f3.get(); + auto phi_prime_accurate = f4.get(); + + Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); + std::cout << "Done precomputing grids; downcasting now.\n"; + std::vector phi(phi_accurate.size()); + for (size_t i = 0; i < phi_accurate.size(); ++i) { + phi[i] = Real(phi_accurate[i]); + } + std::vector phi_prime(phi_accurate.size()); + for (size_t i = 0; i < phi_prime_accurate.size(); ++i) { + phi_prime[i] = Real(phi_prime_accurate[i]); + } + phi_accurate.resize(0); + phi_prime_accurate.resize(0); + + std::vector x(phi.size()); + Real dx = (2*p-1)/static_cast(x.size()-1); + std::cout << "dx = " << dx << "\n"; + for (size_t i = 0; i < x.size(); ++i) { + x[i] = i*dx; + } + + auto ch = boost::math::interpolators::cubic_hermite(std::move(x), std::move(phi), std::move(phi_prime)); + + std::vector x_acc(phi_dense.size()); + + for (size_t i = 0; i < x_acc.size(); ++i) { + x_acc[i] = i*dx_dense; + } + + auto acc = boost::math::interpolators::cubic_hermite(std::move(x_acc), std::move(phi_dense), std::move(phi_dense_prime)); + std::cout << "Writing ulp plot\n"; + std::string title = "daub" + std::to_string(p) + "_" + std::to_string(rmax-2) + "_" + boost::core::demangle(typeid(Real).name()) + ".svg"; + quicksvg::ulp_plot(ch, acc, Real(0), Real(2*p-1), + "ULP plot of Daubechies with " + std::to_string(rmax-2) + " refinements on type " + boost::core::demangle(typeid(Real).name()), + title, 15000, 1100, 10); + std::cout << "Done writing ulp plot\n"; + +} + +template +void test_interpolate_with_roots() +{ + std::cout << "Testing interpolation with roots on type " << boost::core::demangle(typeid(Real).name()) << " and " << p << " vanishing moments.\n"; + using std::floor; + using std::ceil; + using std::abs; + int rmax = 22; + auto phi_dense = boost::math::detail::dyadic_grid(rmax); + auto phi_dense_prime = boost::math::detail::dyadic_grid(rmax); + Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); + + auto roots = boost::math::detail::daubechies_scaling_roots(); + auto root_derivatives = boost::math::detail::daubechies_scaling_derivatives_at_roots(); + if (std::is_same_v) { + roots.resize(12); + root_derivatives.resize(12); + std::cout << "Last root = " << roots.back() << "\n"; + } + + for (int r = 5; r <= rmax - 1; ++r) { + auto phi_accurate = boost::math::detail::dyadic_grid(r); + std::vector phi(phi_accurate.size()); + for (size_t i = 0; i < phi_accurate.size(); ++i) { + phi[i] = Real(phi_accurate[i]); + } + auto phi_prime_accurate = boost::math::detail::dyadic_grid(r); + std::vector phi_prime(phi_accurate.size()); + for (size_t i = 0; i < phi_prime_accurate.size(); ++i) { + phi_prime[i] = Real(phi_prime_accurate[i]); + } + + std::vector x(phi.size()); + Real dx = (2*p-1)/static_cast(x.size()-1); + std::cout << "dx = " << dx << "\n"; + for (size_t i = 0; i < x.size(); ++i) { + x[i] = i*dx; + } + + //std::cout << "x.size() before insertion = " << x.size() << "\n"; + //std::cout << "Adding " << roots.size() << " roots; giving " << x.size() + roots.size() << " total\n"; + // Now insert the roots into the vector: + //x.resize(x.size() + roots.size()); + //phi.resize(phi.size() + roots.size()); + //phi_prime.resize(phi_prime.size() + roots.size()); + #ifdef COMPUTE_ROOTS + for (size_t i = 0; i < roots.size(); ++i) { + auto root = roots[i]; + auto index = static_cast(ceil(root/dx)) + i; + //std::cout << "Inserting root at index " << index << "\n"; + x.insert(x.begin() + index, root); + phi.insert(phi.begin() + index, Real(0)); + phi_prime.insert(phi_prime.begin()+ index, root_derivatives[i]); + } + #endif + /*if (std::is_sorted(x.begin(), x.end())) { + std::cout << "x is sorted! This is good!\n"; + } else { + std::cout << "x is not sorted! This is bad!\n"; + } + std::cout << "x.size() = " << x.size() << "\n"; + std::cout << "phi.size()=" << phi.size() << "\n";*/ + + if constexpr (p < 6 && p >= 3) { + auto ch = boost::math::interpolators::cubic_hermite(std::move(x), std::move(phi), std::move(phi_prime)); + Real flt_distance = 0; + Real sup = 0; + Real worst_abscissa = 0; + Real worst_value = 0; + Real worst_computed = 0; + Real worst_absolute_abscissa = 0; + Real worst_absolute_value = 0; + Real worst_computed_absolute_value = 0; + Real condition_number1 = 0; + Real condition_number2 = 0; + Real l1 = 0; + Real rel_error_sum = 0; + for (size_t i = phi_dense.size()/16; i < phi_dense.size(); ++i) { + Real t = i*dx_dense; + Real computed = ch(t); + Real expected = Real(phi_dense[i]); + if (abs(expected) < 100*std::numeric_limits::epsilon()) { + continue; + } + + Real diff = abs(computed - expected); + l1 += diff; + rel_error_sum += diff/abs(expected); + Real distance = abs(boost::math::float_distance(computed, expected)); + if (distance > flt_distance) { + flt_distance = distance; + worst_abscissa = t; + worst_value = expected; + worst_computed = computed; + condition_number1 = abs(t*ch.prime(t)/expected); + } + if (diff > sup) { + sup = diff; + worst_absolute_abscissa = t; + worst_absolute_value = expected; + worst_computed_absolute_value = computed; + condition_number2 = abs(t*ch.prime(t)/expected); + } + } + std::cout << std::setprecision(std::numeric_limits::digits10 + 3); + std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; + std::cout << "\tWorst abscissa = " << worst_abscissa << "\n" + << "\tWorst expected = " << worst_value << "\n" + << "\tWorst computed = " << worst_computed << "\n" + << "\tCondition number: " << condition_number1 << "\n"; + std::cout << "\tWorst absolute abscissa = " << worst_absolute_abscissa << "\n" + << "\tExpected value at worst absolute abscissa = " << worst_absolute_value <<"\n" + << "\tComputed value at worst absolute abscissa = " << worst_computed_absolute_value << "\n" + << "\tCondition number: " << condition_number2 << "\n" + << "\tL1 error = " << l1*dx_dense << "\n" + << "\tRelative error sum = " << rel_error_sum*dx_dense << "\n"; + std::cout << "\tRAM = " << 4*phi_accurate.size()*sizeof(Real) << " bytes\n"; + + std::vector x_acc(phi_dense.size()); + + for (size_t i = 0; i < x_acc.size(); ++i) { + x_acc[i] = i*dx_dense; + } + + //std::cout << "phi_dense.size() = " << phi_dense.size() << "\n"; + auto phi_dense_copy = phi_dense; + auto phi_dense_prime_copy = phi_dense_prime; + auto acc = boost::math::interpolators::cubic_hermite(std::move(x_acc), std::move(phi_dense_copy), std::move(phi_dense_prime_copy)); + std::cout << "Writing ulp plot\n"; + quicksvg::ulp_plot(ch, acc, Real(0), Real(2*p-1), + "ULP plot of Daubechies with " + std::to_string(r) + " refinements", + "daub" + std::to_string(p) + "_" + std::to_string(r) + ".svg", 50000, 1100, 10); + std::cout << "Done writing ulp plot\n"; + } + + } +} + +template +void choose_refinement() +{ + using std::abs; + int rmax = 22; + auto phi_dense = boost::math::detail::dyadic_grid(rmax); + Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); + + for (int r = 2; r <= rmax - 2; ++r) { + auto phi_accurate = boost::math::detail::dyadic_grid(r); + std::vector phi(phi_accurate.size()); + for (size_t i = 0; i < phi_accurate.size(); ++i) { + phi[i] = Real(phi_accurate[i]); + } + auto phi_prime_accurate = boost::math::detail::dyadic_grid(r); + std::vector phi_prime(phi_accurate.size()); + for (size_t i = 0; i < phi_prime_accurate.size(); ++i) { + phi_prime[i] = Real(phi_prime_accurate[i]); + } + + std::vector x(phi.size()); + Real dx = (2*p-1)/static_cast(x.size()-1); + std::cout << "dx = " << dx << "\n"; + for (size_t i = 0; i < x.size(); ++i) { + x[i] = i*dx; + } + + if constexpr (p < 6 && p >= 3) { + auto ch = boost::math::interpolators::cubic_hermite(std::move(x), std::move(phi), std::move(phi_prime)); + Real flt_distance = 0; + Real sup = 0; + Real worst_abscissa = 0; + Real worst_value = 0; + Real worst_computed = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real t = i*dx_dense; + Real computed = ch(t); + Real expected = Real(phi_dense[i]); + if (std::abs(expected) < 100*std::numeric_limits::epsilon()) { + continue; + } + + Real diff = abs(computed - expected); + Real distance = abs(boost::math::float_distance(computed, expected)); + if (distance > flt_distance) { + flt_distance = distance; + worst_abscissa = t; + worst_value = expected; + worst_computed = computed; + } + if (diff > sup) { + sup = diff; + } + } + std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; + std::cout << "\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; + std::cout << "\tRAM = " << 3*phi_accurate.size()*sizeof(Real) << " bytes\n"; + } + else if constexpr (p >= 6) { + + auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + auto qh = boost::math::interpolators::quintic_hermite(std::move(x), std::move(phi), std::move(phi_prime), std::move(phi_dbl_prime)); + Real flt_distance = 0; + Real sup = 0; + Real worst_abscissa = 0; + Real worst_value = 0; + Real worst_computed = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real t = i*dx_dense; + Real computed = qh(t); + Real expected = Real(phi_dense[i]); + if (std::abs(expected) < 100*std::numeric_limits::epsilon()) { + continue; + } + + Real diff = abs(computed - expected); + Real distance = abs(boost::math::float_distance(computed, expected)); + if (distance > flt_distance) { + flt_distance = distance; + worst_abscissa = t; + worst_value = expected; + worst_computed = computed; + } + if (diff > sup) { + sup = diff; + } + } + std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; + std::cout << "\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; + std::cout << "\tRAM = " << 3*phi_accurate.size()*sizeof(Real) << " bytes\n"; + } + } +} + +template +void find_best_interpolator() +{ + using std::abs; + int rmax = 14; + auto phi_dense = boost::math::detail::dyadic_grid(rmax); + Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); + for (int r = 2; r < rmax-2; ++r) + { + std::map m; + auto phi = boost::math::detail::dyadic_grid(r); + auto phi_prime = boost::math::detail::dyadic_grid(r); + + std::vector x(phi.size()); + Real dx = (2*p-1)/static_cast(x.size()-1); + std::cout << "dx = " << dx << "\n"; + for (size_t i = 0; i < x.size(); ++i) { + x[i] = i*dx; + } + + { + auto linear = [&phi, &dx, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) { + return Real(0); + } + using std::floor; + + Real y = (1<(k); + + Real t = y - k; + return (1-t)*phi[kk] + t*phi[kk+1]; + }; + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - linear(x)); + if (diff > sup) { + sup = diff; + } + } + + m.insert({sup, "linear interpolation"}); + } + + + { + auto qbs = boost::math::interpolators::cardinal_quadratic_b_spline(phi.data(), phi.size(), Real(0), dx, phi_prime.front(), phi_prime.back()); + Real qbs_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - qbs(x)); + if (diff > qbs_sup) { + qbs_sup = diff; + } + } + + m.insert({qbs_sup, "quadratic_b_spline"}); + } + + { + auto cbs = boost::math::interpolators::cardinal_cubic_b_spline(phi.data(), phi.size(), Real(0), dx, phi_prime.front(), phi_prime.back()); + Real cbs_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - cbs(x)); + if (diff > cbs_sup) { + cbs_sup = diff; + } + } + + m.insert({cbs_sup, "cubic_b_spline"}); + } + + /*{ + auto phi_copy = phi; + auto ws = boost::math::interpolators::whittaker_shannon(std::move(phi_copy), Real(0), dx); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + using std::abs; + Real diff = abs(phi_dense[i] - ws(x)); + if (diff > sup) { + sup = diff; + } + } + + m.insert({sup, "whittaker_shannon"}); + }*/ + + { + auto qbs = boost::math::interpolators::cardinal_quintic_b_spline(phi.data(), phi.size(), Real(0), dx, {0,0}, {0,0}); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - qbs(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "quintic_b_spline"}); + } + + { + auto phi_copy = phi; + auto x_copy = x; + auto phi_prime_copy = phi_prime; + auto ch = boost::math::interpolators::cubic_hermite(std::move(x_copy), std::move(phi_copy), std::move(phi_prime_copy)); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - ch(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "cubic_hermite_spline"}); + } + + { + auto phi_copy = phi; + auto x_copy = x; + auto phi_prime_copy = phi_prime; + auto pc = boost::math::interpolators::pchip(std::move(x_copy), std::move(phi_copy)); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - pc(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "pchip"}); + } + + { + auto phi_copy = phi; + auto x_copy = x; + auto pc = boost::math::interpolators::makima(std::move(x_copy), std::move(phi_copy)); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - pc(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "makima"}); + } + + /*{ + auto trig = boost::math::interpolators::cardinal_trigonometric(phi, Real(0), dx); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + using std::abs; + Real diff = abs(phi_dense[i] - trig(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "trig"}); + }*/ + + { + auto fotaylor = [&phi, &phi_prime, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1< sup) { + sup = diff; + } + } + + m.insert({sup, "First-order Taylor"}); + } + + if constexpr (p > 2) { + auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + + { + auto phi_copy = phi; + auto x_copy = x; + auto phi_prime_copy = phi_prime; + auto phi_dbl_prime_copy = phi_dbl_prime; + auto qh = boost::math::interpolators::quintic_hermite(std::move(x_copy), std::move(phi_copy), std::move(phi_prime_copy), std::move(phi_dbl_prime_copy)); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - qh(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "quintic_hermite_spline"}); + } + + { + auto sotaylor = [&phi, &phi_prime, &phi_dbl_prime, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1< sup) { + sup = diff; + } + } + + m.insert({sup, "Second-order Taylor"}); + } + } + + if constexpr (p > 3) { + auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + auto phi_triple_prime = boost::math::detail::dyadic_grid(r); + + { + auto totaylor = [&phi, &phi_prime, &phi_dbl_prime, &phi_triple_prime, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1< sup) { + sup = diff; + } + } + + m.insert({sup, "Third-order Taylor"}); + } + + + } + std::string best = "none"; + Real best_sup = 1000000000; + for (auto & e : m) { + + std::cout << std::setprecision(20) << std::fixed << e.first << " is error of " << e.second << "\n"; + if (e.first < best_sup) { + best = e.second; + best_sup = e.first; + } + } + std::cout << "The best method for p = " << p << " is the " << best << "\n"; + } +} + +int main() { + + do_ulp(); + //test_interpolate_with_roots(); + //choose_refinement(); + //choose_refinement(); + /*// Says linear interpolation is the best: + find_best_interpolator(); + + // Says linear interpolation is the best: + find_best_interpolator(); + + // Says cubic_hermite_spline is best: + find_best_interpolator(); + + // Says cubic_hermite_spline is best: + find_best_interpolator(); + + // Says quintic_hermite_spline is best: + find_best_interpolator(); + + // Says quintic_hermite_spline is best: + find_best_interpolator(); + + // Says quintic_hermite_spline is best: + find_best_interpolator();*/ +} diff --git a/example/daubechies_coefficients.cpp b/example/daubechies_coefficients.cpp index 5ccc77fb6..23349defa 100644 --- a/example/daubechies_coefficients.cpp +++ b/example/daubechies_coefficients.cpp @@ -208,8 +208,8 @@ std::vector daubechies_coefficients(std::vector Complex; - size_t p_max = 25; + typedef boost::multiprecision::cpp_complex<500> Complex; + size_t p_max = 20; std::ofstream fs{"daubechies_filters.hpp"}; fs << "/*\n" << " * Copyright Nick Thompson, 2019\n" @@ -223,11 +223,11 @@ int main() << "#ifdef BOOST_HAS_FLOAT128\n" << "#include \n" << "#endif\n" + << "#include \n" << "namespace boost::math::filters {\n\n" << "template \n" << "constexpr std::array daubechies_scaling_filter()\n" << "{\n" - << " static_assert(sizeof(Real) <= 16, \"Filter coefficients only computed up to 128 bits of precision.\");\n" << " static_assert(p < " << p_max << ", \"Filter coefficients only implemented up to " << p_max - 1 << ".\");\n"; for(size_t p = 1; p < p_max; ++p) @@ -270,6 +270,15 @@ int main() fs << " }\n"; fs << " #endif\n"; + fs << " if constexpr (std::is_same_v) {\n"; + fs << " return {"; + fs <::digits10 + 3); + for (size_t i = 0; i < h.size() - 1; ++i) { + fs << "boost::lexical_cast(\"" << static_cast(h[i]) << "\"), "; + } + fs << "boost::lexical_cast(\"" << static_cast(h[h.size()-1]) << "\")};\n"; + fs << " }\n"; + fs << " }\n"; } diff --git a/example/daubechies_scaling_integer_grid.cpp b/example/daubechies_scaling_integer_grid.cpp index cdb255327..e4f832af9 100644 --- a/example/daubechies_scaling_integer_grid.cpp +++ b/example/daubechies_scaling_integer_grid.cpp @@ -19,6 +19,7 @@ #include #include #include +#include @@ -193,6 +194,24 @@ void write_grid(std::ofstream & fs) } fs << " }\n"; fs << " #endif\n"; + + fs << " if constexpr (std::is_same_v) {\n"; + j = 0; + for (auto it = grids.begin(); it != grids.end(); ++it) { + + fs << std::setprecision(std::numeric_limits::digits10 + 3); + fs << " if constexpr (order == " << j << ") {\n"; + fs << " return {"; + auto const & grid = *it; + for (size_t i = 0; i < grid.size() -1; ++i) { + fs << "boost::lexical_cast(\"" << static_cast(grid[i]) << "\"), "; + } + fs << "boost::lexical_cast(\"" << static_cast(grid[grid.size()-1]) << "\")};\n"; + fs << " }\n"; + ++j; + } + fs << " }\n"; + fs << " }\n"; } @@ -226,7 +245,7 @@ int main() fs << std::hexfloat; boost::hana::for_each(std::make_index_sequence(), [&](auto idx){ - write_grid(fs); + write_grid(fs); }); fs << " std::array m{};\n" diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp index 74806ca88..87d5bbf36 100644 --- a/include/boost/math/filters/daubechies.hpp +++ b/include/boost/math/filters/daubechies.hpp @@ -10,13 +10,13 @@ #ifdef BOOST_HAS_FLOAT128 #include #endif +#include namespace boost::math::filters { template constexpr std::array daubechies_scaling_filter() { - static_assert(sizeof(Real) <= 16, "Filter coefficients only computed up to 128 bits of precision."); - static_assert(p < 25, "Filter coefficients only implemented up to 24."); + static_assert(p < 20, "Filter coefficients only implemented up to 19."); if constexpr (p == 1) { if constexpr (std::is_same_v) { return {0x1.6a09e6p-1f, 0x1.6a09e6p-1f}; @@ -32,6 +32,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.6a09e667f3bcc908b2fb1366ea95p-1Q, 0x1.6a09e667f3bcc908b2fb1366ea95p-1Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195"), boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195")}; + } } if constexpr (p == 2) { if constexpr (std::is_same_v) { @@ -48,6 +51,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.ee8dd4748bf14c548b969de58fap-2Q, 0x1.ac4bdd6e3fd70aae9f48d8a63d1bp-1Q, 0x1.cb0bf0b6b7108b79b4bf11d08b16p-3Q, -0x1.0907dc1930690697b13714fd4a15p-3Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.482962913144534143374871599864448683816952419504202275201171538155211606550"), boost::lexical_cast("0.836516303737807905575293780916873203459370388348439293495341472652894725147"), boost::lexical_cast("0.224143868042013381025972762240400355467883518184271761387168330840154631777"), boost::lexical_cast("-0.129409522551260381174449418812024164174534450659965256907001603657528486820")}; + } } if constexpr (p == 3) { if constexpr (std::is_same_v) { @@ -64,6 +70,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.54a796e50d263b67e38e82a5584cp-2Q, 0x1.9d20e247d28bb431f1e6c634b34ep-1Q, 0x1.d6ea20bf0f7447ac92de97f0e152p-2Q, -0x1.1480a85c596292857548d060a171p-3Q, -0x1.5df7ab50d483c40c41dbcf2191cfp-4Q, 0x1.2092e373789b9781e66814a5fa37p-5Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.332670552950082615998511589139005630012923399245068359708470578551793724009"), boost::lexical_cast("0.806891509311092576494493604088713490519297394994823618165092063603486835060"), boost::lexical_cast("0.459877502118491570095151942147616720808110177431492306643386780248640335647"), boost::lexical_cast("-0.135011020010254588696389906699374480562219845223781191975686255357062767858"), boost::lexical_cast("-0.0854412738820266616928191691817733115361976389880866297635174898050678201973"), boost::lexical_cast("0.0352262918857095366027406647155100293277583879174316103989340607489421719736")}; + } } if constexpr (p == 4) { if constexpr (std::is_same_v) { @@ -80,6 +89,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.d7d052af15ebfcd98dc85ef4cc01p-3Q, 0x1.6e005ea45d747c624e43405b1919p-1Q, 0x1.4302cdd3de439e1a299a6a04b89fp-1Q, -0x1.ca7c6f9db5bfafb07b9dace22f7p-6Q, -0x1.7f0c1b7c604d3ef4ab50462dfcedp-3Q, 0x1.f94e2196383a8e592495a4baff62p-6Q, 0x1.0d60ac768117b7550c2a3307e30fp-5Q, -0x1.5b41730b72e293b823fb2cbd40c6p-7Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.230377813308896500863291183044070850001615248248309297791096844028271643620"), boost::lexical_cast("0.714846570552915647089921955273992603707608401099308175845011003442625044997"), boost::lexical_cast("0.630880767929858907881716338300615220203222922677195117405747328484353359854"), boost::lexical_cast("-0.0279837694168598542114137471800753854119873202244917528400335826533630929593"), boost::lexical_cast("-0.187034811719093084079570672789081419584544174374580091205777087593992585799"), boost::lexical_cast("0.0308413818355607636272193625349590501703148217200340334182121909360632337258"), boost::lexical_cast("0.0328830116668851997354075135492443886645419411375497125972727840767338203692"), boost::lexical_cast("-0.0105974017850690321048832085240272291810999649063764198348497427299589480739")}; + } } if constexpr (p == 5) { if constexpr (std::is_same_v) { @@ -96,6 +108,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.47e3c41a7b91081ae95ed12670b7p-3Q, 0x1.35291c2c4b00c30a87eaf4d05e71p-1Q, 0x1.72d89143b54f4ecd724f0b79d111p-1Q, 0x1.1b80373befcc598b25a1d5436079p-3Q, -0x1.f0384d3f814743c3d93da5cd8909p-3Q, -0x1.0826648a8dc73f96ef19214f403ep-5Q, 0x1.3dbb9b52515a99ecaa66a225e968p-4Q, -0x1.990ad4579f2e7e2dc54832641bd8p-8Q, -0x1.9c3eff32941286062a45cb776526p-7Q, 0x1.b5385e04e3c0912c23cbbf7041e8p-9Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.160102397974192914480723748020420733650544124625057832772569920207547214207"), boost::lexical_cast("0.603829269797189670540119306525062107507422163101698698796928336036862837113"), boost::lexical_cast("0.724308528437772927728071244102218640768756218232007372576733504804092797357"), boost::lexical_cast("0.138428145901320731505397146339024697314105791173956102269465221088552175948"), boost::lexical_cast("-0.242294887066382031862571379474616361991490808062618598391372691341065474637"), boost::lexical_cast("-0.0322448695846383746484797550621349283135649841637984722543426813198116091835"), boost::lexical_cast("0.0775714938400457135231304893886018198062309945201252798321014623895567160574"), boost::lexical_cast("-0.00624149021279827427419051911292019297076355716568760732341743532590851604324"), boost::lexical_cast("-0.0125807519990819994685097399317757929492045916260978502016923270647650161437"), boost::lexical_cast("0.00333572528547377127799818341581735574763652474230531509970642851567135111157")}; + } } if constexpr (p == 6) { if constexpr (std::is_same_v) { @@ -112,6 +127,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.c8def24dc3951c2a6dae413b8ddbp-4Q, 0x1.fa7eaf64539a97bd50da008738e1p-2Q, 0x1.80949fa3bc0bae02bf1b494d3af8p-1Q, 0x1.42d0fcfa92f20ff1b5b87f2f698cp-2Q, -0x1.cf63dd26916f0b589f7743608e82p-3Q, -0x1.09c33622722ead8a0ff038a97bp-3Q, 0x1.8f5dd7f4e175279c5a356a3fbcc9p-4Q, 0x1.c2ef43d6125497c75e24a80c6bfap-6Q, -0x1.02b856404e8cdf85933c3736d91cp-5Q, 0x1.225f71210a7c1202de723c931ed6p-11Q, 0x1.391514c62a31adcdfa747aebbdeep-8Q, -0x1.1a6873b7a6465e0ff5c033201061p-10Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.111540743350109463621323917240923439042539591984421675908236045797651596176"), boost::lexical_cast("0.494623890398453085677204176877855588637786382896274362353183452618869845497"), boost::lexical_cast("0.751133908021095350678934498439731685580254783338261200973042065947992668343"), boost::lexical_cast("0.315250351709197629085989654810926396649519923517294524440416381606252448494"), boost::lexical_cast("-0.226264693965439820076314500660903465670540153972896994014348779178970276888"), boost::lexical_cast("-0.129766867567261935562289605876585460845233749223581470159931065581720412930"), boost::lexical_cast("0.0975016055873230491023435525381253423398307474952551427989319312112779815986"), boost::lexical_cast("0.0275228655303057286255408395041932136573875878304345432149420287900002992420"), boost::lexical_cast("-0.0315820393174860295650790806998486690574795323731484233751146493526060457826"), boost::lexical_cast("0.000553842201161496139251918398046501220611026277386496429547652456752475273329"), boost::lexical_cast("0.00477725751094551063963597524682070705023050121658143429759325457002031530381"), boost::lexical_cast("-0.00107730108530847956485262160958720003523523360933441968981858089478841770562")}; + } } if constexpr (p == 7) { if constexpr (std::is_same_v) { @@ -128,6 +146,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.3ee1cba38b6b0a205a4c9aac651fp-4Q, 0x1.960e67430300363014da61e0a27dp-2Q, 0x1.7550cd294c1fe3f40f374c82e23dp-1Q, 0x1.e10e9ba294ddc02a47644f227fffp-2Q, -0x1.26b830e491e32da8b525e8ab6aa1p-3Q, -0x1.cad37bbd5ab970931a91ed1dfe9cp-3Q, 0x1.241522ca7821c638e85eb5e52839p-4Q, 0x1.4a30727f2fa52896ef76d0300cfp-4Q, -0x1.378a8eecf45cc0627b1c4b5cace1p-5Q, -0x1.0f8eaa8ffe708c22b1145a6b8cc8p-6Q, 0x1.9b45682a50d70110df27e4af9e36p-7Q, 0x1.c271f584373d41d177397b25f7ebp-12Q, -0x1.d84a0f9cb2f314e62607c084aab4p-10Q, 0x1.72e5533fa10d324758be56783dp-12Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0778520540850091790199635219578937483791830529279556843870293717996297655927"), boost::lexical_cast("0.396539319481917306539000390936842856358715114933328740111049962075487815071"), boost::lexical_cast("0.729132090846235119916943070339282051717966061190136378269771574955357027757"), boost::lexical_cast("0.469782287405193122471591160974451738681791305678735953239252914100836922120"), boost::lexical_cast("-0.143906003928564975405068362213046001795273570549908483440175301422991840895"), boost::lexical_cast("-0.224036184993874982638140420233250964475783089677324655266509530724151657744"), boost::lexical_cast("0.0713092192668302647508765705011290482271132745141231465957511322020290613667"), boost::lexical_cast("0.0806126091510830719129224803593819058582382096562948905813921847722652754485"), boost::lexical_cast("-0.0380299369350144135795920616018580358544619693846786989828312271657410616427"), boost::lexical_cast("-0.0165745416306668806541076748917026547920450439482071370523927254871434907950"), boost::lexical_cast("0.0125509985560998406129898860341877795728947404604871003841181834416741023260"), boost::lexical_cast("0.000429577972921366521132129122819732222823535039694240974294636693544941849482"), boost::lexical_cast("-0.00180164070404749091526826291273955096258565146964109062532386481459081601883"), boost::lexical_cast("0.000353713799974520248446295836306425431095906005952004001252427564526433555672")}; + } } if constexpr (p == 8) { if constexpr (std::is_same_v) { @@ -144,6 +165,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.bdc64ada308dd431e90c51caaddfp-5Q, 0x1.4061690b4c31e70689f16560d4fdp-2Q, 0x1.59ec45992376070ce88329890c41p-1Q, 0x1.2bb39bedb5e27d5c19af764e6b08p-1Q, -0x1.03581459a95c5ec9b8a25898e79fp-6Q, -0x1.22d4f8724d56f584680effd871d8p-2Q, 0x1.ef6f9caf662af8d967c439494864p-12Q, 0x1.07acbb163ba0883fad048482f33cp-3Q, -0x1.1c9420f07509ca8be1e93402904ap-6Q, -0x1.692bc518a7fe18cb861085169737p-5Q, 0x1.ca215cd5b85b39449ec69ab26159p-7Q, 0x1.1e978df35f5fc0eabddff5ee9da6p-7Q, -0x1.3f2ef6d3ac74a30f6f64186b6be2p-8Q, -0x1.9ac501798e65cefa54cc7686cbfep-12Q, 0x1.622148e2ef341527c8d993cd7e86p-11Q, -0x1.ecbbbc88e3fc2ec652987ddfb595p-14Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0544158422431040099550094052029993550359955429473305039772928086771936225734"), boost::lexical_cast("0.312871590914299970659162375505717721949731974037022918569871242115311497533"), boost::lexical_cast("0.675630736297289806807800767047183149986911590633636422776675983811728748708"), boost::lexical_cast("0.585354683654206712771265520045098194430326667805336905570717534889570522452"), boost::lexical_cast("-0.0158291052563493056673805478764663041577447115450282655973533595603126615697"), boost::lexical_cast("-0.284015542961546926516203132374164732468435012487145179359920480909375859275"), boost::lexical_cast("0.000472484573913282770360590009825894986194801128877007464408409602299544658383"), boost::lexical_cast("0.128747426620478458857029287509708384302260157555648879557700016549770662789"), boost::lexical_cast("-0.0173693010018075461696161488680959831141308652948839431697731538851197479461"), boost::lexical_cast("-0.0440882539307947515067637232389635018975183919011099647275039198547543351349"), boost::lexical_cast("0.0139810279173982816487229305726334514423955953293434716914636811442629383260"), boost::lexical_cast("0.00874609404740577671638274324647564018040214708114067674268674702611775846381"), boost::lexical_cast("-0.00487035299345157431042218155710982401663497851215700376473620853219217075614"), boost::lexical_cast("-0.000391740373376947046298080357323776267522935007389049372449269467759195224284"), boost::lexical_cast("0.000675449406450569366369547573879299121848963001355843210361707737505966890496"), boost::lexical_cast("-0.000117476784124769533730628231698890944408669395031150392762001353514813073214")}; + } } if constexpr (p == 9) { if constexpr (std::is_same_v) { @@ -160,6 +184,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.37ef3e540da7c3aa0d1dcf5bb03fp-5Q, 0x1.f35f9808bc2a0772556b997598d3p-3Q, 0x1.35ab60603a287a1609387fb893b8p-1Q, 0x1.5088101e8fe3530163beb11528dcp-1Q, 0x1.10c9ca803fb2272d1e1cf6fa2d0cp-3Q, -0x1.2c4ff66fd53eee10d811f3bf5459p-2Q, -0x1.8ca8ebcdc98fc4aa06bb294a039cp-4Q, 0x1.303621e43e77126c475b311fee41p-3Q, 0x1.f768d94677996d7b05f99f12d599p-6Q, -0x1.1506294f451a1f48db3652c40168p-4Q, 0x1.07231a6b6ca0cb934ff78371a261p-12Q, 0x1.6e5f9be058887734b49665246c12p-6Q, -0x1.358a39f783bbf21cd3bb737b9bf7p-8Q, -0x1.1897b64b3bfb583210060e933d6p-8Q, 0x1.e4597bbfc711eadc2635b08cc11dp-10Q, 0x1.e3276a3bc510acb32c14bfd1c3d9p-13Q, -0x1.0833da803978a3e6248db817fff9p-12Q, 0x1.4a11ba1ad31b48b0c2e32412ef31p-15Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0380779473638783465886976588795511844877171449627841747664719248482680479602"), boost::lexical_cast("0.243834674612590353732041581649284415526361108560923136142908810357641947074"), boost::lexical_cast("0.604823123690111111903076867434236170895956271189611756533371353266219479839"), boost::lexical_cast("0.657288078051300538078212639045173214030585866924591885443603406558844920237"), boost::lexical_cast("0.133197385825007576190954945899795553692178076843366113615434683783912029373"), boost::lexical_cast("-0.293273783279174908806403195242198731043896162858990682572511282649777494073"), boost::lexical_cast("-0.0968407832229764605135081335376966022482545810459909967947126760842963820075"), boost::lexical_cast("0.148540749338106380135072717506042302479125857728060306077164939460051558202"), boost::lexical_cast("0.0307256814793333792123174007203788271410580502467074478150306050580744709008"), boost::lexical_cast("-0.0676328290613299736756422748297190159257879087135373990074833120984537787038"), boost::lexical_cast("0.000250947114831451957587189749988554331517627199370963332183416469143399245077"), boost::lexical_cast("0.0223616621236790972053737827026909524185564668830885375472181623365153339468"), boost::lexical_cast("-0.00472320475775139727792570784824246540572951491262793801875852685657845737998"), boost::lexical_cast("-0.00428150368246342983449679500231453187648118181146328837486045503769103000912"), boost::lexical_cast("0.00184764688305622647661912949112567705112108135960031816073251504574674723494"), boost::lexical_cast("0.000230385763523195967205216392824542169294066205246371197226000686680376244675"), boost::lexical_cast("-0.000251963188942710136974988684287860660728218154347802821413426535123097430873"), boost::lexical_cast("0.0000393473203162715994806898830658915070778247705551701350735993815544054870406")}; + } } if constexpr (p == 10) { if constexpr (std::is_same_v) { @@ -176,6 +203,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.b4f6549dc7ae2d0da711a289f0cap-6Q, 0x1.8162d69198cfdb39a90922d70e5fp-3Q, 0x1.0ded5071bf8739f750ffec152978p-1Q, 0x1.607db4062d7753edab576af3e0dcp-1Q, 0x1.1feba4923f566c829244a5b4f4c2p-2Q, -0x1.ffaf7b6c111e2f4b082d1396dfd9p-3Q, -0x1.914c47c1ca801c5176763b1002edp-3Q, 0x1.04da377a0ae834bb94a9fa4f0243p-3Q, 0x1.7d29b819fd18d32d43de1a7d3641p-4Q, -0x1.246e307349ac4648ebbb94e378bbp-4Q, -0x1.e2a1dd5152b24d9c384763b949a8p-6Q, 0x1.1014069cb8f3bf95bd45be617d84p-5Q, 0x1.d8b7db3e21713e4ea2df5435db4ap-9Q, -0x1.5fb466d770edc4c0f4a29d7e3176p-7Q, 0x1.6dc8787ae38dd789b768877a70c2p-10Q, 0x1.0526072a98cd7f8751cc002da048p-9Q, -0x1.67962098c50f012db290a44515a5p-11Q, -0x1.e87f555dc50dd253428e6067701p-14Q, 0x1.888a11cfae432f4e4bd0c734fcc9p-14Q, -0x1.bd12a2a1a43db4fff0519cd821dfp-17Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0266700579005555535866174487713085827719249829085128993277997577621650735643"), boost::lexical_cast("0.188176800077691489020892973679093994270254675864039348434859544409886608680"), boost::lexical_cast("0.527201188931725586481744827959508192498140268084022344531854947145139828409"), boost::lexical_cast("0.688459039453603565741871782549235853977136404240733953727968115839903445132"), boost::lexical_cast("0.281172343660577460748726998445589287624388885902615041383154395183374807120"), boost::lexical_cast("-0.249846424327315379416101897920779100056466973713207371501312159710676300514"), boost::lexical_cast("-0.195946274377377043504299254319098131876677647638277847439678187683856178731"), boost::lexical_cast("0.127369340335793260082677233201400977078617748042224599556309752373906702894"), boost::lexical_cast("0.0930573646035723511603522898354527322694291799894692586806397410224547567765"), boost::lexical_cast("-0.0713941471663970871453360930760506476729261198370215091752375634796582409510"), boost::lexical_cast("-0.0294575368218758128582832376014183919938820051606494877976965428318490167081"), boost::lexical_cast("0.0332126740593410017397636531821591289797833741326709604332335127083312999184"), boost::lexical_cast("0.00360655356695616965542329141713340329951735051861899476273061229128656318944"), boost::lexical_cast("-0.0107331754833305750443181141065136444811154878114392321337033393709343696195"), boost::lexical_cast("0.00139535174705290116578931844795770756766054285568855242672111772342943140108"), boost::lexical_cast("0.00199240529518505611715874224264064321176255536551410528006793647824864459995"), boost::lexical_cast("-0.000685856694959711626561370981926571419662504333678692051621190356175797931438"), boost::lexical_cast("-0.000116466855129285450951480971025899189152746185434759736281923507446885853623"), boost::lexical_cast("0.0000935886703200695913340501303422285439968845621529727644352187393967719605190"), boost::lexical_cast("-0.0000132642028945212448124366753122668330574924096060582975640067461946671323150")}; + } } if constexpr (p == 11) { if constexpr (std::is_same_v) { @@ -192,6 +222,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.324991607609160c660c469077c4p-6Q, 0x1.270c9c42314cf5fa956419fe6ca8p-3Q, 0x1.ccb286198c9dee96d12668532b6cp-2Q, 0x1.5f125643212cb922d29e40df5ae5p-1Q, 0x1.a5d9fccefe816554cfd2c1b4c2eap-2Q, -0x1.4c56f6b2bf66c3c093c0529f8f7fp-3Q, -0x1.18cff89a8cc4603466567c5566b2p-2Q, 0x1.0e83b8b6a4d8e932eca95459a69cp-4Q, 0x1.32d0a3f0ba73261f3f385a0ab52ep-3Q, -0x1.7cc387e4a9a091c75d9de8faea58p-5Q, -0x1.10221dbbeff7c12d2228c7667179p-4Q, 0x1.00b27276a80990547cbd63f84547p-5Q, 0x1.557516a958be52b928260c4c6ad5p-6Q, -0x1.f77975a6883f7054b8b01c477981p-7Q, -0x1.b5e49f3346a8b7e121e98be0fcfbp-9Q, 0x1.42fd20a75f9abc16cec7fe76464bp-8Q, -0x1.439543c8411328be7c3dbb239962p-12Q, -0x1.d4338d3fdae3a1309e0d7105695cp-11Q, 0x1.05415f0bc6ea25b1e91fb2adce4fp-12Q, 0x1.c8ab05d193c378f97fff6933dc9bp-15Q, -0x1.228a0febb3e8bfe721948bedcf9cp-15Q, 0x1.2d9b0b4e10d77be6e48f3790bbdep-18Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0186942977614710840254357293956197572896777445592195854328669208544639848493"), boost::lexical_cast("0.144067021150624512795191584936100114302371896755623960431885248217612109866"), boost::lexical_cast("0.449899764356045334768894037385360367780689537864893347459965579586344042705"), boost::lexical_cast("0.685686774916200511120938631696309793594020496456770349505158901745075089131"), boost::lexical_cast("0.411964368947907462925939648571066730743040041018784531569724251133330862864"), boost::lexical_cast("-0.162275245027490362240582726998551154074426432421213020964966742981832149727"), boost::lexical_cast("-0.274230846817946961202100945283526662864808952177517822190577839005023967370"), boost::lexical_cast("0.0660435881966831919006145788812630265675314216894079154111345722601572700631"), boost::lexical_cast("0.149812012466378496406656261704419329858827242026748465379690959421507533896"), boost::lexical_cast("-0.0464799551166841872716172258902374457722326096684826074745032098759584318172"), boost::lexical_cast("-0.0664387856950252052789921553697120319181956689607973962285857402336065270973"), boost::lexical_cast("0.0313350902190460760309479840830314453635810568088003196493644550909547400332"), boost::lexical_cast("0.0208409043601810630229481125565649101515776183273471569112669220076703474398"), boost::lexical_cast("-0.0153648209062015994261981160995882274401432649577300012020584862793777385002"), boost::lexical_cast("-0.00334085887301444560609080861798240610193065835949919084565673177725408174281"), boost::lexical_cast("0.00492841765605904112317073974170827369028554772991580241839745801019376641230"), boost::lexical_cast("-0.000308592858815143165175459072627895330718021660507848858192156227602365444134"), boost::lexical_cast("-0.000893023250666264613390082462264865398987951987862072879313335822408534301830"), boost::lexical_cast("0.000249152523552823498871221687266680108822119930285542538197139249093202823549"), boost::lexical_cast("0.0000544390746993684716735785687957683219193667852560079397804368892016829413126"), boost::lexical_cast("-0.0000346349841869849955412808515997404321450648804823345803594360135567940224107"), boost::lexical_cast("0.00000449427427723651009541564828231013091641049798738375346057174174843400859633")}; + } } if constexpr (p == 12) { if constexpr (std::is_same_v) { @@ -208,6 +241,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.ada9978d2fa568b21229688156b8p-7Q, 0x1.c0c890682f8790d7f6bb1c1aa44ep-4Q, 0x1.82696272e40bd05e57c851b9cb36p-2Q, 0x1.507c59d8e6f6ac435d1e88e090b6p-1Q, 0x1.082245c29797798f324c3b86f65cp-1Q, -0x1.6eb4ac1d9855ccfed03d4133c6fbp-5Q, -0x1.43c448da45b222f8d287f72956dcp-2Q, -0x1.85996f0f3b3b27b5f0ec32953a95p-6Q, 0x1.75b757e56dd3b6e26eea4e0a43bap-3Q, 0x1.5f3ea878d368e081a5d3cb36d936p-8Q, -0x1.8afc6821933836a0611906df913cp-4Q, 0x1.638119d1c4361bb00a2f22d1f90bp-7Q, 0x1.5458dbe394eb05c5aab3c4ceb31ap-5Q, -0x1.90617513f389b7954493854c387ep-7Q, -0x1.a4c4a623e2a50fc10158bea8a45cp-7Q, 0x1.b7d844bffa4e88c2ef52650eb0e3p-8Q, 0x1.26babd1f8d1809707edb54236067p-9Q, -0x1.1dac0186ec14265ff3ab908c13a3p-9Q, 0x1.b73c724cbcd24a84c3c597249f8dp-18Q, 0x1.9788431be0bfb2d1938d25135045p-12Q, -0x1.7336904b8b4e84c0e0396f9346efp-14Q, -0x1.96b4a56f63fa8a95abb9ecaeceaep-16Q, 0x1.acb92f10c4239fce7d915af19a6cp-17Q, -0x1.9a7502d7dc2f2e1e665f9ba74bc1p-20Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0131122579572295175067460908889332806566551064193132500774828079813751369078"), boost::lexical_cast("0.109566272821185154605704505024890542607568050306677404638365743414594716237"), boost::lexical_cast("0.377355135214212657092821260487920614901094170605752633470583911562885099045"), boost::lexical_cast("0.657198722579307089302761128664116983425020328998841214139428195001939202386"), boost::lexical_cast("0.515886478427815608756032648054303270067769308703609005612764729867503168411"), boost::lexical_cast("-0.0447638856537746266676274731154016652928454363150592413907170410117965514990"), boost::lexical_cast("-0.316178453752785536864802935347803109850883903254736438957420337160049554984"), boost::lexical_cast("-0.0237792572560697276839975460913322578455336655833174115248261271603350281595"), boost::lexical_cast("0.182478605927579679854043611618924171029477144809630269832901126083410652478"), boost::lexical_cast("0.00535956967435215032827627672976833228886266518419270582163634261809269415715"), boost::lexical_cast("-0.0964321200965070820265032053432248412743088014304522051434640274861906048848"), boost::lexical_cast("0.0108491302558221843808901023774815218866163056760333465932251226434077741286"), boost::lexical_cast("0.0415462774950844407392709468190657486451353222138837486128707899413616614352"), boost::lexical_cast("-0.0122186490697482807199879826647156771298246609311655817534481104550208384247"), boost::lexical_cast("-0.0128408251983006832946603447189472849620610983231409763327522557348508782102"), boost::lexical_cast("0.00671149900879550917776702706821567245064811218585645674037945533688642441241"), boost::lexical_cast("0.00224860724099523759995086521126723401834319978614617709926201027901007445066"), boost::lexical_cast("-0.00217950361862776047159890337958417118784007529186057126498094298705073259759"), boost::lexical_cast("0.00000654512821250959556650043039932711072911177056889735663071455200741848443049"), boost::lexical_cast("0.000388653062820931443589728883779598179191748857342017752343609613138331820861"), boost::lexical_cast("-0.0000885041092082043242082164596155372659873832215147193280801544303001991847212"), boost::lexical_cast("-0.0000242415457570307840297891532053171958042377836266428223937753220729228844731"), boost::lexical_cast("0.0000127769522193797665871404636261662088737596094143942875605535392042653701946"), boost::lexical_cast("-0.00000152907175806851090271223916452290122319761543966034067260269641683218542373")}; + } } if constexpr (p == 13) { if constexpr (std::is_same_v) { @@ -224,6 +260,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.2d89174d37e3b6596d64d168e49p-7Q, 0x1.53664fc8a3d4c0d33efd4b4bc6fap-4Q, 0x1.3f7bf6c09afe857e70d916613d78p-2Q, 0x1.38dc5001834baade66ebb6ec9fc1p-1Q, 0x1.2d82ef0bea471de1f0a3864a5cccp-1Q, 0x1.644b251290fb4bea9c417da1f71ep-4Q, -0x1.42884206fc5ade5015e8dd0e5832p-2Q, -0x1.fe442b86ad7635e6a44fa231478p-4Q, 0x1.6f91279c81aa3aed801eca5172e8p-3Q, 0x1.2acc804557c8ab4899f3d0916648p-4Q, -0x1.b163543c8eacbf70b0092010e485p-4Q, -0x1.b1fc6de2397062d67f76ff78186p-6Q, 0x1.cbe5044520d5e315c90c0ed1b10cp-5Q, 0x1.37f29dfe3e92c6d51003ce786db8p-9Q, -0x1.867439245b0c6d71509d7a14369ep-6Q, 0x1.0128d031aa3b020f68dbd131fc68p-8Q, 0x1.db80973172630eff11f1aa6bf206p-8Q, -0x1.6a025cdac7e0fe4d3e8433e38ffbp-9Q, -0x1.58e561b1f2cf60b1ce144cfab0ffp-10Q, 0x1.e8ceb1ee24cab5dbcf0c32d1591bp-11Q, 0x1.9d26d847f17c9a8ce68c968f105dp-15Q, -0x1.5a4cf360064a4020bfd19dc8e5fp-13Q, 0x1.0159a865542d28f1113c2ad46cb5p-15Q, 0x1.5e5f8028cd834a146bf59b16d932p-17Q, -0x1.3b708a4c3be3403a7da544157c5bp-18Q, 0x1.183f9db8da3a04f4c66e4459dad2p-21Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00920213353896236797297016347564418466753417191641656238600970303711912173265"), boost::lexical_cast("0.0828612438729027796443202713123046640520811333289013507251427742009482956517"), boost::lexical_cast("0.311996322160438063396078411221404969394668352896718031716039017308515654041"), boost::lexical_cast("0.611055851158787652821199513674418056207361267601823943852658294015204037145"), boost::lexical_cast("0.588889570431218908071039534739533392766598638281283604223557340650249576137"), boost::lexical_cast("0.0869857261796472373102373983808749439923188407661970125088201664378054171345"), boost::lexical_cast("-0.314972907711388632998169825593228258287688845067878902595030681868130772999"), boost::lexical_cast("-0.124576730750815258941380833602126018079273929517363471957206932075260972005"), boost::lexical_cast("0.179476079429339843234845007233936901358196625624413339304288145469676423326"), boost::lexical_cast("0.0729489336567771638090283061047766198332592902687987355362796328461636696921"), boost::lexical_cast("-0.105807618187934326450966730419646484947886075480123665823236051077820681894"), boost::lexical_cast("-0.0264884064753436946396391224803478572641960484429769701626422412133519842633"), boost::lexical_cast("0.0561394771002834288621450199838733111998837879254310024473705625396675790207"), boost::lexical_cast("0.00237997225405907881146517095855420835809439461205193486847513927070930528134"), boost::lexical_cast("-0.0238314207103236490320640306775773913425292271763622627407729863341057724688"), boost::lexical_cast("0.00392394144879741624331637022081552655882474662345140404391840728787217413821"), boost::lexical_cast("0.00725558940161756619451839330050269889897352967964668369526982867260050623476"), boost::lexical_cast("-0.00276191123465686217801457626609844599535009333050181802496631648326614964558"), boost::lexical_cast("-0.00131567391189229893661383537059364337606041259265365230723812459474570122051"), boost::lexical_cast("0.000932326130867263386222651780254851410091808829980195230799156927112701492336"), boost::lexical_cast("0.0000492515251262894619214095738786659621010377829938882350084009445661139469929"), boost::lexical_cast("-0.000165128988556505489461668770923800075589854821465977670334780149359987420945"), boost::lexical_cast("0.0000306785375793254934664948322857547623660042821723790056312823074855283018382"), boost::lexical_cast("0.0000104419305714081370817071499108059695167070643621732816964147406843820801008"), boost::lexical_cast("-0.00000470041647936086832565019516506177132165038358297095855656805971133412246529"), boost::lexical_cast("0.000000522003509845486469173642435484317697674705215524355700153190105348895004025")}; + } } if constexpr (p == 14) { if constexpr (std::is_same_v) { @@ -240,6 +279,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.a7702ace363ac35a31e24ad7f18bp-8Q, 0x1.fee460f5cb8771588fb11eee4edep-5Q, 0x1.04f777f62f422960e164233d2842p-2Q, 0x1.1bcdf22a1725c010c6b543c39465p-1Q, 0x1.432b0dc3136d3b304d5a3bf4569bp-1Q, 0x1.bfd66ae4258abee147e56af809ep-3Q, -0x1.1635861af071cce08b7655b9575p-2Q, -0x1.be885d06053beddff8849acb8697p-3Q, 0x1.1b6ef32bc7358856a3c8661f7dbbp-3Q, 0x1.1eb28fc03c55b30ce48dc30b7f77p-3Q, -0x1.63524d6aa4cf6fa795512cfa3aa5p-4Q, -0x1.2510847f3ed25a6abc4fb2ebbea9p-4Q, 0x1.c480a659de0cd4f4123d770896e6p-5Q, 0x1.ba103a92149f4583a4c79c292018p-6Q, -0x1.ee8e8a6bca9ac4ad53dedccf86b9p-6Q, -0x1.6ffce6192a67aceee5260da8193dp-8Q, 0x1.a3160ba7d924dde8cc52f58fbb97p-7Q, -0x1.873bd13c8af17ab00e30f03b73e4p-11Q, -0x1.f894721441f671f4ac26746366e6p-9Q, 0x1.1650e1f6ec4c290c75eee26e8b4ap-10Q, 0x1.7334fd9e58c69f69b95d47a6075fp-11Q, -0x1.959f69010da009a2eacf096b1dafp-12Q, -0x1.5e73f3c02020121b8b1dbc91cc8ap-15Q, 0x1.20612a2e814f83021e4b38a90018p-14Q, -0x1.5adbf364f5e1bddd8115a86dd662p-17Q, -0x1.26968e53fb76ce12ec5e07348937p-18Q, 0x1.cf0cbb4133dbb68c44095fc163dep-20Q, -0x1.7fc90f0c46da191bc033464815fbp-23Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00646115346008794781816639744862281427232715941920119921810140416821319638585"), boost::lexical_cast("0.0623647588493988983279856675843487742830533369340766716460251880613807597066"), boost::lexical_cast("0.254850267792621353665907788677828668618704241636713744378008420238232719628"), boost::lexical_cast("0.554305617940893835992683144985115484407826983095163460968399777532226842271"), boost::lexical_cast("0.631187849104856779557661713535817234862395245657001728978880959248433640269"), boost::lexical_cast("0.218670687758906521491747591821751705176577432127043205903027323352534222868"), boost::lexical_cast("-0.271688552278748041414219247618117109460488246568333081431189666923849066652"), boost::lexical_cast("-0.218033529993276044755555881270231191197524066947060475274712704179785996228"), boost::lexical_cast("0.138395213864806591073993969002157371398990046322968611905911990239065683492"), boost::lexical_cast("0.139989016584460701249294316227116344032822155561432618133368381730127661592"), boost::lexical_cast("-0.0867484115681696890456082206672779538297914953951750365749296445982289331724"), boost::lexical_cast("-0.0715489555040461307358414511517380799095806967312953809999091309335447192979"), boost::lexical_cast("0.0552371262592160441161883406053340339791383363251167215767110765995965856731"), boost::lexical_cast("0.0269814083079129169739903140321519334337576659580727423328434928060131390138"), boost::lexical_cast("-0.0301853515403906351871482262348913757378157540665865262488375619379066007462"), boost::lexical_cast("-0.00561504953035695913321837136769149863745729720392581038769868016916017798506"), boost::lexical_cast("0.0127894932663334089615733070578407929937490386157205831348153451948141528455"), boost::lexical_cast("-0.000746218989268384937181716073918178097195818798881330290043548750870183218766"), boost::lexical_cast("-0.00384963886802218744578634931609555177409681850828570049305891572532777766984"), boost::lexical_cast("0.00106169108560676184303256674938841117303394158214783086389393956154388248847"), boost::lexical_cast("0.000708021154235527858644297769761712898347186346418159537167009442266803119446"), boost::lexical_cast("-0.000386831947312954482107666339805731442732890210784216537990146842609536038748"), boost::lexical_cast("-0.0000417772457703725973526797953983925892838972659013273013105432373007939629113"), boost::lexical_cast("0.0000687550425269750960387343702162803160189037068765187527988272789892867302714"), boost::lexical_cast("-0.0000103372091845707739466140734259481458626927250949074485069144305905647763599"), boost::lexical_cast("-0.00000438970490178139411525404256136716982932308536080082571815104919437269388055"), boost::lexical_cast("0.00000172499467536781276988571269274179852358789470986735657691071794719454646345"), boost::lexical_cast("-0.000000178713996831135907633419293847083934388299030997695944699402284569127317214")}; + } } if constexpr (p == 15) { if constexpr (std::is_same_v) { @@ -256,6 +298,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.2970058a26dcd961f2ddf52bca08p-8Q, 0x1.7eec010bca4c417f3cf45c166751p-5Q, 0x1.a5efd6f02857dd0be400d7c02e2cp-3Q, 0x1.f8747691d3f737355530dd281d86p-2Q, 0x1.4aa8051a530b457c39051251b937p-1Q, 0x1.5b237b0c281791146b95d35023c4p-2Q, -0x1.8bae9ca895b451d87fbb9a690248p-3Q, -0x1.27d0d6e28e01f3ef0606971828aap-2Q, 0x1.0b6623378c72eb295fa0f634a67bp-4Q, 0x1.856ba3f0d1d5aaf4f59a12cbb286p-3Q, -0x1.44f200621040cdd51fafc7035006p-5Q, -0x1.c726bf22e4a15fea85834dbb1052p-4Q, 0x1.15858527779bc1c4ec7f8b6fdd21p-5Q, 0x1.c0c32426f4662ec60f158af78296p-5Q, -0x1.a62aa972a6fc3876e9915f565de4p-6Q, -0x1.54f3ad3a0b7c5bd971d938015013p-6Q, 0x1.ee451350034703acaa0dbe95c1aep-7Q, 0x1.4e4c95b98ec2d5e117559a2b0da9p-8Q, -0x1.a92e1fc2fdcad88a36c4f23f938p-8Q, -0x1.fb000715d8e6558a8e3b0bc34d7fp-13Q, 0x1.fd6e43c3dd5e86d041c185aa9428p-10Q, -0x1.879fe7f24ba0a4818b2d76fbd7e6p-12Q, -0x1.79080f71ee322531c0337932b9a5p-12Q, 0x1.46f04a6cb59007eab6af7b114fa4p-13Q, 0x1.b0bacca20c60f4939edefbff1354p-16Q, -0x1.d7ff965f47a09038cb01ea5da5e9p-16Q, 0x1.c35f5c15433718b508f832bbf1b8p-19Q, 0x1.e6358dfe44b5282546827ce8042cp-20Q, -0x1.532291d1cbfa3eda1a3275ffd36dp-21Q, 0x1.076d01633701901bb8cc971717bp-24Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00453853736157889888145939491021169634666367124378878699791651359730618263777"), boost::lexical_cast("0.0467433948927662718917096933484357577657915170021494351311319734377213834945"), boost::lexical_cast("0.206023863986995731539891500947630721930613850564193090270204726624901561209"), boost::lexical_cast("0.492631771708139623606775707402994637261722156513093240216016003697522813162"), boost::lexical_cast("0.645813140357424358176420912010691799643260828749404618107148947895533066481"), boost::lexical_cast("0.339002535454731527691264114383577391875676949179355466933669011509397556470"), boost::lexical_cast("-0.193204139609145428706399053432147174630409003914286382793775492150589726686"), boost::lexical_cast("-0.288882596566965646248412500982233298131143563043534259497129296256293483504"), boost::lexical_cast("0.0652829528487728169228310791986957488203917428559614412596510130561953369929"), boost::lexical_cast("0.190146714007122982348489311658602051795950125817433669687815606055254287820"), boost::lexical_cast("-0.0396661765557909444838436675189620066838174282068373680544974535292838687668"), boost::lexical_cast("-0.111120936037231693365671032467405860885862376216591412050565788400539631609"), boost::lexical_cast("0.0338771439235076862085481784443352377086474468741126536946319599123012785905"), boost::lexical_cast("0.0547805505845076126891379031258187910860941599742276856424484536408030091303"), boost::lexical_cast("-0.0257670073284399625859452575426982639220364163482534013839683682541716280711"), boost::lexical_cast("-0.0208100501696930816778848342467700016205465795136489904099616617271926101264"), boost::lexical_cast("0.0150839180278359023632927446017032273624489282330562771623396889036950783790"), boost::lexical_cast("0.00510100036040754316970886018556531472480106652734422205552663106916575853665"), boost::lexical_cast("-0.00648773456031574499518168314921869081695584563938882640792896746945184786140"), boost::lexical_cast("-0.000241756490761624281166722532630017960522994699581453522332941192889131156009"), boost::lexical_cast("0.00194332398038221154176491233254108744101142486557953140145230261789465341230"), boost::lexical_cast("-0.000373482354137616992009809421364541461138763096803025662574022673555831120585"), boost::lexical_cast("-0.000359565244362468812164962007590980885819420245408409030562748046672838761659"), boost::lexical_cast("0.000155896489920599747947165824122710881625556705962549591522860363042830623991"), boost::lexical_cast("0.0000257926991553189368092586241761685591294404236876734070916011973700950042214"), boost::lexical_cast("-0.0000281332962660478136475532477707847866579144387629378890426725562075302388539"), boost::lexical_cast("0.00000336298718173757980312484521042017747213484665586407818718630450150330033976"), boost::lexical_cast("0.00000181127040794057708376851091228584116057708592533750785059029068086553957632"), boost::lexical_cast("-0.000000631688232588166442120159729951765765416613791512119551041664162606772181110"), boost::lexical_cast("0.0000000613335991330575202905629946028978860198919045088539651217384559505804672173")}; + } } if constexpr (p == 16) { if constexpr (std::is_same_v) { @@ -272,6 +317,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.a2047f25eec85da6e57cd7f20965p-9Q, 0x1.1df6c86cbec60472edd73314093ap-5Q, 0x1.520d391a9410689a221d2a40ed0cp-3Q, 0x1.b8a3e5feb48792faed491d08e637p-2Q, 0x1.465391b4659339393dc6b44dd0b9p-1Q, 0x1.c2db72f84c20394e90d8314fee8dp-2Q, -0x1.6f9ed69c399c6d957cef0caf36cp-4Q, -0x1.4ee9af39c16ebfbef0c302e6791dp-2Q, -0x1.c96973b93bd864088cf77c5363e8p-6Q, 0x1.b084bf1dc763ab7d34b03cf7014cp-3Q, 0x1.bff160aba4bc2b81b5cb21d8ed3dp-6Q, -0x1.0f21999627c5eb1bdc396cd5510bp-3Q, -0x1.98ed2d2871d09c2ff301236b3aa5p-8Q, 0x1.36fc54ec8b1065ad541d9561e805p-4Q, -0x1.f159dcb973ff3c971dea81777e8cp-8Q, -0x1.2e3093b602a5114cced31fb3d21p-5Q, 0x1.516f07b10e2bfeeb35e5d488972dp-7Q, 0x1.ca8c3dcce54c309c6bfdafe5b818p-7Q, -0x1.ca18fbf2cc14161cd462d6382e8dp-8Q, -0x1.dda9bb9568c150b5b1b563e2a704p-9Q, 0x1.99ff0c3f2ed80a696d3f49d1ae83p-9Q, 0x1.abb6031610512ba452ab2c15607bp-12Q, -0x1.ed5dcd1b49a3f3c23377158c2ae9p-11Q, 0x1.df29e5ea1284520ed9350c7d7e2fp-14Q, 0x1.6e8e301063e5a66bc2dcbb672407p-13Q, -0x1.0000dea4283e8e4f97e320b5edbp-14Q, -0x1.d3f0626b575af7e0f5c7b70618f9p-17Q, 0x1.7c64ba15d23464b7681824c41ca1p-17Q, -0x1.1821ad345e7bfc3ef33cc03c406ap-20Q, -0x1.8b555407022a1683907685f46c79p-21Q, 0x1.efcebf5a99b7b789a7792201843ep-23Q, -0x1.6a61bcee28102f153c8290cebfbbp-26Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00318922092534773802976954756464595868706708675013142876787587817778694863119"), boost::lexical_cast("0.0349077143236733464103014722402302000921824143050398414614005464773763780013"), boost::lexical_cast("0.165064283488853117899125273056113481158483500234272324021359282902034099572"), boost::lexical_cast("0.430312722846003813740392542435768462063397047803698677392464629118864929936"), boost::lexical_cast("0.637356332083788898631985241299603053649859594081419812596775159322552430035"), boost::lexical_cast("0.440290256886356900039086916357167928852780303513527257878988432216501129849"), boost::lexical_cast("-0.0897510894024896428571871807744259743065924744558266014962471841522684784655"), boost::lexical_cast("-0.327063310527917704646290567568911964175722891822881242814172353116733610255"), boost::lexical_cast("-0.0279182081330282766826451959502687320433997121917473604153547976243684979156"), boost::lexical_cast("0.211190693947104288720968016326883790092849142616767943925104282659239340555"), boost::lexical_cast("0.0273402637527160413648524575720161796542902781950713022023150026811811035864"), boost::lexical_cast("-0.132388305563810390450047414775649337509228781770602797879854902742212569323"), boost::lexical_cast("-0.00623972275247487176567450339412002586544465631167876099076145808663824556181"), boost::lexical_cast("0.0759242360442763158214849874394142246153040594610094335194031399951322105236"), boost::lexical_cast("-0.00758897436885773763849489086463699579658697514499092540009716094367144606278"), boost::lexical_cast("-0.0368883976917301423335266632089455431471874842970673083106406876512904740900"), boost::lexical_cast("0.0102976596409559694116500058007661690052885626580366220885414734497334909977"), boost::lexical_cast("0.0139937688598287310295045187367032972640984029172786898849010078360486452906"), boost::lexical_cast("-0.00699001456341391667028424953651728833805785619964646907811575967502711102002"), boost::lexical_cast("-0.00364427962149838993216900054093362938705533397335310866884121504669938973849"), boost::lexical_cast("0.00312802338120626883166120255985467876782147190619360811745036081031020620657"), boost::lexical_cast("0.000407896980849712836241747032340609578243195297231054671507139711098341190969"), boost::lexical_cast("-0.000941021749359567588926645395363587540775474721673448050925027367949065706153"), boost::lexical_cast("0.000114241520038722392644022809955566294583968434493647265287709142315097418924"), boost::lexical_cast("0.000174787245225338180380175863766074687498602472861539989797195359589183047664"), boost::lexical_cast("-0.0000610359662141093583516236915052221281195725998196591914396172281391485128503"), boost::lexical_cast("-0.0000139456689882088934519907831199840198232527356919867533540870797045644631590"), boost::lexical_cast("0.0000113366086612762585875884876288653699751947106820375366175784342881379088583"), boost::lexical_cast("-0.00000104357134231160650152545473726261540488747893063567647154603268028625910132"), boost::lexical_cast("-0.000000736365678545120551209969571972556364658544554584166332743356923285383067848"), boost::lexical_cast("0.000000230878408685754586640541273294200612130630673586665552537254486473108851937"), boost::lexical_cast("-0.0000000210933963010074309700057262360348990683629758459160530774534994952533728279")}; + } } if constexpr (p == 17) { if constexpr (std::is_same_v) { @@ -288,6 +336,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.25d68f81bd86c306bc9043f43f4p-9Q, 0x1.a9bea4085cef3d6d79a074d9709ep-6Q, 0x1.0cba6633a3a6d489f4c961323b24p-3Q, 0x1.7b3d3861245d02709eb04b0b2b39p-2Q, 0x1.38d48c64aa0daf396243783e95bep-1Q, 0x1.0960af0f4068e5ac2ea6e7c9135p-1Q, 0x1.bf874a24b1d55da571e39f2bf7e7p-6Q, -0x1.50335073492d1d5e6945d8cdee28p-2Q, -0x1.0346bb1b97633ba3dcc115a9814cp-3Q, 0x1.9417930ab08a311830b19e500034p-3Q, 0x1.9e403f27b713f2db7263ac22d15fp-4Q, -0x1.03b7f2067576f3b2927e9c5889d3p-3Q, -0x1.d3b162866891a8d294e6e9eb979p-5Q, 0x1.4c35ca8307eb62387847e8508ae5p-4Q, 0x1.6d90b88bab05f824bb4e728b7a1p-6Q, -0x1.80637c4a935c7dbdd09fd2c6d8fdp-5Q, -0x1.acbb0e1b24a7711aad0c2cc58d1fp-9Q, 0x1.7477f35c89772c79eec161a3cdd2p-6Q, -0x1.8ed9cce7691caca1362d6d7abefcp-9Q, -0x1.19e6894a383d0a23e4d18574889p-7Q, 0x1.85057173113925897d4027a40b6ep-9Q, 0x1.2d9fa2834b37aecc772ff5c2d7b1p-9Q, -0x1.78a90e5fc8eeb8c9dbcf2179c3bbp-10Q, -0x1.58126708ae49d0421a9c690b913dp-12Q, 0x1.ccd01a3d65144c8ab80302b0f5dbp-12Q, -0x1.adaa9541cd34139a00a6638e9bf6p-16Q, -0x1.5822674fd0b1a40e647125cde434p-14Q, 0x1.85029b61ff0fb98b3294c269c9e6p-16Q, 0x1.d5219c45df32dc63e76e89984d9dp-18Q, -0x1.2e63809757f52cc8ed09e415ace1p-18Q, 0x1.43e648c7ce72f3a94ea0d55898bap-22Q, 0x1.3d94aa0876b2cc113a8ea22e3eecp-22Q, -0x1.69ce4aed2f58e6ecb8a211f55ad1p-24Q, 0x1.f36b16a008a288af85eb1e1cec02p-28Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00224180700103731285353596267707443691406219188056037073325053118133419193342"), boost::lexical_cast("0.0259853937036060433891486459172078831547394452487824129439994827687663725129"), boost::lexical_cast("0.131214903307824406577550623185906996014429360925997853006700439459033631661"), boost::lexical_cast("0.370350724152641150449254819072188644947707887689680382365042593579529628290"), boost::lexical_cast("0.610996615684622818188667886767937208273709389335872629137178390490835290734"), boost::lexical_cast("0.518315764056937839325453852808596804621681719771841640243990498683288900340"), boost::lexical_cast("0.0273149704032936350043125071914758648035046981896456300367294282283271222511"), boost::lexical_cast("-0.328320748363961736090966534072506176758159769815155802467913052689676377760"), boost::lexical_cast("-0.126599752215882702874467911093382550505396626010408616210372832359164928283"), boost::lexical_cast("0.197310589565010992785404704478193014255142241413564691712228422600456673716"), boost::lexical_cast("0.101135489177470272150969985643343480219662254549966487610943796293105029624"), boost::lexical_cast("-0.126815691778286311094857112866233168038479218591501706573213748994956827246"), boost::lexical_cast("-0.0570914196316769272891123947865138232416116086984534705399014464059382899408"), boost::lexical_cast("0.0811059866541608850796588574855542920102436419095449919402067822775070461335"), boost::lexical_cast("0.0223123361781037959533913605953481375623224211409368924402086919318268997481"), boost::lexical_cast("-0.0469224383892697373330089705921140050713876812549803060287843927826168188238"), boost::lexical_cast("-0.00327095553581929378165536022217749445206952595806160939280927575122449701285"), boost::lexical_cast("0.0227336765839462703184561624478844896990671374133833949802486413275635089855"), boost::lexical_cast("-0.00304298998135463706859248263790720607863339545722509658828788135585314667137"), boost::lexical_cast("-0.00860292152032285483171370641324365991792673628427173061192098670257230281191"), boost::lexical_cast("0.00296799669152609487280648506000803826995946384654837899504419503429102573503"), boost::lexical_cast("0.00230120524215354562430205986903842360424197668018944747606476493728483725055"), boost::lexical_cast("-0.00143684530480297612622289040298038490350367453072993580956143471121236432705"), boost::lexical_cast("-0.000328132519409837971395444401752011507581240244272874970019565158958075253614"), boost::lexical_cast("0.000439465427768643677838567752731784163228924931973889217946591075762286390503"), boost::lexical_cast("-0.0000256101095665484588272989121094992022166408206153190965517841374523415859860"), boost::lexical_cast("-0.0000820480320245339183909548257628218986613627304963676433868959364213432243666"), boost::lexical_cast("0.0000231868137987459508448206820570627757210669517409189533853073478931042782802"), boost::lexical_cast("0.00000699060098507675127320454970085537862776275858590205796402748138050877941586"), boost::lexical_cast("-0.00000450594247722298819410226820637831212971357260071649994491841668706683585071"), boost::lexical_cast("0.000000301654960999455741560520759487993976347616870521764689770270618984715407855"), boost::lexical_cast("0.000000295770093331685675497990525881615136787034562892431730735463949569521998500"), boost::lexical_cast("-0.0000000842394844600268017878707129692287706841031094222279962259313341617779208118"), boost::lexical_cast("0.00000000726749296856160811087976744140903503415858171978979108889204640807029047656")}; + } } if constexpr (p == 18) { if constexpr (std::is_same_v) { @@ -304,6 +355,9 @@ constexpr std::array daubechies_scaling_filter() return {0x1.9d386358a187490511616014e787p-10Q, 0x1.3c05f73c5b367536d2be9893ed8cp-6Q, 0x1.a84c610f33b444b779a9b1758c69p-4Q, 0x1.423b3247213b88555f9f2ada7d8ap-2Q, 0x1.24c67bbcaad511453636985416f3p-1Q, 0x1.24c32fbf17436364ee6d86ce0b36p-1Q, 0x1.2d834f99026e9806c6f6c1aa6cb3p-3Q, -0x1.2cb3a51535039a741562ba69c7a8p-2Q, -0x1.bb5a5b1e13b56915364cb7d6d1bfp-3Q, 0x1.323ede758da4220dcba304aad9d9p-3Q, 0x1.562eba30ba3dac1311ece1a1884ap-3Q, -0x1.7a30ff6ce5271d64766823319bd4p-4Q, -0x1.b541d802db16d80f141c678b2993p-4Q, 0x1.09c72d78f01628c7ccd127058828p-4Q, 0x1.d35d236774d120bc0fddfe320959p-5Q, -0x1.6cc216694aaa0ced2f850c2b3eb7p-5Q, -0x1.84d84c9eacf2bae4fd091b9bdb4fp-6Q, 0x1.b4f90c6dc9841e7a702107e1aca3p-6Q, 0x1.9a65be90d86a53c665da90605941p-8Q, -0x1.ababc1ea3f978443c6511c976c7fp-7Q, 0x1.f19207685977f43b68af0530733ap-14Q, 0x1.43f78b1e4d853774466d94263915p-8Q, -0x1.2544e0deeca71abd544eac93fa45p-10Q, -0x1.5f6de508b23063ffd5522faa2f1ap-10Q, 0x1.497f3c70a07cbca34a7835790cbfp-11Q, 0x1.bfe9ba59913cd96563f593913af3p-13Q, -0x1.a098a12371c0ca3dcc2d68b00891p-13Q, -0x1.49d5efd42da901d7159610c4d152p-23Q, 0x1.39d678c2c06ae863ef3b97fa7d6p-15Q, -0x1.1de76b2193bec903a9d077f1666ep-17Q, -0x1.bf4c72e2a2d93cedea468c1c5543p-19Q, 0x1.dac907ddfd9dac76e76088418dc5p-20Q, -0x1.4a5a655290e67a67e8d8672b7916p-24Q, -0x1.f9216d4e4d83adac1cb13466b74bp-24Q, 0x1.079c6a0fc4517cae3d72b9596e6p-25Q, -0x1.58b0195a8266ce508d99fc62d4eep-29Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00157631021844076043154074492993977774767075371099166036368442986184714001537"), boost::lexical_cast("0.0192885317241463770592139171582905241995466702528849757223671483332142575124"), boost::lexical_cast("0.103588465822423596224191049193725359647069655522024167297622418469656394177"), boost::lexical_cast("0.314678941337031699057199825565257993178670619048937450949130751036740690695"), boost::lexical_cast("0.571826807766607223481858937090062341939367374313093056129532404803265328819"), boost::lexical_cast("0.571801654888651335289111999406596502566804788281852506075939526421405556433"), boost::lexical_cast("0.147223111969928141575097727108107231255786410735570138780167713584411016265"), boost::lexical_cast("-0.293654040736558744247903099498115072393571072903505323966175230801212578403"), boost::lexical_cast("-0.216480934005142971123767862566827147143793723566949240838869239366378506250"), boost::lexical_cast("0.149533975565377789350930173891366720880481669189376561026194307191290248158"), boost::lexical_cast("0.167081312763257404514931813995013474532420564635398808315225063337013902642"), boost::lexical_cast("-0.0923318841508462806042937255865945973143184800014456961207450846746206498455"), boost::lexical_cast("-0.106752246659828485593220058161498486138526640462411208391770205467847935365"), boost::lexical_cast("0.0648872162119054428194757795514191146312938211663414784613714984515877764896"), boost::lexical_cast("0.0570512477385368841209076884649962226059622612043103852460067642320755043632"), boost::lexical_cast("-0.0445261419029823247155614355974465349297147789143983359275503466820231489272"), boost::lexical_cast("-0.0237332103958600010327520958266521611019751933071349023307156579014300914190"), boost::lexical_cast("0.0266707059264705902998790863167202034320789599993607281336347152037595652919"), boost::lexical_cast("0.00626216795430570748523609314449788250199032520474501319026805231525752058555"), boost::lexical_cast("-0.0130514809466120017727763644760080716975519105450757166660613358038629139862"), boost::lexical_cast("0.000118630033858117465730174159216181908454489941745231740518561572996617939506"), boost::lexical_cast("0.00494334360546673813066552951680297483429963831336647776529520326003067700242"), boost::lexical_cast("-0.00111873266699249707280065885523865018231806048258497014551268711985227900418"), boost::lexical_cast("-0.00134059629833610662951756722825158360982304452468598664032394269120723888750"), boost::lexical_cast("0.000628465682965145712561944988542083821755102279630158287434965288076478383268"), boost::lexical_cast("0.000213581561910340688403905281434192602587320032599646652254344051060271497781"), boost::lexical_cast("-0.000198648552311747948579824541636248955492779788026401787613960521573218466250"), boost::lexical_cast("-0.000000153591712353472467506977033587671719370047242702151323658728810220957329769"), boost::lexical_cast("0.0000374123788074003818109220813803539395230429261579398503073136385132849832575"), boost::lexical_cast("-0.00000852060253744669520391925491165552302243759695622637651230591706524073534413"), boost::lexical_cast("-0.00000333263447888582188878245203334103682731150590779649843982933727956405960650"), boost::lexical_cast("0.00000176871298362761545587632873075537517641250135911405881545310061923499126827"), boost::lexical_cast("-0.0000000769163268988517614600015287853959840581739758815652511676990865187416269746"), boost::lexical_cast("-0.000000117609876702823169845098235656129256134757977769539695352814136780995583426"), boost::lexical_cast("0.0000000306883586304517480093547829493397537245017978789457449293057011634442052915"), boost::lexical_cast("-0.00000000250793445494859826719517318314712673180631714486827581994140326785823293114")}; + } } if constexpr (p == 19) { if constexpr (std::is_same_v) { @@ -320,94 +374,10 @@ constexpr std::array daubechies_scaling_filter() return {0x1.22a1917fed859e160446bb7b167ap-10Q, 0x1.d3f6896603bf4308e8ccc5a30641p-7Q, 0x1.4cea4765b11499a3de1dc5fdc4b7p-4Q, 0x1.0ebbd74f124f24e597d3a5bc26dbp-2Q, 0x1.0c82ecc4163915332b81143283e8p-1Q, 0x1.34129e60b6e2fef58b66c45f7099p-1Q, 0x1.0b280be54f8b6ad2d41e0f33532ep-2Q, -0x1.d32194b53c8046c9a7b9b8714cebp-3Q, -0x1.24b2e1dd4c73df34e82deb7bb6c6p-2Q, 0x1.31c6940f7edfa2f8c6ddc9cd2aefp-4Q, 0x1.b2e46c16840423c52b33ff7476eep-3Q, -0x1.12957a28f5bb337e3e66ea6f23e6p-5Q, -0x1.246cd3943959a8c450bf5ca92b86p-3Q, 0x1.c3f126f461d985ee9de87f3424e5p-6Q, 0x1.63f8568e9e6ec0d34220dce2e186p-4Q, -0x1.b2323dbfdcbe6e4ed8b2320fb129p-6Q, -0x1.7629cb842f99ab236f8e908d21c2p-5Q, 0x1.6248a775ca65f9a99ecab76ed61p-6Q, 0x1.3d72f2476d00410fe80cb42bd72bp-6Q, -0x1.ca5f1bf2f3243b0308970f1f944p-7Q, -0x1.807e9f533b2172c38f0c60523009p-8Q, 0x1.cd6c23ae5d8f94f8e6c997306168p-8Q, 0x1.93274e99dc9b4cfea213c9163decp-11Q, -0x1.6043462e3e519b97ce417a7ac3b3p-9Q, 0x1.66698fcf3c2497984ab865b5b6acp-12Q, 0x1.81c5be1857465de5530984af43cbp-11Q, -0x1.1156b7a432a662bbb70ff712e064p-12Q, -0x1.054e8a6af00d6f29e88cd98738bep-13Q, 0x1.6d608dedb3cf6080fb9e6ef72893p-14Q, 0x1.56a78fb9bd526ca09fc616b1b8ap-18Q, -0x1.172d0353b3f11fc1e8818be3f7a7p-16Q, 0x1.941ff236730f0886ee4074951d94p-19Q, 0x1.9b39878b9566344204396825f773p-20Q, -0x1.7070fedc9cdecfffd4c6dc5d1fe5p-21Q, 0x1.f1373b9dbeafa1390279c531a649p-27Q, 0x1.8e4f570c878dd84d17b935d5f69ap-25Q, -0x1.7f97c3aa5d9df8ae90e909fae15p-27Q, 0x1.dc770dc2ed00b68b9c525506b211p-31Q}; } #endif + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00110866976318171057109915419520971516424529967777343593213545529038383924770"), boost::lexical_cast("0.0142810984507643973743988915295019923474566344216366595787071599110771075191"), boost::lexical_cast("0.0812781132654595506529630678490162483984497997102862036649772686406019150041"), boost::lexical_cast("0.264388431740896784674810038028942687386237780721192071841738581477351352687"), boost::lexical_cast("0.524436377464654915336057597548406462604463364104807211639316023628078258263"), boost::lexical_cast("0.601704549127537894886707713592180262053656563958596329331393143392083219576"), boost::lexical_cast("0.260894952651038829287245667531052832417267310130190773992521389876582446158"), boost::lexical_cast("-0.228091394215482646374632577605463720709378723708642590953482241776619580080"), boost::lexical_cast("-0.285838631755826241854597569502898423721735609558833514992211937357294676905"), boost::lexical_cast("0.0746522697081032663676343311187881900586586614973190965636539995134773660042"), boost::lexical_cast("0.212349743306278488809060856705982419707707420087883944841690869803668388649"), boost::lexical_cast("-0.0335185419023028786816938841878573150697784507523896681981403258573481442235"), boost::lexical_cast("-0.142785695038736574977960273162611281299849770615242850862756243341853036336"), boost::lexical_cast("0.0275843506256286687501474352016219865537447459696342308076281830983836771416"), boost::lexical_cast("0.0869067555558122324884764542880844303478520800246819275964035297492772454078"), boost::lexical_cast("-0.0265012362501230408990183584367638736107506801768674780817134564719233152649"), boost::lexical_cast("-0.0456742262772309080564544421429579601793893573211563005088010978423298835500"), boost::lexical_cast("0.0216237674095850471303298425717237235431809706785875254257102081949907179885"), boost::lexical_cast("0.0193755498891761276463709435445799981449688509587582554640696372421676825877"), boost::lexical_cast("-0.0139883886785351416325040123524866252191681386745309583680836668669699906947"), boost::lexical_cast("-0.00586692228101217472658449343605437377381460834080875817737276517150642852313"), boost::lexical_cast("0.00704074736710524315301451120740062010940168989766538307822939808316234678585"), boost::lexical_cast("0.000768954359257548355974913914867395516347794708603940612954642251648623392855"), boost::lexical_cast("-0.00268755180070158200395736385507039863653403892098247829017026719960594838510"), boost::lexical_cast("0.000341808653458595776565165729046380813521421484881951725779403154942704074894"), boost::lexical_cast("0.000735802520505435207026048190539728187518317579277990485818949491732987619374"), boost::lexical_cast("-0.000260676135678628005731831513089752279038393936207356340861354755942716317598"), boost::lexical_cast("-0.000124600791734158775344978440890165399031734141334198090475759204698349203833"), boost::lexical_cast("0.0000871127046721992296541686238819112826841293389328208351772944342009756120059"), boost::lexical_cast("0.00000510595048707388605304922280993423157368736799210628266938926416431155785903"), boost::lexical_cast("-0.0000166401762971549445462067771989919863033367560881201810873914492293692424442"), boost::lexical_cast("0.00000301096431629652633969533445472594363264579893816242716885138250008132314822"), boost::lexical_cast("0.00000153193147669119306393183238108663603120312303272347746362414105936220672489"), boost::lexical_cast("-0.000000686275565776914270188355461348673285445274075277139241175841882669179558939"), boost::lexical_cast("0.0000000144708829879784454207821986329161542055167357407136783431616765021249777078"), boost::lexical_cast("0.0000000463693777578260422343085772821094889887174829108596229664932070020615712517"), boost::lexical_cast("-0.0000000111640206703582581639050476914247258646497579928447368224607655958423915203"), boost::lexical_cast("0.000000000866684883899761935032301354078212462728974219027305931912284064941409400037")}; + } } - if constexpr (p == 20) { - if constexpr (std::is_same_v) { - return {0x1.98eb9ap-11f, 0x1.59aebcp-7f, 0x1.03c8a8p-4f, 0x1.c27102p-3f, 0x1.e40a78p-2f, 0x1.389292p-1f, 0x1.722da8p-2f, -0x1.1d1b3ap-3f, -0x1.4ea132p-2f, -0x1.120e7ep-6f, 0x1.d38a42p-3f, 0x1.467406p-5f, -0x1.3e6128p-3f, -0x1.94f5e4p-6f, 0x1.a2fca4p-4f, 0x1.711d6cp-8f, -0x1.f9a24ep-5f, 0x1.8100cep-8f, 0x1.088e0ep-5f, -0x1.200234p-7f, -0x1.c48b18p-7f, 0x1.b88232p-8f, 0x1.21b464p-8f, -0x1.d56f02p-9f, -0x1.b3fa62p-11f, 0x1.6d0d18p-10f, -0x1.c0c538p-15f, -0x1.93cfc4p-12f, 0x1.a9dc1cp-14f, 0x1.1c224ap-14f, -0x1.37443cp-15f, -0x1.25ad94p-18f, 0x1.e5f3b2p-18f, -0x1.0fa7b2p-20f, -0x1.6f998cp-21f, 0x1.1ad0c2p-22f, 0x1.baf44p-33f, -0x1.37c9a6p-26f, 0x1.16bc24p-28f, -0x1.49b9bep-32f}; - } - if constexpr (std::is_same_v) { - return {0x1.98eb9a1ad223fp-11, 0x1.59aebc7410b77p-7, 0x1.03c8a76dc45bbp-4, 0x1.c27102c5bb1f8p-3, 0x1.e40a78036ac7fp-2, 0x1.389291df573b5p-1, 0x1.722da89a0e974p-2, -0x1.1d1b3a29bcd1cp-3, -0x1.4ea132f283bf2p-2, -0x1.120e7e4faaa26p-6, 0x1.d38a4229ed991p-3, 0x1.46740628c1e1ap-5, -0x1.3e612851515f6p-3, -0x1.94f5e34522642p-6, 0x1.a2fca44817f2fp-4, 0x1.711d6c0e1d46ap-8, -0x1.f9a24d69ac62ep-5, 0x1.8100ce41923f9p-8, 0x1.088e0e0a9eca2p-5, -0x1.2002338d10ca4p-7, -0x1.c48b170cc05f1p-7, 0x1.b88231706930bp-8, 0x1.21b464fba22e8p-8, -0x1.d56f016e81eefp-9, -0x1.b3fa62b1e588ap-11, 0x1.6d0d181744b82p-10, -0x1.c0c537c57bf91p-15, -0x1.93cfc4d1b467bp-12, 0x1.a9dc1c3780427p-14, 0x1.1c224959ff66dp-14, -0x1.37443b45c500dp-15, -0x1.25ad943ec34c5p-18, 0x1.e5f3b2c4841b3p-18, -0x1.0fa7b2e66c174p-20, -0x1.6f998ba053586p-21, 0x1.1ad0c20194a77p-22, 0x1.baf43fba18386p-33, -0x1.37c9a671235e5p-26, 0x1.16bc244bc36b8p-28, -0x1.49b9be3c4a795p-32}; - } - if constexpr (std::is_same_v) { - return {0xc.c75cd0d6911fa1bp-14L, 0xa.cd75e3a085bb58ep-10L, 0x8.1e453b6e22dd40bp-7L, 0xe.1388162dd8fc33cp-6L, 0xf.2053c01b563f9cp-5L, 0x9.c4948efab9da4ebp-4L, 0xb.916d44d074ba33ap-5L, -0x8.e8d9d14de68dd92p-6L, -0xa.750997941df90a2p-5L, -0x8.9073f27d5512ec4p-9L, 0xe.9c52114f6cc8785p-6L, 0xa.33a031460f0d07bp-8L, -0x9.f309428a8afb31p-6L, -0xc.a7af1a291320cf8p-9L, 0xd.17e52240bf97653p-7L, 0xb.88eb6070ea34f45p-11L, -0xf.cd126b4d6317224p-8L, 0xc.0806720c91fc6d9p-11L, 0x8.44707054f65127ep-8L, -0x9.00119c6886523a3p-10L, -0xe.2458b86602f87fcp-10L, 0xd.c4118b834985633p-11L, 0x9.0da327dd11741b6p-11L, -0xe.ab780b740f77b4ep-12L, -0xd.9fd3158f2c44f42p-14L, 0xb.6868c0ba25c0c5ep-13L, -0xe.0629be2bdfc8a9ap-18L, -0xc.9e7e268da33d44p-15L, 0xd.4ee0e1bc0213577p-17L, 0x8.e1124acffb364cp-17L, -0x9.ba21da2e280684dp-18L, -0x9.2d6ca1f61a624d6p-21L, 0xf.2f9d962420d947dp-21L, -0x8.7d3d973360b9f2p-23L, -0xb.7ccc5d029ac2c2ep-24L, 0x8.d686100ca53b51dp-25L, 0xd.d7a1fdd0c1c3167p-36L, -0x9.be4d33891af2665p-29L, 0x8.b5e1225e1b5bf96p-31L, -0xa.4dcdf1e253caa43p-35L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.98eb9a1ad223f435df1887363eb7p-11Q, 0x1.59aebc7410b76b1badcc12950a6dp-7Q, 0x1.03c8a76dc45ba8152978f10f7c69p-4Q, 0x1.c27102c5bb1f8677bf80bd502bd1p-3Q, 0x1.e40a78036ac7f37fedcb5a80e979p-2Q, 0x1.389291df573b49d69709e6a39a77p-1Q, 0x1.722da89a0e9746749e19dd59185cp-2Q, -0x1.1d1b3a29bcd1bb23d3a59b3ec213p-3Q, -0x1.4ea132f283bf214303a247980416p-2Q, -0x1.120e7e4faaa25d883a426ff76e5ep-6Q, 0x1.d38a4229ed990f09767be4223746p-3Q, 0x1.46740628c1e1a0f69af0510e97b1p-5Q, -0x1.3e612851515f661f1b982f038f42p-3Q, -0x1.94f5e345226419f0d083e13269c2p-6Q, 0x1.a2fca44817f2eca68758db1b8b3cp-4Q, 0x1.711d6c0e1d469e893974f1ea6999p-8Q, -0x1.f9a24d69ac62e448cc934c83e493p-5Q, 0x1.8100ce41923f8db158db362c64bfp-8Q, 0x1.088e0e0a9eca24fb78af66e8d177p-5Q, -0x1.2002338d10ca4746416546df60b9p-7Q, -0x1.c48b170cc05f0ff881bd3e1b39f6p-7Q, 0x1.b88231706930ac6660faf6c0f2dep-8Q, 0x1.21b464fba22e836bf597b5aa439ep-8Q, -0x1.d56f016e81eef69c49d53f5d0ebbp-9Q, -0x1.b3fa62b1e5889e83d8f6afb75bd8p-11Q, 0x1.6d0d181744b818bb6e246e9454cp-10Q, -0x1.c0c537c57bf91533c45c4dad234ap-15Q, -0x1.93cfc4d1b467a87fbd054b646597p-12Q, 0x1.a9dc1c3780426aeee785e4f91b69p-14Q, 0x1.1c224959ff66c97f21d37d9c05fbp-14Q, -0x1.37443b45c500d09a28a777a35885p-15Q, -0x1.25ad943ec34c49ac55547e1ee8bep-18Q, 0x1.e5f3b2c4841b28f9ade386d031fap-18Q, -0x1.0fa7b2e66c173e3f4204ea792843p-20Q, -0x1.6f998ba05358585b78628b55c242p-21Q, 0x1.1ad0c20194a76a3ad5100084b452p-22Q, 0x1.baf43fba183862ce0fdd2ce6713ep-33Q, -0x1.37c9a671235e4ccaa17336a7b289p-26Q, 0x1.16bc244bc36b7f2c806c15a56631p-28Q, -0x1.49b9be3c4a79548641570a58d68ep-32Q}; - } - #endif - } - if constexpr (p == 21) { - if constexpr (std::is_same_v) { - return {0x1.1fbdb6p-11f, 0x1.fda65ap-8f, 0x1.93701p-5f, 0x1.736cacp-3f, 0x1.adc2aep-2f, 0x1.33f89cp-1f, 0x1.c742b8p-2f, -0x1.24a464p-5f, -0x1.57b854p-2f, -0x1.cc60ep-4f, 0x1.b148bep-3f, 0x1.d7feep-4f, -0x1.1e9916p-3f, -0x1.4ef44ap-4f, 0x1.8bacdap-4f, 0x1.7690eep-5f, -0x1.0a25dap-4f, -0x1.319ff4p-6f, 0x1.457136p-5f, 0x1.b81b9cp-9f, -0x1.564bap-6f, 0x1.3b071ap-9f, 0x1.268bbap-7f, -0x1.7af914p-9f, -0x1.83c29p-9f, 0x1.c1ff8cp-10f, 0x1.4f3d4cp-11f, -0x1.6a1c4ep-11f, -0x1.0c224ep-15f, 0x1.9624eap-13f, -0x1.30f834p-15f, -0x1.2592c2p-15f, 0x1.019c78p-16f, 0x1.768306p-19f, -0x1.9ebc2ep-19f, 0x1.53f4f8p-22f, 0x1.41473ap-22f, -0x1.adab3ep-24f, -0x1.35ca1ap-29f, 0x1.e5063ep-28f, -0x1.949b92p-30f, 0x1.c8df1cp-34f}; - } - if constexpr (std::is_same_v) { - return {0x1.1fbdb5d9588b2p-11, 0x1.fda65a6714bdap-8, 0x1.937010050905p-5, 0x1.736cace0a6657p-3, 0x1.adc2ad3828f8ep-2, 0x1.33f89b5c2e57bp-1, 0x1.c742b82c92555p-2, -0x1.24a4646f28f23p-5, -0x1.57b853bbe6a56p-2, -0x1.cc60df28d7badp-4, 0x1.b148be3b1073fp-3, 0x1.d7fedf0356bp-4, -0x1.1e9915e3ca004p-3, -0x1.4ef44a8b3ce94p-4, 0x1.8bacd9d38a28ep-4, 0x1.7690ee8b59819p-5, -0x1.0a25da27e87d7p-4, -0x1.319ff4cde80a9p-6, 0x1.4571365df5489p-5, 0x1.b81b9bc4d4f3cp-9, -0x1.564b9fd2c3bbfp-6, 0x1.3b071a00e4e5cp-9, 0x1.268bb96001dc4p-7, -0x1.7af914f01f8fcp-9, -0x1.83c28f7e3c0e5p-9, 0x1.c1ff8c65fb698p-10, 0x1.4f3d4c629fe3fp-11, -0x1.6a1c4ee19b423p-11, -0x1.0c224d58d6e81p-15, 0x1.9624eae0b53fp-13, -0x1.30f833f09ef02p-15, -0x1.2592c13818da8p-15, 0x1.019c78bb61865p-16, 0x1.768306fdacad5p-19, -0x1.9ebc2e6b68816p-19, 0x1.53f4f805c9123p-22, 0x1.414739b599eb7p-22, -0x1.adab3d69a3265p-24, -0x1.35ca1a0003737p-29, 0x1.e5063d39ebf9ap-28, -0x1.949b918111d77p-30, 0x1.c8df1c0c683efp-34}; - } - if constexpr (std::is_same_v) { - return {0x8.fdedaecac458cd2p-14L, 0xf.ed32d338a5ecf5cp-11L, 0xc.9b8080284827e72p-8L, 0xb.9b656705332bae6p-6L, 0xd.6e1569c147c6dadp-5L, 0x9.9fc4dae172bdbe9p-4L, 0xe.3a15c16492aa9dbp-5L, -0x9.252323794791b92p-8L, -0xa.bdc29ddf352b036p-5L, -0xe.6306f946bdd67aep-7L, 0xd.8a45f1d8839f921p-6L, 0xe.bff6f81ab580014p-7L, -0x8.f4c8af1e5002333p-6L, -0xa.77a25459e74a242p-7L, 0xc.5d66ce9c5146f15p-7L, 0xb.b487745acc0c8adp-8L, -0x8.512ed13f43ebad1p-7L, -0x9.8cffa66f405497bp-9L, 0xa.2b89b2efaa444bdp-8L, 0xd.c0dcde26a79e22p-12L, -0xa.b25cfe961ddf733p-9L, 0x9.d838d007272dcc4p-12L, 0x9.345dcb000ee2014p-10L, -0xb.d7c8a780fc7dcf5p-12L, -0xc.1e147bf1e072bc1p-12L, 0xe.0ffc632fdb4c29ep-13L, 0xa.79ea6314ff1f508p-14L, -0xb.50e2770cda119f3p-14L, -0x8.61126ac6b7407d4p-18L, 0xc.b1275705a9f8219p-16L, -0x9.87c19f84f78120fp-18L, -0x9.2c9609c0c6d43f4p-18L, 0x8.0ce3c5db0c32b2dp-19L, 0xb.b41837ed656a6e4p-22L, -0xc.f5e1735b440ad22p-22L, 0xa.9fa7c02e489184ap-25L, 0xa.0a39cdaccf5ba4ap-25L, -0xd.6d59eb4d1932a9ep-27L, -0x9.ae50d0001b9b402p-32L, 0xf.2831e9cf5fcccbdp-31L, -0xc.a4dc8c088ebb653p-33L, 0xe.46f8e06341f76fbp-37L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.1fbdb5d9588b19a3bff14d1b38fep-11Q, 0x1.fda65a6714bd9eb85e8d7e88dc47p-8Q, 0x1.937010050904fce3eac118cf708bp-5Q, 0x1.736cace0a66575cc5580323567efp-3Q, 0x1.adc2ad3828f8db5a1d5b82619893p-2Q, 0x1.33f89b5c2e57b7d298074c990addp-1Q, 0x1.c742b82c925553b5685081f7bfa5p-2Q, -0x1.24a4646f28f23724c7651fdfae24p-5Q, -0x1.57b853bbe6a5606b16b5f4878728p-2Q, -0x1.cc60df28d7bacf5cd487dfbe8b15p-4Q, 0x1.b148be3b1073f24190a78355f27p-3Q, 0x1.d7fedf0356b00027d18f8e92c824p-4Q, -0x1.1e9915e3ca004666a067ba487474p-3Q, -0x1.4ef44a8b3ce944830f2730d25eb9p-4Q, 0x1.8bacd9d38a28de29668579705c28p-4Q, 0x1.7690ee8b5981915a6dd616884c3fp-5Q, -0x1.0a25da27e87d75a179ff300fb83fp-4Q, -0x1.319ff4cde80a92f66d084237880cp-6Q, 0x1.4571365df548897971310c0822e6p-5Q, 0x1.b81b9bc4d4f3c43f2ed25e559ae8p-9Q, -0x1.564b9fd2c3bbee66fedad254cc1dp-6Q, 0x1.3b071a00e4e5b987ae06dc453687p-9Q, 0x1.268bb96001dc402712698f3f0494p-7Q, -0x1.7af914f01f8fb9ea842adaa7f3cdp-9Q, -0x1.83c28f7e3c0e5781b7d022113abfp-9Q, 0x1.c1ff8c65fb69853c310221a8efcfp-10Q, 0x1.4f3d4c629fe3ea0f5f4b5c45e52p-11Q, -0x1.6a1c4ee19b4233e5be9da5626ae4p-11Q, -0x1.0c224d58d6e80fa7cb5e318a3bafp-15Q, 0x1.9624eae0b53f0431ec2fc4ac4a39p-13Q, -0x1.30f833f09ef0241df6514d4f75d1p-15Q, -0x1.2592c13818da87e8e3f7d01fb451p-15Q, 0x1.019c78bb618656595fd443f75a4ep-16Q, 0x1.768306fdacad4dc8fab15811b58ap-19Q, -0x1.9ebc2e6b68815a4433974307ca8ep-19Q, 0x1.53f4f805c91230935990691c9b37p-22Q, 0x1.414739b599eb74930d1d52f4adeap-22Q, -0x1.adab3d69a326553c517a3161ce4cp-24Q, -0x1.35ca1a000373680368e6e76ba1cap-29Q, 0x1.e5063d39ebf99979a7db1201c73dp-28Q, -0x1.949b918111d76ca513fa5f9592d7p-30Q, 0x1.c8df1c0c683eedf6229624f6ad7fp-34Q}; - } - #endif - } - if constexpr (p == 22) { - if constexpr (std::is_same_v) { - return {0x1.9506cp-12f, 0x1.76fccap-8f, 0x1.37de72p-5f, 0x1.2fdb52p-3f, 0x1.788ddep-2f, 0x1.282856p-1f, 0x1.040b9cp-1f, 0x1.2df9bep-4f, -0x1.403b66p-2f, -0x1.9ac39cp-3f, 0x1.501016p-3f, 0x1.7095c8p-3f, -0x1.8dc40ep-4f, -0x1.0ddc74p-3f, 0x1.16d73p-4f, 0x1.5a58d6p-4f, -0x1.a4c6a6p-5f, -0x1.7d2e3p-5f, 0x1.2edd7cp-5f, 0x1.514ae8p-6f, -0x1.80b244p-6f, -0x1.9739fap-8f, 0x1.9bb88ep-7f, 0x1.3ab784p-12f, -0x1.658b52p-8f, 0x1.11bf26p-10f, 0x1.def09ap-10f, -0x1.941064p-11f, -0x1.bc5f9p-12f, 0x1.58926ap-12f, 0x1.6c8f7ep-15f, -0x1.8a7bd2p-14f, 0x1.7da8ecp-17f, 0x1.237bb8p-16f, -0x1.9dd79ap-18f, -0x1.a4264ap-20f, 0x1.5bac3cp-20f, -0x1.7917ccp-24f, -0x1.139828p-23f, 0x1.43164cp-25f, 0x1.cdd78ep-30f, -0x1.772814p-29f, 0x1.2558aap-31f, -0x1.3cd862p-35f}; - } - if constexpr (std::is_same_v) { - return {0x1.9506bf26823bdp-12, 0x1.76fcca8398a61p-8, 0x1.37de71ec845e4p-5, 0x1.2fdb523f49ab5p-3, 0x1.788dde34ceb66p-2, 0x1.282855bd3e661p-1, 0x1.040b9c9ba65ccp-1, 0x1.2df9be17f6307p-4, -0x1.403b658e1e271p-2, -0x1.9ac39bc6a693fp-3, 0x1.501016e351cb2p-3, 0x1.7095c864b0cccp-3, -0x1.8dc40d7416ec6p-4, -0x1.0ddc7410272ddp-3, 0x1.16d7307f2f199p-4, 0x1.5a58d5e218e8bp-4, -0x1.a4c6a60c82a99p-5, -0x1.7d2e2f61c66bdp-5, 0x1.2edd7c2485c6cp-5, 0x1.514ae8ff8882dp-6, -0x1.80b243789dd91p-6, -0x1.9739fa1f59fdbp-8, 0x1.9bb88df2b07f2p-7, 0x1.3ab784f96ef95p-12, -0x1.658b52a857f98p-8, 0x1.11bf26e4a8f4ap-10, 0x1.def099502d06ep-10, -0x1.941064b6e88a6p-11, -0x1.bc5f905d400afp-12, 0x1.58926afecb291p-12, 0x1.6c8f7d64132f3p-15, -0x1.8a7bd1deebb29p-14, 0x1.7da8eb6c7dd39p-17, 0x1.237bb7cb019efp-16, -0x1.9dd79a5aef3dp-18, -0x1.a4264a7b9f195p-20, 0x1.5bac3bb6b7df3p-20, -0x1.7917ccd42a174p-24, -0x1.139827c14728ep-23, 0x1.43164b7e12198p-25, 0x1.cdd78d40a514dp-30, -0x1.772813927397bp-29, 0x1.2558a9abd0467p-31, -0x1.3cd8627d9b085p-35}; - } - if constexpr (std::is_same_v) { - return {0xc.a835f93411de553p-15L, 0xb.b7e6541cc530467p-11L, 0x9.bef38f6422f21e9p-8L, 0x9.7eda91fa4d5aa1ap-6L, 0xb.c46ef1a675b2f1p-5L, 0x9.4142ade9f3308e8p-4L, 0x8.205ce4dd32e5de6p-4L, 0x9.6fcdf0bfb18389dp-7L, -0xa.01db2c70f1385a8p-5L, -0xc.d61cde35349f534p-6L, 0xa.8080b71a8e58ef5p-6L, 0xb.84ae43258666006p-6L, -0xc.6e206ba0b762e61p-7L, -0x8.6ee3a081396e7a5p-6L, 0x8.b6b983f978cc515p-7L, 0xa.d2c6af10c745924p-7L, -0xd.26353064154caf2p-8L, -0xb.e9717b0e335e71fp-8L, 0x9.76ebe1242e35de2p-8L, 0xa.8a5747fc44168f9p-9L, -0xc.05921bc4eec8a0fp-9L, -0xc.b9cfd0facfed6d3p-11L, 0xc.ddc46f9583f92e4p-10L, 0x9.d5bc27cb77ca414p-15L, -0xb.2c5a9542bfcbcecp-11L, 0x8.8df9372547a50bfp-13L, 0xe.f784ca816836eb8p-13L, -0xc.a08325b74452d5dp-14L, -0xd.e2fc82ea0057a9fp-15L, 0xa.c49357f65948be4p-15L, 0xb.647beb209979943p-18L, -0xc.53de8ef75d94bb9p-17L, 0xb.ed475b63ee9c598p-20L, 0x9.1bddbe580cf7997p-19L, -0xc.eebcd2d779e82c2p-21L, -0xd.213253dcf8ca54ep-23L, 0xa.dd61ddb5bef98f1p-23L, -0xb.c8be66a150b9e14p-27L, -0x8.9cc13e0a3946c9cp-26L, 0xa.18b25bf090cbe47p-28L, 0xe.6ebc6a0528a6ab3p-33L, -0xb.b9409c939cbdb9ep-32L, 0x9.2ac54d5e82338aap-34L, -0x9.e6c313ecd8427c2p-38L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.9506bf26823bcaa678f24755b1bep-12Q, 0x1.76fcca8398a608cea25db5f87af6p-8Q, 0x1.37de71ec845e43d133d0c299f8ecp-5Q, 0x1.2fdb523f49ab54335a2eba9c8437p-3Q, 0x1.788dde34ceb65e20730d6ddac0aep-2Q, 0x1.282855bd3e6611cfef751a206622p-1Q, 0x1.040b9c9ba65cbbcc9c304a8323e2p-1Q, 0x1.2df9be17f630713a1ee1adb275ebp-4Q, -0x1.403b658e1e270b5094f497dac5a2p-2Q, -0x1.9ac39bc6a693ea6805616ea07bd7p-3Q, 0x1.501016e351cb1dea06a54dd049bp-3Q, 0x1.7095c864b0ccc00c06f07ad7df02p-3Q, -0x1.8dc40d7416ec5cc24d97996382b6p-4Q, -0x1.0ddc7410272dcf4ab45934d4cf13p-3Q, 0x1.16d7307f2f198a2aec11f34d1e9fp-4Q, 0x1.5a58d5e218e8b247e862b3c1695fp-4Q, -0x1.a4c6a60c82a995e3152af9622fcap-5Q, -0x1.7d2e2f61c66bce3ea7e2b78a28c2p-5Q, 0x1.2edd7c2485c6bbc4d1a2c115a8a7p-5Q, 0x1.514ae8ff8882d1f2c15a47cd6559p-6Q, -0x1.80b243789dd9141e3fff7c22096dp-6Q, -0x1.9739fa1f59fdada5471944d8c62dp-8Q, 0x1.9bb88df2b07f25c8944100438d61p-7Q, 0x1.3ab784f96ef948279489735c5a1cp-12Q, -0x1.658b52a857f979d8d4ec9b9f73a9p-8Q, 0x1.11bf26e4a8f4a17dea14a455c454p-10Q, 0x1.def099502d06dd70a82c80e4bd5ep-10Q, -0x1.941064b6e88a5abad07f7589e66dp-11Q, -0x1.bc5f905d400af53d3eed609ad591p-12Q, 0x1.58926afecb2917c8a7cf6285c131p-12Q, 0x1.6c8f7d64132f3286043bbcbfb14ep-15Q, -0x1.8a7bd1deebb29772b3b880563654p-14Q, 0x1.7da8eb6c7dd38b3094b5e1389c85p-17Q, 0x1.237bb7cb019ef32d902afce7d618p-16Q, -0x1.9dd79a5aef3d0583abb88bd3c2cp-18Q, -0x1.a4264a7b9f194a9cadbc3e265f85p-20Q, 0x1.5bac3bb6b7df31e28d50f39c71ffp-20Q, -0x1.7917ccd42a173c285afd81440ef2p-24Q, -0x1.139827c14728d9384a9bd9717ddp-23Q, 0x1.43164b7e12197c8ececb2f261f6bp-25Q, 0x1.cdd78d40a514d5664ee974c433ep-30Q, -0x1.772813927397b73b1b90436f0da9p-29Q, 0x1.2558a9abd04671533bb0e6556b43p-31Q, -0x1.3cd8627d9b084f8342fbe01d8e11p-35Q}; - } - #endif - } - if constexpr (p == 23) { - if constexpr (std::is_same_v) { - return {0x1.1d1cbap-12f, 0x1.136e6ep-8f, 0x1.e0371p-6f, 0x1.eda1b2p-4f, 0x1.4617f8p-2f, 0x1.170138p-1f, 0x1.1a1f1ap-1f, 0x1.737dfap-3f, -0x1.0baa62p-2f, -0x1.15ea6ep-2f, 0x1.79587ep-4f, 0x1.c9e0fcp-3f, -0x1.0ea48cp-5f, -0x1.4fe52ap-3f, 0x1.4c5162p-6f, 0x1.cbf7fcp-4f, -0x1.5a21c2p-6f, -0x1.1f91cap-4f, 0x1.649c9ep-6f, 0x1.3b5a9p-5f, -0x1.2f7d4p-6f, -0x1.1f53eep-6f, 0x1.a1db1p-7f, 0x1.8b4d7ep-8f, -0x1.cfb028p-8f, -0x1.297f88p-10f, 0x1.995258p-9f, -0x1.0279b8p-12f, -0x1.163206p-10f, 0x1.4eefcap-12f, 0x1.0d3c26p-12f, -0x1.3a9e5ep-13f, -0x1.1b7136p-15f, 0x1.734928p-15f, -0x1.61b10ep-19f, -0x1.181bb4p-17f, 0x1.41cbdcp-19f, 0x1.b56b6ap-21f, -0x1.1ea2bcp-21f, 0x1.3e5bd6p-26f, 0x1.d15d2ap-25f, -0x1.e103ap-27f, -0x1.046382p-30f, 0x1.20be9ap-30f, -0x1.a8f0bcp-33f, 0x1.b7e04ep-37f}; - } - if constexpr (std::is_same_v) { - return {0x1.1d1cb9f15ca3p-12, 0x1.136e6d0cada7ap-8, 0x1.e03710ca000b2p-6, 0x1.eda1b1bac15d3p-4, 0x1.4617f85b87d2cp-2, 0x1.1701372560847p-1, 0x1.1a1f195e16c2fp-1, 0x1.737dfa0d62dcfp-3, -0x1.0baa621ce4279p-2, -0x1.15ea6e8658872p-2, 0x1.79587da8cb753p-4, 0x1.c9e0fc732c538p-3, -0x1.0ea48c5a06944p-5, -0x1.4fe52af139a58p-3, 0x1.4c51617dbe58bp-6, 0x1.cbf7fc1c6fa45p-4, -0x1.5a21c1ca225bep-6, -0x1.1f91c92c06d32p-4, 0x1.649c9ed18296ap-6, 0x1.3b5a90477563fp-5, -0x1.2f7d3f55674e5p-6, -0x1.1f53eed1947bfp-6, 0x1.a1db0f12bb42p-7, 0x1.8b4d7e5397f08p-8, -0x1.cfb028e3aae51p-8, -0x1.297f885faab6dp-10, 0x1.995258715da31p-9, -0x1.0279b74217beap-12, -0x1.163205afadf6dp-10, 0x1.4eefc91e26cfap-12, 0x1.0d3c2558f1652p-12, -0x1.3a9e5e1c22af4p-13, -0x1.1b7136cbb5aep-15, 0x1.734927c4130bfp-15, -0x1.61b10dba0880bp-19, -0x1.181bb48217362p-17, 0x1.41cbdcc2df4d9p-19, 0x1.b56b6a75fa292p-21, -0x1.1ea2bb46afa08p-21, 0x1.3e5bd6b02b53fp-26, 0x1.d15d2a9531ecbp-25, -0x1.e103a0e0c3b96p-27, -0x1.0463822ac124p-30, 0x1.20be99079e759p-30, -0x1.a8f0bc9b067e6p-33, 0x1.b7e04d72be8f7p-37}; - } - if constexpr (std::is_same_v) { - return {0x8.e8e5cf8ae517d2ep-15L, 0x8.9b7368656d3d159p-11L, 0xf.01b886500058d29p-9L, 0xf.6d0d8dd60ae956bp-7L, 0xa.30bfc2dc3e9620cp-5L, 0x8.b809b92b0423412p-4L, 0x8.d0f8caf0b617657p-4L, 0xb.9befd06b16e7779p-6L, -0x8.5d5310e7213cb45p-5L, -0x8.af537432c439318p-5L, 0xb.cac3ed465ba98efp-7L, 0xe.4f07e399629c099p-6L, -0x8.752462d034a1f39p-8L, -0xa.7f295789cd2c17ap-6L, 0xa.628b0bedf2c55d4p-9L, 0xe.5fbfe0e37d2292p-7L, -0xa.d10e0e5112df11ap-9L, -0x8.fc8e49603699185p-7L, 0xb.24e4f68c14b4ebbp-9L, 0x9.dad4823bab1fbp-8L, -0x9.7be9faab3a727aap-9L, -0x8.fa9f768ca3df844p-9L, 0xd.0ed87895da0fea4p-10L, 0xc.5a6bf29cbf83d82p-11L, -0xe.7d81471d5728bb2p-11L, -0x9.4bfc42fd55b69dep-13L, 0xc.ca92c38aed18631p-12L, -0x8.13cdba10bdf515p-15L, -0x8.b1902d7d6fb67f6p-13L, 0xa.777e48f1367d0a5p-15L, 0x8.69e12ac78b28dbcp-15L, -0x9.d4f2f0e11579f3cp-16L, -0x8.db89b65dad6fc16p-18L, 0xb.9a493e20985f9bfp-18L, -0xb.0d886dd044054a4p-22L, -0x8.c0dda410b9b125ap-20L, 0xa.0e5ee616fa6c626p-22L, 0xd.ab5b53afd14926ap-24L, -0x8.f515da357d03ea3p-24L, 0x9.f2deb5815a9f567p-29L, 0xe.8ae954a98f65bb4p-28L, -0xf.081d07061dcaca2p-30L, -0x8.231c1156091fc3ap-33L, 0x9.05f4c83cf3acb2cp-33L, -0xd.4785e4d833f33e2p-36L, 0xd.bf026b95f47b713p-40L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.1d1cb9f15ca2fa5bd9123de7bf02p-12Q, 0x1.136e6d0cada7a2b148b6e8855daap-8Q, 0x1.e03710ca000b1a51a7d181d489bp-6Q, 0x1.eda1b1bac15d2ad6ddbdb3147e36p-4Q, 0x1.4617f85b87d2c4188e472323232cp-2Q, 0x1.1701372560846824bce2d06e180cp-1Q, 0x1.1a1f195e16c2ecad981d672e54f9p-1Q, 0x1.737dfa0d62dceef2a6ae0dd9fae6p-3Q, -0x1.0baa621ce427968960a0c4171c1cp-2Q, -0x1.15ea6e865887262fe21b5ed288ddp-2Q, 0x1.79587da8cb7531de57b391307b2ep-4Q, 0x1.c9e0fc732c5381328729c7899645p-3Q, -0x1.0ea48c5a06943e72865d8b0a9865p-5Q, -0x1.4fe52af139a582f4b4bfddd5990ap-3Q, 0x1.4c51617dbe58aba744aaa9e2e84dp-6Q, 0x1.cbf7fc1c6fa4523fc35d6c595afp-4Q, -0x1.5a21c1ca225be23388c3683c5f1ap-6Q, -0x1.1f91c92c06d3230ad5ace9dd7e2ap-4Q, 0x1.649c9ed182969d7683dcc682acbcp-6Q, 0x1.3b5a90477563f5ff5ff6e6498f97p-5Q, -0x1.2f7d3f55674e4f5496795e1de4a5p-6Q, -0x1.1f53eed1947bf0871dd1fee02046p-6Q, 0x1.a1db0f12bb41fd473a2e8421b507p-7Q, 0x1.8b4d7e5397f07b04d41a59615574p-8Q, -0x1.cfb028e3aae51764ab65b4e360fbp-8Q, -0x1.297f885faab6d3bcc655cccba49p-10Q, 0x1.995258715da30c618d8b26e9df7bp-9Q, -0x1.0279b74217bea2a0847d1e93003bp-12Q, -0x1.163205afadf6cfebfb69e0b0f9f9p-10Q, 0x1.4eefc91e26cfa14abc8a3c8c31bep-12Q, 0x1.0d3c2558f1651b77d56d78be87a6p-12Q, -0x1.3a9e5e1c22af3e7828bfcf5d2f48p-13Q, -0x1.1b7136cbb5adf82b0d9aad06bd7cp-15Q, 0x1.734927c4130bf37e18cb5a04041ap-15Q, -0x1.61b10dba0880a94866a6f32c90e9p-19Q, -0x1.181bb482173624b3f677525a8993p-17Q, 0x1.41cbdcc2df4d8c4b6d915e9702b2p-19Q, 0x1.b56b6a75fa2924d359ae84bf18d8p-21Q, -0x1.1ea2bb46afa07d45b08cabbea3b6p-21Q, 0x1.3e5bd6b02b53eacdcf10b59b874fp-26Q, 0x1.d15d2a9531ecb7682cdf70f5d33bp-25Q, -0x1.e103a0e0c3b959430c8cac42a206p-27Q, -0x1.0463822ac123f874c86ec02d6961p-30Q, 0x1.20be99079e7596586119e6bc965cp-30Q, -0x1.a8f0bc9b067e67c3b0dec15337bdp-33Q, 0x1.b7e04d72be8f6e258b11c231fbfep-37Q}; - } - #endif - } - if constexpr (p == 24) { - if constexpr (std::is_same_v) { - return {0x1.91785p-13f, 0x1.93f98p-9f, 0x1.7059c4p-6f, 0x1.8e62d8p-4f, 0x1.17757p-2f, 0x1.023cecp-1f, 0x1.265e6ep-1f, 0x1.1fbaaep-2f, -0x1.7f8826p-3f, -0x1.4592dep-2f, 0x1.390a48p-8f, 0x1.e9f54ap-3f, 0x1.5c6536p-5f, -0x1.5e912ep-3f, -0x1.3da9ap-5f, 0x1.efaecap-4f, 0x1.57bcfap-6f, -0x1.5088bep-4f, -0x1.2c0d6ap-8f, 0x1.a4434cp-5f, -0x1.440e76p-8f, -0x1.ce3e5ap-6f, 0x1.f61e5cp-8f, 0x1.ab9f18p-7f, -0x1.9c50c6p-8f, -0x1.371236p-8f, 0x1.e9b0e8p-9f, 0x1.2e73dap-10f, -0x1.bcb74ap-10f, -0x1.7274d8p-15f, 0x1.334ca4p-11f, -0x1.ef71f4p-14f, -0x1.32337p-13f, 0x1.131ee6p-14f, 0x1.6e4982p-16f, -0x1.536264p-16f, 0x1.ccd17cp-27f, 0x1.05cc64p-18f, -0x1.e21fa8p-21f, -0x1.b0fcbap-22f, 0x1.d137c8p-23f, -0x1.160c08p-31f, -0x1.838882p-26f, 0x1.627092p-28f, 0x1.050b72p-31f, -0x1.ba8412p-32f, 0x1.3380aep-34f, -0x1.31989ep-38f}; - } - if constexpr (std::is_same_v) { - return {0x1.91785023a9879p-13, 0x1.93f9805696b9cp-9, 0x1.7059c4b494de9p-6, 0x1.8e62d8a0a8ffcp-4, 0x1.17756f5530d69p-2, 0x1.023cebcae9f67p-1, 0x1.265e6eff960ccp-1, 0x1.1fbaad4726276p-2, -0x1.7f8826c061991p-3, -0x1.4592ded92acf9p-2, 0x1.390a478f54bbbp-8, 0x1.e9f54ac655c14p-3, 0x1.5c6535de6b4e5p-5, -0x1.5e912ec022b6p-3, -0x1.3da9a08b26c34p-5, 0x1.efaeca9aee192p-4, 0x1.57bcf98fd11cep-6, -0x1.5088bd1cf023ep-4, -0x1.2c0d69ece949fp-8, 0x1.a4434b89b6915p-5, -0x1.440e7548329f5p-8, -0x1.ce3e5912a2303p-6, 0x1.f61e5ce9a7ff1p-8, 0x1.ab9f170d72cc6p-7, -0x1.9c50c528bc778p-8, -0x1.371235b499d34p-8, 0x1.e9b0e84ddc047p-9, 0x1.2e73daaf19dbbp-10, -0x1.bcb74a39ee4ap-10, -0x1.7274d8ffa9744p-15, 0x1.334ca46898daep-11, -0x1.ef71f401aeeebp-14, -0x1.32337036c1617p-13, 0x1.131ee63336347p-14, 0x1.6e4981b862b8bp-16, -0x1.536263fe83a12p-16, 0x1.ccd17bbbe3d04p-27, 0x1.05cc64bbcf96p-18, -0x1.e21fa8ce8bf7ap-21, -0x1.b0fcbaac8055ep-22, 0x1.d137c82c35ed7p-23, -0x1.160c0805b95d3p-31, -0x1.838882edd8948p-26, 0x1.627091a0c660dp-28, 0x1.050b72dfcacecp-31, -0x1.ba8411e011af6p-32, 0x1.3380aec6c4cc7p-34, -0x1.31989d5a96be3p-38}; - } - if constexpr (std::is_same_v) { - return {0xc.8bc2811d4c3c975p-16L, 0xc.9fcc02b4b5cdd4fp-12L, 0xb.82ce25a4a6f4946p-9L, 0xc.7316c50547fde96p-7L, 0x8.bbab7aa986b4822p-5L, 0x8.11e75e574fb369fp-4L, 0x9.32f377fcb066266p-4L, 0x8.fdd56a39313b02ap-5L, -0xb.fc4136030cc8af3p-6L, -0xa.2c96f6c9567c64ep-5L, 0x9.c8523c7aa5dd6c6p-11L, 0xf.4faa5632ae09cacp-6L, 0xa.e329aef35a72807p-8L, -0xa.f489760115afe5ap-6L, -0x9.ed4d0459361a0cbp-8L, 0xf.7d7654d770c90fap-7L, 0xa.bde7cc7e88e7341p-9L, -0xa.8445e8e7811ed17p-7L, -0x9.606b4f674a4f729p-11L, 0xd.221a5c4db48a85p-8L, -0xa.2073aa4194fa9f4p-11L, -0xe.71f2c8951181b37p-9L, 0xf.b0f2e74d3ff8483p-11L, 0xd.5cf8b86b966301bp-10L, -0xc.e2862945e3bc0bdp-11L, -0x9.b891ada4ce99f42p-11L, 0xf.4d87426ee023471p-12L, 0x9.739ed578cedd928p-13L, -0xd.e5ba51cf724ff04p-13L, -0xb.93a6c7fd4ba228cp-18L, 0x9.9a652344c6d708fp-14L, -0xf.7b8fa00d7775af1p-17L, -0x9.919b81b60b0b6ddp-16L, 0x8.98f73199b1a34dep-17L, 0xb.724c0dc315c5bebp-19L, -0xa.9b131ff41d09255p-19L, 0xe.668bdddf1e8204p-30L, 0x8.2e6325de7cafddbp-21L, -0xf.10fd46745fbd3a3p-24L, -0xd.87e5d56402aecbp-25L, 0xe.89be4161af6badap-26L, -0x8.b060402dcae9786p-34L, -0xc.1c44176ec4a3d56p-29L, 0xb.13848d0633067f9p-31L, 0x8.285b96fe5675d57p-34L, -0xd.d4208f008d7b156p-35L, 0x9.9c0576362663aafp-37L, -0x9.8cc4ead4b5f196ap-41L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.91785023a98792eac41b5272c04bp-13Q, 0x1.93f9805696b9ba9d87c3df41a8d9p-9Q, 0x1.7059c4b494de928c16cf6cacf0a7p-6Q, 0x1.8e62d8a0a8ffbd2cc57d79f83e08p-4Q, 0x1.17756f5530d69044d0184f790b3ep-2Q, 0x1.023cebcae9f66d3d390049f78dcp-1Q, 0x1.265e6eff960cc4ccf24089549b66p-1Q, 0x1.1fbaad4726276054f5d700d1bfb6p-2Q, -0x1.7f8826c0619915e6978c42a74dfcp-3Q, -0x1.4592ded92acf8c9c5ecd6ba9faddp-2Q, 0x1.390a478f54bbad8c711b3d202a1ap-8Q, 0x1.e9f54ac655c13958344e31a88778p-3Q, 0x1.5c6535de6b4e500e1e067af4d00ep-5Q, -0x1.5e912ec022b5fcb42ec3601ecf9bp-3Q, -0x1.3da9a08b26c34196db8bd596e813p-5Q, 0x1.efaeca9aee1921f4bc36a577b638p-4Q, 0x1.57bcf98fd11ce6827e350101b72ep-6Q, -0x1.5088bd1cf023da2d878ac9ebafc5p-4Q, -0x1.2c0d69ece949ee5284dcfb042baap-8Q, 0x1.a4434b89b691509ff6541a080cecp-5Q, -0x1.440e7548329f53e7873db8128a63p-8Q, -0x1.ce3e5912a230366d14a862ea3672p-6Q, 0x1.f61e5ce9a7ff0906541711dfe2e7p-8Q, 0x1.ab9f170d72cc6036a5092b63c08ap-7Q, -0x1.9c50c528bc77817ae0788ffc773ap-8Q, -0x1.371235b499d33e83c0b1b543f6e8p-8Q, 0x1.e9b0e84ddc0468e17e4fa3636bf9p-9Q, 0x1.2e73daaf19dbb24f6ae6d9d95255p-10Q, -0x1.bcb74a39ee49fe08e2b9fd7aeef1p-10Q, -0x1.7274d8ffa9744517f2f1470cebeep-15Q, 0x1.334ca46898dae11da29a57e9f92ap-11Q, -0x1.ef71f401aeeeb5e13dd40efc0a0cp-14Q, -0x1.32337036c1616db93444903d828ep-13Q, 0x1.131ee633363469bb9bebca29a839p-14Q, 0x1.6e4981b862b8b7d5bb86d25cc3eap-16Q, -0x1.536263fe83a124aaa2092f47c711p-16Q, 0x1.ccd17bbbe3d0407ffce581eb4165p-27Q, 0x1.05cc64bbcf95fbb57637394fb838p-18Q, -0x1.e21fa8ce8bf7a7465a57d37cce9ap-21Q, -0x1.b0fcbaac8055d95fcb97dc94d8aap-22Q, 0x1.d137c82c35ed75b3cca32ab07fp-23Q, -0x1.160c0805b95d2f0cf1ffb7605bf2p-31Q, -0x1.838882edd8947aab05cd00305346p-26Q, 0x1.627091a0c660cff16c28fc227cd6p-28Q, 0x1.050b72dfcacebaae0203f358d56p-31Q, -0x1.ba8411e011af62ac1faf9b23aa51p-32Q, 0x1.3380aec6c4cc755d395c84cee933p-34Q, -0x1.31989d5a96be32d359a4b1032025p-38Q}; - } - #endif - - } - std::array m{}; - for (auto & x : m) { - x = std::numeric_limits::quiet_NaN(); - } - return m; - } template diff --git a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp index c328db53b..e75f2a90f 100644 --- a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +++ b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp @@ -11,16 +11,16 @@ #ifdef BOOST_HAS_FLOAT128 #include #endif +#include + namespace boost::math::detail { template constexpr std::array daubechies_scaling_integer_grid() { - static_assert(sizeof(Real) <= 16, "Integer grids only computed up to 128 bits of precision."); static_assert(p <= 15, "Integer grids only implemented up to 15."); static_assert(p > 1, "Integer grids only implemented for p >= 2."); if constexpr (p == 2) { - static_assert(order <= 1 && order >= 0, "The 2 vanishing moment Daubechies scaling function only has one derivative."); if constexpr (std::is_same_v) { if constexpr (order == 0) { return {0x0p+0f, 0x1.5db3d8p+0f, -0x1.76cf5ep-2f, 0x0p+0f}; @@ -48,13 +48,21 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.5db3d742c265539d92ba16b83c5dp+0Q, -0x1.76cf5d0b09954e764ae85ae0f172p-2Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.5db3d742c265539d92ba16b83c5cp+0Q, -0x1.76cf5d0b09954e764ae85ae0f17p-2Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.0000000000000000000000000003p+0Q, -0x1.0000000000000000000000000001p+0Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1p+0Q, -0x1p+0Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.36602540378443864676372317075293618347140262690519031402790348972596651591"), boost::lexical_cast("-0.366025403784438646763723170752936183471402626905190314027903489725966511383"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.00000000000000000000000000000000000000000000000000000000000000000000000906"), boost::lexical_cast("-1.00000000000000000000000000000000000000000000000000000000000000000000000906"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 3) { if constexpr (std::is_same_v) { @@ -62,7 +70,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.494d42p+0f, -0x1.8b18d8p-2f, 0x1.863744p-4f, 0x1.158088p-8f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.a3719cp+0f, -0x1.1dcb06p+1f, 0x1.19ae7cp-1f, 0x1.69a5e8p-5f, 0x0p+0f}; + return {0x0p+0f, 0x1.a3719cp+0f, -0x1.1dcb06p+1f, 0x1.19ae7cp-1f, 0x1.69a5e8p-5f, -0x0p+0f}; } if constexpr (order == 2) { return {0x0p+0f, 0x1.cef9ccp-1f, -0x1.b676b2p+0f, 0x1.6ced64p-1f, 0x1.8831a2p-4f, -0x0p+0f}; @@ -73,7 +81,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.494d414ee19a1p+0, -0x1.8b18d8251ec88p-2, 0x1.863743274d78dp-4, 0x1.158087f14084dp-8, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.a3719cd426dbdp+0, -0x1.1dcb0537f529p+1, 0x1.19ae7cc6c0212p-1, 0x1.69a5e70c6cb47p-5, 0x0p+0}; + return {0x0p+0, 0x1.a3719cd426dbdp+0, -0x1.1dcb0537f529p+1, 0x1.19ae7cc6c0212p-1, 0x1.69a5e70c6cb47p-5, -0x0p+0}; } if constexpr (order == 2) { return {0x0p+0, 0x1.cef9cbb90bf24p-1, -0x1.b676b19591eb6p+0, 0x1.6ced632b23d6cp-1, 0x1.8831a237a06dfp-4, -0x0p+0}; @@ -84,7 +92,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xa.4a6a0a770cd07e1p-3L, -0xc.58c6c128f64431dp-5L, 0xc.31ba193a6bc67f2p-7L, 0x8.ac043f8a042675ap-11L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xd.1b8ce6a136deae1p-3L, -0x8.ee5829bfa948208p-2L, 0x8.cd73e6360108efbp-4L, 0xb.4d2f386365a363ap-8L, 0x0p+0L}; + return {0x0p+0L, 0xd.1b8ce6a136deae1p-3L, -0x8.ee5829bfa948208p-2L, 0x8.cd73e6360108efbp-4L, 0xb.4d2f386365a363ap-8L, -0x0p+0L}; } if constexpr (order == 2) { return {0x0p+0L, 0xe.77ce5dc85f9214cp-4L, -0xd.b3b58cac8f5b1f2p-3L, 0xb.676b19591eb63e3p-4L, 0xc.418d11bd036f5a2p-7L, -0x0p+0L}; @@ -93,21 +101,32 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.494d414ee19a0fc1701f9345a28ap+0Q, -0x1.8b18d8251ec886399fc357ab26c5p-2Q, 0x1.863743274d78cfe42daf1d262e3fp-4Q, 0x1.158087f14084ceb4f650d2c442ep-8Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.494d414ee19a0fc1701f9345a28bp+0Q, -0x1.8b18d8251ec886399fc357ab26c9p-2Q, 0x1.863743274d78cfe42daf1d262e43p-4Q, 0x1.158087f14084ceb4f650d2c442e1p-8Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.a3719cd426dbd5c2283e8b6cd967p+0Q, -0x1.1dcb0537f52904105ab1d13c6abp+1Q, 0x1.19ae7cc6c0211df5e41745563cadp-1Q, 0x1.69a5e70c6cb46c73632e8c1bb2cp-5Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.a3719cd426dbd5c2283e8b6cd98bp+0Q, -0x1.1dcb0537f52904105ab1d13c6abfp+1Q, 0x1.19ae7cc6c0211df5e41745563cbbp-1Q, 0x1.69a5e70c6cb46c73632e8c1bb2d3p-5Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.cef9cbb90bf242979b344cdd1e16p-1Q, -0x1.b676b19591eb63e368ce734bad21p+0Q, 0x1.6ced632b23d6c7c6d19ce6975a1dp-1Q, 0x1.8831a237a06deb43265d99170ff8p-4Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.cef9cbb90bf242979b344cdd1e02p-1Q, -0x1.b676b19591eb63e368ce734bad03p+0Q, 0x1.6ced632b23d6c7c6d19ce6975a06p-1Q, 0x1.8831a237a06deb43265d99170ff1p-4Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.28633506942569674985101130804711703944769149589599367792522563129173884774"), boost::lexical_cast("-0.385836961045875636526124449680167085358759714316248323422384559809411215163"), boost::lexical_cast("0.0952675460037808035264010635719874519288709294849441167080083466112626376337"), boost::lexical_cast("0.00423434561639808314871207806106259398219728893531052878915058190640973293816"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.63845234088408572501497611363560403262776907011369321824757699444308529377"), boost::lexical_cast("-2.23275819046313739501774225255380769832888122180065115110381486246159923436"), boost::lexical_cast("0.550159358274017614990556164200803298774455233260222647464898741593942483269"), boost::lexical_cast("0.0441464913050340550122099747174003669266569184267352853913391264245714335499"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.904249540651993051422557892988008355246955899646975674328615693249103183472"), boost::lexical_cast("-1.71274862195597915426767367896402506574086769894092702298584707974730965003"), boost::lexical_cast("0.712748621955979154267673678964025065740867698940927022985847079747309736056"), boost::lexical_cast("0.0957504593480069485774421070119916447530441003530243256713843067508967355933"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 4) { if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0f, 0x1.01d5e4p+0f, -0x1.15313cp-5f, 0x1.447d2ap-5f, -0x1.817e96p-7f, -0x1.3a0992p-10f, 0x1.3be7b6p-16f, -0x0p+0f}; + return {0x0p+0f, 0x1.01d5e4p+0f, -0x1.15313cp-5f, 0x1.447d2ap-5f, -0x1.817e96p-7f, -0x1.3a0992p-10f, 0x1.3be7b6p-16f, 0x0p+0f}; } if constexpr (order == 1) { return {0x0p+0f, 0x1.c6aca8p+0f, -0x1.648654p+1f, 0x1.314492p+0f, -0x1.0d0e14p-3f, -0x1.b6da96p-5f, 0x1.d0194cp-10f, -0x0p+0f}; @@ -116,12 +135,12 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.cf8cc6p+0f, -0x1.0eaaap+2f, 0x1.66e46cp+1f, -0x1.26d9a4p-3f, -0x1.0ae7c2p-2f, 0x1.3a82a2p-6f, 0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.bb2f44p-1f, -0x1.2d48b8p+1f, 0x1.c2597p+0f, 0x1.83800cp-3f, -0x1.233972p-1f, 0x1.bcd16ep-4f, 0x0p+0f}; + return {0x0p+0f, 0x1.bb2f44p-1f, -0x1.2d48b8p+1f, 0x1.c2597p+0f, 0x1.83800cp-3f, -0x1.233972p-1f, 0x1.bcd16ep-4f, -0x0p+0f}; } } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0, 0x1.01d5e443d831dp+0, -0x1.15313c61b3acbp-5, 0x1.447d293e37265p-5, -0x1.817e96e0425edp-7, -0x1.3a0992ca51117p-10, 0x1.3be7b6cb630ap-16, -0x0p+0}; + return {0x0p+0, 0x1.01d5e443d831dp+0, -0x1.15313c61b3acbp-5, 0x1.447d293e37265p-5, -0x1.817e96e0425edp-7, -0x1.3a0992ca51117p-10, 0x1.3be7b6cb630ap-16, 0x0p+0}; } if constexpr (order == 1) { return {0x0p+0, 0x1.c6aca7b3a61bp+0, -0x1.6486543c8460bp+1, 0x1.314491c6de2d3p+0, -0x1.0d0e14f1f7dc6p-3, -0x1.b6da96c702378p-5, 0x1.d0194bee1a174p-10, -0x0p+0}; @@ -130,12 +149,12 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.cf8cc69cc42a4p+0, -0x1.0eaaa0c1e1c35p+2, 0x1.66e46b718b501p+1, -0x1.26d9a4de19b74p-3, -0x1.0ae7c18dd841ep-2, 0x1.3a82a1b96295bp-6, 0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.bb2f43bc30b81p-1, -0x1.2d48b852668c6p+1, 0x1.c2596fe640caep+0, 0x1.83800be8c4de9p-3, -0x1.233972e072028p-1, 0x1.bcd16d3945752p-4, 0x0p+0}; + return {0x0p+0, 0x1.bb2f43bc30b81p-1, -0x1.2d48b852668c6p+1, 0x1.c2596fe640caep+0, 0x1.83800be8c4de9p-3, -0x1.233972e072028p-1, 0x1.bcd16d3945752p-4, -0x0p+0}; } } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0L, 0x8.0eaf221ec18e913p-3L, -0x8.a989e30d9d65a3ap-8L, 0xa.23e949f1b93272cp-8L, -0xc.0bf4b70212f684ap-10L, -0x9.d04c9652888ba27p-13L, 0x9.df3db65b184ff7ep-19L, -0x0p+0L}; + return {0x0p+0L, 0x8.0eaf221ec18e913p-3L, -0x8.a989e30d9d65a3ap-8L, 0xa.23e949f1b93272cp-8L, -0xc.0bf4b70212f684ap-10L, -0x9.d04c9652888ba27p-13L, 0x9.df3db65b184ff7ep-19L, 0x0p+0L}; } if constexpr (order == 1) { return {0x0p+0L, 0xe.35653d9d30d7c1cp-3L, -0xb.2432a1e4230589p-2L, 0x9.8a248e36f1695bdp-3L, -0x8.6870a78fbee2d2ap-6L, -0xd.b6d4b63811bbfa2p-8L, 0xe.80ca5f70d0ba167p-13L, -0x0p+0L}; @@ -144,36 +163,50 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xe.7c6634e62152087p-3L, -0x8.7555060f0e1aa31p-1L, 0xb.37235b8c5a805d9p-2L, -0x9.36cd26f0cdb9e9ap-6L, -0x8.573e0c6ec20ec34p-5L, 0x9.d4150dcb14ada24p-9L, 0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0xd.d97a1de185c06cap-4L, -0x9.6a45c2933463235p-2L, 0xe.12cb7f320656fb6p-3L, 0xc.1c005f4626f4b41p-6L, -0x9.19cb97039014287p-4L, 0xd.e68b69ca2ba92a2p-7L, 0x0p+0L}; + return {0x0p+0L, 0xd.d97a1de185c06cap-4L, -0x9.6a45c2933463235p-2L, 0xe.12cb7f320656fb6p-3L, 0xc.1c005f4626f4b41p-6L, -0x9.19cb97039014287p-4L, 0xd.e68b69ca2ba92a2p-7L, -0x0p+0L}; } } #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.01d5e443d831d2252369827793d4p+0Q, -0x1.15313c61b3acb474231dab07815dp-5Q, 0x1.447d293e37264e578b865081224p-5Q, -0x1.817e96e0425ed094fa1a3a5cf10fp-7Q, -0x1.3a0992ca5111744ed1b4ed1a6607p-10Q, 0x1.3be7b6cb6309fefbda0c9fa167f7p-16Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.01d5e443d831d2252369827793d3p+0Q, -0x1.15313c61b3acb474231dab078158p-5Q, 0x1.447d293e37264e578b865081223fp-5Q, -0x1.817e96e0425ed094fa1a3a5cf10cp-7Q, -0x1.3a0992ca5111744ed1b4ed1a6607p-10Q, 0x1.3be7b6cb6309fefbda0c9fa167f8p-16Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.c6aca7b3a61af838bb3208359ff3p+0Q, -0x1.6486543c8460b11f1a4b4a357fa3p+1Q, 0x1.314491c6de2d2b798153746ca802p+0Q, -0x1.0d0e14f1f7dc5a54f21ce3ff4227p-3Q, -0x1.b6da96c702377f43a25f74c9465cp-5Q, 0x1.d0194bee1a1742cd9ebfbba7180ap-10Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.c6aca7b3a61af838bb320835a00cp+0Q, -0x1.6486543c8460b11f1a4b4a357fbcp+1Q, 0x1.314491c6de2d2b798153746ca822p+0Q, -0x1.0d0e14f1f7dc5a54f21ce3ff424bp-3Q, -0x1.b6da96c702377f43a25f74c9467p-5Q, 0x1.d0194bee1a1742cd9ebfbba717b8p-10Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.cf8cc69cc42a410e51b272a7a397p+0Q, -0x1.0eaaa0c1e1c354610b35262e906ap+2Q, 0x1.66e46b718b500bb2be3ec05c7ac4p+1Q, -0x1.26d9a4de19b73d34cbab42cdd8b6p-3Q, -0x1.0ae7c18dd841d8689ede2f52573fp-2Q, 0x1.3a82a1b96295b447f46661fe5c5ap-6Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.cf8cc69cc42a410e51b272a7a3c6p+0Q, -0x1.0eaaa0c1e1c354610b35262e9078p+2Q, 0x1.66e46b718b500bb2be3ec05c7ac3p+1Q, -0x1.26d9a4de19b73d34cbab42cdd8ccp-3Q, -0x1.0ae7c18dd841d8689ede2f52570cp-2Q, 0x1.3a82a1b96295b447f46661fe5bd8p-6Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.bb2f43bc30b80d947c8a537a21d9p-1Q, -0x1.2d48b852668c646a630392a2b72ap+1Q, 0x1.c2596fe640cadf6ca968f3b31114p+0Q, 0x1.83800be8c4de9681c9e31925cc1cp-3Q, -0x1.233972e07202850d1be1b9fc8353p-1Q, 0x1.bcd16d394575254330d81aed475ep-4Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.bb2f43bc30b80d947c8a537a20b2p-1Q, -0x1.2d48b852668c646a630392a2b66dp+1Q, 0x1.c2596fe640cadf6ca968f3b30ff3p+0Q, 0x1.83800be8c4de9681c9e31925ce79p-3Q, -0x1.233972e07202850d1be1b9fc8392p-1Q, 0x1.bcd16d394575254330d81aed4886p-4Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.00716997772560226877369133460276614243269615872709037758322022879139279346"), boost::lexical_cast("-0.0338369540528354556415804978382125421803076690774671479970540956429313200871"), boost::lexical_cast("0.0396104627159033280151912944184600514824910295717871419000412898697065939596"), boost::lexical_cast("-0.0117643582057267108368694432974219163588747630020832762453515568184248898506"), boost::lexical_cast("-0.00119795759617697344354027650795474883300903946947182516203285351999723597519"), boost::lexical_cast("0.0000188294132335431331075886223630134570042832501447299211769873202540592685182"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.77607200752218464009377607152250284074663695743190866046592611729429611550"), boost::lexical_cast("-2.78534939722954314249278490573124577055217733739979406318347461197122106723"), boost::lexical_cast("1.19245253663227817434763233908285135923990468684914884672498430320353620291"), boost::lexical_cast("-0.131374515184672958793518896272545745534054969900462421758093746888731275767"), boost::lexical_cast("-0.0535710282202392359535999593909937081760795583068887462544975544197420516562"), boost::lexical_cast("0.00177039647999252279849535078943102427577022132608772400515549278186212987035"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.81074181868840701570186471952563442690666106665351874735735805297770163814"), boost::lexical_cast("-4.22916430410173418303217211054873324461573868001846524669511741276944000468"), boost::lexical_cast("2.80384581607961568534047064875215082573530869410597985718216178513825734509"), boost::lexical_cast("-0.143969810512512114847026478220397278578104668742335564949361408575147520428"), boost::lexical_cast("-0.260649704248921172707994145248897076120067358027001191654083152075225028322"), boost::lexical_cast("0.0191961840951447695448573657402423466719409460283033987590421353038535631199"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.865594975206804045781037550982471109016820894607841596866029151773017425267"), boost::lexical_cast("-2.35378173850503736906839927424067865837551675448364577498051926331538903476"), boost::lexical_cast("1.75917720195210901846322158713800354333385807185616713126178553553138176863"), boost::lexical_cast("0.189209073105856701210355374205350230083317365254957287437467455568014611491"), boost::lexical_cast("-0.568797674081911210441966167774352001750246401183040853068360223333705683711"), boost::lexical_cast("0.108598162322178814055750929689205777691766823947720612483597343776680843464"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 5) { if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0f, 0x1.646bf2p-1f, 0x1.cbd5c2p-2f, -0x1.754196p-3f, 0x1.3100cap-5f, 0x1.8dd2bep-10f, -0x1.c4ab56p-10f, 0x1.3b27d2p-15f, 0x1.75f2b2p-23f, 0x0p+0f}; + return {0x0p+0f, 0x1.646bf2p-1f, 0x1.cbd5c2p-2f, -0x1.754196p-3f, 0x1.3100cap-5f, 0x1.8dd2bep-10f, -0x1.c4ab56p-10f, 0x1.3b27d2p-15f, 0x1.75f2b2p-23f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.8eee7ap+0f, -0x1.37cf44p+1f, 0x1.3c6448p+0f, -0x1.784198p-2f, -0x1.64d96ap-6f, 0x1.08fcfcp-5f, -0x1.5e1ffp-10f, -0x1.984da2p-17f, 0x0p+0f}; + return {0x0p+0f, 0x1.8eee7ap+0f, -0x1.37cf44p+1f, 0x1.3c6448p+0f, -0x1.784198p-2f, -0x1.64d96ap-6f, 0x1.08fcfcp-5f, -0x1.5e1ffp-10f, -0x1.984da2p-17f, -0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.22c5ccp+1f, -0x1.83ccap+2f, 0x1.524518p+2f, -0x1.2d10dcp+0f, -0x1.549f4cp-1f, 0x1.882acap-2f, -0x1.3d5d0ep-5f, -0x1.65cdcp-11f, -0x0p+0f}; + return {0x0p+0f, 0x1.22c5ccp+1f, -0x1.83ccap+2f, 0x1.524518p+2f, -0x1.2d10dcp+0f, -0x1.549f4cp-1f, 0x1.882acap-2f, -0x1.3d5d0ep-5f, -0x1.65cdcp-11f, 0x0p+0f}; } if constexpr (order == 3) { return {0x0p+0f, 0x1.9877acp+1f, -0x1.48c27ap+3f, 0x1.f7fdf6p+2f, 0x1.0b1eap+3f, -0x1.15aaf4p+4f, 0x1.4a4504p+3f, -0x1.050134p+1f, -0x1.13ee46p-4f, -0x0p+0f}; @@ -184,13 +217,13 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0, 0x1.646bf1ec64a31p-1, 0x1.cbd5c1bab5148p-2, -0x1.754196833f707p-3, 0x1.3100cab7c3f5fp-5, 0x1.8dd2be8c89c52p-10, -0x1.c4ab558ff2dcfp-10, 0x1.3b27d2d798eedp-15, 0x1.75f2b16626e98p-23, 0x0p+0}; + return {0x0p+0, 0x1.646bf1ec64a31p-1, 0x1.cbd5c1bab5148p-2, -0x1.754196833f707p-3, 0x1.3100cab7c3f5fp-5, 0x1.8dd2be8c89c52p-10, -0x1.c4ab558ff2dcfp-10, 0x1.3b27d2d798eedp-15, 0x1.75f2b16626e98p-23, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.8eee7927087b2p+0, -0x1.37cf445237f1bp+1, 0x1.3c64475174b4ap+0, -0x1.7841978e876dbp-2, -0x1.64d969ffaac15p-6, 0x1.08fcfb4783fa8p-5, -0x1.5e1fef6185af9p-10, -0x1.984da10897439p-17, 0x0p+0}; + return {0x0p+0, 0x1.8eee7927087b2p+0, -0x1.37cf445237f1bp+1, 0x1.3c64475174b4ap+0, -0x1.7841978e876dbp-2, -0x1.64d969ffaac15p-6, 0x1.08fcfb4783fa8p-5, -0x1.5e1fef6185af9p-10, -0x1.984da10897439p-17, -0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.22c5cb8d3f23bp+1, -0x1.83cca07a3ead8p+2, 0x1.5245172406b78p+2, -0x1.2d10dba463fc2p+0, -0x1.549f4c5e04f3ap-1, 0x1.882ac9029ddc7p-2, -0x1.3d5d0eda32d8bp-5, -0x1.65cdc06ecf654p-11, -0x0p+0}; + return {0x0p+0, 0x1.22c5cb8d3f23bp+1, -0x1.83cca07a3ead8p+2, 0x1.5245172406b78p+2, -0x1.2d10dba463fc2p+0, -0x1.549f4c5e04f3ap-1, 0x1.882ac9029ddc7p-2, -0x1.3d5d0eda32d8bp-5, -0x1.65cdc06ecf654p-11, 0x0p+0}; } if constexpr (order == 3) { return {0x0p+0, 0x1.9877ac926fb3cp+1, -0x1.48c27a70b93cep+3, 0x1.f7fdf60845cfcp+2, 0x1.0b1ea0ee5f9edp+3, -0x1.15aaf38ada16ap+4, 0x1.4a45041b91e1cp+3, -0x1.05013480812dfp+1, -0x1.13ee46114fd85p-4, -0x0p+0}; @@ -201,13 +234,13 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0L, 0xb.235f8f632518463p-4L, 0xe.5eae0dd5a8a4298p-5L, -0xb.aa0cb419fb8363cp-6L, 0x9.880655be1fafa7dp-8L, 0xc.6e95f4644e28f3ep-13L, -0xe.255aac7f96e75fp-13L, 0x9.d93e96bcc776751p-18L, 0xb.af958b31374c3acp-26L, 0x0p+0L}; + return {0x0p+0L, 0xb.235f8f632518463p-4L, 0xe.5eae0dd5a8a4298p-5L, -0xb.aa0cb419fb8363cp-6L, 0x9.880655be1fafa7dp-8L, 0xc.6e95f4644e28f3ep-13L, -0xe.255aac7f96e75fp-13L, 0x9.d93e96bcc776751p-18L, 0xb.af958b31374c3acp-26L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xc.7773c93843d9207p-3L, -0x9.be7a2291bf8db95p-2L, 0x9.e3223a8ba5a5065p-3L, -0xb.c20cbc743b6db2dp-5L, -0xb.26cb4ffd560a9d3p-9L, 0x8.47e7da3c1fd3e92p-8L, -0xa.f0ff7b0c2d7cb32p-13L, -0xc.c26d0844ba1cb28p-20L, 0x0p+0L}; + return {0x0p+0L, 0xc.7773c93843d9207p-3L, -0x9.be7a2291bf8db95p-2L, 0x9.e3223a8ba5a5065p-3L, -0xb.c20cbc743b6db2dp-5L, -0xb.26cb4ffd560a9d3p-9L, 0x8.47e7da3c1fd3e92p-8L, -0xa.f0ff7b0c2d7cb32p-13L, -0xc.c26d0844ba1cb28p-20L, -0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0x9.162e5c69f91da28p-2L, -0xc.1e6503d1f56bc54p-1L, 0xa.9228b92035bbe8fp-1L, -0x9.6886dd231fe0c2p-3L, -0xa.a4fa62f0279cc8ap-4L, 0xc.41564814eee395ap-5L, -0x9.eae876d196c5b0fp-8L, -0xb.2e6e03767b2a39ap-14L, -0x0p+0L}; + return {0x0p+0L, 0x9.162e5c69f91da28p-2L, -0xc.1e6503d1f56bc54p-1L, 0xa.9228b92035bbe8fp-1L, -0x9.6886dd231fe0c2p-3L, -0xa.a4fa62f0279cc8ap-4L, 0xc.41564814eee395ap-5L, -0x9.eae876d196c5b0fp-8L, -0xb.2e6e03767b2a39ap-14L, 0x0p+0L}; } if constexpr (order == 3) { return {0x0p+0L, 0xc.c3bd64937d9deedp-2L, -0xa.4613d385c9e6eeep+0L, 0xf.bfefb0422e7dd11p-1L, 0x8.58f50772fcf6838p+0L, -0x8.ad579c56d0b531bp+1L, 0xa.522820dc8f0dd92p+0L, -0x8.2809a404096fa64p-2L, -0x8.9f72308a7ec28cep-7L, -0x0p+0L}; @@ -219,22 +252,39 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.646bf1ec64a308c5df07d89c8e9ap-1Q, 0x1.cbd5c1bab5148530b0e77ecbff8fp-2Q, -0x1.754196833f706c7834855fa5579ap-3Q, 0x1.3100cab7c3f5f4fa75b80a67ed4ap-5Q, 0x1.8dd2be8c89c51e7b28b04315345ap-10Q, -0x1.c4ab558ff2dcebdfdc6142054ddfp-10Q, 0x1.3b27d2d798eecea1adaf099c04dp-15Q, 0x1.75f2b16626e9875840e692dcf345p-23Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.646bf1ec64a308c5df07d89c8e9bp-1Q, 0x1.cbd5c1bab5148530b0e77ecbff92p-2Q, -0x1.754196833f706c7834855fa5579ep-3Q, 0x1.3100cab7c3f5f4fa75b80a67ed4bp-5Q, 0x1.8dd2be8c89c51e7b28b04315346bp-10Q, -0x1.c4ab558ff2dcebdfdc6142054ddep-10Q, 0x1.3b27d2d798eecea1adaf099c04dp-15Q, 0x1.75f2b16626e9875840e692dcf344p-23Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.8eee7927087b240ec5ade1ac8194p+0Q, -0x1.37cf445237f1b72a99ae1be26162p+1Q, 0x1.3c64475174b4a0c9b8a3ee3dfc17p+0Q, -0x1.7841978e876db6599aa4ad109929p-2Q, -0x1.64d969ffaac153a6af06dc9cfb6cp-6Q, 0x1.08fcfb4783fa7d234eba36053963p-5Q, -0x1.5e1fef6185af966378a125175a7ap-10Q, -0x1.984da1089743964ff5ac0959c3cp-17Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.8eee7927087b240ec5ade1ac81aep+0Q, -0x1.37cf445237f1b72a99ae1be2616ep+1Q, 0x1.3c64475174b4a0c9b8a3ee3dfc2p+0Q, -0x1.7841978e876db6599aa4ad10992fp-2Q, -0x1.64d969ffaac153a6af06dc9cfb72p-6Q, 0x1.08fcfb4783fa7d234eba36053968p-5Q, -0x1.5e1fef6185af966378a125175a7fp-10Q, -0x1.984da1089743964ff5ac0959c3bcp-17Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.22c5cb8d3f23b44faf592c365fa4p+1Q, -0x1.83cca07a3ead78a73330d7cf1ab1p+2Q, 0x1.5245172406b77d1d4fdfd2192e03p+2Q, -0x1.2d10dba463fc1840fd45963c56f2p+0Q, -0x1.549f4c5e04f3991456e630b15647p-1Q, 0x1.882ac9029ddc72b4c74d388daa79p-2Q, -0x1.3d5d0eda32d8b61e7ff27a395996p-5Q, -0x1.65cdc06ecf6547344a6a8d5280b2p-11Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.22c5cb8d3f23b44faf592c365f5dp+1Q, -0x1.83cca07a3ead78a73330d7cf1a39p+2Q, 0x1.5245172406b77d1d4fdfd2192d87p+2Q, -0x1.2d10dba463fc1840fd45963c568fp+0Q, -0x1.549f4c5e04f3991456e630b1555ep-1Q, 0x1.882ac9029ddc72b4c74d388da98p-2Q, -0x1.3d5d0eda32d8b61e7ff27a395899p-5Q, -0x1.65cdc06ecf6547344a6a8d527f6ap-11Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.9877ac926fb3bdd992f46d8483bfp+1Q, -0x1.48c27a70b93cdddc043571f4721ap+3Q, 0x1.f7fdf60845cfba22e0c6bd0437bdp+2Q, 0x1.0b1ea0ee5f9ed06f5107d79a0311p+3Q, -0x1.15aaf38ada16a6358cd77355dd37p+4Q, 0x1.4a45041b91e1bb24fe9a63ad0148p+3Q, -0x1.05013480812df4c7388d78da948bp+1Q, -0x1.13ee46114fd8519c5d7f29b7c3fap-4Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.9877ac926fb3bdd992f46d848f57p+1Q, -0x1.48c27a70b93cdddc043571f47b88p+3Q, 0x1.f7fdf60845cfba22e0c6bd043e1ep+2Q, 0x1.0b1ea0ee5f9ed06f5107d79a1aafp+3Q, -0x1.15aaf38ada16a6358cd77355f075p+4Q, 0x1.4a45041b91e1bb24fe9a63ad188p+3Q, -0x1.05013480812df4c7388d78daa7bap+1Q, -0x1.13ee46114fd8519c5d7f29b7d91dp-4Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.13b9e8c4fdc4ff9d9c7b93fda525p-1Q, -0x1.e1e5e5cfd0a801f531eaef0fe568p+0Q, 0x1.29ab2ec864d44a65c8f8abfdaaf8p+1Q, -0x1.3d6cc61e0f6a43e21f6553d106aap+0Q, 0x1.0227f72aa277daecfc1fddb3c489p-1Q, -0x1.9ada2a6a9a217e8dbe2b55c6b9fep-2Q, 0x1.2c68da3893cd5c4c84ac50c60e4ep-3Q, 0x1.1a66dc6d2cfbf029033eb2e703a5p-7Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.13b9e8c4fdc4ff9d9c7b93fda5d3p-1Q, -0x1.e1e5e5cfd0a801f531eaef0fe6ap+0Q, 0x1.29ab2ec864d44a65c8f8abfdabb3p+1Q, -0x1.3d6cc61e0f6a43e21f6553d10792p+0Q, 0x1.0227f72aa277daecfc1fddb3c5aep-1Q, -0x1.9ada2a6a9a217e8dbe2b55c6bb8bp-2Q, 0x1.2c68da3893cd5c4c84ac50c60f2ap-3Q, 0x1.1a66dc6d2cfbf029033eb2e70439p-7Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.696136055094319477854858582899623165657477087397982420446214768704637534395"), boost::lexical_cast("0.449057604809486328422544147258783961136679734070279222683095397573769933916"), boost::lexical_cast("-0.182254005318036337838976194133760626404155027995824869298574162909992040160"), boost::lexical_cast("0.0372318229038899280943468571976409825349884675067696944216807399624576154231"), boost::lexical_cast("0.00151757514971408546631660804627799642999930803663956002350203262334698096372"), boost::lexical_cast("-0.00172679624300796683492238574113985690016517858343249085985731373201062373654"), boost::lexical_cast("0.0000375694705183874611122788905987601511712424642186474598567387629170716626883"), boost::lexical_cast("0.000000174133116097374720105581975617394004367103367815124081799014873533525879944"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.55832631304700136656437922101147238270749801987968302608726226056001482368"), boost::lexical_cast("-2.43601278318955192143689593229007692528378574026415581479157815807966800017"), boost::lexical_cast("1.23590512980145429394703890677945755544792211433079804428523927099597048061"), boost::lexical_cast("-0.367437713693886635994756136622838185785128398329531162713235860868138262530"), boost::lexical_cast("-0.0217803511756465465888455643095945877678797679730267716300872503661203118564"), boost::lexical_cast("0.0323471935081436888581585415004509261169517927400595785850252266260883753013"), boost::lexical_cast("-0.00133561991277070103522933081789825027913295746975070671440848910320957810632"), boost::lexical_cast("-0.0000121683847435443138497052509729151564450629140761931082169997649373563390225"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.27166122814949534600896122719444335851364604986118568035816607547755917237"), boost::lexical_cast("-6.05936443269703021458765565610458515567565968210302097303958018874430527787"), boost::lexical_cast("5.28546694296061742660009147793158080678169598815648398102884014016442733462"), boost::lexical_cast("-1.17603848231736696569405849672717768085153722635404167927428726433255541822"), boost::lexical_cast("-0.665277849652262172893211868601932018692793523566973388708885090298621050238"), boost::lexical_cast("0.382975712570864999469720877338520879718972231720745739556192701382764798208"), boost::lexical_cast("-0.0387406625828488850208242053540315894034591845169984253024631712386615226757"), boost::lexical_cast("-0.000682456431469533883023355676818600390864653197380934617983202410607639498017"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.19115216398441064598874856260571078533335587095494743176688738763014884081"), boost::lexical_cast("-10.27374002472233958765271086107000542805707479728145748157559647456760808710"), boost::lexical_cast("7.87487555320626209855129987050336396619016782135024668820907820995265770052"), boost::lexical_cast("8.34748884732558776131996262585236386342026292471024772697407362253973719963"), boost::lexical_cast("-17.35423616637255288734483167824286404110868945013746827031620566538851642130"), boost::lexical_cast("10.32092481026398135762866367591092420975846125781641772354270513968155400150"), boost::lexical_cast("-2.03909927630080258726415694483947450981378728380854211799311168912518310053"), boost::lexical_cast("-0.0673659073845468012269752507200188457226963436043917006078305307227881695785"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.538527750059879292796528780519852438911382070810691516995382579602542914648"), boost::lexical_cast("-1.88241421054468108184078064831664583702656657871925935150851189089967644557"), boost::lexical_cast("2.32553658280235915338790080889465383487576175009269238722259396773724525645"), boost::lexical_cast("-1.23994100793735478720630163791841698087868254804877475832368176128007400006"), boost::lexical_cast("0.504211162523674003883304110865210953390071787279159096400634899652374386912"), boost::lexical_cast("-0.401222861057733743406505260198882985396262380707384195761109616807384220426"), boost::lexical_cast("0.146684365131000298517783121263439809537955817949643689585465029271973791975"), boost::lexical_cast("0.00861821902285686386807072489078876658634008134323161538922679272299835038788"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 6) { if constexpr (std::is_same_v) { @@ -242,16 +292,16 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.bf65e8p-2f, 0x1.aa2466p-1f, -0x1.89fd1p-2f, 0x1.24737ep-3f, -0x1.a1e9c8p-6f, -0x1.cec09ap-9f, 0x1.cd4fecp-10f, 0x1.05937cp-16f, -0x1.5a00dp-19f, 0x1.0fbc42p-28f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.2faeacp+0f, -0x1.801498p+0f, 0x1.050336p-1f, -0x1.0ffe44p-2f, 0x1.0b11b2p-4f, 0x1.721a1ep-7f, -0x1.af662cp-8f, -0x1.a69b86p-15f, 0x1.45b126p-16f, -0x1.018922p-24f, 0x0p+0f}; + return {0x0p+0f, 0x1.2faeacp+0f, -0x1.801498p+0f, 0x1.050336p-1f, -0x1.0ffe44p-2f, 0x1.0b11b2p-4f, 0x1.721a1ep-7f, -0x1.af662cp-8f, -0x1.a69b86p-15f, 0x1.45b126p-16f, -0x1.018922p-24f, -0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.1e62dep+1f, -0x1.980b4p+2f, 0x1.a34deap+2f, -0x1.45eb5ep+1f, -0x1.0310f6p-1f, 0x1.da7724p-1f, -0x1.4137dp-2f, 0x1.7eb866p-6f, 0x1.4ebb22p-9f, -0x1.0c5bep-16f, -0x0p+0f}; + return {0x0p+0f, 0x1.1e62dep+1f, -0x1.980b4p+2f, 0x1.a34deap+2f, -0x1.45eb5ep+1f, -0x1.0310f6p-1f, 0x1.da7724p-1f, -0x1.4137dp-2f, 0x1.7eb866p-6f, 0x1.4ebb22p-9f, -0x1.0c5bep-16f, 0x0p+0f}; } if constexpr (order == 3) { return {0x0p+0f, 0x1.422fap-2f, -0x1.255a76p+0f, 0x1.484b54p+3f, -0x1.3c98d8p+5f, 0x1.10b7fap+6f, -0x1.d54dd2p+5f, 0x1.804948p+4f, -0x1.77f884p+1f, -0x1.d3687ap-2f, 0x1.816ef8p-8f, -0x0p+0f}; } if constexpr (order == 4) { - return {0x0p+0f, 0x1.8faefp+0f, -0x1.93816ep+2f, 0x1.33788p+3f, -0x1.c3f2cep+2f, 0x1.c7801ep+1f, -0x1.46377ep+1f, 0x1.77a6f6p+0f, -0x1.c41888p-3f, -0x1.f8b0a6p-5f, 0x1.b96594p-10f, -0x0p+0f}; + return {0x0p+0f, 0x1.8faefp+0f, -0x1.93816ep+2f, 0x1.33788p+3f, -0x1.c3f2cep+2f, 0x1.c7801ep+1f, -0x1.46377ep+1f, 0x1.77a6f6p+0f, -0x1.c41888p-3f, -0x1.f8b0a6p-5f, 0x1.b96594p-10f, 0x0p+0f}; } if constexpr (order == 5) { return {0x0p+0f, 0x1.cb9194p-2f, -0x1.e6b982p+0f, 0x1.7b2e48p+1f, -0x1.fa645ep+0f, 0x1.29da94p-1f, -0x1.8461e6p-2f, 0x1.67c138p-2f, -0x1.c1a09cp-5f, -0x1.0c11f4p-5f, 0x1.0ac90ap-9f, 0x0p+0f}; @@ -262,16 +312,16 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.bf65e79817d28p-2, 0x1.aa2466d50e4a5p-1, -0x1.89fd104c6ff15p-2, 0x1.24737e6f8ebf1p-3, -0x1.a1e9c758a51a1p-6, -0x1.cec09a7ccf05bp-9, 0x1.cd4feb82d2494p-10, 0x1.05937b8388af2p-16, -0x1.5a00cfad970a8p-19, 0x1.0fbc42c672231p-28, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.2faeacbb8e754p+0, -0x1.8014975295b21p+0, 0x1.05033635f5402p-1, -0x1.0ffe44cc8bc7fp-2, 0x1.0b11b28c7d67bp-4, 0x1.721a1d14b8323p-7, -0x1.af662c52c3b7bp-8, -0x1.a69b860b67a33p-15, 0x1.45b12643cf82p-16, -0x1.01892163486cbp-24, 0x0p+0}; + return {0x0p+0, 0x1.2faeacbb8e754p+0, -0x1.8014975295b21p+0, 0x1.05033635f5402p-1, -0x1.0ffe44cc8bc7fp-2, 0x1.0b11b28c7d67bp-4, 0x1.721a1d14b8323p-7, -0x1.af662c52c3b7bp-8, -0x1.a69b860b67a33p-15, 0x1.45b12643cf82p-16, -0x1.01892163486cbp-24, -0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.1e62ddd540b06p+1, -0x1.980b3fe2011f8p+2, 0x1.a34dea8cd59b4p+2, -0x1.45eb5e5e7e3cap+1, -0x1.0310f5a5d86dep-1, 0x1.da7724c65802cp-1, -0x1.4137cfe85b9e6p-2, 0x1.7eb866ddca6bap-6, 0x1.4ebb22d1ac076p-9, -0x1.0c5bdfb916a45p-16, -0x0p+0}; + return {0x0p+0, 0x1.1e62ddd540b06p+1, -0x1.980b3fe2011f8p+2, 0x1.a34dea8cd59b4p+2, -0x1.45eb5e5e7e3cap+1, -0x1.0310f5a5d86dep-1, 0x1.da7724c65802cp-1, -0x1.4137cfe85b9e6p-2, 0x1.7eb866ddca6bap-6, 0x1.4ebb22d1ac076p-9, -0x1.0c5bdfb916a45p-16, 0x0p+0}; } if constexpr (order == 3) { return {0x0p+0, 0x1.422f9f5227e8p-2, -0x1.255a76df553ccp+0, 0x1.484b537c56dedp+3, -0x1.3c98d8a74cd77p+5, 0x1.10b7f9c607064p+6, -0x1.d54dd14cd31afp+5, 0x1.8049478b6740dp+4, -0x1.77f8847acd28bp+1, -0x1.d3687a3bc3933p-2, 0x1.816ef86832622p-8, -0x0p+0}; } if constexpr (order == 4) { - return {0x0p+0, 0x1.8faeef62b3a8p+0, -0x1.93816e52ba1c8p+2, 0x1.337880b3a9a71p+3, -0x1.c3f2cd3d53133p+2, 0x1.c7801db767804p+1, -0x1.46377db27f625p+1, 0x1.77a6f5e8321cdp+0, -0x1.c4188733407f2p-3, -0x1.f8b0a606c7f79p-5, 0x1.b965933f534b2p-10, -0x0p+0}; + return {0x0p+0, 0x1.8faeef62b3a8p+0, -0x1.93816e52ba1c8p+2, 0x1.337880b3a9a71p+3, -0x1.c3f2cd3d53133p+2, 0x1.c7801db767804p+1, -0x1.46377db27f625p+1, 0x1.77a6f5e8321cdp+0, -0x1.c4188733407f2p-3, -0x1.f8b0a606c7f79p-5, 0x1.b965933f534b2p-10, 0x0p+0}; } if constexpr (order == 5) { return {0x0p+0, 0x1.cb91942378a6bp-2, -0x1.e6b982120ca32p+0, 0x1.7b2e4714b2703p+1, -0x1.fa645ee8ca231p+0, 0x1.29da9349c32a2p-1, -0x1.8461e6acf9cb3p-2, 0x1.67c137342024dp-2, -0x1.c1a09b7773a5ap-5, -0x1.0c11f4efd5c0bp-5, 0x1.0ac90a45b7a47p-9, 0x0p+0}; @@ -282,16 +332,16 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xd.fb2f3cc0be93e54p-5L, 0xd.512336a872527e6p-4L, -0xc.4fe882637f8a4ep-5L, 0x9.239bf37c75f8764p-6L, -0xd.0f4e3ac528d0419p-9L, -0xe.7604d3e6782db77p-12L, 0xe.6a7f5c169249c7ap-13L, 0x8.2c9bdc1c4579256p-19L, -0xa.d0067d6cb853e5ep-22L, 0x8.7de216339118a43p-31L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0x9.7d7565dc73a9dap-3L, -0xc.00a4ba94ad909b7p-3L, 0x8.2819b1afaa00e4ep-4L, -0x8.7ff226645e3f525p-5L, 0x8.588d9463eb3d6b2p-7L, 0xb.90d0e8a5c191592p-10L, -0xd.7b3162961dbd72bp-11L, -0xd.34dc305b3d198bdp-18L, 0xa.2d89321e7c101dfp-19L, -0x8.0c490b1a4365a0ep-27L, 0x0p+0L}; + return {0x0p+0L, 0x9.7d7565dc73a9dap-3L, -0xc.00a4ba94ad909b7p-3L, 0x8.2819b1afaa00e4ep-4L, -0x8.7ff226645e3f525p-5L, 0x8.588d9463eb3d6b2p-7L, 0xb.90d0e8a5c191592p-10L, -0xd.7b3162961dbd72bp-11L, -0xd.34dc305b3d198bdp-18L, 0xa.2d89321e7c101dfp-19L, -0x8.0c490b1a4365a0ep-27L, -0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0x8.f316eeaa0582d86p-2L, -0xc.c059ff1008fbde4p-1L, 0xd.1a6f5466acda0c4p-1L, -0xa.2f5af2f3f1e4f4dp-2L, -0x8.1887ad2ec36f306p-4L, 0xe.d3b92632c015e4bp-4L, -0xa.09be7f42dcf2d82p-5L, 0xb.f5c336ee535d213p-9L, 0xa.75d9168d603b071p-12L, -0x8.62defdc8b5224edp-19L, -0x0p+0L}; + return {0x0p+0L, 0x8.f316eeaa0582d86p-2L, -0xc.c059ff1008fbde4p-1L, 0xd.1a6f5466acda0c4p-1L, -0xa.2f5af2f3f1e4f4dp-2L, -0x8.1887ad2ec36f306p-4L, 0xe.d3b92632c015e4bp-4L, -0xa.09be7f42dcf2d82p-5L, 0xb.f5c336ee535d213p-9L, 0xa.75d9168d603b071p-12L, -0x8.62defdc8b5224edp-19L, 0x0p+0L}; } if constexpr (order == 3) { return {0x0p+0L, 0xa.117cfa913f3fd65p-5L, -0x9.2ad3b6faa9e5fc2p-3L, 0xa.425a9be2b6f651fp+0L, -0x9.e4c6c53a66bb9b6p+2L, 0x8.85bfce3038320c3p+3L, -0xe.aa6e8a6698d7b2fp+2L, 0xc.024a3c5b3a06863p+1L, -0xb.bfc423d6694569bp-2L, -0xe.9b43d1de1c99addp-5L, 0xc.0b77c3419310f5ep-11L, -0x0p+0L}; } if constexpr (order == 4) { - return {0x0p+0L, 0xc.7d777b159d3fe93p-3L, -0xc.9c0b7295d0e4242p-1L, 0x9.9bc4059d4d38bf3p+0L, -0xe.1f9669ea9899554p-1L, 0xe.3c00edbb3c02374p-2L, -0xa.31bbed93fb124adp-2L, 0xb.bd37af4190e69cdp-3L, -0xe.20c4399a03f920dp-6L, -0xf.c58530363fbca91p-8L, 0xd.cb2c99fa9a58d79p-13L, -0x0p+0L}; + return {0x0p+0L, 0xc.7d777b159d3fe93p-3L, -0xc.9c0b7295d0e4242p-1L, 0x9.9bc4059d4d38bf3p+0L, -0xe.1f9669ea9899554p-1L, 0xe.3c00edbb3c02374p-2L, -0xa.31bbed93fb124adp-2L, 0xb.bd37af4190e69cdp-3L, -0xe.20c4399a03f920dp-6L, -0xf.c58530363fbca91p-8L, 0xd.cb2c99fa9a58d79p-13L, 0x0p+0L}; } if constexpr (order == 5) { return {0x0p+0L, 0xe.5c8ca11bc53594fp-5L, -0xf.35cc10906518e34p-3L, 0xb.d97238a59381a17p-2L, -0xf.d322f7465118802p-3L, 0x9.4ed49a4e1950cdfp-4L, -0xc.230f3567ce5957dp-5L, 0xb.3e09b9a10126b64p-5L, -0xe.0d04dbbb9d2ce8dp-8L, -0x8.608fa77eae05beap-8L, 0x8.5648522dbd23badp-12L, 0x0p+0L}; @@ -300,25 +350,45 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.bf65e79817d27ca7c78972c65f34p-2Q, 0x1.aa2466d50e4a4fcbbebe54f94c37p-1Q, -0x1.89fd104c6ff149bf7514a7ddf379p-2Q, 0x1.24737e6f8ebf0ec8bb9fcc85bb6cp-3Q, -0x1.a1e9c758a51a08321aa63e9af1d2p-6Q, -0x1.cec09a7ccf05b6ee1ea8f3c17f38p-9Q, 0x1.cd4feb82d24938f30e41e1af2e9p-10Q, 0x1.05937b8388af24ac43ec83967a3ap-16Q, -0x1.5a00cfad970a7cbc309138fd3f9dp-19Q, 0x1.0fbc42c672231485a0bcbfe7e33cp-28Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.bf65e79817d27ca7c78972c65f3p-2Q, 0x1.aa2466d50e4a4fcbbebe54f94c3cp-1Q, -0x1.89fd104c6ff149bf7514a7ddf37fp-2Q, 0x1.24737e6f8ebf0ec8bb9fcc85bb71p-3Q, -0x1.a1e9c758a51a08321aa63e9af1d7p-6Q, -0x1.cec09a7ccf05b6ee1ea8f3c17f4ep-9Q, 0x1.cd4feb82d24938f30e41e1af2eap-10Q, 0x1.05937b8388af24ac43ec83967a2ep-16Q, -0x1.5a00cfad970a7cbc309138fd3facp-19Q, 0x1.0fbc42c672231485a0bcbfe7e34bp-28Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.2faeacbb8e753b40eb856e00f52fp+0Q, -0x1.8014975295b2136d5a1adb45438cp+0Q, 0x1.05033635f5401c9b60636a325269p-1Q, -0x1.0ffe44cc8bc7ea4a6ce4734d8d3ap-2Q, 0x1.0b11b28c7d67ad63229fbc3aa7e2p-4Q, 0x1.721a1d14b8322b2431432e8b8011p-7Q, -0x1.af662c52c3b7ae55063672df3c81p-8Q, -0x1.a69b860b67a33179a8c7a5f6b347p-15Q, 0x1.45b12643cf8203bdf796367d51ecp-16Q, -0x1.01892163486cb41cb64453f7616bp-24Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.2faeacbb8e753b40eb856e00f522p+0Q, -0x1.8014975295b2136d5a1adb454387p+0Q, 0x1.05033635f5401c9b60636a32526ap-1Q, -0x1.0ffe44cc8bc7ea4a6ce4734d8d36p-2Q, 0x1.0b11b28c7d67ad63229fbc3aa7dap-4Q, 0x1.721a1d14b8322b2431432e8b800fp-7Q, -0x1.af662c52c3b7ae55063672df3c7fp-8Q, -0x1.a69b860b67a33179a8c7a5f6b2acp-15Q, 0x1.45b12643cf8203bdf796367d51eep-16Q, -0x1.01892163486cb41cb64453f7616fp-24Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.1e62ddd540b05b0cc5ce5870089ep+1Q, -0x1.980b3fe2011f7bc878be7d3998f1p+2Q, 0x1.a34dea8cd59b4187717c6efb0807p+2Q, -0x1.45eb5e5e7e3c9e9ae26ca4aa21b4p+1Q, -0x1.0310f5a5d86de60ba877dea68891p-1Q, 0x1.da7724c65802bc95482213f98417p-1Q, -0x1.4137cfe85b9e5b04e10239758ca5p-2Q, 0x1.7eb866ddca6ba425f9e4eb854dbfp-6Q, 0x1.4ebb22d1ac0760e1461881059b61p-9Q, -0x1.0c5bdfb916a449da5acc3ccfdf5cp-16Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.1e62ddd540b05b0cc5ce587007d5p+1Q, -0x1.980b3fe2011f7bc878be7d399794p+2Q, 0x1.a34dea8cd59b4187717c6efb0662p+2Q, -0x1.45eb5e5e7e3c9e9ae26ca4aa207cp+1Q, -0x1.0310f5a5d86de60ba877dea685a5p-1Q, 0x1.da7724c65802bc95482213f980a5p-1Q, -0x1.4137cfe85b9e5b04e10239758a3cp-2Q, 0x1.7eb866ddca6ba425f9e4eb854a4dp-6Q, 0x1.4ebb22d1ac0760e1461881059843p-9Q, -0x1.0c5bdfb916a449da5acc3ccfdc72p-16Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.422f9f5227e7facaa94dd7e1c4ccp-2Q, -0x1.255a76df553cbf84e8a0b06861f6p+0Q, 0x1.484b537c56deca3daefc656e764dp+3Q, -0x1.3c98d8a74cd7736b60af4e5f5a22p+5Q, 0x1.10b7f9c607064185ab2dfc57477p+6Q, -0x1.d54dd14cd31af65e5343fc85bc89p+5Q, 0x1.8049478b6740d0c6b0100478b786p+4Q, -0x1.77f8847acd28ad3549099ae0cd55p+1Q, -0x1.d3687a3bc39335bac7f281e5e3cfp-2Q, 0x1.816ef86832621ebc63e47cd17f95p-8Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.422f9f5227e7facaa94dd7d9e31p-2Q, -0x1.255a76df553cbf84e8a0b0613039p+0Q, 0x1.484b537c56deca3daefc656e3b6ep+3Q, -0x1.3c98d8a74cd7736b60af4e604261p+5Q, 0x1.10b7f9c607064185ab2dfc58353fp+6Q, -0x1.d54dd14cd31af65e5343fc875b57p+5Q, 0x1.8049478b6740d0c6b010047a06c3p+4Q, -0x1.77f8847acd28ad3549099ae2105ep+1Q, -0x1.d3687a3bc39335bac7f281e76bbep-2Q, 0x1.816ef86832621ebc63e47cd2b70fp-8Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.8faeef62b3a7fd26eb98dd7f9293p+0Q, -0x1.93816e52ba1c8483ff81ea3e2cbfp+2Q, 0x1.337880b3a9a717e67b9cd7fec3d9p+3Q, -0x1.c3f2cd3d53132aa78f87aee06f97p+2Q, 0x1.c7801db7678046e8ebdb22cf5b9fp+1Q, -0x1.46377db27f624959a2b9b7777544p+1Q, 0x1.77a6f5e8321cd39a930db3902d99p+0Q, -0x1.c4188733407f241acae534ed07ffp-3Q, -0x1.f8b0a606c7f795229d5947447259p-5Q, 0x1.b965933f534b1af276b67227f5edp-10Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.8faeef62b3a7fd26eb98dd7f984ap+0Q, -0x1.93816e52ba1c8483ff81ea3e324ep+2Q, 0x1.337880b3a9a717e67b9cd7fec812p+3Q, -0x1.c3f2cd3d53132aa78f87aee07639p+2Q, 0x1.c7801db7678046e8ebdb22cf642bp+1Q, -0x1.46377db27f624959a2b9b7777bb1p+1Q, 0x1.77a6f5e8321cd39a930db39033fap+0Q, -0x1.c4188733407f241acae534ed0f5dp-3Q, -0x1.f8b0a606c7f795229d5947447836p-5Q, 0x1.b965933f534b1af276b67227f89dp-10Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.cb91942378a6b29e2dd51c51c663p-2Q, -0x1.e6b982120ca31c68b89329c09f76p+0Q, 0x1.7b2e4714b270342ea6ba89978b55p+1Q, -0x1.fa645ee8ca231003817fbe32abe9p+0Q, 0x1.29da9349c32a19bed5b810cc5091p-1Q, -0x1.8461e6acf9cb2af90934d76c7fc3p-2Q, 0x1.67c137342024d6c8052e3d87701ap-2Q, -0x1.c1a09b7773a59d1a65f356774442p-5Q, -0x1.0c11f4efd5c0b7d44ac1c3a07541p-5Q, 0x1.0ac90a45b7a47759a7a92738ff23p-9Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.cb91942378a6b29e2dd51c51bfa9p-2Q, -0x1.e6b982120ca31c68b89329c09872p+0Q, 0x1.7b2e4714b270342ea6ba899785ecp+1Q, -0x1.fa645ee8ca231003817fbe32a47bp+0Q, 0x1.29da9349c32a19bed5b810cc4b88p-1Q, -0x1.8461e6acf9cb2af90934d76c7932p-2Q, 0x1.67c137342024d6c8052e3d876acdp-2Q, -0x1.c1a09b7773a59d1a65f356773daap-5Q, -0x1.0c11f4efd5c0b7d44ac1c3a0720ap-5Q, 0x1.0ac90a45b7a47759a7a92738fc7ep-9Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.436912172945044907144228485347825621410539534551633490282829655111997130403"), boost::lexical_cast("0.832308972842970561072656780688484969909152422815912990040758264557720345453"), boost::lexical_cast("-0.384754423776017240823727817356603521560970688156341806103424918665893513072"), boost::lexical_cast("0.142798412112682208241683440145206755760599607930024614732186357484695172147"), boost::lexical_cast("-0.0255073973408613836618989912216699702582536490819800245599669619734869162144"), boost::lexical_cast("-0.00353052030405191587644014357031569208954383867587514877878893763115391697093"), boost::lexical_cast("0.00175976633973310294687791686419090228541208847068173308405667330457900123359"), boost::lexical_cast("0.0000155911507261447556301511828782318895561336507906997931765895708973813706967"), boost::lexical_cast("-0.00000257792449680050051904829803613695691516006402149134709283993808809283908364"), boost::lexical_cast("0.00000000395427041670150922621803883961042354855917494285626611817873341124068492943"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.18625907496467146792209724298189804516984008871355130996941892999482122848"), boost::lexical_cast("-1.50031419531087122680662801195848817668641322402194798020924445478349906731"), boost::lexical_cast("0.509790128790541728679843731350866150242721024787663006627811106004296791437"), boost::lexical_cast("-0.265618395790575259239344136932196822481573416259521963554257379369647420831"), boost::lexical_cast("0.0652024244844486127834346214927829793557907226893556085427354685093316589934"), boost::lexical_cast("0.0112946168896442313978324044573675493852036148359725468126097329498236688742"), boost::lexical_cast("-0.00658262807952680441249220488086069578322307368873900509784589482921684655699"), boost::lexical_cast("-0.0000503787415155786809007366413438496538050960506069818027681542836778698200709"), boost::lexical_cast("0.0000194127553776389220829735998255824906496581738755358150095212114606531254267"), boost::lexical_cast("-0.0000000599621948105659258834698507620391902991796020771034688754036929095102873206"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.23739216721276332338878224928813443319380137365001617475449729702460814553"), boost::lexical_cast("-6.37568661757222064818087007988064952244769736524323206091611472179022669583"), boost::lexical_cast("6.55163062814101601777779848466095021703767404055811314444036330143823846521"), boost::lexical_cast("-2.54624538053437717302677939425802942100881803777676322897540130575773519940"), boost::lexical_cast("-0.505988766188433733744368526707172451758173834991466388525773967340764566418"), boost::lexical_cast("0.926690243923081056914375322621819979047483305911073890365009540068892624972"), boost::lexical_cast("-0.313689468914985485830723560991137056324820674194725652065219926423948539134"), boost::lexical_cast("0.0233593945078271825857280125900496031710930273733853151360419856695906224412"), boost::lexical_cast("0.00255379486119272204906336921540559285976842099994098440071430993999358629514"), boost::lexical_cast("-0.0000159954358632619330058765393713737703102562863421786141165128286490666376159"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.314634789838216004347219278851224957182628881138090829610427965680979138191"), boost::lexical_cast("-1.14591162636246490124057063708997784842452557437526442884613276777690297174"), boost::lexical_cast("10.25919508252169379158306431282332110722656695790182072665295187397284234950"), boost::lexical_cast("-39.57463198378803222763091210153395253214575080397200817757429653138129855280"), boost::lexical_cast("68.17966374795793307063651046839796286891828378129757556293454079229695233480"), boost::lexical_cast("-58.66299686450235667243637029946865368099558139408845032747908498579236804890"), boost::lexical_cast("24.01789049581934793489690384929366103321726646566966212731103293708083587360"), boost::lexical_cast("-2.93727165218507960698217968145386367512071654027601850078522746893001474631"), boost::lexical_cast("-0.456453237436011258659809322589189754978378863312423941968681370133465846399"), boost::lexical_cast("0.00588124813675386548614413276946752512020709001701613014446955498244051671873"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.56126304778777576443050160863879708904118592078755406627901576276101093399"), boost::lexical_cast("-6.30477483824547160848980524578141943454970012363516565523116238032800392998"), boost::lexical_cast("9.60845980730411762808214955695432741370084853414448911176063682241066899084"), boost::lexical_cast("-7.06169444073411748688716938924586604983878232115464543856592115083298206081"), boost::lexical_cast("3.55859729247367992138320272198938237654252341074503039432837735029655798290"), boost::lexical_cast("-2.54856845107748801044054274844945341537099829623280578974997775828865307664"), boost::lexical_cast("1.46739136618463144606525570352038426862829638293144420092004098891852838139"), boost::lexical_cast("-0.220749908687195857585648726228092057311307565129699615600606738330860600964"), boost::lexical_cast("-0.0616076700882776753864153489569808343372159974190746897916588825239020343770"), boost::lexical_cast("0.00168379508234587882847186755892064349515005496287341565125598591763515542636"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.448797526040073344800625409665848168336823300039318051519325620983465942323"), boost::lexical_cast("-1.90126812878282830955681810258116249323860290817569491974905637501312440751"), boost::lexical_cast("2.96234978209111122166662326226946007783574110910320150870148188012479737533"), boost::lexical_cast("-1.97809403594341071138805115779455370352957722549769910191794603383219959474"), boost::lexical_cast("0.581745722536272503632230565756890997548927114703803943288685477190719512918"), boost::lexical_cast("-0.379279712970354381573734078512746842789448242321016101227184675836523585288"), boost::lexical_cast("0.351322996670238331331118965555902223077733168124153384152743641838801971515"), boost::lexical_cast("-0.0548861538369364702831870995984759190374434786821402336660504725795046392356"), boost::lexical_cast("-0.0327234062121349553823389676664543405404659969276540517449952095914830314788"), boost::lexical_cast("0.00203541040796942675353120290529183233631315963372752064299614671505036863492"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 7) { if constexpr (std::is_same_v) { @@ -332,7 +402,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.e0eaccp+0f, -0x1.5362d8p+2f, 0x1.70aa18p+2f, -0x1.86bc52p+1f, 0x1.570932p-2f, 0x1.9d599ap-1f, -0x1.18b244p-1f, 0x1.fe16d2p-4f, 0x1.eb4ccap-12f, -0x1.4e09dp-9f, 0x1.c4a78ap-16f, 0x1.cb0cccp-25f, -0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.4ca934p-1f, -0x1.492e7p+1f, 0x1.171de6p+4f, -0x1.1e704ep+6f, 0x1.23bcc4p+7f, -0x1.415156p+7f, 0x1.7ff792p+6f, -0x1.a43b42p+4f, 0x1.833e7p-4f, 0x1.13b5aap+0f, -0x1.6365bp-6f, -0x1.64d198p-14f, 0x0p+0f}; + return {0x0p+0f, 0x1.4ca934p-1f, -0x1.492e7p+1f, 0x1.171de6p+4f, -0x1.1e704ep+6f, 0x1.23bcc4p+7f, -0x1.415156p+7f, 0x1.7ff792p+6f, -0x1.a43b42p+4f, 0x1.833e7p-4f, 0x1.13b5aap+0f, -0x1.6365bp-6f, -0x1.64d198p-14f, -0x0p+0f}; } if constexpr (order == 4) { return {0x0p+0f, 0x1.525f0cp+1f, -0x1.7eda4cp+3f, 0x1.578438p+4f, -0x1.40c582p+4f, 0x1.9815ccp+3f, -0x1.22247ap+3f, 0x1.8c2cccp+2f, -0x1.ffd4fcp+0f, -0x1.3be428p-3f, 0x1.7c490ep-3f, -0x1.23f976p-7f, -0x1.1f66b2p-14f, -0x0p+0f}; @@ -355,7 +425,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.e0eacca617ebcp+0, -0x1.5362d7fe36c57p+2, 0x1.70aa17b7adc0ep+2, -0x1.86bc52429f3a4p+1, 0x1.5709310e8d1f6p-2, 0x1.9d599937b31fbp-1, -0x1.18b244e50df67p-1, 0x1.fe16d1a3cfb3ep-4, 0x1.eb4cc917dd1cdp-12, -0x1.4e09cf12f0cddp-9, 0x1.c4a78957d2798p-16, 0x1.cb0ccbca08e79p-25, -0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.4ca9343b32368p-1, -0x1.492e70f2635c1p+1, 0x1.171de5ca88cecp+4, -0x1.1e704d84a1075p+6, 0x1.23bcc34d6a52ap+7, -0x1.415156a34428ap+7, 0x1.7ff7929036dddp+6, -0x1.a43b4147c122cp+4, 0x1.833e6f5afaca5p-4, 0x1.13b5aaaf6c71dp+0, -0x1.6365af2495a87p-6, -0x1.64d19861a8338p-14, 0x0p+0}; + return {0x0p+0, 0x1.4ca9343b32368p-1, -0x1.492e70f2635c1p+1, 0x1.171de5ca88cecp+4, -0x1.1e704d84a1075p+6, 0x1.23bcc34d6a52ap+7, -0x1.415156a34428ap+7, 0x1.7ff7929036dddp+6, -0x1.a43b4147c122cp+4, 0x1.833e6f5afaca5p-4, 0x1.13b5aaaf6c71dp+0, -0x1.6365af2495a87p-6, -0x1.64d19861a8338p-14, -0x0p+0}; } if constexpr (order == 4) { return {0x0p+0, 0x1.525f0cb11c272p+1, -0x1.7eda4b6a23329p+3, 0x1.578437542fe4fp+4, -0x1.40c582473fa8dp+4, 0x1.9815cb7223c1p+3, -0x1.222479cd96eeap+3, 0x1.8c2cccc6ee34dp+2, -0x1.ffd4fb5b3918p+0, -0x1.3be427404fe7dp-3, 0x1.7c490d447fad3p-3, -0x1.23f9756392d0fp-7, -0x1.1f66b1e781529p-14, -0x0p+0}; @@ -378,7 +448,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xf.07566530bf5dc3p-3L, -0xa.9b16bff1b62b5b5p-1L, 0xb.8550bdbd6e073adp-1L, -0xc.35e29214f9d1fbdp-2L, 0xa.b849887468fb1bp-5L, 0xc.eaccc9bd98fd7eap-4L, -0x8.c59227286fb3ad2p-4L, 0xf.f0b68d1e7d9f3f6p-7L, 0xf.5a6648bee8e6ab7p-15L, -0xa.704e7897866e7ecp-12L, 0xe.253c4abe93cc026p-19L, 0xe.58665e50473cb0fp-28L, -0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0xa.6549a1d991b412ap-4L, -0xa.497387931ae0b61p-2L, 0x8.b8ef2e544676158p+1L, -0x8.f3826c25083a83ap+3L, 0x9.1de61a6b5294d86p+4L, -0xa.0a8ab51a2145353p+4L, 0xb.ffbc9481b6eebc6p+3L, -0xd.21da0a3e0916379p+1L, 0xc.19f37ad7d65262bp-7L, 0x8.9dad557b638eaddp-3L, -0xb.1b2d7924ad4363p-9L, -0xb.268cc30d419bc95p-17L, 0x0p+0L}; + return {0x0p+0L, 0xa.6549a1d991b412ap-4L, -0xa.497387931ae0b61p-2L, 0x8.b8ef2e544676158p+1L, -0x8.f3826c25083a83ap+3L, 0x9.1de61a6b5294d86p+4L, -0xa.0a8ab51a2145353p+4L, 0xb.ffbc9481b6eebc6p+3L, -0xd.21da0a3e0916379p+1L, 0xc.19f37ad7d65262bp-7L, 0x8.9dad557b638eaddp-3L, -0xb.1b2d7924ad4363p-9L, -0xb.268cc30d419bc95p-17L, -0x0p+0L}; } if constexpr (order == 4) { return {0x0p+0L, 0xa.92f86588e139024p-2L, -0xb.f6d25b5119947a7p+0L, 0xa.bc21baa17f27afep+1L, -0xa.062c1239fd4649cp+1L, 0xc.c0ae5b911e082dep+0L, -0x9.1123ce6cb774e8cp+0L, 0xc.6166663771a6508p-1L, -0xf.fea7dad9c8c0222p-3L, -0x9.df213a027f3e892p-6L, 0xb.e2486a23fd69714p-6L, -0x9.1fcbab1c968774dp-10L, -0x8.fb358f3c0a94afap-17L, -0x0p+0L}; @@ -393,28 +463,51 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.033291a6c76d6a2177301a6491ep-2Q, 0x1.027f6bf7952cdbcf397ade5b83a2p+0Q, -0x1.919d92c6034c44a7ed45a5787141p-2Q, 0x1.7a0ca906acc4841a1191b023a48bp-3Q, -0x1.1142c3515ec433047c393c69963p-4Q, 0x1.50e2d6421ee2654230b30972367cp-7Q, 0x1.d0243aab613f83777184da54a816p-10Q, -0x1.1d4c6c249bf0ee08cde9105ae0e7p-11Q, -0x1.17d0b3032ba5c5edbe3115298754p-14Q, 0x1.310ffd8b564011dafec30497e54dp-19Q, -0x1.509d126dab99ceafee21c5b15f2dp-25Q, -0x1.57f8e6955253718d03dd42dcc05dp-36Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.033291a6c76d6a2177301a6491e8p-2Q, 0x1.027f6bf7952cdbcf397ade5b83ap+0Q, -0x1.919d92c6034c44a7ed45a578713cp-2Q, 0x1.7a0ca906acc4841a1191b023a485p-3Q, -0x1.1142c3515ec433047c393c69962fp-4Q, 0x1.50e2d6421ee2654230b309723685p-7Q, 0x1.d0243aab613f83777184da54a80dp-10Q, -0x1.1d4c6c249bf0ee08cde9105ae0e2p-11Q, -0x1.17d0b3032ba5c5edbe3115298755p-14Q, 0x1.310ffd8b564011dafec30497e547p-19Q, -0x1.509d126dab99ceafee21c5b15f2ep-25Q, -0x1.57f8e6955253718d03dd42dcc06ep-36Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.9ec434341eaed8ccc6e8d7244a2p-1Q, -0x1.ca0692ca77439e8f752ca148c129p-2Q, -0x1.2d988a986b0dea756341b6b8b7c1p-1Q, 0x1.145887eacb10f9d392eed69a933p-2Q, -0x1.4ab3cf0bae2a5b8432a0a18163adp-6Q, -0x1.4e8938899ee371e40cd7b7528ae1p-5Q, 0x1.5cb5de436bfadb9e555d33c55725p-6Q, -0x1.051eebbefaf7bd71954e297a6202p-8Q, 0x1.0efaec65edbcc11b181ba7073ddfp-14Q, 0x1.6a87a6b931edc5ab5423dbf1bacbp-15Q, -0x1.4e8b2a27fe064ec01f6271830448p-23Q, -0x1.54fd8f0625f118cd9bcdded88df8p-33Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.9ec434341eaed8ccc6e8d7244a33p-1Q, -0x1.ca0692ca77439e8f752ca148c144p-2Q, -0x1.2d988a986b0dea756341b6b8b7c2p-1Q, 0x1.145887eacb10f9d392eed69a9335p-2Q, -0x1.4ab3cf0bae2a5b8432a0a181639cp-6Q, -0x1.4e8938899ee371e40cd7b7528ae9p-5Q, 0x1.5cb5de436bfadb9e555d33c55719p-6Q, -0x1.051eebbefaf7bd71954e297a61ffp-8Q, 0x1.0efaec65edbcc11b181ba7073e2cp-14Q, 0x1.6a87a6b931edc5ab5423dbf1babfp-15Q, -0x1.4e8b2a27fe064ec01f627183042bp-23Q, -0x1.54fd8f0625f118cd9bcdded88d81p-33Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.e0eacca617ebb860573873f7b257p+0Q, -0x1.5362d7fe36c56b6a443e9d614224p+2Q, 0x1.70aa17b7adc0e75a9ffe0b5a343p+2Q, -0x1.86bc52429f3a3f79bb4f1cb737ebp+1Q, 0x1.5709310e8d1f635f77e733f3171p-2Q, 0x1.9d599937b31fafd3d66db2bf1cfap-1Q, -0x1.18b244e50df675a487d76601b122p-1Q, 0x1.fe16d1a3cfb3e7ecc6834f20623cp-4Q, 0x1.eb4cc917dd1cd56dce6a9280b19ap-12Q, -0x1.4e09cf12f0cdcfd873bae55835b6p-9Q, 0x1.c4a78957d279804ccd5115f614bcp-16Q, 0x1.cb0ccbca08e7961d7bc2f676b681p-25Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.e0eacca617ebb860573873f7b1a4p+0Q, -0x1.5362d7fe36c56b6a443e9d6141a8p+2Q, 0x1.70aa17b7adc0e75a9ffe0b5a33b6p+2Q, -0x1.86bc52429f3a3f79bb4f1cb73763p+1Q, 0x1.5709310e8d1f635f77e733f31613p-2Q, 0x1.9d599937b31fafd3d66db2bf1cbbp-1Q, -0x1.18b244e50df675a487d76601b0e9p-1Q, 0x1.fe16d1a3cfb3e7ecc6834f2061cfp-4Q, 0x1.eb4cc917dd1cd56dce6a9280b03bp-12Q, -0x1.4e09cf12f0cdcfd873bae5583582p-9Q, 0x1.c4a78957d279804ccd5115f6146ap-16Q, 0x1.cb0ccbca08e7961d7bc2f676b666p-25Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.4ca9343b3236825367445e1bcc76p-1Q, -0x1.492e70f2635c16c262e618fc71c9p+1Q, 0x1.171de5ca88cec2afbea54998e4afp+4Q, -0x1.1e704d84a10750732762c3f7a7d9p+6Q, 0x1.23bcc34d6a529b0b422faf6a8faap+7Q, -0x1.415156a34428a6a6c08cde81cb46p+7Q, 0x1.7ff7929036ddd78bf54cfc3c1e07p+6Q, -0x1.a43b4147c122c6f143d7b5960278p+4Q, 0x1.833e6f5afaca4c566ce5985f38e4p-4Q, 0x1.13b5aaaf6c71d5b914583e4be0c9p+0Q, -0x1.6365af2495a86c5f48d9bd1e4466p-6Q, -0x1.64d19861a833792a3ce80f88bd23p-14Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.4ca9343b3236825367445e2a7e79p-1Q, -0x1.492e70f2635c16c262e6190afacep+1Q, 0x1.171de5ca88cec2afbea5499914ebp+4Q, -0x1.1e704d84a10750732762c3f4d8bap+6Q, 0x1.23bcc34d6a529b0b422faf672516p+7Q, -0x1.415156a34428a6a6c08cde7dee49p+7Q, 0x1.7ff7929036ddd78bf54cfc378272p+6Q, -0x1.a43b4147c122c6f143d7b591007fp+4Q, 0x1.833e6f5afaca4c566ce598593c06p-4Q, 0x1.13b5aaaf6c71d5b914583e48ae7dp+0Q, -0x1.6365af2495a86c5f48d9bd1a47dp-6Q, -0x1.64d19861a833792a3ce80f84d83cp-14Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.525f0cb11c2720485c66b9e1a4ecp+1Q, -0x1.7eda4b6a23328f4e2cec098f6dc4p+3Q, 0x1.578437542fe4f5fbe4cefec745eep+4Q, -0x1.40c582473fa8c93703a1216d1bfdp+4Q, 0x1.9815cb7223c105bc2b63ed01aaa9p+3Q, -0x1.222479cd96ee9d17f59bff4df756p+3Q, 0x1.8c2cccc6ee34ca0f24458389d70cp+2Q, -0x1.ffd4fb5b3918044492967474d7b2p+0Q, -0x1.3be427404fe7d12432d600f4467cp-3Q, 0x1.7c490d447fad2e27fa6b12a0df79p-3Q, -0x1.23f9756392d0ee9915448c1beeeap-7Q, -0x1.1f66b1e7815295f48755fd4e4048p-14Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.525f0cb11c2720485c66b9e19f02p+1Q, -0x1.7eda4b6a23328f4e2cec098f6666p+3Q, 0x1.578437542fe4f5fbe4cefec73f0cp+4Q, -0x1.40c582473fa8c93703a1216d1613p+4Q, 0x1.9815cb7223c105bc2b63ed01a5fep+3Q, -0x1.222479cd96ee9d17f59bff4df592p+3Q, 0x1.8c2cccc6ee34ca0f24458389d35dp+2Q, -0x1.ffd4fb5b3918044492967474d1cep+0Q, -0x1.3be427404fe7d12432d600f4382ep-3Q, 0x1.7c490d447fad2e27fa6b12a0d504p-3Q, -0x1.23f9756392d0ee9915448c1be2b1p-7Q, -0x1.1f66b1e7815295f48755fd4e3126p-14Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.80a316d21a0eed480c84ea711c72p+0Q, -0x1.ce7e6827143677fbd12dabe06d43p+2Q, 0x1.ac8b3ccd718c41df56b9c167f4f2p+3Q, -0x1.74c81d1a27df5c33454de2219d72p+3Q, 0x1.4010d1eedca99cac8148c1188814p+2Q, -0x1.34da807d2aaec910bcf3aa770b5fp+1Q, 0x1.2d09c9846b581b01a4323f49dd86p+1Q, -0x1.97de12ea03ca10913f6e6b1c02a9p-1Q, -0x1.9df5b4fe2e271a26f87f7a1f7732p-2Q, 0x1.16c54a229aae12ed509d340baa4cp-2Q, -0x1.e323c5b92bd166e33ab5b4f96118p-6Q, -0x1.c9a573f22c19a9032c5430df4acdp-12Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.80a316d21a0eed480c84ea711d9ep+0Q, -0x1.ce7e6827143677fbd12dabe06e9fp+2Q, 0x1.ac8b3ccd718c41df56b9c167f638p+3Q, -0x1.74c81d1a27df5c33454de2219e89p+3Q, 0x1.4010d1eedca99cac8148c11888d4p+2Q, -0x1.34da807d2aaec910bcf3aa770bf1p+1Q, 0x1.2d09c9846b581b01a4323f49de6p+1Q, -0x1.97de12ea03ca10913f6e6b1c03cap-1Q, -0x1.9df5b4fe2e271a26f87f7a1f78fbp-2Q, 0x1.16c54a229aae12ed509d340bab6bp-2Q, -0x1.e323c5b92bd166e33ab5b4f9635p-6Q, -0x1.c9a573f22c19a9032c5430df4c8ep-12Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.a096c8f7fc8ab1575820ee7aa2a9p-3Q, -0x1.01d8c748e11fa735da05e73f9139p+0Q, 0x1.099a073a7c7b41898468a5bd1aap+1Q, -0x1.40ce386ca776e06ba6f31ba7c1p+1Q, 0x1.2a57634989c51fb583fc11fbe69fp+1Q, -0x1.e6f030cb23fbfde6dfddcd331b76p+0Q, 0x1.3544c2755b1d82eac792a585c22cp+0Q, -0x1.6af581a622d416ac06a3c40afddbp-1Q, 0x1.256afda077267e050d8164de576cp-1Q, -0x1.6569331439297d46e21a065cd1e4p-2Q, 0x1.4b88409bdd1172b9682df895c7b5p-4Q, 0x1.24061e2653bdb3c5fd153e81e5dap-9Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.a096c8f7fc8ab1575820ee7a8d4ep-3Q, -0x1.01d8c748e11fa735da05e73f8394p+0Q, 0x1.099a073a7c7b41898468a5bd14cep+1Q, -0x1.40ce386ca776e06ba6f31ba7dadep+1Q, 0x1.2a57634989c51fb583fc11fc2c8bp+1Q, -0x1.e6f030cb23fbfde6dfddcd33a7b8p+0Q, 0x1.3544c2755b1d82eac792a5860a61p+0Q, -0x1.6af581a622d416ac06a3c40b5b79p-1Q, 0x1.256afda077267e050d8164debfb4p-1Q, -0x1.6569331439297d46e21a065d5029p-2Q, 0x1.4b88409bdd1172b9682df8963184p-4Q, 0x1.24061e2653bdb3c5fd153e823b33p-9Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.253122592739470610621616401361877779229479815458388533109264465986705450631"), boost::lexical_cast("1.00975680155277152973790111993384657471987193942368029780473312379324667581"), boost::lexical_cast("-0.392202657066104148408811882527482753596247632610867974599325631568154086472"), boost::lexical_cast("0.184594460025979019600750648078960441521039122548921838323798916634848032145"), boost::lexical_cast("-0.0667140607455829924370836933031099116268134098764011251351247996652005711545"), boost::lexical_cast("0.0102809473212267076120194571706337484167301394893291398778100853288079049731"), boost::lexical_cast("0.00177055938806458366110052669692669972802589253940700837389391312187949930155"), boost::lexical_cast("-0.000544163751852595970300441890153871700803533167101690775895643543400091558287"), boost::lexical_cast("-0.0000667131499081179164202264668107341250409611901330351905468822246841842144516"), boost::lexical_cast("0.00000227289246416658269412624892928823545347265264470652051954608031771296427329"), boost::lexical_cast("-0.0000000391869762033530665296480229865041718561429039745272396909531056977677153636"), boost::lexical_cast("-0.0000000000195525597303995056555942742975229891249637237818874029912606477521320941521"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.810090667116438906125084608325336635858558427183760467122011143848709217936"), boost::lexical_cast("-0.447290700538193081726926232920918677934473900641168827205793350756780984978"), boost::lexical_cast("-0.589054423433051105713954740965807748202549360662853302324635538959794377897"), boost::lexical_cast("0.269868968682900756914311183719700141732291233181671524008708012629904619787"), boost::lexical_cast("-0.0201844713144249320028138388205587200490715428568451868566842270755978350937"), boost::lexical_cast("-0.0408369163751242597466561287451981528641525226367711639411234490178637813143"), boost::lexical_cast("0.0212835951367080143883784719158797691366262981606201798553446386989113825786"), boost::lexical_cast("-0.00398438697355263021802052679010575079656365873865505148350654941430150902211"), boost::lexical_cast("0.0000646067070125676169190646922848512647427733001662437032209422253843012104636"), boost::lexical_cast("0.0000432169303593002095810035589027522962115335866552588130271810048010912722413"), boost::lexical_cast("-0.000000155784009025835660972833383558489901619201115987867017226055817524579424688"), boost::lexical_cast("-0.000000000155064510010241891136131541951717660675464153823551577127554599571639340405"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.87858275465980185082075059484687011254996371468315226671206152209070678246"), boost::lexical_cast("-5.30290794206219714496696347944500864617861621722571539095236274472680863374"), boost::lexical_cast("5.76038163125396215102934581086456598753529517251498951765403500351566767851"), boost::lexical_cast("-3.05262211087252131812326158576179299340031820314628130064826335395880941778"), boost::lexical_cast("0.334996000779283942861292317865019419501179829373743199871525404727592261010"), boost::lexical_cast("0.807324207352905330783228925068712255942845486187777944329076813046262028898"), boost::lexical_cast("-0.548235085449943077303537436963997364378850297210952683341512369648428848400"), boost::lexical_cast("0.124533480554402033115092620895174942570554514605089596521009703165626365178"), boost::lexical_cast("0.000468540137709608257946988592597297317335345745375177878078879095839559326245"), boost::lexical_cast("-0.00254851010092381349764580405159840052627991728234093528430327277020566808108"), boost::lexical_cast("0.0000269803070687479137062075450477716687058854979150244734967367615928087830171"), boost::lexical_cast("0.0000000534404516891100448405444096173981846862572475827871576787009651989666011194"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.649728424287883593075915713524545924783310332923624324175524503407444525226"), boost::lexical_cast("-2.57172977290494549793891044329117749573728410170896098271259318361359045523"), boost::lexical_cast("17.44479922404291076498745112746722871408945222683998804378328855565199405640"), boost::lexical_cast("-71.60967070801582718948073283130611179366722642889690312945916561433081250530"), boost::lexical_cast("145.86867753909000641239876531969663035434018992110863939875912524044321317900"), boost::lexical_cast("-160.65886411864296450491377746275540090856151126704519657432554150664253629400"), boost::lexical_cast("95.99177003226164787960050084081167617878900086549469777087475435337607996430"), boost::lexical_cast("-26.26446655301167408645778203802638858259056547097299290641658148431177104090"), boost::lexical_cast("0.0945419645137684612631871190010186728744115673914304553269038199852068315336"), boost::lexical_cast("1.07699076445391680627259708274414783686660624009083404578382123547772944786"), boost::lexical_cast("-0.0216917238597838193019899484025795776622827268816981287975371913591323350722"), boost::lexical_cast("-0.0000850722149388195052244794635893235241011583434623169919987280838271411539579"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.64352568290660717383488785687771176736791104693177525854341276422360953032"), boost::lexical_cast("-11.96414728860834656491684620425334470999319544817775050560074926228961346460"), boost::lexical_cast("21.46977932820874234919552398698675631801639393733709025528680976773677869130"), boost::lexical_cast("-20.04821994620810903573440830918637861650658462633252001448356816125828318470"), boost::lexical_cast("12.75266048710730678983761121302121021721233371785195914379176723194342934110"), boost::lexical_cast("-9.06695261148657362033536649492341832971872918291204156753481081587833932402"), boost::lexical_cast("6.19023436953359562968364270001994684253311540563623534733039001879957023961"), boost::lexical_cast("-1.99934359528660371790683912571810391676063304067432355179876753356952054619"), boost::lexical_cast("-0.154243761682653886850234521472448371875938984350115568709864935738395300610"), boost::lexical_cast("0.185686210301318679459789457754099133235266189449860784374121835441650545927"), boost::lexical_cast("-0.00891035301096690191056566243729350984965667867039696309182495485016806697240"), boost::lexical_cast("-0.0000685217743168943571948966687368236602823360897726181069159545607185161189239"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.50248854283750761908546072869048821088132450769069501088052480873059396056"), boost::lexical_cast("-7.22646526161484059523124385500321592540705032637199727092718371044938622631"), boost::lexical_cast("13.39199676633541734287658783725542834810025902906082654104028345517237151680"), boost::lexical_cast("-11.64942793949647239507297332186810695848666694958647083520681009041022780270"), boost::lexical_cast("5.00102661444057065419908749038327665570051567187076973678545304964939038004"), boost::lexical_cast("-2.41291814910561289346200219868321750732375141617088099871044781666393737553"), boost::lexical_cast("2.35186118093287252501820923028537286425715059555956136712165596831136965350"), boost::lexical_cast("-0.796616164270648967111841215195534682870000441132645044906036039054243939416"), boost::lexical_cast("-0.404257610334332808361375570208558025875438251716421264701309289474764401907"), boost::lexical_cast("0.272236975061487095514001649424045723282019885609650402120668262278630947181"), boost::lexical_cast("-0.0294885092632145241422905453679850353376394211407104294790349538471440716050"), boost::lexical_cast("-0.000436445522733053311620229711993666920722883672377214017763644242652824250344"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.203412599628398057633579265447859538789857395107674228547599630740965235246"), boost::lexical_cast("-1.00721402673036540834580779114189574939317230453601344322652356453222562469"), boost::lexical_cast("2.07501306873106199194436015743412574197776374012334226264667067621104388301"), boost::lexical_cast("-2.50629334740999977272680186302494744195967724949010390385922060059896772157"), boost::lexical_cast("2.33079186526041669838674663465091103063086959411404278532872827025632075003"), boost::lexical_cast("-1.90210251769529744977701199943741071402521093061881076298433872730941167746"), boost::lexical_cast("1.20808043828139059668185989249916782761200302655255371273149597921930707587"), boost::lexical_cast("-0.708904315500525840865022566665627479869867191675628771870881198841529204782"), boost::lexical_cast("0.573081899488511389976606360698320302247199472202129763974755593812367045224"), boost::lexical_cast("-0.349034116849261878956804444377809483590457734709780607298538959951976647643"), boost::lexical_cast("0.0809404872687234817933056436803663367147851456539523123991589358626438323968"), boost::lexical_cast("0.00222796552694813425499071023694009086590703727664242361109396513146307543467"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 8) { if constexpr (std::is_same_v) { @@ -422,22 +515,22 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.184a0cp-3f, 0x1.fbaa04p-1f, -0x1.596f5cp-3f, 0x1.234876p-4f, -0x1.90a568p-5f, 0x1.82b42ep-6f, -0x1.96b60cp-8f, 0x1.8430d2p-11f, -0x1.92df02p-14f, 0x1.da6faap-16f, 0x1.b237bcp-20f, 0x1.66eb1ap-25f, -0x1.f6ebd8p-33f, 0x1.569072p-45f, 0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.03034p-1f, 0x1.8347dap-2f, -0x1.7d2f18p+0f, 0x1.c3013ep-1f, -0x1.4be40ep-2f, 0x1.458036p-6f, 0x1.7e9e8ep-5f, -0x1.594cfap-6f, 0x1.27c566p-9f, 0x1.e972ap-12f, -0x1.1649ecp-14f, 0x1.c99c42p-23f, 0x1.81519ep-26f, -0x1.06b5eep-37f, -0x0p+0f}; + return {0x0p+0f, 0x1.03034p-1f, 0x1.8347dap-2f, -0x1.7d2f18p+0f, 0x1.c3013ep-1f, -0x1.4be40ep-2f, 0x1.458036p-6f, 0x1.7e9e8ep-5f, -0x1.594cfap-6f, 0x1.27c566p-9f, 0x1.e972ap-12f, -0x1.1649ecp-14f, 0x1.c99c42p-23f, 0x1.81519ep-26f, -0x1.06b5eep-37f, 0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.666d54p+0f, -0x1.c03746p+1f, 0x1.a43ebap+1f, -0x1.d62736p+0f, 0x1.891e36p-1f, 0x1.a23c1ap-6f, -0x1.d9c16ep-3f, 0x1.b6728ep-4f, -0x1.66849cp-7f, -0x1.fc6302p-9f, 0x1.7e62aep-11f, -0x1.2c21cp-17f, -0x1.15f344p-21f, 0x1.7bbd84p-32f, 0x0p+0f}; + return {0x0p+0f, 0x1.666d54p+0f, -0x1.c03746p+1f, 0x1.a43ebap+1f, -0x1.d62736p+0f, 0x1.891e36p-1f, 0x1.a23c1ap-6f, -0x1.d9c16ep-3f, 0x1.b6728ep-4f, -0x1.66849cp-7f, -0x1.fc6302p-9f, 0x1.7e62aep-11f, -0x1.2c21cp-17f, -0x1.15f344p-21f, 0x1.7bbd84p-32f, -0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.b44c4ep+1f, -0x1.c1f7ep+3f, 0x1.1601a8p+4f, 0x1.e5bffcp+3f, -0x1.38f35cp+6f, 0x1.d1869cp+6f, -0x1.70d204p+6f, 0x1.34930ep+5f, -0x1.4b77b4p+2f, -0x1.d27f3cp+0f, 0x1.32a2c6p-1f, -0x1.2fc65p-7f, -0x1.c48022p-11f, 0x1.364c0ap-20f, -0x0p+0f}; + return {0x0p+0f, 0x1.b44c4ep+1f, -0x1.c1f7ep+3f, 0x1.1601a8p+4f, 0x1.e5bffcp+3f, -0x1.38f35cp+6f, 0x1.d1869cp+6f, -0x1.70d204p+6f, 0x1.34930ep+5f, -0x1.4b77b4p+2f, -0x1.d27f3cp+0f, 0x1.32a2c6p-1f, -0x1.2fc65p-7f, -0x1.c48022p-11f, 0x1.364c0ap-20f, 0x0p+0f}; } if constexpr (order == 4) { - return {0x0p+0f, 0x1.afe05cp+1f, -0x1.0a8c44p+4f, 0x1.0f6c04p+5f, -0x1.306ff2p+5f, 0x1.da6956p+4f, -0x1.6a2c2p+4f, 0x1.0e28c8p+4f, -0x1.ee4b3cp+2f, 0x1.050e3ep-1f, 0x1.0ea6cap+0f, -0x1.6566f6p-2f, 0x1.0b828ap-6f, 0x1.3201b6p-10f, -0x1.a6f024p-19f, 0x0p+0f}; + return {0x0p+0f, 0x1.afe05cp+1f, -0x1.0a8c44p+4f, 0x1.0f6c04p+5f, -0x1.306ff2p+5f, 0x1.da6956p+4f, -0x1.6a2c2p+4f, 0x1.0e28c8p+4f, -0x1.ee4b3cp+2f, 0x1.050e3ep-1f, 0x1.0ea6cap+0f, -0x1.6566f6p-2f, 0x1.0b828ap-6f, 0x1.3201b6p-10f, -0x1.a6f024p-19f, -0x0p+0f}; } if constexpr (order == 5) { - return {0x0p+0f, 0x1.77885ep+1f, -0x1.f5abb2p+3f, 0x1.0a779ep+5f, -0x1.164dap+5f, 0x1.233374p+4f, -0x1.af306ap+2f, 0x1.6dba5cp+2f, -0x1.17ffcap+1f, -0x1.9f39e8p+1f, 0x1.d0d0a8p+1f, -0x1.4ac5cap+0f, 0x1.049fbp-3f, 0x1.5ad37ap-7f, -0x1.e6e9a6p-15f, -0x0p+0f}; + return {0x0p+0f, 0x1.77885ep+1f, -0x1.f5abb2p+3f, 0x1.0a779ep+5f, -0x1.164dap+5f, 0x1.233374p+4f, -0x1.af306ap+2f, 0x1.6dba5cp+2f, -0x1.17ffcap+1f, -0x1.9f39e8p+1f, 0x1.d0d0a8p+1f, -0x1.4ac5cap+0f, 0x1.049fbp-3f, 0x1.5ad37ap-7f, -0x1.e6e9a6p-15f, 0x0p+0f}; } if constexpr (order == 6) { - return {0x0p+0f, 0x1.1912b6p+0f, -0x1.85c00cp+2f, 0x1.b7d754p+3f, -0x1.076d5p+4f, 0x1.92a29ep+3f, -0x1.20f516p+3f, 0x1.dcba52p+2f, -0x1.3fe312p+2f, 0x1.5e9b74p+1f, -0x1.a6996ap+0f, 0x1.806826p-1f, -0x1.ddc83ep-4f, -0x1.e09e82p-7f, 0x1.5c5b72p-13f, -0x0p+0f}; + return {0x0p+0f, 0x1.1912b6p+0f, -0x1.85c00cp+2f, 0x1.b7d754p+3f, -0x1.076d5p+4f, 0x1.92a29ep+3f, -0x1.20f516p+3f, 0x1.dcba52p+2f, -0x1.3fe312p+2f, 0x1.5e9b74p+1f, -0x1.a6996ap+0f, 0x1.806826p-1f, -0x1.ddc83ep-4f, -0x1.e09e82p-7f, 0x1.5c5b72p-13f, 0x0p+0f}; } if constexpr (order == 7) { return {0x0p+0f, 0x1.eae802p-3f, -0x1.5a965ap+0f, 0x1.851aep+1f, -0x1.b139cp+1f, 0x1.ffefb8p+0f, -0x1.025406p+0f, 0x1.ff103cp-1f, -0x1.7a4f7p-1f, 0x1.09dce6p-2f, -0x1.c2f7cep-4f, 0x1.41c46cp-4f, -0x1.03531cp-6f, -0x1.c24ed2p-9f, 0x1.5d1ed8p-14f, -0x0p+0f}; @@ -448,22 +541,22 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.184a0c288d22bp-3, 0x1.fbaa047a94a61p-1, -0x1.596f5b6b28cbp-3, 0x1.234875f46000ep-4, -0x1.90a568ef3b94bp-5, 0x1.82b42ea0f8a16p-6, -0x1.96b60b10e5956p-8, 0x1.8430d19335685p-11, -0x1.92df023007909p-14, 0x1.da6faa7679627p-16, 0x1.b237bc2c3b525p-20, 0x1.66eb1a28068aep-25, -0x1.f6ebd7398c4a4p-33, 0x1.5690727034a8ap-45, 0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.03033f41d9947p-1, 0x1.8347da7a3030cp-2, -0x1.7d2f17f2a95afp+0, 0x1.c3013eaebde94p-1, -0x1.4be40ed86f2cdp-2, 0x1.4580356ca34ffp-6, 0x1.7e9e8eefc30b4p-5, -0x1.594cf912461bcp-6, 0x1.27c56651be6eep-9, 0x1.e972a09b0f4ddp-12, -0x1.1649ec5e54141p-14, 0x1.c99c42a59648bp-23, 0x1.81519dee82fp-26, -0x1.06b5ee4f0712p-37, -0x0p+0}; + return {0x0p+0, 0x1.03033f41d9947p-1, 0x1.8347da7a3030cp-2, -0x1.7d2f17f2a95afp+0, 0x1.c3013eaebde94p-1, -0x1.4be40ed86f2cdp-2, 0x1.4580356ca34ffp-6, 0x1.7e9e8eefc30b4p-5, -0x1.594cf912461bcp-6, 0x1.27c56651be6eep-9, 0x1.e972a09b0f4ddp-12, -0x1.1649ec5e54141p-14, 0x1.c99c42a59648bp-23, 0x1.81519dee82fp-26, -0x1.06b5ee4f0712p-37, 0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.666d532df9dfp+0, -0x1.c0374596ee4d9p+1, 0x1.a43eb9f4500c3p+1, -0x1.d627359f84d25p+0, 0x1.891e36789053ap-1, 0x1.a23c19ecf2debp-6, -0x1.d9c16d05d7787p-3, 0x1.b6728d569b4c7p-4, -0x1.66849bebd2ebep-7, -0x1.fc6301aedca9p-9, 0x1.7e62ae52149bdp-11, -0x1.2c21c0130a3ebp-17, -0x1.15f344e8ed1b2p-21, 0x1.7bbd836b1bf85p-32, 0x0p+0}; + return {0x0p+0, 0x1.666d532df9dfp+0, -0x1.c0374596ee4d9p+1, 0x1.a43eb9f4500c3p+1, -0x1.d627359f84d25p+0, 0x1.891e36789053ap-1, 0x1.a23c19ecf2debp-6, -0x1.d9c16d05d7787p-3, 0x1.b6728d569b4c7p-4, -0x1.66849bebd2ebep-7, -0x1.fc6301aedca9p-9, 0x1.7e62ae52149bdp-11, -0x1.2c21c0130a3ebp-17, -0x1.15f344e8ed1b2p-21, 0x1.7bbd836b1bf85p-32, -0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.b44c4e267cbb5p+1, -0x1.c1f7df3ad7ab8p+3, 0x1.1601a8a979c79p+4, 0x1.e5bffb29b3c53p+3, -0x1.38f35bf0e9ee1p+6, 0x1.d1869b3f8e2b4p+6, -0x1.70d2038145a54p+6, 0x1.34930dde67aeap+5, -0x1.4b77b4fb36749p+2, -0x1.d27f3b25c1fd7p+0, 0x1.32a2c5a3dfe81p-1, -0x1.2fc64ff8d3421p-7, -0x1.c48021ad9bc16p-11, 0x1.364c0a7c4c64bp-20, -0x0p+0}; + return {0x0p+0, 0x1.b44c4e267cbb5p+1, -0x1.c1f7df3ad7ab8p+3, 0x1.1601a8a979c79p+4, 0x1.e5bffb29b3c53p+3, -0x1.38f35bf0e9ee1p+6, 0x1.d1869b3f8e2b4p+6, -0x1.70d2038145a54p+6, 0x1.34930dde67aeap+5, -0x1.4b77b4fb36749p+2, -0x1.d27f3b25c1fd7p+0, 0x1.32a2c5a3dfe81p-1, -0x1.2fc64ff8d3421p-7, -0x1.c48021ad9bc16p-11, 0x1.364c0a7c4c64bp-20, 0x0p+0}; } if constexpr (order == 4) { - return {0x0p+0, 0x1.afe05c7a6ada2p+1, -0x1.0a8c44cdd47bfp+4, 0x1.0f6c0325c5e14p+5, -0x1.306ff1c62c833p+5, 0x1.da69559cc9113p+4, -0x1.6a2c1f828fe2ep+4, 0x1.0e28c771588c3p+4, -0x1.ee4b3cc46d89p+2, 0x1.050e3e4d4732ap-1, 0x1.0ea6cad7a5a8p+0, -0x1.6566f5ac7d805p-2, 0x1.0b828ad29e43fp-6, 0x1.3201b5c3bc1c2p-10, -0x1.a6f0242017b15p-19, 0x0p+0}; + return {0x0p+0, 0x1.afe05c7a6ada2p+1, -0x1.0a8c44cdd47bfp+4, 0x1.0f6c0325c5e14p+5, -0x1.306ff1c62c833p+5, 0x1.da69559cc9113p+4, -0x1.6a2c1f828fe2ep+4, 0x1.0e28c771588c3p+4, -0x1.ee4b3cc46d89p+2, 0x1.050e3e4d4732ap-1, 0x1.0ea6cad7a5a8p+0, -0x1.6566f5ac7d805p-2, 0x1.0b828ad29e43fp-6, 0x1.3201b5c3bc1c2p-10, -0x1.a6f0242017b15p-19, -0x0p+0}; } if constexpr (order == 5) { - return {0x0p+0, 0x1.77885e6e270a7p+1, -0x1.f5abb22b1b6ecp+3, 0x1.0a779dee6c7bep+5, -0x1.164d9f148bde5p+5, 0x1.2333738e736f1p+4, -0x1.af306993826a7p+2, 0x1.6dba5c59397a4p+2, -0x1.17ffc928dd1d9p+1, -0x1.9f39e7400cf5dp+1, 0x1.d0d0a8f3b805ep+1, -0x1.4ac5cadf9fb15p+0, 0x1.049faf6ae6899p-3, 0x1.5ad3792bdac36p-7, -0x1.e6e9a51e3663ap-15, -0x0p+0}; + return {0x0p+0, 0x1.77885e6e270a7p+1, -0x1.f5abb22b1b6ecp+3, 0x1.0a779dee6c7bep+5, -0x1.164d9f148bde5p+5, 0x1.2333738e736f1p+4, -0x1.af306993826a7p+2, 0x1.6dba5c59397a4p+2, -0x1.17ffc928dd1d9p+1, -0x1.9f39e7400cf5dp+1, 0x1.d0d0a8f3b805ep+1, -0x1.4ac5cadf9fb15p+0, 0x1.049faf6ae6899p-3, 0x1.5ad3792bdac36p-7, -0x1.e6e9a51e3663ap-15, 0x0p+0}; } if constexpr (order == 6) { - return {0x0p+0, 0x1.1912b6ad90d43p+0, -0x1.85c00c80d7a19p+2, 0x1.b7d753e3c818ap+3, -0x1.076d50e7f7851p+4, 0x1.92a29d7ac0e1ep+3, -0x1.20f516098425cp+3, 0x1.dcba519c323cfp+2, -0x1.3fe31292805cp+2, 0x1.5e9b74431b073p+1, -0x1.a6996ae95f76fp+0, 0x1.806826de1640bp-1, -0x1.ddc83de4acfafp-4, -0x1.e09e81650c6b7p-7, 0x1.5c5b71613d71bp-13, -0x0p+0}; + return {0x0p+0, 0x1.1912b6ad90d43p+0, -0x1.85c00c80d7a19p+2, 0x1.b7d753e3c818ap+3, -0x1.076d50e7f7851p+4, 0x1.92a29d7ac0e1ep+3, -0x1.20f516098425cp+3, 0x1.dcba519c323cfp+2, -0x1.3fe31292805cp+2, 0x1.5e9b74431b073p+1, -0x1.a6996ae95f76fp+0, 0x1.806826de1640bp-1, -0x1.ddc83de4acfafp-4, -0x1.e09e81650c6b7p-7, 0x1.5c5b71613d71bp-13, 0x0p+0}; } if constexpr (order == 7) { return {0x0p+0, 0x1.eae80165a34adp-3, -0x1.5a965a7535366p+0, 0x1.851adfd49d1a7p+1, -0x1.b139c010d5d8fp+1, 0x1.ffefb70380437p+0, -0x1.0254056f57104p+0, 0x1.ff103b26e087ep-1, -0x1.7a4f70cc2f5d8p-1, 0x1.09dce627745a6p-2, -0x1.c2f7ce5c8a37cp-4, 0x1.41c46b919c33fp-4, -0x1.03531c096423ap-6, -0x1.c24ed1e998c51p-9, 0x1.5d1ed72a09587p-14, -0x0p+0}; @@ -474,22 +567,22 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0x8.c250614469156ecp-6L, 0xf.dd5023d4a530983p-4L, -0xa.cb7adb594658341p-6L, 0x9.1a43afa30007147p-7L, -0xc.852b4779dca57d6p-8L, 0xc.15a17507c50b09fp-9L, -0xc.b5b058872cab3ebp-11L, 0xc.21868c99ab4273bp-14L, -0xc.96f811803c8446bp-17L, 0xe.d37d53b3cb1391fp-19L, 0xd.91bde161da92bd9p-23L, 0xb.3758d14034571f5p-28L, -0xf.b75eb9cc6251d52p-36L, 0xa.b4839381a545259p-48L, 0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0x8.1819fa0ecca3abdp-4L, 0xc.1a3ed3d18185c5ap-5L, -0xb.e978bf954ad7b4cp-3L, 0xe.1809f575ef4a37dp-4L, -0xa.5f2076c37966861p-5L, 0xa.2c01ab651a7f8e8p-9L, 0xb.f4f4777e185a2cbp-8L, -0xa.ca67c89230ddcadp-9L, 0x9.3e2b328df376c3ap-12L, 0xf.4b9504d87a6e47fp-15L, -0x8.b24f62f2a0a04dcp-17L, 0xe.4ce2152cb245585p-26L, 0xc.0a8cef7417800e8p-29L, -0x8.35af7278388fe4bp-40L, -0x0p+0L}; + return {0x0p+0L, 0x8.1819fa0ecca3abdp-4L, 0xc.1a3ed3d18185c5ap-5L, -0xb.e978bf954ad7b4cp-3L, 0xe.1809f575ef4a37dp-4L, -0xa.5f2076c37966861p-5L, 0xa.2c01ab651a7f8e8p-9L, 0xb.f4f4777e185a2cbp-8L, -0xa.ca67c89230ddcadp-9L, 0x9.3e2b328df376c3ap-12L, 0xf.4b9504d87a6e47fp-15L, -0x8.b24f62f2a0a04dcp-17L, 0xe.4ce2152cb245585p-26L, 0xc.0a8cef7417800e8p-29L, -0x8.35af7278388fe4bp-40L, 0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0xb.336a996fcef7c52p-3L, -0xe.01ba2cb7726c73bp-2L, 0xd.21f5cfa280614c9p-2L, -0xe.b139acfc2692864p-3L, 0xc.48f1b3c4829d099p-4L, 0xd.11e0cf6796f5a28p-9L, -0xe.ce0b682ebbc393bp-6L, 0xd.b3946ab4da635ap-7L, -0xb.3424df5e975efd8p-10L, -0xf.e3180d76e5481d1p-12L, 0xb.f3157290a4debfp-14L, -0x9.610e009851f575p-20L, -0x8.af9a274768d9303p-24L, 0xb.ddec1b58dfc26aap-35L, 0x0p+0L}; + return {0x0p+0L, 0xb.336a996fcef7c52p-3L, -0xe.01ba2cb7726c73bp-2L, 0xd.21f5cfa280614c9p-2L, -0xe.b139acfc2692864p-3L, 0xc.48f1b3c4829d099p-4L, 0xd.11e0cf6796f5a28p-9L, -0xe.ce0b682ebbc393bp-6L, 0xd.b3946ab4da635ap-7L, -0xb.3424df5e975efd8p-10L, -0xf.e3180d76e5481d1p-12L, 0xb.f3157290a4debfp-14L, -0x9.610e009851f575p-20L, -0x8.af9a274768d9303p-24L, 0xb.ddec1b58dfc26aap-35L, -0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0xd.a2627133e5da6a2p-2L, -0xe.0fbef9d6bd5bcc5p+0L, 0x8.b00d454bce3c7c1p+1L, 0xf.2dffd94d9e295dcp+0L, -0x9.c79adf874f70573p+3L, 0xe.8c34d9fc715a214p+3L, -0xb.86901c0a2d2a313p+3L, 0x9.a4986ef33d75017p+2L, -0xa.5bbda7d9b3a4ab2p-1L, -0xe.93f9d92e0feb674p-3L, 0x9.95162d1eff408cfp-4L, -0x9.7e327fc69a10719p-10L, -0xe.24010d6cde0b23p-14L, 0x9.b26053e2632577ap-23L, -0x0p+0L}; + return {0x0p+0L, 0xd.a2627133e5da6a2p-2L, -0xe.0fbef9d6bd5bcc5p+0L, 0x8.b00d454bce3c7c1p+1L, 0xf.2dffd94d9e295dcp+0L, -0x9.c79adf874f70573p+3L, 0xe.8c34d9fc715a214p+3L, -0xb.86901c0a2d2a313p+3L, 0x9.a4986ef33d75017p+2L, -0xa.5bbda7d9b3a4ab2p-1L, -0xe.93f9d92e0feb674p-3L, 0x9.95162d1eff408cfp-4L, -0x9.7e327fc69a10719p-10L, -0xe.24010d6cde0b23p-14L, 0x9.b26053e2632577ap-23L, 0x0p+0L}; } if constexpr (order == 4) { - return {0x0p+0L, 0xd.7f02e3d356d0e5bp-2L, -0x8.5462266ea3dfa72p+1L, 0x8.7b60192e2f0a0a5p+2L, -0x9.837f8e316419b55p+2L, 0xe.d34aace64889869p+1L, -0xb.5160fc147f16c08p+1L, 0x8.71463b8ac46182cp+1L, -0xf.7259e6236c483c5p-1L, 0x8.2871f26a39950e3p-4L, 0x8.753656bd2d3fd71p-3L, -0xb.2b37ad63ec0243dp-5L, 0x8.5c145694f21f58cp-9L, 0x9.900dae1de0e10ep-13L, -0xd.37812100bd8a443p-22L, 0x0p+0L}; + return {0x0p+0L, 0xd.7f02e3d356d0e5bp-2L, -0x8.5462266ea3dfa72p+1L, 0x8.7b60192e2f0a0a5p+2L, -0x9.837f8e316419b55p+2L, 0xe.d34aace64889869p+1L, -0xb.5160fc147f16c08p+1L, 0x8.71463b8ac46182cp+1L, -0xf.7259e6236c483c5p-1L, 0x8.2871f26a39950e3p-4L, 0x8.753656bd2d3fd71p-3L, -0xb.2b37ad63ec0243dp-5L, 0x8.5c145694f21f58cp-9L, 0x9.900dae1de0e10ep-13L, -0xd.37812100bd8a443p-22L, -0x0p+0L}; } if constexpr (order == 5) { - return {0x0p+0L, 0xb.bc42f3713853a26p-2L, -0xf.ad5d9158db75d9ap+0L, 0x8.53bcef7363deeep+2L, -0x8.b26cf8a45ef2551p+2L, 0x9.199b9c739b78925p+1L, -0xd.79834c9c135345p-1L, 0xb.6dd2e2c9cbd2213p-1L, -0x8.bffe4946e8ec5f8p-2L, -0xc.f9cf3a0067ae91ap-2L, 0xe.8685479dc02ed7ep-2L, -0xa.562e56fcfd8a5e2p-3L, 0x8.24fd7b57344ca47p-6L, 0xa.d69bc95ed61ae29p-10L, -0xf.374d28f1b31ceb4p-18L, -0x0p+0L}; + return {0x0p+0L, 0xb.bc42f3713853a26p-2L, -0xf.ad5d9158db75d9ap+0L, 0x8.53bcef7363deeep+2L, -0x8.b26cf8a45ef2551p+2L, 0x9.199b9c739b78925p+1L, -0xd.79834c9c135345p-1L, 0xb.6dd2e2c9cbd2213p-1L, -0x8.bffe4946e8ec5f8p-2L, -0xc.f9cf3a0067ae91ap-2L, 0xe.8685479dc02ed7ep-2L, -0xa.562e56fcfd8a5e2p-3L, 0x8.24fd7b57344ca47p-6L, 0xa.d69bc95ed61ae29p-10L, -0xf.374d28f1b31ceb4p-18L, 0x0p+0L}; } if constexpr (order == 6) { - return {0x0p+0L, 0x8.c895b56c86a1b02p-3L, -0xc.2e006406bd0c7e6p-1L, 0xd.beba9f1e40c4cbdp+0L, -0x8.3b6a873fbc285cap+1L, 0xc.9514ebd6070fp+0L, -0x9.07a8b04c212dd91p+0L, 0xe.e5d28ce191e76fcp-1L, -0x9.ff18949402e0231p-1L, 0xa.f4dba218d8396ddp-2L, -0xd.34cb574afbb77c5p-3L, 0xc.034136f0b2057f9p-4L, -0xe.ee41ef2567d7906p-7L, -0xf.04f40b28635ba7ep-10L, 0xa.e2db8b09eb8dbb5p-16L, -0x0p+0L}; + return {0x0p+0L, 0x8.c895b56c86a1b02p-3L, -0xc.2e006406bd0c7e6p-1L, 0xd.beba9f1e40c4cbdp+0L, -0x8.3b6a873fbc285cap+1L, 0xc.9514ebd6070fp+0L, -0x9.07a8b04c212dd91p+0L, 0xe.e5d28ce191e76fcp-1L, -0x9.ff18949402e0231p-1L, 0xa.f4dba218d8396ddp-2L, -0xd.34cb574afbb77c5p-3L, 0xc.034136f0b2057f9p-4L, -0xe.ee41ef2567d7906p-7L, -0xf.04f40b28635ba7ep-10L, 0xa.e2db8b09eb8dbb5p-16L, 0x0p+0L}; } if constexpr (order == 7) { return {0x0p+0L, 0xf.57400b2d1a568f9p-6L, -0xa.d4b2d3a9a9b32a1p-3L, 0xc.28d6fea4e8d3b6dp-2L, -0xd.89ce0086aec77acp-2L, 0xf.ff7db81c021b9bdp-3L, -0x8.12a02b7ab881d9bp-3L, 0xf.f881d937043f115p-4L, -0xb.d27b86617aebd37p-4L, 0x8.4ee7313ba2d30a8p-5L, -0xe.17be72e451bdc7ep-7L, 0xa.0e235c8ce19f70ep-7L, -0x8.1a98e04b211d3d4p-9L, -0xe.12768f4cc6289abp-12L, 0xa.e8f6b9504ac38b3p-17L, -0x0p+0L}; @@ -498,31 +591,57 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.184a0c288d22add7ea26104df2f3p-3Q, 0x1.fbaa047a94a613069e6f550b4e0cp-1Q, -0x1.596f5b6b28cb0681bf78a3e54b76p-3Q, 0x1.234875f46000e28dce7c3f34208fp-4Q, -0x1.90a568ef3b94afacf755834bab9dp-5Q, 0x1.82b42ea0f8a1613dc5ff9725c04ep-6Q, -0x1.96b60b10e59567d6b2c6577bad37p-8Q, 0x1.8430d19335684e7577fd3b69976cp-11Q, -0x1.92df0230079088d5ad0746147157p-14Q, 0x1.da6faa767962723e71f08f2e9079p-16Q, 0x1.b237bc2c3b5257b1d937078b73a9p-20Q, 0x1.66eb1a28068ae3ea1bd5d268325dp-25Q, -0x1.f6ebd7398c4a3aa441e024a57151p-33Q, 0x1.5690727034a8a4b1353895ae261dp-45Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.184a0c288d22add7ea26104df2f3p-3Q, 0x1.fbaa047a94a613069e6f550b4e09p-1Q, -0x1.596f5b6b28cb0681bf78a3e54b72p-3Q, 0x1.234875f46000e28dce7c3f342092p-4Q, -0x1.90a568ef3b94afacf755834bab9ap-5Q, 0x1.82b42ea0f8a1613dc5ff9725c05p-6Q, -0x1.96b60b10e59567d6b2c6577bad3bp-8Q, 0x1.8430d19335684e7577fd3b699763p-11Q, -0x1.92df0230079088d5ad0746147153p-14Q, 0x1.da6faa767962723e71f08f2e9083p-16Q, 0x1.b237bc2c3b5257b1d937078b7396p-20Q, 0x1.66eb1a28068ae3ea1bd5d2683257p-25Q, -0x1.f6ebd7398c4a3aa441e024a5714bp-33Q, 0x1.5690727034a8a4b1353895ae261dp-45Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.03033f41d994757a2b4934423535p-1Q, 0x1.8347da7a3030b8b37cdc36ec3be2p-2Q, -0x1.7d2f17f2a95af6988be8eca125cap+0Q, 0x1.c3013eaebde946f9eaa42bce8cdbp-1Q, -0x1.4be40ed86f2cd0c168ad24949287p-2Q, 0x1.4580356ca34ff1cf3c18408b1ce2p-6Q, 0x1.7e9e8eefc30b45959dcb8ab52398p-5Q, -0x1.594cf912461bb959724fb77ad3c3p-6Q, 0x1.27c56651be6ed873712071c19326p-9Q, 0x1.e972a09b0f4dc8fdb93114f9ed2dp-12Q, -0x1.1649ec5e541409b8483ac00aa993p-14Q, 0x1.c99c42a59648ab096d412a5873a5p-23Q, 0x1.81519dee82f001d0cfd286a4bf35p-26Q, -0x1.06b5ee4f0711fc96e3337209d4fap-37Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.03033f41d994757a2b4934423538p-1Q, 0x1.8347da7a3030b8b37cdc36ec3c9cp-2Q, -0x1.7d2f17f2a95af6988be8eca125f4p+0Q, 0x1.c3013eaebde946f9eaa42bce8cf9p-1Q, -0x1.4be40ed86f2cd0c168ad249492a4p-2Q, 0x1.4580356ca34ff1cf3c18408b1d74p-6Q, 0x1.7e9e8eefc30b45959dcb8ab52383p-5Q, -0x1.594cf912461bb959724fb77ad3bbp-6Q, 0x1.27c56651be6ed873712071c19324p-9Q, 0x1.e972a09b0f4dc8fdb93114f9ed4p-12Q, -0x1.1649ec5e541409b8483ac00aa989p-14Q, 0x1.c99c42a59648ab096d412a58741fp-23Q, 0x1.81519dee82f001d0cfd286a4bf1ep-26Q, -0x1.06b5ee4f0711fc96e3337209d4e2p-37Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.666d532df9def8a39e69d4c9dafcp+0Q, -0x1.c0374596ee4d8e750b0b0f065a7p+1Q, 0x1.a43eb9f4500c29913bdae70f2e18p+1Q, -0x1.d627359f84d250c8825852fe214cp+0Q, 0x1.891e36789053a132cb4397963b98p-1Q, 0x1.a23c19ecf2deb44f4177f3e94959p-6Q, -0x1.d9c16d05d77872764189280b3b87p-3Q, 0x1.b6728d569b4c6b3f03c9c20fd92ap-4Q, -0x1.66849bebd2ebdfafabb131376074p-7Q, -0x1.fc6301aedca903a123de4bcecb7dp-9Q, 0x1.7e62ae52149bd7e06a18746f5d38p-11Q, -0x1.2c21c0130a3eaea0bd3721b2b938p-17Q, -0x1.15f344e8ed1b26069acbf2a1a5a3p-21Q, 0x1.7bbd836b1bf84d53feb61580de7bp-32Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.666d532df9def8a39e69d4c9dbd1p+0Q, -0x1.c0374596ee4d8e750b0b0f065b11p+1Q, 0x1.a43eb9f4500c29913bdae70f2e12p+1Q, -0x1.d627359f84d250c8825852fe20e7p+0Q, 0x1.891e36789053a132cb4397963bd6p-1Q, 0x1.a23c19ecf2deb44f4177f3e9336bp-6Q, -0x1.d9c16d05d77872764189280b3978p-3Q, 0x1.b6728d569b4c6b3f03c9c20fd79fp-4Q, -0x1.66849bebd2ebdfafabb131375ec9p-7Q, -0x1.fc6301aedca903a123de4bceca69p-9Q, 0x1.7e62ae52149bd7e06a18746f5b91p-11Q, -0x1.2c21c0130a3eaea0bd3721b2b8d6p-17Q, -0x1.15f344e8ed1b26069acbf2a1a453p-21Q, 0x1.7bbd836b1bf84d53feb61580dc74p-32Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.b44c4e267cbb4d43745305f7f1d1p+1Q, -0x1.c1f7df3ad7ab79897dce80d6fdc1p+3Q, 0x1.1601a8a979c78f82e398ce85d132p+4Q, 0x1.e5bffb29b3c52bb885497a61677fp+3Q, -0x1.38f35bf0e9ee0ae5b17729526ffp+6Q, 0x1.d1869b3f8e2b44288688d26f2b6fp+6Q, -0x1.70d2038145a54625eb25d8766c13p+6Q, 0x1.34930dde67aea02e0a703b771d79p+5Q, -0x1.4b77b4fb3674956338abd182d2e5p+2Q, -0x1.d27f3b25c1fd6ce83b2a8b0b03e8p+0Q, 0x1.32a2c5a3dfe8119d379b7145ac19p-1Q, -0x1.2fc64ff8d3420e31f2a6dd484c8ap-7Q, -0x1.c48021ad9bc1646021c012f661fp-11Q, 0x1.364c0a7c4c64aef45189b313663dp-20Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.b44c4e267cbb4d43745305f720c9p+1Q, -0x1.c1f7df3ad7ab79897dce80d62718p+3Q, 0x1.1601a8a979c78f82e398ce8545b9p+4Q, 0x1.e5bffb29b3c52bb885497a60d3d6p+3Q, -0x1.38f35bf0e9ee0ae5b1772951f4d5p+6Q, 0x1.d1869b3f8e2b44288688d26e70d1p+6Q, -0x1.70d2038145a54625eb25d875d7e5p+6Q, 0x1.34930dde67aea02e0a703b76a197p+5Q, -0x1.4b77b4fb3674956338abd1824db4p+2Q, -0x1.d27f3b25c1fd6ce83b2a8b0a4ac9p+0Q, 0x1.32a2c5a3dfe8119d379b71453288p-1Q, -0x1.2fc64ff8d3420e31f2a6dd47d615p-7Q, -0x1.c48021ad9bc1646021c012f5b071p-11Q, 0x1.364c0a7c4c64aef45189b312edb4p-20Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.afe05c7a6ada1cb6172616d2f2ffp+1Q, -0x1.0a8c44cdd47bf4e495a5398430e1p+4Q, 0x1.0f6c0325c5e1414a9285f59e7d75p+5Q, -0x1.306ff1c62c8336aad5c3f9888cf8p+5Q, 0x1.da69559cc91130d28dd4b6368cc9p+4Q, -0x1.6a2c1f828fe2d81030f1ad526958p+4Q, 0x1.0e28c771588c30581ce7071755d2p+4Q, -0x1.ee4b3cc46d890789fa8b15b80159p+2Q, 0x1.050e3e4d4732a1c55c0c971f29e5p-1Q, 0x1.0ea6cad7a5a7fae2eab7d74b48fbp+0Q, -0x1.6566f5ac7d80487971d04a5977aep-2Q, 0x1.0b828ad29e43eb178f6b65b924cep-6Q, 0x1.3201b5c3bc1c21bf7086981d037bp-10Q, -0x1.a6f0242017b1488503cf0ef0a318p-19Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.afe05c7a6ada1cb6172616d2c6a8p+1Q, -0x1.0a8c44cdd47bf4e495a5398413fbp+4Q, 0x1.0f6c0325c5e1414a9285f59e5f14p+5Q, -0x1.306ff1c62c8336aad5c3f9886bcep+5Q, 0x1.da69559cc91130d28dd4b63660e6p+4Q, -0x1.6a2c1f828fe2d81030f1ad524eb7p+4Q, 0x1.0e28c771588c30581ce7071741b8p+4Q, -0x1.ee4b3cc46d890789fa8b15b7da8p+2Q, 0x1.050e3e4d4732a1c55c0c971f3557p-1Q, 0x1.0ea6cad7a5a7fae2eab7d74b22a1p+0Q, -0x1.6566f5ac7d80487971d04a5944efp-2Q, 0x1.0b828ad29e43eb178f6b65b8f31p-6Q, 0x1.3201b5c3bc1c21bf7086981ccb12p-10Q, -0x1.a6f0242017b1488503cf0ef046e5p-19Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.77885e6e270a744c868654d77bep+1Q, -0x1.f5abb22b1b6ebb333fd9f11e28cbp+3Q, 0x1.0a779dee6c7bddbff2f0d8b96185p+5Q, -0x1.164d9f148bde4aa13b66fabb8275p+5Q, 0x1.2333738e736f124a0ec3de55d4acp+4Q, -0x1.af306993826a689f7543995743eap+2Q, 0x1.6dba5c59397a4426e98586a9dbfbp+2Q, -0x1.17ffc928dd1d8bf0f209d0c25564p+1Q, -0x1.9f39e7400cf5d234f22720c7e994p+1Q, 0x1.d0d0a8f3b805dafc2d2b539dd42dp+1Q, -0x1.4ac5cadf9fb14bc48382ff0eff77p+0Q, 0x1.049faf6ae689948e66d5e513815cp-3Q, 0x1.5ad3792bdac35c5163486d90e7a1p-7Q, -0x1.e6e9a51e36639d68c6db7d754f12p-15Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.77885e6e270a744c868654d7cbb5p+1Q, -0x1.f5abb22b1b6ebb333fd9f11e8f7cp+3Q, 0x1.0a779dee6c7bddbff2f0d8b9981bp+5Q, -0x1.164d9f148bde4aa13b66fabbc2fp+5Q, 0x1.2333738e736f124a0ec3de563f7bp+4Q, -0x1.af306993826a689f7543995893acp+2Q, 0x1.6dba5c59397a4426e98586aad789p+2Q, -0x1.17ffc928dd1d8bf0f209d0c36abep+1Q, -0x1.9f39e7400cf5d234f22720c7748ap+1Q, 0x1.d0d0a8f3b805dafc2d2b539d9bb4p+1Q, -0x1.4ac5cadf9fb14bc48382ff0ecfb1p+0Q, 0x1.049faf6ae689948e66d5e5134564p-3Q, 0x1.5ad3792bdac35c5163486d9087edp-7Q, -0x1.e6e9a51e36639d68c6db7d7495a4p-15Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.1912b6ad90d43603284e2902f0abp+0Q, -0x1.85c00c80d7a18fcc693e4762b85p+2Q, 0x1.b7d753e3c818997a04ded98db7dep+3Q, -0x1.076d50e7f7850b94ae780b4ac761p+4Q, 0x1.92a29d7ac0e1e0002558af84767fp+3Q, -0x1.20f516098425bb22664ce4abb09dp+3Q, 0x1.dcba519c323cedf78dcb77920137p+2Q, -0x1.3fe31292805c0462ca96ae1f196p+2Q, 0x1.5e9b74431b072dba61e526bdae0cp+1Q, -0x1.a6996ae95f76ef890f12b5a360bp+0Q, 0x1.806826de1640aff2fbfd8d0aa94cp-1Q, -0x1.ddc83de4acfaf20be5fee510530ep-4Q, -0x1.e09e81650c6b74fbce41e534d5fbp-7Q, 0x1.5c5b71613d71b7692e7e5f0a2ebfp-13Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.1912b6ad90d43603284e290418eep+0Q, -0x1.85c00c80d7a18fcc693e47644de7p+2Q, 0x1.b7d753e3c818997a04ded98f86e3p+3Q, -0x1.076d50e7f7850b94ae780b4bf285p+4Q, 0x1.92a29d7ac0e1e0002558af869ed1p+3Q, -0x1.20f516098425bb22664ce4ad84a9p+3Q, 0x1.dcba519c323cedf78dcb7794def8p+2Q, -0x1.3fe31292805c0462ca96ae20fe5p+2Q, 0x1.5e9b74431b072dba61e526c0393fp+1Q, -0x1.a6996ae95f76ef890f12b5a6c626p+0Q, 0x1.806826de1640aff2fbfd8d0d7d09p-1Q, -0x1.ddc83de4acfaf20be5fee513819ep-4Q, -0x1.e09e81650c6b74fbce41e5378d99p-7Q, 0x1.5c5b71613d71b7692e7e5f0ba23p-13Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.eae80165a34ad1f2080107f87ddap-3Q, -0x1.5a965a7535366541f0a1afe5a2b4p+0Q, 0x1.851adfd49d1a76d9d23c3531fc86p+1Q, -0x1.b139c010d5d8ef58fb69c4f1a06p+1Q, 0x1.ffefb7038043737a18fc832ffa5dp+0Q, -0x1.0254056f57103b364cf4bcb0546p+0Q, 0x1.ff103b26e087e22aa6dbe24a6942p-1Q, -0x1.7a4f70cc2f5d7a6d2a4e62af8416p-1Q, 0x1.09dce627745a61500e94719899a9p-2Q, -0x1.c2f7ce5c8a37b8fcabdaf25e5004p-4Q, 0x1.41c46b919c33ee1c6941aae7a0ebp-4Q, -0x1.03531c096423a7a88f95e3dc75eap-6Q, -0x1.c24ed1e998c51356546e2438785p-9Q, 0x1.5d1ed72a09587166cbb2e53232dap-14Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.eae80165a34ad1f2080107f7b7a5p-3Q, -0x1.5a965a7535366541f0a1afe5172fp+0Q, 0x1.851adfd49d1a76d9d23c35315fc3p+1Q, -0x1.b139c010d5d8ef58fb69c4f0efd8p+1Q, 0x1.ffefb7038043737a18fc832f1fb7p+0Q, -0x1.0254056f57103b364cf4bcafdd14p+0Q, 0x1.ff103b26e087e22aa6dbe2498954p-1Q, -0x1.7a4f70cc2f5d7a6d2a4e62aee34dp-1Q, 0x1.09dce627745a61500e9471981ea7p-2Q, -0x1.c2f7ce5c8a37b8fcabdaf25d6d6bp-4Q, 0x1.41c46b919c33ee1c6941aae7132bp-4Q, -0x1.03531c096423a7a88f95e3dc08eep-6Q, -0x1.c24ed1e998c51356546e2437d6p-9Q, 0x1.5d1ed72a09587166cbb2e531d26cp-14Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.136859984385993751077424284238513346105771881700946032539857608801714375260"), boost::lexical_cast("0.991531505549868928852223941202783180250573415879960614939273149473543513232"), boost::lexical_cast("-0.168669428069824001344876924759083221703325404050382978741893461845460708901"), boost::lexical_cast("0.0711140258408706504803069010910216723551333508784818550165049090931508664852"), boost::lexical_cast("-0.0489069985868462937786964568361717206243738587558741902200175649925966650129"), boost::lexical_cast("0.0236025290831865730472503982004363583525603770422866170365985291322094732559"), boost::lexical_cast("-0.00620591898122876136661677884645407645696587502826527734998815703979020082209"), boost::lexical_cast("0.000740414996836150617193096345381128615000342497991762689010201911138137676340"), boost::lexical_cast("-0.0000960519616914659362067678923772724229000913224382096876651732324410060847142"), boost::lexical_cast("0.0000282786008599848003825512309131168222310934819976005479856002545492804079821"), boost::lexical_cast("0.00000161758704125419265856051792339632788510763962613299088995170275735382724250"), boost::lexical_cast("0.0000000417835973045118991124105253366830871810097251894035223474643902978862222950"), boost::lexical_cast("-0.000000000228702107424295259422097052204574273567576074367490930756782831109751583002"), boost::lexical_cast("0.0000000000000380322713533425186858078998967525935209252034129900336181242610764710254761"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.505884148395843984672030852174399268078679938448445514258859914326001574753"), boost::lexical_cast("0.378203786571291475028258491549280264525735502487840319727030236183752240877"), boost::lexical_cast("-1.48899984049181086925690641126028244033585659708567195002624452117766769554"), boost::lexical_cast("0.880868872481146917953730102204425044160476030745496386305050091936160661825"), boost::lexical_cast("-0.324112159690952253266958291790923377370339558783455268279088511692627257578"), boost::lexical_cast("0.0198669931146939729198708935598776106105509170321806377166373111519790413827"), boost::lexical_cast("0.0467064658861046390974330766795109450179003887204378435053237799594305015134"), boost::lexical_cast("-0.0210754806840627153541931469194838393690032791036447674196194339971613456374"), boost::lexical_cast("0.00225655435576476469044726339752369362143954369726725569747472926858253332600"), boost::lexical_cast("0.000466773760937245507236716054902477793363154761728440462716816755417726884839"), boost::lexical_cast("-0.0000663492114416674035500361661641750124659642249106990423787115653008871078300"), boost::lexical_cast("0.000000213091444200759381405507720298082584145763408653037309536239955733283926150"), boost::lexical_cast("0.0000000224285069909106554636357422248869419407906728286220715022858657729340987674"), boost::lexical_cast("-0.00000000000746668625743637862652799469000616324979519456514273967438860456366173662892"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.40010566589796415558533052990817027536043759916356873335248645843912898740"), boost::lexical_cast("-3.50168676252051764999916760393084370145312284526707841278933240785874906921"), boost::lexical_cast("3.28316425732927656875646999404076171324929322898132788895606205661772082296"), boost::lexical_cast("-1.83653578896048342826761860954879682887285337195163994610183024428204639287"), boost::lexical_cast("0.767808630196817229463066449452964216764497348541592935264231141751164293885"), boost::lexical_cast("0.0255270245723248470256698009778319785355159721020640100259648381281108673206"), boost::lexical_cast("-0.231325961819433188856073677854062275419611129702243186823190488135500579221"), boost::lexical_cast("0.107042839148294803604040015338906449890317311518114018506422501396601728023"), boost::lexical_cast("-0.0109411012014314322153349861016506274246639791285954533561420989314806280893"), boost::lexical_cast("-0.00387868304772471399323142237494169480427070296801463441213707814207225784013"), boost::lexical_cast("0.000729342408030845829165840735507514556696710333640548011394236862236236627590"), boost::lexical_cast("-0.00000894462576724212069044572229637929785464056704288394767005400917958125948440"), boost::lexical_cast("-0.000000517722722573465466291304746138565114462435290270180299612937282299347886509"), boost::lexical_cast("0.000000000345371778653840406383195497480732961379596653494040751101347866321743412771"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.40857865218409942407989160777729397499591054071894723659795747026734950142"), boost::lexical_cast("-14.06150781147640244495854524439441851419403709392481084157811217258651128990"), boost::lexical_cast("17.37540498925634213895582494025326018301205036554108994541098300558519647810"), boost::lexical_cast("15.17968519349066044652294389136578861409554749815814367110760723871662294450"), boost::lexical_cast("-78.23765541484636800472354977154947501042898222086099559309649353911488323440"), boost::lexical_cast("116.38145160012465254189247417655014226350307393144895240522480865461502034100"), boost::lexical_cast("-92.20509149539549844487080427780966241435914366770315955416451996663294302680"), boost::lexical_cast("38.57180379632866626053856571576184925471707552931311103550752525165681257540"), boost::lexical_cast("-5.17918133289806211714176217075064499841836717085374825348683628481547935326"), boost::lexical_cast("-1.82225389167614588863332031779801692711824638887982150713863406444245730454"), boost::lexical_cast("0.598898102049091230023937146931083606151277363169821330990542437169742650605"), boost::lexical_cast("-0.00927046685105820265775499853351620625448959411497441318196481292209014223253"), boost::lexical_cast("-0.000863076236511053557380361955795006038651362072706195875505623255065432401013"), boost::lexical_cast("0.00000115594653411452947966415211118033698227006015073368264240575869273988254730"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.37403446175967838025740792692632707948046376845678760985954780113353683376"), boost::lexical_cast("-16.65924530413007895577513111721655133926983876119072500556865649764333729280"), boost::lexical_cast("33.92774037847644365730660167931354863708439882380578545057682183184098002560"), boost::lexical_cast("-38.05466036628095179642463777855898685849735591879960715894900954660986556330"), boost::lexical_cast("29.65071641201309323109850787750541018979228147381363769083014882995571890840"), boost::lexical_cast("-22.63577223778536585979611105411422747200617599445293663779795581166422612690"), boost::lexical_cast("16.88495582843530592324987980427308263482658385028179904289230174596074103340"), boost::lexical_cast("-7.72334212477120771395018502358287787646097333914773539504366245154006903261"), boost::lexical_cast("0.509874293263782320049624992542430344831541029125914053863318565845626947501"), boost::lexical_cast("1.05723254933187142521325305757260448706303752772475115221502588084489406121"), boost::lexical_cast("-0.349025572445839567506362486618125787775522478731013526918275825979025450341"), boost::lexical_cast("0.0163275104227731348198876869545919769123313328974523116723206927638520899008"), boost::lexical_cast("0.00116732284453401104147360959063823502788555856702680595647112386117318401134"), boost::lexical_cast("-0.00000315113403818958420917458786425100865687235113639358839633877000023951513838"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.93384914759197424624436413594969058529365344664724959523125492071614427193"), boost::lexical_cast("-15.67720898074499960019790246277632013145587519414207657764003345532838952320"), boost::lexical_cast("33.30840669888082927743188422912680268770468382312738501151598773669709347950"), boost::lexical_cast("-34.78790107776493317973127999160157672445840757713194594151710343461996258490"), boost::lexical_cast("18.20006137509239303213521792722566030277335694542561819775614995273543845150"), boost::lexical_cast("-6.73732985882967353579625955002147560794702457823837345027768515384207199939"), boost::lexical_cast("5.71449955666858878400309088707607704396756738056282405829209011954772445391"), boost::lexical_cast("-2.18749346251773279906619495975374371998852897264751318856692473518486342256"), boost::lexical_cast("-3.24395456912490815512051132069746602372138882030028342425172470032100812037"), boost::lexical_cast("3.63136779690107300247637411793680556583470203778956077148746730514900636140"), boost::lexical_cast("-1.29208057365003020310933608766753056310407043934855358170062066567610977189"), boost::lexical_cast("0.127257700395436748185441509800570330756269721379701882712722971090011220542"), boost::lexical_cast("0.0105842916161319289430031608631456823275553548600640429274763034124609001209"), boost::lexical_cast("-0.0000580445141495463978915954606394279824931279836573959690571643754738437622999"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.09794179665989663514011010318171289068252802140768727878686619226775014160"), boost::lexical_cast("-6.08984673101670014308433503745446328651407196395191858667048642230680054117"), boost::lexical_cast("13.74503511894797041799485471293715399778854034159024012586185790377350928050"), boost::lexical_cast("-16.46418848621425725226856339943522600141255984607131407751367512429535974550"), boost::lexical_cast("12.58235048270494971240583540160205978818573268955250712351866824920394664630"), boost::lexical_cast("-9.02991773470528559623876404322857159498730180401367525828524406240302233897"), boost::lexical_cast("7.44887199643649366803718019597024027263652518924024613405692486678267833539"), boost::lexical_cast("-4.99823440844323865139296784342762981029643191844299226701928041463556839082"), boost::lexical_cast("2.73911908413543286133929491391344713268901997126890391713796517771077981005"), boost::lexical_cast("-1.65077846715527320386166297579946870069085350586686894303798561070712527613"), boost::lexical_cast("0.750794615373821527451164487493324083501669271576479206468805894209869122774"), boost::lexical_cast("-0.116646043558658917381544271189706037325524764351951616559858241342309095929"), boost::lexical_cast("-0.0146673328218612635522669061509315192382547144459217750205470993012158491409"), boost::lexical_cast("0.000166109656710205411664661588058784980983032508578738275988691042867685712989"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.239700327791444154401358637312026610528216518839726598253382285687854145301"), boost::lexical_cast("-1.35385671006698656362279837678985930962433090919777408910621735397808426685"), boost::lexical_cast("3.03988263970878210970161760103694626417746895886680293765920336110790081944"), boost::lexical_cast("-3.38457489797628550541836623944752232253491103859138520958725493309901917502"), boost::lexical_cast("1.99975150905107828365392055663475104753346795604213386830360205861062068058"), boost::lexical_cast("-1.00909456222785902673888196781880614953849677554209360029881025329921208452"), boost::lexical_cast("0.998170708175407887564948885340732566778229747407421235714432832971547496176"), boost::lexical_cast("-0.738887333798341000751416724474791664378133946712220233024499707378818126349"), boost::lexical_cast("0.259631725462066480616682675264655170327179020240911896080856531165333156446"), boost::lexical_cast("-0.110099607562586792620753110120489954588564472503733678183395115619093852339"), boost::lexical_cast("0.0785564615159843726834898160756405679414386387007067812431829633899248651308"), boost::lexical_cast("-0.0158279203220123929016663292094093420473159442069900632195102000109139919945"), boost::lexical_cast("-0.00343557655723850854612182385732716766125518666298517555524787852985964150285"), boost::lexical_cast("0.0000832368065465019779864000534536830870074333194787317202754089818199746452757"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 9) { if constexpr (std::is_same_v) { @@ -536,13 +655,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.e4c00ep-1f, -0x1.aad7p+0f, 0x1.135c58p-2f, 0x1.5b4146p-1f, -0x1.c92ba8p-4f, -0x1.4f00eap-2f, 0x1.61aa48p-2f, -0x1.66761ap-3f, 0x1.723502p-5f, -0x1.85c5f4p-10f, -0x1.2bb318p-9f, 0x1.b3d73ep-12f, 0x1.bca3f2p-17f, -0x1.261d8ap-20f, 0x1.36693ap-28f, 0x1.1a9906p-40f, -0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.27d6ep+1f, -0x1.2ded7ap+3f, 0x1.e79fd8p+3f, -0x1.304a1ap+3f, -0x1.effd26p+2f, 0x1.7ce73p+4f, -0x1.985f02p+4f, 0x1.d3cfacp+3f, -0x1.e1a25p+1f, -0x1.9b8564p-2f, 0x1.fe4766p-2f, -0x1.73f12ep-4f, -0x1.20ddep-10f, 0x1.ffd29p-12f, -0x1.fa8378p-20f, -0x1.cc794ap-31f, 0x0p+0f}; + return {0x0p+0f, 0x1.27d6ep+1f, -0x1.2ded7ap+3f, 0x1.e79fd8p+3f, -0x1.304a1ap+3f, -0x1.effd26p+2f, 0x1.7ce73p+4f, -0x1.985f02p+4f, 0x1.d3cfacp+3f, -0x1.e1a25p+1f, -0x1.9b8564p-2f, 0x1.fe4766p-2f, -0x1.73f12ep-4f, -0x1.20ddep-10f, 0x1.ffd29p-12f, -0x1.fa8378p-20f, -0x1.cc794ap-31f, -0x0p+0f}; } if constexpr (order == 4) { - return {0x0p+0f, 0x1.c7cedp+1f, -0x1.2ab8cap+4f, 0x1.4df684p+5f, -0x1.af3bfap+5f, 0x1.8eeb18p+5f, -0x1.541e9cp+5f, 0x1.12ea48p+5f, -0x1.35c8bp+4f, 0x1.d829e2p+1f, 0x1.69d6eap+1f, -0x1.023562p+1f, 0x1.b42324p-2f, -0x1.2e2904p-8f, -0x1.22b4e2p-8f, 0x1.654cep-16f, 0x1.43e712p-26f, -0x0p+0f}; + return {0x0p+0f, 0x1.c7cedp+1f, -0x1.2ab8cap+4f, 0x1.4df684p+5f, -0x1.af3bfap+5f, 0x1.8eeb18p+5f, -0x1.541e9cp+5f, 0x1.12ea48p+5f, -0x1.35c8bp+4f, 0x1.d829e2p+1f, 0x1.69d6eap+1f, -0x1.023562p+1f, 0x1.b42324p-2f, -0x1.2e2904p-8f, -0x1.22b4e2p-8f, 0x1.654cep-16f, 0x1.43e712p-26f, 0x0p+0f}; } if constexpr (order == 5) { - return {0x0p+0f, 0x1.1617a4p+2f, -0x1.94d9c6p+4f, 0x1.dd0eb6p+5f, -0x1.168c04p+6f, 0x1.24c19cp+5f, -0x1.016a68p+0f, -0x1.c94ed2p+2f, 0x1.669c08p+3f, -0x1.88dca4p+4f, 0x1.b958d8p+4f, -0x1.eccebap+3f, 0x1.f4375ep+1f, -0x1.2ade5ep-3f, -0x1.491f18p-4f, 0x1.5bccdep-11f, 0x1.398368p-20f, -0x0p+0f}; + return {0x0p+0f, 0x1.1617a4p+2f, -0x1.94d9c6p+4f, 0x1.dd0eb6p+5f, -0x1.168c04p+6f, 0x1.24c19cp+5f, -0x1.016a68p+0f, -0x1.c94ed2p+2f, 0x1.669c08p+3f, -0x1.88dca4p+4f, 0x1.b958d8p+4f, -0x1.eccebap+3f, 0x1.f4375ep+1f, -0x1.2ade5ep-3f, -0x1.491f18p-4f, 0x1.5bccdep-11f, 0x1.398368p-20f, 0x0p+0f}; } if constexpr (order == 6) { return {0x0p+0f, 0x1.384148p+1f, -0x1.dd3c5ap+3f, 0x1.30352ap+5f, -0x1.a86d9ep+5f, 0x1.7d0e6cp+5f, -0x1.25c844p+5f, 0x1.f5b3e2p+4f, -0x1.815eep+4f, 0x1.ca4482p+3f, -0x1.050826p+3f, 0x1.1eeca8p+2f, -0x1.6df696p+0f, 0x1.75a7acp-5f, 0x1.ebd4ap-5f, -0x1.434438p-10f, -0x1.202646p-18f, 0x0p+0f}; @@ -565,13 +684,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.e4c00e361fc68p-1, -0x1.aad6ffd5d77f1p+0, 0x1.135c57711e671p-2, 0x1.5b41454ff0957p-1, -0x1.c92ba77b267a3p-4, -0x1.4f00ea2c2d363p-2, 0x1.61aa479f9dc68p-2, -0x1.6676194262896p-3, 0x1.7235017b58d32p-5, -0x1.85c5f4a449273p-10, -0x1.2bb318efa4d23p-9, 0x1.b3d73e818e5c9p-12, 0x1.bca3f26f194dp-17, -0x1.261d8947cb727p-20, 0x1.36693a4632269p-28, 0x1.1a9906065291fp-40, -0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.27d6df36685a8p+1, -0x1.2ded79e41fdb1p+3, 0x1.e79fd7c0b1c0fp+3, -0x1.304a1a210a5fap+3, -0x1.effd2573aa9abp+2, 0x1.7ce72fdc2cb91p+4, -0x1.985f0196c72e5p+4, 0x1.d3cfac07a9d2bp+3, -0x1.e1a24f8472a68p+1, -0x1.9b8563bd7c7d8p-2, 0x1.fe4766e3faf54p-2, -0x1.73f12d4155f36p-4, -0x1.20dddf659ee51p-10, 0x1.ffd28fb3400bfp-12, -0x1.fa83788d3f78dp-20, -0x1.cc794a76e5f16p-31, 0x0p+0}; + return {0x0p+0, 0x1.27d6df36685a8p+1, -0x1.2ded79e41fdb1p+3, 0x1.e79fd7c0b1c0fp+3, -0x1.304a1a210a5fap+3, -0x1.effd2573aa9abp+2, 0x1.7ce72fdc2cb91p+4, -0x1.985f0196c72e5p+4, 0x1.d3cfac07a9d2bp+3, -0x1.e1a24f8472a68p+1, -0x1.9b8563bd7c7d8p-2, 0x1.fe4766e3faf54p-2, -0x1.73f12d4155f36p-4, -0x1.20dddf659ee51p-10, 0x1.ffd28fb3400bfp-12, -0x1.fa83788d3f78dp-20, -0x1.cc794a76e5f16p-31, -0x0p+0}; } if constexpr (order == 4) { - return {0x0p+0, 0x1.c7ced0f66aeadp+1, -0x1.2ab8c9c81252ep+4, 0x1.4df684dede46dp+5, -0x1.af3bf949d62bap+5, 0x1.8eeb17bed133cp+5, -0x1.541e9c27826e5p+5, 0x1.12ea47c60decp+5, -0x1.35c8b07214e14p+4, 0x1.d829e1a762882p+1, 0x1.69d6e9c20f73dp+1, -0x1.0235621854eefp+1, 0x1.b423243b8b469p-2, -0x1.2e290398a3fe3p-8, -0x1.22b4e2598d44bp-8, 0x1.654cdf573874bp-16, 0x1.43e711e678672p-26, -0x0p+0}; + return {0x0p+0, 0x1.c7ced0f66aeadp+1, -0x1.2ab8c9c81252ep+4, 0x1.4df684dede46dp+5, -0x1.af3bf949d62bap+5, 0x1.8eeb17bed133cp+5, -0x1.541e9c27826e5p+5, 0x1.12ea47c60decp+5, -0x1.35c8b07214e14p+4, 0x1.d829e1a762882p+1, 0x1.69d6e9c20f73dp+1, -0x1.0235621854eefp+1, 0x1.b423243b8b469p-2, -0x1.2e290398a3fe3p-8, -0x1.22b4e2598d44bp-8, 0x1.654cdf573874bp-16, 0x1.43e711e678672p-26, 0x0p+0}; } if constexpr (order == 5) { - return {0x0p+0, 0x1.1617a4f9d8857p+2, -0x1.94d9c534a28d4p+4, 0x1.dd0eb6aa76ffep+5, -0x1.168c0447c1b6fp+6, 0x1.24c19c047007fp+5, -0x1.016a68491e4d8p+0, -0x1.c94ed28aba0f5p+2, 0x1.669c08c9522f3p+3, -0x1.88dca456f3456p+4, 0x1.b958d77e385a9p+4, -0x1.eccebab605f4bp+3, 0x1.f4375d664ce34p+1, -0x1.2ade5d60c4581p-3, -0x1.491f178ce5646p-4, 0x1.5bccddec65e54p-11, 0x1.398367062ce37p-20, -0x0p+0}; + return {0x0p+0, 0x1.1617a4f9d8857p+2, -0x1.94d9c534a28d4p+4, 0x1.dd0eb6aa76ffep+5, -0x1.168c0447c1b6fp+6, 0x1.24c19c047007fp+5, -0x1.016a68491e4d8p+0, -0x1.c94ed28aba0f5p+2, 0x1.669c08c9522f3p+3, -0x1.88dca456f3456p+4, 0x1.b958d77e385a9p+4, -0x1.eccebab605f4bp+3, 0x1.f4375d664ce34p+1, -0x1.2ade5d60c4581p-3, -0x1.491f178ce5646p-4, 0x1.5bccddec65e54p-11, 0x1.398367062ce37p-20, 0x0p+0}; } if constexpr (order == 6) { return {0x0p+0, 0x1.3841475e9a364p+1, -0x1.dd3c5aa19c52ep+3, 0x1.303529a28e47p+5, -0x1.a86d9ebb6edc4p+5, 0x1.7d0e6c4e24171p+5, -0x1.25c8439d2df8ap+5, 0x1.f5b3e1ac99667p+4, -0x1.815ee05c85e8bp+4, 0x1.ca4482f4236a5p+3, -0x1.050825dec75a9p+3, 0x1.1eeca8acc3a79p+2, -0x1.6df69657c972dp+0, 0x1.75a7ac677c4efp-5, 0x1.ebd49f3810c89p-5, -0x1.4344372e1b6fcp-10, -0x1.20264586c6bb9p-18, 0x0p+0}; @@ -594,13 +713,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xf.260071b0fe33d17p-4L, -0xd.56b7feaebbf8a9ep-3L, 0x8.9ae2bb88f3384cep-5L, 0xa.da0a2a7f84ab917p-4L, -0xe.495d3bd933d14bbp-7L, -0xa.7807516169b18a5p-5L, 0xb.0d523cfcee33daap-5L, -0xb.33b0ca13144b196p-6L, 0xb.91a80bdac698e63p-8L, -0xc.2e2fa52249396c6p-13L, -0x9.5d98c77d2691ac4p-12L, 0xd.9eb9f40c72e4aacp-15L, 0xd.e51f9378ca67c3cp-20L, -0x9.30ec4a3e5b93bbap-23L, 0x9.b349d2319134721p-31L, 0x8.d4c83032948f76p-43L, -0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0x9.3eb6f9b342d3cadp-2L, -0x9.6f6bcf20fed8622p+0L, 0xf.3cfebe058e075ecp+0L, -0x9.8250d10852fce74p+0L, -0xf.7fe92b9d54d57e6p-1L, 0xb.e7397ee165c88c5p+1L, -0xc.c2f80cb639729f3p+1L, 0xe.9e7d603d4e95463p+0L, -0xf.0d127c23953405cp-2L, -0xc.dc2b1debe3ebee3p-5L, 0xf.f23b371fd7a9d87p-5L, -0xb.9f896a0aaf9ad9fp-7L, -0x9.06eefb2cf7284e3p-13L, 0xf.fe947d9a005fa2fp-15L, -0xf.d41bc469fbc68cdp-23L, -0xe.63ca53b72f8b2fep-34L, 0x0p+0L}; + return {0x0p+0L, 0x9.3eb6f9b342d3cadp-2L, -0x9.6f6bcf20fed8622p+0L, 0xf.3cfebe058e075ecp+0L, -0x9.8250d10852fce74p+0L, -0xf.7fe92b9d54d57e6p-1L, 0xb.e7397ee165c88c5p+1L, -0xc.c2f80cb639729f3p+1L, 0xe.9e7d603d4e95463p+0L, -0xf.0d127c23953405cp-2L, -0xc.dc2b1debe3ebee3p-5L, 0xf.f23b371fd7a9d87p-5L, -0xb.9f896a0aaf9ad9fp-7L, -0x9.06eefb2cf7284e3p-13L, 0xf.fe947d9a005fa2fp-15L, -0xf.d41bc469fbc68cdp-23L, -0xe.63ca53b72f8b2fep-34L, -0x0p+0L}; } if constexpr (order == 4) { - return {0x0p+0L, 0xe.3e7687b3575667ep-2L, -0x9.55c64e409297236p+1L, 0xa.6fb426f6f2369dp+2L, -0xd.79dfca4eb15ce04p+2L, 0xc.7758bdf6899e1b4p+2L, -0xa.a0f4e13c13724e9p+2L, 0x8.97523e306f6022p+2L, -0x9.ae458390a70a077p+1L, 0xe.c14f0d3b14410dep-2L, 0xb.4eb74e107b9e597p-2L, -0x8.11ab10c2a7777ccp-2L, 0xd.a11921dc5a34834p-5L, -0x9.71481cc51ff17e4p-11L, -0x9.15a712cc6a2586fp-11L, 0xb.2a66fab9c3a5b39p-19L, 0xa.1f388f33c339298p-29L, -0x0p+0L}; + return {0x0p+0L, 0xe.3e7687b3575667ep-2L, -0x9.55c64e409297236p+1L, 0xa.6fb426f6f2369dp+2L, -0xd.79dfca4eb15ce04p+2L, 0xc.7758bdf6899e1b4p+2L, -0xa.a0f4e13c13724e9p+2L, 0x8.97523e306f6022p+2L, -0x9.ae458390a70a077p+1L, 0xe.c14f0d3b14410dep-2L, 0xb.4eb74e107b9e597p-2L, -0x8.11ab10c2a7777ccp-2L, 0xd.a11921dc5a34834p-5L, -0x9.71481cc51ff17e4p-11L, -0x9.15a712cc6a2586fp-11L, 0xb.2a66fab9c3a5b39p-19L, 0xa.1f388f33c339298p-29L, 0x0p+0L}; } if constexpr (order == 5) { - return {0x0p+0L, 0x8.b0bd27cec42baaep-1L, -0xc.a6ce29a51469f7p+1L, 0xe.e875b553b7fed21p+2L, -0x8.b460223e0db7486p+3L, 0x9.260ce023803fb4p+2L, -0x8.0b534248f26c38ep-3L, -0xe.4a769455d07a8e6p-1L, 0xb.34e0464a91798aep+0L, -0xc.46e522b79a2b2aep+1L, 0xd.cac6bbf1c2d48b2p+1L, -0xf.6675d5b02fa596cp+0L, 0xf.a1baeb32671a172p-2L, -0x9.56f2eb0622c089cp-6L, -0xa.48f8bc672b2306bp-7L, 0xa.de66ef632f29e0ep-14L, 0x9.cc1b3831671b9dbp-23L, -0x0p+0L}; + return {0x0p+0L, 0x8.b0bd27cec42baaep-1L, -0xc.a6ce29a51469f7p+1L, 0xe.e875b553b7fed21p+2L, -0x8.b460223e0db7486p+3L, 0x9.260ce023803fb4p+2L, -0x8.0b534248f26c38ep-3L, -0xe.4a769455d07a8e6p-1L, 0xb.34e0464a91798aep+0L, -0xc.46e522b79a2b2aep+1L, 0xd.cac6bbf1c2d48b2p+1L, -0xf.6675d5b02fa596cp+0L, 0xf.a1baeb32671a172p-2L, -0x9.56f2eb0622c089cp-6L, -0xa.48f8bc672b2306bp-7L, 0xa.de66ef632f29e0ep-14L, 0x9.cc1b3831671b9dbp-23L, 0x0p+0L}; } if constexpr (order == 6) { return {0x0p+0L, 0x9.c20a3af4d1b1cfep-2L, -0xe.e9e2d50ce2972e4p+0L, 0x9.81a94d147237d62p+2L, -0xd.436cf5db76e1e52p+2L, 0xb.e873627120b85ap+2L, -0x9.2e421ce96fc4fd3p+2L, 0xf.ad9f0d64cb33437p+1L, -0xc.0af702e42f45538p+1L, 0xe.522417a11b52a8bp+0L, -0x8.28412ef63ad4b3p+0L, 0x8.f76545661d3c9p-1L, -0xb.6fb4b2be4b96476p-3L, 0xb.ad3d633be277714p-8L, 0xf.5ea4f9c08644463p-8L, -0xa.1a21b970db7e3c3p-13L, -0x9.01322c3635dc8d8p-21L, 0x0p+0L}; @@ -615,42 +734,71 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.1d2fbfac23949a1e129ec9f83912p-4Q, 0x1.b1b6520101e0e6c7ddaa9da59f1ep-1Q, 0x1.8b08d5cd4a2ad4b181244736a729p-3Q, -0x1.4aef16c7e666f719f7698e178af8p-3Q, 0x1.fd1877f1138be38ba53889d72502p-5Q, -0x1.7ee87092fa242b1ef789aaf8df0bp-8Q, -0x1.09758849af60512fff4fa06073a1p-7Q, 0x1.3d3ef7388a3ade9f5adf4b3f580fp-8Q, -0x1.29147421d57112477f4b7b3491f7p-10Q, 0x1.b33acccf47f1bda17f46b81064b7p-15Q, 0x1.7e6498cdbddd4dce209effce7067p-16Q, -0x1.53f9494edf1282277c1de6dc67e2p-19Q, -0x1.58c1d88e09b30b0364784ebc1f6cp-24Q, 0x1.278ba12dc249a4cd49c8d69ab618p-29Q, -0x1.705a7a4d83450688cb9e189ad73cp-38Q, -0x1.4fb4ee678fa0e1946f2bc7ed6f9ap-52Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.1d2fbfac23949a1e129ec9f8391bp-4Q, 0x1.b1b6520101e0e6c7ddaa9da59f23p-1Q, 0x1.8b08d5cd4a2ad4b181244736a713p-3Q, -0x1.4aef16c7e666f719f7698e178af1p-3Q, 0x1.fd1877f1138be38ba53889d724ecp-5Q, -0x1.7ee87092fa242b1ef789aaf8def8p-8Q, -0x1.09758849af60512fff4fa06073a6p-7Q, 0x1.3d3ef7388a3ade9f5adf4b3f580dp-8Q, -0x1.29147421d57112477f4b7b3491f7p-10Q, 0x1.b33acccf47f1bda17f46b8106497p-15Q, 0x1.7e6498cdbddd4dce209effce7062p-16Q, -0x1.53f9494edf1282277c1de6dc67e4p-19Q, -0x1.58c1d88e09b30b0364784ebc1f68p-24Q, 0x1.278ba12dc249a4cd49c8d69ab623p-29Q, -0x1.705a7a4d83450688cb9e189ad73ep-38Q, -0x1.4fb4ee678fa0e1946f2bc7ed6f9ap-52Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.2b90f770700937399f9f525fd16p-2Q, 0x1.af96b810375ae30c4c41bf8dddfep-1Q, -0x1.d3c16b16ba8799042d28d9c49847p+0Q, 0x1.1690032de8cfad91fdf041ea0eaap+0Q, -0x1.1f4f37268ff73d0393fe0f677908p-1Q, 0x1.82c9256a70f8e96c68d16f2e332cp-3Q, -0x1.540e9bea7c732170245209a303ap-7Q, -0x1.49841c554fed1d5f2443e15a5a69p-6Q, 0x1.96a364065f27ccd19657d67cdf44p-8Q, 0x1.0c49493de5a6ec95d0bb4c3aca7fp-11Q, -0x1.b592fbb7be41b5e92f003f6109e3p-12Q, 0x1.9d3f09be0cea6d8d6f8ed455253cp-16Q, 0x1.8562af0388b7df01536ccb66a54fp-23Q, -0x1.13cc2e0d34f2575dd283b068f4aep-24Q, 0x1.2234e02ed8630c149658a9630027p-34Q, 0x1.08644a120d1ef6f0d4b961ae18cfp-47Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.2b90f770700937399f9f525fd17p-2Q, 0x1.af96b810375ae30c4c41bf8dddd3p-1Q, -0x1.d3c16b16ba8799042d28d9c49845p+0Q, 0x1.1690032de8cfad91fdf041ea0eb6p+0Q, -0x1.1f4f37268ff73d0393fe0f67790ep-1Q, 0x1.82c9256a70f8e96c68d16f2e3327p-3Q, -0x1.540e9bea7c732170245209a302fbp-7Q, -0x1.49841c554fed1d5f2443e15a5a95p-6Q, 0x1.96a364065f27ccd19657d67cdf64p-8Q, 0x1.0c49493de5a6ec95d0bb4c3aca89p-11Q, -0x1.b592fbb7be41b5e92f003f6109fcp-12Q, 0x1.9d3f09be0cea6d8d6f8ed455255ap-16Q, 0x1.8562af0388b7df01536ccb66a5b4p-23Q, -0x1.13cc2e0d34f2575dd283b068f4bap-24Q, 0x1.2234e02ed8630c149658a9630026p-34Q, 0x1.08644a120d1ef6f0d4b961ae1879p-47Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.e4c00e361fc67a2e12b083b2dedp-1Q, -0x1.aad6ffd5d77f153c17f1c88238b1p+0Q, 0x1.135c57711e67099c1758b9c71774p-2Q, 0x1.5b41454ff095722d0f803ea680d3p-1Q, -0x1.c92ba77b267a297500d5b5d446e8p-4Q, -0x1.4f00ea2c2d363149504e045fbe3dp-2Q, 0x1.61aa479f9dc67b53226c771010a3p-2Q, -0x1.667619426289632c2e8907dc17f4p-3Q, 0x1.7235017b58d31cc6ca2ab84f7b18p-5Q, -0x1.85c5f4a449272d8bf24d90db58dfp-10Q, -0x1.2bb318efa4d23587f50785ea349bp-9Q, 0x1.b3d73e818e5c9557fa6b95207e7cp-12Q, 0x1.bca3f26f194cf877e2358ca6ef83p-17Q, -0x1.261d8947cb7277733f476ea3b783p-20Q, 0x1.36693a4632268e426c4014035393p-28Q, 0x1.1a9906065291eec094ff6b81726cp-40Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.e4c00e361fc67a2e12b083b2df48p-1Q, -0x1.aad6ffd5d77f153c17f1c8823935p+0Q, 0x1.135c57711e67099c1758b9c717c8p-2Q, 0x1.5b41454ff095722d0f803ea68127p-1Q, -0x1.c92ba77b267a297500d5b5d44785p-4Q, -0x1.4f00ea2c2d363149504e045fbe84p-2Q, 0x1.61aa479f9dc67b53226c771010fp-2Q, -0x1.667619426289632c2e8907dc1851p-3Q, 0x1.7235017b58d31cc6ca2ab84f7b8bp-5Q, -0x1.85c5f4a449272d8bf24d90db58c1p-10Q, -0x1.2bb318efa4d23587f50785ea34e5p-9Q, 0x1.b3d73e818e5c9557fa6b95207f02p-12Q, 0x1.bca3f26f194cf877e2358ca6efddp-17Q, -0x1.261d8947cb7277733f476ea3b7dfp-20Q, 0x1.36693a4632268e426c40140353cep-28Q, 0x1.1a9906065291eec094ff6b8172d8p-40Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.27d6df36685a79598b6c86ce4186p+1Q, -0x1.2ded79e41fdb0c43d1210e12d21ep+3Q, 0x1.e79fd7c0b1c0ebd84f460885d881p+3Q, -0x1.304a1a210a5f9ce8bc8b8a0cffdep+3Q, -0x1.effd2573aa9aafcb53e5889f37dap+2Q, 0x1.7ce72fdc2cb91189ae6d5e0871cfp+4Q, -0x1.985f0196c72e53e6d1cfdee7b628p+4Q, 0x1.d3cfac07a9d2a8c51198c073e7cep+3Q, -0x1.e1a24f8472a680b7d24d0580978cp+1Q, -0x1.9b8563bd7c7d7dc5768ba3de4d6cp-2Q, 0x1.fe4766e3faf53b0d1248280765afp-2Q, -0x1.73f12d4155f35b3e8452b4fe648dp-4Q, -0x1.20dddf659ee509c6befdf1c741e4p-10Q, 0x1.ffd28fb3400bf45efe5c328ed98fp-12Q, -0x1.fa83788d3f78d19a901b7476cd3dp-20Q, -0x1.cc794a76e5f165fc8108c92a1bffp-31Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.27d6df36685a79598b6c86ce474dp+1Q, -0x1.2ded79e41fdb0c43d1210e12de17p+3Q, 0x1.e79fd7c0b1c0ebd84f460885ecf3p+3Q, -0x1.304a1a210a5f9ce8bc8b8a0cdf19p+3Q, -0x1.effd2573aa9aafcb53e588a096b7p+2Q, 0x1.7ce72fdc2cb91189ae6d5e090c6bp+4Q, -0x1.985f0196c72e53e6d1cfdee84e02p+4Q, 0x1.d3cfac07a9d2a8c51198c074937dp+3Q, -0x1.e1a24f8472a680b7d24d058147a3p+1Q, -0x1.9b8563bd7c7d7dc5768ba3df017ep-2Q, 0x1.fe4766e3faf53b0d124828083686p-2Q, -0x1.73f12d4155f35b3e8452b4ff00abp-4Q, -0x1.20dddf659ee509c6befdf1c7addep-10Q, 0x1.ffd28fb3400bf45efe5c328fc188p-12Q, -0x1.fa83788d3f78d19a901b7477bae6p-20Q, -0x1.cc794a76e5f165fc8108c92b057bp-31Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.c7ced0f66aeaccfcda165890b07cp+1Q, -0x1.2ab8c9c81252e46b55777de4d947p+4Q, 0x1.4df684dede46d3a014591fd079e5p+5Q, -0x1.af3bf949d62b9c07b05b4ac5a7abp+5Q, 0x1.8eeb17bed133c367f65a67fd697cp+5Q, -0x1.541e9c27826e49d24f626bb2a444p+5Q, 0x1.12ea47c60dec043f14d3664d56dbp+5Q, -0x1.35c8b07214e140ed7f1d44702883p+4Q, 0x1.d829e1a7628821bc837255ba8e2p+1Q, 0x1.69d6e9c20f73cb2d14ff73520816p+1Q, -0x1.0235621854eeef97bfd3d4e40fecp+1Q, 0x1.b423243b8b46906701ef92e186fap-2Q, -0x1.2e290398a3fe2fc8cc3aebac6855p-8Q, -0x1.22b4e2598d44b0dd2f4a293dd307p-8Q, 0x1.654cdf573874b672ebfe3509eb92p-16Q, 0x1.43e711e67867252f78e7e45acf76p-26Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.c7ced0f66aeaccfcda16588f9d75p+1Q, -0x1.2ab8c9c81252e46b55777de43246p+4Q, 0x1.4df684dede46d3a014591fcfc934p+5Q, -0x1.af3bf949d62b9c07b05b4ac4bf21p+5Q, 0x1.8eeb17bed133c367f65a67fc6e9fp+5Q, -0x1.541e9c27826e49d24f626bb1a338p+5Q, 0x1.12ea47c60dec043f14d3664c7b9cp+5Q, -0x1.35c8b07214e140ed7f1d446f3113p+4Q, 0x1.d829e1a7628821bc837255b88e76p+1Q, 0x1.69d6e9c20f73cb2d14ff7351adb6p+1Q, -0x1.0235621854eeef97bfd3d4e3b1cp+1Q, 0x1.b423243b8b46906701ef92e0fa6p-2Q, -0x1.2e290398a3fe2fc8cc3aebacf78cp-8Q, -0x1.22b4e2598d44b0dd2f4a293dacc9p-8Q, 0x1.654cdf573874b672ebfe3509d857p-16Q, 0x1.43e711e67867252f78e7e45afce7p-26Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.1617a4f9d885755cd347730680b6p+2Q, -0x1.94d9c534a28d3ee0a8bf210bcdbcp+4Q, 0x1.dd0eb6aa76ffda42c87706ab28dep+5Q, -0x1.168c0447c1b6e90c330602af557cp+6Q, 0x1.24c19c047007f67f0d2fc48525bep+5Q, -0x1.016a68491e4d871ca5058c90ecfbp+0Q, -0x1.c94ed28aba0f51cc92c5b4e86742p+2Q, 0x1.669c08c9522f315c7b041fba43e2p+3Q, -0x1.88dca456f345655b7cb4359b9a4bp+4Q, 0x1.b958d77e385a9163a2eb3b5063f1p+4Q, -0x1.eccebab605f4b2d725512d8a373ap+3Q, 0x1.f4375d664ce342e4e518679a8a7p+1Q, -0x1.2ade5d60c45811382f7ff19b2adep-3Q, -0x1.491f178ce56460d544cbe168f85cp-4Q, 0x1.5bccddec65e53c1b0416c331875ep-11Q, 0x1.398367062ce373b6810676d7e87ep-20Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.1617a4f9d885755cd3477307254fp+2Q, -0x1.94d9c534a28d3ee0a8bf210cb612p+4Q, 0x1.dd0eb6aa76ffda42c87706ac442ap+5Q, -0x1.168c0447c1b6e90c330602b02462p+6Q, 0x1.24c19c047007f67f0d2fc486ec63p+5Q, -0x1.016a68491e4d871ca5058cc8b9fbp+0Q, -0x1.c94ed28aba0f51cc92c5b4dc5aacp+2Q, 0x1.669c08c9522f315c7b041fb5fb05p+3Q, -0x1.88dca456f345655b7cb4359a3262p+4Q, 0x1.b958d77e385a9163a2eb3b4f73aep+4Q, -0x1.eccebab605f4b2d725512d8939ecp+3Q, 0x1.f4375d664ce342e4e51867996bcdp+1Q, -0x1.2ade5d60c45811382f7ff19a5bd5p-3Q, -0x1.491f178ce56460d544cbe167fd8cp-4Q, 0x1.5bccddec65e53c1b0416c330319fp-11Q, 0x1.398367062ce373b6810676d67904p-20Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.3841475e9a3639fcb27c2a8a346bp+1Q, -0x1.dd3c5aa19c52e5c8a273f6e1052ep+3Q, 0x1.303529a28e46fac3a8f56eaa0a35p+5Q, -0x1.a86d9ebb6edc3ca33aa7af776936p+5Q, 0x1.7d0e6c4e24170b40a4b957521101p+5Q, -0x1.25c8439d2df89fa5007905a4ba91p+5Q, 0x1.f5b3e1ac9966686ed844c70c24b5p+4Q, -0x1.815ee05c85e8aa70418061334f18p+4Q, 0x1.ca4482f4236a5516d7f638fa35c2p+3Q, -0x1.050825dec75a966028608d17675cp+3Q, 0x1.1eeca8acc3a791ffedf80bed61f9p+2Q, -0x1.6df69657c972c8ebec75c92acc68p+0Q, 0x1.75a7ac677c4eee273d03fc67aefp-5Q, 0x1.ebd49f3810c888c69855753565b4p-5Q, -0x1.4344372e1b6fc786ddf90f2b7b7p-10Q, -0x1.20264586c6bb91b0aa0b4d1a440fp-18Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.3841475e9a3639fcb27c2a85a863p+1Q, -0x1.dd3c5aa19c52e5c8a273f6da1b5ap+3Q, 0x1.303529a28e46fac3a8f56ea5a2b3p+5Q, -0x1.a86d9ebb6edc3ca33aa7af7132e4p+5Q, 0x1.7d0e6c4e24170b40a4b9574c4b78p+5Q, -0x1.25c8439d2df89fa5007905a011dap+5Q, 0x1.f5b3e1ac9966686ed844c7042856p+4Q, -0x1.815ee05c85e8aa704180612d3a88p+4Q, 0x1.ca4482f4236a5516d7f638f2b575p+3Q, -0x1.050825dec75a966028608d12e5c4p+3Q, 0x1.1eeca8acc3a791ffedf80be8793bp+2Q, -0x1.6df69657c972c8ebec75c924bb61p+0Q, 0x1.75a7ac677c4eee273d03fc609c7dp-5Q, 0x1.ebd49f3810c888c69855752e166p-5Q, -0x1.4344372e1b6fc786ddf90f275fd2p-10Q, -0x1.20264586c6bb91b0aa0b4d170d57p-18Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.041f759e862aa2196b99e328e887p+0Q, -0x1.96fe795439508b28db42654510a5p+2Q, 0x1.04a7fd5b5e5923f7f627bd68cd65p+4Q, -0x1.5c5ede521aae5e58438f371fca07p+4Q, 0x1.0b593b29c51bbefd0a21a466fe1fp+4Q, -0x1.3ddf512850559b028d830987fbd1p+3Q, 0x1.12f0bcbe3fa44419a6b523028ff1p+3Q, -0x1.d4ebfbf56d99633e38e575351ca4p+2Q, 0x1.d31827f76dc61557ae5c1ea5b48p+1Q, -0x1.6bf237312f18cf3b573ffc6b9b12p+0Q, 0x1.d1d5c0ac4dc0c7147f916f8d0ae2p-1Q, -0x1.794e93c6506dcbe26714d9f578b4p-2Q, -0x1.2e59e90e0a11c8b7ce9f91036827p-6Q, 0x1.26fbfe966bb82001d50ae9267a6ep-5Q, -0x1.e662faa96110f417469ce7821db9p-10Q, -0x1.a81802ebf94f0a8bc8124e278c59p-17Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.041f759e862aa2196b99e32b0e5p+0Q, -0x1.96fe795439508b28db4265486c81p+2Q, 0x1.04a7fd5b5e5923f7f627bd6af411p+4Q, -0x1.5c5ede521aae5e58438f3722aadep+4Q, 0x1.0b593b29c51bbefd0a21a469361ap+4Q, -0x1.3ddf512850559b028d83098aa4f2p+3Q, 0x1.12f0bcbe3fa44419a6b52304dc22p+3Q, -0x1.d4ebfbf56d99633e38e5753902fdp+2Q, 0x1.d31827f76dc61557ae5c1ea99bcdp+1Q, -0x1.6bf237312f18cf3b573ffc6eb123p+0Q, 0x1.d1d5c0ac4dc0c7147f916f90f5c1p-1Q, -0x1.794e93c6506dcbe26714d9f89e44p-2Q, -0x1.2e59e90e0a11c8b7ce9f9105aca7p-6Q, 0x1.26fbfe966bb82001d50ae928dc43p-5Q, -0x1.e662faa96110f417469ce785ece9p-10Q, -0x1.a81802ebf94f0a8bc8124e2acfbp-17Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.9024e0f887aa33deb80194db918fp-3Q, -0x1.3caa56e1c68f9f7ad07fd6873ac5p+0Q, 0x1.947e636a9e373f489450f99a494ep+1Q, -0x1.033a79f260cef0d616212b14ddbcp+2Q, 0x1.51b6c9e0d0443759a67a3c353747p+1Q, -0x1.0bd62fc1e045579c86e940e528b1p+0Q, 0x1.028bee5b6619ea0406791e99bae6p+0Q, -0x1.1620d9bfc03eb662d8d654bb92cfp+0Q, 0x1.b5ef819dccd9a27cb2716f32c63ap-2Q, -0x1.b7954b06be8aeb961960232cc863p-6Q, 0x1.054d18d1cc90c79a1ef0360672efp-4Q, -0x1.4817258dd284697ebc00b788ce26p-5Q, -0x1.8ce86e181d4254ae37719aa328a7p-6Q, 0x1.2926b8981e2a739eefaa1e5b74bcp-6Q, -0x1.20ae937e7a9305bbde13268ad288p-9Q, -0x1.e260b0ee2a092f8355b87bff022bp-16Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.9024e0f887aa33deb80194db4775p-3Q, -0x1.3caa56e1c68f9f7ad07fd686ffdbp+0Q, 0x1.947e636a9e373f489450f999fe93p+1Q, -0x1.033a79f260cef0d616212b14afddp+2Q, 0x1.51b6c9e0d0443759a67a3c3505fdp+1Q, -0x1.0bd62fc1e045579c86e940e51c15p+0Q, 0x1.028bee5b6619ea0406791e99a571p+0Q, -0x1.1620d9bfc03eb662d8d654bb6c17p+0Q, 0x1.b5ef819dccd9a27cb2716f32a404p-2Q, -0x1.b7954b06be8aeb961960232f51e9p-6Q, 0x1.054d18d1cc90c79a1ef036069b3dp-4Q, -0x1.4817258dd284697ebc00b788ccd7p-5Q, -0x1.8ce86e181d4254ae37719aa28183p-6Q, 0x1.2926b8981e2a739eefaa1e5b0722p-6Q, -0x1.20ae937e7a9305bbde13268a4994p-9Q, -0x1.e260b0ee2a092f8355b87bfdf959p-16Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0696256148532700351919396744932899458901475071882009455460949442257725090643"), boost::lexical_cast("0.847094118712392865488445491666448260772283771603129862851579519790390191884"), boost::lexical_cast("0.192887945487446735108207067592716438385147148387205741175709003694874991303"), boost::lexical_cast("-0.161588838553871279142256267689733836106164148233593303014435155929549184904"), boost::lexical_cast("0.0621454565631309617634380881808335928424960159357894362352948406059776368030"), boost::lexical_cast("-0.00584271191016988667489934317676681761380261859736020254107802203440485911830"), boost::lexical_cast("-0.00810116915396986484284110901604422633398896546175619238854935214695602535306"), boost::lexical_cast("0.00484078918138035149158848553294039923334976019542221808517285604431896830998"), boost::lexical_cast("-0.00113326987089607350360311514735367410308696721786347944018825854440169314785"), boost::lexical_cast("0.0000518834218559123344579363088412935129165280069792765898378420125485731010746"), boost::lexical_cast("0.0000227923963427004781576572210149586228991148638291199976434901264070906009219"), boost::lexical_cast("-0.00000253300201030598522589097875316626630820822335580422623437912828366256338066"), boost::lexical_cast("-0.0000000802700432516996219234776794962786936078351284525549608976066927226092457516"), boost::lexical_cast("0.00000000215037600823040848531416812145312700229132524083435563752554400656355171355"), boost::lexical_cast("-0.00000000000523461705899403093230911172363595454183744690618924167900623489664585671892"), boost::lexical_cast("-0.000000000000000291179201205891612682286686378360986960244052826956539582335356631085936448"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.292545191037796939535389393392524159619768256766940538370253353709461193032"), boost::lexical_cast("0.842946769694824537045009424862247504440189060559035409366548153562971046333"), boost::lexical_cast("-1.82717007927797538158634749745144900658761906951781067368239430170496580026"), boost::lexical_cast("1.08813495512805388191036942833223671123809253137161269595551241180555412336"), boost::lexical_cast("-0.561151240784950357351319288602199217315277177939018273801699428225616351849"), boost::lexical_cast("0.188860218344526891969457899968714396869941678733540325124502082703253093959"), boost::lexical_cast("-0.0103777180965810325757147992456275086095651002024262019464570618682172893560"), boost::lexical_cast("-0.0201120640460875141204975265352055179708974180844365324656095077183481665071"), boost::lexical_cast("0.00620480720533278240593000416203558121866225849233783767746501903652779797358"), boost::lexical_cast("0.000511715457593831878348526994379850228214262314833874209020963369744116177094"), boost::lexical_cast("-0.000417303231628420130847533411474569395038335447444917096887081609399824377911"), boost::lexical_cast("0.0000246313954834336786578230076000285162282668339295707375389296462305068325569"), boost::lexical_cast("0.000000181321745272135394237503981158619963539109967763295911042193620477541392180"), boost::lexical_cast("-0.0000000642141275320865350440248672780732024814675393949502653848285464530637503456"), boost::lexical_cast("0.0000000000659853289473506178162438806415358166040221310868614460485355680895239971041"), boost::lexical_cast("0.00000000000000733834535433323085982655900391187245584811969936387919615025045530814656992"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.946777767283390540714404221584615079023092608593179874933591611929424472485"), boost::lexical_cast("-1.66734312983271267309321411121395907583555820122567011112376971940996707956"), boost::lexical_cast("0.268906942633839773948889603119308083663479474183417680672346331112533372730"), boost::lexical_cast("0.678232351310991258941508584688642891898119286261551673777759411644213054589"), boost::lexical_cast("-0.111613897536158060295536493503011833000297341597327636552216220361799209380"), boost::lexical_cast("-0.327151926943136388570224093819464516869683572537433435414357010300674438746"), boost::lexical_cast("0.345376128308493052665256776473446621249215438981458413871842565755981610451"), boost::lexical_cast("-0.175029942835241930595606890611047181166656164868469200496810519729335464519"), boost::lexical_cast("0.0451912907544972500160407679210623907538006067792182784497573909710514110903"), boost::lexical_cast("-0.00148686700510683159736033420530033526602254575192174933907208287640696148334"), boost::lexical_cast("-0.00228652648349626930958233420749265339034884848058225128735489316309216194635"), boost::lexical_cast("0.000415650174634043890487751208209411279937212554767153184423913890865016834975"), boost::lexical_cast("0.0000132513170838045914618299238086704647297885466647476958534437752575150892279"), boost::lexical_cast("-0.00000109566515677943851419827253312757926681754226925567626886322889119467587352"), boost::lexical_cast("0.00000000451707521924643308252924541765504862848358919185132320746715765398014639333"), boost::lexical_cast("0.00000000000100398888555583838447015712041044761982662545295143252368229865482374008093"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.31124487072584709340072024375652751167903029344934811013210724247867834712"), boost::lexical_cast("-9.43523878627351700486667408986119165102766488328680852307793395602884092368"), boost::lexical_cast("15.23826205859770997419029499536885930324282552790731045653500894195106217230"), boost::lexical_cast("-9.50904566243388026482185821161121048927181414560909106839809459077939567212"), boost::lexical_cast("-7.74982582374142746596539847819058427772645564907288598203930173309437241112"), boost::lexical_cast("23.80644212728254095208630893797731947546863789816665646941416033108845852560"), boost::lexical_cast("-25.52319487474132573315598925827481047528889709949317322024171789375930496050"), boost::lexical_cast("14.61910058495285111510583787914644598320193823700758034804561275077288093820"), boost::lexical_cast("-3.76276582686596230192956587364009471111423882274083500758285711718430914481"), boost::lexical_cast("-0.401876028480840022977724595683369746855848802187118863206831503976422808900"), boost::lexical_cast("0.498319251694501402266194337927777390492533960487059487842842210706425452006"), boost::lexical_cast("-0.0908061759740775534638772529734415696617219068242862250162791584120467567508"), boost::lexical_cast("-0.00110193897253809208118839003583409411342268641822896346372378981763645701667"), boost::lexical_cast("0.000488111977759341608153274160279547453053433093120482116238865902413969365260"), boost::lexical_cast("-0.00000188691004449025030399350421194685076340345889651763665155607041691780427844"), boost::lexical_cast("-0.000000000837596949144929524562460249627191951019750983422579043777172865056887183216"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.56099903137313447653308073719069094628298405133690563906561861936445946007"), boost::lexical_cast("-18.67011430886230370235720362402145866382565255864894062875836808783810172070"), boost::lexical_cast("41.74537061801752618764215796492553160234168704484092726499577820178240950150"), boost::lexical_cast("-53.90428407368513143095733499969054312179860229999410756267069469773697487590"), boost::lexical_cast("49.86479138446745347495028288278129648962436375452866744453087449252422749480"), boost::lexical_cast("-42.51494627825539832489623511405198662612329830348598981334872895902788851530"), boost::lexical_cast("34.36439470987306965384334763928109227423995285653319098010560258917408804280"), boost::lexical_cast("-19.36149639666662401531934915671584710840660950619246136186169380992926261930"), boost::lexical_cast("3.68877812073793714221449969323656655140811213570309303147472950766460448556"), boost::lexical_cast("2.82687112784961267420163066364729873031830257798046834667883219375131634861"), boost::lexical_cast("-2.01725412548136472359247020220053150679272256461259072142878792076970321518"), boost::lexical_cast("0.425915304312019461782564152045098653193242220169129362972564850123877163104"), boost::lexical_cast("-0.00461059892462853652486233333670046935605106056900099120735719921725474826272"), boost::lexical_cast("-0.00443583036535695045092535332549546407656776796969226954011005583519642324338"), boost::lexical_cast("0.0000212967564409202157603357608120205592853860427112088867632348335621428459043"), boost::lexical_cast("0.0000000188536136927150567144741756924115740343376900701049770411358310019917707856"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.34519314192774371644605664344260685807624755151402674229796990772442490669"), boost::lexical_cast("-25.30316658554586670195060554724977775864649185540159313706154605487824252430"), boost::lexical_cast("59.63218434501321241686227040141305669678309492280566274270121970853125985750"), boost::lexical_cast("-69.63673507804717481631012221036570369169261940901946481187737315982813252500"), boost::lexical_cast("36.59453586069957542305839900792960952397807013166550399544566076698109838520"), boost::lexical_cast("-1.00552989754787890241812019217185423330772733818008108791628359534655241737"), boost::lexical_cast("-7.14543593928850838676384113079945586921929171803713962006454488900252833519"), boost::lexical_cast("11.20654715843691044532849119891603196174261061865084786297107780266854541590"), boost::lexical_cast("-24.55386766400291639497667909532438173366128839958254164111061988488776479890"), boost::lexical_cast("27.58418988518466039332570510309944494563540512877954948263846939300864839690"), boost::lexical_cast("-15.40023551513117748173055818458330381918522055139888794492596135452925084020"), boost::lexical_cast("3.90793960089811251141014062726261819004190764494555441923947299947294357551"), boost::lexical_cast("-0.145931939616769342677381879905952490456893639361103035834837241907687647570"), boost::lexical_cast("-0.0803519172607930217143096597939609700610595254316391845465369362291239673402"), boost::lexical_cast("0.000663376352849585270549158082005899457474231838909594090590164906243989945765"), boost::lexical_cast("0.00000116792802055684000576004901649051578220621239562395324237331611330461969728"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.43949215049035378308490877112616480587247519253349272700089974373761727070"), boost::lexical_cast("-14.91361743511751278653863337775082100851257612848163914659667962039370407430"), boost::lexical_cast("38.02595831867881537937530443404440268525161384656893310351288920599098373240"), boost::lexical_cast("-53.05352541381901538280530176799613503869273806435001792774565773108485860860"), boost::lexical_cast("47.63204251334798800088842822439490203451348559647805617494608965893769108390"), boost::lexical_cast("-36.72278521343748975726593618407350035873027478333718779024037203624257707460"), boost::lexical_cast("31.35641639157838698914459960374580961178260675889546093721185892770212198730"), boost::lexical_cast("-24.08566318647221270199387206585348313707566820901513697285058134722858155000"), boost::lexical_cast("14.32086322482366348310210031894559072891597107117636756749550089821175221100"), boost::lexical_cast("-8.15724462043256685901583341088487623405631051772335513386812463292410806832"), boost::lexical_cast("4.48319451209555908109543430241568887648627099692558144854507468628906508116"), boost::lexical_cast("-1.42954387324557353924315901131597022588839567829311825849808138225813793539"), boost::lexical_cast("0.0456121794958422788519835738614979042067103492896491552781823773644117194263"), boost::lexical_cast("0.0600379094835484277448500775653734021516869903849852917021361921275127990832"), boost::lexical_cast("-0.00123316370766296458175735033761430852810590026894516671661974149487692611779"), boost::lexical_cast("-0.00000429376212343184311613788702973769675152078312600917651519873431746001425928"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.01610503311364167160627137764879687271588589977337586555528700566771231261"), boost::lexical_cast("-6.35928185677517694205349753594529349921775157958594734217344676184083432133"), boost::lexical_cast("16.29101310435141502366280370334959338566491174925988910204852058573624530770"), boost::lexical_cast("-21.77316124031030816094586803202252059552525483663335766522914705661431629930"), boost::lexical_cast("16.70928493801487468593777022092645595574965917216718445219727297028380055500"), boost::lexical_cast("-9.93351037858763008636351351386408163754727545153280350373395004801729390569"), boost::lexical_cast("8.59188687475137459206298080378293728057617745867309534594204113820751716392"), boost::lexical_cast("-7.32690333335485473282043083732510305617086761800316899520505182249948309741"), boost::lexical_cast("3.64917468625530775745714112854788870052100478150662596792140805409798695237"), boost::lexical_cast("-1.42166466666012357755455417666976389843036696424169510073074551625991444526"), boost::lexical_cast("0.909833928139848029659705433844716551575919061966592740387936617767990646124"), boost::lexical_cast("-0.368463810900818519321280729699948238382245337243194077152888098658300603538"), boost::lexical_cast("-0.0184540534902747235287786613095163827842721391935005620122745696525182529649"), boost::lexical_cast("0.0360088322080320960591978261837204402906245566453303385097283622763009148578"), boost::lexical_cast("-0.00185541777531833871298150644744023226659198738569918082665820219229654776018"), boost::lexical_cast("-0.0000126389799887751449655010004416467695567661727273854980326583025983179615470"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.195382840714008222445649562861088516286064981461948780814133345930973823658"), boost::lexical_cast("-1.23697417270756070794757091967677027603167042250757849222269393098384194621"), boost::lexical_cast("3.16010706621130486269935853293254242082033173364580217315573625619258790152"), boost::lexical_cast("-4.05044411344282111665932979112008908801732860080823387948554260440261464757"), boost::lexical_cast("2.63839076497291256523926291558126191854618618017387332992219855643874357679"), boost::lexical_cast("-1.04623697741796683485007131051068458751031503463108641697374490811821670148"), boost::lexical_cast("1.00994767886559314051425312348881627025613387213269219272738325207774312849"), boost::lexical_cast("-1.08643876010341497975910071082821695937290873893825930817786907767606917664"), boost::lexical_cast("0.427671456581458673009899734932815948658546455375010876404838027129297913818"), boost::lexical_cast("-0.0268300278357648758353382533868083591820649404851508751125983578913516081871"), boost::lexical_cast("0.0637942285073089320624911876442649124426662264770688199203469027353144526797"), boost::lexical_cast("-0.0400500997044024766957707475186007575121602332713762255038636186221048809222"), boost::lexical_cast("-0.0242253375185620584577236293255475747352363289859909376495538304199524801451"), boost::lexical_cast("0.0181366732290110494820691728220505559010664322036613445274186399424581173253"), boost::lexical_cast("-0.00220246839966366946271442320741368580934032927301220467330879016842440794250"), boost::lexical_cast("-0.0000287519514407257853644446887092547399712525693691776728798621645433043384651"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 10) { if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0f, 0x1.12cb0ap-5f, 0x1.4e2c28p-1f, 0x1.1c4636p-1f, -0x1.85d2eep-2f, 0x1.9e3daep-3f, -0x1.494bcp-4f, 0x1.1d23ep-6f, 0x1.d4ed16p-10f, -0x1.2885ecp-9f, 0x1.94f202p-12f, 0x1.44e94ep-14f, -0x1.b37dfap-16f, 0x1.403906p-24f, 0x1.c9437p-24f, -0x1.58dbb8p-28f, 0x1.db3584p-37f, 0x1.afee7cp-44f, -0x1.098874p-59f, 0x0p+0f}; + return {0x0p+0f, 0x1.12cb0ap-5f, 0x1.4e2c28p-1f, 0x1.1c4636p-1f, -0x1.85d2eep-2f, 0x1.9e3daep-3f, -0x1.494bcp-4f, 0x1.1d23ep-6f, 0x1.d4ed16p-10f, -0x1.2885ecp-9f, 0x1.94f202p-12f, 0x1.44e94ep-14f, -0x1.b37dfap-16f, 0x1.403906p-24f, 0x1.c9437p-24f, -0x1.58dbb8p-28f, 0x1.db3584p-37f, 0x1.afee7cp-44f, -0x1.098874p-59f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.43cfccp-3f, 0x1.f5f9c2p-1f, -0x1.94bc28p+0f, 0x1.61584ep-1f, -0x1.a2cb68p-2f, 0x1.eef0eap-3f, -0x1.ac223p-4f, 0x1.c84ec2p-6f, -0x1.213456p-8f, 0x1.2c315ap-10f, -0x1.f37546p-12f, 0x1.ce036p-15f, 0x1.06ba9ap-17f, 0x1.2eea96p-21f, 0x1.f125fap-26f, -0x1.51db7ap-33f, -0x1.3ced9ep-40f, 0x1.85b824p-55f, -0x0p+0f}; + return {0x0p+0f, 0x1.43cfccp-3f, 0x1.f5f9c2p-1f, -0x1.94bc28p+0f, 0x1.61584ep-1f, -0x1.a2cb68p-2f, 0x1.eef0eap-3f, -0x1.ac223p-4f, 0x1.c84ec2p-6f, -0x1.213456p-8f, 0x1.2c315ap-10f, -0x1.f37546p-12f, 0x1.ce036p-15f, 0x1.06ba9ap-17f, 0x1.2eea96p-21f, 0x1.f125fap-26f, -0x1.51db7ap-33f, -0x1.3ced9ep-40f, 0x1.85b824p-55f, 0x0p+0f}; } if constexpr (order == 2) { return {0x0p+0f, 0x1.2d6cb8p-1f, -0x1.01b00cp-2f, -0x1.0fd09ap+1f, 0x1.8bd77ap+1f, -0x1.c8684ep+0f, 0x1.6e6d86p-2f, 0x1.86e852p-2f, -0x1.9dcbe6p-2f, 0x1.55c762p-3f, -0x1.35a482p-6f, -0x1.51b88cp-7f, 0x1.076728p-8f, -0x1.67961ap-12f, -0x1.2b4a08p-15f, 0x1.bb4b6cp-19f, 0x1.3f418cp-28f, -0x1.0d99c2p-32f, 0x1.4b9c06p-46f, 0x0p+0f}; @@ -668,10 +816,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.f3cda2p+1f, -0x1.9eeda2p+4f, 0x1.260fdap+6f, -0x1.d673d8p+6f, 0x1.f01b3p+6f, -0x1.addb2cp+6f, 0x1.7db87cp+6f, -0x1.3f986p+6f, 0x1.ae7316p+5f, -0x1.fb5cc4p+4f, 0x1.259afcp+4f, -0x1.fe186ep+2f, 0x1.4d0298p+0f, 0x1.a1f0a6p-2f, -0x1.40c0aep-3f, 0x1.ba72fap-9f, 0x1.c193f2p-13f, -0x1.16b49ap-22f, 0x0p+0f}; } if constexpr (order == 7) { - return {0x0p+0f, 0x1.3586dap+1f, -0x1.08fa64p+4f, 0x1.7c41fp+5f, -0x1.276b64p+6f, 0x1.14f1dp+6f, -0x1.83d54ap+5f, 0x1.4053c8p+5f, -0x1.209b54p+5f, 0x1.657834p+4f, -0x1.2ddf68p+3f, 0x1.38745p+2f, -0x1.4065c2p+1f, 0x1.6763c6p-4f, 0x1.181d4ep-1f, -0x1.87564p-3f, 0x1.843d22p-7f, 0x1.52be3cp-11f, -0x1.a79c62p-20f, -0x0p+0f}; + return {0x0p+0f, 0x1.3586dap+1f, -0x1.08fa64p+4f, 0x1.7c41fp+5f, -0x1.276b64p+6f, 0x1.14f1dp+6f, -0x1.83d54ap+5f, 0x1.4053c8p+5f, -0x1.209b54p+5f, 0x1.657834p+4f, -0x1.2ddf68p+3f, 0x1.38745p+2f, -0x1.4065c2p+1f, 0x1.6763c6p-4f, 0x1.181d4ep-1f, -0x1.87564p-3f, 0x1.843d22p-7f, 0x1.52be3cp-11f, -0x1.a79c62p-20f, 0x0p+0f}; } if constexpr (order == 8) { - return {0x0p+0f, 0x1.7a3cf4p+0f, -0x1.48b25ep+3f, 0x1.cbd932p+4f, -0x1.37885ep+5f, 0x1.4db4fcp+4f, 0x1.74ac2ep+2f, -0x1.11ca3p+3f, 0x1.9fa6aap-4f, -0x1.8ceb32p+2f, 0x1.e686e4p+3f, -0x1.7e0b78p+3f, 0x1.7e1a34p+2f, -0x1.247b58p+2f, 0x1.b8a4e2p+1f, -0x1.4f17d6p+0f, 0x1.4b4084p-3f, 0x1.726478p-7f, -0x1.d74fd6p-15f, -0x0p+0f}; + return {0x0p+0f, 0x1.7a3cf4p+0f, -0x1.48b25ep+3f, 0x1.cbd932p+4f, -0x1.37885ep+5f, 0x1.4db4fcp+4f, 0x1.74ac2ep+2f, -0x1.11ca3p+3f, 0x1.9fa6aap-4f, -0x1.8ceb32p+2f, 0x1.e686e4p+3f, -0x1.7e0b78p+3f, 0x1.7e1a34p+2f, -0x1.247b58p+2f, 0x1.b8a4e2p+1f, -0x1.4f17d6p+0f, 0x1.4b4084p-3f, 0x1.726478p-7f, -0x1.d74fd6p-15f, 0x0p+0f}; } if constexpr (order == 9) { return {0x0p+0f, 0x1.f6438ap-4f, -0x1.b7ba92p-1f, 0x1.3f509cp+1f, -0x1.eac616p+1f, 0x1.ae9244p+1f, -0x1.00d5dp+1f, 0x1.9413f4p+0f, -0x1.9bd984p+0f, 0x1.16aae2p+0f, -0x1.158768p-1f, 0x1.8145e4p-2f, -0x1.faf556p-3f, 0x1.8ec972p-4f, -0x1.49980ep-5f, 0x1.5730c4p-6f, -0x1.0952d6p-8f, -0x1.ce071ep-12f, 0x1.30a436p-18f, -0x0p+0f}; @@ -679,10 +827,10 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0, 0x1.12cb0a33640b5p-5, 0x1.4e2c27be21e0ep-1, 0x1.1c4636ef189edp-1, -0x1.85d2edb33e46ep-2, 0x1.9e3dada7662aap-3, -0x1.494bbf8e53bfcp-4, 0x1.1d23df75685c9p-6, 0x1.d4ed15a068488p-10, -0x1.2885ec2406341p-9, 0x1.94f202846521cp-12, 0x1.44e94de53f6f6p-14, -0x1.b37df99b75f09p-16, 0x1.403905df41d32p-24, 0x1.c94370d7ecc92p-24, -0x1.58dbb791a7fb7p-28, 0x1.db358382953c4p-37, 0x1.afee7cd299cd6p-44, -0x1.0988745ca3ec4p-59, 0x0p+0}; + return {0x0p+0, 0x1.12cb0a33640b5p-5, 0x1.4e2c27be21e0ep-1, 0x1.1c4636ef189edp-1, -0x1.85d2edb33e46ep-2, 0x1.9e3dada7662aap-3, -0x1.494bbf8e53bfcp-4, 0x1.1d23df75685c9p-6, 0x1.d4ed15a068488p-10, -0x1.2885ec2406341p-9, 0x1.94f202846521cp-12, 0x1.44e94de53f6f6p-14, -0x1.b37df99b75f09p-16, 0x1.403905df41d32p-24, 0x1.c94370d7ecc92p-24, -0x1.58dbb791a7fb7p-28, 0x1.db358382953c4p-37, 0x1.afee7cd299cd6p-44, -0x1.0988745ca3ec4p-59, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.43cfcb9d73923p-3, 0x1.f5f9c20090df3p-1, -0x1.94bc27297b9f9p+0, 0x1.61584eb9fe3a6p-1, -0x1.a2cb67ff996a9p-2, 0x1.eef0eaaf4989ep-3, -0x1.ac22308c89e82p-4, 0x1.c84ec23c8cdbep-6, -0x1.213456d8479d6p-8, 0x1.2c315a17e4064p-10, -0x1.f375455c5c9e6p-12, 0x1.ce035ff90a79bp-15, 0x1.06ba9aa22e87cp-17, 0x1.2eea964fb1e8p-21, 0x1.f125f98e34b08p-26, -0x1.51db791710beap-33, -0x1.3ced9d37da5d3p-40, 0x1.85b82452d9269p-55, -0x0p+0}; + return {0x0p+0, 0x1.43cfcb9d73923p-3, 0x1.f5f9c20090df3p-1, -0x1.94bc27297b9f9p+0, 0x1.61584eb9fe3a6p-1, -0x1.a2cb67ff996a9p-2, 0x1.eef0eaaf4989ep-3, -0x1.ac22308c89e82p-4, 0x1.c84ec23c8cdbep-6, -0x1.213456d8479d6p-8, 0x1.2c315a17e4064p-10, -0x1.f375455c5c9e6p-12, 0x1.ce035ff90a79bp-15, 0x1.06ba9aa22e87cp-17, 0x1.2eea964fb1e8p-21, 0x1.f125f98e34b08p-26, -0x1.51db791710beap-33, -0x1.3ced9d37da5d3p-40, 0x1.85b82452d9269p-55, 0x0p+0}; } if constexpr (order == 2) { return {0x0p+0, 0x1.2d6cb779664d4p-1, -0x1.01b00cc8d5d06p-2, -0x1.0fd0995df5aa3p+1, 0x1.8bd77a675e828p+1, -0x1.c8684eac579b4p+0, 0x1.6e6d859b2e73p-2, 0x1.86e851ba85835p-2, -0x1.9dcbe6db37906p-2, 0x1.55c762fd5a0dfp-3, -0x1.35a481158ac34p-6, -0x1.51b88ceed7adep-7, 0x1.0767285c8f106p-8, -0x1.67961ae7bb9ap-12, -0x1.2b4a0836ed60bp-15, 0x1.bb4b6c6c9a6fbp-19, 0x1.3f418b80d3d45p-28, -0x1.0d99c100eff2ep-32, 0x1.4b9c0643323fbp-46, 0x0p+0}; @@ -700,10 +848,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.f3cda2f9b1354p+1, -0x1.9eeda12641b62p+4, 0x1.260fdaadd19ebp+6, -0x1.d673d80eeade5p+6, 0x1.f01b2fa154d03p+6, -0x1.addb2c4ad791ep+6, 0x1.7db87bda6fdf9p+6, -0x1.3f9860f6c4906p+6, 0x1.ae731643e9199p+5, -0x1.fb5cc3351ebc1p+4, 0x1.259afcbb8804dp+4, -0x1.fe186e46030ap+2, 0x1.4d0298c218927p+0, 0x1.a1f0a66406a12p-2, -0x1.40c0addfd8554p-3, 0x1.ba72fac37f088p-9, 0x1.c193f16bb678ep-13, -0x1.16b4995bb4f07p-22, 0x0p+0}; } if constexpr (order == 7) { - return {0x0p+0, 0x1.3586d9a9e0e3ep+1, -0x1.08fa63342ecc2p+4, 0x1.7c41f01d6960dp+5, -0x1.276b64d22e135p+6, 0x1.14f1cf74869cp+6, -0x1.83d54ac636b82p+5, 0x1.4053c8a2c8d3p+5, -0x1.209b538b18df2p+5, 0x1.65783340b3783p+4, -0x1.2ddf670e51dfdp+3, 0x1.38744fdae2125p+2, -0x1.4065c212ba5cp+1, 0x1.6763c5d11b775p-4, 0x1.181d4d676ea1fp-1, -0x1.87564028831fcp-3, 0x1.843d22529bb4ap-7, 0x1.52be3b0b8c7afp-11, -0x1.a79c626c8654fp-20, -0x0p+0}; + return {0x0p+0, 0x1.3586d9a9e0e3ep+1, -0x1.08fa63342ecc2p+4, 0x1.7c41f01d6960dp+5, -0x1.276b64d22e135p+6, 0x1.14f1cf74869cp+6, -0x1.83d54ac636b82p+5, 0x1.4053c8a2c8d3p+5, -0x1.209b538b18df2p+5, 0x1.65783340b3783p+4, -0x1.2ddf670e51dfdp+3, 0x1.38744fdae2125p+2, -0x1.4065c212ba5cp+1, 0x1.6763c5d11b775p-4, 0x1.181d4d676ea1fp-1, -0x1.87564028831fcp-3, 0x1.843d22529bb4ap-7, 0x1.52be3b0b8c7afp-11, -0x1.a79c626c8654fp-20, 0x0p+0}; } if constexpr (order == 8) { - return {0x0p+0, 0x1.7a3cf471120ecp+0, -0x1.48b25e52d274bp+3, 0x1.cbd93276e7d59p+4, -0x1.37885d5242031p+5, 0x1.4db4fb7a5ecdcp+4, 0x1.74ac2dca21f56p+2, -0x1.11ca2f9f0b7dp+3, 0x1.9fa6aaf0c8d98p-4, -0x1.8ceb3288570cdp+2, 0x1.e686e3fbc3fbfp+3, -0x1.7e0b780d60232p+3, 0x1.7e1a3482e160cp+2, -0x1.247b57131543cp+2, 0x1.b8a4e1c96768dp+1, -0x1.4f17d502240a9p+0, 0x1.4b408438ac869p-3, 0x1.7264788c9473ep-7, -0x1.d74fd6a021548p-15, -0x0p+0}; + return {0x0p+0, 0x1.7a3cf471120ecp+0, -0x1.48b25e52d274bp+3, 0x1.cbd93276e7d59p+4, -0x1.37885d5242031p+5, 0x1.4db4fb7a5ecdcp+4, 0x1.74ac2dca21f56p+2, -0x1.11ca2f9f0b7dp+3, 0x1.9fa6aaf0c8d98p-4, -0x1.8ceb3288570cdp+2, 0x1.e686e3fbc3fbfp+3, -0x1.7e0b780d60232p+3, 0x1.7e1a3482e160cp+2, -0x1.247b57131543cp+2, 0x1.b8a4e1c96768dp+1, -0x1.4f17d502240a9p+0, 0x1.4b408438ac869p-3, 0x1.7264788c9473ep-7, -0x1.d74fd6a021548p-15, 0x0p+0}; } if constexpr (order == 9) { return {0x0p+0, 0x1.f6438a3a8846p-4, -0x1.b7ba9255f9c78p-1, 0x1.3f509b3842149p+1, -0x1.eac616f0d4f87p+1, 0x1.ae9244fef585dp+1, -0x1.00d5d03220f3cp+1, 0x1.9413f3bab26fdp+0, -0x1.9bd9847a10dd5p+0, 0x1.16aae27d18a67p+0, -0x1.1587682f48216p-1, 0x1.8145e3cc3cfccp-2, -0x1.faf556e68970ep-3, 0x1.8ec972676b06bp-4, -0x1.49980ed40883dp-5, 0x1.5730c48bae56ap-6, -0x1.0952d6b855c64p-8, -0x1.ce071dd8df1efp-12, 0x1.30a4361eb25b4p-18, -0x0p+0}; @@ -711,10 +859,10 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0L, 0x8.9658519b205ab72p-8L, 0xa.71613df10f0723dp-4L, 0x8.e231b778c4f6662p-4L, -0xc.2e976d99f236ef3p-5L, 0xc.f1ed6d3b3154c33p-6L, -0xa.4a5dfc729dfe012p-7L, 0x8.e91efbab42e4488p-9L, 0xe.a768ad03424408ap-13L, -0x9.442f612031a0acp-12L, 0xc.a7901423290dc7ep-15L, 0xa.274a6f29fb7b195p-17L, -0xd.9befccdbaf8457bp-19L, 0xa.01c82efa0e991ep-27L, 0xe.4a1b86bf6648ca3p-27L, -0xa.c6ddbc8d3fdb61fp-31L, 0xe.d9ac1c14a9e22dfp-40L, 0xd.7f73e694ce6b23p-47L, -0x8.4c43a2e51f61f4ap-62L, 0x0p+0L}; + return {0x0p+0L, 0x8.9658519b205ab72p-8L, 0xa.71613df10f0723dp-4L, 0x8.e231b778c4f6662p-4L, -0xc.2e976d99f236ef3p-5L, 0xc.f1ed6d3b3154c33p-6L, -0xa.4a5dfc729dfe012p-7L, 0x8.e91efbab42e4488p-9L, 0xe.a768ad03424408ap-13L, -0x9.442f612031a0acp-12L, 0xc.a7901423290dc7ep-15L, 0xa.274a6f29fb7b195p-17L, -0xd.9befccdbaf8457bp-19L, 0xa.01c82efa0e991ep-27L, 0xe.4a1b86bf6648ca3p-27L, -0xa.c6ddbc8d3fdb61fp-31L, 0xe.d9ac1c14a9e22dfp-40L, 0xd.7f73e694ce6b23p-47L, -0x8.4c43a2e51f61f4ap-62L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xa.1e7e5ceb9c91909p-6L, 0xf.afce100486f966ap-4L, -0xc.a5e1394bdcfcb6dp-3L, 0xb.0ac275cff1d33d6p-4L, -0xd.165b3ffccb5480ap-5L, 0xf.7787557a4c4f14ep-6L, -0xd.611184644f4100cp-7L, 0xe.427611e466df078p-9L, -0x9.09a2b6c23cead05p-11L, 0x9.618ad0bf2031fa3p-13L, -0xf.9baa2ae2e4f30dfp-15L, 0xe.701affc853cdb21p-18L, 0x8.35d4d511743e237p-20L, 0x9.7754b27d8f401bap-24L, 0xf.892fcc71a583f65p-29L, -0xa.8edbc8b885f4c32p-36L, -0x9.e76ce9bed2e946cp-43L, 0xc.2dc12296c934a42p-58L, -0x0p+0L}; + return {0x0p+0L, 0xa.1e7e5ceb9c91909p-6L, 0xf.afce100486f966ap-4L, -0xc.a5e1394bdcfcb6dp-3L, 0xb.0ac275cff1d33d6p-4L, -0xd.165b3ffccb5480ap-5L, 0xf.7787557a4c4f14ep-6L, -0xd.611184644f4100cp-7L, 0xe.427611e466df078p-9L, -0x9.09a2b6c23cead05p-11L, 0x9.618ad0bf2031fa3p-13L, -0xf.9baa2ae2e4f30dfp-15L, 0xe.701affc853cdb21p-18L, 0x8.35d4d511743e237p-20L, 0x9.7754b27d8f401bap-24L, 0xf.892fcc71a583f65p-29L, -0xa.8edbc8b885f4c32p-36L, -0x9.e76ce9bed2e946cp-43L, 0xc.2dc12296c934a42p-58L, 0x0p+0L}; } if constexpr (order == 2) { return {0x0p+0L, 0x9.6b65bbcb326a224p-4L, -0x8.0d806646ae83286p-5L, -0x8.7e84caefad51526p-2L, 0xc.5ebbd33af4141bap-2L, -0xe.43427562bcd9f08p-3L, 0xb.736c2cd97397c01p-5L, 0xc.37428dd42c1a763p-5L, -0xc.ee5f36d9bc83386p-5L, 0xa.ae3b17ead06fb26p-6L, -0x9.ad2408ac5619da4p-9L, -0xa.8dc46776bd6ee4dp-10L, 0x8.3b3942e4788322ap-11L, -0xb.3cb0d73ddccfdfep-15L, -0x9.5a5041b76b0571dp-18L, 0xd.da5b6364d37d7c6p-22L, 0x9.fa0c5c069ea261fp-31L, -0x8.6cce08077f97363p-35L, 0xa.5ce0321991fd8ep-49L, 0x0p+0L}; @@ -732,10 +880,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xf.9e6d17cd89aa012p-2L, -0xc.f76d09320db0f5ep+1L, 0x9.307ed56e8cf58f8p+3L, -0xe.b39ec07756f2504p+3L, 0xf.80d97d0aa681a95p+3L, -0xd.6ed96256bc8f10cp+3L, 0xb.edc3ded37efc53ap+3L, -0x9.fcc307b62482f39p+3L, 0xd.7398b21f48cc731p+2L, -0xf.dae619a8f5e0bb5p+1L, 0x9.2cd7e5dc4026b75p+1L, -0xf.f0c37230184fee7p-1L, 0xa.6814c610c493aa3p-3L, 0xd.0f8533203509157p-5L, -0xa.06056efec2aa1d8p-6L, 0xd.d397d61bf843e3dp-12L, 0xe.0c9f8b5db3c72d8p-16L, -0x8.b5a4cadda783993p-25L, 0x0p+0L}; } if constexpr (order == 7) { - return {0x0p+0L, 0x9.ac36cd4f071eccfp-2L, -0x8.47d319a17660e21p+1L, 0xb.e20f80eb4b065edp+2L, -0x9.3b5b2691709a7f2p+3L, 0x8.a78e7ba434e03bep+3L, -0xc.1eaa5631b5c1221p+2L, 0xa.029e45164697e35p+2L, -0x9.04da9c58c6f9312p+2L, 0xb.2bc19a059bc163fp+1L, -0x9.6efb38728efe53fp+0L, 0x9.c3a27ed71092bccp-1L, -0xa.032e1095d2e022bp-2L, 0xb.3b1e2e88dbba717p-7L, 0x8.c0ea6b3b750f81fp-4L, -0xc.3ab2014418fdea7p-6L, 0xc.21e91294dda4d8cp-10L, 0xa.95f1d85c63d7aadp-14L, -0xd.3ce3136432a75eep-23L, -0x0p+0L}; + return {0x0p+0L, 0x9.ac36cd4f071eccfp-2L, -0x8.47d319a17660e21p+1L, 0xb.e20f80eb4b065edp+2L, -0x9.3b5b2691709a7f2p+3L, 0x8.a78e7ba434e03bep+3L, -0xc.1eaa5631b5c1221p+2L, 0xa.029e45164697e35p+2L, -0x9.04da9c58c6f9312p+2L, 0xb.2bc19a059bc163fp+1L, -0x9.6efb38728efe53fp+0L, 0x9.c3a27ed71092bccp-1L, -0xa.032e1095d2e022bp-2L, 0xb.3b1e2e88dbba717p-7L, 0x8.c0ea6b3b750f81fp-4L, -0xc.3ab2014418fdea7p-6L, 0xc.21e91294dda4d8cp-10L, 0xa.95f1d85c63d7aadp-14L, -0xd.3ce3136432a75eep-23L, 0x0p+0L}; } if constexpr (order == 8) { - return {0x0p+0L, 0xb.d1e7a38890760ccp-3L, -0xa.4592f29693a58f2p+0L, 0xe.5ec993b73eacb21p+1L, -0x9.bc42ea921018403p+2L, 0xa.6da7dbd2f66dc91p+1L, 0xb.a5616e510faadd9p-1L, -0x8.8e517cf85be82f9p+0L, 0xc.fd35578646cc028p-7L, -0xc.67599442b866996p-1L, 0xf.34371fde1fdf9acp+0L, -0xb.f05bc06b0118d26p+0L, 0xb.f0d1a4170b05fe8p-1L, -0x9.23dab898aa1de5fp-1L, 0xd.c5270e4b3b4644bp-2L, -0xa.78bea8112054738p-3L, 0xa.5a0421c564344a9p-6L, 0xb.9323c464a39ee53p-10L, -0xe.ba7eb5010aa3e4p-18L, -0x0p+0L}; + return {0x0p+0L, 0xb.d1e7a38890760ccp-3L, -0xa.4592f29693a58f2p+0L, 0xe.5ec993b73eacb21p+1L, -0x9.bc42ea921018403p+2L, 0xa.6da7dbd2f66dc91p+1L, 0xb.a5616e510faadd9p-1L, -0x8.8e517cf85be82f9p+0L, 0xc.fd35578646cc028p-7L, -0xc.67599442b866996p-1L, 0xf.34371fde1fdf9acp+0L, -0xb.f05bc06b0118d26p+0L, 0xb.f0d1a4170b05fe8p-1L, -0x9.23dab898aa1de5fp-1L, 0xd.c5270e4b3b4644bp-2L, -0xa.78bea8112054738p-3L, 0xa.5a0421c564344a9p-6L, 0xb.9323c464a39ee53p-10L, -0xe.ba7eb5010aa3e4p-18L, 0x0p+0L}; } if constexpr (order == 9) { return {0x0p+0L, 0xf.b21c51d44230049p-7L, -0xd.bdd492afce3bd22p-4L, 0x9.fa84d9c210a45adp-2L, -0xf.5630b786a7c34dfp-2L, 0xd.749227f7ac2e953p-2L, -0x8.06ae8191079dde4p-2L, 0xc.a09f9dd5937e42dp-3L, -0xc.decc23d086ea9cp-3L, 0x8.b55713e8c533b1cp-3L, -0x8.ac3b417a410ae11p-4L, 0xc.0a2f1e61e7e5e62p-5L, -0xf.d7aab7344b86da8p-6L, 0xc.764b933b583557ap-7L, -0xa.4cc076a0441e56ep-8L, 0xa.b986245d72b5275p-9L, -0x8.4a96b5c2ae31c5dp-11L, -0xe.7038eec6f8f774fp-15L, 0x9.8521b0f592d9c7fp-21L, -0x0p+0L}; @@ -744,54 +892,86 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.12cb0a33640b56e423474a1328fcp-5Q, 0x1.4e2c27be21e0e479b88ad485160cp-1Q, 0x1.1c4636ef189eccc399682014d9c9p-1Q, -0x1.85d2edb33e46dde58a5a504a9aap-2Q, 0x1.9e3dada7662a9865be6b99b2427ep-3Q, -0x1.494bbf8e53bfc023fe7e0915ab57p-4Q, 0x1.1d23df75685c890f2df5ab229b8bp-6Q, 0x1.d4ed15a06848811344377f87f82cp-10Q, -0x1.2885ec240634157f42540c2ec5a5p-9Q, 0x1.94f202846521b8fb6dee9352c083p-12Q, 0x1.44e94de53f6f632a67cbb5854d2p-14Q, -0x1.b37df99b75f08af621654dd8f548p-16Q, 0x1.403905df41d323c0c33072aaf467p-24Q, 0x1.c94370d7ecc9194547661e1cf7bbp-24Q, -0x1.58dbb791a7fb6c3e33eb2a850b1bp-28Q, 0x1.db358382953c45bea25d9891f3a2p-37Q, 0x1.afee7cd299cd64600d2193c416e5p-44Q, -0x1.0988745ca3ec3e945e33c4d42e0fp-59Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.12cb0a33640b56e423474a1328bap-5Q, 0x1.4e2c27be21e0e479b88ad4851607p-1Q, 0x1.1c4636ef189eccc399682014d9d6p-1Q, -0x1.85d2edb33e46dde58a5a504a9ab1p-2Q, 0x1.9e3dada7662a9865be6b99b24294p-3Q, -0x1.494bbf8e53bfc023fe7e0915ab63p-4Q, 0x1.1d23df75685c890f2df5ab229b96p-6Q, 0x1.d4ed15a06848811344377f87f7eap-10Q, -0x1.2885ec240634157f42540c2ec5a5p-9Q, 0x1.94f202846521b8fb6dee9352c088p-12Q, 0x1.44e94de53f6f632a67cbb5854d1fp-14Q, -0x1.b37df99b75f08af621654dd8f54ep-16Q, 0x1.403905df41d323c0c33072aaf3cp-24Q, 0x1.c94370d7ecc9194547661e1cf7cp-24Q, -0x1.58dbb791a7fb6c3e33eb2a850b1bp-28Q, 0x1.db358382953c45bea25d9891f3bcp-37Q, 0x1.afee7cd299cd64600d2193c416f4p-44Q, -0x1.0988745ca3ec3e945e33c4d42e22p-59Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.43cfcb9d739232114ccf7b42f288p-3Q, 0x1.f5f9c20090df2cd39669639ec82fp-1Q, -0x1.94bc27297b9f96d98ca06b8b7823p+0Q, 0x1.61584eb9fe3a67acec590408bcaep-1Q, -0x1.a2cb67ff996a90130726bb55186ep-2Q, 0x1.eef0eaaf4989e29be4ba95e2f142p-3Q, -0x1.ac22308c89e820172f07afea77ffp-4Q, 0x1.c84ec23c8cdbe0f0d252ca4a6014p-6Q, -0x1.213456d8479d5a0a002e8a35429fp-8Q, 0x1.2c315a17e4063f457d1b74aaa599p-10Q, -0x1.f375455c5c9e61be4fa670796ca9p-12Q, 0x1.ce035ff90a79b6418f9714e01ff9p-15Q, 0x1.06ba9aa22e87c46e9b5b517bfa1bp-17Q, 0x1.2eea964fb1e803735b7cbdec44b7p-21Q, 0x1.f125f98e34b07ec90a3117922e68p-26Q, -0x1.51db791710be9863d69c55fb8fa2p-33Q, -0x1.3ced9d37da5d28d7002692ae72b6p-40Q, 0x1.85b82452d92694835d294f84ab3ep-55Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.43cfcb9d739232114ccf7b42f286p-3Q, 0x1.f5f9c20090df2cd39669639ec7fdp-1Q, -0x1.94bc27297b9f96d98ca06b8b780fp+0Q, 0x1.61584eb9fe3a67acec590408bca7p-1Q, -0x1.a2cb67ff996a90130726bb551867p-2Q, 0x1.eef0eaaf4989e29be4ba95e2f12bp-3Q, -0x1.ac22308c89e820172f07afea77d8p-4Q, 0x1.c84ec23c8cdbe0f0d252ca4a5fdap-6Q, -0x1.213456d8479d5a0a002e8a35424cp-8Q, 0x1.2c315a17e4063f457d1b74aaa54fp-10Q, -0x1.f375455c5c9e61be4fa670796c8cp-12Q, 0x1.ce035ff90a79b6418f9714e02027p-15Q, 0x1.06ba9aa22e87c46e9b5b517bf9e8p-17Q, 0x1.2eea964fb1e803735b7cbdec445fp-21Q, 0x1.f125f98e34b07ec90a3117922ea9p-26Q, -0x1.51db791710be9863d69c55fb8f8fp-33Q, -0x1.3ced9d37da5d28d7002692ae731fp-40Q, 0x1.85b82452d92694835d294f84ac62p-55Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.2d6cb779664d44484073db45451fp-1Q, -0x1.01b00cc8d5d0650bb7d9e87582f1p-2Q, -0x1.0fd0995df5aa2a4c5f39f931817fp+1Q, 0x1.8bd77a675e82837408b645325c9ap+1Q, -0x1.c8684eac579b3e1019c502de86a6p+0Q, 0x1.6e6d859b2e72f80278552877475p-2Q, 0x1.86e851ba85834ec58a127f16fee8p-2Q, -0x1.9dcbe6db3790670c84be0eec3058p-2Q, 0x1.55c762fd5a0df64b9c06acd53251p-3Q, -0x1.35a481158ac33b4716b6e91c54eep-6Q, -0x1.51b88ceed7addc9a97168ddbee02p-7Q, 0x1.0767285c8f10645316c4c221faa4p-8Q, -0x1.67961ae7bb99fbfcc0d26144bd1bp-12Q, -0x1.2b4a0836ed60ae3a1490ad53ccb1p-15Q, 0x1.bb4b6c6c9a6faf8c7dd84be23d19p-19Q, 0x1.3f418b80d3d44c3e61fe90bb84e6p-28Q, -0x1.0d99c100eff2e6c61779a48505a8p-32Q, 0x1.4b9c0643323fb1c0ce2d07b0b0abp-46Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.2d6cb779664d44484073db45447cp-1Q, -0x1.01b00cc8d5d0650bb7d9e8758312p-2Q, -0x1.0fd0995df5aa2a4c5f39f93180c2p+1Q, 0x1.8bd77a675e82837408b645325bb2p+1Q, -0x1.c8684eac579b3e1019c502de8594p+0Q, 0x1.6e6d859b2e72f80278552877464cp-2Q, 0x1.86e851ba85834ec58a127f16fe28p-2Q, -0x1.9dcbe6db3790670c84be0eec2f7fp-2Q, 0x1.55c762fd5a0df64b9c06acd53195p-3Q, -0x1.35a481158ac33b4716b6e91c5435p-6Q, -0x1.51b88ceed7addc9a97168ddbed49p-7Q, 0x1.0767285c8f10645316c4c221fa2p-8Q, -0x1.67961ae7bb99fbfcc0d26144bc53p-12Q, -0x1.2b4a0836ed60ae3a1490ad53cc1ep-15Q, 0x1.bb4b6c6c9a6faf8c7dd84be23c4bp-19Q, 0x1.3f418b80d3d44c3e61fe90bb843bp-28Q, -0x1.0d99c100eff2e6c61779a485054cp-32Q, 0x1.4b9c0643323fb1c0ce2d07b0b092p-46Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.a8dadfc02dd0428b41cd0c1bc321p+0Q, -0x1.8d688d31d04a4214094b65c4debbp+2Q, 0x1.317cc4a10faf3ff9c44aa0718d64p+3Q, -0x1.00fa12867f49132d26f6109f247ep+3Q, 0x1.9e984b48af59218135976f5867cdp+1Q, 0x1.0dcc3bbac5e0885ef946fb57406ap+1Q, -0x1.41a435a1df480f6b501eca709ce9p+2Q, 0x1.075a464fd9703954dc501fa92bp+2Q, -0x1.9984cb75bad50ddd23b7c6a93e49p+0Q, 0x1.9cf2e7196d1cbd2ef1ba36ca60f1p-5Q, 0x1.c915787e3612e2d3277f4d85346ap-3Q, -0x1.60b8b0c3b1138df4716646253fep-4Q, 0x1.324229742ef4416185466d935a63p-7Q, 0x1.dd5da666efa58ec47474db0b7be4p-11Q, -0x1.351528a4bd8176153593c8a5aa54p-13Q, -0x1.03c4250827b68f69b983f44799e9p-22Q, 0x1.77139f17861eb1acd308dc031a76p-26Q, -0x1.cd96fccfe9f0afba4ba09dac4612p-39Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.a8dadfc02dd0428b41cd0c1bb0afp+0Q, -0x1.8d688d31d04a4214094b65c4cddp+2Q, 0x1.317cc4a10faf3ff9c44aa07180dp+3Q, -0x1.00fa12867f49132d26f6109f1a1ep+3Q, 0x1.9e984b48af59218135976f585487p+1Q, 0x1.0dcc3bbac5e0885ef946fb573bd9p+1Q, -0x1.41a435a1df480f6b501eca7093bep+2Q, 0x1.075a464fd9703954dc501fa9230ap+2Q, -0x1.9984cb75bad50ddd23b7c6a931c3p+0Q, 0x1.9cf2e7196d1cbd2ef1ba36ca5473p-5Q, 0x1.c915787e3612e2d3277f4d8526a2p-3Q, -0x1.60b8b0c3b1138df4716646253571p-4Q, 0x1.324229742ef4416185466d935171p-7Q, 0x1.dd5da666efa58ec47474db0b6e86p-11Q, -0x1.351528a4bd8176153593c8a5a1a8p-13Q, -0x1.03c4250827b68f69b983f4479114p-22Q, 0x1.77139f17861eb1acd308dc031079p-26Q, -0x1.cd96fccfe9f0afba4ba09dac3a7dp-39Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.a04f8069ea8b4e447d853aa59d25p+1Q, -0x1.18f0a34d9f68e4d06a24b5ca38e6p+4Q, 0x1.4ce3831796a61ef6af32be9c5755p+5Q, -0x1.dc75f9b0b9a1041da91933798254p+5Q, 0x1.fdbc97313e6ed6865f9096b019f1p+5Q, -0x1.eefc0cdda4efa281b21fc8a20dabp+5Q, 0x1.b92a7c1b6a889c31c867c0d1a21p+5Q, -0x1.2299d502734c3c9b7e4c9a715a66p+5Q, 0x1.6502b707871df45089990b52d40bp+3Q, 0x1.11f33f4ede647d59a412fb3a4509p+2Q, -0x1.73b0a319e6889e9aa2e82f291565p+2Q, 0x1.244d452e7630092d6c490c8ed14ap+1Q, -0x1.35466c5650c61e120220d047deb3p-2Q, -0x1.fc20c8dd92f19b8d6ed30b21296p-6Q, 0x1.0d9c8b9d476f7d129de2a5d31814p-7Q, 0x1.a4010b80e5495d0ed9331143d19p-19Q, -0x1.49b0c99eb9c648511ea730b736bdp-19Q, 0x1.962a6dd57b7daa6dc5023a342508p-31Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.a04f8069ea8b4e447d853aa2b3fp+1Q, -0x1.18f0a34d9f68e4d06a24b5c8413dp+4Q, 0x1.4ce3831796a61ef6af32be9a023fp+5Q, -0x1.dc75f9b0b9a1041da91933762b9bp+5Q, 0x1.fdbc97313e6ed6865f9096ac8807p+5Q, -0x1.eefc0cdda4efa281b21fc89e970ap+5Q, 0x1.b92a7c1b6a889c31c867c0ce8c52p+5Q, -0x1.2299d502734c3c9b7e4c9a6f523fp+5Q, 0x1.6502b707871df45089990b5055fdp+3Q, 0x1.11f33f4ede647d59a412fb3857a3p+2Q, -0x1.73b0a319e6889e9aa2e82f2679b8p+2Q, 0x1.244d452e7630092d6c490c8cc448p+1Q, -0x1.35466c5650c61e120220d045b2f3p-2Q, -0x1.fc20c8dd92f19b8d6ed30b1d9872p-6Q, 0x1.0d9c8b9d476f7d129de2a5d13304p-7Q, 0x1.a4010b80e5495d0ed9331140ed28p-19Q, -0x1.49b0c99eb9c648511ea730b4e4dp-19Q, 0x1.962a6dd57b7daa6dc5023a314835p-31Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.55886d2f64380baeb961079552b9p+2Q, -0x1.09d95f1cede31fcd15d2c7ff10a6p+5Q, 0x1.505f98e4bf27766f2f4d3b847255p+6Q, -0x1.96ec354b303069fd664614814e6ep+6Q, 0x1.17b23075f8010224c348afc6cdeep+5Q, 0x1.fc17211fa4d6f3f6a3261645172p+5Q, -0x1.b35f4a36b31c3849a4f0629dcf72p+6Q, 0x1.d17f22f2480f88bf1a425e07fe7dp+6Q, -0x1.12118c5678b4d442de8a0eede2e7p+7Q, 0x1.207a74ca5ad8bfc2ee103b7b451ap+7Q, -0x1.934735f943481c7f74f56dd50a8cp+6Q, 0x1.3fa55ba9206e3812ee32da23b318p+5Q, -0x1.959601005ec548729558e21bc187p+2Q, -0x1.9505e84d98e613cfe4ec3f6e6e46p-1Q, 0x1.43d2632e32cd0df0bb4a95d5e374p-2Q, -0x1.38e017336cd0614a6ed2ffd6195cp-10Q, -0x1.968e83ac595b8c6d9c1729fe9a6bp-13Q, 0x1.f5ed4b124df3ad0700a32c83080bp-24Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.55886d2f64380baeb961078fa176p+2Q, -0x1.09d95f1cede31fcd15d2c7fab39ep+5Q, 0x1.505f98e4bf27766f2f4d3b7ea8ddp+6Q, -0x1.96ec354b303069fd664614786911p+6Q, 0x1.17b23075f8010224c348afb3ebb9p+5Q, 0x1.fc17211fa4d6f3f6a32616561c88p+5Q, -0x1.b35f4a36b31c3849a4f062a53c98p+6Q, 0x1.d17f22f2480f88bf1a425e0d999bp+6Q, -0x1.12118c5678b4d442de8a0eef777p+7Q, 0x1.207a74ca5ad8bfc2ee103b7bf96dp+7Q, -0x1.934735f943481c7f74f56dd5b187p+6Q, 0x1.3fa55ba9206e3812ee32da2442b6p+5Q, -0x1.959601005ec548729558e21c9eb1p+2Q, -0x1.9505e84d98e613cfe4ec3f6fdae5p-1Q, 0x1.43d2632e32cd0df0bb4a95d727cp-2Q, -0x1.38e017336cd0614a6ed2ffd943cap-10Q, -0x1.968e83ac595b8c6d9c172a00fddap-13Q, 0x1.f5ed4b124df3ad0700a32c86e4bbp-24Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.f3cda2f9b135402362018238b572p+1Q, -0x1.9eeda12641b61ebb7d840ed67404p+4Q, 0x1.260fdaadd19eb1efc078d802d296p+6Q, -0x1.d673d80eeade4a070ce0e70cb866p+6Q, 0x1.f01b2fa154d0352990b16aadcb37p+6Q, -0x1.addb2c4ad791e217324c7ab3e2p+6Q, 0x1.7db87bda6fdf8a74bb08213eb30cp+6Q, -0x1.3f9860f6c4905e7132b1781da9d9p+6Q, 0x1.ae731643e9198e62164858360f7bp+5Q, -0x1.fb5cc3351ebc176988bf64799f2ap+4Q, 0x1.259afcbb8804d6eae552ab39b9b8p+4Q, -0x1.fe186e460309fdcedab5ec39f27p+2Q, 0x1.4d0298c21892754606c3d8eb8426p+0Q, 0x1.a1f0a66406a122ae435ed98cb7f1p-2Q, -0x1.40c0addfd85543af466cc7e3fef1p-3Q, 0x1.ba72fac37f087c7aee39dd7f1012p-9Q, 0x1.c193f16bb678e5af6510cd5c2355p-13Q, -0x1.16b4995bb4f073263c20b5bede1p-22Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.f3cda2f9b135402362018230e37ap+1Q, -0x1.9eeda12641b61ebb7d840ecfaa6cp+4Q, 0x1.260fdaadd19eb1efc078d7fded1bp+6Q, -0x1.d673d80eeade4a070ce0e7052e5ep+6Q, 0x1.f01b2fa154d0352990b16aa70967p+6Q, -0x1.addb2c4ad791e217324c7aafb066p+6Q, 0x1.7db87bda6fdf8a74bb08213b9495p+6Q, -0x1.3f9860f6c4905e7132b1781ae693p+6Q, 0x1.ae731643e9198e621648583330d8p+5Q, -0x1.fb5cc3351ebc176988bf6478c6bp+4Q, 0x1.259afcbb8804d6eae552ab39c09p+4Q, -0x1.fe186e460309fdcedab5ec38f6a8p+2Q, 0x1.4d0298c21892754606c3d8ebb24fp+0Q, 0x1.a1f0a66406a122ae435ed98406f7p-2Q, -0x1.40c0addfd85543af466cc7de08d7p-3Q, 0x1.ba72fac37f087c7aee39dd6d7d9ep-9Q, 0x1.c193f16bb678e5af6510cd4d8f9fp-13Q, -0x1.16b4995bb4f073263c20b5b2b14bp-22Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.3586d9a9e0e3d99d2b93a0256171p+1Q, -0x1.08fa63342ecc1c41a46b366506c6p+4Q, 0x1.7c41f01d6960cbda171d22bf8adfp+5Q, -0x1.276b64d22e134fe3903178671e17p+6Q, 0x1.14f1cf74869c077b4ddd6015e432p+6Q, -0x1.83d54ac636b8244258f1e3dbaa06p+5Q, 0x1.4053c8a2c8d2fc6aef1621f86f1fp+5Q, -0x1.209b538b18df262448ee3cf880b8p+5Q, 0x1.65783340b3782c7d703e94c62d9ep+4Q, -0x1.2ddf670e51dfca7d85e8eebe7331p+3Q, 0x1.38744fdae212579791ea9e6fe9ebp+2Q, -0x1.4065c212ba5c0456783637883b7p+1Q, 0x1.6763c5d11b774e2d99bb556bddebp-4Q, 0x1.181d4d676ea1f03e7d8c57b474fp-1Q, -0x1.87564028831fbd4eb29dad94592bp-3Q, 0x1.843d22529bb49b17cf15d63953b5p-7Q, 0x1.52be3b0b8c7af55af9d914a987b4p-11Q, -0x1.a79c626c8654ebdb591ae56046e7p-20Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.3586d9a9e0e3d99d2b93a01af7d5p+1Q, -0x1.08fa63342ecc1c41a46b365c4c22p+4Q, 0x1.7c41f01d6960cbda171d22b314bap+5Q, -0x1.276b64d22e134fe39031785d1e73p+6Q, 0x1.14f1cf74869c077b4ddd600b6793p+6Q, -0x1.83d54ac636b8244258f1e3c9d507p+5Q, 0x1.4053c8a2c8d2fc6aef1621e8f43ep+5Q, -0x1.209b538b18df262448ee3cebbe29p+5Q, 0x1.65783340b3782c7d703e94b54e85p+4Q, -0x1.2ddf670e51dfca7d85e8eeab11aep+3Q, 0x1.38744fdae212579791ea9e59ba4ep+2Q, -0x1.4065c212ba5c0456783637741afcp+1Q, 0x1.6763c5d11b774e2d99bb54d3a752p-4Q, 0x1.181d4d676ea1f03e7d8c57b5965ap-1Q, -0x1.87564028831fbd4eb29dad95b0cfp-3Q, 0x1.843d22529bb49b17cf15d645bef3p-7Q, 0x1.52be3b0b8c7af55af9d914b56a01p-11Q, -0x1.a79c626c8654ebdb591ae5793d64p-20Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.7a3cf471120ec198713995bd540fp+0Q, -0x1.48b25e52d274b1e47c88655cec4bp+3Q, 0x1.cbd93276e7d596419b912e942e9bp+4Q, -0x1.37885d5242030806d66e5d6872f8p+5Q, 0x1.4db4fb7a5ecdb9227e88240cd0ebp+4Q, 0x1.74ac2dca21f55bb24886bcb3619p+2Q, -0x1.11ca2f9f0b7d05f1c1618e42e113p+3Q, 0x1.9fa6aaf0c8d980502f8417a8ec05p-4Q, -0x1.8ceb3288570cd32c2591a09c3995p+2Q, 0x1.e686e3fbc3fbf35811a68ef5ccfap+3Q, -0x1.7e0b780d60231a4c786ec6e1bf8dp+3Q, 0x1.7e1a3482e160bfcf5bb19766022ep+2Q, -0x1.247b57131543bcbee8b060f013c2p+2Q, 0x1.b8a4e1c96768c895a2f367776819p+1Q, -0x1.4f17d502240a8e6f55c9e0d7f0cfp+0Q, 0x1.4b408438ac8689521da23fc4a9bap-3Q, 0x1.7264788c9473dca575636e2ed518p-7Q, -0x1.d74fd6a021547c7f9f7dd3ce0b46p-15Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.7a3cf471120ec198713994eca41fp+0Q, -0x1.48b25e52d274b1e47c8864a7164p+3Q, 0x1.cbd93276e7d596419b912da6ea19p+4Q, -0x1.37885d5242030806d66e5cf9cc78p+5Q, 0x1.4db4fb7a5ecdb9227e8824c1b905p+4Q, 0x1.74ac2dca21f55bb24886b2e8488cp+2Q, -0x1.11ca2f9f0b7d05f1c16189874d5cp+3Q, 0x1.9fa6aaf0c8d980502f82ac3f1ed7p-4Q, -0x1.8ceb3288570cd32c25919a739d51p+2Q, 0x1.e686e3fbc3fbf35811a68b06fad4p+3Q, -0x1.7e0b780d60231a4c786ec3f17781p+3Q, 0x1.7e1a3482e160bfcf5bb1945be474p+2Q, -0x1.247b57131543bcbee8b05ee74f53p+2Q, 0x1.b8a4e1c96768c895a2f3649c4cc8p+1Q, -0x1.4f17d502240a8e6f55c9dea2c968p+0Q, 0x1.4b408438ac8689521da23d7beaedp-3Q, 0x1.7264788c9473dca575636b8d6c86p-7Q, -0x1.d74fd6a021547c7f9f7dd044fd0ep-15Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.f6438a3a88460091e0ea851f2c9bp-4Q, -0x1.b7ba9255f9c77a442c3315faffdep-1Q, 0x1.3f509b3842148b5acdb05e01c1ap+1Q, -0x1.eac616f0d4f869be16ce06dc94d2p+1Q, 0x1.ae9244fef585d2a56f1cb6a3721cp+1Q, -0x1.00d5d03220f3bbc8a51448af242cp+1Q, 0x1.9413f3bab26fc85ab60692f2dd27p+0Q, -0x1.9bd9847a10dd537f2de875e80d0ep+0Q, 0x1.16aae27d18a67638fdda8ca2a252p+0Q, -0x1.1587682f48215c21c42b36d7c2d1p-1Q, 0x1.8145e3cc3cfcbcc409c895e52cdp-2Q, -0x1.faf556e68970db4f5325d215482dp-3Q, 0x1.8ec972676b06aaf4a1909e62a833p-4Q, -0x1.49980ed40883cadc7b702f738062p-5Q, 0x1.5730c48bae56a4ea4426b04ea74bp-6Q, -0x1.0952d6b855c638b977457b5132a1p-8Q, -0x1.ce071dd8df1eee9d16331f09e775p-12Q, 0x1.30a4361eb25b38fd9207742eecebp-18Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.f6438a3a88460091e0ea8516e904p-4Q, -0x1.b7ba9255f9c77a442c3315f3c4dep-1Q, 0x1.3f509b3842148b5acdb05dfc7ebdp+1Q, -0x1.eac616f0d4f869be16ce06d469adp+1Q, 0x1.ae9244fef585d2a56f1cb69c0c8dp+1Q, -0x1.00d5d03220f3bbc8a51448aa67eep+1Q, 0x1.9413f3bab26fc85ab60692eb482fp+0Q, -0x1.9bd9847a10dd537f2de875e0ae85p+0Q, 0x1.16aae27d18a67638fdda8c9d9188p+0Q, -0x1.1587682f48215c21c42b36d23f1dp-1Q, 0x1.8145e3cc3cfcbcc409c895dd9662p-2Q, -0x1.faf556e68970db4f5325d20bccb9p-3Q, 0x1.8ec972676b06aaf4a1909e5ab3bfp-4Q, -0x1.49980ed40883cadc7b702f6c3e9fp-5Q, 0x1.5730c48bae56a4ea4426b047bab7p-6Q, -0x1.0952d6b855c638b977457b4c3a4p-8Q, -0x1.ce071dd8df1eee9d16331f022e54p-12Q, 0x1.30a4361eb25b38fd9207742aba25p-18Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0335440825684839948793277327924747568510463779411613283372021012357431575059"), boost::lexical_cast("0.652680627784265419113142057333635414566267596751552407275899976614433273408"), boost::lexical_cast("0.555223194777054373822280591005165065401335016712961625016624878528310159958"), boost::lexical_cast("-0.380687440934315605630685976089872177922250050019644347240793726150606940490"), boost::lexical_cast("0.202266079588999490158624019679885616441296798707691052740675369027212472886"), boost::lexical_cast("-0.0803945048003100183440731245374493948673697586172116467447133542711531568094"), boost::lexical_cast("0.0174035722935792800052307718387330639108356719924467120729654378442135160469"), boost::lexical_cast("0.00178881115434873125338924661801614887567351864768204987056083791004957995212"), boost::lexical_cast("-0.00226229198052543881129104523760341714639547377902691081445602585210846978660"), boost::lexical_cast("0.000386185980709970284342158222549749494513229103697618385419333145519237034528"), boost::lexical_cast("0.0000774649011709668881496648249850476879409117195200119403647384684895836766101"), boost::lexical_cast("-0.0000259573513242397582776373019880695158304702582936408634679549746356085340132"), boost::lexical_cast("0.0000000745576680291227809274057476509086014746503865109391843602515609932547121007"), boost::lexical_cast("0.000000106464941195329780882604847827673302070700009500583209887829095516683638178"), boost::lexical_cast("-0.00000000501834830778801282792550812083381505585505471229236043478318562698652685805"), boost::lexical_cast("0.0000000000135062531948823786839892471345144438080086754634405014216461179793889825011"), boost::lexical_cast("0.0000000000000959080797319498233498089822590215572105542150066963291076320566868073767765"), boost::lexical_cast("-0.00000000000000000179932176974095821764192532376309678888476262257369144430177595683951871280"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.158111181967293654960328230847092693305440177339999811917967936973151313355"), boost::lexical_cast("0.980421125954704520039885776450944209566177277494416607887119684421179635098"), boost::lexical_cast("-1.58099598658338745329757283125170548053142020106794975614544654842234384868"), boost::lexical_cast("0.690126857952340353432328506701225025969125769614438292589462072221185931021"), boost::lexical_cast("-0.408979058242361193356322994890219659071489088001030862797057568700712362129"), boost::lexical_cast("0.241670449709265382583487638664445391528015677818112147483084620599084662014"), boost::lexical_cast("-0.104524793285799361209632642244708987679189849915701108699068681818917564551"), boost::lexical_cast("0.0278508087960298510818238707785628134395285936655886239677755698286759739558"), boost::lexical_cast("-0.00441290970073145649314875669419603850447965477890520778958402484404147639768"), boost::lexical_cast("0.00114514458070760163627849002336721074914074332813124777635502337309185298656"), boost::lexical_cast("-0.000476320352183949564427659987582685532476347626608140569626323600699056358450"), boost::lexical_cast("0.0000550762633298583614076910773634660669710897469085737707319033728420478570991"), boost::lexical_cast("0.00000782993203462069534876818079465953823275658231409824729752214530888590769654"), boost::lexical_cast("0.000000564225681253798960172481439960184780230811335282184378643150395063068263762"), boost::lexical_cast("0.0000000289378419497867484795216809169017976802236817565143538038072466488637113467"), boost::lexical_cast("-0.000000000153639719627918579146261156316178551809778008841322577156822834207719956705"), boost::lexical_cast("-0.00000000000112595508102579374409860880942659257916932286941747525905040942526094106116"), boost::lexical_cast("0.0000000000000000422534516332318562691954502891542159653729964199104256783213585659998814557"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.588720067567147372371526765126987879260828303213441099181011258065293838823"), boost::lexical_cast("-0.251648139722832193419015447722954301991031036011339851370084962733394109781"), boost::lexical_cast("-2.12355343902466248968497032471987734676880165704138770035306028826542891153"), boost::lexical_cast("3.09251337096522514606028271458193605813373662086854974692504786991417857735"), boost::lexical_cast("-1.78284160335134075990444774847436162057665816817791661854926507977727367295"), boost::lexical_cast("0.357839667889140650192283355318684454497311597945586330625492942067228204170"), boost::lexical_cast("0.381745602616663955066044160729358156963202088205543100952077537266538669109"), boost::lexical_cast("-0.404098136072108007374807965965387527326886804962161879932178818721047921461"), boost::lexical_cast("0.166884206158335307397781592107767268454429823998572636766639189741929233271"), boost::lexical_cast("-0.0188990841472042720746425899409966903574694812598737388685812356111081899839"), boost::lexical_cast("-0.0103064239644345373917949401165831844344098684529684357486222879841537834787"), boost::lexical_cast("0.00401921019925688949154858061937053477498137877920046442886584156606534084249"), boost::lexical_cast("-0.000342928264656894632727306414284757691655791891837113873553433397950197101263"), boost::lexical_cast("-0.0000356780514531412256820962066690466067686003465101389318017916782416810226771"), boost::lexical_cast("0.00000330280231812952371277947997446653320231513317893333913004154901503115837079"), boost::lexical_cast("0.00000000464578675601507083497879025900090054285176183414686202576470053896196299532"), boost::lexical_cast("-0.000000000245200318433632222808523321270596754329839152827213527385919720073276676756"), boost::lexical_cast("0.0000000000000184080234698594267687194056854914780004840892347196195690310992947531302848"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.65958975259656064316045033596993048467429622079353821151358867499251161075"), boost::lexical_cast("-6.20950631966221433967561122684352242112063005605168776576756309774482106803"), boost::lexical_cast("9.54648047883299710477127639275362041903799096912957707845486310997696495456"), boost::lexical_cast("-8.03052641171442118399334548739326535650325998152511708583844969601543761720"), boost::lexical_cast("3.23902264641828545334922817695052684001345135087620194561871043446356995572"), boost::lexical_cast("2.10779520625851924861524548164634620055706242533707832091963204841153067836"), boost::lexical_cast("-5.02564755256492020736254702209642014378150710638030519002386215046738254771"), boost::lexical_cast("4.11488492772855670340163610415102162843178733646856522713137539498415480726"), boost::lexical_cast("-1.59968253731024764674220980278277254440169367686954378688784341823851608835"), boost::lexical_cast("0.0504087937983147259532537423739742886863984467015801660848052389726325500063"), boost::lexical_cast("0.223185483314190807228908891936935259922851508598249374402763295219052714061"), boost::lexical_cast("-0.0861136345730003759404777393964487407579363696963873730188751207394119447949"), boost::lexical_cast("0.00934626602280953109864448532020887389100677899387380615852902674015035997924"), boost::lexical_cast("0.000910503044785414199372507175857531751525973570169329713422142851011424682355"), boost::lexical_cast("-0.000147382093153403749058592147931285087775427181451628598455432923070303889508"), boost::lexical_cast("-0.000000241926116925923995065157477973608855097571667752414338710574539981741722171"), boost::lexical_cast("0.0000000218323342443673749019739306955935203514484527679190271850231323531268999740"), boost::lexical_cast("-0.00000000000327979275814608443451375729823364664112564536732892493153334268909293059412"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.25242619678200601450569178504152903597725657049565655085262375577982506117"), boost::lexical_cast("-17.55874948808064424413002851561896280971775515196247347065085833327306525400"), boost::lexical_cast("41.61108988216871250092535059298125378237547100055437239071279933451179063850"), boost::lexical_cast("-59.55760515276426941427234116300582408502217490993753777144564940817935347700"), boost::lexical_cast("63.71708525153904224542587147408403757425616414887722633161387789077111052980"), boost::lexical_cast("-61.87307141456217718672414958346485055314933560158412396861503932253498736910"), boost::lexical_cast("55.14574452799668166956345770934872005949138270244629696837163230917721607990"), boost::lexical_cast("-36.32511331476555787362944164622076573330244267979702165040726341593266853690"), boost::lexical_cast("11.15658141584657284834931359434221143120836125797249180327843359491348695220"), boost::lexical_cast("4.28047163679145355742238347915798843532207155521710854723594509752209225135"), boost::lexical_cast("-5.80765607385013452624013336376953412945571932293068559021989957795643635688"), boost::lexical_cast("2.28360810059200528491878271707995815797831304800926041232425607683843416684"), boost::lexical_cast("-0.302026455658227381795097923260643523970261991178933634395431417034448470906"), boost::lexical_cast("-0.0310136758401276861689035927512442214284016615846020419389667737950748466936"), boost::lexical_cast("0.00822789017780277377915096056720947770842970725628234020125069515364007927548"), boost::lexical_cast("0.00000312927426233484715125263582207480054643048737935356187231133866983070151733"), boost::lexical_cast("-0.00000245638621209106924354868430183266291735309073506794320584780059772790603828"), boost::lexical_cast("0.000000000738811174292185771537396859591012250750038497463623030500365543957753750629"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.33645181301187741432313412712493568835001053518710618642541285756306594416"), boost::lexical_cast("-33.23113844490980275430758088851544736605354677526393945582470182124522064770"), boost::lexical_cast("84.09335668007576319588337953784445541016978233438165893518194780234028567170"), boost::lexical_cast("-101.73067204934714346173214456537684449912757976518610846040850239073972369700"), boost::lexical_cast("34.96200649417016943214733096150713509877346551398259618284714231991020061170"), boost::lexical_cast("63.51129364702034683684093287782391919624178836066372576355119905503761408080"), boost::lexical_cast("-108.84305654018594847769298493805318318251251741351696570225381155341619480700"), boost::lexical_cast("116.37415674748252380731944050807221204678284438681143398715321798634302210300"), boost::lexical_cast("-137.03427381728617053583750633954098792534222952199781843278889570421284187500"), boost::lexical_cast("144.23917229041069234342319895061976936945281511182737320554482546805542945500"), boost::lexical_cast("-100.81954183076052489010123579947837751941991209023328659869027417281390550900"), boost::lexical_cast("39.95574123506755984622668035085486713223409393558081588798575371234724932450"), boost::lexical_cast("-6.33728051220085266945721599456441606967791241256713928442461588780452001216"), boost::lexical_cast("-0.791060695144960272868253882225791392596201909418283798181953112710974525037"), boost::lexical_cast("0.316232251829842651651001625374458886955182867924728786582655341982774267939"), boost::lexical_cast("-0.00119352475745132656518440055173377628211628909314005476964858223466155435340"), boost::lexical_cast("-0.000193861339890561713729524049136083535893829812899666113387041059603669685004"), boost::lexical_cast("0.000000116863969422460737393134164985587926960730142518183635722657982921293457991"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.90471303169253225846019875869878232941425899681461754740621573916446143761"), boost::lexical_cast("-25.93301501220719956383930380071028369762143981546072887565823996886685997670"), boost::lexical_cast("73.51548263160627699666584109197660506203055036418454184583288480107014110040"), boost::lexical_cast("-117.61312888439676707323068134216244043903457141447537621870038005469616937700"), boost::lexical_cast("124.02654888229522104336063612980866173817516040264350607815625581466646707700"), boost::lexical_cast("-107.46403614941343293286313096080305756514307808353723016233188762409520778900"), boost::lexical_cast("95.43015996272868979842030346234072214178139856671622915250008488106829700140"), boost::lexical_cast("-79.89880738806468091633285361243244391895034565047088681170638032528297365230"), boost::lexical_cast("53.80619481139291976708016981476722176165180845983829174460954831948835152660"), boost::lexical_cast("-31.71014710187933425539049751952485208474696175383649880962539170183854068730"), boost::lexical_cast("18.35033868078635575339634170405333269133930342251123760246335182701029470230"), boost::lexical_cast("-7.97024113499733731824785417964081280548267589070768527759215633952607230552"), boost::lexical_cast("1.30082087267562392476267682719773219132371557892324193430079039159705712061"), boost::lexical_cast("0.408144569258781629158811991673214502189211048077371093404699476576485396497"), boost::lexical_cast("-0.156617506402691681618770997346051897652378607238940971239829191058955327399"), boost::lexical_cast("0.00337561904029654362598669467426491389034476058577086402678410124009083217286"), boost::lexical_cast("0.000214375449437306492796677584389309705675972756233814822259639128039297348952"), boost::lexical_cast("-0.000000259564691279900670740154984232869976357323694550668609785644902896773881579"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.41817780299041267294396998193961046347327141146988493872539852596711350295"), boost::lexical_cast("-16.56112976440341017090653469524313042536360691585560344322351312533906133220"), boost::lexical_cast("47.53219626405561897360527224265560846366729359202579844173188227203518751290"), boost::lexical_cast("-73.85487678915235666547453188442988561374382065439419612818538759549597329740"), boost::lexical_cast("69.23614294120398636214807885595774013168922546655228773985936065429561982080"), boost::lexical_cast("-48.47914652685632764102838407583295199095537856449557350864923480580193915190"), boost::lexical_cast("40.04091002631537162491011984473323161600703606500352069042313463467126512660"), boost::lexical_cast("-36.07584294004108744401985515812914016258613167282034953810412938444038731500"), boost::lexical_cast("22.34184575342033973521659639667387757078302661414876303661404399664838457520"), boost::lexical_cast("-9.43352082058754010000229426238016353381474440642161800237732829686092053067"), boost::lexical_cast("4.88209911704351415773607596292274800953074722271529021833265067681298168566"), boost::lexical_cast("-2.50310541071368687187558805389288406933454963984067437672488275554205269365"), boost::lexical_cast("0.0877416350574245619016863517598542577849142110266067469164372019839766916222"), boost::lexical_cast("0.547098559261318119790346121315142638857555987993333621751899257669110708054"), boost::lexical_cast("-0.191082478748640367297398639370371440145977214048380506662573645656883504693"), boost::lexical_cast("0.0118481080619098512694011114462548921140026922405000410819306003041457844881"), boost::lexical_cast("0.000646101166642978477805807904877768082627916394154211614618243579374822809981"), boost::lexical_cast("-0.00000157807348977739476590803041857604549211169374418312430645482994306750965210"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.47749259720336125750014371203719086097786832720840532470036067098638253523"), boost::lexical_cast("-10.27177349258604109799866360824488274075683477990758858915270374562166449850"), boost::lexical_cast("28.74052664229870896057228781991603797498521883108842274414172929446095718590"), boost::lexical_cast("-38.94158424629165794548655688785303773037259534960785249196589991715016053910"), boost::lexical_cast("20.85668514061840842160738201097767741109998318160033587807688366848349176030"), boost::lexical_cast("5.82300896396175969285220261284580137016897500185004121370253254225136801433"), boost::lexical_cast("-8.55593091071560318198818805962130429594383016756683899572054041178087930423"), boost::lexical_cast("0.101477306114750809578847194446606040053812700094709979272704369647063439327"), boost::lexical_cast("-6.20185530962426163472935046915706308507730310357888975841274200007312909611"), boost::lexical_cast("15.20396613285981716679133037338797692219039323378619093572799537510744196150"), boost::lexical_cast("-11.93890001881036092553774539348916251166242755327073413099256167724690461900"), boost::lexical_cast("5.97034943372046810250402450844362776436235733145492694521396093842408492893"), boost::lexical_cast("-4.57002808440762091333964553954350217107396457686094642109241343475428396977"), boost::lexical_cast("3.44253179868866811498600236601873984282170067759034407929086464636198130738"), boost::lexical_cast("-1.30895739843621525859283487914176592704598294675665286288796005768903002325"), boost::lexical_cast("0.161744149188567181778191988919947821701240436608528275036716134129128761337"), boost::lexical_cast("0.0113034809702728906127738052967788898940898905277042251467481852979437112396"), boost::lexical_cast("-0.0000561847530216411102015552396664363227011342601063500856745808337968464467556"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.122623004871017738321088521115551923728453212438673116414730214921771194277"), boost::lexical_cast("-0.858845303530769892579734223666985146082985618311703745596404006498390381931"), boost::lexical_cast("2.49464740988711173737826976177194717462144209023170132334409744337915240875"), boost::lexical_cast("-3.83417021521921990552626761956575317113472949702731301040473923476385032353"), boost::lexical_cast("3.36383879136250970160534021305681940065986265718051079957468541575949019427"), boost::lexical_cast("-2.00652506301585541969492468858387268920435010187618742310379136054539969490"), boost::lexical_cast("1.57842944438965482815057083449552137133719188861387633419907705130357334305"), boost::lexical_cast("-1.60878780346034960103676974039938661510477020676670448343954517210254723407"), boost::lexical_cast("1.08854499391659395899666779285135586272604126336277091423079442916910197364"), boost::lexical_cast("-0.542048698207568264511438036052150370606170830150755922595824458471088767735"), boost::lexical_cast("0.376243171063148851166518405338884659341124829071866802537194156141907541144"), boost::lexical_cast("-0.247538260374476618199302147981680094201399126055983684863712115608203062926"), boost::lexical_cast("0.0973600834756226757960627772745367010811794086758884192671361295078507106292"), boost::lexical_cast("-0.0402336396803239840143974298780932703826464388081245776201258480950581117641"), boost::lexical_cast("0.0209466857329280522592506599477472523467188466718239083632463774864022218054"), boost::lexical_cast("-0.00404851667584358062529338732537862677888179504486154526998284790202549786179"), boost::lexical_cast("-0.000440624045545039606176483920239238500963155780055689316463121243179544715288"), boost::lexical_cast("0.00000453951136476212053479152117487615488257357457846427962694756049282806704493"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 11) { if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0f, 0x1.f82d86p-7f, 0x1.da87aep-2f, 0x1.a074eap-1f, -0x1.d3dbc2p-2f, 0x1.07dc8cp-2f, -0x1.17e06ap-3f, 0x1.d853p-5f, -0x1.071062p-6f, 0x1.0182ap-9f, 0x1.d91cd2p-14f, 0x1.f2bfaap-15f, -0x1.d7e9bap-15f, 0x1.5c274ep-18f, 0x1.63562ep-20f, -0x1.0af58p-26f, 0x1.1409ccp-28f, -0x1.160128p-35f, -0x1.4f944ep-42f, -0x1.ad914cp-53f, -0x1.65d844p-70f, 0x0p+0f}; + return {0x0p+0f, 0x1.f82d86p-7f, 0x1.da87aep-2f, 0x1.a074eap-1f, -0x1.d3dbc2p-2f, 0x1.07dc8cp-2f, -0x1.17e06ap-3f, 0x1.d853p-5f, -0x1.071062p-6f, 0x1.0182ap-9f, 0x1.d91cd2p-14f, 0x1.f2bfaap-15f, -0x1.d7e9bap-15f, 0x1.5c274ep-18f, 0x1.63562ep-20f, -0x1.0af58p-26f, 0x1.1409ccp-28f, -0x1.160128p-35f, -0x1.4f944ep-42f, -0x1.ad914cp-53f, -0x1.65d844p-70f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.4988f6p-4f, 0x1.cd9786p-1f, -0x1.f03418p-1f, -0x1.075e3cp-3f, 0x1.303436p-3f, -0x1.71d07ep-12f, -0x1.321c6cp-4f, 0x1.0f00fp-4f, -0x1.fec808p-6f, 0x1.092c0ap-7f, -0x1.185782p-11f, -0x1.693106p-12f, 0x1.a2acf4p-14f, -0x1.c4d82p-19f, -0x1.e02848p-20f, 0x1.7db784p-25f, 0x1.739c16p-30f, -0x1.d9433ap-36f, 0x1.651bd6p-46f, 0x1.29783p-62f, -0x0p+0f}; + return {0x0p+0f, 0x1.4988f6p-4f, 0x1.cd9786p-1f, -0x1.f03418p-1f, -0x1.075e3cp-3f, 0x1.303436p-3f, -0x1.71d07ep-12f, -0x1.321c6cp-4f, 0x1.0f00fp-4f, -0x1.fec808p-6f, 0x1.092c0ap-7f, -0x1.185782p-11f, -0x1.693106p-12f, 0x1.a2acf4p-14f, -0x1.c4d82p-19f, -0x1.e02848p-20f, 0x1.7db784p-25f, 0x1.739c16p-30f, -0x1.d9433ap-36f, 0x1.651bd6p-46f, 0x1.29783p-62f, 0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.5c07e6p-2f, 0x1.307a2ap-1f, -0x1.a41fd4p+1f, 0x1.08f33p+2f, -0x1.6a2a88p+1f, 0x1.5f04aep+0f, -0x1.150c78p-2f, -0x1.78ed1cp-3f, 0x1.4f999p-3f, -0x1.41156ep-5f, -0x1.6c5862p-7f, 0x1.21e04ap-7f, -0x1.cd1c36p-10f, 0x1.af648p-17f, 0x1.0136c4p-15f, -0x1.6928bp-19f, -0x1.6377bp-25f, 0x1.64323cp-30f, -0x1.6fb512p-40f, -0x1.32449ep-55f, 0x0p+0f}; + return {0x0p+0f, 0x1.5c07e6p-2f, 0x1.307a2ap-1f, -0x1.a41fd4p+1f, 0x1.08f33p+2f, -0x1.6a2a88p+1f, 0x1.5f04aep+0f, -0x1.150c78p-2f, -0x1.78ed1cp-3f, 0x1.4f999p-3f, -0x1.41156ep-5f, -0x1.6c5862p-7f, 0x1.21e04ap-7f, -0x1.cd1c36p-10f, 0x1.af648p-17f, 0x1.0136c4p-15f, -0x1.6928bp-19f, -0x1.6377bp-25f, 0x1.64323cp-30f, -0x1.6fb512p-40f, -0x1.32449ep-55f, -0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.1c297ep+0f, -0x1.a72bc4p+1f, 0x1.8e9818p+1f, -0x1.8f506ep-1f, 0x1.02364ap-1f, -0x1.0fb22ap+1f, 0x1.80597ep+1f, -0x1.38ad98p+1f, 0x1.339d14p+0f, -0x1.08b97cp-2f, -0x1.3f8a26p-4f, 0x1.2b8bd2p-4f, -0x1.35b764p-6f, 0x1.f33a86p-12f, 0x1.1c307ep-11f, -0x1.950dccp-15f, -0x1.f90492p-21f, 0x1.8b6cb6p-25f, -0x1.21deep-34f, -0x1.e2c778p-49f, 0x0p+0f}; + return {0x0p+0f, 0x1.1c297ep+0f, -0x1.a72bc4p+1f, 0x1.8e9818p+1f, -0x1.8f506ep-1f, 0x1.02364ap-1f, -0x1.0fb22ap+1f, 0x1.80597ep+1f, -0x1.38ad98p+1f, 0x1.339d14p+0f, -0x1.08b97cp-2f, -0x1.3f8a26p-4f, 0x1.2b8bd2p-4f, -0x1.35b764p-6f, 0x1.f33a86p-12f, 0x1.1c307ep-11f, -0x1.950dccp-15f, -0x1.f90492p-21f, 0x1.8b6cb6p-25f, -0x1.21deep-34f, -0x1.e2c778p-49f, -0x0p+0f}; } if constexpr (order == 4) { - return {0x0p+0f, 0x1.51d8dcp+1f, -0x1.c33b04p+3f, 0x1.0e7952p+5f, -0x1.9aba4p+5f, 0x1.f144c4p+5f, -0x1.17ce56p+6f, 0x1.1abf8ep+6f, -0x1.aeeda8p+5f, 0x1.6d1976p+4f, 0x1.64c18ap+1f, -0x1.4b3d36p+3f, 0x1.8e7526p+2f, -0x1.9e20d2p+0f, 0x1.8f714p-5f, 0x1.002e9ap-4f, -0x1.22b5dp-7f, -0x1.695b64p-13f, 0x1.ba1b22p-17f, -0x1.df066ep-26f, -0x1.8ec07p-39f, 0x0p+0f}; + return {0x0p+0f, 0x1.51d8dcp+1f, -0x1.c33b04p+3f, 0x1.0e7952p+5f, -0x1.9aba4p+5f, 0x1.f144c4p+5f, -0x1.17ce56p+6f, 0x1.1abf8ep+6f, -0x1.aeeda8p+5f, 0x1.6d1976p+4f, 0x1.64c18ap+1f, -0x1.4b3d36p+3f, 0x1.8e7526p+2f, -0x1.9e20d2p+0f, 0x1.8f714p-5f, 0x1.002e9ap-4f, -0x1.22b5dp-7f, -0x1.695b64p-13f, 0x1.ba1b22p-17f, -0x1.df066ep-26f, -0x1.8ec07p-39f, -0x0p+0f}; } if constexpr (order == 5) { return {0x0p+0f, 0x1.553842p+2f, -0x1.1648a2p+5f, 0x1.7429c4p+6f, -0x1.d2259cp+6f, 0x1.36cbd8p+4f, 0x1.4a282ep+7f, -0x1.2e04acp+8f, 0x1.5f18c6p+8f, -0x1.80bbfp+8f, 0x1.90ad4cp+8f, -0x1.4159ep+8f, 0x1.4eba06p+7f, -0x1.6db5a8p+5f, 0x1.66137p-1f, 0x1.7dbb7ep+1f, -0x1.1851aap-1f, -0x1.230c94p-7f, 0x1.7e95e2p-10f, -0x1.136d24p-18f, -0x1.ca2f1p-31f, -0x0p+0f}; @@ -803,10 +983,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.0e918ep+2f, -0x1.f54b1ep+4f, 0x1.8cc936p+6f, -0x1.5d87f4p+7f, 0x1.7fbdfcp+7f, -0x1.356154p+7f, 0x1.00a2fp+7f, -0x1.d61ad6p+6f, 0x1.4b192ep+6f, -0x1.2bd7eep+5f, 0x1.d23af8p+3f, -0x1.a5a3f6p+2f, -0x1.0097bap+0f, 0x1.29abecp+2f, -0x1.6d63c6p+1f, 0x1.521b96p-1f, -0x1.89a1eap-6f, -0x1.cc0f8cp-8f, 0x1.9e94aap-16f, 0x1.5739aap-26f, 0x0p+0f}; } if constexpr (order == 8) { - return {0x0p+0f, 0x1.c2a5p+0f, -0x1.a9c968p+3f, 0x1.5bbb8cp+5f, -0x1.452574p+6f, 0x1.91c80cp+6f, -0x1.84d65cp+6f, 0x1.678e1ep+6f, -0x1.493302p+6f, 0x1.14413cp+6f, -0x1.b51d9ap+5f, 0x1.483818p+5f, -0x1.a72562p+4f, 0x1.e00e48p+3f, -0x1.1522f8p+3f, 0x1.152962p+2f, -0x1.3d9d88p+0f, 0x1.3f1c58p-4f, 0x1.b3efb4p-6f, -0x1.baa15ap-13f, -0x1.6c2d94p-22f, 0x0p+0f}; + return {0x0p+0f, 0x1.c2a5p+0f, -0x1.a9c968p+3f, 0x1.5bbb8cp+5f, -0x1.452574p+6f, 0x1.91c80cp+6f, -0x1.84d65cp+6f, 0x1.678e1ep+6f, -0x1.493302p+6f, 0x1.14413cp+6f, -0x1.b51d9ap+5f, 0x1.483818p+5f, -0x1.a72562p+4f, 0x1.e00e48p+3f, -0x1.1522f8p+3f, 0x1.152962p+2f, -0x1.3d9d88p+0f, 0x1.3f1c58p-4f, 0x1.b3efb4p-6f, -0x1.baa15ap-13f, -0x1.6c2d94p-22f, -0x0p+0f}; } if constexpr (order == 9) { - return {0x0p+0f, 0x1.480f32p-1f, -0x1.38fe3p+2f, 0x1.f8f412p+3f, -0x1.bc60c4p+4f, 0x1.d3d44ap+4f, -0x1.536d7p+4f, 0x1.0953a8p+4f, -0x1.0c0dcap+4f, 0x1.af56b2p+3f, -0x1.f62894p+2f, 0x1.3ef834p+2f, -0x1.c75ab6p+1f, 0x1.cb38bcp+0f, -0x1.624786p-1f, 0x1.61b17ap-2f, -0x1.0b6248p-3f, 0x1.c9b3fp-8f, 0x1.7c528ap-8f, -0x1.0c4738p-13f, -0x1.b40e78p-22f, 0x0p+0f}; + return {0x0p+0f, 0x1.480f32p-1f, -0x1.38fe3p+2f, 0x1.f8f412p+3f, -0x1.bc60c4p+4f, 0x1.d3d44ap+4f, -0x1.536d7p+4f, 0x1.0953a8p+4f, -0x1.0c0dcap+4f, 0x1.af56b2p+3f, -0x1.f62894p+2f, 0x1.3ef834p+2f, -0x1.c75ab6p+1f, 0x1.cb38bcp+0f, -0x1.624786p-1f, 0x1.61b17ap-2f, -0x1.0b6248p-3f, 0x1.c9b3fp-8f, 0x1.7c528ap-8f, -0x1.0c4738p-13f, -0x1.b40e78p-22f, -0x0p+0f}; } if constexpr (order == 10) { return {0x0p+0f, 0x1.8a25fep-4f, -0x1.79dddep-1f, 0x1.2f9284p+1f, -0x1.04a532p+2f, 0x1.fbc728p+1f, -0x1.2e8a4ep+1f, 0x1.96ff88p+0f, -0x1.db8c8p+0f, 0x1.8867ecp+0f, -0x1.7019bcp-1f, 0x1.a30d2p-2f, -0x1.7340e8p-2f, 0x1.68181ap-3f, -0x1.50a6f6p-5f, 0x1.8d3b22p-6f, -0x1.b7227ep-7f, -0x1.a3115p-12f, 0x1.71e7a4p-10f, -0x1.4eea02p-14f, -0x1.09aedap-21f, 0x0p+0f}; @@ -814,19 +994,19 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0, 0x1.f82d860ed311dp-7, 0x1.da87adf545deap-2, 0x1.a074ea6831a18p-1, -0x1.d3dbc22db3363p-2, 0x1.07dc8c4b5880ap-2, -0x1.17e06a0deb07p-3, 0x1.d85300a8e9a5ap-5, -0x1.0710616766f9ep-6, 0x1.0182a0c9a44bbp-9, 0x1.d91cd19825f46p-14, 0x1.f2bfaace30f59p-15, -0x1.d7e9ba7b3ac47p-15, 0x1.5c274e2e04a65p-18, 0x1.63562e1b18da8p-20, -0x1.0af5800900cccp-26, 0x1.1409cb495cfabp-28, -0x1.1601287f207ddp-35, -0x1.4f944d6c974a1p-42, -0x1.ad914b3b9c645p-53, -0x1.65d8440cb590ap-70, 0x0p+0}; + return {0x0p+0, 0x1.f82d860ed311dp-7, 0x1.da87adf545deap-2, 0x1.a074ea6831a18p-1, -0x1.d3dbc22db3363p-2, 0x1.07dc8c4b5880ap-2, -0x1.17e06a0deb07p-3, 0x1.d85300a8e9a5ap-5, -0x1.0710616766f9ep-6, 0x1.0182a0c9a44bbp-9, 0x1.d91cd19825f46p-14, 0x1.f2bfaace30f59p-15, -0x1.d7e9ba7b3ac47p-15, 0x1.5c274e2e04a65p-18, 0x1.63562e1b18da8p-20, -0x1.0af5800900cccp-26, 0x1.1409cb495cfabp-28, -0x1.1601287f207ddp-35, -0x1.4f944d6c974a1p-42, -0x1.ad914b3b9c645p-53, -0x1.65d8440cb590ap-70, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.4988f615d8fc2p-4, 0x1.cd9786f046dbdp-1, -0x1.f034187a5d753p-1, -0x1.075e3bcf1d71fp-3, 0x1.303436308c6p-3, -0x1.71d07ef81053fp-12, -0x1.321c6b5970b99p-4, 0x1.0f00f07475782p-4, -0x1.fec807d6bcde3p-6, 0x1.092c0960e80ecp-7, -0x1.1857810566103p-11, -0x1.693105a2bb707p-12, 0x1.a2acf3b1f9d07p-14, -0x1.c4d81f25bbab6p-19, -0x1.e0284772a21efp-20, 0x1.7db784c0b0131p-25, 0x1.739c15dc80c55p-30, -0x1.d9433a2520a2ep-36, 0x1.651bd505e5aabp-46, 0x1.29782f98b98d9p-62, -0x0p+0}; + return {0x0p+0, 0x1.4988f615d8fc2p-4, 0x1.cd9786f046dbdp-1, -0x1.f034187a5d753p-1, -0x1.075e3bcf1d71fp-3, 0x1.303436308c6p-3, -0x1.71d07ef81053fp-12, -0x1.321c6b5970b99p-4, 0x1.0f00f07475782p-4, -0x1.fec807d6bcde3p-6, 0x1.092c0960e80ecp-7, -0x1.1857810566103p-11, -0x1.693105a2bb707p-12, 0x1.a2acf3b1f9d07p-14, -0x1.c4d81f25bbab6p-19, -0x1.e0284772a21efp-20, 0x1.7db784c0b0131p-25, 0x1.739c15dc80c55p-30, -0x1.d9433a2520a2ep-36, 0x1.651bd505e5aabp-46, 0x1.29782f98b98d9p-62, 0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.5c07e5083d709p-2, 0x1.307a2a8e783eap-1, -0x1.a41fd4c6e5304p+1, 0x1.08f3303fd9b5fp+2, -0x1.6a2a8758fd08cp+1, 0x1.5f04ae9c9034bp+0, -0x1.150c77d31565dp-2, -0x1.78ed1cb9b0ec2p-3, 0x1.4f99902d11603p-3, -0x1.41156e1c846c4p-5, -0x1.6c5861062a836p-7, 0x1.21e04958552e7p-7, -0x1.cd1c35ab2ad93p-10, 0x1.af6480e4adc47p-17, 0x1.0136c3fb4b19cp-15, -0x1.6928b0e495d08p-19, -0x1.6377af73884cp-25, 0x1.64323c063686ap-30, -0x1.6fb51174aa8e3p-40, -0x1.32449da1b9609p-55, 0x0p+0}; + return {0x0p+0, 0x1.5c07e5083d709p-2, 0x1.307a2a8e783eap-1, -0x1.a41fd4c6e5304p+1, 0x1.08f3303fd9b5fp+2, -0x1.6a2a8758fd08cp+1, 0x1.5f04ae9c9034bp+0, -0x1.150c77d31565dp-2, -0x1.78ed1cb9b0ec2p-3, 0x1.4f99902d11603p-3, -0x1.41156e1c846c4p-5, -0x1.6c5861062a836p-7, 0x1.21e04958552e7p-7, -0x1.cd1c35ab2ad93p-10, 0x1.af6480e4adc47p-17, 0x1.0136c3fb4b19cp-15, -0x1.6928b0e495d08p-19, -0x1.6377af73884cp-25, 0x1.64323c063686ap-30, -0x1.6fb51174aa8e3p-40, -0x1.32449da1b9609p-55, -0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.1c297e1a72297p+0, -0x1.a72bc3c00615fp+1, 0x1.8e98178e99b32p+1, -0x1.8f506e2a5e0ebp-1, 0x1.02364935e2223p-1, -0x1.0fb2290536b32p+1, 0x1.80597d49465bfp+1, -0x1.38ad9781c7501p+1, 0x1.339d144fd9551p+0, -0x1.08b97b33caeccp-2, -0x1.3f8a268debfb7p-4, 0x1.2b8bd1a4fd0ebp-4, -0x1.35b764060a714p-6, 0x1.f33a86db42466p-12, 0x1.1c307da269deep-11, -0x1.950dcb7c8e982p-15, -0x1.f904916865d4dp-21, 0x1.8b6cb6bf7586bp-25, -0x1.21dedfd7476c5p-34, -0x1.e2c7778c519ap-49, 0x0p+0}; + return {0x0p+0, 0x1.1c297e1a72297p+0, -0x1.a72bc3c00615fp+1, 0x1.8e98178e99b32p+1, -0x1.8f506e2a5e0ebp-1, 0x1.02364935e2223p-1, -0x1.0fb2290536b32p+1, 0x1.80597d49465bfp+1, -0x1.38ad9781c7501p+1, 0x1.339d144fd9551p+0, -0x1.08b97b33caeccp-2, -0x1.3f8a268debfb7p-4, 0x1.2b8bd1a4fd0ebp-4, -0x1.35b764060a714p-6, 0x1.f33a86db42466p-12, 0x1.1c307da269deep-11, -0x1.950dcb7c8e982p-15, -0x1.f904916865d4dp-21, 0x1.8b6cb6bf7586bp-25, -0x1.21dedfd7476c5p-34, -0x1.e2c7778c519ap-49, -0x0p+0}; } if constexpr (order == 4) { - return {0x0p+0, 0x1.51d8dbccf9207p+1, -0x1.c33b049bfbce6p+3, 0x1.0e79522ccf3ddp+5, -0x1.9aba40cee29c1p+5, 0x1.f144c4df7513dp+5, -0x1.17ce56ad9d902p+6, 0x1.1abf8d1adcc3ep+6, -0x1.aeeda88b7fe88p+5, 0x1.6d1975fc2f42ep+4, 0x1.64c18afe2844cp+1, -0x1.4b3d36d8f9771p+3, 0x1.8e75251a7f5bfp+2, -0x1.9e20d1654131ap+0, 0x1.8f713f264dac3p-5, 0x1.002e9aac59197p-4, -0x1.22b5d07d79f25p-7, -0x1.695b63166e6d6p-13, 0x1.ba1b21857af83p-17, -0x1.df066d7576ffdp-26, -0x1.8ec06f9de2f7dp-39, 0x0p+0}; + return {0x0p+0, 0x1.51d8dbccf9207p+1, -0x1.c33b049bfbce6p+3, 0x1.0e79522ccf3ddp+5, -0x1.9aba40cee29c1p+5, 0x1.f144c4df7513dp+5, -0x1.17ce56ad9d902p+6, 0x1.1abf8d1adcc3ep+6, -0x1.aeeda88b7fe88p+5, 0x1.6d1975fc2f42ep+4, 0x1.64c18afe2844cp+1, -0x1.4b3d36d8f9771p+3, 0x1.8e75251a7f5bfp+2, -0x1.9e20d1654131ap+0, 0x1.8f713f264dac3p-5, 0x1.002e9aac59197p-4, -0x1.22b5d07d79f25p-7, -0x1.695b63166e6d6p-13, 0x1.ba1b21857af83p-17, -0x1.df066d7576ffdp-26, -0x1.8ec06f9de2f7dp-39, -0x0p+0}; } if constexpr (order == 5) { return {0x0p+0, 0x1.553841cb8504cp+2, -0x1.1648a261cfac8p+5, 0x1.7429c31b8bcdcp+6, -0x1.d2259be1a7819p+6, 0x1.36cbd86221f4cp+4, 0x1.4a282d1320ed7p+7, -0x1.2e04ab290e2ep+8, 0x1.5f18c6755ba05p+8, -0x1.80bbefefb8959p+8, 0x1.90ad4b61c673ep+8, -0x1.4159e0e62036cp+8, 0x1.4eba06db33d53p+7, -0x1.6db5a82568a44p+5, 0x1.6613709f48646p-1, 0x1.7dbb7d4fa2b47p+1, -0x1.1851a9519e35ep-1, -0x1.230c93cadc0b8p-7, 0x1.7e95e283d8ce3p-10, -0x1.136d2374e3712p-18, -0x1.ca2f0f4b75006p-31, -0x0p+0}; @@ -838,10 +1018,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.0e918e0751a5fp+2, -0x1.f54b1dc71e94cp+4, 0x1.8cc935a5962f3p+6, -0x1.5d87f4fd9af88p+7, 0x1.7fbdfc1f5c92bp+7, -0x1.356154b8ce2cp+7, 0x1.00a2f00b6f36p+7, -0x1.d61ad68084632p+6, 0x1.4b192d711636ap+6, -0x1.2bd7eeccbbd8bp+5, 0x1.d23af72a92131p+3, -0x1.a5a3f6309aca8p+2, -0x1.0097ba319005fp+0, 0x1.29abec5ca24e5p+2, -0x1.6d63c669ef72ap+1, 0x1.521b96f1f012p-1, -0x1.89a1e9b6409a4p-6, -0x1.cc0f8b0b31976p-8, 0x1.9e94a90cc2ee8p-16, 0x1.5739a9ee6eb1dp-26, 0x0p+0}; } if constexpr (order == 8) { - return {0x0p+0, 0x1.c2a4ffe966119p+0, -0x1.a9c9682497d43p+3, 0x1.5bbb8c487ae5cp+5, -0x1.452573aebb3bfp+6, 0x1.91c80b52c3671p+6, -0x1.84d65b83affb6p+6, 0x1.678e1d36597aep+6, -0x1.4933025bdb689p+6, 0x1.14413c8e18076p+6, -0x1.b51d99f667842p+5, 0x1.483818775e0cbp+5, -0x1.a72562d5d8065p+4, 0x1.e00e48c9f7714p+3, -0x1.1522f77734c2fp+3, 0x1.152961e6e0f57p+2, -0x1.3d9d88a64fae4p+0, 0x1.3f1c58e4e2a68p-4, 0x1.b3efb441a4e1bp-6, -0x1.baa159e67dd4fp-13, -0x1.6c2d94cde3ae2p-22, 0x0p+0}; + return {0x0p+0, 0x1.c2a4ffe966119p+0, -0x1.a9c9682497d43p+3, 0x1.5bbb8c487ae5cp+5, -0x1.452573aebb3bfp+6, 0x1.91c80b52c3671p+6, -0x1.84d65b83affb6p+6, 0x1.678e1d36597aep+6, -0x1.4933025bdb689p+6, 0x1.14413c8e18076p+6, -0x1.b51d99f667842p+5, 0x1.483818775e0cbp+5, -0x1.a72562d5d8065p+4, 0x1.e00e48c9f7714p+3, -0x1.1522f77734c2fp+3, 0x1.152961e6e0f57p+2, -0x1.3d9d88a64fae4p+0, 0x1.3f1c58e4e2a68p-4, 0x1.b3efb441a4e1bp-6, -0x1.baa159e67dd4fp-13, -0x1.6c2d94cde3ae2p-22, -0x0p+0}; } if constexpr (order == 9) { - return {0x0p+0, 0x1.480f31520e3f3p-1, -0x1.38fe2f09aac58p+2, 0x1.f8f411bacc9f9p+3, -0x1.bc60c3b54f90bp+4, 0x1.d3d44a6a16adbp+4, -0x1.536d6f833b667p+4, 0x1.0953a7a524acbp+4, -0x1.0c0dca303e8e2p+4, 0x1.af56b1534f29ep+3, -0x1.f628948ceff74p+2, 0x1.3ef834c3289aap+2, -0x1.c75ab5e1afc76p+1, 0x1.cb38bb2c5f4bfp+0, -0x1.624785bf15dbep-1, 0x1.61b17ae5ff0c1p-2, -0x1.0b62472bd3d78p-3, 0x1.c9b3ef0688e89p-8, 0x1.7c528a3f2156cp-8, -0x1.0c4738028aec9p-13, -0x1.b40e785cb8808p-22, 0x0p+0}; + return {0x0p+0, 0x1.480f31520e3f3p-1, -0x1.38fe2f09aac58p+2, 0x1.f8f411bacc9f9p+3, -0x1.bc60c3b54f90bp+4, 0x1.d3d44a6a16adbp+4, -0x1.536d6f833b667p+4, 0x1.0953a7a524acbp+4, -0x1.0c0dca303e8e2p+4, 0x1.af56b1534f29ep+3, -0x1.f628948ceff74p+2, 0x1.3ef834c3289aap+2, -0x1.c75ab5e1afc76p+1, 0x1.cb38bb2c5f4bfp+0, -0x1.624785bf15dbep-1, 0x1.61b17ae5ff0c1p-2, -0x1.0b62472bd3d78p-3, 0x1.c9b3ef0688e89p-8, 0x1.7c528a3f2156cp-8, -0x1.0c4738028aec9p-13, -0x1.b40e785cb8808p-22, -0x0p+0}; } if constexpr (order == 10) { return {0x0p+0, 0x1.8a25fe79d1c4ep-4, -0x1.79dddd860d214p-1, 0x1.2f92842080f08p+1, -0x1.04a53246109b7p+2, 0x1.fbc727fc23efp+1, -0x1.2e8a4ebac6b5ep+1, 0x1.96ff87cfe4cc5p+0, -0x1.db8c7f7bf2c3ap+0, 0x1.8867eccd39d1bp+0, -0x1.7019bc278ffcp-1, 0x1.a30d20b4e67c7p-2, -0x1.7340e7a399e64p-2, 0x1.68181929e64c5p-3, -0x1.50a6f5e8f3b31p-5, 0x1.8d3b211eb839bp-6, -0x1.b7227d5381373p-7, -0x1.a3114fdf2fbcp-12, 0x1.71e7a3b4d88bfp-10, -0x1.4eea023db8bd5p-14, -0x1.09aed93888304p-21, 0x0p+0}; @@ -849,19 +1029,19 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0L, 0xf.c16c3076988ebbcp-10L, 0xe.d43d6faa2ef51b8p-5L, 0xd.03a753418d0bce6p-4L, -0xe.9ede116d99b1966p-5L, 0x8.3ee4625ac404c6dp-5L, -0x8.bf03506f5837fe3p-6L, 0xe.c29805474d2cedap-8L, -0x8.38830b3b37cedbcp-9L, 0x8.0c15064d225d41p-12L, 0xe.c8e68cc12fa31cbp-17L, 0xf.95fd567187ac541p-18L, -0xe.bf4dd3d9d6239bp-18L, 0xa.e13a71702532bafp-21L, 0xb.1ab170d8c6d3fd6p-23L, -0x8.57ac00480665f53p-29L, 0x8.a04e5a4ae7d54e6p-31L, -0x8.b00943f903ee402p-38L, -0xa.7ca26b64ba505d1p-45L, -0xd.6c8a59dce3224e2p-56L, -0xb.2ec22065ac84f3fp-73L, 0x0p+0L}; + return {0x0p+0L, 0xf.c16c3076988ebbcp-10L, 0xe.d43d6faa2ef51b8p-5L, 0xd.03a753418d0bce6p-4L, -0xe.9ede116d99b1966p-5L, 0x8.3ee4625ac404c6dp-5L, -0x8.bf03506f5837fe3p-6L, 0xe.c29805474d2cedap-8L, -0x8.38830b3b37cedbcp-9L, 0x8.0c15064d225d41p-12L, 0xe.c8e68cc12fa31cbp-17L, 0xf.95fd567187ac541p-18L, -0xe.bf4dd3d9d6239bp-18L, 0xa.e13a71702532bafp-21L, 0xb.1ab170d8c6d3fd6p-23L, -0x8.57ac00480665f53p-29L, 0x8.a04e5a4ae7d54e6p-31L, -0x8.b00943f903ee402p-38L, -0xa.7ca26b64ba505d1p-45L, -0xd.6c8a59dce3224e2p-56L, -0xb.2ec22065ac84f3fp-73L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xa.4c47b0aec7e1081p-7L, 0xe.6cbc378236de837p-4L, -0xf.81a0c3d2eba999fp-4L, -0x8.3af1de78eb8f98bp-6L, 0x9.81a1b1846300118p-6L, -0xb.8e83f7c0829f529p-15L, -0x9.90e35acb85cca72p-7L, 0x8.780783a3abc1044p-7L, -0xf.f6403eb5e6f17b6p-9L, 0x8.49604b074075f3ap-10L, -0x8.c2bc082b308154p-14L, -0xb.49882d15db83441p-15L, 0xd.15679d8fce83a4ap-17L, -0xe.26c0f92ddd5b332p-22L, -0xf.01423b9510f7584p-23L, 0xb.edbc2605809849dp-28L, 0xb.9ce0aee4062aafdp-33L, -0xe.ca19d1290517188p-39L, 0xb.28dea82f2d5572ep-49L, 0x9.4bc17cc5cc6c599p-65L, -0x0p+0L}; + return {0x0p+0L, 0xa.4c47b0aec7e1081p-7L, 0xe.6cbc378236de837p-4L, -0xf.81a0c3d2eba999fp-4L, -0x8.3af1de78eb8f98bp-6L, 0x9.81a1b1846300118p-6L, -0xb.8e83f7c0829f529p-15L, -0x9.90e35acb85cca72p-7L, 0x8.780783a3abc1044p-7L, -0xf.f6403eb5e6f17b6p-9L, 0x8.49604b074075f3ap-10L, -0x8.c2bc082b308154p-14L, -0xb.49882d15db83441p-15L, 0xd.15679d8fce83a4ap-17L, -0xe.26c0f92ddd5b332p-22L, -0xf.01423b9510f7584p-23L, 0xb.edbc2605809849dp-28L, 0xb.9ce0aee4062aafdp-33L, -0xe.ca19d1290517188p-39L, 0xb.28dea82f2d5572ep-49L, 0x9.4bc17cc5cc6c599p-65L, 0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0xa.e03f2841eb84819p-5L, 0x9.83d15473c1f50fdp-4L, -0xd.20fea63729823dcp-2L, 0x8.479981fecdaf816p-1L, -0xb.51543ac7e845d9fp-2L, 0xa.f82574e481a558dp-3L, -0x8.a863be98ab2e9afp-5L, -0xb.c768e5cd8760f3bp-6L, 0xa.7ccc81688b01b9cp-6L, -0xa.08ab70e42362325p-8L, -0xb.62c30831541b0b7p-10L, 0x9.0f024ac2a973782p-10L, -0xe.68e1ad5956c95f9p-13L, 0xd.7b2407256e2365dp-20L, 0x8.09b61fda58cdcd9p-18L, -0xb.49458724ae83fdap-22L, -0xb.1bbd7b9c425fd7p-28L, 0xb.2191e031b4353cfp-33L, -0xb.7da88ba55471baap-43L, -0x9.9224ed0dcb0440cp-58L, 0x0p+0L}; + return {0x0p+0L, 0xa.e03f2841eb84819p-5L, 0x9.83d15473c1f50fdp-4L, -0xd.20fea63729823dcp-2L, 0x8.479981fecdaf816p-1L, -0xb.51543ac7e845d9fp-2L, 0xa.f82574e481a558dp-3L, -0x8.a863be98ab2e9afp-5L, -0xb.c768e5cd8760f3bp-6L, 0xa.7ccc81688b01b9cp-6L, -0xa.08ab70e42362325p-8L, -0xb.62c30831541b0b7p-10L, 0x9.0f024ac2a973782p-10L, -0xe.68e1ad5956c95f9p-13L, 0xd.7b2407256e2365dp-20L, 0x8.09b61fda58cdcd9p-18L, -0xb.49458724ae83fdap-22L, -0xb.1bbd7b9c425fd7p-28L, 0xb.2191e031b4353cfp-33L, -0xb.7da88ba55471baap-43L, -0x9.9224ed0dcb0440cp-58L, -0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0x8.e14bf0d3914bbd4p-3L, -0xd.395e1e0030afb9ep-2L, 0xc.74c0bc74cd98ea3p-2L, -0xc.7a837152f075af7p-4L, 0x8.11b249af1111423p-4L, -0x8.7d914829b598f95p-2L, 0xc.02cbea4a32dfa62p-2L, -0x9.c56cbc0e3a809b2p-2L, 0x9.9ce8a27ecaa85dcp-3L, -0x8.45cbd99e57663b5p-5L, -0x9.fc51346f5fdbbd1p-7L, 0x9.5c5e8d27e8757a5p-7L, -0x9.adbb20305389e61p-9L, 0xf.99d436da1232d03p-15L, 0x8.e183ed134ef71abp-14L, -0xc.a86e5be474c0e96p-18L, -0xf.c8248b432ea6598p-24L, 0xc.5b65b5fbac3587ap-28L, -0x9.0ef6feba3b62aaap-37L, -0xf.163bbc628cd0205p-52L, 0x0p+0L}; + return {0x0p+0L, 0x8.e14bf0d3914bbd4p-3L, -0xd.395e1e0030afb9ep-2L, 0xc.74c0bc74cd98ea3p-2L, -0xc.7a837152f075af7p-4L, 0x8.11b249af1111423p-4L, -0x8.7d914829b598f95p-2L, 0xc.02cbea4a32dfa62p-2L, -0x9.c56cbc0e3a809b2p-2L, 0x9.9ce8a27ecaa85dcp-3L, -0x8.45cbd99e57663b5p-5L, -0x9.fc51346f5fdbbd1p-7L, 0x9.5c5e8d27e8757a5p-7L, -0x9.adbb20305389e61p-9L, 0xf.99d436da1232d03p-15L, 0x8.e183ed134ef71abp-14L, -0xc.a86e5be474c0e96p-18L, -0xf.c8248b432ea6598p-24L, 0xc.5b65b5fbac3587ap-28L, -0x9.0ef6feba3b62aaap-37L, -0xf.163bbc628cd0205p-52L, -0x0p+0L}; } if constexpr (order == 4) { - return {0x0p+0L, 0xa.8ec6de67c9035e6p-2L, -0xe.19d824dfde72f6dp+0L, 0x8.73ca916679ee85cp+2L, -0xc.d5d2067714e04fcp+2L, 0xf.8a2626fba89eb9ep+2L, -0x8.be72b56cec81364p+3L, 0x8.d5fc68d6e61f284p+3L, -0xd.776d445bff43fe9p+2L, 0xb.68cbafe17a170d9p+1L, 0xb.260c57f14226301p-2L, -0xa.59e9b6c7cbb8775p+0L, 0xc.73a928d3fadf73cp-1L, -0xc.f1068b2a098cfb7p-3L, 0xc.7b89f9326d61459p-8L, 0x8.0174d562c8cba6dp-7L, -0x9.15ae83ebcf927bfp-10L, -0xb.4adb18b3736b1d7p-16L, 0xd.d0d90c2bd7c17dcp-20L, -0xe.f8336babb7fe566p-29L, -0xc.76037cef17bea43p-42L, 0x0p+0L}; + return {0x0p+0L, 0xa.8ec6de67c9035e6p-2L, -0xe.19d824dfde72f6dp+0L, 0x8.73ca916679ee85cp+2L, -0xc.d5d2067714e04fcp+2L, 0xf.8a2626fba89eb9ep+2L, -0x8.be72b56cec81364p+3L, 0x8.d5fc68d6e61f284p+3L, -0xd.776d445bff43fe9p+2L, 0xb.68cbafe17a170d9p+1L, 0xb.260c57f14226301p-2L, -0xa.59e9b6c7cbb8775p+0L, 0xc.73a928d3fadf73cp-1L, -0xc.f1068b2a098cfb7p-3L, 0xc.7b89f9326d61459p-8L, 0x8.0174d562c8cba6dp-7L, -0x9.15ae83ebcf927bfp-10L, -0xb.4adb18b3736b1d7p-16L, 0xd.d0d90c2bd7c17dcp-20L, -0xe.f8336babb7fe566p-29L, -0xc.76037cef17bea43p-42L, -0x0p+0L}; } if constexpr (order == 5) { return {0x0p+0L, 0xa.a9c20e5c28262cfp-1L, -0x8.b245130e7d6435p+2L, 0xb.a14e18dc5e6e3bcp+3L, -0xe.912cdf0d3c0c767p+3L, 0x9.b65ec3110fa60e2p+1L, 0xa.51416899076b9c3p+4L, -0x9.702559487170317p+5L, 0xa.f8c633aadd02508p+5L, -0xc.05df7f7dc4ac954p+5L, 0xc.856a5b0e339f38dp+5L, -0xa.0acf073101b6074p+5L, 0xa.75d036d99ea9702p+4L, -0xb.6dad412b4521e9bp+2L, 0xb.309b84fa4322d85p-4L, 0xb.eddbea7d15a390ap-2L, -0x8.c28d4a8cf1aeca5p-4L, -0x9.18649e56e05bc3p-10L, 0xb.f4af141ec671a67p-13L, -0x8.9b691ba71b88c22p-21L, -0xe.51787a5ba8032eep-34L, -0x0p+0L}; @@ -873,10 +1053,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0x8.748c703a8d2f937p-1L, -0xf.aa58ee38f4a5c91p+1L, 0xc.6649ad2cb179936p+3L, -0xa.ec3fa7ecd7c41f4p+4L, 0xb.fdefe0fae49564ap+4L, -0x9.ab0aa5c6715fdd9p+4L, 0x8.0517805b79afde9p+4L, -0xe.b0d6b4042318ee3p+3L, 0xa.58c96b88b1b4fe8p+3L, -0x9.5ebf7665dec59a9p+2L, 0xe.91d7b95490989a7p+0L, -0xd.2d1fb184d6542c6p-1L, -0x8.04bdd18c802f85cp-3L, 0x9.4d5f62e5127240ep-1L, -0xb.6b1e334f7b950afp-2L, 0xa.90dcb78f808ffecp-4L, -0xc.4d0f4db204d1cc9p-9L, -0xe.607c58598cbad8fp-11L, 0xc.f4a5486617740b1p-19L, 0xa.b9cd4f73758e428p-29L, 0x0p+0L}; } if constexpr (order == 8) { - return {0x0p+0L, 0xe.1527ff4b308c86p-3L, -0xd.4e4b4124bea1ab6p+0L, 0xa.dddc6243d72ddb1p+2L, -0xa.292b9d75d9dfa3ap+3L, 0xc.8e405a961b38a93p+3L, -0xc.26b2dc1d7fdae55p+3L, 0xb.3c70e9b2cbd6e2ap+3L, -0xa.499812dedb44ac4p+3L, 0x8.a209e470c03af8ap+3L, -0xd.a8eccfb33c210d9p+2L, 0xa.41c0c3baf0658a2p+2L, -0xd.392b16aec032585p+1L, 0xf.0072464fbb8a1e7p+0L, -0x8.a917bbb9a6176d9p+0L, 0x8.a94b0f3707ab7abp-1L, -0x9.ecec45327d721f6p-3L, 0x9.f8e2c727153415ep-7L, 0xd.9f7da20d270d536p-9L, -0xd.d50acf33eea750ap-16L, -0xb.616ca66f1d70df8p-25L, 0x0p+0L}; + return {0x0p+0L, 0xe.1527ff4b308c86p-3L, -0xd.4e4b4124bea1ab6p+0L, 0xa.dddc6243d72ddb1p+2L, -0xa.292b9d75d9dfa3ap+3L, 0xc.8e405a961b38a93p+3L, -0xc.26b2dc1d7fdae55p+3L, 0xb.3c70e9b2cbd6e2ap+3L, -0xa.499812dedb44ac4p+3L, 0x8.a209e470c03af8ap+3L, -0xd.a8eccfb33c210d9p+2L, 0xa.41c0c3baf0658a2p+2L, -0xd.392b16aec032585p+1L, 0xf.0072464fbb8a1e7p+0L, -0x8.a917bbb9a6176d9p+0L, 0x8.a94b0f3707ab7abp-1L, -0x9.ecec45327d721f6p-3L, 0x9.f8e2c727153415ep-7L, 0xd.9f7da20d270d536p-9L, -0xd.d50acf33eea750ap-16L, -0xb.616ca66f1d70df8p-25L, -0x0p+0L}; } if constexpr (order == 9) { - return {0x0p+0L, 0xa.40798a9071f9886p-4L, -0x9.c7f1784d562bdc9p-1L, 0xf.c7a08dd664fcb0ep+0L, -0xd.e3061daa7c85492p+1L, 0xe.9ea25350b56d92ap+1L, -0xa.9b6b7c19db33b9dp+1L, 0x8.4a9d3d29256548ap+1L, -0x8.606e5181f471318p+1L, 0xd.7ab58a9a794ee91p+0L, -0xf.b144a4677fb9db7p-1L, 0x9.f7c1a61944d51aep-1L, -0xe.3ad5af0d7e3ad17p-2L, 0xe.59c5d962fa5f5d7p-3L, -0xb.123c2df8aedf04ap-4L, 0xb.0d8bd72ff86061cp-5L, -0x8.5b12395e9ebc248p-6L, 0xe.4d9f7834474485cp-11L, 0xb.e29451f90ab62c4p-11L, -0x8.6239c0145764987p-16L, -0xd.a073c2e5c404378p-25L, 0x0p+0L}; + return {0x0p+0L, 0xa.40798a9071f9886p-4L, -0x9.c7f1784d562bdc9p-1L, 0xf.c7a08dd664fcb0ep+0L, -0xd.e3061daa7c85492p+1L, 0xe.9ea25350b56d92ap+1L, -0xa.9b6b7c19db33b9dp+1L, 0x8.4a9d3d29256548ap+1L, -0x8.606e5181f471318p+1L, 0xd.7ab58a9a794ee91p+0L, -0xf.b144a4677fb9db7p-1L, 0x9.f7c1a61944d51aep-1L, -0xe.3ad5af0d7e3ad17p-2L, 0xe.59c5d962fa5f5d7p-3L, -0xb.123c2df8aedf04ap-4L, 0xb.0d8bd72ff86061cp-5L, -0x8.5b12395e9ebc248p-6L, 0xe.4d9f7834474485cp-11L, 0xb.e29451f90ab62c4p-11L, -0x8.6239c0145764987p-16L, -0xd.a073c2e5c404378p-25L, -0x0p+0L}; } if constexpr (order == 10) { return {0x0p+0L, 0xc.512ff3ce8e26ed6p-7L, -0xb.ceeeec30690a3d4p-4L, 0x9.7c942104078413dp-2L, -0x8.2529923084db5b6p-1L, 0xf.de393fe11f77db2p-2L, -0x9.745275d635af24dp-2L, 0xc.b7fc3e7f2662817p-3L, -0xe.dc63fbdf961d121p-3L, 0xc.433f6669ce8d77ap-3L, -0xb.80cde13c7fe01dap-4L, 0xd.186905a733e3482p-5L, -0xb.9a073d1ccf31d0dp-5L, 0xb.40c0c94f326298p-6L, -0xa.8537af479d9846bp-8L, 0xc.69d908f5c1cd609p-9L, -0xd.b913ea9c09b9ab5p-10L, -0xd.188a7ef97de034bp-15L, 0xb.8f3d1da6c45f8b5p-13L, -0xa.775011edc5ea48p-17L, -0x8.4d76c9c441821a3p-24L, 0x0p+0L}; @@ -885,40 +1065,75 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.f82d860ed311d7772f0a5fc02aa2p-7Q, 0x1.da87adf545dea36f29603c50206fp-2Q, 0x1.a074ea6831a179cbcefe13bdeb27p-1Q, -0x1.d3dbc22db33632cb9d3eeea9309ep-2Q, 0x1.07dc8c4b588098d99d74923fef11p-2Q, -0x1.17e06a0deb06ffc5a354422c2917p-3Q, 0x1.d85300a8e9a59db3d8e328544722p-5Q, -0x1.0710616766f9db787dd784803608p-6Q, 0x1.0182a0c9a44ba81f2b490da87ce3p-9Q, 0x1.d91cd19825f46395eba40bde2571p-14Q, 0x1.f2bfaace30f58a825ed0b3a11e16p-15Q, -0x1.d7e9ba7b3ac4736029b548526141p-15Q, 0x1.5c274e2e04a6575e26e75abeb4d6p-18Q, 0x1.63562e1b18da7fac5905b88575eep-20Q, -0x1.0af5800900ccbea5a647053aa06fp-26Q, 0x1.1409cb495cfaa9cc50f1fb2798a1p-28Q, -0x1.1601287f207dc804b32b2b372bd4p-35Q, -0x1.4f944d6c974a0ba10244cbd7bf6ap-42Q, -0x1.ad914b3b9c6449c459a4d88261fp-53Q, -0x1.65d8440cb5909e7eb82f547cb7ffp-70Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.f82d860ed311d7772f0a5fc02a6dp-7Q, 0x1.da87adf545dea36f29603c50206cp-2Q, 0x1.a074ea6831a179cbcefe13bdeb26p-1Q, -0x1.d3dbc22db33632cb9d3eeea93097p-2Q, 0x1.07dc8c4b588098d99d74923fef1p-2Q, -0x1.17e06a0deb06ffc5a354422c2913p-3Q, 0x1.d85300a8e9a59db3d8e328544719p-5Q, -0x1.0710616766f9db787dd78480360dp-6Q, 0x1.0182a0c9a44ba81f2b490da87cf1p-9Q, 0x1.d91cd19825f46395eba40bde2534p-14Q, 0x1.f2bfaace30f58a825ed0b3a11e2p-15Q, -0x1.d7e9ba7b3ac4736029b548526137p-15Q, 0x1.5c274e2e04a6575e26e75abeb4c3p-18Q, 0x1.63562e1b18da7fac5905b88575e8p-20Q, -0x1.0af5800900ccbea5a647053aa052p-26Q, 0x1.1409cb495cfaa9cc50f1fb279896p-28Q, -0x1.1601287f207dc804b32b2b372befp-35Q, -0x1.4f944d6c974a0ba10244cbd7bf57p-42Q, -0x1.ad914b3b9c6449c459a4d882621ap-53Q, -0x1.65d8440cb5909e7eb82f547cb81ep-70Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.4988f615d8fc21013726786516bbp-4Q, 0x1.cd9786f046dbd06d9795ae530616p-1Q, -0x1.f034187a5d75333e9dbb5b104718p-1Q, -0x1.075e3bcf1d71f31524cf997afba1p-3Q, 0x1.303436308c600230256305532d4ep-3Q, -0x1.71d07ef81053ea5196f6a9c9bd7ap-12Q, -0x1.321c6b5970b994e47d89204a7748p-4Q, 0x1.0f00f0747578208709a35dbb5683p-4Q, -0x1.fec807d6bcde2f6b9da93df4aa7bp-6Q, 0x1.092c0960e80ebe73a0fb5f592a93p-7Q, -0x1.1857810566102a80b03f6d574873p-11Q, -0x1.693105a2bb706882bf9e39158ac2p-12Q, 0x1.a2acf3b1f9d0749452e4dc44d928p-14Q, -0x1.c4d81f25bbab666371fdd702fd07p-19Q, -0x1.e0284772a21eeb07c87b76642dabp-20Q, 0x1.7db784c0b013093ad9874c402643p-25Q, 0x1.739c15dc80c555f970d134b64534p-30Q, -0x1.d9433a2520a2e30f13e7c351f19ep-36Q, 0x1.651bd505e5aaae5cab5b708f20d3p-46Q, 0x1.29782f98b98d8b31230d837a9eebp-62Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.4988f615d8fc2101372678651696p-4Q, 0x1.cd9786f046dbd06d9795ae5305eep-1Q, -0x1.f034187a5d75333e9dbb5b1046e1p-1Q, -0x1.075e3bcf1d71f31524cf997afbe8p-3Q, 0x1.303436308c600230256305532d57p-3Q, -0x1.71d07ef81053ea5196f6a9c9ea93p-12Q, -0x1.321c6b5970b994e47d89204a7726p-4Q, 0x1.0f00f0747578208709a35dbb5672p-4Q, -0x1.fec807d6bcde2f6b9da93df4aa6dp-6Q, 0x1.092c0960e80ebe73a0fb5f592a81p-7Q, -0x1.1857810566102a80b03f6d57486cp-11Q, -0x1.693105a2bb706882bf9e39158aa2p-12Q, 0x1.a2acf3b1f9d0749452e4dc44d918p-14Q, -0x1.c4d81f25bbab666371fdd702fceap-19Q, -0x1.e0284772a21eeb07c87b76642d8fp-20Q, 0x1.7db784c0b013093ad9874c402637p-25Q, 0x1.739c15dc80c555f970d134b64517p-30Q, -0x1.d9433a2520a2e30f13e7c351f17bp-36Q, 0x1.651bd505e5aaae5cab5b708f20cp-46Q, 0x1.29782f98b98d8b31230d837a9eccp-62Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.5c07e5083d7090314f4044902659p-2Q, 0x1.307a2a8e783ea1f99bb361a3cef6p-1Q, -0x1.a41fd4c6e53047b890408086b56p+1Q, 0x1.08f3303fd9b5f02cbec87edc4433p+2Q, -0x1.6a2a8758fd08bb3ed6b347424ce1p+1Q, 0x1.5f04ae9c9034ab19fcfae00d09d5p+0Q, -0x1.150c77d31565d35edf80240e5f13p-2Q, -0x1.78ed1cb9b0ec1e760990f81b5f62p-3Q, 0x1.4f99902d11603738023acee04ff8p-3Q, -0x1.41156e1c846c464a303629e297f8p-5Q, -0x1.6c5861062a83616dee9275c18c3cp-7Q, 0x1.21e04958552e6f03502dd79356aap-7Q, -0x1.cd1c35ab2ad92bf156188522c4d7p-10Q, 0x1.af6480e4adc46cb9e0c7649b6bfap-17Q, 0x1.0136c3fb4b19b9b10157d7a8345p-15Q, -0x1.6928b0e495d07fb474aad680049ap-19Q, -0x1.6377af73884bfae0ae8534a755ap-25Q, 0x1.64323c063686a79e3f723a6f6a99p-30Q, -0x1.6fb51174aa8e375496c635af8171p-40Q, -0x1.32449da1b960881894abd22269dap-55Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.5c07e5083d7090314f404490267fp-2Q, 0x1.307a2a8e783ea1f99bb361a3ce3fp-1Q, -0x1.a41fd4c6e53047b890408086b518p+1Q, 0x1.08f3303fd9b5f02cbec87edc442ap+2Q, -0x1.6a2a8758fd08bb3ed6b347424cecp+1Q, 0x1.5f04ae9c9034ab19fcfae00d09b9p+0Q, -0x1.150c77d31565d35edf80240e5e1cp-2Q, -0x1.78ed1cb9b0ec1e760990f81b60f9p-3Q, 0x1.4f99902d11603738023acee050bdp-3Q, -0x1.41156e1c846c464a303629e298b7p-5Q, -0x1.6c5861062a83616dee9275c18c97p-7Q, 0x1.21e04958552e6f03502dd7935724p-7Q, -0x1.cd1c35ab2ad92bf156188522c5bfp-10Q, 0x1.af6480e4adc46cb9e0c7649b6f56p-17Q, 0x1.0136c3fb4b19b9b10157d7a834f7p-15Q, -0x1.6928b0e495d07fb474aad6800549p-19Q, -0x1.6377af73884bfae0ae8534a7569p-25Q, 0x1.64323c063686a79e3f723a6f6b93p-30Q, -0x1.6fb51174aa8e375496c635af829fp-40Q, -0x1.32449da1b960881894abd2226adap-55Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.1c297e1a722977a767a1ff2272dcp+0Q, -0x1.a72bc3c00615f73ba93716b01652p+1Q, 0x1.8e98178e99b31d46ae26eec0a62ep+1Q, -0x1.8f506e2a5e0eb5edc0313f13910ap-1Q, 0x1.02364935e2222846b9cdda1bad5bp-1Q, -0x1.0fb2290536b31f2a2fbff34045aap+1Q, 0x1.80597d49465bf4c4d8869fb53015p+1Q, -0x1.38ad9781c750136475272cd6e5fep+1Q, 0x1.339d144fd9550bb8463b544a639ep+0Q, -0x1.08b97b33caecc76a026ab8335ac7p-2Q, -0x1.3f8a268debfb77a1cde76d550dc6p-4Q, 0x1.2b8bd1a4fd0eaf4aaa08a96cf13fp-4Q, -0x1.35b764060a713cc242948b5c3e5ep-6Q, 0x1.f33a86db42465a05a6ee3ed1f1c2p-12Q, 0x1.1c307da269dee355c5c2d340dc8p-11Q, -0x1.950dcb7c8e981d2c1ff88549c6afp-15Q, -0x1.f904916865d4cb30ef383c46a7ddp-21Q, 0x1.8b6cb6bf7586b0f4f1fcded43d5cp-25Q, -0x1.21dedfd7476c5553241f507abe95p-34Q, -0x1.e2c7778c519a040a7c97727eda55p-49Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.1c297e1a722977a767a1ff227742p+0Q, -0x1.a72bc3c00615f73ba93716b01e65p+1Q, 0x1.8e98178e99b31d46ae26eec0b1cap+1Q, -0x1.8f506e2a5e0eb5edc0313f13b62bp-1Q, 0x1.02364935e2222846b9cdda1bc87p-1Q, -0x1.0fb2290536b31f2a2fbff3404bbdp+1Q, 0x1.80597d49465bf4c4d8869fb534fap+1Q, -0x1.38ad9781c750136475272cd6e902p+1Q, 0x1.339d144fd9550bb8463b544a6643p+0Q, -0x1.08b97b33caecc76a026ab8335d28p-2Q, -0x1.3f8a268debfb77a1cde76d550fe7p-4Q, 0x1.2b8bd1a4fd0eaf4aaa08a96cf3ep-4Q, -0x1.35b764060a713cc242948b5c4153p-6Q, 0x1.f33a86db42465a05a6ee3ed1f4ffp-12Q, 0x1.1c307da269dee355c5c2d340dfe6p-11Q, -0x1.950dcb7c8e981d2c1ff88549cb89p-15Q, -0x1.f904916865d4cb30ef383c46ae0fp-21Q, 0x1.8b6cb6bf7586b0f4f1fcded4430cp-25Q, -0x1.21dedfd7476c5553241f507ac2d7p-34Q, -0x1.e2c7778c519a040a7c97727ee351p-49Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.51d8dbccf9206bcc4420e8d9a9eap+1Q, -0x1.c33b049bfbce5ed995e580451e63p+3Q, 0x1.0e79522ccf3dd0b86ea89a553ap+5Q, -0x1.9aba40cee29c09f71dc38c35b29bp+5Q, 0x1.f144c4df7513d73b0fd71dc9dfb5p+5Q, -0x1.17ce56ad9d9026c80fe9053e2d6dp+6Q, 0x1.1abf8d1adcc3e5071c7209bb681cp+6Q, -0x1.aeeda88b7fe87fd16bcf8e052138p+5Q, 0x1.6d1975fc2f42e1b2096263c936fdp+4Q, 0x1.64c18afe2844c60255dd74d11ep+1Q, -0x1.4b3d36d8f9770ee95e2721f914bbp+3Q, 0x1.8e75251a7f5bee7754c2a951492ep+2Q, -0x1.9e20d16541319f6d732cb61c0c9ap+0Q, 0x1.8f713f264dac28b16bf91d5056c3p-5Q, 0x1.002e9aac591974da848a16c85358p-4Q, -0x1.22b5d07d79f24f7de83980b60562p-7Q, -0x1.695b63166e6d63ad77759faf5052p-13Q, 0x1.ba1b21857af82fb76bf474298db1p-17Q, -0x1.df066d7576ffcacbc6c94f3c5a26p-26Q, -0x1.8ec06f9de2f7d48618cf3f2e50ccp-39Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.51d8dbccf9206bcc4420e8d9ae07p+1Q, -0x1.c33b049bfbce5ed995e58045194fp+3Q, 0x1.0e79522ccf3dd0b86ea89a5531bfp+5Q, -0x1.9aba40cee29c09f71dc38c35a548p+5Q, 0x1.f144c4df7513d73b0fd71dc9df3fp+5Q, -0x1.17ce56ad9d9026c80fe9053e3b69p+6Q, 0x1.1abf8d1adcc3e5071c7209bb8006p+6Q, -0x1.aeeda88b7fe87fd16bcf8e054d05p+5Q, 0x1.6d1975fc2f42e1b2096263c969bbp+4Q, 0x1.64c18afe2844c60255dd74d07edbp+1Q, -0x1.4b3d36d8f9770ee95e2721f907e9p+3Q, 0x1.8e75251a7f5bee7754c2a9513fecp+2Q, -0x1.9e20d16541319f6d732cb61c018ap+0Q, 0x1.8f713f264dac28b16bf91d504bd5p-5Q, 0x1.002e9aac591974da848a16c844c8p-4Q, -0x1.22b5d07d79f24f7de83980b5ed9fp-7Q, -0x1.695b63166e6d63ad77759faf33b7p-13Q, 0x1.ba1b21857af82fb76bf4742957f6p-17Q, -0x1.df066d7576ffcacbc6c94f3c14p-26Q, -0x1.8ec06f9de2f7d48618cf3f2e0232p-39Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.553841cb8504c59ec882878d66e2p+2Q, -0x1.1648a261cfac86a07a57717eb0e3p+5Q, 0x1.7429c31b8bcdc777e068523e1aeap+6Q, -0x1.d2259be1a7818ecd1bf98b178549p+6Q, 0x1.36cbd86221f4c1c3813018fd6cbfp+4Q, 0x1.4a282d1320ed73864b5c77ade623p+7Q, -0x1.2e04ab290e2e062d6018a9efa98fp+8Q, 0x1.5f18c6755ba04a0fe584709ac85dp+8Q, -0x1.80bbefefb89592a7731266a97561p+8Q, 0x1.90ad4b61c673e71a7b1a662f6ff2p+8Q, -0x1.4159e0e62036c0e7d3a9392e2704p+8Q, 0x1.4eba06db33d52e049a4997516cf9p+7Q, -0x1.6db5a82568a43d359e1327442546p+5Q, 0x1.6613709f48645b09020d12e639edp-1Q, 0x1.7dbb7d4fa2b472146ed1344dc15bp+1Q, -0x1.1851a9519e35d9490483602f6703p-1Q, -0x1.230c93cadc0b78607a6df81f1b6fp-7Q, 0x1.7e95e283d8ce34ce8180ea4f4ca4p-10Q, -0x1.136d2374e371184371f1175ee7a9p-18Q, -0x1.ca2f0f4b750065dbf1a921be61p-31Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.553841cb8504c59ec8828722c9cp+2Q, -0x1.1648a261cfac86a07a577122f4eep+5Q, 0x1.7429c31b8bcdc777e06851df4ff3p+6Q, -0x1.d2259be1a7818ecd1bf98b71d684p+6Q, 0x1.36cbd86221f4c1c381302622675ep+4Q, 0x1.4a282d1320ed73864b5c73d42965p+7Q, -0x1.2e04ab290e2e062d6018a7405d3cp+8Q, 0x1.5f18c6755ba04a0fe5846dc7ce5fp+8Q, -0x1.80bbefefb89592a7731263e58b6ep+8Q, 0x1.90ad4b61c673e71a7b1a638ff4cp+8Q, -0x1.4159e0e62036c0e7d3a9372888dep+8Q, 0x1.4eba06db33d52e049a499539c59ap+7Q, -0x1.6db5a82568a43d359e1324f88c7ep+5Q, 0x1.6613709f48645b09020d1137193bp-1Q, 0x1.7dbb7d4fa2b472146ed131c42bb3p+1Q, -0x1.1851a9519e35d94904835e4c0f44p-1Q, -0x1.230c93cadc0b78607a6df63dd398p-7Q, 0x1.7e95e283d8ce34ce8180e79a24c3p-10Q, -0x1.136d2374e371184371f11564efd5p-18Q, -0x1.ca2f0f4b750065dbf1a91e494693p-31Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.43e579b56aec6db8f44fad025d31p+2Q, -0x1.2015783789a1305c4b04f4166dd8p+5Q, 0x1.be9eb07640a6e4dcf71e8ec13b53p+6Q, -0x1.917bfbcd50104121d7cf2e45b56cp+7Q, 0x1.e7564ac670464ea6f5bb02fedc24p+7Q, -0x1.dd46b6e14bd993fb7d27e48ccc74p+7Q, 0x1.c24b2cb18bb303674bf660cced48p+7Q, -0x1.9299f7098407dc40f69f41c308ebp+7Q, 0x1.2da088f392f175bbf1502adde1fap+7Q, -0x1.7f74fc0a8fbbbd2a6629268e303fp+6Q, 0x1.cafceab55c22225d33d1409b59ap+5Q, -0x1.cfad0a751fefca13c3b32651d4a9p+4Q, 0x1.f4f5eade96653abb41ce938b652dp+2Q, 0x1.14b6d949957a5646a55036bfd229p+0Q, -0x1.5e908a00f74d9f8f6b65d27bbd91p+0Q, 0x1.1ee7d490234e22c547ade06a389fp-2Q, -0x1.1e667fbdaff187310b0175bb8ebfp-11Q, -0x1.81c4231f27f23e6bc64b0c485b78p-10Q, 0x1.28216d550397d430f87999376f2cp-18Q, 0x1.ebdb45ca159a64fa9f199a6004f2p-30Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.43e579b56aec6db8f44fad1a2ca3p+2Q, -0x1.2015783789a1305c4b04f4299082p+5Q, 0x1.be9eb07640a6e4dcf71e8edd1986p+6Q, -0x1.917bfbcd50104121d7cf2e5fb61ap+7Q, 0x1.e7564ac670464ea6f5bb03253324p+7Q, -0x1.dd46b6e14bd993fb7d27e4be31d5p+7Q, 0x1.c24b2cb18bb303674bf661030f65p+7Q, -0x1.9299f7098407dc40f69f41f42557p+7Q, 0x1.2da088f392f175bbf1502b058265p+7Q, -0x1.7f74fc0a8fbbbd2a662926cc0952p+6Q, 0x1.cafceab55c22225d33d140f11ba1p+5Q, -0x1.cfad0a751fefca13c3b326a88e5bp+4Q, 0x1.f4f5eade96653abb41ce93f1a983p+2Q, 0x1.14b6d949957a5646a550369bc7aap+0Q, -0x1.5e908a00f74d9f8f6b65d286f0e6p+0Q, 0x1.1ee7d490234e22c547ade0704929p-2Q, -0x1.1e667fbdaff187310b0173bcb94dp-11Q, -0x1.81c4231f27f23e6bc64b0c2f2493p-10Q, 0x1.28216d550397d430f8799924705dp-18Q, 0x1.ebdb45ca159a64fa9f199a16a149p-30Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.0e918e0751a5f26d66d32652a3c3p+2Q, -0x1.f54b1dc71e94b922c8b7d9cedc49p+4Q, 0x1.8cc935a5962f326b8767ea0da425p+6Q, -0x1.5d87f4fd9af883e7ca8f85fa5bb5p+7Q, 0x1.7fbdfc1f5c92ac9439f72daa4354p+7Q, -0x1.356154b8ce2bfbb26ff261795e76p+7Q, 0x1.00a2f00b6f35fbd2365b8c89c9e7p+7Q, -0x1.d61ad68084631dc5b1cb3579539ep+6Q, 0x1.4b192d7116369fcf46bbc7a85648p+6Q, -0x1.2bd7eeccbbd8b3529c9ec84730c4p+5Q, 0x1.d23af72a9213134d138ab8713629p+3Q, -0x1.a5a3f6309aca858b5548cd2e0f1fp+2Q, -0x1.0097ba319005f0b824ee38e92ecp+0Q, 0x1.29abec5ca24e481b150656fe0d65p+2Q, -0x1.6d63c669ef72a15dead10bcfb7ep+1Q, 0x1.521b96f1f011ffd834fe0c58029ap-1Q, -0x1.89a1e9b6409a39917b2558e5c9cap-6Q, -0x1.cc0f8b0b31975b1da167d6c2e885p-8Q, 0x1.9e94a90cc2ee8162e5d90cd367bep-16Q, 0x1.5739a9ee6eb1c850a9597ef2cebp-26Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.0e918e0751a5f26d66d326215241p+2Q, -0x1.f54b1dc71e94b922c8b7d974b91p+4Q, 0x1.8cc935a5962f326b8767e9c68e69p+6Q, -0x1.5d87f4fd9af883e7ca8f85ba9a3ep+7Q, 0x1.7fbdfc1f5c92ac9439f72d5fc5fbp+7Q, -0x1.356154b8ce2bfbb26ff26135d3d6p+7Q, 0x1.00a2f00b6f35fbd2365b8c4d7e4cp+7Q, -0x1.d61ad68084631dc5b1cb350d96d3p+6Q, 0x1.4b192d7116369fcf46bbc7590d76p+6Q, -0x1.2bd7eeccbbd8b3529c9ec7ea0986p+5Q, 0x1.d23af72a9213134d138ab79fb28fp+3Q, -0x1.a5a3f6309aca858b5548cc51629cp+2Q, -0x1.0097ba319005f0b824ee39f7e25p+0Q, 0x1.29abec5ca24e481b150656fa7b24p+2Q, -0x1.6d63c669ef72a15dead10bbf465bp+1Q, 0x1.521b96f1f011ffd834fe0c4deb25p-1Q, -0x1.89a1e9b6409a39917b2558fc77d9p-6Q, -0x1.cc0f8b0b31975b1da167d6d21402p-8Q, 0x1.9e94a90cc2ee8162e5d90cf2df7p-16Q, 0x1.5739a9ee6eb1c850a9597f22010bp-26Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.c2a4ffe9661190c09a7af6cb9ca4p+0Q, -0x1.a9c9682497d4356cc97c764c71e1p+3Q, 0x1.5bbb8c487ae5bb615e8e71957082p+5Q, -0x1.452573aebb3bf474bf24d39c0c75p+6Q, 0x1.91c80b52c3671525c3375728fd33p+6Q, -0x1.84d65b83affb5ca97ccaf4bcaa17p+6Q, 0x1.678e1d36597adc53993fd53deeacp+6Q, -0x1.4933025bdb6895888c17391d3c87p+6Q, 0x1.14413c8e18075f1444cc50c11326p+6Q, -0x1.b51d99f6678421b18139cf56717cp+5Q, 0x1.483818775e0cb14480b3264cce69p+5Q, -0x1.a72562d5d8064b092b7ba7b739cp+4Q, 0x1.e00e48c9f77143cec0c43437c4bep+3Q, -0x1.1522f77734c2edb19342dec0265fp+3Q, 0x1.152961e6e0f56f56720078cacb8p+2Q, -0x1.3d9d88a64fae43ec46db6df5abf8p+0Q, 0x1.3f1c58e4e2a682bc6ff0544f4ae4p-4Q, 0x1.b3efb441a4e1aa6b7bfce49b9d8ep-6Q, -0x1.baa159e67dd4ea14a46823aaab92p-13Q, -0x1.6c2d94cde3ae1bef5e760af7804dp-22Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.c2a4ffe9661190c09a7af8b79479p+0Q, -0x1.a9c9682497d4356cc97c7817608dp+3Q, 0x1.5bbb8c487ae5bb615e8e73227ceep+5Q, -0x1.452573aebb3bf474bf24d5595fd4p+6Q, 0x1.91c80b52c3671525c3375a1dd5efp+6Q, -0x1.84d65b83affb5ca97ccaf8b73947p+6Q, 0x1.678e1d36597adc53993fd96dab7ap+6Q, -0x1.4933025bdb6895888c173cc7b2a5p+6Q, 0x1.14413c8e18075f1444cc540dc34bp+6Q, -0x1.b51d99f6678421b18139d5beb61cp+5Q, 0x1.483818775e0cb14480b32b95042cp+5Q, -0x1.a72562d5d8064b092b7bae77a4cbp+4Q, 0x1.e00e48c9f77143cec0c43c67669bp+3Q, -0x1.1522f77734c2edb19342e41508e1p+3Q, 0x1.152961e6e0f56f5672007e36f948p+2Q, -0x1.3d9d88a64fae43ec46db73db181ap+0Q, 0x1.3f1c58e4e2a682bc6ff059fa1f8dp-4Q, 0x1.b3efb441a4e1aa6b7bfceb788233p-6Q, -0x1.baa159e67dd4ea14a46828d67fefp-13Q, -0x1.6c2d94cde3ae1bef5e760e39de7cp-22Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.480f31520e3f310c306bdc1e8024p-1Q, -0x1.38fe2f09aac57b92aacdab2b4e96p+2Q, 0x1.f8f411bacc9f961bc5fe565a48cfp+3Q, -0x1.bc60c3b54f90a9241998e1a7c135p+4Q, 0x1.d3d44a6a16adb2540f6c000e54a3p+4Q, -0x1.536d6f833b66773a9702164e108p+4Q, 0x1.0953a7a524aca913282b25214d25p+4Q, -0x1.0c0dca303e8e262fc968302773e3p+4Q, 0x1.af56b1534f29dd21b9240ac133b1p+3Q, -0x1.f628948ceff73b6d1ae734867e3p+2Q, 0x1.3ef834c3289aa35b262758c2782ep+2Q, -0x1.c75ab5e1afc75a2d9d28a2f8d82cp+1Q, 0x1.cb38bb2c5f4bebadf622e77e6e2bp+0Q, -0x1.624785bf15dbe093496ba0bcf74cp-1Q, 0x1.61b17ae5ff0c0c37a77beb09baeep-2Q, -0x1.0b62472bd3d7849095f6de060b33p-3Q, 0x1.c9b3ef0688e890b76d9f1545a8bdp-8Q, 0x1.7c528a3f2156c58889998659bd68p-8Q, -0x1.0c4738028aec930d4308dfe577d7p-13Q, -0x1.b40e785cb88086ef360909d3183cp-22Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.480f31520e3f310c306bdafaf042p-1Q, -0x1.38fe2f09aac57b92aacdaa15d1b7p+2Q, 0x1.f8f411bacc9f961bc5fe5499f875p+3Q, -0x1.bc60c3b54f90a9241998e0192f5ep+4Q, 0x1.d3d44a6a16adb2540f6bfe5db93ap+4Q, -0x1.536d6f833b66773a970214ff031cp+4Q, 0x1.0953a7a524aca913282b24103258p+4Q, -0x1.0c0dca303e8e262fc9682f1cf736p+4Q, 0x1.af56b1534f29dd21b9240915b75ap+3Q, -0x1.f628948ceff73b6d1ae732743415p+2Q, 0x1.3ef834c3289aa35b262757674e4bp+2Q, -0x1.c75ab5e1afc75a2d9d28a11fcce2p+1Q, 0x1.cb38bb2c5f4bebadf622e599ec8fp+0Q, -0x1.624785bf15dbe093496b9f1d5135p-1Q, 0x1.61b17ae5ff0c0c37a77be972ec5ep-2Q, -0x1.0b62472bd3d7849095f6dced344cp-3Q, 0x1.c9b3ef0688e890b76d9f130077d8p-8Q, 0x1.7c528a3f2156c588899985294901p-8Q, -0x1.0c4738028aec930d4308df6549ap-13Q, -0x1.b40e785cb88086ef360909630572p-22Q, 0x0p+0Q}; } if constexpr (order == 10) { - return {0x0p+0Q, 0x1.8a25fe79d1c4ddac335be805ed36p-4Q, -0x1.79dddd860d2147a741654102c6e4p-1Q, 0x1.2f92842080f0827925b021c0be64p+1Q, -0x1.04a53246109b6b6c0d3ef6e90b5fp+2Q, 0x1.fbc727fc23eefb6381085f0dbe0ep+1Q, -0x1.2e8a4ebac6b5e49a84fad579cb0bp+1Q, 0x1.96ff87cfe4cc502ebda9734be9aep+0Q, -0x1.db8c7f7bf2c3a242351f98d5116p+0Q, 0x1.8867eccd39d1aef37286907e6727p+0Q, -0x1.7019bc278ffc03b406b2fe913c47p-1Q, 0x1.a30d20b4e67c690471d7cb32e446p-2Q, -0x1.7340e7a399e63a19859bd63999a6p-2Q, 0x1.68181929e64c530045ddd9689347p-3Q, -0x1.50a6f5e8f3b308d50e585e890eebp-5Q, 0x1.8d3b211eb839ac111937339fb303p-6Q, -0x1.b7227d5381373569d6206bc13579p-7Q, -0x1.a3114fdf2fbc06953fcb9948c145p-12Q, 0x1.71e7a3b4d88bf16a9f3c250c332p-10Q, -0x1.4eea023db8bd4900ec558c34e57cp-14Q, -0x1.09aed93888304346e30d1466764ap-21Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.8a25fe79d1c4ddac335be8819a8ap-4Q, -0x1.79dddd860d2147a7416541793f71p-1Q, 0x1.2f92842080f0827925b022200689p+1Q, -0x1.04a53246109b6b6c0d3ef73b505ap+2Q, 0x1.fbc727fc23eefb6381085fb0ea64p+1Q, -0x1.2e8a4ebac6b5e49a84fad5dff777p+1Q, 0x1.96ff87cfe4cc502ebda973db1ba2p+0Q, -0x1.db8c7f7bf2c3a242351f9975276ep+0Q, 0x1.8867eccd39d1aef372869101502fp+0Q, -0x1.7019bc278ffc03b406b2ff135206p-1Q, 0x1.a30d20b4e67c690471d7cbcbb0dfp-2Q, -0x1.7340e7a399e63a19859bd6b84d4cp-2Q, 0x1.68181929e64c530045ddd9e48ddfp-3Q, -0x1.50a6f5e8f3b308d50e585f11b7ap-5Q, 0x1.8d3b211eb839ac11193734372a7dp-6Q, -0x1.b7227d5381373569d6206c572353p-7Q, -0x1.a3114fdf2fbc06953fcb9931063cp-12Q, 0x1.71e7a3b4d88bf16a9f3c256dd239p-10Q, -0x1.4eea023db8bd4900ec558c766ab3p-14Q, -0x1.09aed93888304346e30d148d3c14p-21Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0153862862186078764210148054384665436987968299086163110916049774302302509757"), boost::lexical_cast("0.463408201308509360685176566158665903411342347448682788607059620387445077532"), boost::lexical_cast("0.813391995638826649479330465641602870909776013569395886947250616963915046071"), boost::lexical_cast("-0.456892999686536248322183305850398976442122564743086558409415878925543062613"), boost::lexical_cast("0.257677261446702307763827286244642468068192138990732487426320016042544286916"), boost::lexical_cast("-0.136658505010362584956891849494062948225995486599841370839711839313046305597"), boost::lexical_cast("0.0576567662131323839275754677629378113124645271947858794185772706476552313105"), boost::lexical_cast("-0.0160561515054805568795851215654406366459996109297291243447819308339625896857"), boost::lexical_cast("0.00196464741458920772402831404575169651260998923501842539475704095236022681377"), boost::lexical_cast("0.000112798827446855800791029803530656734991774835196287349403803335501621270655"), boost::lexical_cast("0.0000594554781954403684033785931588011770054264082896496671103792500235464433295"), boost::lexical_cast("-0.0000562564136659884191230679156227868258475904572875936016422586126656291941418"), boost::lexical_cast("0.00000518789197025363361471577911859966580654417969569942459663451570764021770902"), boost::lexical_cast("0.00000132373214147764795577030206527013960188029793451345023965588627064041150704"), boost::lexical_cast("-0.0000000155390580715395054554173944015565071767006531414831642901826878560185386309"), boost::lexical_cast("0.00000000401688533248623065067198103021582298234469777511892684855878156604369527873"), boost::lexical_cast("-0.0000000000316054552262036582439139330382598424252005270997818496711644728508686815474"), boost::lexical_cast("-0.000000000000298054298041780380540322339753186187258299530548878985631631068130187725404"), boost::lexical_cast("-0.000000000000000186295230202489625442020988651081124044989063537598156376169532878324451123"), boost::lexical_cast("-0.00000000000000000000118400908492220475093634528886504359773639984757721702393945884924044020060"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0804528820713690537679942952538307927448324275292783996775043561168764668792"), boost::lexical_cast("0.901546685057318722606544198126464222660980499114959450975631195995562075653"), boost::lexical_cast("-0.969147458016531260537001332368135743279288495176200726279321756564798820440"), boost::lexical_cast("-0.128597705133580020105456519744387638532533583968712163469421630736054713073"), boost::lexical_cast("0.148537085873201139450805597667488365500301018520176104569141326668098237996"), boost::lexical_cast("-0.000352682530778098478434438198206217867661443912512135381010073899276667394708"), boost::lexical_cast("-0.0747341340384494360574688474082559001763945248197182213228281231111410765743"), boost::lexical_cast("0.0661630051393711509223363180529539046273421054851354002096935895895589322378"), boost::lexical_cast("-0.0311756207037897739706621005131524864825329454001744116473141441231765143715"), boost::lexical_cast("0.00809240777908867125888958717233316990861675515056387491671985358196801653703"), boost::lexical_cast("-0.000534709572707320623292468935686184597428178805593585443411787185724270841266"), boost::lexical_cast("-0.000344459049457110720806003651240962720647979860629593805430817794517683005097"), boost::lexical_cast("0.0000998200401053258733952321911032602231933728074550949033897739987254062819085"), boost::lexical_cast("-0.00000337395239823704966830913455725328211227310458904067484070296753117772464426"), boost::lexical_cast("-0.00000178872548120729485900416417576878299998863692536435591416599550573501317289"), boost::lexical_cast("0.0000000444376921974173227032345936619919762366059115958040870563226908761301278160"), boost::lexical_cast("0.00000000135190824431474161018642835112040642148891160635198350421744055168342457059"), boost::lexical_cast("-0.0000000000269018645424657851835556324494989262226498212843590290606946175171968874237"), boost::lexical_cast("0.0000000000000198235161188202162103176056710579230402924914509457090754670397189279898276"), boost::lexical_cast("0.000000000000000000251966447199947741787778445282273243764250629238425265938759750960070288565"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.339873865726403823874694504886230871354288247669120680859586352931910650802"), boost::lexical_cast("0.594682054416009422785849668697082787755660519264449722390570694692122196031"), boost::lexical_cast("-3.28222140990908627713882079321726861540709199811588816762195376180866676151"), boost::lexical_cast("4.13984304652589597399637402140982673032568889063380246443975686333143709866"), boost::lexical_cast("-2.82942287297379899817138989243274273519930408716847888511551935958914702440"), boost::lexical_cast("1.37116519281717568064954984833983547962197792842040302587532179757516934771"), boost::lexical_cast("-0.270555374392051307156490696193132354552391022825927018192372907103041586105"), boost::lexical_cast("-0.184046005646555652197008303457890114279643877305115529070305316012624288888"), boost::lexical_cast("0.163867117286074044679000700383983800581641338738039398170630891049204540480"), boost::lexical_cast("-0.0391947889912791807642293867045881185152396327816360187024476982368191084445"), boost::lexical_cast("-0.0111189340353413485147270893150106933823953700659393824844796952100999217654"), boost::lexical_cast("0.00884631711293466609492290342912398272864238580654395596445675814230221634902"), boost::lexical_cast("-0.00175899579589153660809115004201226274173551391561283661338278039734836261348"), boost::lexical_cast("0.0000128565010951553987674529189490213861196316851900637195447923613618392713735"), boost::lexical_cast("0.0000306622896125458146897677483454122489183614226371943713405943027958351707517"), boost::lexical_cast("-0.00000269084385910343679257051203982323513897525615083571592326449237527728689054"), boost::lexical_cast("-0.0000000413818658474313744350785912858525849906772047679216774507165554252423741218"), boost::lexical_cast("0.00000000129583433007671170780305889377624130848179796328575186687487583063726979193"), boost::lexical_cast("-0.00000000000130635874598988057004789486171609848753519703338247439616746352104966358265"), boost::lexical_cast("-0.0000000000000000332056463780931130817519370455224958306055159032983343572060292369140142184"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.11000812669423065201408736025211163644399899284324684887960095471364939561"), boost::lexical_cast("-3.30602309108887457792110755842802529228225817003803592467879858392073911911"), boost::lexical_cast("3.11401648009214052848211556518765632906037687404471414836791183188060792139"), boost::lexical_cast("-0.779910509750178545578760075470210269561158846741323352073939231867070856952"), boost::lexical_cast("0.504320419147067435491020898845963984718363947233445348465286515163831830149"), boost::lexical_cast("-2.12262451891492618285514915625369193255653192234826741230297804628732384508"), boost::lexical_cast("3.00273099973557546696148253375588381632944425785087065216350459031139544566"), boost::lexical_cast("-2.44279760205120109440892243572637061929619282682731780365162404438278331658"), boost::lexical_cast("1.20161559056699135006082217921675647820154446695817183171496635761222714468"), boost::lexical_cast("-0.258520054851697959251777889637477507802570871015640968136924573283611103029"), boost::lexical_cast("-0.0780126100569294916448477016495706044874014105663040020611150095580660962657"), boost::lexical_cast("0.0731313885915515903797324164189780989405177158479326795726386610419770126352"), boost::lexical_cast("-0.0189035870354593148101137495477572951021716699214895023786902900987211265014"), boost::lexical_cast("0.000476101513144094836944099173568934880809112562865614785758014193018660882339"), boost::lexical_cast("0.000542048296030493162492883395621428687561762136240537247628992820097566715272"), boost::lexical_cast("-0.0000482861860046811029771577073119595197181588063401982223039270103384434060022"), boost::lexical_cast("-0.000000940669036930439153511860275388566814505399165175554813865283382967471512611"), boost::lexical_cast("0.0000000460334894609940486697079115005770453881482490309436808499379292148676402667"), boost::lexical_cast("-0.0000000000659089444165122287064782258267187195472691487712170997364379779451246094661"), boost::lexical_cast("-0.00000000000000334995342514096728311283812541641458320430857209624625943650939806191456233"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.63943049915747295902408884381492456615013102835825837278218094298381059975"), boost::lexical_cast("-14.10095434632826170706015754809187240473647390058020018665331529642229273560"), boost::lexical_cast("33.80923876769495738178795299271336231298081520211817127483146415279224333890"), boost::lexical_cast("-51.34094392422730822169625783218914621608905661019301981247127969679259656370"), boost::lexical_cast("62.15857863021890815900436678476312302754891486816333143898291218703682880770"), boost::lexical_cast("-69.95150252603710930320770250549877801440701750703949252096860337732317006130"), boost::lexical_cast("70.68706171009487085024307021653246851862364809264251626425285523034249218320"), boost::lexical_cast("-53.86604413017363404938611622171529791896555966533772428275471051281075597180"), boost::lexical_cast("22.81871603498091653948869197203037193649186992806348920181610865185092457340"), boost::lexical_cast("2.78715646181129822503760020954122490057506409714944714939146997166220972189"), boost::lexical_cast("-10.35122244241549248750998798029030033554857264769764070098905656424283124680"), boost::lexical_cast("6.22589995944639343162447192606753092490081390725441582060459808007413775955"), boost::lexical_cast("-1.61768826219594651676851154369360491801137647456640794313175997512654068683"), boost::lexical_cast("0.0487600549117153291242267435006532626983384560499959793316799708161496794985"), boost::lexical_cast("0.0625444452212547866619276559961974061899918807020408330419298222926353018189"), boost::lexical_cast("-0.00887177162344660903733729314681709539971921946704977985564110911846620363922"), boost::lexical_cast("-0.000172308435777249447063922911208598540360539757913378670543697270097011078916"), boost::lexical_cast("0.0000131757849528219664204655654758892673480971917353333971564471583795581462196"), boost::lexical_cast("-0.0000000278829310385893278753467667297067592695172655495747023195258681155064789066"), boost::lexical_cast("-0.00000000000283330126035508764154051402203972353668751336274290837719220178109180982040"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.33155865550004324339411698075437576125001114031131680543558258637926722542"), boost::lexical_cast("-34.78546596922894035358221752013471418576656119892560802306039573901884498850"), boost::lexical_cast("93.04078333893580274273554726200086898992117829963170573289656818645421417950"), boost::lexical_cast("-116.53672745308757790035524178072195510211938340870303002375366241537010190400"), boost::lexical_cast("19.42476690609991902018771707602390047697990808120145803963343105970827114300"), boost::lexical_cast("165.07846889283130224972392556901964656573551315330125176803668977902167923900"), boost::lexical_cast("-302.01823670002161100444326963103590042074566858643871979378909432822312022500"), boost::lexical_cast("351.09677823531118456691013587333441077552991458958521920799116438915277804300"), boost::lexical_cast("-384.73412988907291298126127857698299454483222915340925177050408733410565143700"), boost::lexical_cast("400.67693148703611109141641562065904066331648411152048236040109020183777077600"), boost::lexical_cast("-321.35108793531867698893279523881710779471319811290683986733942416578230536600"), boost::lexical_cast("167.36333355910991474853808717960164594081543936479125456031564843552211416400"), boost::lexical_cast("-45.71369961953726477752159230409155711113565175365517527967211543525719318890"), boost::lexical_cast("0.699367064899157418988908846748802289435069698849047603720655697336454274985"), boost::lexical_cast("2.98228422535376897161740571847584616697653819004075212716090431169277576972"), boost::lexical_cast("-0.547498027051101574561205976576588259175101412173034924756008962903023025120"), boost::lexical_cast("-0.00888211456705821551022409285786342463315511465858554494859435135093539710800"), boost::lexical_cast("0.00145944781339651318786975450416647682444162007080853467985950420011002879779"), boost::lexical_cast("-0.00000410417202524410779263314775667707070690036033233187273470129649919772492533"), boost::lexical_cast("-0.000000000833431526424512126756266586592842608072719180575476717997770913071706154856"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.06088106838769290054968439394567345106326651755752600922150619200981904649"), boost::lexical_cast("-36.01048320187342016064122793694682929039037974207289646083751798817843620580"), boost::lexical_cast("111.65497002381900847391604108056132695425373640954404816320887269328425438600"), boost::lexical_cast("-200.74215547182405062933561376177594578645448343871864023725391767591774835600"), boost::lexical_cast("243.66853923912563333720102697769935941130760592520157588467019833307464642300"), boost::lexical_cast("-238.63811401415731691311790369583173568877153676175659117260463100444743159100"), boost::lexical_cast("225.14682535963357317765848454921569290528275448357783818162730153311551574600"), boost::lexical_cast("-201.30071286904051720114799658023138705341732545954845691270252578520003833200"), boost::lexical_cast("150.81354485672703044612123433476281157995253230519198222354112466751203726500"), boost::lexical_cast("-95.86424271108893183923291774912315316192315495940385275849744648479129371610"), boost::lexical_cast("57.37349454581659918342847281164914782841679698416807207317817480336962650140"), boost::lexical_cast("-28.97974630119186880188417545488990640756883378387320588356588113332720316360"), boost::lexical_cast("7.82750961052950670790289612831387996295164858527519664270838963476345026334"), boost::lexical_cast("1.08091505094987758545055341443439247053069659406365117057429783552826238760"), boost::lexical_cast("-1.36939299129089996854048024593726735159933395218523578300840349681327697303"), boost::lexical_cast("0.280181237504463119434520254208320451998395772453319918592970421102919439139"), boost::lexical_cast("-0.000546265385956676161209750070768621430280614491537142208248905211721125879926"), boost::lexical_cast("-0.00147158111921181446121734700653833523667079723972927387216993834057729665501"), boost::lexical_cast("0.00000441268942542730566701346669932877725269376519910764607900294893415486917856"), boost::lexical_cast("0.00000000178936364555416156355622735225731323849173624958182729551826746278581656345"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.22763395991077497600708800752870112512802019777846803123422609253523444499"), boost::lexical_cast("-31.33083894520795656643557338514370343692021933760780167709842547864854441400"), boost::lexical_cast("99.19649370888855559161612539040862291452743358994450794072159006509952447180"), boost::lexical_cast("-174.76554100529416030240273725663066184549978635556382128606302159015804699400"), boost::lexical_cast("191.87106416707077830176594781673733058344977599226321690051187655465260417000"), boost::lexical_cast("-154.69009950176950187209831807333662376535557038525297678672923277217118961000"), boost::lexical_cast("128.31823764545969592124295974645679685264644800112728210780946540963513417100"), boost::lexical_cast("-117.52620888526942424001135357455119389132936854292759496512541610625978723100"), boost::lexical_cast("82.77458740900115668785824293717372920888452561941133683536618899571268039270"), boost::lexical_cast("-37.48043594311010343509519734340882271874817171143915172303616751347250271800"), boost::lexical_cast("14.56969793619700440657543207683336718496887543376426838538228469975643333100"), boost::lexical_cast("-6.58813242670581930805873617097473570421450364523198050554153666935990605860"), boost::lexical_cast("-1.00231517515205560297111170032367032830624266948757853925257748047437485705"), boost::lexical_cast("4.65111836477555984946605574234122313918908034655085234744720545935378656185"), boost::lexical_cast("-2.85460739300369418699655129485713788069696498710719979317225671767847465746"), boost::lexical_cast("0.660366742165965802145434489749517292319612368608367169686199145406925272970"), boost::lexical_cast("-0.0240254194586754357618804390248717384819465676000390734107846903076164025556"), boost::lexical_cast("-0.00701996941206172392237021839195076817058449392415590849322406637448645715144"), boost::lexical_cast("0.0000247109356222148754647438533593506924053068870724972211566904008498782300086"), boost::lexical_cast("0.0000000199783389222010785055607244259171818398069280425424499723517627544611259097"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.76033019493303856051687449323434388609090202601383913064385190376448183312"), boost::lexical_cast("-13.30583579203687943081629136293267795607309397777682235599140484923954366500"), boost::lexical_cast("43.46657616257718154366654543277971738319342135931706703195817811035185093990"), boost::lexical_cast("-81.28657410638605936274247923055646375830285098524867924682488987143954182420"), boost::lexical_cast("100.44535569493907191996663384307406316811627445344739700254788195526559558500"), boost::lexical_cast("-97.20933347474678202187842214477633354845397460973373353664056650468754174360"), boost::lexical_cast("89.88878331109182469176945890436872342814210396602291754411932369668940781030"), boost::lexical_cast("-82.29981368567145730476008183188924859214306594631403889804786963467235197800"), boost::lexical_cast("69.06370756169948695128970734742378882589833357909995593129091002885751309170"), boost::lexical_cast("-54.63945381644636331825019271777000447410834252910294578185697306015613918450"), boost::lexical_cast("41.02739041572348156154461856933135418845380309772196428740672678193620244590"), boost::lexical_cast("-26.44662745983841279602705174819159511393608583819553179666861965546358182250"), boost::lexical_cast("15.00174369284244633245038836591523658570351126534715276565083434487614618120"), boost::lexical_cast("-8.66051839144173892722259100499075549842639519928721133973595893424223456610"), boost::lexical_cast("4.33065078303101010579895420947640558162604044791599818852754301702712403354"), boost::lexical_cast("-1.24068502483685799590790437877354796560395991582308092016594732485261421186"), boost::lexical_cast("0.0779078934121258971785160919472512639431601470709999391983348576222593616764"), boost::lexical_cast("0.0266074428860304338208309476152802616336853971424135540169564254497724564119"), boost::lexical_cast("-0.000211062563905998390099917614137909944233433155336638390553050174056557131393"), boost::lexical_cast("-0.000000339167240842007413867671399755809233304462324861037758236912743626130786250"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.640740910784300850608448747428708985857357012208138478640701473826119071995"), boost::lexical_cast("-4.89051414436388374023627360586462653542345290441410991274311164920600966594"), boost::lexical_cast("15.77979361042251828056602777327009987727897110266960291592731419702813423270"), boost::lexical_cast("-27.77362414192706755256336444082924835831112932806579979321237948678315003340"), boost::lexical_cast("29.23932877961020134280019505838077863032589219652057187629061788645605764150"), boost::lexical_cast("-21.21421767485153769358479119905782957335265962757154762905239908876532045980"), boost::lexical_cast("16.58292355069242264838528754441677563862319454861075967735395941314979352800"), boost::lexical_cast("-16.75336665006114737745223674059225270255439659949203892423230795535668534770"), boost::lexical_cast("13.47933260222753983145552435052316707867495382773984724176882313942650009280"), boost::lexical_cast("-7.84622682345785779224288430587701090510900802969451706536957930436008165844"), boost::lexical_cast("4.98389929827173202326056782961135292617104624089540476377857847941525260633"), boost::lexical_cast("-3.55745576400618796425954497528896729856448578899557932766030185253705183005"), boost::lexical_cast("1.79383439858729303972208191272224953494584793148950860052667722677927056863"), boost::lexical_cast("-0.691951922965863057242007607869971708166614493007258083206682103112632034601"), boost::lexical_cast("0.345403595245226611364778279349176734775513013282472618970398880792800137706"), boost::lexical_cast("-0.130558544182786348133975182480093367398008959930808967410065238652717910680"), boost::lexical_cast("0.00698399148544449295954023501742964713288497821639870432194548542030467210561"), boost::lexical_cast("0.00580325961266701622640949560827629673155869792665828211986634190720023351417"), boost::lexical_cast("-0.000127925013729926386622233224468569958480332535234461953049381468504991463929"), boost::lexical_cast("-0.000000406109284685247160935243546331678983485852468994859006463959277286676783577"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 10) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0962276401961485707634176189196513057375091608921918899965672697435379944132"), boost::lexical_cast("-0.738020823110277888005487147166448075761525987078292691760810832596632987072"), boost::lexical_cast("2.37165881716817146455198793581381209035513677222207786580044965069857187102"), boost::lexical_cast("-4.07258278696320160772598824632813109064068582481103097502282770918877166041"), boost::lexical_cast("3.96701526462117458029198549268700257108768896990631205803877021434675874630"), boost::lexical_cast("-2.36359581108028672945508028330384282919707503803425311590987150576557002759"), boost::lexical_cast("1.58983658624201607243694322053302702142722584179817682236311853130843295497"), boost::lexical_cast("-1.85761257911759839282249544686803595350328330563233456669214217961095916255"), boost::lexical_cast("1.53283576975247258432308684518667039820955312493092996957652314465829192761"), boost::lexical_cast("-0.718946342305564226765801789587960150187823928357554861829190310338862006619"), boost::lexical_cast("0.409229765931396736377286349516677311112729496444160501691912630223706015387"), boost::lexical_cast("-0.362552279816077162656936242116884276626981924474959700030697184703184497473"), boost::lexical_cast("0.175827213851141339261603124481542122845079828131432589861342337234868002619"), boost::lexical_cast("-0.0410952380112717990391343459878268460433238007822432915185287645982519381943"), boost::lexical_cast("0.0242450545728193174252974797154291458408637398260602402141534552772736201039"), boost::lexical_cast("-0.0134013282722748930010976896226591764148191213826882368913426650595356115231"), boost::lexical_cast("-0.000399654030797277232222848286358951433908666645251171779800808018550167077414"), boost::lexical_cast("0.00141107498821972634714801414163161931174746710841213074592354066961171560834"), boost::lexical_cast("-0.0000798497430554567452885354694999821103608152142620563483234681315502038086578"), boost::lexical_cast("-0.000000494873154958329223506257796254007745988846883400505225346149184283368961203"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 12) { if constexpr (std::is_same_v) { @@ -932,13 +1147,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.77fed2p-3f, 0x1.e1d108p-1f, -0x1.9e9c7cp+1f, 0x1.bc153ap+1f, -0x1.240fe4p+1f, 0x1.80cee2p+0f, -0x1.abf5ep-1f, 0x1.50c7e8p-2f, -0x1.4654eep-4f, 0x1.091b1ep-6f, -0x1.59c476p-7f, 0x1.935e46p-8f, -0x1.8fe152p-10f, 0x1.90febp-15f, 0x1.09bd2p-15f, -0x1.da6da6p-19f, 0x1.a3887p-21f, 0x1.0f785p-26f, -0x1.63226ep-31f, -0x1.84d7e4p-38f, 0x1.75cc98p-48f, -0x1.a7d232p-65f, -0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.60087cp-1f, -0x1.1c49e2p+0f, -0x1.f023b2p+0f, 0x1.8d30cp+2f, -0x1.80e0dep+2f, 0x1.c1feacp+0f, 0x1.3621acp+1f, -0x1.f3ab98p+1f, 0x1.5e6794p+1f, -0x1.c702ecp-1f, -0x1.ee149ap-4f, 0x1.ffde0cp-3f, -0x1.a2cbbap-4f, 0x1.d58bf4p-7f, 0x1.206bp-9f, -0x1.dfc88ap-11f, 0x1.f86e54p-15f, 0x1.28c92p-18f, -0x1.9c90e4p-23f, -0x1.7e8cfp-32f, 0x1.cc8984p-39f, -0x1.051a2p-54f, 0x0p+0f}; + return {0x0p+0f, 0x1.60087cp-1f, -0x1.1c49e2p+0f, -0x1.f023b2p+0f, 0x1.8d30cp+2f, -0x1.80e0dep+2f, 0x1.c1feacp+0f, 0x1.3621acp+1f, -0x1.f3ab98p+1f, 0x1.5e6794p+1f, -0x1.c702ecp-1f, -0x1.ee149ap-4f, 0x1.ffde0cp-3f, -0x1.a2cbbap-4f, 0x1.d58bf4p-7f, 0x1.206bp-9f, -0x1.dfc88ap-11f, 0x1.f86e54p-15f, 0x1.28c92p-18f, -0x1.9c90e4p-23f, -0x1.7e8cfp-32f, 0x1.cc8984p-39f, -0x1.051a2p-54f, -0x0p+0f}; } if constexpr (order == 4) { return {0x0p+0f, 0x1.efa02p+0f, -0x1.34df3ep+3f, 0x1.596114p+4f, -0x1.014d7ap+5f, 0x1.5a4b7p+5f, -0x1.d72d9cp+5f, 0x1.1a6ca8p+6f, -0x1.f8d9fp+5f, 0x1.142ce2p+5f, -0x1.90f39p+1f, -0x1.822b1ap+3f, 0x1.52a34ep+3f, -0x1.0b934ap+2f, 0x1.335fd6p-1f, 0x1.17c48ap-3f, -0x1.003386p-4f, 0x1.68d464p-8f, 0x1.b6ad0ep-12f, -0x1.c361dcp-16f, -0x1.d59d4cp-25f, 0x1.f6c8c6p-31f, -0x1.1d1866p-45f, 0x0p+0f}; } if constexpr (order == 5) { - return {0x0p+0f, 0x1.1672f8p+2f, -0x1.d05e84p+4f, 0x1.49fc06p+6f, -0x1.e4421p+6f, 0x1.09c53p+6f, 0x1.677b64p+6f, -0x1.fbf398p+7f, 0x1.628082p+8f, -0x1.a2714ep+8f, 0x1.cb4de8p+8f, -0x1.9cacd4p+8f, 0x1.055f48p+8f, -0x1.8ddf94p+6f, 0x1.95561cp+3f, 0x1.8ab9ccp+2f, -0x1.6e4fp+1f, 0x1.43d702p-2f, 0x1.951dp-6f, -0x1.5137c2p-9f, -0x1.3e3df8p-18f, 0x1.78041p-23f, -0x1.aa8cd8p-37f, -0x0p+0f}; + return {0x0p+0f, 0x1.1672f8p+2f, -0x1.d05e84p+4f, 0x1.49fc06p+6f, -0x1.e4421p+6f, 0x1.09c53p+6f, 0x1.677b64p+6f, -0x1.fbf398p+7f, 0x1.628082p+8f, -0x1.a2714ep+8f, 0x1.cb4de8p+8f, -0x1.9cacd4p+8f, 0x1.055f48p+8f, -0x1.8ddf94p+6f, 0x1.95561cp+3f, 0x1.8ab9ccp+2f, -0x1.6e4fp+1f, 0x1.43d702p-2f, 0x1.951dp-6f, -0x1.5137c2p-9f, -0x1.3e3df8p-18f, 0x1.78041p-23f, -0x1.aa8cd8p-37f, 0x0p+0f}; } if constexpr (order == 6) { return {0x0p+0f, 0x1.6688e4p+2f, -0x1.50ba26p+5f, 0x1.18d5fcp+7f, -0x1.16422p+8f, 0x1.7cdc34p+8f, -0x1.a2f3c4p+8f, 0x1.aa319ep+8f, -0x1.958a02p+8f, 0x1.4bb5b2p+8f, -0x1.caa92ap+7f, 0x1.1f2d7ap+7f, -0x1.3b920ep+6f, 0x1.bc14b2p+4f, 0x1.8c237ap-1f, -0x1.7f694cp+2f, 0x1.3f67e2p+1f, -0x1.4cc6cp-2f, -0x1.6b5574p-6f, 0x1.38d6e4p-8f, 0x1.260d96p-17f, -0x1.5c7912p-21f, 0x1.8b88d4p-34f, 0x0p+0f}; @@ -947,7 +1162,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.80f666p+2f, -0x1.7dd222p+5f, 0x1.48b0d8p+7f, -0x1.41512cp+8f, 0x1.8f56fp+8f, -0x1.675a3ap+8f, 0x1.2e9626p+8f, -0x1.12635ap+8f, 0x1.969994p+7f, -0x1.59e9b6p+6f, 0x1.09d1ap+3f, 0x1.cc8ab2p+3f, -0x1.93c8d6p+4f, 0x1.013c24p+5f, -0x1.784654p+4f, 0x1.21acdep+3f, -0x1.6fa584p+0f, -0x1.39157p-4f, 0x1.343728p-5f, 0x1.c53d4ap-15f, -0x1.57bc52p-17f, 0x1.869c12p-29f, 0x0p+0f}; } if constexpr (order == 8) { - return {0x0p+0f, 0x1.d573dcp+1f, -0x1.ddfb9cp+4f, 0x1.a873c2p+6f, -0x1.b2204ep+7f, 0x1.23910ep+8f, -0x1.29c6cep+8f, 0x1.1c64b2p+8f, -0x1.156986p+8f, 0x1.ef2b6p+7f, -0x1.84734ap+7f, 0x1.20e874p+7f, -0x1.93d454p+6f, 0x1.e8c646p+5f, -0x1.0a8b2ep+5f, 0x1.14ef6ep+4f, -0x1.bab6f4p+2f, 0x1.4e6abp+0f, 0x1.e57eccp-4f, -0x1.0f174cp-4f, 0x1.a1f2dcp-12f, 0x1.400292p-15f, -0x1.6c7e6p-26f, -0x0p+0f}; + return {0x0p+0f, 0x1.d573dcp+1f, -0x1.ddfb9cp+4f, 0x1.a873c2p+6f, -0x1.b2204ep+7f, 0x1.23910ep+8f, -0x1.29c6cep+8f, 0x1.1c64b2p+8f, -0x1.156986p+8f, 0x1.ef2b6p+7f, -0x1.84734ap+7f, 0x1.20e874p+7f, -0x1.93d454p+6f, 0x1.e8c646p+5f, -0x1.0a8b2ep+5f, 0x1.14ef6ep+4f, -0x1.bab6f4p+2f, 0x1.4e6abp+0f, 0x1.e57eccp-4f, -0x1.0f174cp-4f, 0x1.a1f2dcp-12f, 0x1.400292p-15f, -0x1.6c7e6p-26f, 0x0p+0f}; } if constexpr (order == 9) { return {0x0p+0f, 0x1.d2f4ep+0f, -0x1.e196ep+3f, 0x1.ab061ep+5f, -0x1.a7b25ap+6f, 0x1.04d398p+7f, -0x1.c308c4p+6f, 0x1.759cb8p+6f, -0x1.73a4dcp+6f, 0x1.4d02e4p+6f, -0x1.c4dfc6p+5f, 0x1.217c84p+5f, -0x1.9d3e5ep+4f, 0x1.eced02p+3f, -0x1.ab1578p+2f, 0x1.780b78p+1f, -0x1.59e4e8p+0f, 0x1.04013ap-2f, 0x1.63e904p-4f, -0x1.26b33ap-5f, 0x1.1fc084p-10f, 0x1.9c18e6p-15f, -0x1.d792bap-25f, 0x0p+0f}; @@ -970,13 +1185,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.77fed2e016936p-3, 0x1.e1d10780fb061p-1, -0x1.9e9c7ce63835dp+1, 0x1.bc153af50c24cp+1, -0x1.240fe3f248861p+1, 0x1.80cee17390c18p+0, -0x1.abf5df7fd7acp-1, 0x1.50c7e71a108bbp-2, -0x1.4654ed4660724p-4, 0x1.091b1dd62c3e6p-6, -0x1.59c475f85d7f4p-7, 0x1.935e464b93aa4p-8, -0x1.8fe1513629012p-10, 0x1.90feb0894b435p-15, 0x1.09bd1f2d4e386p-15, -0x1.da6da6ad5e76cp-19, 0x1.a3886fa6d48c5p-21, 0x1.0f7850b94c92bp-26, -0x1.63226d50629cp-31, -0x1.84d7e34db15d3p-38, 0x1.75cc980993529p-48, -0x1.a7d23115de573p-65, -0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.60087b087d2efp-1, -0x1.1c49e2797e56dp+0, -0x1.f023b1706ef0ep+0, 0x1.8d30c07e51574p+2, -0x1.80e0de445b21ap+2, 0x1.c1feac4e70c18p+0, 0x1.3621ab0ea1b05p+1, -0x1.f3ab98611d47ap+1, 0x1.5e6794d526a25p+1, -0x1.c702eca93a33dp-1, -0x1.ee149aa686bb3p-4, 0x1.ffde0ca5fc1a1p-3, -0x1.a2cbb989ecd0ap-4, 0x1.d58bf4f6c76eap-7, 0x1.206affc103ba1p-9, -0x1.dfc88961f6b15p-11, 0x1.f86e53415f2ap-15, 0x1.28c920e4a3f6cp-18, -0x1.9c90e430666c9p-23, -0x1.7e8cf0898f333p-32, 0x1.cc8984cca607fp-39, -0x1.051a1f819156cp-54, 0x0p+0}; + return {0x0p+0, 0x1.60087b087d2efp-1, -0x1.1c49e2797e56dp+0, -0x1.f023b1706ef0ep+0, 0x1.8d30c07e51574p+2, -0x1.80e0de445b21ap+2, 0x1.c1feac4e70c18p+0, 0x1.3621ab0ea1b05p+1, -0x1.f3ab98611d47ap+1, 0x1.5e6794d526a25p+1, -0x1.c702eca93a33dp-1, -0x1.ee149aa686bb3p-4, 0x1.ffde0ca5fc1a1p-3, -0x1.a2cbb989ecd0ap-4, 0x1.d58bf4f6c76eap-7, 0x1.206affc103ba1p-9, -0x1.dfc88961f6b15p-11, 0x1.f86e53415f2ap-15, 0x1.28c920e4a3f6cp-18, -0x1.9c90e430666c9p-23, -0x1.7e8cf0898f333p-32, 0x1.cc8984cca607fp-39, -0x1.051a1f819156cp-54, -0x0p+0}; } if constexpr (order == 4) { return {0x0p+0, 0x1.efa01fe281c9p+0, -0x1.34df3dac7fcd4p+3, 0x1.5961138d5be95p+4, -0x1.014d7a672544ap+5, 0x1.5a4b6fa251ebp+5, -0x1.d72d9b409f2b2p+5, 0x1.1a6ca7d65632dp+6, -0x1.f8d9ef0a2890cp+5, 0x1.142ce1c1f06e2p+5, -0x1.90f390767ce47p+1, -0x1.822b1a96e2d92p+3, 0x1.52a34d125b1bep+3, -0x1.0b934a511e089p+2, 0x1.335fd67def29fp-1, 0x1.17c48a3b6f0b8p-3, -0x1.0033850ae8807p-4, 0x1.68d4635bbce68p-8, 0x1.b6ad0e03e206fp-12, -0x1.c361dbb11082cp-16, -0x1.d59d4ba004a56p-25, 0x1.f6c8c69c71b98p-31, -0x1.1d186572e3d31p-45, 0x0p+0}; } if constexpr (order == 5) { - return {0x0p+0, 0x1.1672f76c48a3bp+2, -0x1.d05e83fe81472p+4, 0x1.49fc051fc99a8p+6, -0x1.e442104e65336p+6, 0x1.09c52f838d2fdp+6, 0x1.677b64cbf326ep+6, -0x1.fbf39786bea7bp+7, 0x1.628081b6fdd81p+8, -0x1.a2714ddd5c22bp+8, 0x1.cb4de777b4f36p+8, -0x1.9cacd3aee3a7ep+8, 0x1.055f4806a8346p+8, -0x1.8ddf94a470b87p+6, 0x1.95561c2d77ea8p+3, 0x1.8ab9cc38b4949p+2, -0x1.6e4f007cb3f6fp+1, 0x1.43d7023213a8p-2, 0x1.951cff21de4acp-6, -0x1.5137c147339bcp-9, -0x1.3e3df8b2da275p-18, 0x1.78040f51a9568p-23, -0x1.aa8cd8e6f8972p-37, -0x0p+0}; + return {0x0p+0, 0x1.1672f76c48a3bp+2, -0x1.d05e83fe81472p+4, 0x1.49fc051fc99a8p+6, -0x1.e442104e65336p+6, 0x1.09c52f838d2fdp+6, 0x1.677b64cbf326ep+6, -0x1.fbf39786bea7bp+7, 0x1.628081b6fdd81p+8, -0x1.a2714ddd5c22bp+8, 0x1.cb4de777b4f36p+8, -0x1.9cacd3aee3a7ep+8, 0x1.055f4806a8346p+8, -0x1.8ddf94a470b87p+6, 0x1.95561c2d77ea8p+3, 0x1.8ab9cc38b4949p+2, -0x1.6e4f007cb3f6fp+1, 0x1.43d7023213a8p-2, 0x1.951cff21de4acp-6, -0x1.5137c147339bcp-9, -0x1.3e3df8b2da275p-18, 0x1.78040f51a9568p-23, -0x1.aa8cd8e6f8972p-37, 0x0p+0}; } if constexpr (order == 6) { return {0x0p+0, 0x1.6688e31cf50ep+2, -0x1.50ba2688bc043p+5, 0x1.18d5fc503a177p+7, -0x1.16422099d0e7p+8, 0x1.7cdc33f38c2d1p+8, -0x1.a2f3c3b8e6e4bp+8, 0x1.aa319d6af6ec9p+8, -0x1.958a02a102449p+8, 0x1.4bb5b15c50a64p+8, -0x1.caa9291eb011fp+7, 0x1.1f2d7abf22a73p+7, -0x1.3b920d0f7e0d1p+6, 0x1.bc14b21b62b93p+4, 0x1.8c237a0fa26d7p-1, -0x1.7f694c35d9d22p+2, 0x1.3f67e104a689cp+1, -0x1.4cc6c058f371dp-2, -0x1.6b557354b8d85p-6, 0x1.38d6e371bb052p-8, 0x1.260d95329ea8ep-17, -0x1.5c7911e0053bcp-21, 0x1.8b88d3fa551cp-34, 0x0p+0}; @@ -985,7 +1200,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.80f665163dff6p+2, -0x1.7dd2228ef0449p+5, 0x1.48b0d88030936p+7, -0x1.41512ba753d05p+8, 0x1.8f56f07493efp+8, -0x1.675a39773b248p+8, 0x1.2e9626a21624ep+8, -0x1.1263590aebe89p+8, 0x1.9699942af2221p+7, -0x1.59e9b6e0b9c21p+6, 0x1.09d1a0b7c5832p+3, 0x1.cc8ab1005087cp+3, -0x1.93c8d50945095p+4, 0x1.013c24badc627p+5, -0x1.784654bbd7368p+4, 0x1.21acdd98ca7e4p+3, -0x1.6fa583815aba2p+0, -0x1.39156fe5f0a3bp-4, 0x1.34372727b2155p-5, 0x1.c53d49d197175p-15, -0x1.57bc52155abeap-17, 0x1.869c11b6398bcp-29, 0x0p+0}; } if constexpr (order == 8) { - return {0x0p+0, 0x1.d573db31c98a6p+1, -0x1.ddfb9c5686a4fp+4, 0x1.a873c238f1ad9p+6, -0x1.b2204de17a53ap+7, 0x1.23910ebcbe60dp+8, -0x1.29c6cec686025p+8, 0x1.1c64b27b4c108p+8, -0x1.156985f5c8bcep+8, 0x1.ef2b60fc7ce31p+7, -0x1.84734ae811783p+7, 0x1.20e874beb6698p+7, -0x1.93d454c0120c5p+6, 0x1.e8c645d503448p+5, -0x1.0a8b2e2c06173p+5, 0x1.14ef6d11452bcp+4, -0x1.bab6f3f4dbb55p+2, 0x1.4e6aaf12e910ep+0, 0x1.e57ecc0ee730ep-4, -0x1.0f174cea8c306p-4, 0x1.a1f2dc12ec55dp-12, 0x1.4002914419fbbp-15, -0x1.6c7e600f14b1p-26, -0x0p+0}; + return {0x0p+0, 0x1.d573db31c98a6p+1, -0x1.ddfb9c5686a4fp+4, 0x1.a873c238f1ad9p+6, -0x1.b2204de17a53ap+7, 0x1.23910ebcbe60dp+8, -0x1.29c6cec686025p+8, 0x1.1c64b27b4c108p+8, -0x1.156985f5c8bcep+8, 0x1.ef2b60fc7ce31p+7, -0x1.84734ae811783p+7, 0x1.20e874beb6698p+7, -0x1.93d454c0120c5p+6, 0x1.e8c645d503448p+5, -0x1.0a8b2e2c06173p+5, 0x1.14ef6d11452bcp+4, -0x1.bab6f3f4dbb55p+2, 0x1.4e6aaf12e910ep+0, 0x1.e57ecc0ee730ep-4, -0x1.0f174cea8c306p-4, 0x1.a1f2dc12ec55dp-12, 0x1.4002914419fbbp-15, -0x1.6c7e600f14b1p-26, 0x0p+0}; } if constexpr (order == 9) { return {0x0p+0, 0x1.d2f4e044749b5p+0, -0x1.e196df480fe72p+3, 0x1.ab061d20276fp+5, -0x1.a7b259e6037ecp+6, 0x1.04d3977e22f61p+7, -0x1.c308c46a51aa1p+6, 0x1.759cb7054906p+6, -0x1.73a4db524ebc3p+6, 0x1.4d02e405c664p+6, -0x1.c4dfc682dd95ep+5, 0x1.217c835a844bfp+5, -0x1.9d3e5e5e09252p+4, 0x1.eced01c912f6cp+3, -0x1.ab15772777a66p+2, 0x1.780b7892927c5p+1, -0x1.59e4e79f9d385p+0, 0x1.04013ac7f90edp-2, 0x1.63e903ad632e8p-4, -0x1.26b339b06c46fp-5, 0x1.1fc083a0e2c36p-10, 0x1.9c18e59aa15abp-15, -0x1.d792baac952f3p-25, 0x0p+0}; @@ -1008,13 +1223,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xb.bff69700b49b018p-6L, 0xf.0e883c07d830881p-4L, -0xc.f4e3e731c1ae738p-2L, 0xd.e0a9d7a86125cacp-2L, -0x9.207f1f9244307c8p-2L, 0xc.06770b9c860beebp-3L, -0xd.5faefbfebd5fdcdp-4L, 0xa.863f38d0845d7acp-5L, -0xa.32a76a330391e66p-7L, 0x8.48d8eeb161f2f82p-9L, -0xa.ce23afc2ebf9f61p-10L, 0xc.9af2325c9d52281p-11L, -0xc.7f0a89b14808e6ap-13L, 0xc.87f5844a5a1a6fp-18L, 0x8.4de8f96a71c3322p-18L, -0xe.d36d356af3b5c2cp-22L, 0xd.1c437d36a462b4ap-24L, 0x8.7bc285ca6495b9cp-29L, -0xb.19136a8314dfe24p-34L, -0xc.26bf1a6d8ae9884p-41L, 0xb.ae64c04c9a9494fp-51L, -0xd.3e9188aef2b98edp-68L, -0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0xb.0043d843e977a5cp-4L, -0x8.e24f13cbf2b6563p-3L, -0xf.811d8b837786d61p-3L, 0xc.698603f28aba1a9p-1L, -0xc.0706f222d90cfdfp-1L, 0xe.0ff56273860c0ebp-3L, 0x9.b10d58750d82957p-2L, -0xf.9d5cc308ea3d3cbp-2L, 0xa.f33ca6a935126f2p-2L, -0xe.38176549d19e5a8p-4L, -0xf.70a4d53435d97d5p-7L, 0xf.fef0652fe0d0a8dp-6L, -0xd.165dcc4f668505cp-7L, 0xe.ac5fa7b63b752dbp-10L, 0x9.0357fe081dd0544p-12L, -0xe.fe444b0fb58abf3p-14L, 0xf.c3729a0af95006dp-18L, 0x9.464907251fb5d88p-21L, -0xc.e487218333646a4p-26L, -0xb.f467844c7999b52p-35L, 0xe.644c2665303f8d2p-42L, -0x8.28d0fc0c8ab5d4ep-57L, 0x0p+0L}; + return {0x0p+0L, 0xb.0043d843e977a5cp-4L, -0x8.e24f13cbf2b6563p-3L, -0xf.811d8b837786d61p-3L, 0xc.698603f28aba1a9p-1L, -0xc.0706f222d90cfdfp-1L, 0xe.0ff56273860c0ebp-3L, 0x9.b10d58750d82957p-2L, -0xf.9d5cc308ea3d3cbp-2L, 0xa.f33ca6a935126f2p-2L, -0xe.38176549d19e5a8p-4L, -0xf.70a4d53435d97d5p-7L, 0xf.fef0652fe0d0a8dp-6L, -0xd.165dcc4f668505cp-7L, 0xe.ac5fa7b63b752dbp-10L, 0x9.0357fe081dd0544p-12L, -0xe.fe444b0fb58abf3p-14L, 0xf.c3729a0af95006dp-18L, 0x9.464907251fb5d88p-21L, -0xc.e487218333646a4p-26L, -0xb.f467844c7999b52p-35L, 0xe.644c2665303f8d2p-42L, -0x8.28d0fc0c8ab5d4ep-57L, -0x0p+0L}; } if constexpr (order == 4) { return {0x0p+0L, 0xf.7d00ff140e483d9p-3L, -0x9.a6f9ed63fe69fc4p+0L, 0xa.cb089c6adf4abc4p+1L, -0x8.0a6bd3392a250e2p+2L, 0xa.d25b7d128f57c87p+2L, -0xe.b96cda04f958dddp+2L, 0x8.d3653eb2b19664fp+3L, -0xf.c6cf785144862cap+2L, 0x8.a1670e0f8370cfp+2L, -0xc.879c83b3e72381bp-2L, -0xc.1158d4b716c8e65p+0L, 0xa.951a6892d8df2a8p+0L, -0x8.5c9a5288f0446cfp-1L, 0x9.9afeb3ef794f7dcp-4L, 0x8.be2451db785c08ap-6L, -0x8.019c285744039edp-7L, 0xb.46a31adde7341a9p-11L, 0xd.b568701f1037966p-15L, -0xe.1b0edd888415d06p-19L, -0xe.acea5d00252b3f7p-28L, 0xf.b64634e38dcc13ap-34L, -0x8.e8c32b971e9855bp-48L, 0x0p+0L}; } if constexpr (order == 5) { - return {0x0p+0L, 0x8.b397bb62451d843p-1L, -0xe.82f41ff40a38e2ap+1L, 0xa.4fe028fe4cd412cp+3L, -0xf.22108273299ad98p+3L, 0x8.4e297c1c697e50ep+3L, 0xb.3bdb265f99372aep+3L, -0xf.df9cbc35f53d89cp+4L, 0xb.14040db7eec0855p+5L, -0xd.138a6eeae115b02p+5L, 0xe.5a6f3bbda79b16cp+5L, -0xc.e5669d771d3f14bp+5L, 0x8.2afa403541a338fp+5L, -0xc.6efca52385c3629p+3L, 0xc.aab0e16bbf53e59p+0L, 0xc.55ce61c5a4a452bp-1L, -0xb.727803e59fb7b2ap-2L, 0xa.1eb811909d4016fp-5L, 0xc.a8e7f90ef2563f2p-9L, -0xa.89be0a399cde158p-12L, -0x9.f1efc596d13a96ep-21L, 0xb.c0207a8d4ab3f5dp-26L, -0xd.5466c737c4b8e72p-40L, -0x0p+0L}; + return {0x0p+0L, 0x8.b397bb62451d843p-1L, -0xe.82f41ff40a38e2ap+1L, 0xa.4fe028fe4cd412cp+3L, -0xf.22108273299ad98p+3L, 0x8.4e297c1c697e50ep+3L, 0xb.3bdb265f99372aep+3L, -0xf.df9cbc35f53d89cp+4L, 0xb.14040db7eec0855p+5L, -0xd.138a6eeae115b02p+5L, 0xe.5a6f3bbda79b16cp+5L, -0xc.e5669d771d3f14bp+5L, 0x8.2afa403541a338fp+5L, -0xc.6efca52385c3629p+3L, 0xc.aab0e16bbf53e59p+0L, 0xc.55ce61c5a4a452bp-1L, -0xb.727803e59fb7b2ap-2L, 0xa.1eb811909d4016fp-5L, 0xc.a8e7f90ef2563f2p-9L, -0xa.89be0a399cde158p-12L, -0x9.f1efc596d13a96ep-21L, 0xb.c0207a8d4ab3f5dp-26L, -0xd.5466c737c4b8e72p-40L, 0x0p+0L}; } if constexpr (order == 6) { return {0x0p+0L, 0xb.344718e7a8702b2p-1L, -0xa.85d13445e021855p+2L, 0x8.c6afe281d0bb969p+4L, -0x8.b21104ce8738061p+5L, 0xb.e6e19f9c6168b44p+5L, -0xd.179e1dc73725588p+5L, 0xd.518ceb57b764b3fp+5L, -0xc.ac50150812244abp+5L, 0xa.5dad8ae285323a8p+5L, -0xe.554948f5808f966p+4L, 0x8.f96bd5f915394b1p+4L, -0x9.dc90687bf0684d6p+3L, 0xd.e0a590db15c99a5p+1L, 0xc.611bd07d136ba02p-4L, -0xb.fb4a61aece9122bp-1L, 0x9.fb3f0825344de52p-2L, -0xa.663602c79b8e8ecp-5L, -0xb.5aab9aa5c6c2553p-9L, 0x9.c6b71b8dd828c64p-11L, 0x9.306ca994f547077p-20L, -0xa.e3c88f0029de0d1p-24L, 0xc.5c469fd2a8dfc22p-37L, 0x0p+0L}; @@ -1023,7 +1238,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xc.07b328b1effb03p-1L, -0xb.ee9114778224972p+2L, 0xa.4586c401849b3a9p+4L, -0xa.0a895d3a9e82ae4p+5L, 0xc.7ab783a49f782e2p+5L, -0xb.3ad1cbb9d9242edp+5L, 0x9.74b13510b126f8ep+5L, -0x8.931ac8575f4469p+5L, 0xc.b4cca1579110a15p+4L, -0xa.cf4db705ce10894p+3L, 0x8.4e8d05be2c19216p+0L, 0xe.64558802843df89p+0L, -0xc.9e46a84a284ab95p+1L, 0x8.09e125d6e31381bp+2L, -0xb.c232a5deb9b3ce5p+1L, 0x9.0d66ecc653f1d47p+0L, -0xb.7d2c1c0ad5d0d11p-3L, -0x9.c8ab7f2f851da2dp-7L, 0x9.a1b9393d90aa708p-8L, 0xe.29ea4e8cb8baa35p-18L, -0xa.bde290aad5f5239p-20L, 0xc.34e08db1cc5dff7p-32L, 0x0p+0L}; } if constexpr (order == 8) { - return {0x0p+0L, 0xe.ab9ed98e4c52c95p-2L, -0xe.efdce2b435277e9p+1L, 0xd.439e11c78d6c4d6p+3L, -0xd.91026f0bd29d199p+4L, 0x9.1c8875e5f3069d6p+5L, -0x9.4e367634301286p+5L, 0x8.e32593da6083e54p+5L, -0x8.ab4c2fae45e736fp+5L, 0xf.795b07e3e718ad3p+4L, -0xc.239a57408bc15f7p+4L, 0x9.0743a5f5b34bf5fp+4L, -0xc.9ea2a6009062863p+3L, 0xf.46322ea81a241fbp+2L, -0x8.5459716030b981p+2L, 0x8.a77b688a295dd83p+1L, -0xd.d5b79fa6ddaa942p-1L, 0xa.735578974886db3p-3L, 0xf.2bf66077398705p-7L, -0x8.78ba67546182ecp-7L, 0xd.0f96e09762ae4b7p-15L, 0xa.00148a20cfdd93dp-18L, -0xb.63f30078a588239p-29L, -0x0p+0L}; + return {0x0p+0L, 0xe.ab9ed98e4c52c95p-2L, -0xe.efdce2b435277e9p+1L, 0xd.439e11c78d6c4d6p+3L, -0xd.91026f0bd29d199p+4L, 0x9.1c8875e5f3069d6p+5L, -0x9.4e367634301286p+5L, 0x8.e32593da6083e54p+5L, -0x8.ab4c2fae45e736fp+5L, 0xf.795b07e3e718ad3p+4L, -0xc.239a57408bc15f7p+4L, 0x9.0743a5f5b34bf5fp+4L, -0xc.9ea2a6009062863p+3L, 0xf.46322ea81a241fbp+2L, -0x8.5459716030b981p+2L, 0x8.a77b688a295dd83p+1L, -0xd.d5b79fa6ddaa942p-1L, 0xa.735578974886db3p-3L, 0xf.2bf66077398705p-7L, -0x8.78ba67546182ecp-7L, 0xd.0f96e09762ae4b7p-15L, 0xa.00148a20cfdd93dp-18L, -0xb.63f30078a588239p-29L, 0x0p+0L}; } if constexpr (order == 9) { return {0x0p+0L, 0xe.97a70223a4da73dp-3L, -0xf.0cb6fa407f38df5p+0L, 0xd.5830e9013b783a8p+2L, -0xd.3d92cf301bf5fbep+3L, 0x8.269cbbf117b07a3p+4L, -0xe.184623528d5047ap+3L, 0xb.ace5b82a4830181p+3L, -0xb.9d26da9275e177fp+3L, 0xa.6817202e331ffc5p+3L, -0xe.26fe3416ecaefa6p+2L, 0x9.0be41ad4225f98dp+2L, -0xc.e9f2f2f049291ep+1L, 0xf.67680e4897b60bep+0L, -0xd.58abb93bbd32d48p-1L, 0xb.c05bc49493e294p-2L, -0xa.cf273cfce9c2447p-3L, 0x8.2009d63fc87650fp-5L, 0xb.1f481d6b1973f98p-7L, -0x9.3599cd8362377f9p-8L, 0x8.fe041d07161ad18p-13L, 0xc.e0c72cd50ad59f6p-18L, -0xe.bc95d564a979727p-28L, 0x0p+0L}; @@ -1038,43 +1253,81 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.ba5636194c0939c427c9ec5958bcp-8Q, 0x1.3af72853b1890334601f92a1285cp-2Q, 0x1.da1521352f487f1b71f5ba20803ep-1Q, -0x1.5c6f665240adde3380bdc0aea43fp-2Q, 0x1.4840a35a3e5076b07b9bb98536c9p-3Q, -0x1.9d4fdc34ae4edcb2a06a461fd223p-4Q, 0x1.042a86a360591d6b2ba9327c6214p-4Q, -0x1.08554bd18ab256f6f2efbe750debp-5Q, 0x1.86c905bef28a68962be82a3bfae1p-7Q, -0x1.8785b403c86f6f7548c23ebef91ep-9Q, 0x1.f00fc00fce26eee7a53c75fa9281p-12Q, -0x1.43b7ce1fa4e5b162d9e05ba16226p-15Q, -0x1.dafa2eb6c7f5cbd9451ac8b8db32p-18Q, 0x1.2d678c174b94d04aa232fc24fe04p-18Q, -0x1.f0554b8e5712d06e0273c8cb5028p-22Q, -0x1.934a0de4da29338aed7c3945f163p-24Q, -0x1.3a5d95f1928eec0223d4d9335852p-29Q, 0x1.0e0d2138861875f5d48c437e1967p-33Q, -0x1.652333b327609e7169123d062a6bp-41Q, 0x1.02e74c07e60809b1acff78842c2ep-47Q, 0x1.bb358cf4adf4da69e5fa9c48097p-60Q, -0x1.f67e04f08f2152aabe6eb786b11ap-79Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.ba5636194c0939c427c9ec59581bp-8Q, 0x1.3af72853b1890334601f92a1284ap-2Q, 0x1.da1521352f487f1b71f5ba208041p-1Q, -0x1.5c6f665240adde3380bdc0aea438p-2Q, 0x1.4840a35a3e5076b07b9bb98536cdp-3Q, -0x1.9d4fdc34ae4edcb2a06a461fd21ap-4Q, 0x1.042a86a360591d6b2ba9327c6214p-4Q, -0x1.08554bd18ab256f6f2efbe750de9p-5Q, 0x1.86c905bef28a68962be82a3bfae8p-7Q, -0x1.8785b403c86f6f7548c23ebef922p-9Q, 0x1.f00fc00fce26eee7a53c75fa9287p-12Q, -0x1.43b7ce1fa4e5b162d9e05ba1624fp-15Q, -0x1.dafa2eb6c7f5cbd9451ac8b8db32p-18Q, 0x1.2d678c174b94d04aa232fc24fe09p-18Q, -0x1.f0554b8e5712d06e0273c8cb503bp-22Q, -0x1.934a0de4da29338aed7c3945f15bp-24Q, -0x1.3a5d95f1928eec0223d4d93358b6p-29Q, 0x1.0e0d2138861875f5d48c437e1957p-33Q, -0x1.652333b327609e7169123d062941p-41Q, 0x1.02e74c07e60809b1acff78842ce2p-47Q, 0x1.bb358cf4adf4da69e5fa9c480499p-60Q, -0x1.f67e04f08f2152aabe6eb786996dp-79Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.3daa1461d0cf47fff25f3df9640bp-5Q, 0x1.716f56bac1b1102dab376b1a4013p-1Q, -0x1.16bee9987071960277d4321df089p-2Q, -0x1.f51bd9fa1cf2d9e12262aabd142cp-1Q, 0x1.97243be7bf08455883f653e15918p-1Q, -0x1.b8eef0110c9fa4de8e71d38444edp-2Q, 0x1.2402bce395301d2ffcfa2c7a494fp-3Q, 0x1.80595820660c8830537a9f5a0fdp-10Q, -0x1.fa47fa3f4b021cbace01025dd983p-6Q, 0x1.025a88022a413b155a9680077b56p-6Q, -0x1.3d712aaad77758afb71e5644bf96p-9Q, -0x1.c5c0d04fc87430265835a2d868fdp-11Q, 0x1.c45b69075cdb62e0f0501d72eae6p-12Q, -0x1.6a1670435bfdd529f00d82c5e461p-15Q, -0x1.13c0d643a27dc3e64f7aa5ea1b46p-17Q, 0x1.b2cff794384635cf6c5bd8331b3p-20Q, -0x1.9ee90facd3d1333133d7e205e0a2p-25Q, -0x1.c87e1185ca55b3b93aa7457169a2p-29Q, 0x1.b076e966620448a8ccbae1de566ap-34Q, 0x1.71c42c5b1e646b3eaaa36a5a3022p-44Q, -0x1.e6d8e5785ac9381d9a7b909296b9p-52Q, 0x1.13fd176d0c254d2994cc4f8bbb17p-69Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.3daa1461d0cf47fff25f3df963e7p-5Q, 0x1.716f56bac1b1102dab376b1a3fe7p-1Q, -0x1.16bee9987071960277d4321df078p-2Q, -0x1.f51bd9fa1cf2d9e12262aabd1401p-1Q, 0x1.97243be7bf08455883f653e158edp-1Q, -0x1.b8eef0110c9fa4de8e71d38444bcp-2Q, 0x1.2402bce395301d2ffcfa2c7a4938p-3Q, 0x1.80595820660c8830537a9f5a0e29p-10Q, -0x1.fa47fa3f4b021cbace01025dd941p-6Q, 0x1.025a88022a413b155a9680077b35p-6Q, -0x1.3d712aaad77758afb71e5644bf72p-9Q, -0x1.c5c0d04fc87430265835a2d868c3p-11Q, 0x1.c45b69075cdb62e0f0501d72eab3p-12Q, -0x1.6a1670435bfdd529f00d82c5e437p-15Q, -0x1.13c0d643a27dc3e64f7aa5ea1b1dp-17Q, 0x1.b2cff794384635cf6c5bd8331af5p-20Q, -0x1.9ee90facd3d1333133d7e205e062p-25Q, -0x1.c87e1185ca55b3b93aa74571695cp-29Q, 0x1.b076e966620448a8ccbae1de5619p-34Q, 0x1.71c42c5b1e646b3eaaa36a5a302fp-44Q, -0x1.e6d8e5785ac9381d9a7b90929674p-52Q, 0x1.13fd176d0c254d2994cc4f8bbae7p-69Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.77fed2e01693602fb8497759708ep-3Q, 0x1.e1d10780fb06110288f8999dc1b7p-1Q, -0x1.9e9c7ce63835ce70bd9f1949b4fbp+1Q, 0x1.bc153af50c24b9575bdc1b7eea7cp+1Q, -0x1.240fe3f248860f90966b383ce1ccp+1Q, 0x1.80cee17390c17dd6afdc8b5e9badp+0Q, -0x1.abf5df7fd7abfb9aaab015caa89bp-1Q, 0x1.50c7e71a108baf578aa06cfc53efp-2Q, -0x1.4654ed4660723ccc0f0acc159fc7p-4Q, 0x1.091b1dd62c3e5f033d13bd90eb7fp-6Q, -0x1.59c475f85d7f3ec16b121b44ed34p-7Q, 0x1.935e464b93aa450281cf24f670a1p-8Q, -0x1.8fe1513629011cd322fa61848c65p-10Q, 0x1.90feb0894b434ddffdbc8185ec19p-15Q, 0x1.09bd1f2d4e386644ae469eb8633p-15Q, -0x1.da6da6ad5e76b8585347757536dfp-19Q, 0x1.a3886fa6d48c5693a0b3ec42df61p-21Q, 0x1.0f7850b94c92b737f20b8005c2b9p-26Q, -0x1.63226d50629bfc487dd5a4e8ece6p-31Q, -0x1.84d7e34db15d3108fdfa03f5826ep-38Q, 0x1.75cc98099352929e39911fd4363dp-48Q, -0x1.a7d23115de5731da90d3ce0c92b1p-65Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.77fed2e01693602fb84977597092p-3Q, 0x1.e1d10780fb06110288f8999dc16cp-1Q, -0x1.9e9c7ce63835ce70bd9f1949b4bp+1Q, 0x1.bc153af50c24b9575bdc1b7eea9p+1Q, -0x1.240fe3f248860f90966b383ce203p+1Q, 0x1.80cee17390c17dd6afdc8b5e9bd2p+0Q, -0x1.abf5df7fd7abfb9aaab015caa888p-1Q, 0x1.50c7e71a108baf578aa06cfc537p-2Q, -0x1.4654ed4660723ccc0f0acc159e52p-4Q, 0x1.091b1dd62c3e5f033d13bd90e92bp-6Q, -0x1.59c475f85d7f3ec16b121b44eccep-7Q, 0x1.935e464b93aa450281cf24f671a9p-8Q, -0x1.8fe1513629011cd322fa61848df6p-10Q, 0x1.90feb0894b434ddffdbc8185f2a5p-15Q, 0x1.09bd1f2d4e386644ae469eb863f8p-15Q, -0x1.da6da6ad5e76b858534775753bfcp-19Q, 0x1.a3886fa6d48c5693a0b3ec42e08ep-21Q, 0x1.0f7850b94c92b737f20b8005c4e4p-26Q, -0x1.63226d50629bfc487dd5a4e8ef38p-31Q, -0x1.84d7e34db15d3108fdfa03f5836dp-38Q, 0x1.75cc98099352929e39911fd43962p-48Q, -0x1.a7d23115de5731da90d3ce0c96c3p-65Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.60087b087d2ef4b82953952dae77p-1Q, -0x1.1c49e2797e56cac67a206b15099bp+0Q, -0x1.f023b1706ef0dac15d9852fed0cdp+0Q, 0x1.8d30c07e51574352c1f1eb201d3dp+2Q, -0x1.80e0de445b219fbdea6ef733b9e6p+2Q, 0x1.c1feac4e70c181d6b4fca6d2077fp+0Q, 0x1.3621ab0ea1b052aecf48cff76ee3p+1Q, -0x1.f3ab98611d47a796d9c54636510bp+1Q, 0x1.5e6794d526a24de36780aeba10e8p+1Q, -0x1.c702eca93a33cb508d7b1d004b3dp-1Q, -0x1.ee149aa686bb2faa29ff6d4c03ddp-4Q, 0x1.ffde0ca5fc1a1519c08ba08f2c0bp-3Q, -0x1.a2cbb989ecd0a0b85c48b0ef17a6p-4Q, 0x1.d58bf4f6c76ea5b68a5554196c66p-7Q, 0x1.206affc103ba0a875625f458349fp-9Q, -0x1.dfc88961f6b157e54f77890beee7p-11Q, 0x1.f86e53415f2a00da542f82566187p-15Q, 0x1.28c920e4a3f6bb0fc001a36c7514p-18Q, -0x1.9c90e430666c8d48daf02182994fp-23Q, -0x1.7e8cf0898f3336a3b6d1b959decdp-32Q, 0x1.cc8984cca607f1a4cd24395b6b4ap-39Q, -0x1.051a1f819156ba9bc5cb80613b7p-54Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.60087b087d2ef4b82953952d9084p-1Q, -0x1.1c49e2797e56cac67a206b14e7b4p+0Q, -0x1.f023b1706ef0dac15d9852fec6b7p+0Q, 0x1.8d30c07e51574352c1f1eb2006b7p+2Q, -0x1.80e0de445b219fbdea6ef733a307p+2Q, 0x1.c1feac4e70c181d6b4fca6d1ffb9p+0Q, 0x1.3621ab0ea1b052aecf48cff7492ap+1Q, -0x1.f3ab98611d47a796d9c546361f74p+1Q, 0x1.5e6794d526a24de36780aeb9efa6p+1Q, -0x1.c702eca93a33cb508d7b1d00211fp-1Q, -0x1.ee149aa686bb2faa29ff6d4bcf1dp-4Q, 0x1.ffde0ca5fc1a1519c08ba08ef931p-3Q, -0x1.a2cbb989ecd0a0b85c48b0eeedfp-4Q, 0x1.d58bf4f6c76ea5b68a5554193d1p-7Q, 0x1.206affc103ba0a875625f4581693p-9Q, -0x1.dfc88961f6b157e54f77890bbc2ap-11Q, 0x1.f86e53415f2a00da542f82562b56p-15Q, 0x1.28c920e4a3f6bb0fc001a36c54d3p-18Q, -0x1.9c90e430666c8d48daf021826ab7p-23Q, -0x1.7e8cf0898f3336a3b6d1b959b3ebp-32Q, 0x1.cc8984cca607f1a4cd24395b33dcp-39Q, -0x1.051a1f819156ba9bc5cb80611a1ep-54Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.efa01fe281c907b167ef08ad02bfp+0Q, -0x1.34df3dac7fcd3f885ed5b138fecap+3Q, 0x1.5961138d5be957877d8cfd1a3db6p+4Q, -0x1.014d7a672544a1c4d79025387afbp+5Q, 0x1.5a4b6fa251eaf90e3115b0c4b844p+5Q, -0x1.d72d9b409f2b1bb94911072b924bp+5Q, 0x1.1a6ca7d65632cc9e3b88e5271a3dp+6Q, -0x1.f8d9ef0a2890c5946bb98eca0c52p+5Q, 0x1.142ce1c1f06e19e0c6f07b09b256p+5Q, -0x1.90f390767ce4703536c74ea5d48p+1Q, -0x1.822b1a96e2d91cc911472931b073p+3Q, 0x1.52a34d125b1be5508a31d4571b97p+3Q, -0x1.0b934a511e088d9de4577e69f953p+2Q, 0x1.335fd67def29efb717b6672f0127p-1Q, 0x1.17c48a3b6f0b811400fc04e03edcp-3Q, -0x1.0033850ae88073da0780e3e27f81p-4Q, 0x1.68d4635bbce683527c3478757d85p-8Q, 0x1.b6ad0e03e206f2cc34c3ad5363ddp-12Q, -0x1.c361dbb11082ba0b86af7e6af24bp-16Q, -0x1.d59d4ba004a567edb22672cba48ap-25Q, 0x1.f6c8c69c71b982736f46aeba6448p-31Q, -0x1.1d186572e3d30ab58425e9abcaa6p-45Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.efa01fe281c907b167ef08b2a819p+0Q, -0x1.34df3dac7fcd3f885ed5b13d2111p+3Q, 0x1.5961138d5be957877d8cfd1f8beep+4Q, -0x1.014d7a672544a1c4d790253c77afp+5Q, 0x1.5a4b6fa251eaf90e3115b0c8a7d1p+5Q, -0x1.d72d9b409f2b1bb94911072e35d5p+5Q, 0x1.1a6ca7d65632cc9e3b88e527a77dp+6Q, -0x1.f8d9ef0a2890c5946bb98eca1feap+5Q, 0x1.142ce1c1f06e19e0c6f07b093cf5p+5Q, -0x1.90f390767ce4703536c74e99b357p+1Q, -0x1.822b1a96e2d91cc911472934db6dp+3Q, 0x1.52a34d125b1be5508a31d4593a7ep+3Q, -0x1.0b934a511e088d9de4577e6b9d58p+2Q, 0x1.335fd67def29efb717b66730db11p-1Q, 0x1.17c48a3b6f0b811400fc04e29772p-3Q, -0x1.0033850ae88073da0780e3e4b1ccp-4Q, 0x1.68d4635bbce683527c347878fb17p-8Q, 0x1.b6ad0e03e206f2cc34c3ad57b135p-12Q, -0x1.c361dbb11082ba0b86af7e7039cep-16Q, -0x1.d59d4ba004a567edb22672d12e01p-25Q, 0x1.f6c8c69c71b982736f46aec1c2fcp-31Q, -0x1.1d186572e3d30ab58425e9b0d124p-45Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.1672f76c48a3b085a419d3a4a516p+2Q, -0x1.d05e83fe81471c548c376fdd2e88p+4Q, 0x1.49fc051fc99a825862e53c01bf24p+6Q, -0x1.e442104e65335b30f1932f27a50ap+6Q, 0x1.09c52f838d2fca1c275b6969c956p+6Q, 0x1.677b64cbf326e55bcfc7688cab53p+6Q, -0x1.fbf39786bea7b138ef97d6e9bf1fp+7Q, 0x1.628081b6fdd810aa965a5e7f3421p+8Q, -0x1.a2714ddd5c22b603c83ee95dc4cp+8Q, 0x1.cb4de777b4f362d79e6f07abbc76p+8Q, -0x1.9cacd3aee3a7e296cd7191fe8607p+8Q, 0x1.055f4806a834671e4070626e14f2p+8Q, -0x1.8ddf94a470b86c5104b74e18273dp+6Q, 0x1.95561c2d77ea7cb1b418f2fb6391p+3Q, 0x1.8ab9cc38b4948a55522c3044f42ap+2Q, -0x1.6e4f007cb3f6f6544bd7ca0f31d2p+1Q, 0x1.43d7023213a802dd64336017585bp-2Q, 0x1.951cff21de4ac7e4a1f0a8263acfp-6Q, -0x1.5137c147339bc2af2a69107ce017p-9Q, -0x1.3e3df8b2da2752dcb7f7472265e7p-18Q, 0x1.78040f51a9567ebaa0b6d94a065ep-23Q, -0x1.aa8cd8e6f8971ce4ff3376356067p-37Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.1672f76c48a3b085a419d3d84efep+2Q, -0x1.d05e83fe81471c548c37702884afp+4Q, 0x1.49fc051fc99a825862e53c41bd9dp+6Q, -0x1.e442104e65335b30f1932ff3fcdp+6Q, 0x1.09c52f838d2fca1c275b6ba1ca01p+6Q, 0x1.677b64cbf326e55bcfc76402e361p+6Q, -0x1.fbf39786bea7b138ef97d391fb5cp+7Q, 0x1.628081b6fdd810aa965a5c98d2cp+8Q, -0x1.a2714ddd5c22b603c83ee77be92bp+8Q, 0x1.cb4de777b4f362d79e6f05e8e906p+8Q, -0x1.9cacd3aee3a7e296cd71908c1c97p+8Q, 0x1.055f4806a834671e4070618a5f49p+8Q, -0x1.8ddf94a470b86c5104b74cbf3618p+6Q, 0x1.95561c2d77ea7cb1b418f1ad675dp+3Q, 0x1.8ab9cc38b4948a55522c2ec1bb2ep+2Q, -0x1.6e4f007cb3f6f6544bd7c8aa8418p+1Q, 0x1.43d7023213a802dd64335ed45bfdp-2Q, 0x1.951cff21de4ac7e4a1f0a692a613p-6Q, -0x1.5137c147339bc2af2a690f130f2cp-9Q, -0x1.3e3df8b2da2752dcb7f745d4f5a7p-18Q, 0x1.78040f51a9567ebaa0b6d793cafp-23Q, -0x1.aa8cd8e6f8971ce4ff33741ce32dp-37Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.6688e31cf50e0564efea7bdd5fb4p+2Q, -0x1.50ba2688bc0430a9ee74607c1048p+5Q, 0x1.18d5fc503a1772d2730b3e2d1b1p+7Q, -0x1.16422099d0e700c2cc83b4dddfb9p+8Q, 0x1.7cdc33f38c2d168782ab508fe333p+8Q, -0x1.a2f3c3b8e6e4ab101396a85ce4c7p+8Q, 0x1.aa319d6af6ec967e381e228e6cdbp+8Q, -0x1.958a02a1024489567edfcd0c6458p+8Q, 0x1.4bb5b15c50a647500af4903c157ep+8Q, -0x1.caa9291eb011f2ccec5253008c2ep+7Q, 0x1.1f2d7abf22a7296277eac00e42f8p+7Q, -0x1.3b920d0f7e0d09abc1f29b5777d5p+6Q, 0x1.bc14b21b62b9334a0ec071c6d27ap+4Q, 0x1.8c237a0fa26d740497614e6ce7f9p-1Q, -0x1.7f694c35d9d2245677a757e7ef74p+2Q, 0x1.3f67e104a689bca4d8d6dc3c9573p+1Q, -0x1.4cc6c058f371d1d7aadbd3825648p-2Q, -0x1.6b557354b8d84aa675e72e4aa2cep-6Q, 0x1.38d6e371bb0518c7efdfa45f408ep-8Q, 0x1.260d95329ea8e0edce58678f53a3p-17Q, -0x1.5c7911e0053bc1a14fff7b8b350cp-21Q, 0x1.8b88d3fa551bf8449851729a705p-34Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.6688e31cf50e0564efea7c707539p+2Q, -0x1.50ba2688bc0430a9ee7461099f42p+5Q, 0x1.18d5fc503a1772d2730b3ea50efdp+7Q, -0x1.16422099d0e700c2cc83b554b1d3p+8Q, 0x1.7cdc33f38c2d168782ab512e0152p+8Q, -0x1.a2f3c3b8e6e4ab101396a900d9eap+8Q, 0x1.aa319d6af6ec967e381e232c3d8cp+8Q, -0x1.958a02a1024489567edfcd9f60c3p+8Q, 0x1.4bb5b15c50a647500af490b1348fp+8Q, -0x1.caa9291eb011f2ccec525396312bp+7Q, 0x1.1f2d7abf22a7296277eac06229bap+7Q, -0x1.3b920d0f7e0d09abc1f29bae2433p+6Q, 0x1.bc14b21b62b9334a0ec0723419b6p+4Q, 0x1.8c237a0fa26d7404976151e77cdep-1Q, -0x1.7f694c35d9d2245677a758a1954ep+2Q, 0x1.3f67e104a689bca4d8d6dcd2113cp+1Q, -0x1.4cc6c058f371d1d7aadbd425ad1p-2Q, -0x1.6b557354b8d84aa675e72eefd888p-6Q, 0x1.38d6e371bb0518c7efdfa510e3cep-8Q, 0x1.260d95329ea8e0edce58683df434p-17Q, -0x1.5c7911e0053bc1a14fff7c706e19p-21Q, 0x1.8b88d3fa551bf844985173c27b89p-34Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.80f665163dff60603105451a6e5dp+2Q, -0x1.7dd2228ef04492e49ffcbb4c7665p+5Q, 0x1.48b0d88030936751bd070e523483p+7Q, -0x1.41512ba753d055c75dc8c691e375p+8Q, 0x1.8f56f07493ef05c30063bbd4a838p+8Q, -0x1.675a39773b2485da34f83284198fp+8Q, 0x1.2e9626a21624df1cdd8e3378c5edp+8Q, -0x1.1263590aebe88d200657bdb9b2c3p+8Q, 0x1.9699942af2221429cba46fea0168p+7Q, -0x1.59e9b6e0b9c21128db1639ea581fp+6Q, 0x1.09d1a0b7c583242c5ad2ce6cf431p+3Q, 0x1.cc8ab1005087bf119ad7cb575125p+3Q, -0x1.93c8d5094509572acb009f2e7dd8p+4Q, 0x1.013c24badc62703530bdc5ef098ep+5Q, -0x1.784654bbd73679c9f2def8e43e7p+4Q, 0x1.21acdd98ca7e3a8d97a5878ef247p+3Q, -0x1.6fa583815aba1a21d8baa02798f2p+0Q, -0x1.39156fe5f0a3b45977f7ccd1d734p-4Q, 0x1.34372727b2154e0f6338311dea7cp-5Q, 0x1.c53d49d19717546a333396c8797dp-15Q, -0x1.57bc52155abea4723bbb49833b9ep-17Q, 0x1.869c11b6398bbfee9ec13fe04d71p-29Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.80f665163dff60603105460968d1p+2Q, -0x1.7dd2228ef04492e49ffcbc26de51p+5Q, 0x1.48b0d88030936751bd070f0b70d7p+7Q, -0x1.41512ba753d055c75dc8c75f4172p+8Q, 0x1.8f56f07493ef05c30063bd380daep+8Q, -0x1.675a39773b2485da34f83484320cp+8Q, 0x1.2e9626a21624df1cdd8e35d51165p+8Q, -0x1.1263590aebe88d200657c008c834p+8Q, 0x1.9699942af2221429cba47418cbf5p+7Q, -0x1.59e9b6e0b9c21128db1641974871p+6Q, 0x1.09d1a0b7c583242c5ad30248e848p+3Q, 0x1.cc8ab1005087bf119ad7a75bf51cp+3Q, -0x1.93c8d5094509572acb009457fd8ep+4Q, 0x1.013c24badc62703530bdc2a89abep+5Q, -0x1.784654bbd73679c9f2def5413da7p+4Q, 0x1.21acdd98ca7e3a8d97a584ca3cd3p+3Q, -0x1.6fa583815aba1a21d8ba9c3f6b87p+0Q, -0x1.39156fe5f0a3b45977f7c9849262p-4Q, 0x1.34372727b2154e0f63382ce7b14dp-5Q, 0x1.c53d49d19717546a3333946ded1p-15Q, -0x1.57bc52155abea4723bbb438d51fep-17Q, 0x1.869c11b6398bbfee9ec137b2aadp-29Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.d573db31c98a592a2b6a75f0e508p+1Q, -0x1.ddfb9c5686a4efd2bd1e32872343p+4Q, 0x1.a873c238f1ad89ace04b72e9c756p+6Q, -0x1.b2204de17a53a3315364d23c8cd4p+7Q, 0x1.23910ebcbe60d3ac8690288b0ac9p+8Q, -0x1.29c6cec6860250c0db3c6cf44b1cp+8Q, 0x1.1c64b27b4c107ca71ade21f474f5p+8Q, -0x1.156985f5c8bce6de73bf215034a9p+8Q, 0x1.ef2b60fc7ce315a6b8de28e5d19dp+7Q, -0x1.84734ae811782beee80a7706ee5bp+7Q, 0x1.20e874beb6697ebef627236a9ac2p+7Q, -0x1.93d454c0120c50c5e5f45832b468p+6Q, 0x1.e8c645d5034483f58d32bb3f4e3bp+5Q, -0x1.0a8b2e2c06173020781b634ff3fbp+5Q, 0x1.14ef6d11452bbb05715fc7688438p+4Q, -0x1.bab6f3f4dbb55284f992570f49b4p+2Q, 0x1.4e6aaf12e910db6611cb1059823cp+0Q, 0x1.e57ecc0ee730e09fd58c24db0642p-4Q, -0x1.0f174cea8c305d809bddceff1132p-4Q, 0x1.a1f2dc12ec55c96d12f54ea71a2fp-12Q, 0x1.4002914419fbb27ad65f3fceabe7p-15Q, -0x1.6c7e600f14b10472b7579ae3bc81p-26Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.d573db31c98a592a2b6a796753f8p+1Q, -0x1.ddfb9c5686a4efd2bd1e36073e0cp+4Q, 0x1.a873c238f1ad89ace04b7607dff2p+6Q, -0x1.b2204de17a53a3315364d57fc2b6p+7Q, 0x1.23910ebcbe60d3ac86902adcdaa4p+8Q, -0x1.29c6cec6860250c0db3c6f8b8962p+8Q, 0x1.1c64b27b4c107ca71ade24985867p+8Q, -0x1.156985f5c8bce6de73bf23e5601fp+8Q, 0x1.ef2b60fc7ce315a6b8de2d939461p+7Q, -0x1.84734ae811782beee80a7af9899ep+7Q, 0x1.20e874beb6697ebef627268d4461p+7Q, -0x1.93d454c0120c50c5e5f45ca0c342p+6Q, 0x1.e8c645d5034483f58d32c0b8709p+5Q, -0x1.0a8b2e2c06173020781b6687242cp+5Q, 0x1.14ef6d11452bbb05715fcae8f362p+4Q, -0x1.bab6f3f4dbb55284f9925c8a3ab9p+2Q, 0x1.4e6aaf12e910db6611cb145f554fp+0Q, 0x1.e57ecc0ee730e09fd58c293b9a01p-4Q, -0x1.0f174cea8c305d809bddd1a456bfp-4Q, 0x1.a1f2dc12ec55c96d12f54fd03177p-12Q, 0x1.4002914419fbb27ad65f422d91cep-15Q, -0x1.6c7e600f14b10472b7579cd8544fp-26Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.d2f4e044749b4e7a1c71af625a42p+0Q, -0x1.e196df480fe71bea5cbbf54b35dp+3Q, 0x1.ab061d20276f0750e2a71f034e04p+5Q, -0x1.a7b259e6037ebf7c8e2ada0b5ba1p+6Q, 0x1.04d3977e22f60f45b515e22f405p+7Q, -0x1.c308c46a51aa08f31731abdc9396p+6Q, 0x1.759cb70549060301bbf1e90c0d7dp+6Q, -0x1.73a4db524ebc2efdc465df1eceafp+6Q, 0x1.4d02e405c663ff8abf63f13a14eap+6Q, -0x1.c4dfc682dd95df4b0a54f464f5c5p+5Q, 0x1.217c835a844bf319c913a98fb0dfp+5Q, -0x1.9d3e5e5e092523c0105752b9ec75p+4Q, 0x1.eced01c912f6c17b1d53692fa574p+3Q, -0x1.ab15772777a65a90ae2d7cd7191bp+2Q, 0x1.780b7892927c5280dd5becc68e9dp+1Q, -0x1.59e4e79f9d38488dc3c592823598p+0Q, 0x1.04013ac7f90eca1ecf033967d8bdp-2Q, 0x1.63e903ad632e7f3030703fcb6c64p-4Q, -0x1.26b339b06c46eff13165e26c3ea5p-5Q, 0x1.1fc083a0e2c35a300d5c6f8e06aap-10Q, 0x1.9c18e59aa15ab3ece464b5d35415p-15Q, -0x1.d792baac952f2e4df120dee55ebdp-25Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.d2f4e044749b4e7a1c71b105042dp+0Q, -0x1.e196df480fe71bea5cbbf6f938ep+3Q, 0x1.ab061d20276f0750e2a72080d7a9p+5Q, -0x1.a7b259e6037ebf7c8e2adb89e41bp+6Q, 0x1.04d3977e22f60f45b515e3221088p+7Q, -0x1.c308c46a51aa08f31731ad9b7844p+6Q, 0x1.759cb70549060301bbf1ea932595p+6Q, -0x1.73a4db524ebc2efdc465e09da17dp+6Q, 0x1.4d02e405c663ff8abf63f28cd74p+6Q, -0x1.c4dfc682dd95df4b0a54f646c034p+5Q, 0x1.217c835a844bf319c913aad35977p+5Q, -0x1.9d3e5e5e092523c01057547d3214p+4Q, 0x1.eced01c912f6c17b1d536b46140dp+3Q, -0x1.ab15772777a65a90ae2d7ecf56cbp+2Q, 0x1.780b7892927c5280dd5bee9ee8edp+1Q, -0x1.59e4e79f9d38488dc3c59417b41ap+0Q, 0x1.04013ac7f90eca1ecf033aafa30cp-2Q, 0x1.63e903ad632e7f30307040928615p-4Q, -0x1.26b339b06c46eff13165e32f7c85p-5Q, 0x1.1fc083a0e2c35a300d5c6fbf948ep-10Q, 0x1.9c18e59aa15ab3ece464b6468819p-15Q, -0x1.d792baac952f2e4df120dee003e6p-25Q, 0x0p+0Q}; } if constexpr (order == 10) { - return {0x0p+0Q, 0x1.19eec26520f7247ef7c6a50c30c1p-1Q, -0x1.249f95db3c6a85ee060075e867d8p+2Q, 0x1.0297dba66cdd344c6014add13643p+4Q, -0x1.f4e8dc0eb78aa7eff1fa777a2d3cp+4Q, 0x1.1efd1b3c60e0b36de4fe2959cc4p+5Q, -0x1.a397a05a5f774f4ee2078ee612bfp+4Q, 0x1.239464bf9e82c4fc4fdd7d10ceaep+4Q, -0x1.3946d065739beaad7a016889ae55p+4Q, 0x1.2898316e66a7f2a70e1a6d4e83adp+4Q, -0x1.5bb8e2c4642782930886e734cb84p+3Q, 0x1.68255c99ba4c6b07d8215b80d139p+2Q, -0x1.21aae7ae7df31c2992880869d80ap+2Q, 0x1.64fab317448fb04743119877b3a8p+1Q, -0x1.75b64c97e09686a5bb55ff7e3516p-1Q, 0x1.22ff2ac4d8b9c4ff1398067e3f99p-3Q, -0x1.07ed621dcab476dea8f9c1c1f859p-3Q, -0x1.4a01e6ee0860d89681b640d3090fp-6Q, 0x1.2e7cdbbc900312ead84b8f4ecdafp-4Q, -0x1.b7f6865bae122ce58cd5b6b5db5p-6Q, 0x1.17b65cad3d540e056708b920004dp-9Q, 0x1.910e0462410b5b96ed51c6158bb4p-14Q, -0x1.cf434a44d45d4684dfb9a8c3dc56p-23Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.19eec26520f7247ef7c6a243923bp-1Q, -0x1.249f95db3c6a85ee06007305aedcp+2Q, 0x1.0297dba66cdd344c6014ab433b38p+4Q, -0x1.f4e8dc0eb78aa7eff1fa727c9c71p+4Q, 0x1.1efd1b3c60e0b36de4fe266b9d8ap+5Q, -0x1.a397a05a5f774f4ee2078a58f21cp+4Q, 0x1.239464bf9e82c4fc4fdd79af7e82p+4Q, -0x1.3946d065739beaad7a01650a25b9p+4Q, 0x1.2898316e66a7f2a70e1a6a12eca5p+4Q, -0x1.5bb8e2c4642782930886e32d2ea4p+3Q, 0x1.68255c99ba4c6b07d82156e3f9d9p+2Q, -0x1.21aae7ae7df31c29928804e58d84p+2Q, 0x1.64fab317448fb0474311942daf3fp+1Q, -0x1.75b64c97e09686a5bb55f9818d82p-1Q, 0x1.22ff2ac4d8b9c4ff1397fddfa477p-3Q, -0x1.07ed621dcab476dea8f9bcc8470ap-3Q, -0x1.4a01e6ee0860d89681b645bb0864p-6Q, 0x1.2e7cdbbc900312ead84b8d7e757cp-4Q, -0x1.b7f6865bae122ce58cd5b4105bcap-6Q, 0x1.17b65cad3d540e056708b80ca432p-9Q, 0x1.910e0462410b5b96ed51c4c46ef3p-14Q, -0x1.cf434a44d45d4684dfb9a827c309p-23Q, 0x0p+0Q}; } if constexpr (order == 11) { - return {0x0p+0Q, 0x1.a6c51bc471a3098c7c3ba6f25a23p-5Q, -0x1.b8315371d42a542d22b5306cc4fcp-2Q, 0x1.89e13c889a74c808a95f3d0a6799p+0Q, -0x1.8aa497719f070f6dc765c9fe7e51p+1Q, 0x1.eb2b7ee2bc88d2eef92b7b69cb04p+1Q, -0x1.a91739cfcb4374adc78a37551409p+1Q, 0x1.4e87023b22be1f061884bc9409e9p+1Q, -0x1.31bb74af8ae4dfa54f81310a9052p+1Q, 0x1.0e1263d4463c809bd84430b64506p+1Q, -0x1.9cd0db1b42b96cb6927f658a63e7p+0Q, 0x1.3cec213a53551ad84004db21dcp+0Q, -0x1.daf35f59b2441d717c169614a5aap-1Q, 0x1.329c321d7ff6b77198e763d64324p-1Q, -0x1.8936ae8cb907bb56ce7129ca7fc2p-2Q, 0x1.00dee0f339229a14bdfc09c4e162p-2Q, -0x1.07bd180d959690eaf41df912a76dp-3Q, 0x1.cec01fe9b05f624125be2b70170dp-5Q, -0x1.e6ef9d5209f879f2bf7a3f0d08eap-6Q, 0x1.8f4f47250e3a4f324676c82d9528p-7Q, -0x1.e72d4f4950c89aa59da6f47aed33p-10Q, -0x1.e19176d7ba69146eb048ef5a5e41p-14Q, 0x1.1b79fa688c946fc4993e55c900d5p-21Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.a6c51bc471a3098c7c3ba4b2e396p-5Q, -0x1.b8315371d42a542d22b52e160edap-2Q, 0x1.89e13c889a74c808a95f3ae5db18p+0Q, -0x1.8aa497719f070f6dc765c7af4f82p+1Q, 0x1.eb2b7ee2bc88d2eef92b780b6136p+1Q, -0x1.a91739cfcb4374adc78a339981b3p+1Q, 0x1.4e87023b22be1f061884b91ff276p+1Q, -0x1.31bb74af8ae4dfa54f812e36b5bep+1Q, 0x1.0e1263d4463c809bd8442e6ab9d2p+1Q, -0x1.9cd0db1b42b96cb6927f614da713p+0Q, 0x1.3cec213a53551ad84004d758bdadp+0Q, -0x1.daf35f59b2441d717c1690c25188p-1Q, 0x1.329c321d7ff6b77198e76070d6c7p-1Q, -0x1.8936ae8cb907bb56ce7124a40ebp-2Q, 0x1.00dee0f339229a14bdfc063bfb91p-2Q, -0x1.07bd180d959690eaf41df5a4ee44p-3Q, 0x1.cec01fe9b05f624125be250b50a9p-5Q, -0x1.e6ef9d5209f879f2bf7a379cfa32p-6Q, 0x1.8f4f47250e3a4f324676c24519f5p-7Q, -0x1.e72d4f4950c89aa59da6edc504bdp-10Q, -0x1.e19176d7ba69146eb048e9181ac9p-14Q, 0x1.1b79fa688c946fc4993e527c8905p-21Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00674952336093794271822599377832733300651146336500105281821757702580261898435"), boost::lexical_cast("0.307583456142659816839156786245335727208310576612803762616887840930925575209"), boost::lexical_cast("0.925942456953309005940386530995126436012681380158402535652037264183889758483"), boost::lexical_cast("-0.340268706102660683375457588221232998838593649367854881779057620364907425914"), boost::lexical_cast("0.160279537383566356658810338492196248229219596027949666407555183251410683353"), boost::lexical_cast("-0.100906238726469613031927683469694828929687407601613980745393598371134911780"), boost::lexical_cast("0.0635171183876279943173554673370722041156121244338995400601119969400460909180"), boost::lexical_cast("-0.0322672348814505948972500008092114355665944734834499482855568997884208147214"), boost::lexical_cast("0.0119258192115874852729361214670894284737320324933075482785998337722648377488"), boost::lexical_cast("-0.00298707792707452898367085553746573188496510147112607446979462542972907046198"), boost::lexical_cast("0.000473081135158127015860372446974828573937912728115760868405824469327509104714"), boost::lexical_cast("-0.0000385901914771418563229090512720344539916565749843499561465030991408855304182"), boost::lexical_cast("-0.00000707771294264344979265706380621665838995140738494138127767693643047473151938"), boost::lexical_cast("0.00000449127676142712270206334163110940969109789276623971797893643048336659640461"), boost::lexical_cast("-0.000000462246298923448308370189842110923874064368375158153708369750363490273849968"), boost::lexical_cast("-0.0000000938981013616806301299448140440205677496034062712612222476591887975663431153"), boost::lexical_cast("-0.00000000228731055691905904721631337725631066731945798378875548099322801540390353792"), boost::lexical_cast("0.000000000122805107893837304401775672037887127425598683650631632643112458670137760454"), boost::lexical_cast("-0.000000000000634403654278944400941924520388860558080403502147439478702947659558312462441"), boost::lexical_cast("0.00000000000000718601577933574214479296340908692396681088130844931493227840962495346368987"), boost::lexical_cast("0.00000000000000000150165111893706003972718474555253050830994970128831551959442684938639721914"), boost::lexical_cast("-0.00000000000000000000000324728013911670481356185860811593862377837926387577826017803860651455895063"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0387773893440001328479990972130631692265393392276997953903865925128067141024"), boost::lexical_cast("0.721552572534024717748570063882033395155483583566407967882626836656429636782"), boost::lexical_cast("-0.272212648324158111612511789206460700674191556065031727190617093210427966623"), boost::lexical_cast("-0.978728114873296652638727035042942428237594510811351020620221815511037142320"), boost::lexical_cast("0.795198318518956652102305679705853563026415740789264534365825373566593070233"), boost::lexical_cast("-0.430598975220305785445999132638246196763260311865173495540662078177969568735"), boost::lexical_cast("0.142583347029948066092993254964771828684926120817867402181283862012299624787"), boost::lexical_cast("0.00146617508298700811859640317636078157631882791634139195335692402607076083994"), boost::lexical_cast("-0.0309009498425184610096113389760986103366023818447589327535142129940010076705"), boost::lexical_cast("0.0157686546523657228788031242284047791698300666554508584962947405558611056219"), boost::lexical_cast("-0.00242189069596937080496858729150225100112203583636152350242227674378819932850"), boost::lexical_cast("-0.000865465504805686451786867765475930422411519327219197611864322484446933101993"), boost::lexical_cast("0.000431401320802406335612460169440586915965773678151860581031150029061360265549"), boost::lexical_cast("-0.0000431642115711336908332394044162700208606587787562050592203268643657811936924"), boost::lexical_cast("-0.00000821808783448349005091749141022578622146590089593391035863483128421998476881"), boost::lexical_cast("0.00000161980230922061292865855432080723373115493373219912556484058486745620714179"), boost::lexical_cast("-0.0000000483019272136912181673157244957934770912195515285570255684870776439319393894"), boost::lexical_cast("-0.00000000332141975285733899509799336405046588503487344884194087554458021104822328255"), boost::lexical_cast("0.0000000000983310426136874022596843421343020282473719270746503069720570388756166209575"), boost::lexical_cast("0.0000000000000821046124017272115015180345888003894425103661180504475350314828549798634201"), boost::lexical_cast("-0.000000000000000422272678140744917094064065340806009116153886552991342868695393427346681857"), boost::lexical_cast("0.00000000000000000000182633960975279599217132126825168232459508047673969824620606842686892878014"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.183591506446484309712795488849571274418364537569049882649969406786991566703"), boost::lexical_cast("0.941047892088601518958291499087971794201051709610594834344832432863937253481"), boost::lexical_cast("-3.23915063134374610177549908438346173797911023760267160983136498244943289731"), boost::lexical_cast("3.46939789738852314818899400606908382011384059438420298035329651589159205087"), boost::lexical_cast("-2.28173493700255435214772096048237572437923445360570917382808581102768910125"), boost::lexical_cast("1.50315674849912814024262183106436302156615435178890932358182035213351917617"), boost::lexical_cast("-0.835860237460870761390156685965058693698796219956190288728965409249874516389"), boost::lexical_cast("0.328887568441256381505801657142525299671290097708556863386573335636703368303"), boost::lexical_cast("-0.0796708363104952604879937077745989748584956873438833081361877117810017197093"), boost::lexical_cast("0.0161807814953966106554332142048099058586667875986593188231761928160044535103"), boost::lexical_cast("-0.0105519844080212767161949305951351809551205888170657290798324464298016783059"), boost::lexical_cast("0.00615491119567815699833303054263633346002498173776612335382778423057115661320"), boost::lexical_cast("-0.00152542169738812236275366430470857831307147305605930001884982398335206187746"), boost::lexical_cast("0.0000478023149049562031406199523580878829069008124571083991909044064992027938837"), boost::lexical_cast("0.0000316785284248449847258104755742578560748429902748877549315826250898391153165"), boost::lexical_cast("-0.00000353476646946804208268171454249821202212174971459821936484698256572687164013"), boost::lexical_cast("0.000000781441021094927012007376595229335452531962058185139941865056284143318220825"), boost::lexical_cast("0.0000000158016326457618764551834550084612976065250040667862420828605844454348687428"), boost::lexical_cast("-0.000000000645985856862059637165608932066447500409737957145914496500299017194796733184"), boost::lexical_cast("-0.00000000000552579581560011400180824517243503538265777971769292220658774318761637323198"), boost::lexical_cast("0.00000000000000518750590964679052304303794785902282315144982464294500494857713908195654535"), boost::lexical_cast("-0.0000000000000000000448738003521685102283394837866669813173686476421773647750785777214873187545"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.687564701830153090496154601673244324665424792477734591515424354722524099152"), boost::lexical_cast("-1.11050239053869430027184090551059176229770565635462126988333316421136630257"), boost::lexical_cast("-1.93804463381724493769207024757917870971550445481996014592183410296094056051"), boost::lexical_cast("6.20610058150974826647727021504587596509253169984522564051121763364081781688"), boost::lexical_cast("-6.01372486758602951783294736130451247536207984026936617147556597467502065146"), boost::lexical_cast("1.75779225268411745440182343883946325363307126912452705923359087032746232261"), boost::lexical_cast("2.42290247168000634999802692912700654401659291644918891841812220270431988663"), boost::lexical_cast("-3.90367417089379141718231735172375182130729195288100071937663900099707066494"), boost::lexical_cast("2.73753605277785755057468262545518793812656205923506367770591971382787612864"), boost::lexical_cast("-0.888694186837802736174804686545601676095716084997773896570154037914318457788"), boost::lexical_cast("-0.120625118354310597854672205082409827213145048325433221107814663185540763499"), boost::lexical_cast("0.249935244384244229475998157073285972261843545061283350728568950695406300807"), boost::lexical_cast("-0.102245068322009442021851053260660268979014010537069811214828519334188485107"), boost::lexical_cast("0.0143294283021151060785346153371703965226713038712447807825810853955454985909"), boost::lexical_cast("0.00220045444485302028275444219293273448787231072694521760298002658782637616979"), boost::lexical_cast("-0.000915114109598521684422240708952522787741064024256659542685847796787098864471"), boost::lexical_cast("0.0000601328561158122075623159592639344585246740920247215146685740357533130502579"), boost::lexical_cast("0.00000442245093225367075171042726134823952641438570521711248051460748670218278934"), boost::lexical_cast("-0.000000192116006225709175804133650291101682367016689175710099736613621136724772233"), boost::lexical_cast("-0.000000000347927694118473204634336179637016248843344378650467345924085824175805403758"), boost::lexical_cast("0.00000000000327231349649651474450860748750987614694465218515883129352235985103556742393"), boost::lexical_cast("-0.0000000000000000566174805053915554844952341333463723778572903642256009402911739536460840202"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.93603705673175252162377048005080828323485510199286167343778412900683630357"), boost::lexical_cast("-9.65225108805899617933044689930629862606922722189344796627981892221806322756"), boost::lexical_cast("21.58620028704043203965568014489070671164252883102441474199007795986172799450"), boost::lexical_cast("-32.16283112127764887984781311792208840193362133426782486134064927600419439680"), boost::lexical_cast("43.28683401882642247901443678261444427228477284299009228485788317422296188030"), boost::lexical_cast("-58.89726877675765402909531534108742114308361932607118347118552732380096882110"), boost::lexical_cast("70.60610899830926411810587962905898518983841308375904913755422678352922515570"), boost::lexical_cast("-63.10641296325966002268292888588592628930166199721781262159830072450491171720"), boost::lexical_cast("34.52191497340187437272066528301740399000435097032593635597215974196048894900"), boost::lexical_cast("-3.13243299279728005268439173331599785511338054577595843510586618380676315959"), boost::lexical_cast("-12.06776170225092279346900025349356398262454275196967160026720095858830643800"), boost::lexical_cast("10.58243421158919931486338350084744671448957975219955115739863127269480650610"), boost::lexical_cast("-4.18086488648999297183891759837512319517601794026273877877208860579097625582"), boost::lexical_cast("0.600340559838134056014385774162185206812240239620564149846506062110388511249"), boost::lexical_cast("0.136605338991903970318857223904627046152412648176017176159147490879517687577"), boost::lexical_cast("-0.0625491330124817618386886003919664398460060491417974176815677679696581035123"), boost::lexical_cast("0.00550582338086123158873116800515458266240754229253267111261799485380454805945"), boost::lexical_cast("0.000418354029755102972365185158832406860086075763566175597817465795414186469647"), boost::lexical_cast("-0.0000269044791745347379635890876857658847394460147615410319076105357130452956021"), boost::lexical_cast("-0.0000000546703156080335157447390001850562112157399818528369118783700921788207959856"), boost::lexical_cast("0.000000000914559278617230197902988750581388857118162901722874330587746501390541480138"), boost::lexical_cast("-0.0000000000000316519364036060085112704740081169075698795498871539132664715584413313149738"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.35076699804863678677975429556027903354422790699226157645072577251818273676"), boost::lexical_cast("-29.02307509819042426585700918686326160072354736867411698539343692983196503080"), boost::lexical_cast("82.49611329715719629374872640906345290805764600780220272968616846701709806240"), boost::lexical_cast("-121.06451532833747392386859794636510608764397274079815027628644009969274065900"), boost::lexical_cast("66.44256406354174703030638747248670204230247493582940326331823060083408390470"), boost::lexical_cast("89.87050169631559036410735425620807796485093895246621283952389526730602524440"), boost::lexical_cast("-253.97576542928058746612034494797807584834351582667944315344135960784812946200"), boost::lexical_cast("354.50197929093707453189915787851278530317676402818444334154635759143504945200"), boost::lexical_cast("-418.44259437083629654372265774871306291337038882950576397483748815661296325300"), boost::lexical_cast("459.30431316535703999996533810953606750433852009745459279981845049292111412100"), boost::lexical_cast("-412.67510502870562514868993537829892602977991674444809590835277417435828403200"), boost::lexical_cast("261.37219277960357686002183516875187598846311513198317551376196154507578273300"), boost::lexical_cast("-99.46834046304693927396397394893633319797299579647467410477722973021902030540"), boost::lexical_cast("12.66676148300696488281972471730213802977983006010030132112775191282004845920"), boost::lexical_cast("6.16759019410739796803106483846236267155563560221580308118480616704388032488"), boost::lexical_cast("-2.86178594674122850153536653793135766872481629722817248177002057968004742610"), boost::lexical_cast("0.316249880129284132115920875971521368522150973034344085606632817974345846565"), boost::lexical_cast("0.0247261516119336322479197612328703090652313932265109203114345439280129606257"), boost::lexical_cast("-0.00257276758529842275783708309373614341047704871305149895482328025045858909260"), boost::lexical_cast("-0.00000474217647448341719828623182459779084961108353234750865989641444296059914091"), boost::lexical_cast("0.000000175096028833295782031678343625079307038593522030930622175736643377626514407"), boost::lexical_cast("-0.0000000000121232854060447503547926609753618642777727719448048997021870449891245778235"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.60210492923599220306739726849524365911272995023030149275362729443627767241"), boost::lexical_cast("-42.09089381049900454092361924595905199878007886101579238359551872779773615180"), boost::lexical_cast("140.41794062337041783562329118755195628284508671409730808010312709127392837500"), boost::lexical_cast("-278.25830994939952049425764143319165780543667702177067080512763370773979265600"), boost::lexical_cast("380.86016771480816533332928441348450481125889613649326541505558838372953629000"), boost::lexical_cast("-418.95220523488084674141481769302959290485836739389011115886709000649475649100"), boost::lexical_cast("426.19380825546667243857182155918014103510325386970185000695176160112816290200"), boost::lexical_cast("-405.53910261445392868706053637913300495637853779363319766514135762481123453200"), boost::lexical_cast("331.70973755806906280222948564333114303709973974217107892064712971483217388700"), boost::lexical_cast("-229.33039184474271152765997296747693653644896311902985970449951777370036797400"), boost::lexical_cast("143.58882710741052581341088543723084000514106642516308650843963725396056822300"), boost::lexical_cast("-78.89262794691900075510218647088275987362866657725786329632823854347189893030"), boost::lexical_cast("27.75505266854777348435048128311171422045966573330871472192405309949017306920"), boost::lexical_cast("0.773708166512018375007390099318270025246521769336781853387329991690258896716"), boost::lexical_cast("-5.99080186137078587115052777435201929542834691356814368299406374154030652526"), boost::lexical_cast("2.49535763480259999546977692911560881994873486413261121783762393577404777245"), boost::lexical_cast("-0.324976926259170024466514821976486541713103347782139429815301297092702931869"), boost::lexical_cast("-0.0221761347082867372516860357201809209573177307919227810107850272426097081037"), boost::lexical_cast("0.00477355053747537251275230025941686821306294456709786754720729109346187074810"), boost::lexical_cast("0.00000876346402844021878197271431695817559174109670993605807770140477893316270959"), boost::lexical_cast("-0.000000649081410844014945450377643724451703185492681208039429612859077055126594639"), boost::lexical_cast("0.0000000000899341295111001783061788354774120539335760947137727039371354507713388157031"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("6.01503874942863172446672032045385310660658346430556969311090280204002893574"), boost::lexical_cast("-47.72760497732867563639045888687408111648670461954967176817630689615594571920"), boost::lexical_cast("164.34540176957098246520164840268114912785108333764805325670104505015878591400"), boost::lexical_cast("-321.31707235141978805890085173651076956857219432352414927630174955007268214000"), boost::lexical_cast("399.33960655795728826591320240810290804342839867119935493449864048725021503700"), boost::lexical_cast("-359.35243935769951609547501622393948495038359128149158218493239094084479572300"), boost::lexical_cast("302.58652699509263723866918658763896223023494881995643828072737018416182521000"), boost::lexical_cast("-274.38807743319971566043869533026106988492438939463128607709797721020443215100"), boost::lexical_cast("203.29995855527617039240266616022588964442318448807463904291472490500587668800"), boost::lexical_cast("-86.47823668607499417468265201809837107760314991031737704773103407132324816810"), boost::lexical_cast("8.30683933155896571923336370342680329284352699673810942748030941466774153040"), boost::lexical_cast("14.39193010388793670592743695120274923548898641004312440323358299497206491280"), boost::lexical_cast("-25.23653129216162031393190650488947069144769574727062315317496697755106409830"), boost::lexical_cast("32.15436693177280611867229541693914656357710375952844770094246636458373021770"), boost::lexical_cast("-23.51717065215362229865507044104445167369445267308462930568665799256423840570"), boost::lexical_cast("9.05235175935735664788319630251805269364581033096340273166670658279003426872"), boost::lexical_cast("-1.43611928852144679808218829087774768973983520937512890405722409904760001331"), boost::lexical_cast("-0.0764364596389350180439110342110306497850920144422968183705432261288688167041"), boost::lexical_cast("0.0376239552256857684356168042424620283930027011606313367853621428915639193111"), boost::lexical_cast("0.0000540303477804840762648923255410865058939043280088368514023926300961486967782"), boost::lexical_cast("-0.0000102441199866988900731723735456649881175505194362439761979226773134926915151"), boost::lexical_cast("0.00000000284205922260922568932250591462669984026040113459253556541826475617240410416"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.66759815150278959307930599333163597096097529742853199217978181562630696487"), boost::lexical_cast("-29.87392839240265725546623883959127802560925486188325916048865579469303024630"), boost::lexical_cast("106.11304558730206231169420989915879780867394552444174433037983757043874961100"), boost::lexical_cast("-217.06309418314214666288595563832635346239588058289858882887597087103632217200"), boost::lexical_cast("291.56663112304597857590334364976771943737359513217961682974016748268384769300"), boost::lexical_cast("-297.77659264346795265988020082120368913354431735040919787932537200810228046400"), boost::lexical_cast("284.39334841353455606151257223937124519201920224538084896597007768405172110500"), boost::lexical_cast("-277.41220031882121641670001674749778842464959328498538149541517303833838711500"), boost::lexical_cast("247.58472432159900771477076380876163976925347752971933279268071613868274753900"), boost::lexical_cast("-194.22518086636781463956709313343541688316198595925041840328872392823935647700"), boost::lexical_cast("144.45401569344244085247818472795589947662462099880946347817047437422725404900"), boost::lexical_cast("-100.95735454664379984016882278587502046931372757809433648524452327992007684600"), boost::lexical_cast("61.09681288162443200526120017869481568171612243827222222068632320726899857500"), boost::lexical_cast("-33.31795915978991479226353783917641730723993856565006267406505994034763561210"), boost::lexical_cast("17.30845362421199129993292294948350854310287513028370737357127567143752171420"), boost::lexical_cast("-6.91741656219422399006952830174054308724719397866962278438510860750311408940"), boost::lexical_cast("1.30631536685638443282971027232061480593991545082436137033699622406166968595"), boost::lexical_cast("0.118529126264956569656056269771626755793811242386616315248341528538090571096"), boost::lexical_cast("-0.0661843304194570081752469739423793402949926380986891972951348623664335067648"), boost::lexical_cast("0.000398586912690642748373175830858033776325071495068959972844940429117973233494"), boost::lexical_cast("0.0000381481682161783683986425780978390997526951366596105346738987927781141638894"), boost::lexical_cast("-0.0000000212163229730584007262375731808777339564186173310877882056921511132532981858"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.82404901191021660107611405457755744720508147280838668944561685140253424274"), boost::lexical_cast("-15.04966701578743791983566870544026493163762629417625697617466370992453373950"), boost::lexical_cast("53.37798524017660253980042023139266987459040956232067348967572826444722400500"), boost::lexical_cast("-105.92417106052715735002349944451589608377479192425044614348746722708067035900"), boost::lexical_cast("130.41326517273685551908783147004280111867640298350958460298534492271024128600"), boost::lexical_cast("-112.75856176494063105548507692533259561359149505796793856695544860362794488700"), boost::lexical_cast("93.40304191835594150352589694310821255241952082139322576408183818507525504810"), boost::lexical_cast("-92.91099289517937530938067160839545056753425221872875127682184392703877307920"), boost::lexical_cast("83.25282296203022229084823461764842101991248796776481529458179231322413184940"), boost::lexical_cast("-56.60926534880375950692439436083700078084789164896951269302972237793898650350"), boost::lexical_cast("36.18579741207349225217113136176821974406219093273833973652666883038907214880"), boost::lexical_cast("-25.82772671444610862462306541969742751815537984691055996627268281393630328240"), boost::lexical_cast("15.40393151542931365681934641697554669810260411956534200123239544102606890360"), boost::lexical_cast("-6.67318514684902700324396712833889530416584439958498307300658341368976434355"), boost::lexical_cast("2.93785006672712485651870672930552135674962040419489700124033209653118603360"), boost::lexical_cast("-1.35114905974225608322981232543443993841639703478986459747319143071556838636"), boost::lexical_cast("0.253910940604568570873136388508332898207860540665090852083889016211691603112"), boost::lexical_cast("0.0868921416897127089804662233761880201802165848173331041475381130845773690378"), boost::lexical_cast("-0.0359741331807378258738142078527195789630247593913553671912092170295325403548"), boost::lexical_cast("0.00109768679996836757242664134813447276225315118775952708555290702903991203965"), boost::lexical_cast("0.0000491258208131049675088973621242027668877049383351261231455773092411325252306"), boost::lexical_cast("-0.0000000548983412936212498495690390885488330611341145287970297974581737627796036856"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 10) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.550649714321919146020391652705270850624984467632444477892208411090670503460"), boost::lexical_cast("-4.57224031839147248722382996328027080443894364680263533387085228867737306467"), boost::lexical_cast("16.16207470903266336622407533376180083841264103186821602341901646085415441920"), boost::lexical_cast("-31.30685048817455572162905452355438357246801343486549641376884657698487166490"), boost::lexical_cast("35.87358710451743501103090247260098261068172630229012387217368794457391845240"), boost::lexical_cast("-26.22451815893096578505537492191089420871702814982563223312943309074511861080"), boost::lexical_cast("18.22372889376872362134777045706885197255097592668156061200711581268831340790"), boost::lexical_cast("-19.57978858594446573474343717866513610480907608812601678912962077898856742910"), boost::lexical_cast("18.53715651631727882099530623547490387621972342657149537210734087006118103230"), boost::lexical_cast("-10.86631906850492186026855947795210696729727028226200184897211758632056293120"), boost::lexical_cast("5.62728037846063128438976106546508945987259369732013042706443820658486730438"), boost::lexical_cast("-4.52605621376260259593982907405174555293727464118730144996047399577463796319"), boost::lexical_cast("2.78890074382900144618255657410026967999905288228433605937465464511446641771"), boost::lexical_cast("-0.729906457462033355139337021126261461176772010479428021961867397970803230476"), boost::lexical_cast("0.142088255054741883006545627449011553786767246338704050666922604912111664368"), boost::lexical_cast("-0.128870741399931027764146528868524281495256321870369794112882474231057823379"), boost::lexical_cast("-0.0201420550512292820836440674996269788542898415412561416178222180575252813086"), boost::lexical_cast("0.0738495429477559359501157209854724157351709061729224786516577653892388373974"), boost::lexical_cast("-0.0268532096949637519510499296268755420094167792885280535232350328010652171480"), boost::lexical_cast("0.00213403588588315134257033560239887601573172007420308747358527142593502213305"), boost::lexical_cast("0.0000956189046839608573100519969536118832653435986603979875808632067612204306782"), boost::lexical_cast("-0.000000215723576025549042840675180271579291754584130778771057415350031447174455663"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 11) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0516076605159024911828475147837820854392015861025284155408704376160614689184"), boost::lexical_cast("-0.429875663588101212310123466761246228949954693513674780077411570894231140593"), boost::lexical_cast("1.53859308562319363525064968437125695806116775999527119873257232627957881183"), boost::lexical_cast("-3.08314793632421711513446659317655276412171796583863723768853134524872575829"), boost::lexical_cast("3.83726488181225153055424552179561105009983872787369445162123171315532794535"), boost::lexical_cast("-3.32102129598800001827402190941442844711537496612480829720954545917202711427"), boost::lexical_cast("2.61349513900266658472136887684620241910754262198058846835967186330136663863"), boost::lexical_cast("-2.38853319713033495202260098319806213683185517673058274190000445657860915347"), boost::lexical_cast("2.10993621697386759008454349852482017386377263965160538055677721963192891999"), boost::lexical_cast("-1.61256188788931860024729141933908754524860783254583010122183874119617986655"), boost::lexical_cast("1.23797805475199533327033756060882156229697699608086470174399374479195617901"), boost::lexical_cast("-0.927638034533750248678688510655383608919790412752058469862157655885568742788"), boost::lexical_cast("0.598847929097229887988452897323944295134119484352549354946451834874406807448"), boost::lexical_cast("-0.383997657145535004546586640993163439996459447874095195026713580064418880820"), boost::lexical_cast("0.250850214810528805990052825784903155854458963606740947659194110817761051247"), boost::lexical_cast("-0.128778636850891888203699386683982406407371540708648125836387080670890476774"), boost::lexical_cast("0.0564880965516855608539804536808433961937777036332691539099534383291528671575"), boost::lexical_cast("-0.0297202144940054411503976781292207507569011942232371230104009758591434089695"), boost::lexical_cast("0.0121859643351046128923156738600080443388598031417307165875316044362239226179"), boost::lexical_cast("-0.00185843273568833887463557296801124598677123828961682233747031997277499314044"), boost::lexical_cast("-0.000114814810668351667156857713897954085126369615497231973190312538067210861730"), boost::lexical_cast("0.000000528016085138320874511452843388030214551797843336485403204846872234194616278"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 13) { if constexpr (std::is_same_v) { @@ -1082,10 +1335,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.749078p-9f, 0x1.8ae6a8p-3f, 0x1.d0088ap-1f, -0x1.20e16ep-4f, -0x1.f688bep-5f, 0x1.2fca44p-5f, -0x1.505c64p-12f, -0x1.014518p-6f, 0x1.c908bep-7f, -0x1.beac12p-8f, 0x1.0006aap-9f, -0x1.d4cc28p-13f, -0x1.a08b66p-15f, 0x1.5f413ap-16f, -0x1.5c34d2p-20f, -0x1.2dc446p-21f, 0x1.74f33ap-24f, 0x1.ddb5ep-29f, -0x1.07969cp-32f, 0x1.2c5958p-38f, 0x1.52fae6p-45f, -0x1.d83da4p-53f, 0x1.1342e6p-65f, 0x1.aa25eep-86f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.239236p-6f, 0x1.0c0768p-1f, 0x1.3373bep-2f, -0x1.856d7ep+0f, 0x1.22d30ap+0f, -0x1.72e38ep-1f, 0x1.8e439cp-2f, -0x1.3bc252p-3f, 0x1.1bc8f6p-5f, 0x1.288446p-11f, -0x1.db22aap-10f, -0x1.3482dcp-11f, 0x1.328522p-11f, -0x1.bbf1c4p-14f, -0x1.17497ap-16f, 0x1.bebecp-18f, -0x1.bc40d8p-22f, 0x1.6454c6p-26f, 0x1.5fce04p-29f, -0x1.12414ap-33f, -0x1.ce70acp-41f, 0x1.8616f6p-48f, -0x1.7b38aep-60f, -0x1.258ba4p-79f, -0x0p+0f}; + return {0x0p+0f, 0x1.239236p-6f, 0x1.0c0768p-1f, 0x1.3373bep-2f, -0x1.856d7ep+0f, 0x1.22d30ap+0f, -0x1.72e38ep-1f, 0x1.8e439cp-2f, -0x1.3bc252p-3f, 0x1.1bc8f6p-5f, 0x1.288446p-11f, -0x1.db22aap-10f, -0x1.3482dcp-11f, 0x1.328522p-11f, -0x1.bbf1c4p-14f, -0x1.17497ap-16f, 0x1.bebecp-18f, -0x1.bc40d8p-22f, 0x1.6454c6p-26f, 0x1.5fce04p-29f, -0x1.12414ap-33f, -0x1.ce70acp-41f, 0x1.8616f6p-48f, -0x1.7b38aep-60f, -0x1.258ba4p-79f, 0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.7e9e9ap-4f, 0x1.e81e74p-1f, -0x1.368292p+1f, 0x1.a1c192p+0f, -0x1.58e6fap-2f, 0x1.2f821p-2f, -0x1.f8fd9cp-2f, 0x1.017de8p-1f, -0x1.5831aep-2f, 0x1.30d718p-3f, -0x1.30a608p-5f, -0x1.632f9ep-11f, 0x1.1cbed4p-8f, -0x1.77d87p-10f, 0x1.50ec24p-14f, 0x1.f99c3cp-15f, -0x1.8453f2p-17f, -0x1.b40566p-23f, 0x1.4c2776p-24f, -0x1.287dbp-29f, -0x1.b00a66p-36f, 0x1.401eb2p-42f, -0x1.715282p-54f, -0x1.1de108p-72f, -0x0p+0f}; + return {0x0p+0f, 0x1.7e9e9ap-4f, 0x1.e81e74p-1f, -0x1.368292p+1f, 0x1.a1c192p+0f, -0x1.58e6fap-2f, 0x1.2f821p-2f, -0x1.f8fd9cp-2f, 0x1.017de8p-1f, -0x1.5831aep-2f, 0x1.30d718p-3f, -0x1.30a608p-5f, -0x1.632f9ep-11f, 0x1.1cbed4p-8f, -0x1.77d87p-10f, 0x1.50ec24p-14f, 0x1.f99c3cp-15f, -0x1.8453f2p-17f, -0x1.b40566p-23f, 0x1.4c2776p-24f, -0x1.287dbp-29f, -0x1.b00a66p-36f, 0x1.401eb2p-42f, -0x1.715282p-54f, -0x1.1de108p-72f, 0x0p+0f}; } if constexpr (order == 3) { return {0x0p+0f, 0x1.95e034p-2f, 0x1.e7908ep-3f, -0x1.29379ap+2f, 0x1.36cc46p+3f, -0x1.433598p+3f, 0x1.9c4d14p+2f, -0x1.ef81d8p+0f, -0x1.2378e8p+0f, 0x1.c6e272p+0f, -0x1.c857e6p-1f, 0x1.3531bp-8f, 0x1.05f57cp-2f, -0x1.38a2dcp-3f, 0x1.35c4a6p-5f, -0x1.fddc3cp-14f, -0x1.2653ap-9f, 0x1.ec5d7p-12f, -0x1.dc01f8p-17f, -0x1.379718p-18f, 0x1.7e5cfep-23f, 0x1.a12416p-29f, -0x1.417132p-35f, 0x1.65f402p-46f, 0x1.15123cp-63f, -0x0p+0f}; @@ -1094,25 +1347,25 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.4c5d52p+0f, -0x1.5d2572p+2f, 0x1.24b0fp+3f, -0x1.39e0f8p+3f, 0x1.f006ccp+3f, -0x1.0ce3p+5f, 0x1.b8b8bp+5f, -0x1.e69256p+5f, 0x1.503102p+5f, -0x1.6d86aep+3f, -0x1.35b5dcp+3f, 0x1.a6237cp+3f, -0x1.cda456p+2f, 0x1.d5a02cp+0f, 0x1.ecd4c4p-5f, -0x1.660ee6p-3f, 0x1.5158e6p-5f, -0x1.73814cp-10f, -0x1.23460cp-11f, 0x1.fa353cp-16f, 0x1.19c574p-21f, -0x1.4bb43p-27f, 0x1.fc9a2p-38f, 0x1.89a8b8p-54f, 0x0p+0f}; } if constexpr (order == 5) { - return {0x0p+0f, 0x1.a35158p+1f, -0x1.5a1bc4p+4f, 0x1.fa0a08p+5f, -0x1.a68f66p+6f, 0x1.98403ap+6f, -0x1.03810ep+5f, -0x1.14faaep+6f, 0x1.3d735cp+7f, -0x1.cdbd7ep+7f, 0x1.200434p+8f, -0x1.2591e8p+8f, 0x1.b6219ap+7f, -0x1.a875bap+6f, 0x1.85c7d2p+4f, 0x1.1c0e0ep+2f, -0x1.36efc4p+2f, 0x1.3e3f5cp+0f, -0x1.bffc3ap-5f, -0x1.75f52cp-6f, 0x1.dea5b4p-10f, 0x1.10aa3ep-15f, -0x1.ea6ed6p-21f, 0x1.089ab2p-30f, 0x1.9990a4p-46f, 0x0p+0f}; + return {0x0p+0f, 0x1.a35158p+1f, -0x1.5a1bc4p+4f, 0x1.fa0a08p+5f, -0x1.a68f66p+6f, 0x1.98403ap+6f, -0x1.03810ep+5f, -0x1.14faaep+6f, 0x1.3d735cp+7f, -0x1.cdbd7ep+7f, 0x1.200434p+8f, -0x1.2591e8p+8f, 0x1.b6219ap+7f, -0x1.a875bap+6f, 0x1.85c7d2p+4f, 0x1.1c0e0ep+2f, -0x1.36efc4p+2f, 0x1.3e3f5cp+0f, -0x1.bffc3ap-5f, -0x1.75f52cp-6f, 0x1.dea5b4p-10f, 0x1.10aa3ep-15f, -0x1.ea6ed6p-21f, 0x1.089ab2p-30f, 0x1.9990a4p-46f, -0x0p+0f}; } if constexpr (order == 6) { - return {0x0p+0f, 0x1.5d159cp+2f, -0x1.54873ep+5f, 0x1.2c245ep+7f, -0x1.416f5cp+8f, 0x1.e67e2cp+8f, -0x1.298ee6p+9f, 0x1.48ee3ep+9f, -0x1.4e6b46p+9f, 0x1.2782eap+9f, -0x1.bb4938p+8f, 0x1.25dfd4p+8f, -0x1.575e0cp+7f, 0x1.1c029p+6f, -0x1.08a1fep+2f, -0x1.12ed1ep+4f, 0x1.66791ep+3f, -0x1.7aa974p+1f, 0x1.41600cp-3f, 0x1.275514p-4f, -0x1.29374p-7f, -0x1.51ea7ep-13f, 0x1.deb156p-18f, -0x1.6e30fap-27f, -0x1.1b57acp-41f, -0x0p+0f}; + return {0x0p+0f, 0x1.5d159cp+2f, -0x1.54873ep+5f, 0x1.2c245ep+7f, -0x1.416f5cp+8f, 0x1.e67e2cp+8f, -0x1.298ee6p+9f, 0x1.48ee3ep+9f, -0x1.4e6b46p+9f, 0x1.2782eap+9f, -0x1.bb4938p+8f, 0x1.25dfd4p+8f, -0x1.575e0cp+7f, 0x1.1c029p+6f, -0x1.08a1fep+2f, -0x1.12ed1ep+4f, 0x1.66791ep+3f, -0x1.7aa974p+1f, 0x1.41600cp-3f, 0x1.275514p-4f, -0x1.29374p-7f, -0x1.51ea7ep-13f, 0x1.deb156p-18f, -0x1.6e30fap-27f, -0x1.1b57acp-41f, 0x0p+0f}; } if constexpr (order == 7) { - return {0x0p+0f, 0x1.d4fe28p+2f, -0x1.ecb0f4p+5f, 0x1.c6da62p+7f, -0x1.e3622ep+8f, 0x1.495088p+9f, -0x1.3d934ap+9f, 0x1.0686p+9f, -0x1.bb4eb6p+8f, 0x1.2c2d3cp+8f, -0x1.6a6f08p+5f, -0x1.48c0f8p+7f, 0x1.bce286p+7f, -0x1.9e035ep+7f, 0x1.737018p+7f, -0x1.15bd06p+7f, 0x1.1609d2p+6f, -0x1.30b382p+4f, 0x1.34c266p+0f, 0x1.56d14ep-1f, -0x1.f82518p-4f, -0x1.1d5d34p-9f, 0x1.599f88p-13f, -0x1.742b04p-22f, -0x1.1fd836p-35f, 0x0p+0f}; + return {0x0p+0f, 0x1.d4fe28p+2f, -0x1.ecb0f4p+5f, 0x1.c6da62p+7f, -0x1.e3622ep+8f, 0x1.495088p+9f, -0x1.3d934ap+9f, 0x1.0686p+9f, -0x1.bb4eb6p+8f, 0x1.2c2d3cp+8f, -0x1.6a6f08p+5f, -0x1.48c0f8p+7f, 0x1.bce286p+7f, -0x1.9e035ep+7f, 0x1.737018p+7f, -0x1.15bd06p+7f, 0x1.1609d2p+6f, -0x1.30b382p+4f, 0x1.34c266p+0f, 0x1.56d14ep-1f, -0x1.f82518p-4f, -0x1.1d5d34p-9f, 0x1.599f88p-13f, -0x1.742b04p-22f, -0x1.1fd836p-35f, -0x0p+0f}; } if constexpr (order == 8) { return {0x0p+0f, 0x1.6f91b2p+2f, -0x1.8fef12p+5f, 0x1.809c44p+7f, -0x1.b10bfp+8f, 0x1.452582p+9f, -0x1.7231bp+9f, 0x1.7af822p+9f, -0x1.823eap+9f, 0x1.6f4bc2p+9f, -0x1.32f292p+9f, 0x1.d856p+8f, -0x1.59b2fp+8f, 0x1.c4899p+7f, -0x1.01b04cp+7f, 0x1.0ee55p+6f, -0x1.f14982p+4f, 0x1.214136p+3f, -0x1.1e3582p-2f, -0x1.54f128p-1f, 0x1.1dedd2p-3f, 0x1.2b8db4p-10f, -0x1.7cd67ep-12f, 0x1.c17582p-21f, 0x1.5b5402p-33f, -0x0p+0f}; } if constexpr (order == 9) { - return {0x0p+0f, 0x1.e00f2p+1f, -0x1.09aad6p+5f, 0x1.0083b2p+7f, -0x1.1b0164p+8f, 0x1.8e74c6p+8f, -0x1.907a86p+8f, 0x1.68e4a6p+8f, -0x1.685dfep+8f, 0x1.592f3ap+8f, -0x1.09589ap+8f, 0x1.658b66p+7f, -0x1.f90c72p+6f, 0x1.49a9a8p+6f, -0x1.441338p+5f, 0x1.0b7b2ap+4f, -0x1.d98372p+2f, 0x1.f43ec2p+0f, 0x1.6165b8p-1f, -0x1.4f8a82p-1f, 0x1.267684p-3f, -0x1.8ddc62p-9f, -0x1.979caep-11f, 0x1.95627cp-20f, 0x1.38bcd2p-31f, -0x0p+0f}; + return {0x0p+0f, 0x1.e00f2p+1f, -0x1.09aad6p+5f, 0x1.0083b2p+7f, -0x1.1b0164p+8f, 0x1.8e74c6p+8f, -0x1.907a86p+8f, 0x1.68e4a6p+8f, -0x1.685dfep+8f, 0x1.592f3ap+8f, -0x1.09589ap+8f, 0x1.658b66p+7f, -0x1.f90c72p+6f, 0x1.49a9a8p+6f, -0x1.441338p+5f, 0x1.0b7b2ap+4f, -0x1.d98372p+2f, 0x1.f43ec2p+0f, 0x1.6165b8p-1f, -0x1.4f8a82p-1f, 0x1.267684p-3f, -0x1.8ddc62p-9f, -0x1.979caep-11f, 0x1.95627cp-20f, 0x1.38bcd2p-31f, 0x0p+0f}; } if constexpr (order == 10) { return {0x0p+0f, 0x1.ddc992p+0f, -0x1.0aa6a6p+4f, 0x1.ffd30ap+5f, -0x1.1076bcp+7f, 0x1.5b315p+7f, -0x1.15e62ap+7f, 0x1.73ecdap+6f, -0x1.7ea49ap+6f, 0x1.92fe5p+6f, -0x1.e50ce8p+5f, 0x1.23fe36p+4f, -0x1.1183a6p+3f, 0x1.325da8p+2f, 0x1.b5b93ep+2f, -0x1.6174ccp+3f, 0x1.b8e78ep+2f, -0x1.ffc6e6p+1f, 0x1.807b44p+1f, -0x1.949fp+0f, 0x1.99c706p-2f, -0x1.8b4256p-6f, -0x1.25fbdep-8f, 0x1.a2ffd6p-17f, 0x1.4225e6p-27f, 0x0p+0f}; } if constexpr (order == 11) { - return {0x0p+0f, 0x1.82556p-2f, -0x1.b108acp+1f, 0x1.a3afap+3f, -0x1.c92e2ap+4f, 0x1.336156p+5f, -0x1.154d2p+5f, 0x1.af95c6p+4f, -0x1.a382eep+4f, 0x1.a5a57ep+4f, -0x1.48587cp+4f, 0x1.c6519cp+3f, -0x1.64406ep+3f, 0x1.05a0dap+3f, -0x1.34062ap+2f, 0x1.65a332p+1f, -0x1.b27cf8p+0f, 0x1.a5bdc8p-1f, -0x1.571ac2p-2f, 0x1.317678p-3f, -0x1.904f34p-5f, 0x1.0ee4f4p-8f, 0x1.2584f2p-10f, -0x1.373cf6p-17f, -0x1.db60ap-27f, 0x0p+0f}; + return {0x0p+0f, 0x1.82556p-2f, -0x1.b108acp+1f, 0x1.a3afap+3f, -0x1.c92e2ap+4f, 0x1.336156p+5f, -0x1.154d2p+5f, 0x1.af95c6p+4f, -0x1.a382eep+4f, 0x1.a5a57ep+4f, -0x1.48587cp+4f, 0x1.c6519cp+3f, -0x1.64406ep+3f, 0x1.05a0dap+3f, -0x1.34062ap+2f, 0x1.65a332p+1f, -0x1.b27cf8p+0f, 0x1.a5bdc8p-1f, -0x1.571ac2p-2f, 0x1.317678p-3f, -0x1.904f34p-5f, 0x1.0ee4f4p-8f, 0x1.2584f2p-10f, -0x1.373cf6p-17f, -0x1.db60ap-27f, -0x0p+0f}; } if constexpr (order == 12) { return {0x0p+0f, 0x1.8dbb04p-5f, -0x1.bebdc6p-2f, 0x1.aeb7a6p+0f, -0x1.cb9852p+1f, 0x1.240bf6p+2f, -0x1.cab7dp+1f, 0x1.1fd454p+1f, -0x1.1ce974p+1f, 0x1.3bab08p+1f, -0x1.c40e7cp+0f, 0x1.feadc8p-1f, -0x1.a643a4p-1f, 0x1.543b96p-1f, -0x1.577aa6p-2f, 0x1.499f7p-3f, -0x1.d5a152p-4f, 0x1.d4c5bap-5f, -0x1.094f52p-6f, 0x1.cd0926p-8f, -0x1.b2091cp-9f, 0x1.fdc736p-13f, 0x1.4af176p-13f, -0x1.fd199ap-19f, -0x1.7fa406p-27f, 0x0p+0f}; @@ -1123,10 +1376,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.749078c0867aap-9, 0x1.8ae6a79b4939p-3, 0x1.d008898983914p-1, -0x1.20e16d5539e3fp-4, -0x1.f688bd1280c7p-5, 0x1.2fca4301354a5p-5, -0x1.505c64431d7a7p-12, -0x1.0145189baf014p-6, 0x1.c908becee5a6ap-7, -0x1.beac12be1e7dep-8, 0x1.0006a916adee3p-9, -0x1.d4cc286b09e13p-13, -0x1.a08b65bbb5986p-15, 0x1.5f413ab3a7eb9p-16, -0x1.5c34d16af592p-20, -0x1.2dc4454eebde3p-21, 0x1.74f33a2ccbc65p-24, 0x1.ddb5df0a412fdp-29, -0x1.07969b3a158bdp-32, 0x1.2c5958b74836cp-38, 0x1.52fae6e83092p-45, -0x1.d83da475a639cp-53, 0x1.1342e56840ec2p-65, 0x1.aa25edf8f64ffp-86, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.23923550f457dp-6, 0x1.0c0767795d12bp-1, 0x1.3373be839b47cp-2, -0x1.856d7e6b6468cp+0, 0x1.22d30ac28dd9dp+0, -0x1.72e38df054a24p-1, 0x1.8e439b194a1c1p-2, -0x1.3bc2524066e84p-3, 0x1.1bc8f6e410596p-5, 0x1.2884461caa1e3p-11, -0x1.db22a9804aa11p-10, -0x1.3482dca87f01cp-11, 0x1.3285223dae55ap-11, -0x1.bbf1c4306d1a3p-14, -0x1.17497a4dcd45p-16, 0x1.bebec0cbd1f99p-18, -0x1.bc40d833ef35ap-22, 0x1.6454c6cebdf98p-26, 0x1.5fce040bf0fa2p-29, -0x1.1241493325c92p-33, -0x1.ce70ab06ee7ebp-41, 0x1.8616f674ef406p-48, -0x1.7b38ad7c07a3ap-60, -0x1.258ba4702de86p-79, -0x0p+0}; + return {0x0p+0, 0x1.23923550f457dp-6, 0x1.0c0767795d12bp-1, 0x1.3373be839b47cp-2, -0x1.856d7e6b6468cp+0, 0x1.22d30ac28dd9dp+0, -0x1.72e38df054a24p-1, 0x1.8e439b194a1c1p-2, -0x1.3bc2524066e84p-3, 0x1.1bc8f6e410596p-5, 0x1.2884461caa1e3p-11, -0x1.db22a9804aa11p-10, -0x1.3482dca87f01cp-11, 0x1.3285223dae55ap-11, -0x1.bbf1c4306d1a3p-14, -0x1.17497a4dcd45p-16, 0x1.bebec0cbd1f99p-18, -0x1.bc40d833ef35ap-22, 0x1.6454c6cebdf98p-26, 0x1.5fce040bf0fa2p-29, -0x1.1241493325c92p-33, -0x1.ce70ab06ee7ebp-41, 0x1.8616f674ef406p-48, -0x1.7b38ad7c07a3ap-60, -0x1.258ba4702de86p-79, 0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.7e9e99d93265ep-4, 0x1.e81e73bf7d4e6p-1, -0x1.368292c7be10ep+1, 0x1.a1c192a939b96p+0, -0x1.58e6f9045a40ep-2, 0x1.2f82100ba4f28p-2, -0x1.f8fd9be6cc911p-2, 0x1.017de77081fc3p-1, -0x1.5831ad1464211p-2, 0x1.30d718554c4cbp-3, -0x1.30a6075105b3bp-5, -0x1.632f9e9eb99fcp-11, 0x1.1cbed37ba4dbep-8, -0x1.77d86fa7164cp-10, 0x1.50ec238da0096p-14, 0x1.f99c3b6dd2e63p-15, -0x1.8453f2cbc2d99p-17, -0x1.b4056601f4cp-23, 0x1.4c2776a5f116ep-24, -0x1.287daf168a21ap-29, -0x1.b00a66e2af604p-36, 0x1.401eb1fad689ep-42, -0x1.71528144e6955p-54, -0x1.1de10823e626cp-72, -0x0p+0}; + return {0x0p+0, 0x1.7e9e99d93265ep-4, 0x1.e81e73bf7d4e6p-1, -0x1.368292c7be10ep+1, 0x1.a1c192a939b96p+0, -0x1.58e6f9045a40ep-2, 0x1.2f82100ba4f28p-2, -0x1.f8fd9be6cc911p-2, 0x1.017de77081fc3p-1, -0x1.5831ad1464211p-2, 0x1.30d718554c4cbp-3, -0x1.30a6075105b3bp-5, -0x1.632f9e9eb99fcp-11, 0x1.1cbed37ba4dbep-8, -0x1.77d86fa7164cp-10, 0x1.50ec238da0096p-14, 0x1.f99c3b6dd2e63p-15, -0x1.8453f2cbc2d99p-17, -0x1.b4056601f4cp-23, 0x1.4c2776a5f116ep-24, -0x1.287daf168a21ap-29, -0x1.b00a66e2af604p-36, 0x1.401eb1fad689ep-42, -0x1.71528144e6955p-54, -0x1.1de10823e626cp-72, 0x0p+0}; } if constexpr (order == 3) { return {0x0p+0, 0x1.95e033565cd46p-2, 0x1.e7908dd5753c9p-3, -0x1.293799fcf6c8ep+2, 0x1.36cc467b08bf8p+3, -0x1.4335983e13577p+3, 0x1.9c4d14b541486p+2, -0x1.ef81d85b23a02p+0, -0x1.2378e73c6b10ap+0, 0x1.c6e27151761e4p+0, -0x1.c857e67243154p-1, 0x1.3531afa42b77fp-8, 0x1.05f57c1a6464dp-2, -0x1.38a2db882124ep-3, 0x1.35c4a5041d9b9p-5, -0x1.fddc3c9f813d7p-14, -0x1.2653a0321997dp-9, 0x1.ec5d6f7ab50c1p-12, -0x1.dc01f8633f4c6p-17, -0x1.379717b64ca38p-18, 0x1.7e5cfdc9a1b18p-23, 0x1.a124166c57861p-29, -0x1.4171311c3a7b2p-35, 0x1.65f402b77f1abp-46, 0x1.15123cc4efb61p-63, -0x0p+0}; @@ -1135,25 +1388,25 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.4c5d516dd5341p+0, -0x1.5d2571cda5544p+2, 0x1.24b0f0352262ap+3, -0x1.39e0f8d13e8dbp+3, 0x1.f006cc927be53p+3, -0x1.0ce2ffa464611p+5, 0x1.b8b8afcf323dp+5, -0x1.e6925570e3f51p+5, 0x1.503102590c0b8p+5, -0x1.6d86add093f07p+3, -0x1.35b5dc1025f2dp+3, 0x1.a6237c764b4a3p+3, -0x1.cda455c3ae393p+2, 0x1.d5a02bb93708ap+0, 0x1.ecd4c4adc076p-5, -0x1.660ee59df078bp-3, 0x1.5158e51b27e5ep-5, -0x1.73814bfd57b68p-10, -0x1.23460c48f637p-11, 0x1.fa353cdebaaabp-16, 0x1.19c5738584247p-21, -0x1.4bb4308ed52p-27, 0x1.fc9a1f4f09859p-38, 0x1.89a8b7b9d28d2p-54, 0x0p+0}; } if constexpr (order == 5) { - return {0x0p+0, 0x1.a35157d8dba57p+1, -0x1.5a1bc35a1cc0ep+4, 0x1.fa0a0878d9a93p+5, -0x1.a68f6523a827p+6, 0x1.98403a971e631p+6, -0x1.03810e60e0205p+5, -0x1.14faaec768465p+6, 0x1.3d735b94c1054p+7, -0x1.cdbd7de801408p+7, 0x1.20043470ad457p+8, -0x1.2591e882d85cdp+8, 0x1.b621996a63c18p+7, -0x1.a875ba068d845p+6, 0x1.85c7d166f26b7p+4, 0x1.1c0e0d6b929f9p+2, -0x1.36efc345fd87ep+2, 0x1.3e3f5c2c93c34p+0, -0x1.bffc3922a3129p-5, -0x1.75f52c4bce394p-6, 0x1.dea5b49d2b29ap-10, 0x1.10aa3eff5f8abp-15, -0x1.ea6ed6c321e75p-21, 0x1.089ab261bfe1dp-30, 0x1.9990a3735f2b8p-46, 0x0p+0}; + return {0x0p+0, 0x1.a35157d8dba57p+1, -0x1.5a1bc35a1cc0ep+4, 0x1.fa0a0878d9a93p+5, -0x1.a68f6523a827p+6, 0x1.98403a971e631p+6, -0x1.03810e60e0205p+5, -0x1.14faaec768465p+6, 0x1.3d735b94c1054p+7, -0x1.cdbd7de801408p+7, 0x1.20043470ad457p+8, -0x1.2591e882d85cdp+8, 0x1.b621996a63c18p+7, -0x1.a875ba068d845p+6, 0x1.85c7d166f26b7p+4, 0x1.1c0e0d6b929f9p+2, -0x1.36efc345fd87ep+2, 0x1.3e3f5c2c93c34p+0, -0x1.bffc3922a3129p-5, -0x1.75f52c4bce394p-6, 0x1.dea5b49d2b29ap-10, 0x1.10aa3eff5f8abp-15, -0x1.ea6ed6c321e75p-21, 0x1.089ab261bfe1dp-30, 0x1.9990a3735f2b8p-46, -0x0p+0}; } if constexpr (order == 6) { - return {0x0p+0, 0x1.5d159c98a090ap+2, -0x1.54873e7e1b3d2p+5, 0x1.2c245e185ac8bp+7, -0x1.416f5cc6c22c2p+8, 0x1.e67e2b7f93304p+8, -0x1.298ee57db6ed6p+9, 0x1.48ee3d90a4e35p+9, -0x1.4e6b4521eb7a5p+9, 0x1.2782e95d7bf9fp+9, -0x1.bb493883e544dp+8, 0x1.25dfd4b9fa45bp+8, -0x1.575e0c206b7eep+7, 0x1.1c028f2725fcep+6, -0x1.08a1fe0ac681ap+2, -0x1.12ed1d6ca773p+4, 0x1.66791e904ad3bp+3, -0x1.7aa9733036516p+1, 0x1.41600caa02956p-3, 0x1.275514f436a32p-4, -0x1.29373f56ac109p-7, -0x1.51ea7d9f34504p-13, 0x1.deb156b08b87fp-18, -0x1.6e30fae8c34eep-27, -0x1.1b57abb7d7f1cp-41, -0x0p+0}; + return {0x0p+0, 0x1.5d159c98a090ap+2, -0x1.54873e7e1b3d2p+5, 0x1.2c245e185ac8bp+7, -0x1.416f5cc6c22c2p+8, 0x1.e67e2b7f93304p+8, -0x1.298ee57db6ed6p+9, 0x1.48ee3d90a4e35p+9, -0x1.4e6b4521eb7a5p+9, 0x1.2782e95d7bf9fp+9, -0x1.bb493883e544dp+8, 0x1.25dfd4b9fa45bp+8, -0x1.575e0c206b7eep+7, 0x1.1c028f2725fcep+6, -0x1.08a1fe0ac681ap+2, -0x1.12ed1d6ca773p+4, 0x1.66791e904ad3bp+3, -0x1.7aa9733036516p+1, 0x1.41600caa02956p-3, 0x1.275514f436a32p-4, -0x1.29373f56ac109p-7, -0x1.51ea7d9f34504p-13, 0x1.deb156b08b87fp-18, -0x1.6e30fae8c34eep-27, -0x1.1b57abb7d7f1cp-41, 0x0p+0}; } if constexpr (order == 7) { - return {0x0p+0, 0x1.d4fe27a0835aep+2, -0x1.ecb0f32ca76fbp+5, 0x1.c6da62a20cd0bp+7, -0x1.e3622dd5ba05ep+8, 0x1.49508717a90e8p+9, -0x1.3d934aacf56d1p+9, 0x1.068600d74e1c9p+9, -0x1.bb4eb52dbc23dp+8, 0x1.2c2d3c048caafp+8, -0x1.6a6f07f5d07ddp+5, -0x1.48c0f7b3bed9ep+7, 0x1.bce28601020e5p+7, -0x1.9e035ea535c3bp+7, 0x1.737017c34f7dfp+7, -0x1.15bd065f2789cp+7, 0x1.1609d2e86de1fp+6, -0x1.30b382548236p+4, 0x1.34c266d274d02p+0, 0x1.56d14dbd1c0fp-1, -0x1.f82518456ddfap-4, -0x1.1d5d333a03734p-9, 0x1.599f88826e1dfp-13, -0x1.742b04eba227p-22, -0x1.1fd835e2f3ac3p-35, 0x0p+0}; + return {0x0p+0, 0x1.d4fe27a0835aep+2, -0x1.ecb0f32ca76fbp+5, 0x1.c6da62a20cd0bp+7, -0x1.e3622dd5ba05ep+8, 0x1.49508717a90e8p+9, -0x1.3d934aacf56d1p+9, 0x1.068600d74e1c9p+9, -0x1.bb4eb52dbc23dp+8, 0x1.2c2d3c048caafp+8, -0x1.6a6f07f5d07ddp+5, -0x1.48c0f7b3bed9ep+7, 0x1.bce28601020e5p+7, -0x1.9e035ea535c3bp+7, 0x1.737017c34f7dfp+7, -0x1.15bd065f2789cp+7, 0x1.1609d2e86de1fp+6, -0x1.30b382548236p+4, 0x1.34c266d274d02p+0, 0x1.56d14dbd1c0fp-1, -0x1.f82518456ddfap-4, -0x1.1d5d333a03734p-9, 0x1.599f88826e1dfp-13, -0x1.742b04eba227p-22, -0x1.1fd835e2f3ac3p-35, -0x0p+0}; } if constexpr (order == 8) { return {0x0p+0, 0x1.6f91b1fb16e46p+2, -0x1.8fef11e8059cfp+5, 0x1.809c444472a8ep+7, -0x1.b10bf090c92b5p+8, 0x1.45258188f7147p+9, -0x1.7231afc08bd27p+9, 0x1.7af82162ac35ap+9, -0x1.823e9f8992b5ap+9, 0x1.6f4bc124eb7dcp+9, -0x1.32f291524b4fdp+9, 0x1.d856007cb8fap+8, -0x1.59b2f057a74e5p+8, 0x1.c4898ffe6b604p+7, -0x1.01b04bb5c7e4fp+7, 0x1.0ee550f2b46fbp+6, -0x1.f149829700499p+4, 0x1.21413698e7cf2p+3, -0x1.1e358290df39dp-2, -0x1.54f12799790c9p-1, 0x1.1dedd290f908p-3, 0x1.2b8db385d6eebp-10, -0x1.7cd67d6099899p-12, 0x1.c1758243d6f69p-21, 0x1.5b5402fbe8db8p-33, -0x0p+0}; } if constexpr (order == 9) { - return {0x0p+0, 0x1.e00f201ca9b48p+1, -0x1.09aad588fc6e2p+5, 0x1.0083b1ed3add2p+7, -0x1.1b01639f15a47p+8, 0x1.8e74c5b415b4dp+8, -0x1.907a858da198ep+8, 0x1.68e4a68143eb6p+8, -0x1.685dfe59eb94fp+8, 0x1.592f39b72049ap+8, -0x1.09589acf597f5p+8, 0x1.658b66c44d2dap+7, -0x1.f90c71880a916p+6, 0x1.49a9a7009f2b2p+6, -0x1.441338caa52dp+5, 0x1.0b7b2a297fde1p+4, -0x1.d98372b1c68d4p+2, 0x1.f43ec1f2a328p+0, 0x1.6165b77555fcbp-1, -0x1.4f8a8171bb09p-1, 0x1.267683e93d2b7p-3, -0x1.8ddc624d415c9p-9, -0x1.979cae945ae1p-11, 0x1.95627b187fdb2p-20, 0x1.38bcd286c35dep-31, -0x0p+0}; + return {0x0p+0, 0x1.e00f201ca9b48p+1, -0x1.09aad588fc6e2p+5, 0x1.0083b1ed3add2p+7, -0x1.1b01639f15a47p+8, 0x1.8e74c5b415b4dp+8, -0x1.907a858da198ep+8, 0x1.68e4a68143eb6p+8, -0x1.685dfe59eb94fp+8, 0x1.592f39b72049ap+8, -0x1.09589acf597f5p+8, 0x1.658b66c44d2dap+7, -0x1.f90c71880a916p+6, 0x1.49a9a7009f2b2p+6, -0x1.441338caa52dp+5, 0x1.0b7b2a297fde1p+4, -0x1.d98372b1c68d4p+2, 0x1.f43ec1f2a328p+0, 0x1.6165b77555fcbp-1, -0x1.4f8a8171bb09p-1, 0x1.267683e93d2b7p-3, -0x1.8ddc624d415c9p-9, -0x1.979cae945ae1p-11, 0x1.95627b187fdb2p-20, 0x1.38bcd286c35dep-31, 0x0p+0}; } if constexpr (order == 10) { return {0x0p+0, 0x1.ddc9914b8fce2p+0, -0x1.0aa6a6fe474ap+4, 0x1.ffd30a30f104ep+5, -0x1.1076bbdb4cf75p+7, 0x1.5b314fd5bd842p+7, -0x1.15e629a2f07abp+7, 0x1.73ecdaa7dbcd1p+6, -0x1.7ea4991281a8p+6, 0x1.92fe5087093b6p+6, -0x1.e50ce86c3eca3p+5, 0x1.23fe36ce5250dp+4, -0x1.1183a5ac74637p+3, 0x1.325da71616788p+2, 0x1.b5b93d37eb78fp+2, -0x1.6174cc292a978p+3, 0x1.b8e78e1a9ada5p+2, -0x1.ffc6e54f09b8ap+1, 0x1.807b43d233e13p+1, -0x1.949effe4fd5f1p+0, 0x1.99c706ee33d33p-2, -0x1.8b4255eb2ab53p-6, -0x1.25fbde4ae0e29p-8, 0x1.a2ffd5a58a3e6p-17, 0x1.4225e5d67d6a9p-27, 0x0p+0}; } if constexpr (order == 11) { - return {0x0p+0, 0x1.82555f0fca682p-2, -0x1.b108ac4bd9d5ep+1, 0x1.a3af9f5e28534p+3, -0x1.c92e2a69bebeap+4, 0x1.336156f19a3ebp+5, -0x1.154d20c532d38p+5, 0x1.af95c6a7f034fp+4, -0x1.a382ed435f8edp+4, 0x1.a5a57db59b67cp+4, -0x1.48587bdb4781p+4, 0x1.c6519b1cdb293p+3, -0x1.64406dc5dece2p+3, 0x1.05a0da2a87dbp+3, -0x1.34062a3bf7c11p+2, 0x1.65a3327bcf1acp+1, -0x1.b27cf7ab49be3p+0, 0x1.a5bdc7192b9c4p-1, -0x1.571ac2983f85ep-2, 0x1.31767817c6adfp-3, -0x1.904f3491bf69cp-5, 0x1.0ee4f3163f55fp-8, 0x1.2584f1f36b43ep-10, -0x1.373cf584c03efp-17, -0x1.db60a068c3378p-27, 0x0p+0}; + return {0x0p+0, 0x1.82555f0fca682p-2, -0x1.b108ac4bd9d5ep+1, 0x1.a3af9f5e28534p+3, -0x1.c92e2a69bebeap+4, 0x1.336156f19a3ebp+5, -0x1.154d20c532d38p+5, 0x1.af95c6a7f034fp+4, -0x1.a382ed435f8edp+4, 0x1.a5a57db59b67cp+4, -0x1.48587bdb4781p+4, 0x1.c6519b1cdb293p+3, -0x1.64406dc5dece2p+3, 0x1.05a0da2a87dbp+3, -0x1.34062a3bf7c11p+2, 0x1.65a3327bcf1acp+1, -0x1.b27cf7ab49be3p+0, 0x1.a5bdc7192b9c4p-1, -0x1.571ac2983f85ep-2, 0x1.31767817c6adfp-3, -0x1.904f3491bf69cp-5, 0x1.0ee4f3163f55fp-8, 0x1.2584f1f36b43ep-10, -0x1.373cf584c03efp-17, -0x1.db60a068c3378p-27, -0x0p+0}; } if constexpr (order == 12) { return {0x0p+0, 0x1.8dbb03fad2c3p-5, -0x1.bebdc5d3b2391p-2, 0x1.aeb7a5ea21053p+0, -0x1.cb9851522d20bp+1, 0x1.240bf59871b99p+2, -0x1.cab7cf1ed537ep+1, 0x1.1fd4543a5fd8dp+1, -0x1.1ce9744c1c975p+1, 0x1.3bab08bd76345p+1, -0x1.c40e7b4e77557p+0, 0x1.feadc8c7ce87bp-1, -0x1.a643a47d84b4ep-1, 0x1.543b964e0f03ap-1, -0x1.577aa576ffa65p-2, 0x1.499f6f7a97a23p-3, -0x1.d5a15151b9016p-4, 0x1.d4c5badb46707p-5, -0x1.094f5215690dbp-6, 0x1.cd0926fb9e142p-8, -0x1.b2091c2c73ddp-9, 0x1.fdc7350edfaddp-13, 0x1.4af17513fc3a8p-13, -0x1.fd199a3cefa32p-19, -0x1.7fa406e41ed66p-27, 0x0p+0}; @@ -1164,10 +1417,10 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xb.a483c60433d4d39p-12L, 0xc.57353cda49c7dedp-6L, 0xe.80444c4c1c89ecep-4L, -0x9.070b6aa9cf1f929p-7L, -0xf.b445e89406380cap-8L, 0x9.7e521809aa52714p-8L, -0xa.82e32218ebd378fp-15L, -0x8.0a28c4dd780a179p-9L, 0xe.4845f6772d3537ep-10L, -0xd.f56095f0f3ef04ap-11L, 0x8.003548b56f71a16p-12L, -0xe.a66143584f09aacp-16L, -0xd.045b2dddacc33b9p-18L, 0xa.fa09d59d3f5ca6ep-19L, -0xa.e1a68b57ac901bdp-23L, -0x9.6e222a775ef19bdp-24L, 0xb.a799d1665e328c8p-27L, 0xe.edaef852097ea04p-32L, -0x8.3cb4d9d0ac5e8bp-35L, 0x9.62cac5ba41b6085p-41L, 0xa.97d73741848fd34p-48L, -0xe.c1ed23ad31ce184p-56L, 0x8.9a172b420760cedp-68L, 0xd.512f6fc7b27f70ap-89L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0x9.1c91aa87a2be53cp-9L, 0x8.603b3bcae89572fp-4L, 0x9.9b9df41cda3e206p-5L, -0xc.2b6bf35b234616fp-3L, 0x9.169856146ece4d3p-3L, -0xb.971c6f82a511d45p-4L, 0xc.721cd8ca50e0b31p-5L, -0x9.de1292033741f59p-6L, 0x8.de47b72082cb31fp-8L, 0x9.442230e550f1904p-14L, -0xe.d9154c025508998p-13L, -0x9.a416e543f80e22fp-14L, 0x9.942911ed72acc95p-14L, -0xd.df8e218368d1bf8p-17L, -0x8.ba4bd26e6a27feep-19L, 0xd.f5f6065e8fcc9b9p-21L, -0xd.e206c19f79acc2bp-25L, 0xb.22a63675efcbfa2p-29L, 0xa.fe70205f87d115p-32L, -0x8.920a49992e4937dp-36L, -0xe.7385583773f5acap-44L, 0xc.30b7b3a77a02f75p-51L, -0xb.d9c56be03d1d02cp-63L, -0x9.2c5d23816f42d62p-82L, -0x0p+0L}; + return {0x0p+0L, 0x9.1c91aa87a2be53cp-9L, 0x8.603b3bcae89572fp-4L, 0x9.9b9df41cda3e206p-5L, -0xc.2b6bf35b234616fp-3L, 0x9.169856146ece4d3p-3L, -0xb.971c6f82a511d45p-4L, 0xc.721cd8ca50e0b31p-5L, -0x9.de1292033741f59p-6L, 0x8.de47b72082cb31fp-8L, 0x9.442230e550f1904p-14L, -0xe.d9154c025508998p-13L, -0x9.a416e543f80e22fp-14L, 0x9.942911ed72acc95p-14L, -0xd.df8e218368d1bf8p-17L, -0x8.ba4bd26e6a27feep-19L, 0xd.f5f6065e8fcc9b9p-21L, -0xd.e206c19f79acc2bp-25L, 0xb.22a63675efcbfa2p-29L, 0xa.fe70205f87d115p-32L, -0x8.920a49992e4937dp-36L, -0xe.7385583773f5acap-44L, 0xc.30b7b3a77a02f75p-51L, -0xb.d9c56be03d1d02cp-63L, -0x9.2c5d23816f42d62p-82L, 0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0xb.f4f4cec9932f0f6p-7L, 0xf.40f39dfbea733adp-4L, -0x9.b414963df08728ap-2L, 0xd.0e0c9549cdcb3a8p-3L, -0xa.c737c822d206e95p-5L, 0x9.7c10805d27943dp-5L, -0xf.c7ecdf3664887bbp-5L, 0x8.0bef3b840fe187dp-4L, -0xa.c18d68a32108919p-5L, 0x9.86b8c2aa62655e8p-6L, -0x9.85303a882d9d527p-8L, -0xb.197cf4f5ccfe389p-14L, 0x8.e5f69bdd26decb6p-11L, -0xb.bec37d38b25fe46p-13L, 0xa.87611c6d004b37bp-17L, 0xf.cce1db6e973199cp-18L, -0xc.229f965e16ccb5cp-20L, -0xd.a02b300fa5ffc5bp-26L, 0xa.613bb52f88b70ecp-27L, -0x9.43ed78b4510cd51p-32L, -0xd.805337157b01dc1p-39L, 0xa.00f58fd6b44ef03p-45L, -0xb.8a940a2734aa51ap-57L, -0x8.ef08411f3135df8p-75L, -0x0p+0L}; + return {0x0p+0L, 0xb.f4f4cec9932f0f6p-7L, 0xf.40f39dfbea733adp-4L, -0x9.b414963df08728ap-2L, 0xd.0e0c9549cdcb3a8p-3L, -0xa.c737c822d206e95p-5L, 0x9.7c10805d27943dp-5L, -0xf.c7ecdf3664887bbp-5L, 0x8.0bef3b840fe187dp-4L, -0xa.c18d68a32108919p-5L, 0x9.86b8c2aa62655e8p-6L, -0x9.85303a882d9d527p-8L, -0xb.197cf4f5ccfe389p-14L, 0x8.e5f69bdd26decb6p-11L, -0xb.bec37d38b25fe46p-13L, 0xa.87611c6d004b37bp-17L, 0xf.cce1db6e973199cp-18L, -0xc.229f965e16ccb5cp-20L, -0xd.a02b300fa5ffc5bp-26L, 0xa.613bb52f88b70ecp-27L, -0x9.43ed78b4510cd51p-32L, -0xd.805337157b01dc1p-39L, 0xa.00f58fd6b44ef03p-45L, -0xb.8a940a2734aa51ap-57L, -0x8.ef08411f3135df8p-75L, 0x0p+0L}; } if constexpr (order == 3) { return {0x0p+0L, 0xc.af019ab2e6a32f3p-5L, 0xf.3c846eaba9e4babp-6L, -0x9.49bccfe7b646d1p-1L, 0x9.b66233d845fbec5p+0L, -0xa.19acc1f09abba63p+0L, 0xc.e268a5aa0a433dap-1L, -0xf.7c0ec2d91d00d64p-3L, -0x9.1bc739e3588517cp-3L, 0xe.37138a8bb0f1f2cp-3L, -0xe.42bf339218a9d4bp-4L, 0x9.a98d7d215bbfa64p-11L, 0x8.2fabe0d32326ba1p-5L, -0x9.c516dc410926fe2p-6L, 0x9.ae252820ecdca2bp-8L, -0xf.eee1e4fc09eb578p-17L, -0x9.329d0190ccbe8fdp-12L, 0xf.62eb7bd5a860bbfp-15L, -0xe.e00fc319fa6309dp-20L, -0x9.bcb8bdb2651be88p-21L, 0xb.f2e7ee4d0d8bee7p-26L, 0xd.0920b362bc30ba7p-32L, -0xa.0b8988e1d3d9312p-38L, 0xb.2fa015bbf8d5914p-49L, 0x8.a891e6277db069dp-66L, -0x0p+0L}; @@ -1176,25 +1429,25 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xa.62ea8b6ea9a0684p-3L, -0xa.e92b8e6d2aa1c92p-1L, 0x9.258781a91314f19p+0L, -0x9.cf07c689f46d8f8p+0L, 0xf.80366493df29948p+0L, -0x8.6717fd232308bfp+2L, 0xd.c5c57e7991e8074p+2L, -0xf.3492ab871fa8811p+2L, 0xa.818812c8605bdbdp+2L, -0xb.6c356e849f83a5ep+0L, -0x9.adaee0812f969a5p+0L, 0xd.311be3b25a5141ap+0L, -0xe.6d22ae1d71c94e9p-1L, 0xe.ad015dc9b84519p-3L, 0xf.66a6256e03aff12p-8L, -0xb.30772cef83c5a19p-6L, 0xa.8ac728d93f2edffp-8L, -0xb.9c0a5feabdb40fdp-13L, -0x9.1a306247b1b7d38p-14L, 0xf.d1a9e6f5d555505p-19L, 0x8.ce2b9c2c2123732p-24L, -0xa.5da18476a8fff99p-30L, 0xf.e4d0fa784c2c7aap-41L, 0xc.4d45bdce9468eb9p-57L, 0x0p+0L}; } if constexpr (order == 5) { - return {0x0p+0L, 0xd.1a8abec6dd2b59ap-2L, -0xa.d0de1ad0e606ddbp+1L, 0xf.d05043c6cd499c3p+2L, -0xd.347b291d41380b3p+3L, 0xc.c201d4b8f318b15p+3L, -0x8.1c08730701024ebp+2L, -0x8.a7d5763b4232a87p+3L, 0x9.eb9adca6082a1b5p+4L, -0xe.6debef400a03eb9p+4L, 0x9.0021a3856a2b57ap+5L, -0x9.2c8f4416c2e68c6p+5L, 0xd.b10ccb531e0bf33p+4L, -0xd.43add0346c224eap+3L, 0xc.2e3e8b37935bbc2p+1L, 0x8.e0706b5c94fcaddp-1L, -0x9.b77e1a2fec3f3f9p-1L, 0x9.f1fae1649e1a3cap-3L, -0xd.ffe1c91518944a2p-8L, -0xb.afa9625e71ca263p-9L, 0xe.f52da4e9594cf98p-13L, 0x8.8551f7fafc55605p-18L, -0xf.5376b6190f3a9e1p-24L, 0x8.44d5930dff0e45cp-33L, 0xc.cc851b9af95c09cp-49L, 0x0p+0L}; + return {0x0p+0L, 0xd.1a8abec6dd2b59ap-2L, -0xa.d0de1ad0e606ddbp+1L, 0xf.d05043c6cd499c3p+2L, -0xd.347b291d41380b3p+3L, 0xc.c201d4b8f318b15p+3L, -0x8.1c08730701024ebp+2L, -0x8.a7d5763b4232a87p+3L, 0x9.eb9adca6082a1b5p+4L, -0xe.6debef400a03eb9p+4L, 0x9.0021a3856a2b57ap+5L, -0x9.2c8f4416c2e68c6p+5L, 0xd.b10ccb531e0bf33p+4L, -0xd.43add0346c224eap+3L, 0xc.2e3e8b37935bbc2p+1L, 0x8.e0706b5c94fcaddp-1L, -0x9.b77e1a2fec3f3f9p-1L, 0x9.f1fae1649e1a3cap-3L, -0xd.ffe1c91518944a2p-8L, -0xb.afa9625e71ca263p-9L, 0xe.f52da4e9594cf98p-13L, 0x8.8551f7fafc55605p-18L, -0xf.5376b6190f3a9e1p-24L, 0x8.44d5930dff0e45cp-33L, 0xc.cc851b9af95c09cp-49L, -0x0p+0L}; } if constexpr (order == 6) { - return {0x0p+0L, 0xa.e8ace4c50485103p-1L, -0xa.a439f3f0d9e9083p+2L, 0x9.6122f0c2d6458a6p+4L, -0xa.0b7ae6361160fep+5L, 0xf.33f15bfc9982224p+5L, -0x9.4c772bedb76afeap+6L, 0xa.4771ec85271a548p+6L, -0xa.735a290f5bd2b61p+6L, 0x9.3c174aebdfcfafep+6L, -0xd.da49c41f2a26a23p+5L, 0x9.2efea5cfd22d7f4p+5L, -0xa.baf061035bf7341p+4L, 0x8.e01479392fe733bp+3L, -0x8.450ff056340cfcbp-1L, -0x8.9768eb653b980edp+1L, 0xb.33c8f482569da0fp+0L, -0xb.d54b9981b28ad7fp-2L, 0xa.0b00655014aaec4p-6L, 0x9.3aa8a7a1b518f2bp-7L, -0x9.49b9fab56084ac4p-10L, -0xa.8f53ecf9a28205dp-16L, 0xe.f58ab5845c3f783p-21L, -0xb.7187d7461a76c1bp-30L, -0x8.dabd5dbebf8dd41p-44L, -0x0p+0L}; + return {0x0p+0L, 0xa.e8ace4c50485103p-1L, -0xa.a439f3f0d9e9083p+2L, 0x9.6122f0c2d6458a6p+4L, -0xa.0b7ae6361160fep+5L, 0xf.33f15bfc9982224p+5L, -0x9.4c772bedb76afeap+6L, 0xa.4771ec85271a548p+6L, -0xa.735a290f5bd2b61p+6L, 0x9.3c174aebdfcfafep+6L, -0xd.da49c41f2a26a23p+5L, 0x9.2efea5cfd22d7f4p+5L, -0xa.baf061035bf7341p+4L, 0x8.e01479392fe733bp+3L, -0x8.450ff056340cfcbp-1L, -0x8.9768eb653b980edp+1L, 0xb.33c8f482569da0fp+0L, -0xb.d54b9981b28ad7fp-2L, 0xa.0b00655014aaec4p-6L, 0x9.3aa8a7a1b518f2bp-7L, -0x9.49b9fab56084ac4p-10L, -0xa.8f53ecf9a28205dp-16L, 0xe.f58ab5845c3f783p-21L, -0xb.7187d7461a76c1bp-30L, -0x8.dabd5dbebf8dd41p-44L, 0x0p+0L}; } if constexpr (order == 7) { - return {0x0p+0L, 0xe.a7f13d041ad70dp-1L, -0xf.658799653b7da4ap+2L, 0xe.36d31510668543p+4L, -0xf.1b116eadd02ec05p+5L, 0xa.4a8438bd48741b4p+6L, -0x9.ec9a5567ab68514p+6L, 0x8.343006ba70e487p+6L, -0xd.da75a96de11e455p+5L, 0x9.6169e024655745ap+5L, -0xb.53783fae83ee946p+2L, -0xa.4607bd9df6ceea7p+4L, 0xd.e71430081072aa3p+4L, -0xc.f01af529ae1d75fp+4L, 0xb.9b80be1a7bef779p+4L, -0x8.ade832f93c4e129p+4L, 0x8.b04e97436f0fa36p+3L, -0x9.859c12a411afe04p+1L, 0x9.a6133693a681011p-3L, 0xa.b68a6de8e077c6ep-4L, -0xf.c128c22b6efd051p-7L, -0x8.eae999d01b9a034p-12L, 0xa.ccfc441370efba9p-16L, -0xb.a158275d1138117p-25L, -0x8.fec1af179d61b9fp-38L, 0x0p+0L}; + return {0x0p+0L, 0xe.a7f13d041ad70dp-1L, -0xf.658799653b7da4ap+2L, 0xe.36d31510668543p+4L, -0xf.1b116eadd02ec05p+5L, 0xa.4a8438bd48741b4p+6L, -0x9.ec9a5567ab68514p+6L, 0x8.343006ba70e487p+6L, -0xd.da75a96de11e455p+5L, 0x9.6169e024655745ap+5L, -0xb.53783fae83ee946p+2L, -0xa.4607bd9df6ceea7p+4L, 0xd.e71430081072aa3p+4L, -0xc.f01af529ae1d75fp+4L, 0xb.9b80be1a7bef779p+4L, -0x8.ade832f93c4e129p+4L, 0x8.b04e97436f0fa36p+3L, -0x9.859c12a411afe04p+1L, 0x9.a6133693a681011p-3L, 0xa.b68a6de8e077c6ep-4L, -0xf.c128c22b6efd051p-7L, -0x8.eae999d01b9a034p-12L, 0xa.ccfc441370efba9p-16L, -0xb.a158275d1138117p-25L, -0x8.fec1af179d61b9fp-38L, -0x0p+0L}; } if constexpr (order == 8) { return {0x0p+0L, 0xb.7c8d8fd8b7231c8p-1L, -0xc.7f788f402ce76dp+2L, 0xc.04e222239546c21p+4L, -0xd.885f8486495a99bp+5L, 0xa.292c0c47b8a3474p+6L, -0xb.918d7e045e93b18p+6L, 0xb.d7c10b1561accb3p+6L, -0xc.11f4fc4c95acfe3p+6L, 0xb.7a5e09275bee17p+6L, -0x9.97948a925a7e40dp+6L, 0xe.c2b003e5c7d03a7p+5L, -0xa.cd9782bd3a72557p+5L, 0xe.244c7ff35b01e7fp+4L, -0x8.0d825dae3f27671p+4L, 0x8.772a8795a37d803p+3L, -0xf.8a4c14b8024c883p+1L, 0x9.0a09b4c73e78daep+0L, -0x8.f1ac1486f9ce578p-5L, -0xa.a7893ccbc864ac9p-4L, 0x8.ef6e9487c83fc69p-6L, 0x9.5c6d9c2eb77580cp-13L, -0xb.e6b3eb04cc4c723p-15L, 0xe.0bac121eb7b4789p-24L, 0xa.daa017df46dbf37p-36L, -0x0p+0L}; } if constexpr (order == 9) { - return {0x0p+0L, 0xf.007900e54da3df6p-2L, -0x8.4d56ac47e370e97p+2L, 0x8.041d8f69d6e8efep+4L, -0x8.d80b1cf8ad238cbp+5L, 0xc.73a62da0ada64c1p+5L, -0xc.83d42c6d0cc6daep+5L, 0xb.4725340a1f5b14p+5L, -0xb.42eff2cf5ca79c7p+5L, 0xa.c979cdb9024d1b7p+5L, -0x8.4ac4d67acbfab3fp+5L, 0xb.2c5b3622696cf85p+4L, -0xf.c8638c40548b2c6p+3L, 0xa.4d4d3804f95933ep+3L, -0xa.2099c6552967d07p+2L, 0x8.5bd9514bfef0a5ep+1L, -0xe.cc1b958e3469fa9p-1L, 0xf.a1f60f951940304p-3L, 0xb.0b2dbbaaafe5407p-4L, -0xa.7c540b8dd847e5dp-4L, 0x9.33b41f49e95bb8cp-6L, -0xc.6ee3126a0ae46c7p-12L, -0xc.bce574a2d70819p-14L, 0xc.ab13d8c3fed8cb7p-23L, 0x9.c5e694361aef307p-34L, -0x0p+0L}; + return {0x0p+0L, 0xf.007900e54da3df6p-2L, -0x8.4d56ac47e370e97p+2L, 0x8.041d8f69d6e8efep+4L, -0x8.d80b1cf8ad238cbp+5L, 0xc.73a62da0ada64c1p+5L, -0xc.83d42c6d0cc6daep+5L, 0xb.4725340a1f5b14p+5L, -0xb.42eff2cf5ca79c7p+5L, 0xa.c979cdb9024d1b7p+5L, -0x8.4ac4d67acbfab3fp+5L, 0xb.2c5b3622696cf85p+4L, -0xf.c8638c40548b2c6p+3L, 0xa.4d4d3804f95933ep+3L, -0xa.2099c6552967d07p+2L, 0x8.5bd9514bfef0a5ep+1L, -0xe.cc1b958e3469fa9p-1L, 0xf.a1f60f951940304p-3L, 0xb.0b2dbbaaafe5407p-4L, -0xa.7c540b8dd847e5dp-4L, 0x9.33b41f49e95bb8cp-6L, -0xc.6ee3126a0ae46c7p-12L, -0xc.bce574a2d70819p-14L, 0xc.ab13d8c3fed8cb7p-23L, 0x9.c5e694361aef307p-34L, 0x0p+0L}; } if constexpr (order == 10) { return {0x0p+0L, 0xe.ee4c8a5c7e71374p-3L, -0x8.553537f23a4ffcdp+1L, 0xf.fe98518788271d7p+2L, -0x8.83b5deda67ba93ep+4L, 0xa.d98a7eadec21394p+4L, -0x8.af314d1783d59d9p+4L, 0xb.9f66d53ede688c9p+3L, -0xb.f524c8940d401f5p+3L, 0xc.97f2843849db0a7p+3L, -0xf.28674361f651857p+2L, 0x9.1ff1b672928682ep+1L, -0x8.8c1d2d63a31b528p+0L, 0x9.92ed38b0b3c3d8dp-1L, 0xd.adc9e9bf5bc7971p-1L, -0xb.0ba6614954bbf44p+0L, 0xd.c73c70d4d6d2496p-1L, -0xf.fe372a784dc531cp-2L, 0xc.03da1e919f0994ap-2L, -0xc.a4f7ff27eaf885bp-3L, 0xc.ce3837719e99949p-5L, -0xc.5a12af5955a96fbp-9L, -0x9.2fdef25707148aap-11L, 0xd.17fead2c51f312dp-20L, 0xa.112f2eb3eb54818p-30L, 0x0p+0L}; } if constexpr (order == 11) { - return {0x0p+0L, 0xc.12aaf87e5340e4ep-5L, -0xd.8845625eceaef48p-2L, 0xd.1d7cfaf14299ea2p+0L, -0xe.4971534df5f5093p+1L, 0x9.9b0ab78cd1f558dp+2L, -0x8.aa690629969becdp+2L, 0xd.7cae353f81a7b93p+1L, -0xd.1c176a1afc76911p+1L, 0xd.2d2bedacdb3df28p+1L, -0xa.42c3deda3c082c7p+1L, 0xe.328cd8e6d949737p+0L, -0xb.22036e2ef671076p+0L, 0x8.2d06d1543ed7f3cp+0L, -0x9.a03151dfbe084ep-1L, 0xb.2d1993de78d60e7p-2L, -0xd.93e7bd5a4df1be7p-3L, 0xd.2dee38c95ce1d1p-4L, -0xa.b8d614c1fc2f1d3p-5L, 0x9.8bb3c0be356f62ap-6L, -0xc.8279a48dfb4e393p-8L, 0x8.772798b1faafa2dp-11L, 0x9.2c278f9b5a1f3dep-13L, -0x9.b9e7ac2601f7483p-20L, -0xe.db05034619bbe3ap-30L, 0x0p+0L}; + return {0x0p+0L, 0xc.12aaf87e5340e4ep-5L, -0xd.8845625eceaef48p-2L, 0xd.1d7cfaf14299ea2p+0L, -0xe.4971534df5f5093p+1L, 0x9.9b0ab78cd1f558dp+2L, -0x8.aa690629969becdp+2L, 0xd.7cae353f81a7b93p+1L, -0xd.1c176a1afc76911p+1L, 0xd.2d2bedacdb3df28p+1L, -0xa.42c3deda3c082c7p+1L, 0xe.328cd8e6d949737p+0L, -0xb.22036e2ef671076p+0L, 0x8.2d06d1543ed7f3cp+0L, -0x9.a03151dfbe084ep-1L, 0xb.2d1993de78d60e7p-2L, -0xd.93e7bd5a4df1be7p-3L, 0xd.2dee38c95ce1d1p-4L, -0xa.b8d614c1fc2f1d3p-5L, 0x9.8bb3c0be356f62ap-6L, -0xc.8279a48dfb4e393p-8L, 0x8.772798b1faafa2dp-11L, 0x9.2c278f9b5a1f3dep-13L, -0x9.b9e7ac2601f7483p-20L, -0xe.db05034619bbe3ap-30L, -0x0p+0L}; } if constexpr (order == 12) { return {0x0p+0L, 0xc.6dd81fd69617fa7p-8L, -0xd.f5ee2e9d91c88f7p-5L, 0xd.75bd2f51082950ep-3L, -0xe.5cc28a9169055e6p-2L, 0x9.205facc38dccbfep-1L, -0xe.55be78f6a9bf069p-2L, 0x8.fea2a1d2fec658fp-2L, -0x8.e74ba260e4bab6fp-2L, 0x9.dd5845ebb1a25a2p-2L, -0xe.2073da73baab7afp-3L, 0xf.f56e463e743d47ep-4L, -0xd.321d23ec25a6d38p-4L, 0xa.a1dcb270781d1d4p-4L, -0xa.bbd52bb7fd3277ep-5L, 0xa.4cfb7bd4bd115e9p-6L, -0xe.ad0a8a8dc80b1aep-7L, 0xe.a62dd6da3383b8ap-8L, -0x8.4a7a90ab486d843p-9L, 0xe.684937dcf0a13c9p-11L, -0xd.9048e1639ee817cp-12L, 0xf.ee39a876fd6e928p-16L, 0xa.578ba89fe1d43b5p-16L, -0xf.e8ccd1e77d18dbbp-22L, -0xb.fd203720f6b2eddp-30L, 0x0p+0L}; @@ -1203,60 +1456,101 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.749078c0867a9a724454443e786p-9Q, 0x1.8ae6a79b4938fbd909b199343627p-3Q, 0x1.d008898983913d9bf1d194ac98ebp-1Q, -0x1.20e16d5539e3f25296b1c6880b7dp-4Q, -0x1.f688bd1280c70194203f74426669p-5Q, 0x1.2fca4301354a4e285e82fc4b6146p-5Q, -0x1.505c64431d7a6f1e36954a7c7627p-12Q, -0x1.0145189baf0142f2a8862b8be414p-6Q, 0x1.c908becee5a6a6fcccc95605353cp-7Q, -0x1.beac12be1e7de0939dd15f03161ap-8Q, 0x1.0006a916adee342c6b2792c6bd71p-9Q, -0x1.d4cc286b09e13557f3e87a0f9cap-13Q, -0x1.a08b65bbb598677114fddb7b659bp-15Q, 0x1.5f413ab3a7eb94dcb396b2657e81p-16Q, -0x1.5c34d16af592037a11107a487af4p-20Q, -0x1.2dc4454eebde3379c7645c4ba813p-21Q, 0x1.74f33a2ccbc6518fcdedc7d5a964p-24Q, 0x1.ddb5df0a412fd407d061c573b7b3p-29Q, -0x1.07969b3a158bd160a5cdad0ecd8ep-32Q, 0x1.2c5958b74836c10a9059d0bfc5aap-38Q, 0x1.52fae6e83091fa686190e11a0ab7p-45Q, -0x1.d83da475a639c307966abb294442p-53Q, 0x1.1342e56840ec19da921d2c329457p-65Q, 0x1.aa25edf8f64fee132e1b309309a8p-86Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.749078c0867a9a724454443e75a7p-9Q, 0x1.8ae6a79b4938fbd909b199343609p-3Q, 0x1.d008898983913d9bf1d194ac98f7p-1Q, -0x1.20e16d5539e3f25296b1c6880b53p-4Q, -0x1.f688bd1280c70194203f744266d5p-5Q, 0x1.2fca4301354a4e285e82fc4b6183p-5Q, -0x1.505c64431d7a6f1e36954a7c80cp-12Q, -0x1.0145189baf0142f2a8862b8be415p-6Q, 0x1.c908becee5a6a6fcccc95605355fp-7Q, -0x1.beac12be1e7de0939dd15f031644p-8Q, 0x1.0006a916adee342c6b2792c6bd7ep-9Q, -0x1.d4cc286b09e13557f3e87a0f9caep-13Q, -0x1.a08b65bbb598677114fddb7b661ep-15Q, 0x1.5f413ab3a7eb94dcb396b2657edap-16Q, -0x1.5c34d16af592037a11107a487b39p-20Q, -0x1.2dc4454eebde3379c7645c4ba87ep-21Q, 0x1.74f33a2ccbc6518fcdedc7d5aa01p-24Q, 0x1.ddb5df0a412fd407d061c573b81ep-29Q, -0x1.07969b3a158bd160a5cdad0ece81p-32Q, 0x1.2c5958b74836c10a9059d0bfc767p-38Q, 0x1.52fae6e83091fa686190e11a0d2cp-45Q, -0x1.d83da475a639c307966abb294b63p-53Q, 0x1.1342e56840ec19da921d2c329c6fp-65Q, 0x1.aa25edf8f64fee132e1b30933b5p-86Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.23923550f457ca7814b0bb3fd63cp-6Q, 0x1.0c0767795d12ae5d156ec5cf442dp-1Q, 0x1.3373be839b47c40b1d36ec3e479ap-2Q, -0x1.856d7e6b6468c2deff8342e75bafp+0Q, 0x1.22d30ac28dd9c9a5de5413538cdcp+0Q, -0x1.72e38df054a23a8a5ebabc499011p-1Q, 0x1.8e439b194a1c16626ebcbea59c97p-2Q, -0x1.3bc2524066e83eb2d5b3ff97e1f2p-3Q, 0x1.1bc8f6e41059663daa79bf4a8b49p-5Q, 0x1.2884461caa1e3207b6de1334aafbp-11Q, -0x1.db22a9804aa1133069d05b96cb79p-10Q, -0x1.3482dca87f01c45e946a258c3e3ep-11Q, 0x1.3285223dae55992a1d57ada1536cp-11Q, -0x1.bbf1c4306d1a37f02d18135ce361p-14Q, -0x1.17497a4dcd44ffdc92c6ebd1a07dp-16Q, 0x1.bebec0cbd1f99371a7867cbe4001p-18Q, -0x1.bc40d833ef3598561d72cdf89c2bp-22Q, 0x1.6454c6cebdf97f43adbbdee1eef5p-26Q, 0x1.5fce040bf0fa22a0bb7f52a52ec5p-29Q, -0x1.1241493325c926f92e656210ed45p-33Q, -0x1.ce70ab06ee7eb593175a3e65f70bp-41Q, 0x1.8616f674ef405eeabf053da9c793p-48Q, -0x1.7b38ad7c07a3a058098173d3a941p-60Q, -0x1.258ba4702de85ac45e001504a5c3p-79Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.23923550f457ca7814b0bb3fd653p-6Q, 0x1.0c0767795d12ae5d156ec5cf4423p-1Q, 0x1.3373be839b47c40b1d36ec3e47ecp-2Q, -0x1.856d7e6b6468c2deff8342e75baep+0Q, 0x1.22d30ac28dd9c9a5de5413538cd2p+0Q, -0x1.72e38df054a23a8a5ebabc499005p-1Q, 0x1.8e439b194a1c16626ebcbea59c81p-2Q, -0x1.3bc2524066e83eb2d5b3ff97e1edp-3Q, 0x1.1bc8f6e41059663daa79bf4a8b55p-5Q, 0x1.2884461caa1e3207b6de1334a7c9p-11Q, -0x1.db22a9804aa1133069d05b96cb0fp-10Q, -0x1.3482dca87f01c45e946a258c3e06p-11Q, 0x1.3285223dae55992a1d57ada1533cp-11Q, -0x1.bbf1c4306d1a37f02d18135ce323p-14Q, -0x1.17497a4dcd44ffdc92c6ebd1a068p-16Q, 0x1.bebec0cbd1f99371a7867cbe3fbap-18Q, -0x1.bc40d833ef3598561d72cdf89bb4p-22Q, 0x1.6454c6cebdf97f43adbbdee1eeb8p-26Q, 0x1.5fce040bf0fa22a0bb7f52a52e7bp-29Q, -0x1.1241493325c926f92e656210ed16p-33Q, -0x1.ce70ab06ee7eb593175a3e65f68ep-41Q, 0x1.8616f674ef405eeabf053da9c72dp-48Q, -0x1.7b38ad7c07a3a058098173d3a8bcp-60Q, -0x1.258ba4702de85ac45e001504a52p-79Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.7e9e99d93265e1ecb27f1a82e40ep-4Q, 0x1.e81e73bf7d4e6759d9f3db7612c7p-1Q, -0x1.368292c7be10e513188a104c5cc1p+1Q, 0x1.a1c192a939b9674ffcca9b2f1f92p+0Q, -0x1.58e6f9045a40dd2a472104dd130ep-2Q, 0x1.2f82100ba4f2879faa0ab73165e9p-2Q, -0x1.f8fd9be6cc910f763e95aa8ab1d7p-2Q, 0x1.017de77081fc30f9ad09eddaf4ddp-1Q, -0x1.5831ad14642112326c714ae42502p-2Q, 0x1.30d718554c4cabcfafc1434f8aebp-3Q, -0x1.30a6075105b3aa4d5336fc195157p-5Q, -0x1.632f9e9eb99fc711faf42ce1fdf8p-11Q, 0x1.1cbed37ba4dbd96c225d81054e98p-8Q, -0x1.77d86fa7164bfc8c126a64816b23p-10Q, 0x1.50ec238da00966f5e3d28fc92775p-14Q, 0x1.f99c3b6dd2e633388ada35d1c02cp-15Q, -0x1.8453f2cbc2d996b7775a123e93afp-17Q, -0x1.b4056601f4bff8b5e7d36857ce88p-23Q, 0x1.4c2776a5f116e1d85dd046bd9771p-24Q, -0x1.287daf168a219aa1132a37934623p-29Q, -0x1.b00a66e2af603b8210a104b461a3p-36Q, 0x1.401eb1fad689de068ef9a337dccp-42Q, -0x1.71528144e6954a34804ddc8b69bap-54Q, -0x1.1de10823e626bbef4adf3610d3cbp-72Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.7e9e99d93265e1ecb27f1a82e385p-4Q, 0x1.e81e73bf7d4e6759d9f3db761257p-1Q, -0x1.368292c7be10e513188a104c5c4ap+1Q, 0x1.a1c192a939b9674ffcca9b2f1e48p+0Q, -0x1.58e6f9045a40dd2a472104dd0f2ep-2Q, 0x1.2f82100ba4f2879faa0ab7316342p-2Q, -0x1.f8fd9be6cc910f763e95aa8aafdap-2Q, 0x1.017de77081fc30f9ad09eddaf43dp-1Q, -0x1.5831ad14642112326c714ae42463p-2Q, 0x1.30d718554c4cabcfafc1434f8a7fp-3Q, -0x1.30a6075105b3aa4d5336fc1950e8p-5Q, -0x1.632f9e9eb99fc711faf42ce203b1p-11Q, 0x1.1cbed37ba4dbd96c225d81054e88p-8Q, -0x1.77d86fa7164bfc8c126a64816ac4p-10Q, 0x1.50ec238da00966f5e3d28fc9265ep-14Q, 0x1.f99c3b6dd2e633388ada35d1bfe8p-15Q, -0x1.8453f2cbc2d996b7775a123e9384p-17Q, -0x1.b4056601f4bff8b5e7d36857cb2ap-23Q, 0x1.4c2776a5f116e1d85dd046bd9786p-24Q, -0x1.287daf168a219aa1132a37934711p-29Q, -0x1.b00a66e2af603b8210a104b463bdp-36Q, 0x1.401eb1fad689de068ef9a337dfddp-42Q, -0x1.71528144e6954a34804ddc8b7672p-54Q, -0x1.1de10823e626bbef4adf3610f4fep-72Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.95e033565cd465e59fc64a848c0ep-2Q, 0x1.e7908dd5753c97550b1b562a1b99p-3Q, -0x1.293799fcf6c8da1f93fe2d057409p+2Q, 0x1.36cc467b08bf7d8a89d5be8f8643p+3Q, -0x1.4335983e135774c5e5156a450a68p+3Q, 0x1.9c4d14b5414867b3e2c99a218f0bp+2Q, -0x1.ef81d85b23a01ac83af86d64ce2ep+0Q, -0x1.2378e73c6b10a2f7957b04476802p+0Q, 0x1.c6e27151761e3e586f540356142cp+0Q, -0x1.c857e67243153a965a648f8e46c8p-1Q, 0x1.3531afa42b77f4c754018d3dfbb2p-8Q, 0x1.05f57c1a6464d742d9d2e202c63cp-2Q, -0x1.38a2db882124dfc4e44179ad4f8p-3Q, 0x1.35c4a5041d9b9456d2520e65a344p-5Q, -0x1.fddc3c9f813d6aef1f4f22d0d6c7p-14Q, -0x1.2653a0321997d1fa4ad992782112p-9Q, 0x1.ec5d6f7ab50c177dc61e0a187538p-12Q, -0x1.dc01f8633f4c61396f200866219ep-17Q, -0x1.379717b64ca37d0f86a74f66252ap-18Q, 0x1.7e5cfdc9a1b17dce328c7c0b396fp-23Q, 0x1.a124166c5786174e1b984a58659ap-29Q, -0x1.4171311c3a7b2623f4df8ab80088p-35Q, 0x1.65f402b77f1ab227d7a791607b4dp-46Q, 0x1.15123cc4efb60d3af1736012c799p-63Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.95e033565cd465e59fc64a849ff5p-2Q, 0x1.e7908dd5753c97550b1b562a02c1p-3Q, -0x1.293799fcf6c8da1f93fe2d057e3ap+2Q, 0x1.36cc467b08bf7d8a89d5be8f934fp+3Q, -0x1.4335983e135774c5e5156a45190ap+3Q, 0x1.9c4d14b5414867b3e2c99a21a031p+2Q, -0x1.ef81d85b23a01ac83af86d64d1abp+0Q, -0x1.2378e73c6b10a2f7957b04478d3fp+0Q, 0x1.c6e27151761e3e586f5403563b06p+0Q, -0x1.c857e67243153a965a648f8e6a77p-1Q, 0x1.3531afa42b77f4c754018d3dff11p-8Q, 0x1.05f57c1a6464d742d9d2e202da9bp-2Q, -0x1.38a2db882124dfc4e44179ad6816p-3Q, 0x1.35c4a5041d9b9456d2520e65bc23p-5Q, -0x1.fddc3c9f813d6aef1f4f22d0ffb3p-14Q, -0x1.2653a0321997d1fa4ad992783a03p-9Q, 0x1.ec5d6f7ab50c177dc61e0a189fcdp-12Q, -0x1.dc01f8633f4c61396f200866480ap-17Q, -0x1.379717b64ca37d0f86a74f664124p-18Q, 0x1.7e5cfdc9a1b17dce328c7c0b5cf9p-23Q, 0x1.a124166c5786174e1b984a588c59p-29Q, -0x1.4171311c3a7b2623f4df8ab8200ep-35Q, 0x1.65f402b77f1ab227d7a791609ed8p-46Q, 0x1.15123cc4efb60d3af1736012e615p-63Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.4c5d516dd5340d0879832abec56ap+0Q, -0x1.5d2571cda5543923016a3601781dp+2Q, 0x1.24b0f03522629e31e5a0ddf8fe8fp+3Q, -0x1.39e0f8d13e8db1f029ce6257e806p+3Q, 0x1.f006cc927be5328f1a33d6ae0a72p+3Q, -0x1.0ce2ffa4646117df99ed92ff7f71p+5Q, 0x1.b8b8afcf323d00e8ad39d1cbe81p+5Q, -0x1.e6925570e3f510211d732b909262p+5Q, 0x1.503102590c0b7b7ae2742f430edfp+5Q, -0x1.6d86add093f074bc432a452a8a23p+3Q, -0x1.35b5dc1025f2d34a60aa7bf986d8p+3Q, 0x1.a6237c764b4a28340b848880c532p+3Q, -0x1.cda455c3ae3929d25c3c5a3186e9p+2Q, 0x1.d5a02bb93708a320124acceeba3bp+0Q, 0x1.ecd4c4adc075fe2457753c0a3227p-5Q, -0x1.660ee59df078b432fb4f889aa837p-3Q, 0x1.5158e51b27e5dbfe89f577f955e5p-5Q, -0x1.73814bfd57b681fa89fa6df49afcp-10Q, -0x1.23460c48f636fa706d007acab6f4p-11Q, 0x1.fa353cdebaaaaa09ad0c40e91089p-16Q, 0x1.19c5738584246e6431d3352c0155p-21Q, -0x1.4bb4308ed51fff3108f30cb6a721p-27Q, 0x1.fc9a1f4f09858f536f1a575ceb92p-38Q, 0x1.89a8b7b9d28d1d71597812a9e85fp-54Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.4c5d516dd5340d0879832abfae77p+0Q, -0x1.5d2571cda5543923016a360261d3p+2Q, 0x1.24b0f03522629e31e5a0ddf9b0acp+3Q, -0x1.39e0f8d13e8db1f029ce62587cecp+3Q, 0x1.f006cc927be5328f1a33d6aed069p+3Q, -0x1.0ce2ffa4646117df99ed92fff69cp+5Q, 0x1.b8b8afcf323d00e8ad39d1ccb61dp+5Q, -0x1.e6925570e3f510211d732b9179c8p+5Q, 0x1.503102590c0b7b7ae2742f43b1bp+5Q, -0x1.6d86add093f074bc432a452b5189p+3Q, -0x1.35b5dc1025f2d34a60aa7bf9f93dp+3Q, 0x1.a6237c764b4a28340b8488817371p+3Q, -0x1.cda455c3ae3929d25c3c5a324857p+2Q, 0x1.d5a02bb93708a320124accef7fd1p+0Q, 0x1.ecd4c4adc075fe2457753c0ae29ap-5Q, -0x1.660ee59df078b432fb4f889b38bfp-3Q, 0x1.5158e51b27e5dbfe89f577f9dcaep-5Q, -0x1.73814bfd57b681fa89fa6df52a98p-10Q, -0x1.23460c48f636fa706d007acb283p-11Q, 0x1.fa353cdebaaaaa09ad0c40e9cfcp-16Q, 0x1.19c5738584246e6431d3352c6ae1p-21Q, -0x1.4bb4308ed51fff3108f30cb71f7ep-27Q, 0x1.fc9a1f4f09858f536f1a575d9e29p-38Q, 0x1.89a8b7b9d28d1d71597812aa68c7p-54Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.a35157d8dba56b3359c55e1b2f1bp+1Q, -0x1.5a1bc35a1cc0dbb69c71ae20ac28p+4Q, 0x1.fa0a0878d9a933860f512013ce09p+5Q, -0x1.a68f6523a82701663e04e44e02c9p+6Q, 0x1.98403a971e63162a02dd9331873fp+6Q, -0x1.03810e60e02049d57e6cca7b3393p+5Q, -0x1.14faaec76846550eede585da319ep+6Q, 0x1.3d735b94c105436aa6c6acd1ae46p+7Q, -0x1.cdbd7de801407d716cbc3884161p+7Q, 0x1.20043470ad456af43bde8d96fdaap+8Q, -0x1.2591e882d85cd18b0dca9797ee6p+8Q, 0x1.b621996a63c17e6687cb0b211602p+7Q, -0x1.a875ba068d8449d487f82dc4bc08p+6Q, 0x1.85c7d166f26b7783d793e4e78c82p+4Q, 0x1.1c0e0d6b929f95b9e528989abb17p+2Q, -0x1.36efc345fd87e7f12a7cd8f187eap+2Q, 0x1.3e3f5c2c93c347939cad28f604bbp+0Q, -0x1.bffc3922a312894449dea0a83571p-5Q, -0x1.75f52c4bce3944c6d40bd8ed1f5ap-6Q, 0x1.dea5b49d2b299f2f3407a986e912p-10Q, 0x1.10aa3eff5f8aac0902d8bf656d56p-15Q, -0x1.ea6ed6c321e753c1b3e9237c4183p-21Q, 0x1.089ab261bfe1c8b7f19aebf544d2p-30Q, 0x1.9990a3735f2b8137827c0403494ap-46Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.a35157d8dba56b3359c55dbb3245p+1Q, -0x1.5a1bc35a1cc0dbb69c71add31e17p+4Q, 0x1.fa0a0878d9a933860f511fa37af4p+5Q, -0x1.a68f6523a82701663e04e3ed3779p+6Q, 0x1.98403a971e63162a02dd92c33da9p+6Q, -0x1.03810e60e02049d57e6cc9d05d6p+5Q, -0x1.14faaec76846550eede58601f0cdp+6Q, 0x1.3d735b94c105436aa6c6accd08c9p+7Q, -0x1.cdbd7de801407d716cbc38649987p+7Q, 0x1.20043470ad456af43bde8d7a0984p+8Q, -0x1.2591e882d85cd18b0dca9775a589p+8Q, 0x1.b621996a63c17e6687cb0aeb2864p+7Q, -0x1.a875ba068d8449d487f82d8f98a2p+6Q, 0x1.85c7d166f26b7783d793e4b535e5p+4Q, 0x1.1c0e0d6b929f95b9e528987efc33p+2Q, -0x1.36efc345fd87e7f12a7cd8cf55f7p+2Q, 0x1.3e3f5c2c93c347939cad28d35ff2p+0Q, -0x1.bffc3922a312894449dea079023bp-5Q, -0x1.75f52c4bce3944c6d40bd8c68e83p-6Q, 0x1.dea5b49d2b299f2f3407a959506bp-10Q, 0x1.10aa3eff5f8aac0902d8bf4b6addp-15Q, -0x1.ea6ed6c321e753c1b3e92351b813p-21Q, 0x1.089ab261bfe1c8b7f19aebdff953p-30Q, 0x1.9990a3735f2b8137827c03e7b5fp-46Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.5d159c98a090a206b1f5a4e9463bp+2Q, -0x1.54873e7e1b3d210625d27844421bp+5Q, 0x1.2c245e185ac8b14c7baac4549349p+7Q, -0x1.416f5cc6c22c1fc04eedaa366dc1p+8Q, 0x1.e67e2b7f933044475571e6b73738p+8Q, -0x1.298ee57db6ed5fd4bacad132e624p+9Q, 0x1.48ee3d90a4e34a8f4d18f9ebf69p+9Q, -0x1.4e6b4521eb7a56c1ef7579e251acp+9Q, 0x1.2782e95d7bf9f5fc360d3847dd8p+9Q, -0x1.bb493883e544d446bc2b8c57d25fp+8Q, 0x1.25dfd4b9fa45afe8f2d50b1eccc2p+8Q, -0x1.575e0c206b7ee6818931b6994d6ep+7Q, 0x1.1c028f2725fce675841ea64b2ffp+6Q, -0x1.08a1fe0ac6819f96e8258ae14398p+2Q, -0x1.12ed1d6ca77301d9871c8664703fp+4Q, 0x1.66791e904ad3b41e47b4403dcaadp+3Q, -0x1.7aa9733036515afd48134b63faf5p+1Q, 0x1.41600caa02955d88aadf0943297p-3Q, 0x1.275514f436a31e564b7d01e0e908p-4Q, -0x1.29373f56ac1095884f483fc367f8p-7Q, -0x1.51ea7d9f345040b9bbf6801a6296p-13Q, 0x1.deb156b08b87ef0592d66c2ead34p-18Q, -0x1.6e30fae8c34ed8366ddfb109de2fp-27Q, -0x1.1b57abb7d7f1ba81ca336dfebef5p-41Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.5d159c98a090a206b1f5a487328bp+2Q, -0x1.54873e7e1b3d210625d277e6898dp+5Q, 0x1.2c245e185ac8b14c7baac4033f4ap+7Q, -0x1.416f5cc6c22c1fc04eeda9dfb493p+8Q, 0x1.e67e2b7f933044475571e632011ap+8Q, -0x1.298ee57db6ed5fd4bacad0de9695p+9Q, 0x1.48ee3d90a4e34a8f4d18f98b7344p+9Q, -0x1.4e6b4521eb7a56c1ef75797e43fdp+9Q, 0x1.2782e95d7bf9f5fc360d37ee013bp+9Q, -0x1.bb493883e544d446bc2b8bcc693p+8Q, 0x1.25dfd4b9fa45afe8f2d50abdb77ep+8Q, -0x1.575e0c206b7ee6818931b6231d56p+7Q, 0x1.1c028f2725fce675841ea5e425e4p+6Q, -0x1.08a1fe0ac6819f96e8258a0368bp+2Q, -0x1.12ed1d6ca77301d9871c862435c4p+4Q, 0x1.66791e904ad3b41e47b43fe289f8p+3Q, -0x1.7aa9733036515afd48134b03fe32p+1Q, 0x1.41600caa02955d88aadf08f58823p-3Q, 0x1.275514f436a31e564b7d019a87cbp-4Q, -0x1.29373f56ac1095884f483f83febcp-7Q, -0x1.51ea7d9f345040b9bbf67fd2c9c4p-13Q, 0x1.deb156b08b87ef0592d66bd4c9c7p-18Q, -0x1.6e30fae8c34ed8366ddfb0cc8561p-27Q, -0x1.1b57abb7d7f1ba81ca336dd9e4d6p-41Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.d4fe27a0835ae1a04e083919e159p+2Q, -0x1.ecb0f32ca76fb494d571b92b6ab8p+5Q, 0x1.c6da62a20cd0a85f327433229c8ap+7Q, -0x1.e3622dd5ba05d80a963a6735beb4p+8Q, 0x1.49508717a90e836846bfeeb5b43bp+9Q, -0x1.3d934aacf56d0a27027f0d4c671dp+9Q, 0x1.068600d74e1c90df9e5944f06e21p+9Q, -0x1.bb4eb52dbc23c8aa9dac22db8fdep+8Q, 0x1.2c2d3c048caae8b4e7ebda4b0128p+8Q, -0x1.6a6f07f5d07dd28cc713b1beaa3ap+5Q, -0x1.48c0f7b3bed9dd4e2bcfa51c5127p+7Q, 0x1.bce28601020e5546efe486219835p+7Q, -0x1.9e035ea535c3aebdf12725979bb8p+7Q, 0x1.737017c34f7deef2722c93e161f4p+7Q, -0x1.15bd065f2789c251ed52811c0835p+7Q, 0x1.1609d2e86de1f46bc02dc1f1561dp+6Q, -0x1.30b382548235fc08ce2a69131576p+4Q, 0x1.34c266d274d020226722008d15aap+0Q, 0x1.56d14dbd1c0ef8dc071f15458559p-1Q, -0x1.f82518456ddfa0a1ea7fa3e5d12cp-4Q, -0x1.1d5d333a03734067f69cd7ef01cbp-9Q, 0x1.599f88826e1df7529e2526edcc77p-13Q, -0x1.742b04eba227022dc278410d55cbp-22Q, -0x1.1fd835e2f3ac373e68a16573044bp-35Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.d4fe27a0835ae1a04e0830be24cp+2Q, -0x1.ecb0f32ca76fb494d571b0a3e338p+5Q, 0x1.c6da62a20cd0a85f32742b3dd231p+7Q, -0x1.e3622dd5ba05d80a963a5e3e0d7dp+8Q, 0x1.49508717a90e836846bfe76665d8p+9Q, -0x1.3d934aacf56d0a27027f03a0039p+9Q, 0x1.068600d74e1c90df9e5939a69755p+9Q, -0x1.bb4eb52dbc23c8aa9dac0b1ae5b9p+8Q, 0x1.2c2d3c048caae8b4e7ebc3a10a9fp+8Q, -0x1.6a6f07f5d07dd28cc71310327c39p+5Q, -0x1.48c0f7b3bed9dd4e2bcfc6df9159p+7Q, 0x1.bce28601020e5546efe49f4f2facp+7Q, -0x1.9e035ea535c3aebdf12735df11cep+7Q, 0x1.737017c34f7deef2722c9d811907p+7Q, -0x1.15bd065f2789c251ed52867c6e81p+7Q, 0x1.1609d2e86de1f46bc02dc6e0a8fcp+6Q, -0x1.30b382548235fc08ce2a6ea99e65p+4Q, 0x1.34c266d274d020226722064f6a4ap+0Q, 0x1.56d14dbd1c0ef8dc071f1d5be26fp-1Q, -0x1.f82518456ddfa0a1ea7fb11fa704p-4Q, -0x1.1d5d333a03734067f69cdf063e2dp-9Q, 0x1.599f88826e1df7529e25322303e3p-13Q, -0x1.742b04eba227022dc2784e1aeb19p-22Q, -0x1.1fd835e2f3ac373e68a1719919f7p-35Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.6f91b1fb16e463903f242c426455p+2Q, -0x1.8fef11e8059ceda062dec743d5bap+5Q, 0x1.809c444472a8d8415a2c8fcb90adp+7Q, -0x1.b10bf090c92b5336357d1404e2eap+8Q, 0x1.45258188f71468e863f93e44329ep+9Q, -0x1.7231afc08bd276307932c937c208p+9Q, 0x1.7af82162ac359965f69e88fff2d1p+9Q, -0x1.823e9f8992b59fc66e18911aea8bp+9Q, 0x1.6f4bc124eb7dc2e04c11ba39d8bp+9Q, -0x1.32f291524b4fc819caccda30ea8fp+9Q, 0x1.d856007cb8fa074ef08390247a6ep+8Q, -0x1.59b2f057a74e4aae3ebb655c3f1ep+8Q, 0x1.c4898ffe6b603cfd7a5fca3706d6p+7Q, -0x1.01b04bb5c7e4ece20624aa0d5e2cp+7Q, 0x1.0ee550f2b46fb0067dbfd6b593fep+6Q, -0x1.f149829700499105abd0a04d1745p+4Q, 0x1.21413698e7cf1b5b76cf6ac9da58p+3Q, -0x1.1e358290df39caefe5b55d7f88a9p-2Q, -0x1.54f12799790c9591a3724eefd6adp-1Q, 0x1.1dedd290f907f8d2a85301c5e1c1p-3Q, 0x1.2b8db385d6eeb017f6475d54698ap-10Q, -0x1.7cd67d6099898e46f355585388cap-12Q, 0x1.c1758243d6f68f111636a9a1e06bp-21Q, 0x1.5b5402fbe8db7e6e4a333c1f1c5ap-33Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.6f91b1fb16e463903f2417b8bc33p+2Q, -0x1.8fef11e8059ceda062deb12c9387p+5Q, 0x1.809c444472a8d8415a2c7a9afbefp+7Q, -0x1.b10bf090c92b5336357cfbd2f863p+8Q, 0x1.45258188f71468e863f92b55998cp+9Q, -0x1.7231afc08bd276307932b219a0cfp+9Q, 0x1.7af82162ac359965f69e6fcab693p+9Q, -0x1.823e9f8992b59fc66e1876f1aa68p+9Q, 0x1.6f4bc124eb7dc2e04c11a11579edp+9Q, -0x1.32f291524b4fc819caccc41f919dp+9Q, 0x1.d856007cb8fa074ef0836c00fb93p+8Q, -0x1.59b2f057a74e4aae3ebb4a35f68fp+8Q, 0x1.c4898ffe6b603cfd7a5fa627ad77p+7Q, -0x1.01b04bb5c7e4ece20624945e7d4ap+7Q, 0x1.0ee550f2b46fb0067dbfbe5f34b2p+6Q, -0x1.f149829700499105abd07323449cp+4Q, 0x1.21413698e7cf1b5b76cf50d81657p+3Q, -0x1.1e358290df39caefe5b52d405e07p-2Q, -0x1.54f12799790c9591a372397a1538p-1Q, 0x1.1dedd290f907f8d2a852f01bdfd7p-3Q, 0x1.2b8db385d6eeb017f64738645db6p-10Q, -0x1.7cd67d6099898e46f355480e2303p-12Q, 0x1.c1758243d6f68f11163695671c33p-21Q, 0x1.5b5402fbe8db7e6e4a3332e846cap-33Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.e00f201ca9b47bec13b3982152f1p+1Q, -0x1.09aad588fc6e1d2e5e31f5db6676p+5Q, 0x1.0083b1ed3add1dfc189aa41f7f2fp+7Q, -0x1.1b01639f15a47195db84399877bbp+8Q, 0x1.8e74c5b415b4c982c62a08a4c59cp+8Q, -0x1.907a858da198db5b4a86cd66130bp+8Q, 0x1.68e4a68143eb6280f782117761a4p+8Q, -0x1.685dfe59eb94f38e35f467a408e4p+8Q, 0x1.592f39b72049a36e7924da594eccp+8Q, -0x1.09589acf597f567d3772da9f9396p+8Q, 0x1.658b66c44d2d9f09118ad4461b1dp+7Q, -0x1.f90c71880a91658c0d9a077062e9p+6Q, 0x1.49a9a7009f2b267b39ba9598b5bfp+6Q, -0x1.441338caa52cfa0e2a27b3094033p+5Q, 0x1.0b7b2a297fde14bc6faf1e5cad3dp+4Q, -0x1.d98372b1c68d3f52be822d4ad9e1p+2Q, 0x1.f43ec1f2a32806088746b95241b7p+0Q, 0x1.6165b77555fca80d9c5c139ebf01p-1Q, -0x1.4f8a8171bb08fcb9ccd7e57b6a94p-1Q, 0x1.267683e93d2b771765dfb989358ep-3Q, -0x1.8ddc624d415c8d8d9889336c7b73p-9Q, -0x1.979cae945ae1031f8b5a50d00a19p-11Q, 0x1.95627b187fdb196e7b60f5dc529bp-20Q, 0x1.38bcd286c35de60d5fb4cabb4426p-31Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.e00f201ca9b47bec13b3bceeec35p+1Q, -0x1.09aad588fc6e1d2e5e320a1b6965p+5Q, 0x1.0083b1ed3add1dfc189ab7aaac2p+7Q, -0x1.1b01639f15a47195db844f5df4eap+8Q, 0x1.8e74c5b415b4c982c62a28306ab1p+8Q, -0x1.907a858da198db5b4a86eef21cd8p+8Q, 0x1.68e4a68143eb6280f78231820634p+8Q, -0x1.685dfe59eb94f38e35f487b91dc1p+8Q, 0x1.592f39b72049a36e7924f8b1defp+8Q, -0x1.09589acf597f567d3772f2b218afp+8Q, 0x1.658b66c44d2d9f09118af69ddd27p+7Q, -0x1.f90c71880a91658c0d9a38574dffp+6Q, 0x1.49a9a7009f2b267b39bab54a8a34p+6Q, -0x1.441338caa52cfa0e2a27d488fb3dp+5Q, 0x1.0b7b2a297fde14bc6faf3e06bf71p+4Q, -0x1.d98372b1c68d3f52be82670d6ee1p+2Q, 0x1.f43ec1f2a32806088746ff9dc715p+0Q, 0x1.6165b77555fca80d9c5c14948139p-1Q, -0x1.4f8a8171bb08fcb9ccd7f4688dddp-1Q, 0x1.267683e93d2b771765dfc5bfe73cp-3Q, -0x1.8ddc624d415c8d8d9889292068a5p-9Q, -0x1.979cae945ae1031f8b5a56752269p-11Q, 0x1.95627b187fdb196e7b60fd3122a7p-20Q, 0x1.38bcd286c35de60d5fb4c84a2f35p-31Q, 0x0p+0Q}; } if constexpr (order == 10) { - return {0x0p+0Q, 0x1.ddc9914b8fce26e89a350da83719p+0Q, -0x1.0aa6a6fe4749ff9a5341c601bbd1p+4Q, 0x1.ffd30a30f104e3ad2ade791fa75cp+5Q, -0x1.1076bbdb4cf7527cd039e9d87117p+7Q, 0x1.5b314fd5bd8427278ea135aa2326p+7Q, -0x1.15e629a2f07ab3b285fb777249b6p+7Q, 0x1.73ecdaa7dbcd11927e44fc6ec254p+6Q, -0x1.7ea4991281a803e96d95b15ddcdfp+6Q, 0x1.92fe5087093b614dba0fb9dcd31ep+6Q, -0x1.e50ce86c3eca30ad8c366d925665p+5Q, 0x1.23fe36ce5250d05c30083be13efbp+4Q, -0x1.1183a5ac74636a4f4f82e9e90688p+3Q, 0x1.325da71616787b1a97d0cf145facp+2Q, 0x1.b5b93d37eb78f2e235ca0e3287edp+2Q, -0x1.6174cc292a977e8769fbfe3294c1p+3Q, 0x1.b8e78e1a9ada492b4dd621bd0ceap+2Q, -0x1.ffc6e54f09b8a6376ab8ee388e04p+1Q, 0x1.807b43d233e13293cd8f064bc042p+1Q, -0x1.949effe4fd5f10b6f0bb08f4fc9cp+0Q, 0x1.99c706ee33d33292c4de096ca957p-2Q, -0x1.8b4255eb2ab52df5046967e93801p-6Q, -0x1.25fbde4ae0e29153ac7874faf054p-8Q, 0x1.a2ffd5a58a3e625ad5ba39971f6dp-17Q, 0x1.4225e5d67d6a903058f2d7206afep-27Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.ddc9914b8fce26e89a34c64d6d6p+0Q, -0x1.0aa6a6fe4749ff9a53419e5cb74fp+4Q, 0x1.ffd30a30f104e3ad2ade2b583021p+5Q, -0x1.1076bbdb4cf7527cd039bd2ee863p+7Q, 0x1.5b314fd5bd8427278ea0f14850c8p+7Q, -0x1.15e629a2f07ab3b285fb28d62142p+7Q, 0x1.73ecdaa7dbcd11927e445f4fc04ap+6Q, -0x1.7ea4991281a803e96d951a02ad23p+6Q, 0x1.92fe5087093b614dba0f2e58af18p+6Q, -0x1.e50ce86c3eca30ad8c357a5bc172p+5Q, 0x1.23fe36ce5250d05c3006a508171cp+4Q, -0x1.1183a5ac74636a4f4f8077863f2cp+3Q, 0x1.325da71616787b1a97cd6b487bbp+2Q, 0x1.b5b93d37eb78f2e235cc59568f84p+2Q, -0x1.6174cc292a977e8769fcc13572c1p+3Q, 0x1.b8e78e1a9ada492b4dd6fe85e7f5p+2Q, -0x1.ffc6e54f09b8a6376ab9c26e41bp+1Q, 0x1.807b43d233e13293cd8f6f610b94p+1Q, -0x1.949effe4fd5f10b6f0bb69f9fc41p+0Q, 0x1.99c706ee33d33292c4de755a9043p-2Q, -0x1.8b4255eb2ab52df50469eaf1f575p-6Q, -0x1.25fbde4ae0e29153ac78daabb6bap-8Q, 0x1.a2ffd5a58a3e625ad5baf547df1dp-17Q, 0x1.4225e5d67d6a903058f380dcef3ap-27Q, 0x0p+0Q}; } if constexpr (order == 11) { - return {0x0p+0Q, 0x1.82555f0fca681c9ced300e65470bp-2Q, -0x1.b108ac4bd9d5de90a612fd8cb482p+1Q, 0x1.a3af9f5e28533d44a21884894a43p+3Q, -0x1.c92e2a69bebea1255ad98c5c24f3p+4Q, 0x1.336156f19a3eab19184562b4b1e2p+5Q, -0x1.154d20c532d37d99d550b7ecda23p+5Q, 0x1.af95c6a7f034f7267500295c26p+4Q, -0x1.a382ed435f8ed2216764cfb7b5d9p+4Q, 0x1.a5a57db59b67be50825ea97be6b6p+4Q, -0x1.48587bdb4781058d98368c067205p+4Q, 0x1.c6519b1cdb292e6d292e55285478p+3Q, -0x1.64406dc5dece20ec3c4c5d654de5p+3Q, 0x1.05a0da2a87dafe77cb9a5835aad4p+3Q, -0x1.34062a3bf7c109c05654c02a04d6p+2Q, 0x1.65a3327bcf1ac1cee14ec461e42cp+1Q, -0x1.b27cf7ab49be37cde0f46d146d6bp+0Q, 0x1.a5bdc7192b9c3a20ece90c79e905p-1Q, -0x1.571ac2983f85e3a6dc62f787682cp-2Q, 0x1.31767817c6adec541d699bff90f4p-3Q, -0x1.904f3491bf69c7251d1b4755c9b7p-5Q, 0x1.0ee4f3163f55f45905e2e22beb7fp-8Q, 0x1.2584f1f36b43e7bbd83747f8e61dp-10Q, -0x1.373cf584c03ee906a072d01e3b91p-17Q, -0x1.db60a068c3377c744925f1488cc3p-27Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.82555f0fca681c9ced300bba3465p-2Q, -0x1.b108ac4bd9d5de90a612fa91bba4p+1Q, 0x1.a3af9f5e28533d44a218819eab18p+3Q, -0x1.c92e2a69bebea1255ad98910de81p+4Q, 0x1.336156f19a3eab19184560490c7ep+5Q, -0x1.154d20c532d37d99d550b554251fp+5Q, 0x1.af95c6a7f034f7267500247c3a39p+4Q, -0x1.a382ed435f8ed2216764cb0a372p+4Q, 0x1.a5a57db59b67be50825ea51ac179p+4Q, -0x1.48587bdb4781058d9836884c3b74p+4Q, 0x1.c6519b1cdb292e6d292e4f1f9c11p+3Q, -0x1.64406dc5dece20ec3c4c58b87407p+3Q, 0x1.05a0da2a87dafe77cb9a54ec8326p+3Q, -0x1.34062a3bf7c109c05654bbca487fp+2Q, 0x1.65a3327bcf1ac1cee14ebea4c8b6p+1Q, -0x1.b27cf7ab49be37cde0f46679310bp+0Q, 0x1.a5bdc7192b9c3a20ece9060c1ba9p-1Q, -0x1.571ac2983f85e3a6dc62f13fd384p-2Q, 0x1.31767817c6adec541d6996364d3fp-3Q, -0x1.904f3491bf69c7251d1b40c4f69ep-5Q, 0x1.0ee4f3163f55f45905e2ddfb93a4p-8Q, 0x1.2584f1f36b43e7bbd83744e7e8bep-10Q, -0x1.373cf584c03ee906a072cfcde9b5p-17Q, -0x1.db60a068c3377c744925f382f6d8p-27Q, 0x0p+0Q}; } if constexpr (order == 12) { - return {0x0p+0Q, 0x1.8dbb03fad2c2ff4e565f6c62d57bp-5Q, -0x1.bebdc5d3b23911ed14512acd7b2bp-2Q, 0x1.aeb7a5ea21052a1c43ba3ca04a5p+0Q, -0x1.cb9851522d20abcc6f87f81034c7p+1Q, 0x1.240bf59871b997fc41c938fde14cp+2Q, -0x1.cab7cf1ed537e0d17c3940a7425ap+1Q, 0x1.1fd4543a5fd8cb1e3fd20d0065e1p+1Q, -0x1.1ce9744c1c9756de9b809fd2555fp+1Q, 0x1.3bab08bd76344b447fe47700254dp+1Q, -0x1.c40e7b4e77556f5ef84483097e1fp+0Q, 0x1.feadc8c7ce87a8fc67e279160504p-1Q, -0x1.a643a47d84b4da70d0fb106ef69bp-1Q, 0x1.543b964e0f03a3a71ec48db92838p-1Q, -0x1.577aa576ffa64efb7d0e9e6dcc9cp-2Q, 0x1.499f6f7a97a22bd1178c8661fe5ap-3Q, -0x1.d5a15151b901635be5a32ca30fbbp-4Q, 0x1.d4c5badb46707713b03f6aa302e5p-5Q, -0x1.094f5215690db085443c45e218e9p-6Q, 0x1.cd0926fb9e142792dd84079eb378p-8Q, -0x1.b2091c2c73dd02f84cb37e5165a8p-9Q, 0x1.fdc7350edfadd24f5fb7a95b49b7p-13Q, 0x1.4af17513fc3a876960b7d297e5d9p-13Q, -0x1.fd199a3cefa31b76bcac2a313bc8p-19Q, -0x1.7fa406e41ed65db974ed33f4fc9ap-27Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.8dbb03fad2c2ff4e565f682fc387p-5Q, -0x1.bebdc5d3b23911ed145126163ba8p-2Q, 0x1.aeb7a5ea21052a1c43ba381385e3p+0Q, -0x1.cb9851522d20abcc6f87f331e722p+1Q, 0x1.240bf59871b997fc41c935dfbef9p+2Q, -0x1.cab7cf1ed537e0d17c393ba768f6p+1Q, 0x1.1fd4543a5fd8cb1e3fd209bf00ffp+1Q, -0x1.1ce9744c1c9756de9b809c9cc5acp+1Q, 0x1.3bab08bd76344b447fe47382a836p+1Q, -0x1.c40e7b4e77556f5ef8447dfa81f7p+0Q, 0x1.feadc8c7ce87a8fc67e2732ba34ap-1Q, -0x1.a643a47d84b4da70d0fb0b9b5ca8p-1Q, 0x1.543b964e0f03a3a71ec489e8760ap-1Q, -0x1.577aa576ffa64efb7d0e9a7c6b39p-2Q, 0x1.499f6f7a97a22bd1178c8279f046p-3Q, -0x1.d5a15151b901635be5a327439552p-4Q, 0x1.d4c5badb46707713b03f6550ccfep-5Q, -0x1.094f5215690db085443c42ab246bp-6Q, 0x1.cd0926fb9e142792dd84020c8a8bp-8Q, -0x1.b2091c2c73dd02f84cb3796bc045p-9Q, 0x1.fdc7350edfadd24f5fb7a32829d8p-13Q, 0x1.4af17513fc3a876960b7cf51425ap-13Q, -0x1.fd199a3cefa31b76bcac261239c5p-19Q, -0x1.7fa406e41ed65db974ed315201c3p-27Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00284244035743782127519159930736463030042947946254131969213976354467510363053"), boost::lexical_cast("0.192822751451924727108748766614170490721105824748184344362119332875866730512"), boost::lexical_cast("0.906315134083146106755137020807385959064705834685756457995503249677950870358"), boost::lexical_cast("-0.0705274840180374221915610791607848006698261142719333764196180010698909604538"), boost::lexical_cast("-0.0613444989030761396360783459458969916614040841601149181265363506895700420160"), boost::lexical_cast("0.0370837505994725874839940012509568535053053490011258542752097489994846693329"), boost::lexical_cast("-0.000320778756026535884610425312070842577961491118876729788288874469672772619704"), boost::lexical_cast("-0.0157025089563234832865197139394763898086519833544367931492178049759198251601"), boost::lexical_cast("0.0139475757294295802461692476281352659400468390363122309411246460077043752333"), boost::lexical_cast("-0.00681567628464027460217301387139126877075375129883170970027298157286875244869"), boost::lexical_cast("0.00195332349843711924749204998394665745432087229507798519434292885120009605048"), boost::lexical_cast("-0.000223540063730029960909841256853682353169363587803368909770156156719394426611"), boost::lexical_cast("-0.0000496559764237457326284532141943574549239549099813150646655995671938880681752"), boost::lexical_cast("0.0000209364176969584236982171560586653840498356590078330878290505590378499323774"), boost::lexical_cast("-0.00000129716962748088954003609480965237922709827072460629845757510745626169673818"), boost::lexical_cast("-0.000000562084247470879735315853190082825344794087023602714253342730484399850968357"), boost::lexical_cast("0.0000000868342133308330051357320365697488900304098597969798168765758761035694322405"), boost::lexical_cast("0.00000000347580087379308589607631387726211870849365444198721499394707227756978102834"), boost::lexical_cast("-0.000000000239732167823959290773335551055992800328912309750161986581372592222346479756"), boost::lexical_cast("0.00000000000426821614422438385039700233078195697508737137615415589129724808488001094500"), boost::lexical_cast("0.0000000000000376343496212373063319630027526057051194699346126249374743316989439186929308"), boost::lexical_cast("-0.000000000000000204801796486955545541962476062112026383522552669629082548790846826338899265"), boost::lexical_cast("0.0000000000000000000291444251494672161342962713547400277611484048996443216117012112680095659149"), boost::lexical_cast("0.0000000000000000000000000215149840106709278896741979798565795657829474738608046886706233060495029891"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0177960892359059092368449533300753498910562300524119222277224610665566639113"), boost::lexical_cast("0.523493989529503311622429023285005765138192489253997848188274804607937449633"), boost::lexical_cast("0.300246216566683946242644511406502867819201371939240893015974691913454885808"), boost::lexical_cast("-1.52120199319725472696227412667597446499425167961832165707021344230176033177"), boost::lexical_cast("1.13603274583679261300233776596233947213325327220186577281646114405893643737"), boost::lexical_cast("-0.724392352664214606992237586133777377079256948325029997000977246245080002233"), boost::lexical_cast("0.388929770868824042863797693850769570596574559986024775356266372411178699540"), boost::lexical_cast("-0.154179232206718916893840432717207071358278896682953359728214136553325799462"), boost::lexical_cast("0.0346417257392303445249711911680413626748314405808671270003420334115731156886"), boost::lexical_cast("0.000565560712478204919273167124606530729984714749201859574061136268417222555091"), boost::lexical_cast("-0.00181249770691727469711609530963691466508142540232948702137344478023631552627"), boost::lexical_cast("-0.000588438376382341711328138138085170076834520467501917923206789175862767064823"), boost::lexical_cast("0.000584640605402568510997586714696849845579997815266362073215706625936265422267"), boost::lexical_cast("-0.000105844593014498134844692670509893952845656642504556116202764900311740548871"), boost::lexical_cast("-0.0000166468037640819733915865521995838990879669585457089450510966868180317991073"), boost::lexical_cast("0.00000665702118480401459239243655589860277773366781809294087365522507093749610972"), boost::lexical_cast("-0.000000413743126200483787623193128609853366545681088788845827525800995343215361362"), boost::lexical_cast("0.0000000207412032505394370932864660704575774018021101403985444914301425651830396364"), boost::lexical_cast("0.00000000255971644398897619761224049169452964847520797773015352526231064476414713088"), boost::lexical_cast("-0.000000000124716745263065662018732610753074049301860833130953760676639739633614703632"), boost::lexical_cast("-0.000000000000821458651618354613000975781089942016395222632214628948691994907081952543308"), boost::lexical_cast("0.00000000000000541358205668964250840058676695497274874562173948269314129706627580306868477"), boost::lexical_cast("-0.00000000000000000128485207080436687070726868370112172350592202319644076709933531091773318283"), boost::lexical_cast("-0.00000000000000000000000189699318908704988950069910826502347264570849344128849517108385649026224807"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0934129724220382501349487645300486875234170850245453862186068741324556453346"), boost::lexical_cast("0.953357331395321245741266856874997302595970338569125873978673981100995300480"), boost::lexical_cast("-2.42585978272484861991123956040990946486002448323913218605736734622206571009"), boost::lexical_cast("1.63185993796807836831512574118361080962022886222644234566139901231163277968"), boost::lexical_cast("-0.336818591013582903249775631450042574391476183298908473845002503554184531336"), boost::lexical_cast("0.296394587240899314100091240103956940350255747570510417673706841960334677926"), boost::lexical_cast("-0.493154941522463250789713957033016154711226757009451483204608291769388507365"), boost::lexical_cast("0.502913696750504242256156558554921880910106950582744728599445382698153029596"), boost::lexical_cast("-0.336126999253822119479465098323173579081837929647816976396920165650335393282"), boost::lexical_cast("0.148847761252488850986084377184215361968924151368645407707467187349749910163"), boost::lexical_cast("-0.0371885435962923855115909993991585519975037535904089717996103864650078357255"), boost::lexical_cast("-0.000677463558386659117669706791423999203996673498642825896754202338872153037212"), boost::lexical_cast("0.00434487021597667956865695331283701301527190336995514718937519883519367138275"), boost::lexical_cast("-0.00143373662446881484405894523139422896093101823093949963457103829230616147393"), boost::lexical_cast("0.0000803285640476068389549772156164639298617305382091989859099979787377361685082"), boost::lexical_cast("0.0000602734424846845589803909611025184831851284747892368902634252735886854145822"), boost::lexical_cast("-0.0000115730739689488129340585879564187751711875533780907209280476231204851229122"), boost::lexical_cast("-0.000000203038141021073932718677763769332933580122614824827600175511631933693809212"), boost::lexical_cast("0.0000000773356655095724294210645023078737522223042928980510110980740523592990465707"), boost::lexical_cast("-0.00000000215725560615500809261906811761440663890609571489717139261391990455696409353"), boost::lexical_cast("-0.0000000000245586666328544526882182912641255771532047054465213672340341827137743325608"), boost::lexical_cast("0.000000000000284323589789160638880699636876075821856225650053527097527498265089761368022"), boost::lexical_cast("-0.0000000000000000800840047468220328165149036500044542829087947759522330193325204357891480071"), boost::lexical_cast("-0.000000000000000000000236473591532019199312763596068830970062833585321537190947073847639519351315"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.396363069673686750280548809109341383558142899908658154252076031883543304792"), boost::lexical_cast("0.238068683697433321429585844607770037608153029841989185082601544289511822219"), boost::lexical_cast("-4.64401864722743840792906444860573491613583063303684257865448916759790826776"), boost::lexical_cast("9.71243595152007771944165862124698599498887535318579000953262482665972313795"), boost::lexical_cast("-10.10029232143527497511956582518178878569923447373646682398486184139257232320"), boost::lexical_cast("6.44220464420971559730717830018078624764249539854892668261076269712038115208"), boost::lexical_cast("-1.93557502961232367730478899897300379802437925385537992860963683485606932435"), boost::lexical_cast("-1.13856358742765677259829229431312665523374959898394470745436500766939742620"), boost::lexical_cast("1.77689274061969457654054279018031039397931349538073366568800222943389068691"), boost::lexical_cast("-0.891295625160220390726639633941018793327361578783273631114698203724211097982"), boost::lexical_cast("0.00471792734258069607298372270654369571845851651159485076238538324057163995930"), boost::lexical_cast("0.255819262610292278082913762588973634598620071368606343876500343872602998914"), boost::lexical_cast("-0.152654376117555334468035681501318647194034115973737844538041071367284215030"), boost::lexical_cast("0.0378134940119027684268573286080453159469956130130132923110965287904780282715"), boost::lexical_cast("-0.000121560168274539299345351509032174588648879441157601156968982724381225846230"), boost::lexical_cast("-0.00224553423418000095025260272886136860879275402678218779366170715107150220625"), boost::lexical_cast("0.000469555837907319969170862177815720438165344404592060255271066086544874124922"), boost::lexical_cast("-0.0000141861348255063632226432936826347114087322044233208751170570608200310593872"), boost::lexical_cast("-0.00000464305587959345590293188512531458238827872871125055638342646962690953713219"), boost::lexical_cast("0.000000178051762046205612595554830606976294440430913830610989139140135095046368211"), boost::lexical_cast("0.00000000303509999613044224553224713019229664330430223919168680848333863544196628625"), boost::lexical_cast("-0.0000000000365437421820854861941025978557451175694493997756433473102664593668311395766"), boost::lexical_cast("0.0000000000000198703923567812240879432784797155185222750333260578388946834495314448320449"), boost::lexical_cast("0.000000000000000000117344234409057581035282894922526685306543990483992437311052020528871227897"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.29829892093148675837199950753098632139723149606803915083396902574449208029"), boost::lexical_cast("-5.45541043360327965942803915313674612029372057019831640585125509023549800118"), boost::lexical_cast("9.14659891488834710881029600683563338140354944919573004532523982762027640408"), boost::lexical_cast("-9.80871239536320715248084576368333258092782945770772294846327434563862485047"), boost::lexical_cast("15.50082996950292219639972661063373929889290553615318208787250496285617222300"), boost::lexical_cast("-33.61083916121800635387839817511480720783882205113114838947334986844676545110"), boost::lexical_cast("55.09017907974305257429979612931043233074315377510785068179493707419179306920"), boost::lexical_cast("-60.82145202823324586976188912900763870195276458683421125895492211837656456610"), boost::lexical_cast("42.02393025939949010806003192165586117752687379191173227214491131963706674670"), boost::lexical_cast("-11.42269030320996012044519422789839184208965590204144693325418569461244686450"), boost::lexical_cast("-9.67844966081573901856421942081827739733622487304317595154977214567794509597"), boost::lexical_cast("13.19183180908504928777755197127911432617214990231201200609805185851541078220"), boost::lexical_cast("-7.21315521344594633555535356089362070473231847012846502887625287740895386140"), boost::lexical_cast("1.83447526237344731188770747629269995995501816031751673943697214639743502746"), boost::lexical_cast("0.0601600495701990470578423349111841174877115258558613797357532347067021952039"), boost::lexical_cast("-0.174833101160455896617892939926978927097853960488370421237681663434954331091"), boost::lexical_cast("0.0411800837257458706544783101171615610022000261127525347354930832776549516518"), boost::lexical_cast("-0.00141717935851889446824809565837085540248614139243332507385210260947445968142"), boost::lexical_cast("-0.000555560350330981282462146005342011895702037823413086938195491412869816876266"), boost::lexical_cast("0.0000301723456414363746673611598443020881465023496175523444306498854376889270505"), boost::lexical_cast("0.000000524839933903751376247987543350808530106039891755176189436028565699403867555"), boost::lexical_cast("-0.00000000965385307602574426453743325201391730573869326245570681673188712440757277785"), boost::lexical_cast("0.00000000000722766970161280855990093183542473161153221858414301624738661674579313333974"), boost::lexical_cast("0.0000000000000000853612001904068385422684003534916785880458525794775900690850226714475517744"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.27591989601868802674501785402136946331923506081722246623851782517724077956"), boost::lexical_cast("-21.63177809906124242929618059834623299778169240498310197475751118910416098620"), boost::lexical_cast("63.25489897169350129665198120436585141171650857792468724984618895395156006760"), boost::lexical_cast("-105.64003425325222575937530358981100910346806778811817416031589048365312600500"), boost::lexical_cast("102.06272350428550602794983637219493818640733053272677960258573782601532526300"), boost::lexical_cast("-32.43801570590952546966804957405761294619856192253725299530721532824239057130"), boost::lexical_cast("-69.24480735372488476492726199088539370961841664995584500291147279197929753280"), boost::lexical_cast("158.72530808311660773421056969103812590229014617453891622003568916003770686900"), boost::lexical_cast("-230.87010121360094217924337915444738753118945778386926981134464016079483998200"), boost::lexical_cast("288.01642517309430130736747957321792288095742327983295887677253620052397656300"), boost::lexical_cast("-293.56995408804215778949920569290304953535440565901256602829643467801366406600"), boost::lexical_cast("219.06562359302256197770038214491012243075469145162322027206744692760130121800"), boost::lexical_cast("-106.11496744383573250143347007263440927813125065546390553880842822781245458600"), boost::lexical_cast("24.36128368581441161811089841236294040076426774635200083960668663240035562270"), boost::lexical_cast("4.43835769181395654737492708557265278640240993742380862767423932221744414072"), boost::lexical_cast("-4.85838395915027243210674082732708450718320033028158945864987295932465128532"), boost::lexical_cast("1.24315429771719465036074806222840734622901883367521779356833558313975863034"), boost::lexical_cast("-0.0546856990741580491153518017356023641138609910294467327282571902327595261764"), boost::lexical_cast("-0.0228245670871021915459486249711370338635367656247831656423034604880900103448"), boost::lexical_cast("0.00182589449768070240872485623697617929375041493178863912492773120527334148740"), boost::lexical_cast("0.0000325042037685336262383912582434415986434896476262522511852445563487664732443"), boost::lexical_cast("-0.000000913502582370599560963475117189669272497546395420968001321763477890154121574"), boost::lexical_cast("0.000000000962624778879324987625830559274321622346182423692550529429764127390602244922"), boost::lexical_cast("0.0000000000000227354243242555606552075639763265819210262659858551528763926512978121086153"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.45444407372475315177467720169187517161433417770438745922665664020599409502"), boost::lexical_cast("-42.56603716393114257244373103682838987393735085098528587723704965223943476520"), boost::lexical_cast("150.07103038891031818515743886532262871921427569033077113142523203102180848600"), boost::lexical_cast("-321.43500940552269096601048445735807968772615638828686952229875945373392190300"), boost::lexical_cast("486.49285123198957691189838212046510878680843665543661626780343427251983580200"), boost::lexical_cast("-595.11637851173395454633822179663347444510793729870901103899277136014019421800"), boost::lexical_cast("657.86125381518521180460485717096228323663875621461938629474339145210131286700"), boost::lexical_cast("-668.83804725645011584987360192202731704144101270640504252184585661445041302700"), boost::lexical_cast("591.02274673989806775295905433087707064430763321360170996127414186474186931000"), boost::lexical_cast("-443.28601860377678276957435305705753468882955594761345736716889808456981116800"), boost::lexical_cast("293.87433969841157445285988545192520160702855258407453598402313481311389546900"), boost::lexical_cast("-171.68368626892283846885275113484356845529681519766755047035289228531315837000"), boost::lexical_cast("71.00249921006545724382096278062170090483913301428833620161533416167027278460"), boost::lexical_cast("-4.13488722851072940608795217399184622797681725247617241549338591142041688274"), boost::lexical_cast("-17.18288938944823526216285329531580736984384768713968863197342708566449903360"), boost::lexical_cast("11.20228508169258542429354205503684083900272758550359041700286637526422591800"), boost::lexical_cast("-2.95829620222196862348532178007222612141499084521609887716323655493346037655"), boost::lexical_cast("0.156921481073662045953756041913257566237101060794292502890322509860387034380"), boost::lexical_cast("0.0721026247514735804121100566415299137462648885789052981712326861934660517398"), boost::lexical_cast("-0.00907030670836707586832589336774695366594420064978445308615112498525335789807"), boost::lexical_cast("-0.000161130895298934705154661229234656725370077261357478991394608849613865795613"), boost::lexical_cast("0.00000713307751758044877495311912009992056522552469630503342586343211736962847133"), boost::lexical_cast("-0.0000000106575703414569404305476724036545431177067024911660193372639981084780691080"), boost::lexical_cast("-0.000000000000503317323749389303719563737438740340206677439330596561000596089805746652424"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.32801237750156362483703729919996280695475478786922672432521671311254119834"), boost::lexical_cast("-61.58640131841635882165326632994086164711314616056846772845360126537901397590"), boost::lexical_cast("227.42653376013215970605972000104796817858966318899264414158978818559392102100"), boost::lexical_cast("-483.38351188460896438440811583095448851197970686725910387330605686657179355400"), boost::lexical_cast("658.62912269358369177986072599065937010545029800076900991882439695455748769400"), boost::lexical_cast("-635.15071641906441010676927456327130280863307826701934274951357911827708743700"), boost::lexical_cast("525.04690066637079491947273558679727444098945204462362426522679969863610748800"), boost::lexical_cast("-443.30745206683403362457477380798545670712488884939473921356975458618458544000"), boost::lexical_cast("300.17669704851406005255339306856972566391684656404302637816237332586479717400"), boost::lexical_cast("-45.30421440165057702649803918277564533841222868064389570465229669564862985660"), boost::lexical_cast("-164.37688981728291058700366348503001862732516744094730683945089617887328966600"), boost::lexical_cast("222.44242861890885847681782922975570961504898766298360812690379798202763289600"), boost::lexical_cast("-207.00658146172812966405444130677690797169650424372338218260727893033315417800"), boost::lexical_cast("185.71893129678116264900939787686677271662237302432116418506696464581702586100"), boost::lexical_cast("-138.86918923719065745108647629486188361516972571236690249317122893128955088000"), boost::lexical_cast("69.50959361239118942856866391172010145985276234165251426115174332096603971880"), boost::lexical_cast("-19.04382546435533552706594655647836079674785133821952687854508408638604970290"), boost::lexical_cast("1.20609133375256805296141503631395543465839083951690638291124156720969407294"), boost::lexical_cast("0.669565610251110449459869170701094766316947883669190548464587151565621618122"), boost::lexical_cast("-0.123082251367001933022447492166384546932097984915934829679103087789786980169"), boost::lexical_cast("-0.00217715502095119397820112791869347023513174444446995719621661268281187784180"), boost::lexical_cast("0.000164805973396089051063484507442794045079988504541072855801781243508086304395"), boost::lexical_cast("-0.000000346608500769363543505373359383397071519912407954254984582912708688659199768"), boost::lexical_cast("-0.0000000000327241391736611726060145576789575175299756010826303842659100203467561600702"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.74326753158999834056116812204650118954465060264390982835886577518486268101"), boost::lexical_cast("-49.99173337237481612516482468092913196192930769585684115716367234203820792960"), boost::lexical_cast("192.30520833873417575305032330542133296821671316133381127103148089884031604300"), boost::lexical_cast("-433.04663948928221093038951547041129446069313459043483444888804096093780007800"), boost::lexical_cast("650.29301559509696707391037593955338600499735080495817462222469008365651103900"), boost::lexical_cast("-740.38817602946521524635652991694109244663464176809245792160120459662518415100"), boost::lexical_cast("757.93851884277973879231890685884938562543997902765972920915606890170773334500"), boost::lexical_cast("-772.48924369491146375649339718563050251773647675318553766020712796863655952900"), boost::lexical_cast("734.59183179377170969929067292253934666701158992568437326815741556001094017400"), boost::lexical_cast("-613.89505985905958667637158329225855337819338706324599738575255299428681055200"), boost::lexical_cast("472.33594493404419022069420012879298507928450919272191339092869436457326478600"), boost::lexical_cast("-345.69897983393301885486688813740413735467129595468365631508601814464484933100"), boost::lexical_cast("226.26867671070805874604396626788385147483759975756729744364317414185036983100"), boost::lexical_cast("-128.84432762208094815098432847559414298872221422065057311509033200520302342600"), boost::lexical_cast("67.72394160486503269545391021144817969495298865649547918029615797016751111400"), boost::lexical_cast("-31.08044680580914965121251458755066430643179670788681275067771141961765865330"), boost::lexical_cast("9.03921060432773819185233100601819798021655369701494303621450373894984472793"), boost::lexical_cast("-0.279500999538692156607881707491630467331656124884020994194580849950834108907"), boost::lexical_cast("-0.665902364239195393220279168618682723908283324628346793634526901627751383162"), boost::lexical_cast("0.139613766717165065129603804344872559693994963696840183393921810240833710156"), boost::lexical_cast("0.00114270599575310816085071769400504056542580942289008729114676011902537797522"), boost::lexical_cast("-0.000363195276838709741268790813501267488184675434306229955898556486054877483452"), boost::lexical_cast("0.000000837182661399504778282565545392303504120991217340679683017724471409789826587"), boost::lexical_cast("0.000000000157946565437923846485744196675519158792805910875863717029040068663366791699"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.75046159171634829527163330112510862850171517204527775957907811808615973114"), boost::lexical_cast("-33.20841509838443403040955493092978227279440605831429576553858852822290831770"), boost::lexical_cast("128.25721684783507822791369935094396779663623788672457406601793500565400821300"), boost::lexical_cast("-283.00542635229471097126751678584291828797372875915935845892698482535006432800"), boost::lexical_cast("398.45614171533524054366727180364229849289710682645378118885424811008467298600"), boost::lexical_cast("-400.47860036082498196423508946011183381211802981566841571520311399197149103900"), boost::lexical_cast("360.89316566379728536083135647493301259091592313871719238427499436437024359700"), boost::lexical_cast("-360.36716234208593176728211543795346738863581300534318197607331333071816329900"), boost::lexical_cast("345.18447441614411073209118238319574005939847247957730049229326256329205638300"), boost::lexical_cast("-265.34611221251483388928468384525918631697582076506472432506352501057803541200"), boost::lexical_cast("178.77226842348210140340813061313731570411151037624108176819522656335485861200"), boost::lexical_cast("-126.26215183796407397228250290324344411107479423589079138412164102720512263500"), boost::lexical_cast("82.41567612620818870658967871867767992001718408506613309043264486867844619890"), boost::lexical_cast("-40.50938566509796337170834199812377119587502364115881243103048938109185750340"), boost::lexical_cast("16.71756950579390837676267330467410166297326502202781368693672667419429720820"), boost::lexical_cast("-7.39864795075319033452851083640208460723103521341161070032778771352463446094"), boost::lexical_cast("1.95408260511172224329226832456435155937649818121300834001919283900042220991"), boost::lexical_cast("0.690229161332348184845535892744845183908860830917068365378586781073665858011"), boost::lexical_cast("-0.655353589184885598246818014752831975001293106883587971496754554959033929107"), boost::lexical_cast("0.143780737452876767968123736205746816488614800208120534936850150005468283836"), boost::lexical_cast("-0.00303543758366473343622443033949066654294389600319219464305397559642637833680"), boost::lexical_cast("-0.000777458265060317434483464181432621410549249758909909318620156609272380996932"), boost::lexical_cast("0.00000151017565574994282254648106028992857730337718860666328360706404021863696656"), boost::lexical_cast("0.000000000568866357531465656815014550479471644088340548161842850968659319933134867646"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 10) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.86635692686814334701754512957417350216062515159895162052764097113842043881"), boost::lexical_cast("-16.66568660094765155284710426501256914017192557788488990117955606509357986260"), boost::lexical_cast("63.97804678187877577341574018618490150437681519853311500630408017375912199010"), boost::lexical_cast("-136.23190198244598023711707959187969385344039691028406627990988068537298511000"), boost::lexical_cast("173.59631221712522935710881272085756101498061308640801488113337865649201321400"), boost::lexical_cast("-138.94953641114748367854206140337482846024919723682523303085604297244337196500"), boost::lexical_cast("92.98130285529193057335744641381945290112275119999668355136002874352650176220"), boost::lexical_cast("-95.66074017444953262397108875695549785804937842210406658962204154607043381990"), boost::lexical_cast("100.74835406297538158748165104775636864067153061989180522203699894495867559400"), boost::lexical_cast("-60.63130268637294081465002015983185171976527925057524138307520452453647480510"), boost::lexical_cast("18.24956398577073820812706593292482832715236920720613106450102860436965089250"), boost::lexical_cast("-8.54732021029040581858802778196927000562449466895889987096814021723737609364"), boost::lexical_cast("4.78696610600480427243790366050970458256425167093884818282352698386437907349"), boost::lexical_cast("6.83943109951896060414630018445272105375896265663133246875005081887041646399"), boost::lexical_cast("-11.04550750770862050142551027487003756867181933391324257411989886446115036200"), boost::lexical_cast("6.88913300130972012620159069598928481029978149700887106696332707309836414794"), boost::lexical_cast("-3.99825731620098174291722686239189690428111675971623793296035204832239878614"), boost::lexical_cast("3.00376174701501382150890393381234413552775178257039864145400674669724791199"), boost::lexical_cast("-1.58055114117211937700150897909355450299408918929453114571326586270053152435"), boost::lexical_cast("0.400173290528033474046780700771547590750735363709672842945384353539651951125"), boost::lexical_cast("-0.0241247023629214784889949418794949849850588027303632529305620350773009871100"), boost::lexical_cast("-0.00448583771765557425940953481033336026071599781591537346531375096056306017530"), boost::lexical_cast("0.0000124871538203663846064127929077357912223820600720172540637500972263270210398"), boost::lexical_cast("0.00000000937574188857368553262323255933606233354879076874674275186450020536917162031"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 11) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.377278790797028406495802049657083663562322361271624572079656683482814478381"), boost::lexical_cast("-3.38307717994363961647269729038870588758939994602123056911758390829221597548"), boost::lexical_cast("13.11518829717770243316037165549177793856194221161693344499682894614897577190"), boost::lexical_cast("-28.57377091700247032555582008243751850926614781859679891489888632231161474300"), boost::lexical_cast("38.42252911331146019070574663175356660452387955730227078383681460893481557030"), boost::lexical_cast("-34.66266016064986281759949034365429955214971534877540614552601700849583120980"), boost::lexical_cast("26.97406640625859867160203071971832599019438490014915496366645506277688896980"), boost::lexical_cast("-26.21946455304798864871161101760021771880775045074096541060302606518533350730"), boost::lexical_cast("26.35290308895353879370155511099855779382824241176826323168027129587570497550"), boost::lexical_cast("-20.52160249382001334719301784362115987987417964675011905409270410893726823490"), boost::lexical_cast("14.19746165882069082480150485765422363795342078508016178125626500064575627140"), boost::lexical_cast("-11.13286484381245965677943198830588460860332272909854856957249726091446789600"), boost::lexical_cast("8.17588527972006301113855143068583531281419193834728913969920542381362453688"), boost::lexical_cast("-4.81287628036717816955676920569706546198654894542238231746562519451899699153"), boost::lexical_cast("2.79404288335191180481579867581197397188129392455615189049532559340029697375"), boost::lexical_cast("-1.69721935207211848956351510550979925531938115005327856369556578995039602531"), boost::lexical_cast("0.823713514158776098143914270378737144802711120108114847337079673523569107449"), boost::lexical_cast("-0.335063019316185774400946900047809387504331444599538017269859124873837022194"), boost::lexical_cast("0.149151743150318837631159229932006915696347222177619661105078433909566955498"), boost::lexical_cast("-0.0488658930534999511496940888639373453545430453545029982576926747686967632991"), boost::lexical_cast("0.00413351950396409421167019759007987626638864156006830612512440429134389517261"), boost::lexical_cast("0.00111968733549906685340740936899343820107158321331505760751334075276362206400"), boost::lexical_cast("-0.00000927561883079690107640228293463474861573105973385043495546011950474050815337"), boost::lexical_cast("-0.0000000138353046393774419706318300470822604006784632689512055491879584523531143047"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 12) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0485510900239990436421204389454387673417811678462962540757143566128579592770"), boost::lexical_cast("-0.436270800634297968322345080087680826208441319415670872030224777690078461556"), boost::lexical_cast("1.68248974767722772758483160675785114053064764804002514623394170463789590172"), boost::lexical_cast("-3.59058586609376583771926574429375533672584236400562126859511283907434445711"), boost::lexical_cast("4.56322994124539027457225861351587674553390566017608457671928325936265991655"), boost::lexical_cast("-3.58373440747749241237223725147688884192263700323730018471801896054684688057"), boost::lexical_cast("2.24866726732552133278146064153483046293389221299882995399864011134597001733"), boost::lexical_cast("-2.22587445942297775995811432335154708339509627741904345621048251573818545409"), boost::lexical_cast("2.46615704775868702834863652085534769700638634288067530551348825246469149621"), boost::lexical_cast("-1.76584597268750597380515213373501064800094868705200411926589180388549588359"), boost::lexical_cast("0.997419618978951767654107468235932428974722705691044731477454908009925099723"), boost::lexical_cast("-0.824734821626728470682970936709275659502024225512330108668711202634188766674"), boost::lexical_cast("0.664517113712924681701113756939420311843390054559860571221578562221833419569"), boost::lexical_cast("-0.335428796184635221533296732070577988586954631509663722390327691441647623334"), boost::lexical_cast("0.160948630264969492724365334557199225341872449473537373932195593392097150334"), boost::lexical_cast("-0.114655797627677055876779744868793614912947551394818530771503539697052078243"), boost::lexical_cast("0.0572231912176004958885591389510844893402088690448910703952553137622920787942"), boost::lexical_cast("-0.0161932279203405965225240954258609535698781894809026667589644820730338725774"), boost::lexical_cast("0.00703484727602471596997669396790315101109040223481142577918954913506000676361"), boost::lexical_cast("-0.00331142872730769846357537103134640651616087940178035673586298619579639917832"), boost::lexical_cast("0.000243081165958578425715014946837734369665794705531210842489368910237101227750"), boost::lexical_cast("0.000157806011543052252390221263353602504629816751263280846430328831365578539218"), boost::lexical_cast("-0.00000379309065442971274677051284817497527219849546159473806845519248661436372460"), boost::lexical_cast("-0.0000000111654147665765272669074902224159897974782540201524920545177291846727682138"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 14) { if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0f, 0x1.2e3c0cp-10f, 0x1.d73cdcp-4f, 0x1.980f08p-1f, 0x1.0b8da8p-2f, -0x1.381b88p-2f, 0x1.a64054p-3f, -0x1.be6cb2p-4f, 0x1.5369f4p-5f, -0x1.e553cp-8f, -0x1.5b9738p-9f, 0x1.3ad93ep-9f, -0x1.6c8658p-11f, 0x1.421438p-16f, 0x1.359cb6p-15f, -0x1.16b1cep-18f, -0x1.1e4702p-19f, 0x1.16b7d8p-21f, -0x1.2a9018p-27f, -0x1.e6603ap-29f, 0x1.ad635ap-33f, -0x1.0b7166p-37f, -0x1.2dcc8ep-43f, 0x1.994c74p-50f, 0x1.d3e7dcp-60f, -0x1.ad34cp-72f, 0x1.c6fd0cp-94f, -0x0p+0f}; + return {0x0p+0f, 0x1.2e3c0cp-10f, 0x1.d73cdcp-4f, 0x1.980f08p-1f, 0x1.0b8da8p-2f, -0x1.381b88p-2f, 0x1.a64054p-3f, -0x1.be6cb2p-4f, 0x1.5369f4p-5f, -0x1.e553cp-8f, -0x1.5b9738p-9f, 0x1.3ad93ep-9f, -0x1.6c8658p-11f, 0x1.421438p-16f, 0x1.359cb6p-15f, -0x1.16b1cep-18f, -0x1.1e4702p-19f, 0x1.16b7d8p-21f, -0x1.2a9018p-27f, -0x1.e6603ap-29f, 0x1.ad635ap-33f, -0x1.0b7166p-37f, -0x1.2dcc8ep-43f, 0x1.994c74p-50f, 0x1.d3e7dcp-60f, -0x1.ad34cp-72f, 0x1.c6fd0cp-94f, 0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.ffe6a8p-8f, 0x1.687896p-2f, 0x1.4f6222p-1f, -0x1.9d7a5p+0f, 0x1.ee1a72p-1f, -0x1.3a4c3ep-1f, 0x1.a5124ep-2f, -0x1.fd4714p-3f, 0x1.efeb84p-4f, -0x1.695e5ep-5f, 0x1.73caep-7f, -0x1.fa774ap-10f, 0x1.13b07ep-13f, 0x1.7cb11cp-14f, -0x1.d2ccp-15f, 0x1.74388cp-17f, 0x1.21ff8ap-21f, -0x1.156308p-22f, -0x1.19b91cp-25f, 0x1.f7d83ep-31f, 0x1.509062p-34f, -0x1.405684p-40f, 0x1.6ac07ap-46f, -0x1.9a49fp-55f, -0x1.88bc66p-67f, 0x1.a0541ep-88f, 0x0p+0f}; + return {0x0p+0f, 0x1.ffe6a8p-8f, 0x1.687896p-2f, 0x1.4f6222p-1f, -0x1.9d7a5p+0f, 0x1.ee1a72p-1f, -0x1.3a4c3ep-1f, 0x1.a5124ep-2f, -0x1.fd4714p-3f, 0x1.efeb84p-4f, -0x1.695e5ep-5f, 0x1.73caep-7f, -0x1.fa774ap-10f, 0x1.13b07ep-13f, 0x1.7cb11cp-14f, -0x1.d2ccp-15f, 0x1.74388cp-17f, 0x1.21ff8ap-21f, -0x1.156308p-22f, -0x1.19b91cp-25f, 0x1.f7d83ep-31f, 0x1.509062p-34f, -0x1.405684p-40f, 0x1.6ac07ap-46f, -0x1.9a49fp-55f, -0x1.88bc66p-67f, 0x1.a0541ep-88f, -0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.70e38ep-5f, 0x1.98429p-1f, -0x1.5a23aep+0f, -0x1.ca3a86p-2f, 0x1.f2912p+0f, -0x1.902df6p+0f, 0x1.6e5d8ap-1f, -0x1.7cd74ap-5f, -0x1.cb5138p-3f, 0x1.8970fep-3f, -0x1.2e3ba4p-4f, 0x1.a43728p-9f, 0x1.5d8afap-7f, -0x1.3f213ap-8f, 0x1.438df6p-11f, 0x1.92aaccp-13f, -0x1.4a2a2cp-14f, 0x1.061494p-17f, 0x1.1c615p-21f, -0x1.fed404p-24f, 0x1.9900fap-29f, 0x1.4b71c6p-33f, -0x1.f4e21p-40f, -0x1.ae7642p-50f, 0x1.0753e4p-59f, -0x1.1725d8p-79f, 0x0p+0f}; + return {0x0p+0f, 0x1.70e38ep-5f, 0x1.98429p-1f, -0x1.5a23aep+0f, -0x1.ca3a86p-2f, 0x1.f2912p+0f, -0x1.902df6p+0f, 0x1.6e5d8ap-1f, -0x1.7cd74ap-5f, -0x1.cb5138p-3f, 0x1.8970fep-3f, -0x1.2e3ba4p-4f, 0x1.a43728p-9f, 0x1.5d8afap-7f, -0x1.3f213ap-8f, 0x1.438df6p-11f, 0x1.92aaccp-13f, -0x1.4a2a2cp-14f, 0x1.061494p-17f, 0x1.1c615p-21f, -0x1.fed404p-24f, 0x1.9900fap-29f, 0x1.4b71c6p-33f, -0x1.f4e21p-40f, -0x1.ae7642p-50f, 0x1.0753e4p-59f, -0x1.1725d8p-79f, -0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.b64064p-3f, 0x1.b94954p-1f, -0x1.49bc84p+2f, 0x1.255158p+3f, -0x1.254592p+3f, 0x1.bfdd02p+2f, -0x1.258cbp+2f, 0x1.244b68p+1f, -0x1.76e9c8p-1f, 0x1.2db90ep-3f, -0x1.adc00ap-4f, 0x1.077b02p-3f, -0x1.4e1bd4p-4f, 0x1.a8b172p-6f, -0x1.1b67a8p-9f, -0x1.5aa222p-10f, 0x1.0c296ep-11f, -0x1.315112p-14f, -0x1.aa34a6p-23f, 0x1.718ac2p-20f, -0x1.4ed202p-25f, -0x1.6a2c3ep-29f, 0x1.03cb1cp-35f, 0x1.d2ce74p-46f, -0x1.110d8p-54f, 0x1.2175bep-73f, -0x0p+0f}; + return {0x0p+0f, 0x1.b64064p-3f, 0x1.b94954p-1f, -0x1.49bc84p+2f, 0x1.255158p+3f, -0x1.254592p+3f, 0x1.bfdd02p+2f, -0x1.258cbp+2f, 0x1.244b68p+1f, -0x1.76e9c8p-1f, 0x1.2db90ep-3f, -0x1.adc00ap-4f, 0x1.077b02p-3f, -0x1.4e1bd4p-4f, 0x1.a8b172p-6f, -0x1.1b67a8p-9f, -0x1.5aa222p-10f, 0x1.0c296ep-11f, -0x1.315112p-14f, -0x1.aa34a6p-23f, 0x1.718ac2p-20f, -0x1.4ed202p-25f, -0x1.6a2c3ep-29f, 0x1.03cb1cp-35f, 0x1.d2ce74p-46f, -0x1.110d8p-54f, 0x1.2175bep-73f, 0x0p+0f}; } if constexpr (order == 4) { return {0x0p+0f, 0x1.9bd3bcp-1f, -0x1.218b2p+1f, -0x1.8f073ep-2f, 0x1.10368cp+3f, -0x1.6e5fdp+3f, -0x1.fee6b2p-2f, 0x1.5dae0cp+4f, -0x1.253938p+5f, 0x1.0846cap+5f, -0x1.d3379cp+3f, -0x1.bc1cbep+1f, 0x1.49e86ep+3f, -0x1.e4adep+2f, 0x1.651f3ap+1f, -0x1.14e32ep-2f, -0x1.c20b1ep-3f, 0x1.9dc736p-4f, -0x1.dbb9ecp-7f, -0x1.c7f5c2p-11f, 0x1.a5fc86p-12f, -0x1.07f65ep-16f, -0x1.0e379p-20f, 0x1.69bc58p-26f, 0x1.872aa2p-36f, -0x1.7b8496p-44f, 0x1.92548cp-62f, -0x0p+0f}; @@ -1271,13 +1565,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.f579b2p+2f, -0x1.13b9ccp+6f, 0x1.0d0d04p+8f, -0x1.309a86p+9f, 0x1.b8e262p+9f, -0x1.b08b28p+9f, 0x1.3c7d2cp+9f, -0x1.7e7dfp+8f, 0x1.9c8804p+5f, 0x1.dc1752p+8f, -0x1.e54a04p+9f, 0x1.1a42e2p+10f, -0x1.f903f4p+9f, 0x1.9d8dbap+9f, -0x1.34174p+9f, 0x1.64eb3cp+8f, -0x1.0b0c44p+7f, 0x1.5f0a54p+4f, 0x1.d8f6bap+1f, -0x1.1c758ap+1f, 0x1.f38ac2p-3f, 0x1.f827p-7f, -0x1.130614p-10f, -0x1.2dc514p-19f, 0x1.1d494ap-25f, -0x1.2e8464p-40f, 0x0p+0f}; } if constexpr (order == 8) { - return {0x0p+0f, 0x1.e32cc2p+2f, -0x1.1692cap+6f, 0x1.1fa09cp+8f, -0x1.615e68p+9f, 0x1.265c8cp+10f, -0x1.7569eep+10f, 0x1.9e96bep+10f, -0x1.bbbe16p+10f, 0x1.be0802p+10f, -0x1.8f099cp+10f, 0x1.43b838p+10f, -0x1.ee6ad6p+9f, 0x1.58d562p+9f, -0x1.a3b282p+8f, 0x1.c79d62p+7f, -0x1.bc78ccp+6f, 0x1.418e36p+5f, -0x1.3abf36p+2f, -0x1.ad7bb4p+1f, 0x1.a65502p+0f, -0x1.affdcep-3f, -0x1.8341cep-7f, 0x1.b5571p-10f, 0x1.e32174p-19f, -0x1.c53c14p-24f, 0x1.e0c27p-38f, 0x0p+0f}; + return {0x0p+0f, 0x1.e32cc2p+2f, -0x1.1692cap+6f, 0x1.1fa09cp+8f, -0x1.615e68p+9f, 0x1.265c8cp+10f, -0x1.7569eep+10f, 0x1.9e96bep+10f, -0x1.bbbe16p+10f, 0x1.be0802p+10f, -0x1.8f099cp+10f, 0x1.43b838p+10f, -0x1.ee6ad6p+9f, 0x1.58d562p+9f, -0x1.a3b282p+8f, 0x1.c79d62p+7f, -0x1.bc78ccp+6f, 0x1.418e36p+5f, -0x1.3abf36p+2f, -0x1.ad7bb4p+1f, 0x1.a65502p+0f, -0x1.affdcep-3f, -0x1.8341cep-7f, 0x1.b5571p-10f, 0x1.e32174p-19f, -0x1.c53c14p-24f, 0x1.e0c27p-38f, -0x0p+0f}; } if constexpr (order == 9) { return {0x0p+0f, 0x1.8d1f8ap+2f, -0x1.d4881ap+5f, 0x1.e86d42p+7f, -0x1.280028p+9f, 0x1.d3eb6p+9f, -0x1.0b82a6p+10f, 0x1.07ceap+10f, -0x1.0d7822p+10f, 0x1.0df61ep+10f, -0x1.c6893ap+9f, 0x1.45ac9ep+9f, -0x1.c9d686p+8f, 0x1.35c4c4p+8f, -0x1.4a58bep+7f, 0x1.01755ap+6f, -0x1.5d1ba8p+4f, 0x1.dadd4ap+1f, 0x1.87b02p+2f, -0x1.9ab15ep+2f, 0x1.46cd6ap+1f, -0x1.8955d8p-2f, -0x1.85245p-7f, 0x1.6f86d4p-8f, 0x1.1b4e3cp-16f, -0x1.7914d8p-21f, 0x1.903b4cp-34f, -0x0p+0f}; } if constexpr (order == 10) { - return {0x0p+0f, 0x1.041a0ap+1f, -0x1.3658b6p+4f, 0x1.5194bp+6f, -0x1.c3df82p+7f, 0x1.ad183ep+8f, -0x1.3d9c78p+9f, 0x1.852da4p+9f, -0x1.9cca18p+9f, 0x1.9a6efap+9f, -0x1.a300c2p+9f, 0x1.a73548p+9f, -0x1.7a384cp+9f, 0x1.2afd88p+9f, -0x1.d0f63ap+8f, 0x1.6384c4p+8f, -0x1.d6c26ap+7f, 0x1.089826p+7f, -0x1.1f7e84p+6f, 0x1.2a5702p+5f, -0x1.c18aa4p+3f, 0x1.4dc138p+1f, 0x1.bd5ac2p-5f, -0x1.1aa942p-4f, -0x1.97678cp-14f, 0x1.25b3fcp-16f, -0x1.381ffp-28f, -0x0p+0f}; + return {0x0p+0f, 0x1.041a0ap+1f, -0x1.3658b6p+4f, 0x1.5194bp+6f, -0x1.c3df82p+7f, 0x1.ad183ep+8f, -0x1.3d9c78p+9f, 0x1.852da4p+9f, -0x1.9cca18p+9f, 0x1.9a6efap+9f, -0x1.a300c2p+9f, 0x1.a73548p+9f, -0x1.7a384cp+9f, 0x1.2afd88p+9f, -0x1.d0f63ap+8f, 0x1.6384c4p+8f, -0x1.d6c26ap+7f, 0x1.089826p+7f, -0x1.1f7e84p+6f, 0x1.2a5702p+5f, -0x1.c18aa4p+3f, 0x1.4dc138p+1f, 0x1.bd5ac2p-5f, -0x1.1aa942p-4f, -0x1.97678cp-14f, 0x1.25b3fcp-16f, -0x1.381ffp-28f, 0x0p+0f}; } if constexpr (order == 11) { return {0x0p+0f, 0x1.456a1ep+0f, -0x1.86731ep+3f, 0x1.99ddaep+5f, -0x1.ebccc2p+6f, 0x1.74f85ep+7f, -0x1.842622p+7f, 0x1.4fbcc2p+7f, -0x1.4776cp+7f, 0x1.573bfp+7f, -0x1.2b0c28p+7f, 0x1.bb5bcap+6f, -0x1.580802p+6f, 0x1.0c1df4p+6f, -0x1.5dea02p+5f, 0x1.997fcap+4f, -0x1.f5c414p+3f, 0x1.1578f4p+3f, -0x1.e11a4cp+1f, 0x1.8c2f5ap+0f, -0x1.42cddep-1f, 0x1.1b3752p-3f, 0x1.61bca4p-7f, -0x1.eeca78p-8f, 0x1.427b38p-14f, 0x1.1c6c3p-18f, -0x1.2f0566p-29f, 0x0p+0f}; @@ -1291,16 +1585,16 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0, 0x1.2e3c0bb3f3ad5p-10, 0x1.d73cdc4f17148p-4, 0x1.980f074dbd462p-1, 0x1.0b8da7807c274p-2, -0x1.381b88314120bp-2, 0x1.a64053bd4da41p-3, -0x1.be6cb26620f84p-4, 0x1.5369f32b472a9p-5, -0x1.e553bfb83c482p-8, -0x1.5b97376b07916p-9, 0x1.3ad93e070eb7ap-9, -0x1.6c8658d1b206ep-11, 0x1.421437e7b839dp-16, 0x1.359cb55b7d336p-15, -0x1.16b1cde08937ep-18, -0x1.1e470298289aep-19, 0x1.16b7d7c52ecb7p-21, -0x1.2a9017a9058edp-27, -0x1.e6603a12c622p-29, 0x1.ad635a5532adap-33, -0x1.0b7166f3d598p-37, -0x1.2dcc8d3c8b0cfp-43, 0x1.994c7452dcd31p-50, 0x1.d3e7db27a70eep-60, -0x1.ad34c0383fa64p-72, 0x1.c6fd0b1a8d6a3p-94, -0x0p+0}; + return {0x0p+0, 0x1.2e3c0bb3f3ad5p-10, 0x1.d73cdc4f17148p-4, 0x1.980f074dbd462p-1, 0x1.0b8da7807c274p-2, -0x1.381b88314120bp-2, 0x1.a64053bd4da41p-3, -0x1.be6cb26620f84p-4, 0x1.5369f32b472a9p-5, -0x1.e553bfb83c482p-8, -0x1.5b97376b07916p-9, 0x1.3ad93e070eb7ap-9, -0x1.6c8658d1b206ep-11, 0x1.421437e7b839dp-16, 0x1.359cb55b7d336p-15, -0x1.16b1cde08937ep-18, -0x1.1e470298289aep-19, 0x1.16b7d7c52ecb7p-21, -0x1.2a9017a9058edp-27, -0x1.e6603a12c622p-29, 0x1.ad635a5532adap-33, -0x1.0b7166f3d598p-37, -0x1.2dcc8d3c8b0cfp-43, 0x1.994c7452dcd31p-50, 0x1.d3e7db27a70eep-60, -0x1.ad34c0383fa64p-72, 0x1.c6fd0b1a8d6a3p-94, 0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.ffe6a833f41d2p-8, 0x1.6878956519ce3p-2, 0x1.4f62227264623p-1, -0x1.9d7a4f00f9dcp+0, 0x1.ee1a7236f71e4p-1, -0x1.3a4c3d150c11ep-1, 0x1.a5124e1ab47a9p-2, -0x1.fd47140509eb3p-3, 0x1.efeb8355fd2f8p-4, -0x1.695e5e5e49cf8p-5, 0x1.73cae05387f64p-7, -0x1.fa774911ba2d4p-10, 0x1.13b07ddddb3b8p-13, 0x1.7cb11c0b4280bp-14, -0x1.d2cbfff6e2a58p-15, 0x1.74388c9fd28e7p-17, 0x1.21ff895bfb5f3p-21, -0x1.156307b5c128cp-22, -0x1.19b91bff8bef5p-25, 0x1.f7d83e4d41c77p-31, 0x1.5090626b206a4p-34, -0x1.405683426ad01p-40, 0x1.6ac079eed130ep-46, -0x1.9a49f0637a3b6p-55, -0x1.88bc66cc087f2p-67, 0x1.a0541eb1bdcebp-88, 0x0p+0}; + return {0x0p+0, 0x1.ffe6a833f41d2p-8, 0x1.6878956519ce3p-2, 0x1.4f62227264623p-1, -0x1.9d7a4f00f9dcp+0, 0x1.ee1a7236f71e4p-1, -0x1.3a4c3d150c11ep-1, 0x1.a5124e1ab47a9p-2, -0x1.fd47140509eb3p-3, 0x1.efeb8355fd2f8p-4, -0x1.695e5e5e49cf8p-5, 0x1.73cae05387f64p-7, -0x1.fa774911ba2d4p-10, 0x1.13b07ddddb3b8p-13, 0x1.7cb11c0b4280bp-14, -0x1.d2cbfff6e2a58p-15, 0x1.74388c9fd28e7p-17, 0x1.21ff895bfb5f3p-21, -0x1.156307b5c128cp-22, -0x1.19b91bff8bef5p-25, 0x1.f7d83e4d41c77p-31, 0x1.5090626b206a4p-34, -0x1.405683426ad01p-40, 0x1.6ac079eed130ep-46, -0x1.9a49f0637a3b6p-55, -0x1.88bc66cc087f2p-67, 0x1.a0541eb1bdcebp-88, -0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.70e38d13c6dcdp-5, 0x1.98429094e12d2p-1, -0x1.5a23aee5cfcf3p+0, -0x1.ca3a85e30ebf6p-2, 0x1.f2911f6caea6bp+0, -0x1.902df5acb9856p+0, 0x1.6e5d8a32fe3aep-1, -0x1.7cd7499a11b88p-5, -0x1.cb51389df1437p-3, 0x1.8970fdea96db5p-3, -0x1.2e3ba43116d4fp-4, 0x1.a437288ed51abp-9, 0x1.5d8afaeb5ec2ap-7, -0x1.3f213a25a4c3ap-8, 0x1.438df66495fedp-11, 0x1.92aacb344e1abp-13, -0x1.4a2a2b6937dcap-14, 0x1.061494c076ea5p-17, 0x1.1c61500cd5ff6p-21, -0x1.fed404b96c72ep-24, 0x1.9900fa8d5cb81p-29, 0x1.4b71c6cbb7be3p-33, -0x1.f4e20f23251aap-40, -0x1.ae764159a5bb6p-50, 0x1.0753e4c918ed7p-59, -0x1.1725d8c4676c4p-79, 0x0p+0}; + return {0x0p+0, 0x1.70e38d13c6dcdp-5, 0x1.98429094e12d2p-1, -0x1.5a23aee5cfcf3p+0, -0x1.ca3a85e30ebf6p-2, 0x1.f2911f6caea6bp+0, -0x1.902df5acb9856p+0, 0x1.6e5d8a32fe3aep-1, -0x1.7cd7499a11b88p-5, -0x1.cb51389df1437p-3, 0x1.8970fdea96db5p-3, -0x1.2e3ba43116d4fp-4, 0x1.a437288ed51abp-9, 0x1.5d8afaeb5ec2ap-7, -0x1.3f213a25a4c3ap-8, 0x1.438df66495fedp-11, 0x1.92aacb344e1abp-13, -0x1.4a2a2b6937dcap-14, 0x1.061494c076ea5p-17, 0x1.1c61500cd5ff6p-21, -0x1.fed404b96c72ep-24, 0x1.9900fa8d5cb81p-29, 0x1.4b71c6cbb7be3p-33, -0x1.f4e20f23251aap-40, -0x1.ae764159a5bb6p-50, 0x1.0753e4c918ed7p-59, -0x1.1725d8c4676c4p-79, -0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.b6406454732d5p-3, 0x1.b949541f458cep-1, -0x1.49bc84198d8efp+2, 0x1.255157167a553p+3, -0x1.254591e8b6e07p+3, 0x1.bfdd01aa9e691p+2, -0x1.258cb0e12f408p+2, 0x1.244b687910818p+1, -0x1.76e9c86768fd8p-1, 0x1.2db90e1b7e224p-3, -0x1.adc00aab7f786p-4, 0x1.077b01cdc29aap-3, -0x1.4e1bd3d7c8107p-4, 0x1.a8b1719f7696ap-6, -0x1.1b67a8fdd5d39p-9, -0x1.5aa2219e8b072p-10, 0x1.0c296ebe05b6fp-11, -0x1.315112d6e2649p-14, -0x1.aa34a64782e4p-23, 0x1.718ac2125512ep-20, -0x1.4ed202350e6d4p-25, -0x1.6a2c3e7b115c9p-29, 0x1.03cb1bd946e2ep-35, 0x1.d2ce73e99c294p-46, -0x1.110d7f1b0bfcp-54, 0x1.2175be08d4af4p-73, -0x0p+0}; + return {0x0p+0, 0x1.b6406454732d5p-3, 0x1.b949541f458cep-1, -0x1.49bc84198d8efp+2, 0x1.255157167a553p+3, -0x1.254591e8b6e07p+3, 0x1.bfdd01aa9e691p+2, -0x1.258cb0e12f408p+2, 0x1.244b687910818p+1, -0x1.76e9c86768fd8p-1, 0x1.2db90e1b7e224p-3, -0x1.adc00aab7f786p-4, 0x1.077b01cdc29aap-3, -0x1.4e1bd3d7c8107p-4, 0x1.a8b1719f7696ap-6, -0x1.1b67a8fdd5d39p-9, -0x1.5aa2219e8b072p-10, 0x1.0c296ebe05b6fp-11, -0x1.315112d6e2649p-14, -0x1.aa34a64782e4p-23, 0x1.718ac2125512ep-20, -0x1.4ed202350e6d4p-25, -0x1.6a2c3e7b115c9p-29, 0x1.03cb1bd946e2ep-35, 0x1.d2ce73e99c294p-46, -0x1.110d7f1b0bfcp-54, 0x1.2175be08d4af4p-73, 0x0p+0}; } if constexpr (order == 4) { return {0x0p+0, 0x1.9bd3bc2473961p-1, -0x1.218b20c923a73p+1, -0x1.8f073ee248543p-2, 0x1.10368c3ad14ecp+3, -0x1.6e5fd027a16b4p+3, -0x1.fee6b19288529p-2, 0x1.5dae0c64ec101p+4, -0x1.253938fa65f9dp+5, 0x1.0846ca351ee33p+5, -0x1.d3379cfd6d393p+3, -0x1.bc1cbd5de053bp+1, 0x1.49e86d68d4cf9p+3, -0x1.e4ade08c4a6c3p+2, 0x1.651f390634957p+1, -0x1.14e32e1f9b6bbp-2, -0x1.c20b1d287136bp-3, 0x1.9dc73570ee73fp-4, -0x1.dbb9ebdd9c09ep-7, -0x1.c7f5c1ec60f69p-11, 0x1.a5fc856e52fadp-12, -0x1.07f65daa0049bp-16, -0x1.0e378f07aff0ap-20, 0x1.69bc58d5ec0cdp-26, 0x1.872aa1bcf3687p-36, -0x1.7b84969608017p-44, 0x1.92548cc9b5b72p-62, -0x0p+0}; @@ -1315,13 +1609,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.f579b17074e37p+2, -0x1.13b9cbe766167p+6, 0x1.0d0d0432bec13p+8, -0x1.309a86e68bfeap+9, 0x1.b8e26231ea03fp+9, -0x1.b08b284517ec4p+9, 0x1.3c7d2b2624502p+9, -0x1.7e7def0dd6c18p+8, 0x1.9c880448390e6p+5, 0x1.dc1752cc2f2f8p+8, -0x1.e54a03fbbc2fap+9, 0x1.1a42e1dae569p+10, -0x1.f903f4a18c30ep+9, 0x1.9d8db91908386p+9, -0x1.34173ffb143e2p+9, 0x1.64eb3c27db565p+8, -0x1.0b0c43171fee6p+7, 0x1.5f0a5375d11c7p+4, 0x1.d8f6b9f1522f3p+1, -0x1.1c75896d6d599p+1, 0x1.f38ac1a749dafp-3, 0x1.f82700b4dc727p-7, -0x1.1306135d4672fp-10, -0x1.2dc514d699914p-19, 0x1.1d494ae1d331fp-25, -0x1.2e8464bcec8d4p-40, 0x0p+0}; } if constexpr (order == 8) { - return {0x0p+0, 0x1.e32cc25ea4da5p+2, -0x1.1692ca6458eaap+6, 0x1.1fa09c1316dfbp+8, -0x1.615e67f0c1ccdp+9, 0x1.265c8c1b4b1aap+10, -0x1.7569ed1c8210dp+10, 0x1.9e96bde5063d4p+10, -0x1.bbbe167a38d63p+10, 0x1.be080201e737dp+10, -0x1.8f099bdabb219p+10, 0x1.43b83815e15a6p+10, -0x1.ee6ad68b3bda5p+9, 0x1.58d561cb84d26p+9, -0x1.a3b282a8407a3p+8, 0x1.c79d620ffafcp+7, -0x1.bc78cb9447aa1p+6, 0x1.418e35902e32dp+5, -0x1.3abf360acc2f7p+2, -0x1.ad7bb3867b3c3p+1, 0x1.a655024ebf2fdp+0, -0x1.affdcd4718ba8p-3, -0x1.8341cd6c6b0aap-7, 0x1.b55710d3ebf55p-10, 0x1.e321738ab1448p-19, -0x1.c53c1373c8858p-24, 0x1.e0c270acb15c6p-38, 0x0p+0}; + return {0x0p+0, 0x1.e32cc25ea4da5p+2, -0x1.1692ca6458eaap+6, 0x1.1fa09c1316dfbp+8, -0x1.615e67f0c1ccdp+9, 0x1.265c8c1b4b1aap+10, -0x1.7569ed1c8210dp+10, 0x1.9e96bde5063d4p+10, -0x1.bbbe167a38d63p+10, 0x1.be080201e737dp+10, -0x1.8f099bdabb219p+10, 0x1.43b83815e15a6p+10, -0x1.ee6ad68b3bda5p+9, 0x1.58d561cb84d26p+9, -0x1.a3b282a8407a3p+8, 0x1.c79d620ffafcp+7, -0x1.bc78cb9447aa1p+6, 0x1.418e35902e32dp+5, -0x1.3abf360acc2f7p+2, -0x1.ad7bb3867b3c3p+1, 0x1.a655024ebf2fdp+0, -0x1.affdcd4718ba8p-3, -0x1.8341cd6c6b0aap-7, 0x1.b55710d3ebf55p-10, 0x1.e321738ab1448p-19, -0x1.c53c1373c8858p-24, 0x1.e0c270acb15c6p-38, -0x0p+0}; } if constexpr (order == 9) { return {0x0p+0, 0x1.8d1f8a3279763p+2, -0x1.d4881995a0c1fp+5, 0x1.e86d414a78e34p+7, -0x1.280027c9b0876p+9, 0x1.d3eb5f0b0594cp+9, -0x1.0b82a55c2799fp+10, 0x1.07ce9f70ddb28p+10, -0x1.0d7822536789ep+10, 0x1.0df61d2a506b2p+10, -0x1.c6893ac6cda6bp+9, 0x1.45ac9e8089788p+9, -0x1.c9d686e237044p+8, 0x1.35c4c3819b31p+8, -0x1.4a58be360f4f4p+7, 0x1.017559c35f761p+6, -0x1.5d1ba7f134742p+4, 0x1.dadd49a935c84p+1, 0x1.87b01fd4326a3p+2, -0x1.9ab15d247f91p+2, 0x1.46cd6a0d33a49p+1, -0x1.8955d7defe0d5p-2, -0x1.85244f4e65bbcp-7, 0x1.6f86d3c431061p-8, 0x1.1b4e3c12a74ep-16, -0x1.7914d82d3193fp-21, 0x1.903b4b44dd8c8p-34, -0x0p+0}; } if constexpr (order == 10) { - return {0x0p+0, 0x1.041a0a897aa29p+1, -0x1.3658b5d77609ep+4, 0x1.5194af04e2f85p+6, -0x1.c3df81f0aaf29p+7, 0x1.ad183e8db3dacp+8, -0x1.3d9c782d70077p+9, 0x1.852da35362a6dp+9, -0x1.9cca18f6947ddp+9, 0x1.9a6efa498935ep+9, -0x1.a300c2ebdd39dp+9, 0x1.a735477cbff1cp+9, -0x1.7a384b1c312fcp+9, 0x1.2afd886ee72d7p+9, -0x1.d0f63946d275bp+8, 0x1.6384c4a13f54ep+8, -0x1.d6c269ce8bf35p+7, 0x1.08982647618p+7, -0x1.1f7e83a071123p+6, 0x1.2a5701b5bea0ep+5, -0x1.c18aa4ec1159bp+3, 0x1.4dc13861658a9p+1, 0x1.bd5ac19033245p-5, -0x1.1aa94170fffadp-4, -0x1.97678bd8dc9fap-14, 0x1.25b3fc23ddcf6p-16, -0x1.381fef501218fp-28, -0x0p+0}; + return {0x0p+0, 0x1.041a0a897aa29p+1, -0x1.3658b5d77609ep+4, 0x1.5194af04e2f85p+6, -0x1.c3df81f0aaf29p+7, 0x1.ad183e8db3dacp+8, -0x1.3d9c782d70077p+9, 0x1.852da35362a6dp+9, -0x1.9cca18f6947ddp+9, 0x1.9a6efa498935ep+9, -0x1.a300c2ebdd39dp+9, 0x1.a735477cbff1cp+9, -0x1.7a384b1c312fcp+9, 0x1.2afd886ee72d7p+9, -0x1.d0f63946d275bp+8, 0x1.6384c4a13f54ep+8, -0x1.d6c269ce8bf35p+7, 0x1.08982647618p+7, -0x1.1f7e83a071123p+6, 0x1.2a5701b5bea0ep+5, -0x1.c18aa4ec1159bp+3, 0x1.4dc13861658a9p+1, 0x1.bd5ac19033245p-5, -0x1.1aa94170fffadp-4, -0x1.97678bd8dc9fap-14, 0x1.25b3fc23ddcf6p-16, -0x1.381fef501218fp-28, 0x0p+0}; } if constexpr (order == 11) { return {0x0p+0, 0x1.456a1d2a45d0dp+0, -0x1.86731e38f2c9fp+3, 0x1.99ddae9b5957ep+5, -0x1.ebccc1d5d759ap+6, 0x1.74f85dd906949p+7, -0x1.8426225b26444p+7, 0x1.4fbcc1bdf3f19p+7, -0x1.4776c0e99319fp+7, 0x1.573bef3fda7ebp+7, -0x1.2b0c271bd883ep+7, 0x1.bb5bca80b625p+6, -0x1.5808025c93fa5p+6, 0x1.0c1df40cf5e4cp+6, -0x1.5dea01151a3e2p+5, 0x1.997fc95198574p+4, -0x1.f5c4140f2a03ep+3, 0x1.1578f4041624bp+3, -0x1.e11a4c4784826p+1, 0x1.8c2f5a8cae554p+0, -0x1.42cdddde9b71fp-1, 0x1.1b37523680cdap-3, 0x1.61bca3fd3effbp-7, -0x1.eeca78cc1dd9bp-8, 0x1.427b3775515b6p-14, 0x1.1c6c30fb5472dp-18, -0x1.2f056506ce5e6p-29, 0x0p+0}; @@ -1335,16 +1629,16 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0L, 0x9.71e05d9f9d6a6a5p-13L, 0xe.b9e6e278b8a3ea8p-7L, 0xc.c0783a6dea3101cp-4L, 0x8.5c6d3c03e139c58p-5L, -0x9.c0dc418a090583bp-5L, 0xd.32029dea6d20a27p-6L, -0xd.f365933107c2191p-7L, 0xa.9b4f995a39545fcp-8L, -0xf.2a9dfdc1e240f71p-11L, -0xa.dcb9bb583c8b013p-12L, 0x9.d6c9f03875bcf99p-12L, -0xb.6432c68d9036eap-14L, 0xa.10a1bf3dc1ce972p-19L, 0x9.ace5aadbe99adaep-18L, -0x8.b58e6f0449bf329p-21L, -0x8.f23814c144d7229p-22L, 0x8.b5bebe29765b5fbp-24L, -0x9.5480bd482c76432p-30L, -0xf.3301d09631101f2p-32L, 0xd.6b1ad2a9956cecp-36L, -0x8.5b8b379eacc020ep-40L, -0x9.6e6469e45867b18p-46L, 0xc.ca63a296e698604p-53L, 0xe.9f3ed93d387731ep-63L, -0xd.69a601c1fd321e5p-75L, 0xe.37e858d46b515bp-97L, -0x0p+0L}; + return {0x0p+0L, 0x9.71e05d9f9d6a6a5p-13L, 0xe.b9e6e278b8a3ea8p-7L, 0xc.c0783a6dea3101cp-4L, 0x8.5c6d3c03e139c58p-5L, -0x9.c0dc418a090583bp-5L, 0xd.32029dea6d20a27p-6L, -0xd.f365933107c2191p-7L, 0xa.9b4f995a39545fcp-8L, -0xf.2a9dfdc1e240f71p-11L, -0xa.dcb9bb583c8b013p-12L, 0x9.d6c9f03875bcf99p-12L, -0xb.6432c68d9036eap-14L, 0xa.10a1bf3dc1ce972p-19L, 0x9.ace5aadbe99adaep-18L, -0x8.b58e6f0449bf329p-21L, -0x8.f23814c144d7229p-22L, 0x8.b5bebe29765b5fbp-24L, -0x9.5480bd482c76432p-30L, -0xf.3301d09631101f2p-32L, 0xd.6b1ad2a9956cecp-36L, -0x8.5b8b379eacc020ep-40L, -0x9.6e6469e45867b18p-46L, 0xc.ca63a296e698604p-53L, 0xe.9f3ed93d387731ep-63L, -0xd.69a601c1fd321e5p-75L, 0xe.37e858d46b515bp-97L, 0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xf.ff35419fa0e8f21p-11L, 0xb.43c4ab28ce718b1p-5L, 0xa.7b11139323118aep-4L, -0xc.ebd27807cee01bp-3L, 0xf.70d391b7b8f1d7fp-4L, -0x9.d261e8a8608ee81p-4L, 0xd.289270d5a3d484p-5L, -0xf.ea38a0284f599d4p-6L, 0xf.7f5c1aafe97c0a1p-7L, -0xb.4af2f2f24e7c239p-8L, 0xb.9e57029c3fb215dp-10L, -0xf.d3ba488dd169dd9p-13L, 0x8.9d83eeeed9dc1b7p-16L, 0xb.e588e05a14054ecp-17L, -0xe.965fffb7152c15fp-18L, 0xb.a1c464fe94734f4p-20L, 0x9.0ffc4adfdaf948bp-24L, -0x8.ab183dae09460bbp-25L, -0x8.cdc8dffc5f7a7c4p-28L, 0xf.bec1f26a0e3b7cap-34L, 0xa.84831359035218p-37L, -0xa.02b41a135680872p-43L, 0xb.5603cf768986fc1p-49L, -0xc.d24f831bd1db255p-58L, -0xc.45e3366043f8eabp-70L, 0xd.02a0f58dee755b1p-91L, 0x0p+0L}; + return {0x0p+0L, 0xf.ff35419fa0e8f21p-11L, 0xb.43c4ab28ce718b1p-5L, 0xa.7b11139323118aep-4L, -0xc.ebd27807cee01bp-3L, 0xf.70d391b7b8f1d7fp-4L, -0x9.d261e8a8608ee81p-4L, 0xd.289270d5a3d484p-5L, -0xf.ea38a0284f599d4p-6L, 0xf.7f5c1aafe97c0a1p-7L, -0xb.4af2f2f24e7c239p-8L, 0xb.9e57029c3fb215dp-10L, -0xf.d3ba488dd169dd9p-13L, 0x8.9d83eeeed9dc1b7p-16L, 0xb.e588e05a14054ecp-17L, -0xe.965fffb7152c15fp-18L, 0xb.a1c464fe94734f4p-20L, 0x9.0ffc4adfdaf948bp-24L, -0x8.ab183dae09460bbp-25L, -0x8.cdc8dffc5f7a7c4p-28L, 0xf.bec1f26a0e3b7cap-34L, 0xa.84831359035218p-37L, -0xa.02b41a135680872p-43L, 0xb.5603cf768986fc1p-49L, -0xc.d24f831bd1db255p-58L, -0xc.45e3366043f8eabp-70L, 0xd.02a0f58dee755b1p-91L, -0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0xb.871c689e36e67b2p-8L, 0xc.c21484a70968caap-4L, -0xa.d11d772e7e79982p-3L, -0xe.51d42f1875fb05dp-5L, 0xf.9488fb657535621p-3L, -0xc.816fad65cc2b1fep-3L, 0xb.72ec5197f1d73dap-4L, -0xb.e6ba4cd08dc3e1ep-8L, -0xe.5a89c4ef8a1b6aap-6L, 0xc.4b87ef54b6da459p-6L, -0x9.71dd2188b6a770fp-7L, 0xd.21b94476a8d5992p-12L, 0xa.ec57d75af6152bbp-10L, -0x9.f909d12d261cd27p-11L, 0xa.1c6fb324aff682bp-14L, 0xc.955659a270d5623p-16L, -0xa.51515b49bee533ep-17L, 0x8.30a4a603b752616p-20L, 0x8.e30a8066affb01ep-24L, -0xf.f6a025cb63973cp-27L, 0xc.c807d46ae5c0b92p-32L, 0xa.5b8e365dbdf1a9dp-36L, -0xf.a710791928d528ap-43L, -0xd.73b20acd2ddae47p-53L, 0x8.3a9f2648c76b5adp-62L, -0x8.b92ec6233b61c8p-82L, 0x0p+0L}; + return {0x0p+0L, 0xb.871c689e36e67b2p-8L, 0xc.c21484a70968caap-4L, -0xa.d11d772e7e79982p-3L, -0xe.51d42f1875fb05dp-5L, 0xf.9488fb657535621p-3L, -0xc.816fad65cc2b1fep-3L, 0xb.72ec5197f1d73dap-4L, -0xb.e6ba4cd08dc3e1ep-8L, -0xe.5a89c4ef8a1b6aap-6L, 0xc.4b87ef54b6da459p-6L, -0x9.71dd2188b6a770fp-7L, 0xd.21b94476a8d5992p-12L, 0xa.ec57d75af6152bbp-10L, -0x9.f909d12d261cd27p-11L, 0xa.1c6fb324aff682bp-14L, 0xc.955659a270d5623p-16L, -0xa.51515b49bee533ep-17L, 0x8.30a4a603b752616p-20L, 0x8.e30a8066affb01ep-24L, -0xf.f6a025cb63973cp-27L, 0xc.c807d46ae5c0b92p-32L, 0xa.5b8e365dbdf1a9dp-36L, -0xf.a710791928d528ap-43L, -0xd.73b20acd2ddae47p-53L, 0x8.3a9f2648c76b5adp-62L, -0x8.b92ec6233b61c8p-82L, -0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0xd.b20322a3996a6a2p-6L, 0xd.ca4aa0fa2c66c04p-4L, -0xa.4de420cc6c77707p-1L, 0x9.2a8ab8b3d2a9452p+0L, -0x9.2a2c8f45b7035d6p+0L, 0xd.fee80d54f348b5ap-1L, -0x9.2c6587097a03f3cp-1L, 0x9.225b43c8840bfbbp-2L, -0xb.b74e433b47ec0d7p-4L, 0x9.6dc870dbf111c84p-6L, -0xd.6e00555bfbc3311p-7L, 0x8.3bd80e6e14d4ep-6L, -0xa.70de9ebe40837ffp-7L, 0xd.458b8cfbb4b4fcp-9L, -0x8.db3d47eeae9cad3p-12L, -0xa.d5110cf4583900cp-13L, 0x8.614b75f02db74e4p-14L, -0x9.8a8896b713246b3p-17L, -0xd.51a5323c171fee3p-26L, 0xb.8c561092a896f33p-23L, -0xa.769011a8736a082p-28L, -0xb.5161f3d88ae4a18p-32L, 0x8.1e58deca3716d7bp-38L, 0xe.96739f4ce14a1ebp-49L, -0x8.886bf8d85fdfe26p-57L, 0x9.0badf046a579ce9p-76L, -0x0p+0L}; + return {0x0p+0L, 0xd.b20322a3996a6a2p-6L, 0xd.ca4aa0fa2c66c04p-4L, -0xa.4de420cc6c77707p-1L, 0x9.2a8ab8b3d2a9452p+0L, -0x9.2a2c8f45b7035d6p+0L, 0xd.fee80d54f348b5ap-1L, -0x9.2c6587097a03f3cp-1L, 0x9.225b43c8840bfbbp-2L, -0xb.b74e433b47ec0d7p-4L, 0x9.6dc870dbf111c84p-6L, -0xd.6e00555bfbc3311p-7L, 0x8.3bd80e6e14d4ep-6L, -0xa.70de9ebe40837ffp-7L, 0xd.458b8cfbb4b4fcp-9L, -0x8.db3d47eeae9cad3p-12L, -0xa.d5110cf4583900cp-13L, 0x8.614b75f02db74e4p-14L, -0x9.8a8896b713246b3p-17L, -0xd.51a5323c171fee3p-26L, 0xb.8c561092a896f33p-23L, -0xa.769011a8736a082p-28L, -0xb.5161f3d88ae4a18p-32L, 0x8.1e58deca3716d7bp-38L, 0xe.96739f4ce14a1ebp-49L, -0x8.886bf8d85fdfe26p-57L, 0x9.0badf046a579ce9p-76L, 0x0p+0L}; } if constexpr (order == 4) { return {0x0p+0L, 0xc.de9de1239cb046fp-4L, -0x9.0c5906491d3955ap-2L, -0xc.7839f71242a14d4p-5L, 0x8.81b461d68a76009p+0L, -0xb.72fe813d0b59fd4p+0L, -0xf.f7358c9442947e5p-5L, 0xa.ed7063276080604p+1L, -0x9.29c9c7d32fce6e5p+2L, 0x8.423651a8f719bep+2L, -0xe.99bce7eb69c9558p+0L, -0xd.e0e5eaef029d8dap-2L, 0xa.4f436b46a67c643p+0L, -0xf.256f04625361643p-1L, 0xb.28f9c831a4ab6f7p-2L, -0x8.a71970fcdb5d61fp-5L, -0xe.1058e94389b55dfp-6L, 0xc.ee39ab87739f9d3p-7L, -0xe.ddcf5eece04ef66p-10L, -0xe.3fae0f6307b4b7dp-14L, 0xd.2fe42b7297d6b86p-15L, -0x8.3fb2ed50024d845p-19L, -0x8.71bc783d7f852p-23L, 0xb.4de2c6af60665f8p-29L, 0xc.39550de79b43b5p-39L, -0xb.dc24b4b0400b683p-47L, 0xc.92a4664dadb8e43p-65L, -0x0p+0L}; @@ -1359,13 +1653,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xf.abcd8b83a71b41bp-1L, -0x8.9dce5f3b30b3793p+3L, 0x8.68682195f609a67p+5L, -0x9.84d437345ff4c4dp+6L, 0xd.c713118f501f476p+6L, -0xd.84594228bf62173p+6L, 0x9.e3e95931228123cp+6L, -0xb.f3ef786eb60bf83p+5L, 0xc.e4402241c87301dp+2L, 0xe.e0ba9661797c21bp+5L, -0xf.2a501fdde17d235p+6L, 0x8.d2170ed72b4825ep+7L, -0xf.c81fa50c6187197p+6L, 0xc.ec6dc8c841c327ep+6L, -0x9.a0b9ffd8a1f0ecfp+6L, 0xb.2759e13edab26a3p+5L, -0x8.586218b8ff72c95p+4L, 0xa.f8529bae88e396ep+1L, 0xe.c7b5cf8a917974bp-2L, -0x8.e3ac4b6b6acc633p-2L, 0xf.9c560d3a4ed77bcp-6L, 0xf.c13805a6e393a55p-10L, -0x8.98309aea3397895p-13L, -0x9.6e28a6b4cc8a06ep-22L, 0x8.ea4a570e998fa08p-28L, -0x9.742325e7646a08p-43L, 0x0p+0L}; } if constexpr (order == 8) { - return {0x0p+0L, 0xf.196612f526d24c2p-1L, -0x8.b4965322c754f1cp+3L, 0x8.fd04e098b6fda5ap+5L, -0xb.0af33f860e6644cp+6L, 0x9.32e460da58d525ap+7L, -0xb.ab4f68e4108651p+7L, 0xc.f4b5ef2831ea0e8p+7L, -0xd.ddf0b3d1c6b1944p+7L, 0xd.f040100f39be9b8p+7L, -0xc.784cded5d90c4c7p+7L, 0xa.1dc1c0af0ad3159p+7L, -0xf.7356b459ded2772p+6L, 0xa.c6ab0e5c26933f6p+6L, -0xd.1d94154203d1881p+5L, 0xe.3ceb107fd7e02c5p+4L, -0xd.e3c65ca23d50927p+3L, 0xa.0c71ac8171966e8p+2L, -0x9.d5f9b056617ba17p-1L, -0xd.6bdd9c33d9e1582p-2L, 0xd.32a81275f97ea1cp-3L, -0xd.7fee6a38c5d3f8dp-6L, -0xc.1a0e6b635854ea4p-10L, 0xd.aab8869f5faa95cp-13L, 0xf.190b9c558a2439ep-22L, -0xe.29e09b9e442c27dp-27L, 0xf.061385658ae2fdbp-41L, 0x0p+0L}; + return {0x0p+0L, 0xf.196612f526d24c2p-1L, -0x8.b4965322c754f1cp+3L, 0x8.fd04e098b6fda5ap+5L, -0xb.0af33f860e6644cp+6L, 0x9.32e460da58d525ap+7L, -0xb.ab4f68e4108651p+7L, 0xc.f4b5ef2831ea0e8p+7L, -0xd.ddf0b3d1c6b1944p+7L, 0xd.f040100f39be9b8p+7L, -0xc.784cded5d90c4c7p+7L, 0xa.1dc1c0af0ad3159p+7L, -0xf.7356b459ded2772p+6L, 0xa.c6ab0e5c26933f6p+6L, -0xd.1d94154203d1881p+5L, 0xe.3ceb107fd7e02c5p+4L, -0xd.e3c65ca23d50927p+3L, 0xa.0c71ac8171966e8p+2L, -0x9.d5f9b056617ba17p-1L, -0xd.6bdd9c33d9e1582p-2L, 0xd.32a81275f97ea1cp-3L, -0xd.7fee6a38c5d3f8dp-6L, -0xc.1a0e6b635854ea4p-10L, 0xd.aab8869f5faa95cp-13L, 0xf.190b9c558a2439ep-22L, -0xe.29e09b9e442c27dp-27L, 0xf.061385658ae2fdbp-41L, -0x0p+0L}; } if constexpr (order == 9) { return {0x0p+0L, 0xc.68fc5193cbb1b7bp-1L, -0xe.a440ccad060f512p+2L, 0xf.436a0a53c719d99p+4L, -0x9.40013e4d843ac8dp+6L, 0xe.9f5af8582ca613bp+6L, -0x8.5c152ae13ccf6f4p+7L, 0x8.3e74fb86ed9434dp+7L, -0x8.6bc1129b3c4ec82p+7L, 0x8.6fb0e9528358fc8p+7L, -0xe.3449d6366d35aadp+6L, 0xa.2d64f4044bc4118p+6L, -0xe.4eb43711b821ef6p+5L, 0x9.ae261c0cd987cdbp+5L, -0xa.52c5f1b07a7a10fp+4L, 0x8.0baace1afbb0855p+3L, -0xa.e8dd3f89a3a1196p+1L, 0xe.d6ea4d49ae41ca2p-2L, 0xc.3d80fea19351b34p-1L, -0xc.d58ae923fc87cffp-1L, 0xa.366b50699d24558p-2L, -0xc.4aaebef7f06a90cp-5L, -0xc.29227a732dde266p-10L, 0xb.7c369e218830b25p-11L, 0x8.da71e0953a6ff91p-19L, -0xb.c8a6c1698c9facp-24L, 0xc.81da5a26ec63e05p-37L, -0x0p+0L}; } if constexpr (order == 10) { - return {0x0p+0L, 0x8.20d0544bd51475ap-2L, -0x9.b2c5aebbb04f3ccp+1L, 0xa.8ca5782717c2461p+3L, -0xe.1efc0f8557945e6p+4L, 0xd.68c1f46d9ed5f43p+5L, -0x9.ece3c16b803b8afp+6L, 0xc.296d1a9b1536a08p+6L, -0xc.e650c7b4a3ee86bp+6L, 0xc.d377d24c49af172p+6L, -0xd.1806175ee9ce931p+6L, 0xd.39aa3be5ff8dcb3p+6L, -0xb.d1c258e1897df15p+6L, 0x9.57ec4377396b8b8p+6L, -0xe.87b1ca3693ad8c6p+5L, 0xb.1c262509faa6e0bp+5L, -0xe.b6134e745f9a70dp+4L, 0x8.44c1323b0bffc57p+4L, -0x8.fbf41d038891ad4p+3L, 0x9.52b80dadf506ef2p+2L, -0xe.0c5527608acdb69p+0L, 0xa.6e09c30b2c546eap-2L, 0xd.ead60c819922651p-8L, -0x8.d54a0b87ffd6b8cp-7L, -0xc.bb3c5ec6e4fd2a6p-17L, 0x9.2d9fe11eee7aff2p-19L, -0x9.c0ff7a8090c74e6p-31L, -0x0p+0L}; + return {0x0p+0L, 0x8.20d0544bd51475ap-2L, -0x9.b2c5aebbb04f3ccp+1L, 0xa.8ca5782717c2461p+3L, -0xe.1efc0f8557945e6p+4L, 0xd.68c1f46d9ed5f43p+5L, -0x9.ece3c16b803b8afp+6L, 0xc.296d1a9b1536a08p+6L, -0xc.e650c7b4a3ee86bp+6L, 0xc.d377d24c49af172p+6L, -0xd.1806175ee9ce931p+6L, 0xd.39aa3be5ff8dcb3p+6L, -0xb.d1c258e1897df15p+6L, 0x9.57ec4377396b8b8p+6L, -0xe.87b1ca3693ad8c6p+5L, 0xb.1c262509faa6e0bp+5L, -0xe.b6134e745f9a70dp+4L, 0x8.44c1323b0bffc57p+4L, -0x8.fbf41d038891ad4p+3L, 0x9.52b80dadf506ef2p+2L, -0xe.0c5527608acdb69p+0L, 0xa.6e09c30b2c546eap-2L, 0xd.ead60c819922651p-8L, -0x8.d54a0b87ffd6b8cp-7L, -0xc.bb3c5ec6e4fd2a6p-17L, 0x9.2d9fe11eee7aff2p-19L, -0x9.c0ff7a8090c74e6p-31L, 0x0p+0L}; } if constexpr (order == 11) { return {0x0p+0L, 0xa.2b50e9522e86a75p-3L, -0xc.3398f1c7964f4dfp+0L, 0xc.ceed74dacabed45p+2L, -0xf.5e660eaebacd068p+3L, 0xb.a7c2eec834a457bp+4L, -0xc.213112d93221da7p+4L, 0xa.7de60def9f8cb1ep+4L, -0xa.3bb6074c98cfb0fp+4L, 0xa.b9df79fed3f56f5p+4L, -0x9.586138dec41f121p+4L, 0xd.dade5405b127d2ep+3L, -0xa.c04012e49fd2735p+3L, 0x8.60efa067af26275p+3L, -0xa.ef5008a8d1f0cbfp+2L, 0xc.cbfe4a8cc2b9da9p+1L, -0xf.ae20a079501f01bp+0L, 0x8.abc7a020b125872p+0L, -0xf.08d2623c2412c59p-2L, 0xc.617ad46572a9f45p-3L, -0xa.166eeef4db8f41bp-4L, 0x8.d9ba91b4066cd0bp-6L, 0xb.0de51fe9f7fd8e2p-10L, -0xf.7653c660eecd46ap-11L, 0xa.13d9bbaa8adb22dp-17L, 0x8.e36187daa39648ep-21L, -0x9.782b283672f30cdp-32L, 0x0p+0L}; @@ -1380,72 +1674,116 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.2e3c0bb3f3ad4d49ee7e86ec5518p-10Q, 0x1.d73cdc4f17147d4ff78a1eaebc82p-4Q, 0x1.980f074dbd462038712882b2222ep-1Q, 0x1.0b8da7807c2738b0ef8a21bd41e3p-2Q, -0x1.381b88314120b0755faac9b6a20bp-2Q, 0x1.a64053bd4da4144d5c6645aafa57p-3Q, -0x1.be6cb26620f84322f5bc9ad12402p-4Q, 0x1.5369f32b472a8bf80c2615157591p-5Q, -0x1.e553bfb83c481ee1c85b10218134p-8Q, -0x1.5b97376b07916025b5f5ed690f55p-9Q, 0x1.3ad93e070eb79f317793c09c0443p-9Q, -0x1.6c8658d1b206dd40e11227faae72p-11Q, 0x1.421437e7b839d2e408af08229929p-16Q, 0x1.359cb55b7d335b5bc8ff9070d375p-15Q, -0x1.16b1cde08937e6520514fc007dd3p-18Q, -0x1.1e470298289ae452c29404b9c735p-19Q, 0x1.16b7d7c52ecb6bf5c9c270fe3973p-21Q, -0x1.2a9017a9058ec8631bfea23cf0d5p-27Q, -0x1.e6603a12c62203e481a6f751bafcp-29Q, 0x1.ad635a5532ad9d7f9b990f32589fp-33Q, -0x1.0b7166f3d598041c11f82d418c61p-37Q, -0x1.2dcc8d3c8b0cf63074ab4d9fba5fp-43Q, 0x1.994c7452dcd30c07dade8e0a0b53p-50Q, 0x1.d3e7db27a70ee63bd0dc60e06dc1p-60Q, -0x1.ad34c0383fa643c903234154af7ep-72Q, 0x1.c6fd0b1a8d6a2b5f9f47659e9cdcp-94Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.2e3c0bb3f3ad4d49ee7e86ec562p-10Q, 0x1.d73cdc4f17147d4ff78a1eaebc89p-4Q, 0x1.980f074dbd462038712882b2223p-1Q, 0x1.0b8da7807c2738b0ef8a21bd41d9p-2Q, -0x1.381b88314120b0755faac9b6a208p-2Q, 0x1.a64053bd4da4144d5c6645aafa5p-3Q, -0x1.be6cb26620f84322f5bc9ad124p-4Q, 0x1.5369f32b472a8bf80c2615157588p-5Q, -0x1.e553bfb83c481ee1c85b1021810cp-8Q, -0x1.5b97376b07916025b5f5ed690f77p-9Q, 0x1.3ad93e070eb79f317793c09c0451p-9Q, -0x1.6c8658d1b206dd40e11227faae77p-11Q, 0x1.421437e7b839d2e408af08229906p-16Q, 0x1.359cb55b7d335b5bc8ff9070d38p-15Q, -0x1.16b1cde08937e6520514fc007dd3p-18Q, -0x1.1e470298289ae452c29404b9c746p-19Q, 0x1.16b7d7c52ecb6bf5c9c270fe3977p-21Q, -0x1.2a9017a9058ec8631bfea23cf0f2p-27Q, -0x1.e6603a12c62203e481a6f751bb0fp-29Q, 0x1.ad635a5532ad9d7f9b990f3258b1p-33Q, -0x1.0b7166f3d598041c11f82d418c5ep-37Q, -0x1.2dcc8d3c8b0cf63074ab4d9fba6ep-43Q, 0x1.994c7452dcd30c07dade8e0a0b5bp-50Q, 0x1.d3e7db27a70ee63bd0dc60e06dc1p-60Q, -0x1.ad34c0383fa643c903234154af78p-72Q, 0x1.c6fd0b1a8d6a2b5f9f47659e9cb5p-94Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.ffe6a833f41d1e41c335a1d663bdp-8Q, 0x1.6878956519ce3162ba29291a8512p-2Q, 0x1.4f6222726462315c1311b1bd0b54p-1Q, -0x1.9d7a4f00f9dc035ff30a13b3dd41p+0Q, 0x1.ee1a7236f71e3afe8c9241dc27eep-1Q, -0x1.3a4c3d150c11dd01e59680a43c0ap-1Q, 0x1.a5124e1ab47a907fdd8a56cf5fb6p-2Q, -0x1.fd47140509eb33a71307cdb49b1ep-3Q, 0x1.efeb8355fd2f814144fb4db02bbdp-4Q, -0x1.695e5e5e49cf847101e5144b6fd9p-5Q, 0x1.73cae05387f642ba0d652b2dbc7ep-7Q, -0x1.fa774911ba2d3bb25d61e69c8c0ap-10Q, 0x1.13b07ddddb3b836ee57d128434e4p-13Q, 0x1.7cb11c0b4280a9d8a95e4eb20f02p-14Q, -0x1.d2cbfff6e2a582bd1061aa2f37f3p-15Q, 0x1.74388c9fd28e69e7d9f0c5af3f3ep-17Q, 0x1.21ff895bfb5f2915922793fd2436p-21Q, -0x1.156307b5c128c175f7e3a714785ap-22Q, -0x1.19b91bff8bef4f88f1ed76cce8b5p-25Q, 0x1.f7d83e4d41c76f94d46210e4d8b7p-31Q, 0x1.5090626b206a430059df75027f9ap-34Q, -0x1.405683426ad010e44f0a98cc99acp-40Q, 0x1.6ac079eed130df81302e2b26c976p-46Q, -0x1.9a49f0637a3b64a9eb35bd52a783p-55Q, -0x1.88bc66cc087f1d558950f224ed94p-67Q, 0x1.a0541eb1bdceab613773d4dca27cp-88Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.ffe6a833f41d1e41c335a1d66225p-8Q, 0x1.6878956519ce3162ba29291a8504p-2Q, 0x1.4f6222726462315c1311b1bd0b69p-1Q, -0x1.9d7a4f00f9dc035ff30a13b3dd54p+0Q, 0x1.ee1a7236f71e3afe8c9241dc280bp-1Q, -0x1.3a4c3d150c11dd01e59680a43c1ap-1Q, 0x1.a5124e1ab47a907fdd8a56cf5fd2p-2Q, -0x1.fd47140509eb33a71307cdb49b3fp-3Q, 0x1.efeb8355fd2f814144fb4db02bdbp-4Q, -0x1.695e5e5e49cf847101e5144b6fefp-5Q, 0x1.73cae05387f642ba0d652b2dbcabp-7Q, -0x1.fa774911ba2d3bb25d61e69c8c8ep-10Q, 0x1.13b07ddddb3b836ee57d12843693p-13Q, 0x1.7cb11c0b4280a9d8a95e4eb20e72p-14Q, -0x1.d2cbfff6e2a582bd1061aa2f380bp-15Q, 0x1.74388c9fd28e69e7d9f0c5af3fddp-17Q, 0x1.21ff895bfb5f2915922793fd222dp-21Q, -0x1.156307b5c128c175f7e3a71477b9p-22Q, -0x1.19b91bff8bef4f88f1ed76cce8eap-25Q, 0x1.f7d83e4d41c76f94d46210e4d1f2p-31Q, 0x1.5090626b206a430059df75028168p-34Q, -0x1.405683426ad010e44f0a98cc929p-40Q, 0x1.6ac079eed130df81302e2b26c482p-46Q, -0x1.9a49f0637a3b64a9eb35bd52aa23p-55Q, -0x1.88bc66cc087f1d558950f224d6c9p-67Q, 0x1.a0541eb1bdceab613773d4dc3dd7p-88Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.70e38d13c6dccf6333417be4b524p-5Q, 0x1.98429094e12d1953c234a36b12cep-1Q, -0x1.5a23aee5cfcf330386719e085b0dp+0Q, -0x1.ca3a85e30ebf60ba5eccc5b7afa3p-2Q, 0x1.f2911f6caea6ac421bc7b6d2cbaap+0Q, -0x1.902df5acb98563fb6c8594126211p+0Q, 0x1.6e5d8a32fe3ae7b3c23b4e6e9a5bp-1Q, -0x1.7cd7499a11b87c3bc4909e0bca27p-5Q, -0x1.cb51389df1436d54630b5c40529cp-3Q, 0x1.8970fdea96db48b13c52294d02f6p-3Q, -0x1.2e3ba43116d4ee1d14ccd7ef1ed2p-4Q, 0x1.a437288ed51ab324c667ecc7c503p-9Q, 0x1.5d8afaeb5ec2a57500ea441b586cp-7Q, -0x1.3f213a25a4c39a4ee9f8ca7fc5d7p-8Q, 0x1.438df66495fed0569b1e66072684p-11Q, 0x1.92aacb344e1aac45946a6dd95aa5p-13Q, -0x1.4a2a2b6937dca67c2fb96409ea9bp-14Q, 0x1.061494c076ea4c2b5c794f2371b3p-17Q, 0x1.1c61500cd5ff603bf7260846f058p-21Q, -0x1.fed404b96c72e77fac42699e643cp-24Q, 0x1.9900fa8d5cb81723cdb543a2519ap-29Q, 0x1.4b71c6cbb7be353ab93ac21700a5p-33Q, -0x1.f4e20f23251aa513b13eb0ad0e35p-40Q, -0x1.ae764159a5bb5c8d340066c073e5p-50Q, 0x1.0753e4c918ed6b59ce15c4a93456p-59Q, -0x1.1725d8c4676c38ff70e1cc358b0cp-79Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.70e38d13c6dccf6333417be4b4fbp-5Q, 0x1.98429094e12d1953c234a36b137bp-1Q, -0x1.5a23aee5cfcf330386719e085aa1p+0Q, -0x1.ca3a85e30ebf60ba5eccc5b7b84bp-2Q, 0x1.f2911f6caea6ac421bc7b6d2ce04p+0Q, -0x1.902df5acb98563fb6c85941263b7p+0Q, 0x1.6e5d8a32fe3ae7b3c23b4e6e9c7ap-1Q, -0x1.7cd7499a11b87c3bc4909e0bdb58p-5Q, -0x1.cb51389df1436d54630b5c4050fbp-3Q, 0x1.8970fdea96db48b13c52294d029p-3Q, -0x1.2e3ba43116d4ee1d14ccd7ef1eb6p-4Q, 0x1.a437288ed51ab324c667ecc7c439p-9Q, 0x1.5d8afaeb5ec2a57500ea441b58aap-7Q, -0x1.3f213a25a4c39a4ee9f8ca7fc5f5p-8Q, 0x1.438df66495fed0569b1e6607263bp-11Q, 0x1.92aacb344e1aac45946a6dd95b1dp-13Q, -0x1.4a2a2b6937dca67c2fb96409eaabp-14Q, 0x1.061494c076ea4c2b5c794f2371b4p-17Q, 0x1.1c61500cd5ff603bf7260846f007p-21Q, -0x1.fed404b96c72e77fac42699e644dp-24Q, 0x1.9900fa8d5cb81723cdb543a2521ap-29Q, 0x1.4b71c6cbb7be353ab93ac21700e3p-33Q, -0x1.f4e20f23251aa513b13eb0ad0eafp-40Q, -0x1.ae764159a5bb5c8d340066c07578p-50Q, 0x1.0753e4c918ed6b59ce15c4a9365bp-59Q, -0x1.1725d8c4676c38ff70e1cc359512p-79Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.b6406454732d4d440405d44a6611p-3Q, 0x1.b949541f458cd808c01c6f443873p-1Q, -0x1.49bc84198d8eee0e1769477dce8bp+2Q, 0x1.255157167a5528a3714c438e28f7p+3Q, -0x1.254591e8b6e06babda61e0b5bc24p+3Q, 0x1.bfdd01aa9e6916b30d7fb866c97ap+2Q, -0x1.258cb0e12f407e788c8d24c0406ap+2Q, 0x1.244b687910817f75269b9b13caa9p+1Q, -0x1.76e9c86768fd81ae0140e512e5cp-1Q, 0x1.2db90e1b7e223907d65e185884b8p-3Q, -0x1.adc00aab7f786622c376bd60af55p-4Q, 0x1.077b01cdc29a9bffc5581309684ap-3Q, -0x1.4e1bd3d7c8106ffe51d90e2985dp-4Q, 0x1.a8b1719f76969f8051acdf38be11p-6Q, -0x1.1b67a8fdd5d395a5e1003bc2f0a6p-9Q, -0x1.5aa2219e8b072017d97056f43e75p-10Q, 0x1.0c296ebe05b6e9c7cf2917908c1fp-11Q, -0x1.315112d6e2648d659715640ab8d6p-14Q, -0x1.aa34a64782e3fdc563417214521bp-23Q, 0x1.718ac2125512de66d6a9b5d7a901p-20Q, -0x1.4ed202350e6d4103a23efe8129dbp-25Q, -0x1.6a2c3e7b115c942fffc924e2bab2p-29Q, 0x1.03cb1bd946e2daf6230de1903bdbp-35Q, 0x1.d2ce73e99c2943d672b79f3e0a48p-46Q, -0x1.110d7f1b0bfbfc4b48ffe17563d9p-54Q, 0x1.2175be08d4af39d29c43830b683bp-73Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.b6406454732d4d440405d44a6a49p-3Q, 0x1.b949541f458cd808c01c6f4442bcp-1Q, -0x1.49bc84198d8eee0e1769477dd34dp+2Q, 0x1.255157167a5528a3714c438e2bbbp+3Q, -0x1.254591e8b6e06babda61e0b5bd92p+3Q, 0x1.bfdd01aa9e6916b30d7fb866cb4dp+2Q, -0x1.258cb0e12f407e788c8d24c043p+2Q, 0x1.244b687910817f75269b9b13d0aap+1Q, -0x1.76e9c86768fd81ae0140e512f91dp-1Q, 0x1.2db90e1b7e223907d65e1858ad53p-3Q, -0x1.adc00aab7f786622c376bd60c25fp-4Q, 0x1.077b01cdc29a9bffc55813096431p-3Q, -0x1.4e1bd3d7c8106ffe51d90e297c64p-4Q, 0x1.a8b1719f76969f8051acdf38ae9p-6Q, -0x1.1b67a8fdd5d395a5e1003bc2df39p-9Q, -0x1.5aa2219e8b072017d97056f432f5p-10Q, 0x1.0c296ebe05b6e9c7cf2917908081p-11Q, -0x1.315112d6e2648d659715640aac77p-14Q, -0x1.aa34a64782e3fdc563417212e36cp-23Q, 0x1.718ac2125512de66d6a9b5d79809p-20Q, -0x1.4ed202350e6d4103a23efe811aep-25Q, -0x1.6a2c3e7b115c942fffc924e2aa83p-29Q, 0x1.03cb1bd946e2daf6230de1902b89p-35Q, 0x1.d2ce73e99c2943d672b79f3df3dfp-46Q, -0x1.110d7f1b0bfbfc4b48ffe175513cp-54Q, 0x1.2175be08d4af39d29c43830b5338p-73Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.9bd3bc24739608dd1ea07282ef41p-1Q, -0x1.218b20c923a72ab49d783c404613p+1Q, -0x1.8f073ee2485429a822c3452a2874p-2Q, 0x1.10368c3ad14ec0121ffa10bcc969p+3Q, -0x1.6e5fd027a16b3fa71b0c6884de45p+3Q, -0x1.fee6b19288528fc9912556543eabp-2Q, 0x1.5dae0c64ec100c07cb64ad03ec4bp+4Q, -0x1.253938fa65f9cdca9dcd99a85c53p+5Q, 0x1.0846ca351ee337bf1cde15fb1fccp+5Q, -0x1.d3379cfd6d392ab0067070da245ep+3Q, -0x1.bc1cbd5de053b1b3e6030ce1e12cp+1Q, 0x1.49e86d68d4cf8c86d821677a6f81p+3Q, -0x1.e4ade08c4a6c2c8507d0732937fap+2Q, 0x1.651f390634956dee37faca825966p+1Q, -0x1.14e32e1f9b6bac3d6ef9b66af2bep-2Q, -0x1.c20b1d287136abbd5724af5f5f6dp-3Q, 0x1.9dc73570ee73f3a5d7e75ae5a9e2p-4Q, -0x1.dbb9ebdd9c09deccb10201529186p-7Q, -0x1.c7f5c1ec60f696f9a40d5c3a09b9p-11Q, 0x1.a5fc856e52fad70c72c88b4e101ap-12Q, -0x1.07f65daa0049b089e54b5e4ff41ap-16Q, -0x1.0e378f07aff0a4003d557ea836c6p-20Q, 0x1.69bc58d5ec0ccbef38bec29b1e3ep-26Q, 0x1.872aa1bcf368769fc21e2888c6ffp-36Q, -0x1.7b84969608016d06bfce8c14af4bp-44Q, 0x1.92548cc9b5b71c86f11e27090a6cp-62Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.9bd3bc24739608dd1ea0727f797p-1Q, -0x1.218b20c923a72ab49d783c3c2182p+1Q, -0x1.8f073ee2485429a822c3456748ddp-2Q, 0x1.10368c3ad14ec0121ffa10beccc4p+3Q, -0x1.6e5fd027a16b3fa71b0c68881f6dp+3Q, -0x1.fee6b19288528fc99125553bcb88p-2Q, 0x1.5dae0c64ec100c07cb64acfb530ap+4Q, -0x1.253938fa65f9cdca9dcd99a2d96bp+5Q, 0x1.0846ca351ee337bf1cde15f6a892p+5Q, -0x1.d3379cfd6d392ab0067070d38b2ap+3Q, -0x1.bc1cbd5de053b1b3e6030cd2eb44p+1Q, 0x1.49e86d68d4cf8c86d82167732746p+3Q, -0x1.e4ade08c4a6c2c8507d0731ef456p+2Q, 0x1.651f390634956dee37faca7ade61p+1Q, -0x1.14e32e1f9b6bac3d6ef9b665a8dep-2Q, -0x1.c20b1d287136abbd5724af54edd7p-3Q, 0x1.9dc73570ee73f3a5d7e75adc1efap-4Q, -0x1.dbb9ebdd9c09deccb1020147719ep-7Q, -0x1.c7f5c1ec60f696f9a40d5c2f13dep-11Q, 0x1.a5fc856e52fad70c72c88b43b17bp-12Q, -0x1.07f65daa0049b089e54b5e492044p-16Q, -0x1.0e378f07aff0a4003d557ea13ebap-20Q, 0x1.69bc58d5ec0ccbef38bec2915824p-26Q, 0x1.872aa1bcf368769fc21e287db36p-36Q, -0x1.7b84969608016d06bfce8c098437p-44Q, 0x1.92548cc9b5b71c86f11e26fc3a07p-62Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.29b15e8e05f4922e7d4e472bcd8ap+1Q, -0x1.cfd365d6145278198eca9cdcf322p+3Q, 0x1.440caad9c12360807dafb40ee49dp+5Q, -0x1.116de9d813b38a3407c4631c8d59p+6Q, 0x1.3b639c503b3cf7fe4e22628885p+6Q, -0x1.0040f57e975e1a258b9875f60498p+6Q, 0x1.e6fde6a95ce32902224ee706d045p+4Q, 0x1.5c1e9e155aab7b67b6f07264ad9dp+3Q, -0x1.b1e5da7957b3c8fabda1d3079971p+5Q, 0x1.7d1f138d16b9d31aa2829abf2c4bp+6Q, -0x1.d6f4cad7bdd82bc575e84c099062p+6Q, 0x1.9fd808c31038fd9d9f982223f243p+6Q, -0x1.ecec6e1a57ab3b47a08d39c75c75p+5Q, 0x1.43fff7220eba3de58880abe282dap+4Q, 0x1.5e941cd01c02491042063bd5bee4p-2Q, -0x1.d2a0789936f63c584facf579998ap+1Q, 0x1.940e89f9fbe3b90fa47d37c5f5dep+0Q, -0x1.f62a7689777aabb4ab21adf5f4dbp-3Q, -0x1.2b3b3b35a204159ed027231f9fb4p-6Q, 0x1.3de2ba1c1b05528a92fff0293ae7p-7Q, -0x1.21cbeea2dd955597cbff136c8ae1p-11Q, -0x1.2150f65158193f62d7d7fa29a2c2p-15Q, 0x1.159bf889454c6b38325ea21f7134p-20Q, 0x1.b00f4f96ce85167dd0220fed62e7p-30Q, -0x1.21e8e13c855c01e5c446a2405ce7p-37Q, 0x1.33590911079747fc32e0ed899892p-54Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.29b15e8e05f4922e7d4e47048a9cp+1Q, -0x1.cfd365d6145278198eca9c82d9f8p+3Q, 0x1.440caad9c12360807dafb3bad1d1p+5Q, -0x1.116de9d813b38a3407c462c9c8afp+6Q, 0x1.3b639c503b3cf7fe4e226236b434p+6Q, -0x1.0040f57e975e1a258b9875fe1f17p+6Q, 0x1.e6fde6a95ce32902224ee9a0f717p+4Q, 0x1.5c1e9e155aab7b67b6f0684e8054p+3Q, -0x1.b1e5da7957b3c8fabda1cfa1992fp+5Q, 0x1.7d1f138d16b9d31aa28298c6d585p+6Q, -0x1.d6f4cad7bdd82bc575e84a0ae447p+6Q, 0x1.9fd808c31038fd9d9f9820868c69p+6Q, -0x1.ecec6e1a57ab3b47a08d37ee9238p+5Q, 0x1.43fff7220eba3de58880aab6571cp+4Q, 0x1.5e941cd01c024910420637b6b61bp-2Q, -0x1.d2a0789936f63c584facf37b3e67p+1Q, 0x1.940e89f9fbe3b90fa47d360fd472p+0Q, -0x1.f62a7689777aabb4ab21abcf7e27p-3Q, -0x1.2b3b3b35a204159ed02721cadaafp-6Q, 0x1.3de2ba1c1b05528a92ffeeb8fc2ep-7Q, -0x1.21cbeea2dd955597cbff120c27ccp-11Q, -0x1.2150f65158193f62d7d7f8ca1f69p-15Q, 0x1.159bf889454c6b38325ea0bd0aa7p-20Q, 0x1.b00f4f96ce85167dd0220db19d66p-30Q, -0x1.21e8e13c855c01e5c446a0ad86p-37Q, 0x1.33590911079747fc32e0ebbb9924p-54Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.3069c9b572d786eb96d928fa48f8p+2Q, -0x1.2e376983f6cb6b3abd6845551e34p+5Q, 0x1.1366d92966ea16320047797424ccp+7Q, -0x1.37b9852173f06f1765e1ff0e8531p+8Q, 0x1.ff3f2db6a15a3d87e9d7dfab891bp+8Q, -0x1.57d9383606e506f39f38559de18fp+9Q, 0x1.9e8b97533b1eae6eef5cca38387bp+9Q, -0x1.c556790a27e1d4367bdf83babbd1p+9Q, 0x1.af9eb47abc08e08daae8abacd91fp+9Q, -0x1.5e3047bf51b54c27591544583f14p+9Q, 0x1.efd9329bb40ff6440883f1147f56p+8Q, -0x1.337ec090261a5db68ef97d7b1236p+8Q, 0x1.1dd7e09a266914bfb2df709f94d8p+7Q, -0x1.34f8d53391e95dda3b7a1cf411e9p+4Q, -0x1.1b6423ffa4134de5e81b17a17c11p+5Q, 0x1.038ecbdebefe39ca7724b3c832fcp+5Q, -0x1.9f2073b507553852ed1a72469f32p+3Q, 0x1.0d3b2378aacf1f56c9dbd6da2754p+1Q, 0x1.b93ffbdcbcfbcafb2828e85b9cf7p-3Q, -0x1.00284db90f95b583e4f97482c916p-3Q, 0x1.5202609236b6be9cf16ae9fb3f51p-7Q, 0x1.4b9320a57f2323116dd63710b5p-11Q, -0x1.d3b085775602aad7427a22c98a84p-16Q, -0x1.e975304f420640f339ac29b10f7bp-25Q, 0x1.e5cecfa6ab7bb5421ef8ce75b514p-32Q, -0x1.0188e4a2f5a9df06f68769623342p-47Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.3069c9b572d786eb96d929d90cddp+2Q, -0x1.2e376983f6cb6b3abd68459b0db9p+5Q, 0x1.1366d92966ea16320047794482afp+7Q, -0x1.37b9852173f06f1765e1fe9f84p+8Q, 0x1.ff3f2db6a15a3d87e9d7df5b42f3p+8Q, -0x1.57d9383606e506f39f38563cb6bep+9Q, 0x1.9e8b97533b1eae6eef5ccc2c8b76p+9Q, -0x1.c556790a27e1d4367bdf86d03f05p+9Q, 0x1.af9eb47abc08e08daae8af537da6p+9Q, -0x1.5e3047bf51b54c2759154839c7dbp+9Q, 0x1.efd9329bb40ff6440883f8a40f82p+8Q, -0x1.337ec090261a5db68ef9839a3fcp+8Q, 0x1.1dd7e09a266914bfb2df7819245bp+7Q, -0x1.34f8d53391e95dda3b7a36e1f269p+4Q, -0x1.1b6423ffa4134de5e81b13aa374dp+5Q, 0x1.038ecbdebefe39ca7724b2c5d6b5p+5Q, -0x1.9f2073b507553852ed1a7122dc5cp+3Q, 0x1.0d3b2378aacf1f56c9dbd6033ed8p+1Q, 0x1.b93ffbdcbcfbcafb2828e4f8a1e6p-3Q, -0x1.00284db90f95b583e4f9723dea4p-3Q, 0x1.5202609236b6be9cf16ae5695042p-7Q, 0x1.4b9320a57f2323116dd63291deebp-11Q, -0x1.d3b085775602aad7427a1a128489p-16Q, -0x1.e975304f420640f339ac1f2721b2p-25Q, 0x1.e5cecfa6ab7bb5421ef8c106f4f7p-32Q, -0x1.0188e4a2f5a9df06f6875fecaac5p-47Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.f579b17074e36836eacdef034d32p+2Q, -0x1.13b9cbe766166f25c9dacf502f0ep+6Q, 0x1.0d0d0432bec134cd566f573a6ab7p+8Q, -0x1.309a86e68bfe9899fc0e7b2c0b24p+9Q, 0x1.b8e26231ea03e8ec859801e86e25p+9Q, -0x1.b08b284517ec42e681060fcc6182p+9Q, 0x1.3c7d2b26245024778e757ad1afa1p+9Q, -0x1.7e7def0dd6c17f062ac250175abcp+8Q, 0x1.9c880448390e60397d60bff8dd4cp+5Q, 0x1.dc1752cc2f2f84356ce88f9e5906p+8Q, -0x1.e54a03fbbc2fa46a839c73f788e9p+9Q, 0x1.1a42e1dae56904bbcf40d542b472p+10Q, -0x1.f903f4a18c30e32dc6c45f366ebp+9Q, 0x1.9d8db919083864fcc4e33e87dba9p+9Q, -0x1.34173ffb143e1d9eed0ece396b8p+9Q, 0x1.64eb3c27db564d469eb22cf2354cp+8Q, -0x1.0b0c43171fee5929daa625b8080cp+7Q, 0x1.5f0a5375d11c72dc55998ba597dbp+4Q, 0x1.d8f6b9f1522f2e96a9e605cbb38dp+1Q, -0x1.1c75896d6d598c65080cc6678602p+1Q, 0x1.f38ac1a749daef77915dd8d10d16p-3Q, 0x1.f82700b4dc7274aa9bdb17c1024cp-7Q, -0x1.1306135d4672f12980f476eef1d1p-10Q, -0x1.2dc514d6999140dbb2a33c5d5ad2p-19Q, 0x1.1d494ae1d331f410d690ac5ec36dp-25Q, -0x1.2e8464bcec8d40ffd77c2dc57367p-40Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.f579b17074e36836eacdf20b2124p+2Q, -0x1.13b9cbe766166f25c9dace3616b1p+6Q, 0x1.0d0d0432bec134cd566f5783ca25p+8Q, -0x1.309a86e68bfe9899fc0e86f2260fp+9Q, 0x1.b8e26231ea03e8ec859843dc6ce9p+9Q, -0x1.b08b284517ec42e68106ca8a8bc1p+9Q, 0x1.3c7d2b26245024778e76cf716fbfp+9Q, -0x1.7e7def0dd6c17f062ac5f280847p+8Q, 0x1.9c880448390e60397d83aacda54p+5Q, 0x1.dc1752cc2f2f84356ce375550f21p+8Q, -0x1.e54a03fbbc2fa46a8399b07d254cp+9Q, 0x1.1a42e1dae56904bbcf3f8f7fa5c7p+10Q, -0x1.f903f4a18c30e32dc6c260029f14p+9Q, 0x1.9d8db919083864fcc4e1ce713df3p+9Q, -0x1.34173ffb143e1d9eed0dd73c6925p+9Q, 0x1.64eb3c27db564d469eb11c515c5dp+8Q, -0x1.0b0c43171fee5929daa55b569994p+7Q, 0x1.5f0a5375d11c72dc55988338ff36p+4Q, 0x1.d8f6b9f1522f2e96a9e46aa5caf8p+1Q, -0x1.1c75896d6d598c65080bd27d32aap+1Q, 0x1.f38ac1a749daef77915c1d44f9d7p-3Q, 0x1.f82700b4dc7274aa9bd956d7234cp-7Q, -0x1.1306135d4672f12980f36c25a44ep-10Q, -0x1.2dc514d6999140dbb2a21c1d56f1p-19Q, 0x1.1d494ae1d331f410d68f7a178351p-25Q, -0x1.2e8464bcec8d40ffd77ac9bbd77ap-40Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.e32cc25ea4da498425dec5295c6bp+2Q, -0x1.1692ca6458ea9e38b44f5a5caee1p+6Q, 0x1.1fa09c1316dfb4b439ac84209c53p+8Q, -0x1.615e67f0c1ccc897da6e59c7c927p+9Q, 0x1.265c8c1b4b1aa4b3e36ae2efb333p+10Q, -0x1.7569ed1c8210ca209e4700bf211ep+10Q, 0x1.9e96bde5063d41cf09d912f51fep+10Q, -0x1.bbbe167a38d63287ecfd91133a36p+10Q, 0x1.be080201e737d36f7e786ff84c53p+10Q, -0x1.8f099bdabb21898e35971dfd6953p+10Q, 0x1.43b83815e15a62b284efdec504bp+10Q, -0x1.ee6ad68b3bda4ee4ba8a3ff07fd1p+9Q, 0x1.58d561cb84d267ecaf620ab5b2e6p+9Q, -0x1.a3b282a8407a310226d6a98bfd4cp+8Q, 0x1.c79d620ffafc0589079d1ba6c99bp+7Q, -0x1.bc78cb9447aa124d62b13f580945p+6Q, 0x1.418e35902e32cdd0c2f0c12b4efbp+5Q, -0x1.3abf360acc2f742d878f5bcabe87p+2Q, -0x1.ad7bb3867b3c2b046f8005354fafp+1Q, 0x1.a655024ebf2fd4378620fe654a6cp+0Q, -0x1.affdcd4718ba7f1a9653624c15d7p-3Q, -0x1.8341cd6c6b0a9d48905914abd48fp-7Q, 0x1.b55710d3ebf552b754e9b7ff147ep-10Q, 0x1.e321738ab144873b6e430caac23ep-19Q, -0x1.c53c1373c88584f948dc218ab05ap-24Q, 0x1.e0c270acb15c5fb504672c4070dp-38Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.e32cc25ea4da498425dfec2497a6p+2Q, -0x1.1692ca6458ea9e38b45000f9e974p+6Q, 0x1.1fa09c1316dfb4b439ad2e78bb59p+8Q, -0x1.615e67f0c1ccc897da6f2d005018p+9Q, 0x1.265c8c1b4b1aa4b3e36b99e4a1a9p+10Q, -0x1.7569ed1c8210ca209e47f9d0511cp+10Q, 0x1.9e96bde5063d41cf09da3c270b93p+10Q, -0x1.bbbe167a38d63287ecfeda29fbbep+10Q, 0x1.be080201e737d36f7e79bffa876fp+10Q, -0x1.8f099bdabb21898e359857d34007p+10Q, 0x1.43b83815e15a62b284f0ee906572p+10Q, -0x1.ee6ad68b3bda4ee4ba8bf16f4fabp+9Q, 0x1.58d561cb84d267ecaf633fb5a5d5p+9Q, -0x1.a3b282a8407a310226d833dadcd5p+8Q, 0x1.c79d620ffafc0589079eea90279ap+7Q, -0x1.bc78cb9447aa124d62b31a0a7f54p+6Q, 0x1.418e35902e32cdd0c2f21fb873ep+5Q, -0x1.3abf360acc2f742d879127375bb2p+2Q, -0x1.ad7bb3867b3c2b046f80e1cb0482p+1Q, 0x1.a655024ebf2fd4378622021ee814p+0Q, -0x1.affdcd4718ba7f1a965455b89c8ep-3Q, -0x1.8341cd6c6b0a9d48905a1ecfc91fp-7Q, 0x1.b55710d3ebf552b754ea432b16e1p-10Q, 0x1.e321738ab144873b6e4379081333p-19Q, -0x1.c53c1373c88584f948dc39838bd8p-24Q, 0x1.e0c270acb15c5fb50466c4df9e1p-38Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.8d1f8a32797636f66137fdd0b5a1p+2Q, -0x1.d4881995a0c1ea2394012c228a31p+5Q, 0x1.e86d414a78e33b3180b504d86b91p+7Q, -0x1.280027c9b087591ad85eeab44da9p+9Q, 0x1.d3eb5f0b0594c2750ef22285fa37p+9Q, -0x1.0b82a55c2799ede8dec310d6a2c6p+10Q, 0x1.07ce9f70ddb2869a6583adf6dec9p+10Q, -0x1.0d7822536789d9033e721121699dp+10Q, 0x1.0df61d2a506b1f8fcfe8714e12afp+10Q, -0x1.c6893ac6cda6b55a49442539d592p+9Q, 0x1.45ac9e808978822ff4aec18a24f6p+9Q, -0x1.c9d686e237043dec7c0766428b6p+8Q, 0x1.35c4c3819b30f9b6fdd7719012dbp+8Q, -0x1.4a58be360f4f421d89ea2c96a33ep+7Q, 0x1.017559c35f7610aa1b74c79cf6fcp+6Q, -0x1.5d1ba7f13474232b930160e8fda2p+4Q, 0x1.dadd49a935c8394385dd6633289ep+1Q, 0x1.87b01fd4326a3668ccbada1018e4p+2Q, -0x1.9ab15d247f90f9fe7c9c31997416p+2Q, 0x1.46cd6a0d33a48aafbbc2d2b2efc4p+1Q, -0x1.8955d7defe0d52172967ed8290b5p-2Q, -0x1.85244f4e65bbc4ccef79bedeb2b3p-7Q, 0x1.6f86d3c43106164aba3a27d3b092p-8Q, 0x1.1b4e3c12a74dff21568f7bbd6f64p-16Q, -0x1.7914d82d3193f580c3333edc5ffbp-21Q, 0x1.903b4b44dd8c7c0a4e6f8896b442p-34Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.8d1f8a32797636f661365be0e3e6p+2Q, -0x1.d4881995a0c1ea2393ff422e453fp+5Q, 0x1.e86d414a78e33b3180b306c7fb52p+7Q, -0x1.280027c9b087591ad85db337ae83p+9Q, 0x1.d3eb5f0b0594c2750ef02a700404p+9Q, -0x1.0b82a55c2799ede8dec1e33e1dcdp+10Q, 0x1.07ce9f70ddb2869a658274b505f1p+10Q, -0x1.0d7822536789d9033e70cbead7bap+10Q, 0x1.0df61d2a506b1f8fcfe72d1ca4cdp+10Q, -0x1.c6893ac6cda6b55a4941f5e57261p+9Q, 0x1.45ac9e808978822ff4ad1899b3b8p+9Q, -0x1.c9d686e237043dec7c04f88fd885p+8Q, 0x1.35c4c3819b30f9b6fdd5c67ec132p+8Q, -0x1.4a58be360f4f421d89e83ecf3267p+7Q, 0x1.017559c35f7610aa1b72e5e5a83p+6Q, -0x1.5d1ba7f13474232b92fdf4e5cb84p+4Q, 0x1.dadd49a935c8394385d3a3bdf6d5p+1Q, 0x1.87b01fd4326a3668ccbb1eed227dp+2Q, -0x1.9ab15d247f90f9fe7c9b6b3dd567p+2Q, 0x1.46cd6a0d33a48aafbbc221eb1f48p+1Q, -0x1.8955d7defe0d5217296739d07f07p-2Q, -0x1.85244f4e65bbc4ccef7883bc8ba1p-7Q, 0x1.6f86d3c43106164aba39dbfe0b2fp-8Q, 0x1.1b4e3c12a74dff21568f59de83f3p-16Q, -0x1.7914d82d3193f580c3335f167104p-21Q, 0x1.903b4b44dd8c7c0a4e702124dc3fp-34Q, 0x0p+0Q}; } if constexpr (order == 10) { - return {0x0p+0Q, 0x1.041a0a897aa28eb3a0d59e3420dep+1Q, -0x1.3658b5d77609e7977d40f266e1abp+4Q, 0x1.5194af04e2f848c2193a50575354p+6Q, -0x1.c3df81f0aaf28bccb605744a68dcp+7Q, 0x1.ad183e8db3dabe867a16ea08db03p+8Q, -0x1.3d9c782d7007715e1138bf8d8bf5p+9Q, 0x1.852da35362a6d4101e0c1842b371p+9Q, -0x1.9cca18f6947dd0d5bebb456e26c7p+9Q, 0x1.9a6efa498935e2e3d81571c175b7p+9Q, -0x1.a300c2ebdd39d2620495c5f7e961p+9Q, 0x1.a735477cbff1b966c87efc4ff1fep+9Q, -0x1.7a384b1c312fbe2a2f241ae26c7ep+9Q, 0x1.2afd886ee72d716fc61db8011095p+9Q, -0x1.d0f63946d275b18c0f2f2351b8f4p+8Q, 0x1.6384c4a13f54dc153d6b4654b173p+8Q, -0x1.d6c269ce8bf34e1952e45981a53dp+7Q, 0x1.08982647617ff8ae60a05f4fb227p+7Q, -0x1.1f7e83a0711235a83ba8d41f6e49p+6Q, 0x1.2a5701b5bea0dde347c9c6a1a0bfp+5Q, -0x1.c18aa4ec1159b6d22d408f93473cp+3Q, 0x1.4dc13861658a8dd406c58e6b6d01p+1Q, 0x1.bd5ac19033244ca1bfd76ff5f84ap-5Q, -0x1.1aa94170fffad7174e6a949842fp-4Q, -0x1.97678bd8dc9fa54b7e11dee71cb2p-14Q, 0x1.25b3fc23ddcf5fe31e8523af1987p-16Q, -0x1.381fef501218e9cc3debb9c868adp-28Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.041a0a897aa28eb3a0ccade17e3cp+1Q, -0x1.3658b5d77609e7977d3641db3a11p+4Q, 0x1.5194af04e2f848c21930873e900ap+6Q, -0x1.c3df81f0aaf28bccb5fed61687cfp+7Q, 0x1.ad183e8db3dabe867a1b1e1d7e93p+8Q, -0x1.3d9c782d7007715e1144e807f092p+9Q, 0x1.852da35362a6d4101e229e2b5077p+9Q, -0x1.9cca18f6947dd0d5bed4aff692d8p+9Q, 0x1.9a6efa498935e2e3d82e1fd52122p+9Q, -0x1.a300c2ebdd39d26204b2e2ccd8bdp+9Q, 0x1.a735477cbff1b966c8a20eaae97p+9Q, -0x1.7a384b1c312fbe2a2f45b3550037p+9Q, 0x1.2afd886ee72d716fc638e75f48b8p+9Q, -0x1.d0f63946d275b18c0f5c2756f025p+8Q, 0x1.6384c4a13f54dc153d90136891aap+8Q, -0x1.d6c269ce8bf34e1953164b65a3d5p+7Q, 0x1.08982647617ff8ae60bccefbfe0fp+7Q, -0x1.1f7e83a0711235a83bc8e025bd62p+6Q, 0x1.2a5701b5bea0dde347ec02073e97p+5Q, -0x1.c18aa4ec1159b6d22d740e4f35cdp+3Q, 0x1.4dc13861658a8dd406eb1a845d5ap+1Q, 0x1.bd5ac19033244ca1c006b305a421p-5Q, -0x1.1aa94170fffad7174e8899965ff8p-4Q, -0x1.97678bd8dc9fa54b7e4c01f3ba2ap-14Q, 0x1.25b3fc23ddcf5fe31ea2281e4301p-16Q, -0x1.381fef501218e9cc3e0863bb3cadp-28Q, 0x0p+0Q}; } if constexpr (order == 11) { - return {0x0p+0Q, 0x1.456a1d2a45d0d4e9e190da6b0253p+0Q, -0x1.86731e38f2c9e9bd245d8c21307ep+3Q, 0x1.99ddae9b5957da8932ffd7759bbep+5Q, -0x1.ebccc1d5d759a0cf4ae087b81294p+6Q, 0x1.74f85dd906948af50c25a724f709p+7Q, -0x1.8426225b26443b4ef3ccb7b8d05cp+7Q, 0x1.4fbcc1bdf3f1963c49ab7f076eabp+7Q, -0x1.4776c0e99319f61e68a708d5d7adp+7Q, 0x1.573bef3fda7eadeaaa4494427daep+7Q, -0x1.2b0c271bd883e242fddb7fb5c9c1p+7Q, 0x1.bb5bca80b624fa5bb27c8fee01a2p+6Q, -0x1.5808025c93fa4e6af5aadac355cep+6Q, 0x1.0c1df40cf5e4c4ea44443af3add6p+6Q, -0x1.5dea01151a3e197eb05656a3cb23p+5Q, 0x1.997fc95198573b527728fd6a3ac8p+4Q, -0x1.f5c4140f2a03e036d1612965ff32p+3Q, 0x1.1578f4041624b0e3ebbe577cc0e3p+3Q, -0x1.e11a4c47848258b137fd42f6f749p+1Q, 0x1.8c2f5a8cae553e89ef2299c46ab4p+0Q, -0x1.42cdddde9b71e8354b8f6892a693p-1Q, 0x1.1b37523680cd9a16c0e89cedee59p-3Q, 0x1.61bca3fd3effb1c3f582ac5eba63p-7Q, -0x1.eeca78cc1dd9a8d407ad8882646ep-8Q, 0x1.427b3775515b64598a1525510bb3p-14Q, 0x1.1c6c30fb5472c91c3ee448e49edcp-18Q, -0x1.2f056506ce5e619914cfa74f5c81p-29Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.456a1d2a45d0d4e9e18e4013bda3p+0Q, -0x1.86731e38f2c9e9bd245a6d7f6e86p+3Q, 0x1.99ddae9b5957da8932fc9013b15ep+5Q, -0x1.ebccc1d5d759a0cf4adc92beb271p+6Q, 0x1.74f85dd906948af50c229b89c98dp+7Q, -0x1.8426225b26443b4ef3c972f9489bp+7Q, 0x1.4fbcc1bdf3f1963c49a88c06aa08p+7Q, -0x1.4776c0e99319f61e68a41fbe42b3p+7Q, 0x1.573bef3fda7eadeaaa4191468e3p+7Q, -0x1.2b0c271bd883e242fdd8d9725e0bp+7Q, 0x1.bb5bca80b624fa5bb278816db9f3p+6Q, -0x1.5808025c93fa4e6af5a7ad436556p+6Q, 0x1.0c1df40cf5e4c4ea4441c80693a5p+6Q, -0x1.5dea01151a3e197eb05317c268edp+5Q, 0x1.997fc95198573b5277250e908707p+4Q, -0x1.f5c4140f2a03e036d15c57dbb36p+3Q, 0x1.1578f4041624b0e3ebbbb44abecfp+3Q, -0x1.e11a4c47848258b137f885157e3p+1Q, 0x1.8c2f5a8cae553e89ef1e861ef5b3p+0Q, -0x1.42cdddde9b71e8354b8c2fb7c09ep-1Q, 0x1.1b37523680cd9a16c0e5dc3ebd03p-3Q, 0x1.61bca3fd3effb1c3f5807afcb9adp-7Q, -0x1.eeca78cc1dd9a8d407a9b1f6577bp-8Q, 0x1.427b3775515b64598a140f609c8fp-14Q, 0x1.1c6c30fb5472c91c3ee2a25808b3p-18Q, -0x1.2f056506ce5e619914ce605b0524p-29Q, 0x0p+0Q}; } if constexpr (order == 12) { - return {0x0p+0Q, 0x1.45a484f799a722e4cd93e3b2b27ep-2Q, -0x1.87cf9eab4f40073db99d0811247ap+1Q, 0x1.99aecd437634b1af52fa61911031p+3Q, -0x1.e335dd2c6e9de306d05b0cd1cef8p+4Q, 0x1.5e3841e2195098fae8b63a8bc104p+5Q, -0x1.48839e048b83d3127ebd4015d2fap+5Q, 0x1.e11a7f30735e301f0eb1189e687ap+4Q, -0x1.bff27724d4103b12e928ab4222e3p+4Q, 0x1.f68b6fe2ccc3168c1a13f5cdae6fp+4Q, -0x1.a9c89c30bca221a764aca7ca6dcfp+4Q, 0x1.147ddad811d2b11feabd90554e5p+4Q, -0x1.a10ee0eb1ccb64a80031cb887a99p+3Q, 0x1.5d8b9ffe3cdb891325e866af6c37p+3Q, -0x1.b0eebf69279efaf954db661df6b8p+2Q, 0x1.b180929e1a69b7ef5326dddd752dp+1Q, -0x1.11a2d370771ca7d9ba7b5ac54127p+1Q, 0x1.45b0d998cab377e10ef261593991p+0Q, -0x1.d74083eaced416102c8bdf26f325p-2Q, 0x1.27c1113b5bdb797524261b6d46bap-3Q, -0x1.2ee6a8512694e4da2e59c12b6ea6p-4Q, 0x1.0ad11030da22955532efbb615d1ap-6Q, 0x1.b719ad4ae715fb13a423a1010a46p-8Q, -0x1.7b5726cd7507b577ab862e7a3077p-9Q, 0x1.efe0e7fbce7f41797c6619cc6d2bp-14Q, 0x1.116839f7247ae044e8df44cc0f86p-18Q, -0x1.24c158fd367df5563092d5399988p-28Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.45a484f799a722e4cd950a09d5fbp-2Q, -0x1.87cf9eab4f40073db99e6a0fb481p+1Q, 0x1.99aecd437634b1af52fbd40a01bcp+3Q, -0x1.e335dd2c6e9de306d05cc358c6bp+4Q, 0x1.5e3841e2195098fae8b77b691b21p+5Q, -0x1.48839e048b83d3127ebe74020885p+5Q, 0x1.e11a7f30735e301f0eb2ede8063fp+4Q, -0x1.bff27724d4103b12e92a64b54c9dp+4Q, 0x1.f68b6fe2ccc3168c1a15db6eeebdp+4Q, -0x1.a9c89c30bca221a764ae454bfb09p+4Q, 0x1.147ddad811d2b11feabea5bba8adp+4Q, -0x1.a10ee0eb1ccb64a80033704ddb98p+3Q, 0x1.5d8b9ffe3cdb891325e9bfc9fb55p+3Q, -0x1.b0eebf69279efaf954dd166c21dep+2Q, 0x1.b180929e1a69b7ef5328a0cfd4a4p+1Q, -0x1.11a2d370771ca7d9ba7c7444df33p+1Q, 0x1.45b0d998cab377e10ef3a92e12dfp+0Q, -0x1.d74083eaced416102c8dd2af61fp-2Q, 0x1.27c1113b5bdb7975242772f43479p-3Q, -0x1.2ee6a8512694e4da2e5b07f1c606p-4Q, 0x1.0ad11030da22955532f0e66e0c83p-6Q, 0x1.b719ad4ae715fb13a424d63fb241p-8Q, -0x1.7b5726cd7507b577ab874fe8a876p-9Q, 0x1.efe0e7fbce7f41797c67293a0937p-14Q, 0x1.116839f7247ae044e8dfdefe7163p-18Q, -0x1.24c158fd367df5563093507c0edcp-28Q, 0x0p+0Q}; } if constexpr (order == 13) { - return {0x0p+0Q, 0x1.439a95b32a47eb5722e3fe0fb9bbp-5Q, -0x1.85e5f8ce20b701780e206438509dp-2Q, 0x1.959ab595a2ea47cca9401bb631dfp+0Q, -0x1.d591277dff53d8dcf592be17f8e1p+1Q, 0x1.43a6564933b3f0805a5abb1bb626p+2Q, -0x1.0a2c05cc597aaccc032e0cf740cp+2Q, 0x1.273950f6ffd17ee92b3278320e9fp+1Q, -0x1.050c8b9cb84b7c5048bc8a039239p+1Q, 0x1.600ea820111d062fdf2aa3ec8771p+1Q, -0x1.21f61a844a104f06b392ed4a3d9ep+1Q, 0x1.19f0e6ef31a0d26707b469b32ea9p+0Q, -0x1.8e2103144a726110a5663399778ep-1Q, 0x1.a07f2894f970eb1bd26c87860d76p-1Q, -0x1.ccce8527cee5c45450ee4b3e11ffp-2Q, 0x1.e56137866a8254327c31b42ae307p-4Q, -0x1.5df48c0c87cd72cb9ba718d2f9cp-4Q, 0x1.19d3f039c46cde096e5a0e03efccp-4Q, -0x1.9e6cd0f61f4caa9b0d4d30e7aa99p-9Q, -0x1.b966bdf45728a5a5bb305da1c562p-7Q, 0x1.8240771a20727b5953c65907a26p-9Q, -0x1.1b05a2f57f924748a24f59ba5cdcp-9Q, 0x1.7f8554959f4a532982e2e14a363ap-9Q, -0x1.23710df832eb1845bb5334680795p-10Q, 0x1.cc575afdf3f3ce7d0de6d2cce6aep-14Q, 0x1.1f238196ae22e33d868784888e07p-18Q, -0x1.3697e9bf43069ef0c328e5cc56bbp-27Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.439a95b32a47eb5722e3cd7fe3cap-5Q, -0x1.85e5f8ce20b701780e2029b7ff55p-2Q, 0x1.959ab595a2ea47cca93fdec47d03p+0Q, -0x1.d591277dff53d8dcf59277336155p+1Q, 0x1.43a6564933b3f0805a5a899c5bb9p+2Q, -0x1.0a2c05cc597aaccc032de2cc831fp+2Q, 0x1.273950f6ffd17ee92b32456caf9bp+1Q, -0x1.050c8b9cb84b7c5048bc5cd2f92ep+1Q, 0x1.600ea820111d062fdf2a6acf661cp+1Q, -0x1.21f61a844a104f06b392bde6725p+1Q, 0x1.19f0e6ef31a0d26707b436c0ada9p+0Q, -0x1.8e2103144a726110a565e981ea79p-1Q, 0x1.a07f2894f970eb1bd26c4012674ap-1Q, -0x1.ccce8527cee5c45450edf8973a9cp-2Q, 0x1.e56137866a8254327c313c62b4d6p-4Q, -0x1.5df48c0c87cd72cb9ba6c6b9ceadp-4Q, 0x1.19d3f039c46cde096e59d4adaef2p-4Q, -0x1.9e6cd0f61f4caa9b0d4bb0b897fp-9Q, -0x1.b966bdf45728a5a5bb304f91c5cp-7Q, 0x1.8240771a20727b5953c676de8a9p-9Q, -0x1.1b05a2f57f924748a24f50e9e6eep-9Q, 0x1.7f8554959f4a532982e2ba397a2fp-9Q, -0x1.23710df832eb1845bb5316dc1abfp-10Q, 0x1.cc575afdf3f3ce7d0de6ac81f14p-14Q, 0x1.1f238196ae22e33d86876e9e195ep-18Q, -0x1.3697e9bf43069ef0c328d37a1aebp-27Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00115293332509096742962333483892313856362688845269995659187394173081837979723"), boost::lexical_cast("0.115048275548763287879127945985463599972775459285064004095554421826950893087"), boost::lexical_cast("0.796989658584277062411937010559864103043001629105734220965026462739268209643"), boost::lexical_cast("0.261282555787182265882706163765054116695305731989757725047913151702289063990"), boost::lexical_cast("-0.304792526251077945867767239314414983616168566481167348823874432025337651187"), boost::lexical_cast("0.206177381720140253354071811928730787659997169191432596424777801677056654936"), boost::lexical_cast("-0.108990380164014469211374498205641904963307679906212370075411833415284835295"), boost::lexical_cast("0.0414323567767714336655575435550014435859114005804252743467739002617028032556"), boost::lexical_cast("-0.00740550451904298413275770194104519624796412659431510963194058424609244583855"), boost::lexical_cast("-0.00265190650453840226202382246051294213464963751920614087594043518495040017701"), boost::lexical_cast("0.00240210420772995773725343184085600070474699593300395536783639652419272638655"), boost::lexical_cast("-0.000695275865120426856318173618858975815994589786388847596433982307511410977064"), boost::lexical_cast("0.0000191974030759909635472313378575369891683691026590204627382371876560571031362"), boost::lexical_cast("0.0000369086435191623599908102272586735250422568493003535062380722233574951016029"), boost::lexical_cast("-0.00000415287237890283585845050020110906559871983453862988696226792814210793873275"), boost::lexical_cast("-0.00000213293271762831680444514966056532349654366183092419194511477231701438124426"), boost::lexical_cast("0.000000519152984288816673375386899946665294276591318147000925448293729776300076533"), boost::lexical_cast("-0.00000000868932288799631112269973020748320326319607540201446697303589532523058640376"), boost::lexical_cast("-0.00000000353885033203391238239173859710183402146968653187882395070568528196527541446"), boost::lexical_cast("0.000000000195263099667140461506853591672068520568701722861147310552025237678358948376"), boost::lexical_cast("-0.00000000000760118658661622931484977499946668576063487666390672568814742992660278581129"), boost::lexical_cast("-0.000000000000134025692809696893389568339892947369168469910164958708207111959469432500771"), boost::lexical_cast("0.00000000000000142003995353734011507760517926628916988777854097085265899981211240745997152"), boost::lexical_cast("0.00000000000000000158532613505743630429831947577865370489228544853275053068484397376569424042"), boost::lexical_cast("-0.000000000000000000000355030930001146155860382376996084936412851909339999461687756186476889838277"), boost::lexical_cast("0.0000000000000000000000000000897306502669997242383001671446525458224541863620223787779391644190926610050"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00781098944203546971796976286517434035884009688773248606224515220005414202600"), boost::lexical_cast("0.352022489829734113542431984005808736473724699510524912312303517596181907952"), boost::lexical_cast("0.655045582260019530471586793705288409958328082576128477269067038800474460343"), boost::lexical_cast("-1.61514753125980808044495957120916454545964651551944410129115969858552545691"), boost::lexical_cast("0.965045518121368371649657414431609409876079256511530108438864454295064039152"), boost::lexical_cast("-0.613862904376251107603567359503339925389993434358836078881583881755180373456"), boost::lexical_cast("0.411202640895789674547585554456016331268606109870526886150894523201400069359"), boost::lexical_cast("-0.248670727161188410367077352077023110486766838261792327161508712754116165892"), boost::lexical_cast("0.121074212103689294850946226679458285881379881523239286723535403732539992908"), boost::lexical_cast("-0.0441123812800529610355488980147434896876334272618270449617517207697232204447"), boost::lexical_cast("0.0113462062209348030398079804396363956598508998796900777431886698352753187169"), boost::lexical_cast("-0.00193201430777827515696813853521806116958501580116959470619810785172817252196"), boost::lexical_cast("0.000131458959852363274552068404289595280980320518543359612758830152196452510244"), boost::lexical_cast("0.0000907640061777183255547701282076901148256668421380966288924343020509113784790"), boost::lexical_cast("-0.0000556465237685112725274835827463099540776609744280841662958102231266930097713"), boost::lexical_cast("0.0000110930471347758540199575897934132437541479940508074917148850579912551630419"), boost::lexical_cast("0.000000540163721305599951324898771320582892046233366679859045334581706862592762034"), boost::lexical_cast("-0.000000258336622635775732966000369446951153794507695432350051229799820914271331972"), boost::lexical_cast("-0.0000000327968834281282285800082226655395639101026250341990601757011633171502265437"), boost::lexical_cast("0.000000000916488171514711030622268872903433690707685750686927346624592740598447942041"), boost::lexical_cast("0.0000000000765257940990005274758907789178871368045869308567592594682817218494349636475"), boost::lexical_cast("-0.00000000000113806898255625919280795529887274235588918418565838791672065942227585229403"), boost::lexical_cast("0.0000000000000201367733903050668198447517300557877789704362876084808722846353524567227922"), boost::lexical_cast("-0.0000000000000000444836034640325638288709395930623143471945459846091722425723736229604149591"), boost::lexical_cast("-0.0000000000000000000103956338676397028751708008201484812724312022305577756338111796159549805791"), boost::lexical_cast("0.00000000000000000000000000525480561641109164137864688009776045386815264957861417756490150159142136333"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0450303798117733589231798330957691280417239896756051304263138384820087822720"), boost::lexical_cast("0.797382848905352224261209402370274675556632019052816074828369432733398437194"), boost::lexical_cast("-1.35210698233259733766168097865537427607660034980120464334236932299708410774"), boost::lexical_cast("-0.447488872512337268222446766248936491151740076284709909184963796609707232255"), boost::lexical_cast("1.94752689746260427086971810378552771942897218308070519347370198965733742471"), boost::lexical_cast("-1.56320128886138359744668398388042143870937778524339089182916328446012293685"), boost::lexical_cast("0.715557402348272306878574425353637462359702067943253760692428908902502127827"), boost::lexical_cast("-0.0464893758331106893607592418969309234589119778040679971376996748085292908751"), boost::lexical_cast("-0.224276010818501093466222589488380871765384010383119945740817975057642024404"), boost::lexical_cast("0.192110046121212755900487444382509639513398567516218319022991979288220691964"), boost::lexical_cast("-0.0737873471966185978956886225677444795250476204861205019199449953274778830157"), boost::lexical_cast("0.00320598955242186941919016686957021369970437347319710965669749910809644144859"), boost::lexical_cast("0.0106672024910406572727634384630232126394512616065206839400078471641232182677"), boost::lexical_cast("-0.00486953420262908335767503491652246905399023769268129286510776073032697296330"), boost::lexical_cast("0.000617131311240191212204138459081818690294990133002525462438346490707490327298"), boost::lexical_cast("0.000192006665779021389446223341431010819375175205853618100042995321802178648239"), boost::lexical_cast("-0.0000787174045799788843691997530421226394107444626942089306529661594079889645065"), boost::lexical_cast("0.00000781060441650629506094363225086284470818832491361256882121071831394044465309"), boost::lexical_cast("0.000000529699265431996299782049699978331676802370855121232208197190378200993391878"), boost::lexical_cast("-0.000000118936457924373854837977028298636171996098002951110364373678539575607515220"), boost::lexical_cast("0.00000000297589448108271162186173745281562110809351136810307857224663251378623404416"), boost::lexical_cast("0.000000000150723480889045397495951808812346145543547998873595419531555416151101740824"), boost::lexical_cast("-0.00000000000177949404003867596126708357294529070318811557365468246834172229163385065083"), boost::lexical_cast("-0.00000000000000149346484715446421742389146635163953260098009858086983961700451264624854098"), boost::lexical_cast("0.00000000000000000178437796860002852739466568338831019080176013249284982357396229767567234102"), boost::lexical_cast("-0.00000000000000000000000180395062763246722611480959764856761895616090783365686732209021823579303995"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.213990005328375555135472755123681140600857383942097187754813778508021364188"), boost::lexical_cast("0.861887577836364549248175536802065478416096122297736989669377523212045471882"), boost::lexical_cast("-5.15213110442549193951604232130937181308428404117234799001678258735956565095"), boost::lexical_cast("9.16617922201354414096203125317498717808490325566889445742435609535893499012"), boost::lexical_cast("-9.16474242641471677731657141502679363538951319294421818226908853664694404748"), boost::lexical_cast("6.99786416685096083753063339505540880226836092318161102091793537672115020197"), boost::lexical_cast("-4.58671209326440268266270834820616632025849613943982416213412034046663096202"), boost::lexical_cast("2.28355127250052801373193408526992202651493499277936659476824160108001663527"), boost::lexical_cast("-0.732252371428780979843072193742624736624407830994183828051335649974997274856"), boost::lexical_cast("0.147325620855341831283808507199341730144107370475895883352377534229959735834"), boost::lexical_cast("-0.104919473342276336806466603437472988232748900776758986519994396324472688826"), boost::lexical_cast("0.128652586070825684925857427195986593237515170617045438297383145109698161719"), boost::lexical_cast("-0.0815695071328300519374023680966951688787126896982976686941014234357114383306"), boost::lexical_cast("0.0259212121580757805545526931754301057596596343151488765977950290614602386512"), boost::lexical_cast("-0.00216220796475466148613393323709898748149018273039190022024143151723111058925"), boost::lexical_cast("-0.00132230119892098570617802910816943973223564708652310398004809061573967486877"), boost::lexical_cast("0.000511478130422611034647765921441315956001733118732698933562593619541749240757"), boost::lexical_cast("-0.0000727931722918291769533207689510068034174609274026487647576221227404443932148"), boost::lexical_cast("-0.000000198467477327859725151632668232927044265781371367599997004215442660984250173"), boost::lexical_cast("0.00000137665131612781247758064430980951835019601684631521207530971741938647123521"), boost::lexical_cast("-0.0000000389782183547484796734257149006560609838069041845630777046077009454055077516"), boost::lexical_cast("-0.00000000263515414830424927128095026380033778748765668296184726183106775537323610237"), boost::lexical_cast("0.0000000000295350893893575030830965321544192503213832003549056472742964277263629493577"), boost::lexical_cast("0.0000000000000259129637850121514112507960811641537965052175737748298700466697875155415894"), boost::lexical_cast("-0.0000000000000000592088706033458993194518219229976516091225801153372985679944483340194107510"), boost::lexical_cast("0.000000000000000000000119717821494849869283848954977146397574755733129894249448827837729810076385"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.804349784326216682870867698785172886444134341030013379480923806872389210182"), boost::lexical_cast("-2.26205835171941179466492112439570917665682264923715171509917130991657754821"), boost::lexical_cast("-0.389676077424230416143478970454295496570705374947551134412624558903693957362"), boost::lexical_cast("8.50665866363348045173791462058611393187799649561744511666615181266556525337"), boost::lexical_cast("-11.44919593563404443567549116907041423485892301739312537780680544607026227450"), boost::lexical_cast("-0.498926901405939703754748719529238307648084150878656788578621629619041266705"), boost::lexical_cast("21.85499228880599088108367065599633778080830640336126353491139487377126291490"), boost::lexical_cast("-36.65294070838647301945129468867112933197613656831189540767306372008014438400"), boost::lexical_cast("33.03456536770354634426204817939353419169101297781817748568812540141141197080"), boost::lexical_cast("-14.60053872582810659959110019246117175095717916824767895489330950154153858660"), boost::lexical_cast("-3.46962706645777312638247039900137791860967206654796163174026576977480987387"), boost::lexical_cast("10.30962248301374157030523165146821356632153345092258177258520559837126810210"), boost::lexical_cast("-7.57311261844887687153807165858652718807055835283576547683012694195056627525"), boost::lexical_cast("2.79001534274099632722381474645350538532531181171959960822639426785711952433"), boost::lexical_cast("-0.270397873572487832671740890029058330815124109161518604674414533906621857406"), boost::lexical_cast("-0.219747760578822357960973156509623996708163827579313466373374504890703266884"), boost::lexical_cast("0.101020058397719647957772939429342398138576500365346222370704275039765224265"), boost::lexical_cast("-0.0145180131614497906575545887380941805879110435808753820055197950564548997542"), boost::lexical_cast("-0.000869674664088366018964976112111393474585517897253819178025469801026621804875"), boost::lexical_cast("0.000402437602038170326475359064730289991317678692634355675507889665235031988698"), boost::lexical_cast("-0.0000157333831012391713035661069783027485529501501626599828474665210765476845830"), boost::lexical_cast("-0.00000100663686623808993005735914014214151634495397934295300560534689374601506521"), boost::lexical_cast("0.0000000210557907426372698693118218926654314316158359635987623691480747866029773332"), boost::lexical_cast("0.0000000000222352429334128564487183275318880826175118330587151288587139165085782937502"), boost::lexical_cast("-0.0000000000000842699072214170360011169657801291451532530473218904368132644156798098455154"), boost::lexical_cast("0.000000000000000000340786997123380217994206097107633742986612720155415914905510810501076907780"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.32572538313607829978389746978270909190734307023984404422047073276572977495"), boost::lexical_cast("-14.49455539524440351726698168751780539459260987086240364854595675556041720440"), boost::lexical_cast("40.50618524666462883040099875675325706520261707900172515348692425641658202350"), boost::lexical_cast("-68.35733735676047669049239366744249712419067159860042852213104995281820518830"), boost::lexical_cast("78.84727597581444768460178005038706262576538764836845319136066260811952559290"), boost::lexical_cast("-64.06343648718714169613025171834477509469983151692691172469095627688021698080"), boost::lexical_cast("30.43698755414352264033439663090217787767167087477933221604545854702245623810"), boost::lexical_cast("10.87873748942125422591144834448867784613801192203670182793848556854050145490"), boost::lexical_cast("-54.23723311232467779927904053473561262938773179018943014024452055789441234110"), boost::lexical_cast("95.28034801913459537562741275266568339264065502105845420716508412412075458290"), boost::lexical_cast("-117.73905503364771243053821144754953234513956039081472901778742388505172072700"), boost::lexical_cast("103.96097092424883855673952920630316920634437408985849519918571970360275096700"), boost::lexical_cast("-61.61544437961620491952244794812274205481917695799114432128072738554509227570"), boost::lexical_cast("20.24999154380533592436955158213111619257037463818713373838162040877187311740"), boost::lexical_cast("0.342361879541387890494808824835330981498119520599852480120579318951753686930"), boost::lexical_cast("-3.64552218896089808966481252208088406516442739396640944123173605413113182773"), boost::lexical_cast("1.57834684708713170271798329721972342166058039720943334141687011992206759580"), boost::lexical_cast("-0.245198179311896545018681810103528580634841093773233002156532192404195001186"), boost::lexical_cast("-0.0182636335580641564732299080907269542961766381772624145912713306330825337847"), boost::lexical_cast("0.00970110022918661336696551804862567263721137672239282216195334493673897459845"), boost::lexical_cast("-0.000552743167971307219807849744125242795042626138923339525966494069954293592860"), boost::lexical_cast("-0.0000344891856325385166416658583064189966564335311286470958633679458661913797931"), boost::lexical_cast("0.00000103417508718244228943518424219273200822254101350515749540962507511656921374"), boost::lexical_cast("0.00000000157182442556628960702195041921845074276654103625948693489495451100463539491"), boost::lexical_cast("-0.00000000000823972888028003765394181795355019473340350975899036984527963838403818247760"), boost::lexical_cast("0.0000000000000000666454293215207517366834719023360349661401835450888130511999977594605272998"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.75645678252782782681587560651169118663509412050066394815052936021223979271"), boost::lexical_cast("-37.77705672356517184937835295164453556498913303252724271691215564780459719470"), boost::lexical_cast("137.70087556248931227876532575144504191693108683924786902505674311871685140800"), boost::lexical_cast("-311.72468766289278751244167873028725267412977680278312051859849993755349858000"), boost::lexical_cast("511.24679128112096837423875276735646357386086403224153118196081493355880796200"), boost::lexical_cast("-687.69702792488720143387763101613920716950152836894659515467184955111870724700"), boost::lexical_cast("829.09055557619773277153201541424732791228391594101613180539356376460906530000"), boost::lexical_cast("-906.67556883761759119144339734345872385406981601833110610680243945196617211400"), boost::lexical_cast("863.23988279515629467219009455554599609695564774955725375711337575467810032600"), boost::lexical_cast("-700.37718955506952165779246925908091030508123412802813106187016751364785945600"), boost::lexical_cast("495.84842847009709837548618485022243329167561710295186722949226664054303361100"), boost::lexical_cast("-307.49512577944039191322332358612022792251918670092304811543750183524451060300"), boost::lexical_cast("142.92163545340421526365861071542027659143554694673554929974877824733260473200"), boost::lexical_cast("-19.31075019974249281695001314578305393389661976831560477729541043029968645530"), boost::lexical_cast("-35.42389678687542349159085429311033037061651261095746807090649315454659711020"), boost::lexical_cast("32.44472478885998336245698827148819308075084642463701991417768428456321519910"), boost::lexical_cast("-12.97271142346531917199152873167390275988083231450677228087810958984424846790"), boost::lexical_cast("2.10336726562456364617075321297939313157799116307693031879047994718725361533"), boost::lexical_cast("0.215454070733924659861657674199075159272461496572943747038111133916807431180"), boost::lexical_cast("-0.125076873025998884367293275645192665826157547026398718789437845293697450218"), boost::lexical_cast("0.0103152247942739012815455329995931706018816781048478764075881481121070428934"), boost::lexical_cast("0.000632428582946048424882721006475234390308064466530095906161174694249322311105"), boost::lexical_cast("-0.0000278764686901524008550509337752045901232947877228985594423383689960428632537"), boost::lexical_cast("-0.0000000569803836285153459122322631284557498343961131423876580418354981637882246635"), boost::lexical_cast("0.000000000441839671114970335190048321139738477044887864798246264801711442171137680421"), boost::lexical_cast("-0.00000000000000714802491411250263311395432961462470250092517743540216477594292648036570408"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.83555255872811652420708194699227564812880321923155066263002675188551650312"), boost::lexical_cast("-68.93144189415544000675178575437258773566065477015007536299582400232146657330"), boost::lexical_cast("269.05084530980203113195209976663957867395958982717325865408524125280832289600"), boost::lexical_cast("-609.20724183879537322285337615082333580989660439474364859024353018035946645100"), boost::lexical_cast("881.76862167288329121045005828312390919337410341070563414959329437576051276200"), boost::lexical_cast("-865.08716643970594546719815251896043456283005565377418337268781988922266917400"), boost::lexical_cast("632.97787930272196253879414267424608924729579537423891361585357298689149584500"), boost::lexical_cast("-382.49192892544806107967107677420182336459450422233847738473211880415489419400"), boost::lexical_cast("51.56641441749688691257145061609223937968957957563897087215371356736309599200"), boost::lexical_cast("476.09110714103691538203391357221546832760511254226534748414313636902906572500"), boost::lexical_cast("-970.57824656189703500836118600041943699389979172697558754304893359616826066000"), boost::lexical_cast("1129.04503509906141877125815880497121965193711448633760242286838210579239440000"), boost::lexical_cast("-1010.03090304703962359279554938202749376391098032905326508754718040588237804000"), boost::lexical_cast("827.10721123601323503307854258132213389426514427539892445355740294501216301600"), boost::lexical_cast("-616.18164003837976580374414923629580236503935294323766247871764385789725455200"), boost::lexical_cast("356.91888665299329828378541153901250128644618483543100772119117850286192670900"), boost::lexical_cast("-133.52394935860427189931791156205717267825075964749332862787915826632532923900"), boost::lexical_cast("21.94002100012019404144527346489003480219358689823929896317683112311592863680"), boost::lexical_cast("3.69502949031117951496444168472697082874515564937581244488642154254744997400"), boost::lexical_cast("-2.22233693926927989833058976676101529298211935367881160327330611362977023218"), boost::lexical_cast("0.243917000692119383583915678923379880754017506303821621558764650571551691750"), boost::lexical_cast("0.0153855088662769439102973996146208075188236200845719957232671533824048761790"), boost::lexical_cast("-0.00104913228216791853272658326910500670179817471111989137537944784605454771898"), boost::lexical_cast("-0.00000224836058331229111229619069684984372824683936236614925216433027243221835066"), boost::lexical_cast("0.0000000332116962946728334773864559940531738563382607925542513873526692874990639648"), boost::lexical_cast("-0.00000000000107475686000546477797319235583561376745354532533798623668423772676988174585"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.54960688822339828863999378130211115107233454769934866095750950044066864110"), boost::lexical_cast("-69.64335018913939576412750532175053097593146282468237041838535209525011079500"), boost::lexical_cast("287.62738150890773420089300813672822503003764015402682017757435224935102339200"), boost::lexical_cast("-706.73754701102149477646316177625311732909677089373586648513230095487019075900"), boost::lexical_cast("1177.44605142912275685331605707810452401861714128214534938401017832783574948000"), boost::lexical_cast("-1493.65509712888447960800673919759696151644981533694814393500245372102843458000"), boost::lexical_cast("1658.35534024819665161123917470538298740518906057958085498478561548336905470000"), boost::lexical_cast("-1774.97012191343746012194081052068265568964145567960224351414437241219278396000"), boost::lexical_cast("1784.12512252406968735163579655137194210741621555135274224751877746894409525000"), boost::lexical_cast("-1596.15013759874832367565454908792624435013153344056104405167995042995605546000"), boost::lexical_cast("1294.87842318541656108750744374471145185200499138414568918290153915550984978000"), boost::lexical_cast("-988.83467235968111377155392478265729751920701705649958745436470131875538876000"), boost::lexical_cast("689.66704696641391993630921163080325378181926796016541012035635061452929732200"), boost::lexical_cast("-419.69730617117074092592055713546879516237193681933824681435866539141247425900"), boost::lexical_cast("227.80738878191733493720600320172052818250161128836771941990375971535089686000"), boost::lexical_cast("-111.11796409308819226983125949342564517414825732596608930700760656952936161100"), boost::lexical_cast("40.19443810120569696285858753433708415600177908834568747073574318608759474100"), boost::lexical_cast("-4.91792059950306926651430119033353633622113732985840244036194782614229968982"), boost::lexical_cast("-3.35533756319498030532906284051383779124200364840191901231906261851413833649"), boost::lexical_cast("1.64973463461427566646558893739921141496585938147076501993510767086243184026"), boost::lexical_cast("-0.210933307392307199501252966945895447408339149689342782956931741370150254267"), boost::lexical_cast("-0.0118181469959711297864759189693192594897107267351263521987717128479636953271"), boost::lexical_cast("0.00166832008560998294423971440046143918265510526709216268614254492975841760358"), boost::lexical_cast("0.00000359960399029744056248273888253230981459983176116053582730091303462716930960"), boost::lexical_cast("-0.000000105526920365685108260660462141084882369839069051686223049397689800183455322"), boost::lexical_cast("0.00000000000683200385904099418363562130595167945821162769743662314310034240089917492841"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("6.20505003861567011394067231344647893637847564329550367887681186357597624603"), boost::lexical_cast("-58.56645504853098766550134905340317870243260579145639275208040178526932370050"), boost::lexical_cast("244.21338875508955935588425811438812427457999296948170249669130252684915021700"), boost::lexical_cast("-592.00121422881665797081029294298226556332889632312076428918776482044056419900"), boost::lexical_cast("935.83883798382295862878655187263488883257992095069940720162185886844636534300"), boost::lexical_cast("-1070.04134277217209941069608841768441159120482934420543356273845894230382557000"), boost::lexical_cast("1055.22848149919637141794358785954857337162302556268749973962161361211731374000"), boost::lexical_cast("-1077.87709508048227764719965364717319012422679016684137197779877347065587919000"), boost::lexical_cast("1079.84553010800709048689467568224979315449213490504319509214561846839561023000"), boost::lexical_cast("-909.07210621873438578205880244568413575768717508893273593436054423066636844000"), boost::lexical_cast("651.34858710014761262618216521874193874281211026897562234536865793145322519700"), boost::lexical_cast("-457.83799566119363761546660688550395418970241445277522092347549225353673827100"), boost::lexical_cast("309.76860818899965620264934656056185819660289753982144311142670396948220345500"), boost::lexical_cast("-165.17332619606861874818823388561165833646372925969907046409236334588737006800"), boost::lexical_cast("64.36460023183964610680737173822860851394300430996239129559691640194035450280"), boost::lexical_cast("-21.81925195904410301088997452499452793344229781102822411802597853821595862070"), boost::lexical_cast("3.70987816583834887528727762977327608794555354259030464603411322315458032491"), boost::lexical_cast("6.12012477609974627820032790014942916130826215990800053191225592823023213870"), boost::lexical_cast("-6.41707542957580268050903646486240388008805175493051843593484495999979780697"), boost::lexical_cast("2.55314374584785171680308731725982270158371281797680529285657013298327299254"), boost::lexical_cast("-0.384116528497100269726445252348690123705919404254920353538891869983784142695"), boost::lexical_cast("-0.0118756663548945587058921085727494958398593550092544335470975725373361134933"), boost::lexical_cast("0.00560801191403834230317024708819810653630256118877488149992512868367446594358"), boost::lexical_cast("0.0000168863298975933200683541006085210976919654788572176120083523172920160215908"), boost::lexical_cast("-0.000000702368884519096062247768700675740067863675318587848764509402888807377333644"), boost::lexical_cast("0.0000000000910021338458770684182677723795514188197183013650198912703110713825929499885"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 10) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.03204471314281361620436172860993718348048098798259830037497869722564324408"), boost::lexical_cast("-19.39665779270637271197815390366866221017887466456155522938642838644377623170"), boost::lexical_cast("84.39519889483751381060448991759860643934416288701819870293485348031111678600"), boost::lexical_cast("-225.93653823935280620043647247700590736347878865997028224628700438872489124900"), boost::lexical_cast("429.09470449105242027094920090767356206181107874783293562031855795674540336000"), boost::lexical_cast("-635.22241752596063241363571132920423111589738106514102338073077249645227164900"), boost::lexical_cast("778.35654680554367290994709844961509436329929173664221414820797079265534104900"), boost::lexical_cast("-825.57888681650695755069404722936648404036390595346071684154667140205899581400"), boost::lexical_cast("820.86701316070300215711624263370329545679945220152016165604116497162621943800"), boost::lexical_cast("-838.00594852735561618490718834843576332267897766955677203329263194173445408300"), boost::lexical_cast("846.41624411937977897579029601634249128805349858445717455832716294555864902500"), boost::lexical_cast("-756.43979217912372920397826846127055236422213608124884373684460009804242802200"), boost::lexical_cast("597.98072611129726849283643705505721881864863625292975587189812590758721018400"), boost::lexical_cast("-464.96181147230317359880791138494390058432679338003629816618633802082886197700"), boost::lexical_cast("355.51862533374956883481354353388092712174852473789983192068789421486091538400"), boost::lexical_cast("-235.37971349199656518700162583910157649836837484774547798711824684202151115700"), boost::lexical_cast("132.29716704430755790362823208197819789457340031860010362902088456007781211600"), boost::lexical_cast("-71.87354899110919395713836059516566325587269396430109303014403933780264172090"), boost::lexical_cast("37.29248373020173707451272057860274355374999201121543162524309965457643352150"), boost::lexical_cast("-14.04817434412944163979531519740059165943726494501644870873410209073124183660"), boost::lexical_cast("2.60745911365218712785836635558941735911206189533873236470344886669699910838"), boost::lexical_cast("0.0543645649464435164847209914399195207149789580566453105860414107221369165038"), boost::lexical_cast("-0.0690090709977073313739788485731020686097132104467534026187427787191497374569"), boost::lexical_cast("-0.0000971327966803672069290270496714838209254089051099247834705750725429421474607"), boost::lexical_cast("0.0000175060669244915542274214040537534422700016855593378309967441792972141821778"), boost::lexical_cast("-0.00000000454201283534597503030935884752199947078896835850213184419062952049362978252"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 11) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.27115042001770757342790580276725599737973526276595894891693693144453081333"), boost::lexical_cast("-12.20155249712689490713523680284407229529835475760492745017650272595157073840"), boost::lexical_cast("51.23324319235233061317480157420850343391523283977889617744950185481521928880"), boost::lexical_cast("-122.94995817305462609579795659014989927849571013175696402717688054750353836700"), boost::lexical_cast("186.48509100156140575637738663903588922180843570634354620282154495701806571100"), boost::lexical_cast("-194.07448086588021018245234658153261441759722529638841725717115567921577062400"), boost::lexical_cast("167.86866563418224671177891910686936996723856918707191383980497089062492466500"), boost::lexical_cast("-163.73194055481597452012500435897749151331279668776584781713972098055426014000"), boost::lexical_cast("171.61705970327542643733736274773439348119447474649912026659814882053948896400"), boost::lexical_cast("-149.52373587625510655685072490035410183051561878699286314353687011498822254500"), boost::lexical_cast("110.83963967429849116381035147455824238567048771273770112763575455632533722600"), boost::lexical_cast("-86.00782150891480030613225128365285559176275614273843802468963964882341220180"), boost::lexical_cast("67.02925129175963984371834894406440307377952153327523895227597589690079234370"), boost::lexical_cast("-43.73925987707458484571443317553902969922556666607444419305258116854809584890"), boost::lexical_cast("25.59369785187796149597672205308510544347264131510511482728670598446185457330"), boost::lexical_cast("-15.68018534623854167865753994586968580089803038651229171712344769674882728010"), boost::lexical_cast("8.67101479337829604724549631142381262698058260107053126173973190165021528756"), boost::lexical_cast("-3.75861505024024002675376566574475255211823912083547822262099741013249261042"), boost::lexical_cast("1.54759756025881232336945003625817637725576271772356562382087334473774930037"), boost::lexical_cast("-0.630476888107043555221797973970574912788012829526634744673511131029200828552"), boost::lexical_cast("0.138289110458663700735511423590028378928536403452989070482014794553004832387"), boost::lexical_cast("0.0107951927880023305749242734468149776729151693312718188651043715681726172060"), boost::lexical_cast("-0.00754991006043983586111967321038913970058172016189708501693056751092430574556"), boost::lexical_cast("0.0000768855369034014413090954158857823182271817483052059631674255096393926162955"), boost::lexical_cast("0.00000423822734359358265360311498568469600739757885517978000979834786982597738573"), boost::lexical_cast("-0.00000000220476848184896613372739980059823724812480482106220385749059723040813819200"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 12) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.318010404217068952718034999205043880576086312876319450942332822179758832029"), boost::lexical_cast("-3.06102355351185926427319739531099202637190548705353100594409222193573135420"), boost::lexical_cast("12.80258811164971729344541416108618061243147012390344502415152454109791488170"), boost::lexical_cast("-30.20065038067138441549116683827153320363339703988815649029826192469828800770"), boost::lexical_cast("43.77746941222910636253894420655558692365422509195889774642773187854112783890"), boost::lexical_cast("-41.06426623869672590682998039683326333327190758069356155782396545157455445810"), boost::lexical_cast("30.06896895338094213763603114520529005887555601480166742767460715185260403040"), boost::lexical_cast("-27.99669565569003172852864940058873702820215437394869573794696284139245305100"), boost::lexical_cast("31.40904224961940872590760582915710475701943523191305275220782176766892814960"), boost::lexical_cast("-26.61147707975226987062278644044150684817213866306112594162111544688454753810"), boost::lexical_cast("17.28072628404804003669507530790723055238159750081532699647611742207459371760"), boost::lexical_cast("-13.03306623382955516457538291782723729027040840647527902140735049489731225810"), boost::lexical_cast("10.92329406410031923111395110524973244956738959185047643214517216152345088230"), boost::lexical_cast("-6.76457200306911915343728115159545396428972131599592522482710193109520612768"), boost::lexical_cast("3.38673622817880270826803177141868102896290888908534559567608966529440899137"), boost::lexical_cast("-2.13778155318707274308581153289738935049994670784897895468735053193538091817"), boost::lexical_cast("1.27222976665752962431763512471169495246258962134804638636049901609786075729"), boost::lexical_cast("-0.460207043844736395307656318205719088747297298981176544972613522761762760908"), boost::lexical_cast("0.144411215423571925617311283427170089385196189708352755544769370328688396733"), boost::lexical_cast("-0.0739504408724418236152196080232313887266756275356214749508197882784413005326"), boost::lexical_cast("0.0162851961244162892390054615243955015081698723875469655847838117885736756969"), boost::lexical_cast("0.00670013886238182672051081804470702049361779245043541997098482037556851799328"), boost::lexical_cast("-0.00289413784660480308858813839825464801550958078392680116427992804058429400263"), boost::lexical_cast("0.000118226656863479167736819869491754498449905525596694943882369054828973203042"), boost::lexical_cast("0.00000407408378246154606805470217575324383090557556739356701916389328686441606510"), boost::lexical_cast("-0.00000000426014978607563594967116716485946096193409828602942187827734146599194530321"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 13) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0395024226975886260436015280169399958114854435612876899457087608537691328646"), boost::lexical_cast("-0.380760085660020846754522453148461762110774614299327773117958074184114684427"), boost::lexical_cast("1.58439192679626572323538988717033413533100806730431629991619477048720282652"), boost::lexical_cast("-3.66849225666251646147181612467387048084530225694986405715851065686876160983"), boost::lexical_cast("5.05702740810994469396903380618346647120804579341221278933287204214673197742"), boost::lexical_cast("-4.15893692928322415963268762106489569036113711224820559316556226723553567830"), boost::lexical_cast("2.30643665371429659490852199582838744397805404586749517662546347864184908967"), boost::lexical_cast("-2.03944535400713878630113040918470478717641098007862715614235550735403115717"), boost::lexical_cast("2.75044728818668477407502449063310312583442217870494512078004809643451540717"), boost::lexical_cast("-2.26532298526228934105124417738592200001859007857791140112570041681664957967"), boost::lexical_cast("1.10133212413495876761478507881985817641573463205155919865756735554719635510"), boost::lexical_cast("-0.777595611788659331793825514823424823892310615830315312836845770694620189298"), boost::lexical_cast("0.813470142541264561929778203493572597954340880125476192701684325142924496713"), boost::lexical_cast("-0.450006561808299358517226504782492541004402170854054357437291488004013112805"), boost::lexical_cast("0.118500916380668803483753735483540194370353148612714533622232357622587131639"), boost::lexical_cast("-0.0854382963811873726676785990040937155967645307765440929619971688798210204625"), boost::lexical_cast("0.0688056358160580011265953288213120273922091465442762386643516670175176351229"), boost::lexical_cast("-0.00316181231306575845649567960204080415859090715018690879061132888462092674318"), boost::lexical_cast("-0.0134704997550951956780703608930294861647935543468679644642083630288728953920"), boost::lexical_cast("0.00294686750299967882443641101664969682445375118992583309612547894575220278859"), boost::lexical_cast("-0.00215928663487753773644923527389606027569391521127003378892960294361464727064"), boost::lexical_cast("0.00292603166127365869089828154580427557123447155142574321458389044685037686218"), boost::lexical_cast("-0.00111176154864526774012502920031740858426807693116963525197176827996288733339"), boost::lexical_cast("0.000109753902477691254708467520181547449682815029110458229838831733837259897127"), boost::lexical_cast("0.00000427869999580130042052373770473160246635622398207650727324687442110256565531"), boost::lexical_cast("-0.00000000903945795865567602923370485955445191692438306505200188872053733298346930198"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 15) { if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0f, 0x1.d99d62p-12f, 0x1.0d2f98p-4f, 0x1.4a5392p-1f, 0x1.1fc50ep-1f, -0x1.d49776p-2f, 0x1.3575a8p-2f, -0x1.7e644ap-3f, 0x1.a17858p-4f, -0x1.7135a6p-5f, 0x1.d8cfdcp-7f, -0x1.57e158p-9f, -0x1.5f6332p-15f, 0x1.10a458p-13f, -0x1.592264p-16f, 0x1.899798p-18f, -0x1.4f8412p-18f, 0x1.74953ep-20f, -0x1.f7cb1ap-26f, -0x1.c92be2p-26f, -0x1.3b9a58p-35f, -0x1.6a58cep-35f, 0x1.4bf1ecp-37f, 0x1.697068p-44f, -0x1.513d7ap-49f, -0x1.b3943cp-57f, 0x1.54d33p-67f, -0x1.3f6e1ep-80f, -0x1.d0d882p-104f, 0x0p+0f}; + return {0x0p+0f, 0x1.d99d62p-12f, 0x1.0d2f98p-4f, 0x1.4a5392p-1f, 0x1.1fc50ep-1f, -0x1.d49776p-2f, 0x1.3575a8p-2f, -0x1.7e644ap-3f, 0x1.a17858p-4f, -0x1.7135a6p-5f, 0x1.d8cfdcp-7f, -0x1.57e158p-9f, -0x1.5f6332p-15f, 0x1.10a458p-13f, -0x1.592264p-16f, 0x1.899798p-18f, -0x1.4f8412p-18f, 0x1.74953ep-20f, -0x1.f7cb1ap-26f, -0x1.c92be2p-26f, -0x1.3b9a58p-35f, -0x1.6a58cep-35f, 0x1.4bf1ecp-37f, 0x1.697068p-44f, -0x1.513d7ap-49f, -0x1.b3943cp-57f, 0x1.54d33p-67f, -0x1.3f6e1ep-80f, -0x1.d0d882p-104f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.af6738p-9f, 0x1.c7ad46p-3f, 0x1.9756ccp-1f, -0x1.519166p+0f, 0x1.6cc6e8p-2f, -0x1.8cf37ep-4f, 0x1.9a3fa2p-4f, -0x1.0a50bep-3f, 0x1.df3f5p-4f, -0x1.2d4b7ep-4f, 0x1.0681e4p-5f, -0x1.1b50d6p-7f, 0x1.49acd2p-11f, 0x1.16651ap-11f, -0x1.c26d2p-13f, 0x1.300212p-16f, 0x1.49fbecp-17f, -0x1.8781a4p-19f, 0x1.5ed0aep-24f, 0x1.da4a76p-25f, -0x1.7e23c8p-29f, -0x1.bd8f2cp-35f, 0x1.1c615p-37f, -0x1.c1b8b4p-44f, -0x1.95157p-52f, 0x1.d1f8dep-60f, -0x1.34635ep-74f, -0x1.c0c6d2p-97f, -0x0p+0f}; + return {0x0p+0f, 0x1.af6738p-9f, 0x1.c7ad46p-3f, 0x1.9756ccp-1f, -0x1.519166p+0f, 0x1.6cc6e8p-2f, -0x1.8cf37ep-4f, 0x1.9a3fa2p-4f, -0x1.0a50bep-3f, 0x1.df3f5p-4f, -0x1.2d4b7ep-4f, 0x1.0681e4p-5f, -0x1.1b50d6p-7f, 0x1.49acd2p-11f, 0x1.16651ap-11f, -0x1.c26d2p-13f, 0x1.300212p-16f, 0x1.49fbecp-17f, -0x1.8781a4p-19f, 0x1.5ed0aep-24f, 0x1.da4a76p-25f, -0x1.7e23c8p-29f, -0x1.bd8f2cp-35f, 0x1.1c615p-37f, -0x1.c1b8b4p-44f, -0x1.95157p-52f, 0x1.d1f8dep-60f, -0x1.34635ep-74f, -0x1.c0c6d2p-97f, 0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.52aa16p-6f, 0x1.2f3864p-1f, -0x1.92da3ep-2f, -0x1.010e6cp+1f, 0x1.ba5e58p+1f, -0x1.6efa1ap+1f, 0x1.e2fp+0f, -0x1.e9e848p-1f, 0x1.3e7bdp-2f, -0x1.3f21e6p-6f, -0x1.00e092p-5f, 0x1.93252ep-8f, 0x1.0cb53cp-7f, -0x1.6ecc66p-8f, 0x1.1da3c8p-10f, 0x1.0f705cp-12f, -0x1.687f18p-13f, 0x1.03bf74p-15f, -0x1.0a570cp-20f, -0x1.b60c86p-22f, 0x1.2f36c8p-24f, -0x1.ab6b4ep-30f, -0x1.b77dbep-33f, 0x1.02e06ap-39f, 0x1.f900dcp-46f, -0x1.5cc6acp-54f, 0x1.79a9bep-67f, 0x1.12cb1cp-88f, -0x0p+0f}; + return {0x0p+0f, 0x1.52aa16p-6f, 0x1.2f3864p-1f, -0x1.92da3ep-2f, -0x1.010e6cp+1f, 0x1.ba5e58p+1f, -0x1.6efa1ap+1f, 0x1.e2fp+0f, -0x1.e9e848p-1f, 0x1.3e7bdp-2f, -0x1.3f21e6p-6f, -0x1.00e092p-5f, 0x1.93252ep-8f, 0x1.0cb53cp-7f, -0x1.6ecc66p-8f, 0x1.1da3c8p-10f, 0x1.0f705cp-12f, -0x1.687f18p-13f, 0x1.03bf74p-15f, -0x1.0a570cp-20f, -0x1.b60c86p-22f, 0x1.2f36c8p-24f, -0x1.ab6b4ep-30f, -0x1.b77dbep-33f, 0x1.02e06ap-39f, 0x1.f900dcp-46f, -0x1.5cc6acp-54f, 0x1.79a9bep-67f, 0x1.12cb1cp-88f, 0x0p+0f}; } if constexpr (order == 3) { return {0x0p+0f, 0x1.bde47ep-4f, 0x1.ff6e3ap-1f, -0x1.0edf78p+2f, 0x1.788ebp+2f, -0x1.0b9e58p+2f, 0x1.57d72ap+1f, -0x1.5aec5ap+1f, 0x1.66bep+1f, -0x1.257b74p+1f, 0x1.61e6a2p+0f, -0x1.1d6618p-1f, 0x1.7634aep-4f, 0x1.aae5ecp-5f, -0x1.66a2dep-5f, 0x1.9ee5c4p-7f, 0x1.cee452p-12f, -0x1.7d0e64p-10f, 0x1.95a9bcp-12f, -0x1.ac68b8p-17f, -0x1.4a3e54p-17f, 0x1.45a5b2p-20f, -0x1.a0585ep-28f, -0x1.4a4abp-28f, 0x1.818dc4p-34f, 0x1.bc8ec6p-41f, -0x1.1c50f4p-48f, 0x1.541ee6p-61f, 0x1.eef3c6p-82f, -0x0p+0f}; } if constexpr (order == 4) { - return {0x0p+0f, 0x1.da9efcp-2f, -0x1.0a9636p-2f, -0x1.6ead78p+2f, 0x1.1fb0b8p+4f, -0x1.a26b2p+4f, 0x1.5a3628p+4f, -0x1.c3b938p+2f, -0x1.0393f6p+3f, 0x1.ce0e34p+3f, -0x1.3371f4p+3f, 0x1.04744cp-2f, 0x1.5d5bbap+2f, -0x1.56903ap+2f, 0x1.4f3674p+1f, -0x1.16f1cp-1f, -0x1.0ca608p-3f, 0x1.fd1e64p-4f, -0x1.12756ap-5f, 0x1.031ce4p-9f, 0x1.dbc5a2p-11f, -0x1.6e5758p-13f, 0x1.338c12p-19f, 0x1.ec833cp-21f, -0x1.31ee1ep-26f, -0x1.068ccep-32f, 0x1.ab486ep-40f, -0x1.971ac6p-52f, -0x1.28365cp-71f, -0x0p+0f}; + return {0x0p+0f, 0x1.da9efcp-2f, -0x1.0a9636p-2f, -0x1.6ead78p+2f, 0x1.1fb0b8p+4f, -0x1.a26b2p+4f, 0x1.5a3628p+4f, -0x1.c3b938p+2f, -0x1.0393f6p+3f, 0x1.ce0e34p+3f, -0x1.3371f4p+3f, 0x1.04744cp-2f, 0x1.5d5bbap+2f, -0x1.56903ap+2f, 0x1.4f3674p+1f, -0x1.16f1cp-1f, -0x1.0ca608p-3f, 0x1.fd1e64p-4f, -0x1.12756ap-5f, 0x1.031ce4p-9f, 0x1.dbc5a2p-11f, -0x1.6e5758p-13f, 0x1.338c12p-19f, 0x1.ec833cp-21f, -0x1.31ee1ep-26f, -0x1.068ccep-32f, 0x1.ab486ep-40f, -0x1.971ac6p-52f, -0x1.28365cp-71f, 0x0p+0f}; } if constexpr (order == 5) { - return {0x0p+0f, 0x1.8a28cp+0f, -0x1.0b8eccp+3f, 0x1.301d18p+4f, -0x1.80a5fep+4f, 0x1.4a39e4p+4f, -0x1.114828p+4f, 0x1.18e244p+4f, -0x1.390866p+4f, 0x1.80446cp+4f, -0x1.0a407ap+5f, 0x1.52509ep+5f, -0x1.4b4686p+5f, 0x1.c80f14p+4f, -0x1.82ded4p+3f, 0x1.7610a2p+0f, 0x1.b0a89ap+0f, -0x1.2b516ep+0f, 0x1.48818ap-2f, -0x1.16dd92p-6f, -0x1.957d58p-7f, 0x1.613bdp-9f, -0x1.0adbcp-14f, -0x1.449056p-16f, 0x1.238bd6p-21f, 0x1.0b863cp-27f, -0x1.2dac52p-34f, 0x1.a8ab5ap-46f, 0x1.34fcf8p-64f, 0x0p+0f}; + return {0x0p+0f, 0x1.8a28cp+0f, -0x1.0b8eccp+3f, 0x1.301d18p+4f, -0x1.80a5fep+4f, 0x1.4a39e4p+4f, -0x1.114828p+4f, 0x1.18e244p+4f, -0x1.390866p+4f, 0x1.80446cp+4f, -0x1.0a407ap+5f, 0x1.52509ep+5f, -0x1.4b4686p+5f, 0x1.c80f14p+4f, -0x1.82ded4p+3f, 0x1.7610a2p+0f, 0x1.b0a89ap+0f, -0x1.2b516ep+0f, 0x1.48818ap-2f, -0x1.16dd92p-6f, -0x1.957d58p-7f, 0x1.613bdp-9f, -0x1.0adbcp-14f, -0x1.449056p-16f, 0x1.238bd6p-21f, 0x1.0b863cp-27f, -0x1.2dac52p-34f, 0x1.a8ab5ap-46f, 0x1.34fcf8p-64f, -0x0p+0f}; } if constexpr (order == 6) { - return {0x0p+0f, 0x1.e156f6p+1f, -0x1.d9350cp+4f, 0x1.b03e3ap+6f, -0x1.f51dfap+7f, 0x1.b1d9eep+8f, -0x1.3c90b8p+9f, 0x1.a1026p+9f, -0x1.ee82dcp+9f, 0x1.fcf16ap+9f, -0x1.beee0ep+9f, 0x1.545f4ap+9f, -0x1.c39ca4p+8f, 0x1.d17e6ep+7f, -0x1.8d05e2p+5f, -0x1.a57ddap+5f, 0x1.065bfcp+6f, -0x1.1a783cp+5f, 0x1.2e9f2cp+3f, -0x1.3cad9ap-2f, -0x1.1b4b3ap-1f, 0x1.15a314p-3f, -0x1.5c66a6p-8f, -0x1.5db56p-10f, 0x1.c57be6p-15f, 0x1.c9738p-21f, -0x1.63f652p-27f, 0x1.769768p-38f, 0x1.108b38p-55f, 0x0p+0f}; + return {0x0p+0f, 0x1.e156f6p+1f, -0x1.d9350cp+4f, 0x1.b03e3ap+6f, -0x1.f51dfap+7f, 0x1.b1d9eep+8f, -0x1.3c90b8p+9f, 0x1.a1026p+9f, -0x1.ee82dcp+9f, 0x1.fcf16ap+9f, -0x1.beee0ep+9f, 0x1.545f4ap+9f, -0x1.c39ca4p+8f, 0x1.d17e6ep+7f, -0x1.8d05e2p+5f, -0x1.a57ddap+5f, 0x1.065bfcp+6f, -0x1.1a783cp+5f, 0x1.2e9f2cp+3f, -0x1.3cad9ap-2f, -0x1.1b4b3ap-1f, 0x1.15a314p-3f, -0x1.5c66a6p-8f, -0x1.5db56p-10f, 0x1.c57be6p-15f, 0x1.c9738p-21f, -0x1.63f652p-27f, 0x1.769768p-38f, 0x1.108b38p-55f, -0x0p+0f}; } if constexpr (order == 7) { return {0x0p+0f, 0x1.d870dep+2f, -0x1.0c2b8cp+6f, 0x1.10bd38p+8f, -0x1.4441dap+9f, 0x1.eaed48p+9f, -0x1.dea056p+9f, 0x1.0ea6dep+9f, 0x1.3bb922p+5f, -0x1.7c03d4p+9f, 0x1.b77df6p+10f, -0x1.59dd46p+11f, 0x1.92ad5ep+11f, -0x1.7716eap+11f, 0x1.34cd94p+11f, -0x1.d21086p+10f, 0x1.27e204p+10f, -0x1.0ee014p+9f, 0x1.13ffcp+7f, 0x1.9021aap+1f, -0x1.cb9506p+3f, 0x1.f11cd6p+1f, -0x1.a3fefep-3f, -0x1.a953dap-5f, 0x1.9718bep-9f, 0x1.ad424ap-15f, -0x1.eb70cep-21f, 0x1.72006ap-31f, 0x1.0d3062p-47f, 0x0p+0f}; @@ -1454,19 +1792,19 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.155158p+3f, -0x1.4fec3ap+6f, 0x1.70dec4p+8f, -0x1.e94cfep+9f, 0x1.bf0b1p+10f, -0x1.392918p+11f, 0x1.79ccf6p+11f, -0x1.ab6c9p+11f, 0x1.c47edap+11f, -0x1.af1006p+11f, 0x1.72a85ap+11f, -0x1.2846e6p+11f, 0x1.b3d87ep+10f, -0x1.1ae106p+10f, 0x1.41e16ep+9f, -0x1.46003p+8f, 0x1.0818e6p+7f, -0x1.8ef0b6p+4f, -0x1.6eb8ecp+3f, 0x1.3aba04p+3f, -0x1.588d6ep+1f, 0x1.5ca064p-3f, 0x1.72c884p-5f, -0x1.2b7b9ap-8f, -0x1.359ad6p-14f, 0x1.0cff08p-19f, -0x1.207536p-29f, -0x1.a3ad9ep-45f, -0x0p+0f}; } if constexpr (order == 9) { - return {0x0p+0f, 0x1.174fb2p+3f, -0x1.5cf63cp+6f, 0x1.859702p+8f, -0x1.008e38p+10f, 0x1.c03c1cp+10f, -0x1.1e0d3p+11f, 0x1.33504ep+11f, -0x1.4498a4p+11f, 0x1.500c42p+11f, -0x1.2d6f92p+11f, 0x1.c5bd8cp+10f, -0x1.3b7208p+10f, 0x1.a4b182p+9f, -0x1.c03584p+8f, 0x1.1254d6p+7f, 0x1.be195p+2f, -0x1.6abf52p+5f, 0x1.bdfa94p+5f, -0x1.7a9c1p+5f, 0x1.86920ep+4f, -0x1.a9adfcp+2f, 0x1.133764p-1f, 0x1.191c64p-3f, -0x1.88d184p-6f, -0x1.aee4f4p-12f, 0x1.15e5eap-16f, -0x1.bc4492p-26f, -0x1.431c04p-40f, 0x0p+0f}; + return {0x0p+0f, 0x1.174fb2p+3f, -0x1.5cf63cp+6f, 0x1.859702p+8f, -0x1.008e38p+10f, 0x1.c03c1cp+10f, -0x1.1e0d3p+11f, 0x1.33504ep+11f, -0x1.4498a4p+11f, 0x1.500c42p+11f, -0x1.2d6f92p+11f, 0x1.c5bd8cp+10f, -0x1.3b7208p+10f, 0x1.a4b182p+9f, -0x1.c03584p+8f, 0x1.1254d6p+7f, 0x1.be195p+2f, -0x1.6abf52p+5f, 0x1.bdfa94p+5f, -0x1.7a9c1p+5f, 0x1.86920ep+4f, -0x1.a9adfcp+2f, 0x1.133764p-1f, 0x1.191c64p-3f, -0x1.88d184p-6f, -0x1.aee4f4p-12f, 0x1.15e5eap-16f, -0x1.bc4492p-26f, -0x1.431c04p-40f, -0x0p+0f}; } if constexpr (order == 10) { - return {0x0p+0f, 0x1.57dd2p+2f, -0x1.b426bap+5f, 0x1.ef50bp+7f, -0x1.4da8e6p+9f, 0x1.2d889ap+10f, -0x1.9456ecp+10f, 0x1.ca1f76p+10f, -0x1.f2eaf2p+10f, 0x1.0a60e2p+11f, -0x1.07fe76p+11f, 0x1.e2b37ep+10f, -0x1.a28fdp+10f, 0x1.5596d2p+10f, -0x1.027612p+10f, 0x1.70f45ap+9f, -0x1.edf5a6p+8f, 0x1.27b1e2p+8f, -0x1.3be692p+7f, 0x1.3b71fp+6f, -0x1.11985ep+5f, 0x1.3b5a98p+3f, -0x1.c32c18p-1f, -0x1.5d8e8ap-2f, 0x1.3b1b46p-4f, 0x1.23706ep-10f, -0x1.9c26fcp-14f, 0x1.96293ap-23f, 0x1.27428ap-36f, -0x0p+0f}; + return {0x0p+0f, 0x1.57dd2p+2f, -0x1.b426bap+5f, 0x1.ef50bp+7f, -0x1.4da8e6p+9f, 0x1.2d889ap+10f, -0x1.9456ecp+10f, 0x1.ca1f76p+10f, -0x1.f2eaf2p+10f, 0x1.0a60e2p+11f, -0x1.07fe76p+11f, 0x1.e2b37ep+10f, -0x1.a28fdp+10f, 0x1.5596d2p+10f, -0x1.027612p+10f, 0x1.70f45ap+9f, -0x1.edf5a6p+8f, 0x1.27b1e2p+8f, -0x1.3be692p+7f, 0x1.3b71fp+6f, -0x1.11985ep+5f, 0x1.3b5a98p+3f, -0x1.c32c18p-1f, -0x1.5d8e8ap-2f, 0x1.3b1b46p-4f, 0x1.23706ep-10f, -0x1.9c26fcp-14f, 0x1.96293ap-23f, 0x1.27428ap-36f, 0x0p+0f}; } if constexpr (order == 11) { - return {0x0p+0f, 0x1.82ba18p+1f, -0x1.ee321ap+4f, 0x1.174e6p+7f, -0x1.6e81d6p+8f, 0x1.368de4p+9f, -0x1.710674p+9f, 0x1.661d22p+9f, -0x1.6833b8p+9f, 0x1.833c1cp+9f, -0x1.704d0cp+9f, 0x1.2a287cp+9f, -0x1.d79574p+8f, 0x1.7a6624p+8f, -0x1.0dddap+8f, 0x1.4f8242p+7f, -0x1.9b8d6ep+6f, 0x1.e6b9cp+5f, -0x1.d872a6p+4f, 0x1.82e4e6p+3f, -0x1.3c81bp+2f, 0x1.87117ep+0f, -0x1.f2d1dcp-6f, -0x1.327c0ep-3f, 0x1.13b8cap-5f, -0x1.094894p-13f, -0x1.78471ap-14f, 0x1.31d268p-23f, 0x1.bc3afp-36f, -0x0p+0f}; + return {0x0p+0f, 0x1.82ba18p+1f, -0x1.ee321ap+4f, 0x1.174e6p+7f, -0x1.6e81d6p+8f, 0x1.368de4p+9f, -0x1.710674p+9f, 0x1.661d22p+9f, -0x1.6833b8p+9f, 0x1.833c1cp+9f, -0x1.704d0cp+9f, 0x1.2a287cp+9f, -0x1.d79574p+8f, 0x1.7a6624p+8f, -0x1.0dddap+8f, 0x1.4f8242p+7f, -0x1.9b8d6ep+6f, 0x1.e6b9cp+5f, -0x1.d872a6p+4f, 0x1.82e4e6p+3f, -0x1.3c81bp+2f, 0x1.87117ep+0f, -0x1.f2d1dcp-6f, -0x1.327c0ep-3f, 0x1.13b8cap-5f, -0x1.094894p-13f, -0x1.78471ap-14f, 0x1.31d268p-23f, 0x1.bc3afp-36f, 0x0p+0f}; } if constexpr (order == 12) { - return {0x0p+0f, 0x1.229018p+0f, -0x1.74b098p+3f, 0x1.a3d6fep+5f, -0x1.0ee9fep+7f, 0x1.b7ec28p+7f, -0x1.dcbffep+7f, 0x1.8f9512p+7f, -0x1.7421b2p+7f, 0x1.a17e1ep+7f, -0x1.8b13bap+7f, 0x1.210062p+7f, -0x1.a9798ep+6f, 0x1.62f522p+6f, -0x1.f0d146p+5f, 0x1.0b054p+5f, -0x1.2e7f82p+4f, 0x1.776b1ap+3f, -0x1.390aacp+2f, 0x1.0e68eap+0f, -0x1.1d9e68p-2f, 0x1.1e142p-5f, 0x1.626282p-3f, -0x1.00510ep-3f, 0x1.dda066p-6f, -0x1.397e42p-10f, -0x1.5e278p-13f, 0x1.93d63ep-23f, 0x1.24c486p-34f, 0x0p+0f}; + return {0x0p+0f, 0x1.229018p+0f, -0x1.74b098p+3f, 0x1.a3d6fep+5f, -0x1.0ee9fep+7f, 0x1.b7ec28p+7f, -0x1.dcbffep+7f, 0x1.8f9512p+7f, -0x1.7421b2p+7f, 0x1.a17e1ep+7f, -0x1.8b13bap+7f, 0x1.210062p+7f, -0x1.a9798ep+6f, 0x1.62f522p+6f, -0x1.f0d146p+5f, 0x1.0b054p+5f, -0x1.2e7f82p+4f, 0x1.776b1ap+3f, -0x1.390aacp+2f, 0x1.0e68eap+0f, -0x1.1d9e68p-2f, 0x1.1e142p-5f, 0x1.626282p-3f, -0x1.00510ep-3f, 0x1.dda066p-6f, -0x1.397e42p-10f, -0x1.5e278p-13f, 0x1.93d63ep-23f, 0x1.24c486p-34f, -0x0p+0f}; } if constexpr (order == 13) { - return {0x0p+0f, 0x1.2dba82p-3f, -0x1.83ba9p+0f, 0x1.bc6ce4p+2f, -0x1.2c97bep+4f, 0x1.0e0692p+5f, -0x1.5f4706p+5f, 0x1.6ea3fcp+5f, -0x1.5a777ep+5f, 0x1.424978p+5f, -0x1.3091p+5f, 0x1.23e442p+5f, -0x1.07fd36p+5f, 0x1.a8f488p+4f, -0x1.499324p+4f, 0x1.0a96d4p+4f, -0x1.8f60cep+3f, 0x1.003bccp+3f, -0x1.433efp+2f, 0x1.a65b7ep+1f, -0x1.d36032p+0f, 0x1.a4a1aep-1f, -0x1.88e9f6p-2f, 0x1.6764fap-3f, -0x1.91c36cp-5f, 0x1.07d03ep-8f, 0x1.362d3ep-11f, -0x1.92dbfep-20f, -0x1.22ff8p-30f, -0x0p+0f}; + return {0x0p+0f, 0x1.2dba82p-3f, -0x1.83ba9p+0f, 0x1.bc6ce4p+2f, -0x1.2c97bep+4f, 0x1.0e0692p+5f, -0x1.5f4706p+5f, 0x1.6ea3fcp+5f, -0x1.5a777ep+5f, 0x1.424978p+5f, -0x1.3091p+5f, 0x1.23e442p+5f, -0x1.07fd36p+5f, 0x1.a8f488p+4f, -0x1.499324p+4f, 0x1.0a96d4p+4f, -0x1.8f60cep+3f, 0x1.003bccp+3f, -0x1.433efp+2f, 0x1.a65b7ep+1f, -0x1.d36032p+0f, 0x1.a4a1aep-1f, -0x1.88e9f6p-2f, 0x1.6764fap-3f, -0x1.91c36cp-5f, 0x1.07d03ep-8f, 0x1.362d3ep-11f, -0x1.92dbfep-20f, -0x1.22ff8p-30f, 0x0p+0f}; } if constexpr (order == 14) { return {0x0p+0f, 0x1.8dd6e2p-6f, -0x1.ffb4dep-3f, 0x1.1f8df8p+0f, -0x1.6eae32p+1f, 0x1.200cfep+2f, -0x1.1f2876p+2f, 0x1.90990cp+1f, -0x1.3d166cp+1f, 0x1.74d60ap+1f, -0x1.680266p+1f, 0x1.e76ba8p+0f, -0x1.60830ap+0f, 0x1.48f2a8p+0f, -0x1.e7d09ep-1f, 0x1.1252eep-1f, -0x1.6e9dp-2f, 0x1.0a88fcp-2f, -0x1.16ea72p-3f, 0x1.018afap-4f, -0x1.2fa054p-5f, 0x1.2375eep-6f, -0x1.73b10cp-8f, 0x1.1decc8p-9f, -0x1.b8713ap-11f, 0x1.732712p-14f, 0x1.5deb76p-16f, -0x1.927126p-23f, -0x1.209992p-32f, 0x0p+0f}; @@ -1474,25 +1812,25 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0, 0x1.d99d611c0465dp-12, 0x1.0d2f985427a1ep-4, 0x1.4a539266aac6ep-1, 0x1.1fc50d04f7f08p-1, -0x1.d497750272bfap-2, 0x1.3575a87d9c163p-2, -0x1.7e644ab118887p-3, 0x1.a1785765bb949p-4, -0x1.7135a6ada8b52p-5, 0x1.d8cfdcbb16189p-7, -0x1.57e157b5bcea8p-9, -0x1.5f633204e95ap-15, 0x1.10a4589d9f87dp-13, -0x1.592264d16e622p-16, 0x1.89979784d7185p-18, -0x1.4f841169a1badp-18, 0x1.74953d3967ccep-20, -0x1.f7cb1acefcf43p-26, -0x1.c92be21aef0cap-26, -0x1.3b9a57c4ce7e8p-35, -0x1.6a58cec0fa225p-35, 0x1.4bf1eb8cd4c9cp-37, 0x1.697067f1715a1p-44, -0x1.513d790bd243p-49, -0x1.b3943c02986a6p-57, 0x1.54d330be5783ep-67, -0x1.3f6e1e631364cp-80, -0x1.d0d882f8587b5p-104, 0x0p+0}; + return {0x0p+0, 0x1.d99d611c0465dp-12, 0x1.0d2f985427a1ep-4, 0x1.4a539266aac6ep-1, 0x1.1fc50d04f7f08p-1, -0x1.d497750272bfap-2, 0x1.3575a87d9c163p-2, -0x1.7e644ab118887p-3, 0x1.a1785765bb949p-4, -0x1.7135a6ada8b52p-5, 0x1.d8cfdcbb16189p-7, -0x1.57e157b5bcea8p-9, -0x1.5f633204e95ap-15, 0x1.10a4589d9f87dp-13, -0x1.592264d16e622p-16, 0x1.89979784d7185p-18, -0x1.4f841169a1badp-18, 0x1.74953d3967ccep-20, -0x1.f7cb1acefcf43p-26, -0x1.c92be21aef0cap-26, -0x1.3b9a57c4ce7e8p-35, -0x1.6a58cec0fa225p-35, 0x1.4bf1eb8cd4c9cp-37, 0x1.697067f1715a1p-44, -0x1.513d790bd243p-49, -0x1.b3943c02986a6p-57, 0x1.54d330be5783ep-67, -0x1.3f6e1e631364cp-80, -0x1.d0d882f8587b5p-104, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.af673717274afp-9, 0x1.c7ad45d086ea5p-3, 0x1.9756cb092ee07p-1, -0x1.51916657c1834p+0, 0x1.6cc6e8f062405p-2, -0x1.8cf37d6182ca1p-4, 0x1.9a3fa2f41d495p-4, -0x1.0a50be22f2b87p-3, 0x1.df3f4f6c19d45p-4, -0x1.2d4b7e715db6cp-4, 0x1.0681e4c20b9fdp-5, -0x1.1b50d689cbed9p-7, 0x1.49acd134a254cp-11, 0x1.16651955943e4p-11, -0x1.c26d1f2c70c87p-13, 0x1.3002118e762a1p-16, 0x1.49fbecfd7d9c7p-17, -0x1.8781a4a6a5f7dp-19, 0x1.5ed0ad164acd2p-24, 0x1.da4a7558674aep-25, -0x1.7e23c7237f3f9p-29, -0x1.bd8f2cef8c9fp-35, 0x1.1c61501fa1048p-37, -0x1.c1b8b33989e02p-44, -0x1.95156f39cb33ap-52, 0x1.d1f8ddb7d0199p-60, -0x1.34635de67ce8cp-74, -0x1.c0c6d283f741ep-97, -0x0p+0}; + return {0x0p+0, 0x1.af673717274afp-9, 0x1.c7ad45d086ea5p-3, 0x1.9756cb092ee07p-1, -0x1.51916657c1834p+0, 0x1.6cc6e8f062405p-2, -0x1.8cf37d6182ca1p-4, 0x1.9a3fa2f41d495p-4, -0x1.0a50be22f2b87p-3, 0x1.df3f4f6c19d45p-4, -0x1.2d4b7e715db6cp-4, 0x1.0681e4c20b9fdp-5, -0x1.1b50d689cbed9p-7, 0x1.49acd134a254cp-11, 0x1.16651955943e4p-11, -0x1.c26d1f2c70c87p-13, 0x1.3002118e762a1p-16, 0x1.49fbecfd7d9c7p-17, -0x1.8781a4a6a5f7dp-19, 0x1.5ed0ad164acd2p-24, 0x1.da4a7558674aep-25, -0x1.7e23c7237f3f9p-29, -0x1.bd8f2cef8c9fp-35, 0x1.1c61501fa1048p-37, -0x1.c1b8b33989e02p-44, -0x1.95156f39cb33ap-52, 0x1.d1f8ddb7d0199p-60, -0x1.34635de67ce8cp-74, -0x1.c0c6d283f741ep-97, 0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.52aa167437ed4p-6, 0x1.2f386450cd36p-1, -0x1.92da3e0f4795fp-2, -0x1.010e6c23362c3p+1, 0x1.ba5e5707337cfp+1, -0x1.6efa1a351e689p+1, 0x1.e2efff792ca6dp+0, -0x1.e9e84815ce29ap-1, 0x1.3e7bcfc83dd35p-2, -0x1.3f21e5e83db9bp-6, -0x1.00e091b8310d8p-5, 0x1.93252ea5d40eep-8, 0x1.0cb53bda124f5p-7, -0x1.6ecc6596fdeb9p-8, 0x1.1da3c88de4594p-10, 0x1.0f705c9109b89p-12, -0x1.687f176415b5ap-13, 0x1.03bf749271ea1p-15, -0x1.0a570c997b8f7p-20, -0x1.b60c856b75c7p-22, 0x1.2f36c8024d478p-24, -0x1.ab6b4d2a0c9ebp-30, -0x1.b77dbd4d624bbp-33, 0x1.02e06a0b52529p-39, 0x1.f900db818405cp-46, -0x1.5cc6aba4a367p-54, 0x1.79a9be1badafp-67, 0x1.12cb1c6610cf6p-88, -0x0p+0}; + return {0x0p+0, 0x1.52aa167437ed4p-6, 0x1.2f386450cd36p-1, -0x1.92da3e0f4795fp-2, -0x1.010e6c23362c3p+1, 0x1.ba5e5707337cfp+1, -0x1.6efa1a351e689p+1, 0x1.e2efff792ca6dp+0, -0x1.e9e84815ce29ap-1, 0x1.3e7bcfc83dd35p-2, -0x1.3f21e5e83db9bp-6, -0x1.00e091b8310d8p-5, 0x1.93252ea5d40eep-8, 0x1.0cb53bda124f5p-7, -0x1.6ecc6596fdeb9p-8, 0x1.1da3c88de4594p-10, 0x1.0f705c9109b89p-12, -0x1.687f176415b5ap-13, 0x1.03bf749271ea1p-15, -0x1.0a570c997b8f7p-20, -0x1.b60c856b75c7p-22, 0x1.2f36c8024d478p-24, -0x1.ab6b4d2a0c9ebp-30, -0x1.b77dbd4d624bbp-33, 0x1.02e06a0b52529p-39, 0x1.f900db818405cp-46, -0x1.5cc6aba4a367p-54, 0x1.79a9be1badafp-67, 0x1.12cb1c6610cf6p-88, 0x0p+0}; } if constexpr (order == 3) { return {0x0p+0, 0x1.bde47de89537fp-4, 0x1.ff6e39e05bc19p-1, -0x1.0edf7812c7e6fp+2, 0x1.788eafbfef57p+2, -0x1.0b9e58d049e2bp+2, 0x1.57d72a54d9b7ep+1, -0x1.5aec59993d64cp+1, 0x1.66be004fbc258p+1, -0x1.257b730e2148dp+1, 0x1.61e6a248fa766p+0, -0x1.1d66170848573p-1, 0x1.7634ae9385e7dp-4, 0x1.aae5eb36cf234p-5, -0x1.66a2dd81189a5p-5, 0x1.9ee5c38dff3c6p-7, 0x1.cee452b55c63p-12, -0x1.7d0e63753adf8p-10, 0x1.95a9bb14ccec1p-12, -0x1.ac68b8496deeap-17, -0x1.4a3e531dccd5ap-17, 0x1.45a5b2adacfeep-20, -0x1.a0585e72874e5p-28, -0x1.4a4aaf36fdaecp-28, 0x1.818dc3c36642cp-34, 0x1.bc8ec635290e4p-41, -0x1.1c50f4adb4d49p-48, 0x1.541ee5efeba28p-61, 0x1.eef3c669427bap-82, -0x0p+0}; } if constexpr (order == 4) { - return {0x0p+0, 0x1.da9efb84cd102p-2, -0x1.0a963523c781p-2, -0x1.6ead78b2a7f87p+2, 0x1.1fb0b7ee7fe9bp+4, -0x1.a26b20f9bdefp+4, 0x1.5a362701692b6p+4, -0x1.c3b93743ed5e2p+2, -0x1.0393f54066e2bp+3, 0x1.ce0e335b9b5dp+3, -0x1.3371f4378fc26p+3, 0x1.04744c732a897p-2, 0x1.5d5bbaac2d3ddp+2, -0x1.56903abc9d373p+2, 0x1.4f367450bb029p+1, -0x1.16f1bf1e47dd8p-1, -0x1.0ca6089fc41eep-3, 0x1.fd1e6437298dfp-4, -0x1.127569c6d3d2p-5, 0x1.031ce43d6f2aap-9, 0x1.dbc5a12350174p-11, -0x1.6e57586c99db3p-13, 0x1.338c12c9a95b4p-19, 0x1.ec833bdc8d6abp-21, -0x1.31ee1e222a83p-26, -0x1.068cce25031dp-32, 0x1.ab486d191520ep-40, -0x1.971ac61147c4cp-52, -0x1.28365b5992262p-71, -0x0p+0}; + return {0x0p+0, 0x1.da9efb84cd102p-2, -0x1.0a963523c781p-2, -0x1.6ead78b2a7f87p+2, 0x1.1fb0b7ee7fe9bp+4, -0x1.a26b20f9bdefp+4, 0x1.5a362701692b6p+4, -0x1.c3b93743ed5e2p+2, -0x1.0393f54066e2bp+3, 0x1.ce0e335b9b5dp+3, -0x1.3371f4378fc26p+3, 0x1.04744c732a897p-2, 0x1.5d5bbaac2d3ddp+2, -0x1.56903abc9d373p+2, 0x1.4f367450bb029p+1, -0x1.16f1bf1e47dd8p-1, -0x1.0ca6089fc41eep-3, 0x1.fd1e6437298dfp-4, -0x1.127569c6d3d2p-5, 0x1.031ce43d6f2aap-9, 0x1.dbc5a12350174p-11, -0x1.6e57586c99db3p-13, 0x1.338c12c9a95b4p-19, 0x1.ec833bdc8d6abp-21, -0x1.31ee1e222a83p-26, -0x1.068cce25031dp-32, 0x1.ab486d191520ep-40, -0x1.971ac61147c4cp-52, -0x1.28365b5992262p-71, 0x0p+0}; } if constexpr (order == 5) { - return {0x0p+0, 0x1.8a28bf1f4bafp+0, -0x1.0b8ecb513e671p+3, 0x1.301d17ac5e1c7p+4, -0x1.80a5fd5ebbea5p+4, 0x1.4a39e3e1048d6p+4, -0x1.1148278e9d9a1p+4, 0x1.18e244d79a033p+4, -0x1.3908669ba0779p+4, 0x1.80446c71adb15p+4, -0x1.0a40794798e41p+5, 0x1.52509dd04c4f7p+5, -0x1.4b468531c5b1ap+5, 0x1.c80f1430e334ap+4, -0x1.82ded3c89e7eap+3, 0x1.7610a167089f2p+0, 0x1.b0a89a8818c06p+0, -0x1.2b516da5d081p+0, 0x1.488189c0e6323p-2, -0x1.16dd91fce8d2fp-6, -0x1.957d5757f4d58p-7, 0x1.613bcf2c2fc6ap-9, -0x1.0adbc024da551p-14, -0x1.44905597a8908p-16, 0x1.238bd55115864p-21, 0x1.0b863bc593a1dp-27, -0x1.2dac52b5d35bcp-34, 0x1.a8ab5a61388b2p-46, 0x1.34fcf88bcfb4p-64, 0x0p+0}; + return {0x0p+0, 0x1.8a28bf1f4bafp+0, -0x1.0b8ecb513e671p+3, 0x1.301d17ac5e1c7p+4, -0x1.80a5fd5ebbea5p+4, 0x1.4a39e3e1048d6p+4, -0x1.1148278e9d9a1p+4, 0x1.18e244d79a033p+4, -0x1.3908669ba0779p+4, 0x1.80446c71adb15p+4, -0x1.0a40794798e41p+5, 0x1.52509dd04c4f7p+5, -0x1.4b468531c5b1ap+5, 0x1.c80f1430e334ap+4, -0x1.82ded3c89e7eap+3, 0x1.7610a167089f2p+0, 0x1.b0a89a8818c06p+0, -0x1.2b516da5d081p+0, 0x1.488189c0e6323p-2, -0x1.16dd91fce8d2fp-6, -0x1.957d5757f4d58p-7, 0x1.613bcf2c2fc6ap-9, -0x1.0adbc024da551p-14, -0x1.44905597a8908p-16, 0x1.238bd55115864p-21, 0x1.0b863bc593a1dp-27, -0x1.2dac52b5d35bcp-34, 0x1.a8ab5a61388b2p-46, 0x1.34fcf88bcfb4p-64, -0x0p+0}; } if constexpr (order == 6) { - return {0x0p+0, 0x1.e156f58145abap+1, -0x1.d9350b2238c2cp+4, 0x1.b03e3957ecd6ap+6, -0x1.f51dfa789d879p+7, 0x1.b1d9ee3321d94p+8, -0x1.3c90b7e3ca1dcp+9, 0x1.a1025f9df5666p+9, -0x1.ee82dbab6ab1p+9, 0x1.fcf169933904cp+9, -0x1.beee0dc0c8ddbp+9, 0x1.545f49e00f496p+9, -0x1.c39ca355bd5d3p+8, 0x1.d17e6e268802dp+7, -0x1.8d05e2b81cf72p+5, -0x1.a57ddae4deceep+5, 0x1.065bfb9cfed1p+6, -0x1.1a783beefce88p+5, 0x1.2e9f2c1581a69p+3, -0x1.3cad9a2427052p-2, -0x1.1b4b3a7aa70e8p-1, 0x1.15a31469a9cep-3, -0x1.5c66a63c93474p-8, -0x1.5db560cc8a8d9p-10, 0x1.c57be52a95f9ap-15, 0x1.c9738067c590ap-21, -0x1.63f652c472259p-27, 0x1.769767db4423bp-38, 0x1.108b386e39e95p-55, 0x0p+0}; + return {0x0p+0, 0x1.e156f58145abap+1, -0x1.d9350b2238c2cp+4, 0x1.b03e3957ecd6ap+6, -0x1.f51dfa789d879p+7, 0x1.b1d9ee3321d94p+8, -0x1.3c90b7e3ca1dcp+9, 0x1.a1025f9df5666p+9, -0x1.ee82dbab6ab1p+9, 0x1.fcf169933904cp+9, -0x1.beee0dc0c8ddbp+9, 0x1.545f49e00f496p+9, -0x1.c39ca355bd5d3p+8, 0x1.d17e6e268802dp+7, -0x1.8d05e2b81cf72p+5, -0x1.a57ddae4deceep+5, 0x1.065bfb9cfed1p+6, -0x1.1a783beefce88p+5, 0x1.2e9f2c1581a69p+3, -0x1.3cad9a2427052p-2, -0x1.1b4b3a7aa70e8p-1, 0x1.15a31469a9cep-3, -0x1.5c66a63c93474p-8, -0x1.5db560cc8a8d9p-10, 0x1.c57be52a95f9ap-15, 0x1.c9738067c590ap-21, -0x1.63f652c472259p-27, 0x1.769767db4423bp-38, 0x1.108b386e39e95p-55, -0x0p+0}; } if constexpr (order == 7) { return {0x0p+0, 0x1.d870debcc05c4p+2, -0x1.0c2b8b0b28194p+6, 0x1.10bd374d63551p+8, -0x1.4441daef321d4p+9, 0x1.eaed48222cc9cp+9, -0x1.dea055aad4ecbp+9, 0x1.0ea6de87556eap+9, 0x1.3bb921604519dp+5, -0x1.7c03d4dcf5514p+9, 0x1.b77df6c77230cp+10, -0x1.59dd45c186fb1p+11, 0x1.92ad5ee85458dp+11, -0x1.7716e9b298972p+11, 0x1.34cd942cd473ap+11, -0x1.d2108687fa36fp+10, 0x1.27e2041912518p+10, -0x1.0ee0131c1b04fp+9, 0x1.13ffc016f56cap+7, 0x1.9021a9dd4e12bp+1, -0x1.cb9505a70965bp+3, 0x1.f11cd618c3359p+1, -0x1.a3fefe1a942d4p-3, -0x1.a953da883746ep-5, 0x1.9718bee3af729p-9, 0x1.ad4249f39958ep-15, -0x1.eb70cd1aa4051p-21, 0x1.72006a07a097fp-31, 0x1.0d30627e6a2adp-47, 0x0p+0}; @@ -1501,19 +1839,19 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.155158ac6ea98p+3, -0x1.4fec3a6a32c1fp+6, 0x1.70dec41eaf97dp+8, -0x1.e94cfecb1efa1p+9, 0x1.bf0b100d34d04p+10, -0x1.39291803fcf48p+11, 0x1.79ccf50afb46ep+11, -0x1.ab6c90991611bp+11, 0x1.c47ed9a17b9cdp+11, -0x1.af1005783c9c1p+11, 0x1.72a859cabb472p+11, -0x1.2846e6b9b14f5p+11, 0x1.b3d87dff6a955p+10, -0x1.1ae10527ae494p+10, 0x1.41e16e9c43533p+9, -0x1.460030c5bf207p+8, 0x1.0818e6dd9acdcp+7, -0x1.8ef0b66c7662cp+4, -0x1.6eb8ec2d2fcfp+3, 0x1.3aba0303f01c4p+3, -0x1.588d6d239648ep+1, 0x1.5ca063a2897a3p-3, 0x1.72c884e06d39ap-5, -0x1.2b7b99da7239bp-8, -0x1.359ad5ec914c6p-14, 0x1.0cff089d4d593p-19, -0x1.207535755ab2fp-29, -0x1.a3ad9d559345cp-45, -0x0p+0}; } if constexpr (order == 9) { - return {0x0p+0, 0x1.174fb1d673064p+3, -0x1.5cf63b4072a08p+6, 0x1.859702b93092p+8, -0x1.008e38c64d405p+10, 0x1.c03c1b8df613fp+10, -0x1.1e0d30516cd0dp+11, 0x1.33504e2e62ab9p+11, -0x1.4498a39b45dd3p+11, 0x1.500c422b7e4d6p+11, -0x1.2d6f916f2f064p+11, 0x1.c5bd8b8beccdbp+10, -0x1.3b7208dc18507p+10, 0x1.a4b1819107c72p+9, -0x1.c03583e492981p+8, 0x1.1254d5dd1a3c8p+7, 0x1.be19509979c25p+2, -0x1.6abf524121ea4p+5, 0x1.bdfa9494723d3p+5, -0x1.7a9c102bdb495p+5, 0x1.86920d3d07ed2p+4, -0x1.a9adfb25c4f27p+2, 0x1.1337641b89dbcp-1, 0x1.191c64622c1b1p-3, -0x1.88d18423866c2p-6, -0x1.aee4f466bb969p-12, 0x1.15e5e9747fe1cp-16, -0x1.bc4491eee0fddp-26, -0x1.431c03e754cd9p-40, 0x0p+0}; + return {0x0p+0, 0x1.174fb1d673064p+3, -0x1.5cf63b4072a08p+6, 0x1.859702b93092p+8, -0x1.008e38c64d405p+10, 0x1.c03c1b8df613fp+10, -0x1.1e0d30516cd0dp+11, 0x1.33504e2e62ab9p+11, -0x1.4498a39b45dd3p+11, 0x1.500c422b7e4d6p+11, -0x1.2d6f916f2f064p+11, 0x1.c5bd8b8beccdbp+10, -0x1.3b7208dc18507p+10, 0x1.a4b1819107c72p+9, -0x1.c03583e492981p+8, 0x1.1254d5dd1a3c8p+7, 0x1.be19509979c25p+2, -0x1.6abf524121ea4p+5, 0x1.bdfa9494723d3p+5, -0x1.7a9c102bdb495p+5, 0x1.86920d3d07ed2p+4, -0x1.a9adfb25c4f27p+2, 0x1.1337641b89dbcp-1, 0x1.191c64622c1b1p-3, -0x1.88d18423866c2p-6, -0x1.aee4f466bb969p-12, 0x1.15e5e9747fe1cp-16, -0x1.bc4491eee0fddp-26, -0x1.431c03e754cd9p-40, -0x0p+0}; } if constexpr (order == 10) { - return {0x0p+0, 0x1.57dd202e5e84bp+2, -0x1.b426b94987909p+5, 0x1.ef50af36bc94ap+7, -0x1.4da8e644667e7p+9, 0x1.2d889ab089911p+10, -0x1.9456ec86efc74p+10, 0x1.ca1f75d29c178p+10, -0x1.f2eaf24b48be9p+10, 0x1.0a60e2fdcea78p+11, -0x1.07fe75c2d8539p+11, 0x1.e2b37ed5f4462p+10, -0x1.a28fcff6e684bp+10, 0x1.5596d2be7c1f8p+10, -0x1.02761175eccb5p+10, 0x1.70f45a3e9b6c8p+9, -0x1.edf5a5b354e13p+8, 0x1.27b1e13298bb4p+8, -0x1.3be69243ef2c3p+7, 0x1.3b71f0120f2a4p+6, -0x1.11985d9404f45p+5, 0x1.3b5a9762f053bp+3, -0x1.c32c18767db72p-1, -0x1.5d8e89b8ba2f4p-2, 0x1.3b1b46a97c2fbp-4, 0x1.23706d03f6f74p-10, -0x1.9c26fc84f3ff6p-14, 0x1.962939a138e2bp-23, 0x1.27428a5934f9ep-36, -0x0p+0}; + return {0x0p+0, 0x1.57dd202e5e84bp+2, -0x1.b426b94987909p+5, 0x1.ef50af36bc94ap+7, -0x1.4da8e644667e7p+9, 0x1.2d889ab089911p+10, -0x1.9456ec86efc74p+10, 0x1.ca1f75d29c178p+10, -0x1.f2eaf24b48be9p+10, 0x1.0a60e2fdcea78p+11, -0x1.07fe75c2d8539p+11, 0x1.e2b37ed5f4462p+10, -0x1.a28fcff6e684bp+10, 0x1.5596d2be7c1f8p+10, -0x1.02761175eccb5p+10, 0x1.70f45a3e9b6c8p+9, -0x1.edf5a5b354e13p+8, 0x1.27b1e13298bb4p+8, -0x1.3be69243ef2c3p+7, 0x1.3b71f0120f2a4p+6, -0x1.11985d9404f45p+5, 0x1.3b5a9762f053bp+3, -0x1.c32c18767db72p-1, -0x1.5d8e89b8ba2f4p-2, 0x1.3b1b46a97c2fbp-4, 0x1.23706d03f6f74p-10, -0x1.9c26fc84f3ff6p-14, 0x1.962939a138e2bp-23, 0x1.27428a5934f9ep-36, 0x0p+0}; } if constexpr (order == 11) { - return {0x0p+0, 0x1.82ba18a281555p+1, -0x1.ee321ac782e81p+4, 0x1.174e5f65a44a6p+7, -0x1.6e81d57c4c979p+8, 0x1.368de3361fae5p+9, -0x1.7106731d7c871p+9, 0x1.661d220cefa1p+9, -0x1.6833b778e773bp+9, 0x1.833c1b7a24cc4p+9, -0x1.704d0cf5b403fp+9, 0x1.2a287b4a8744cp+9, -0x1.d795731af32d5p+8, 0x1.7a6623bbe9af8p+8, -0x1.0ddd9fa1ad022p+8, 0x1.4f824182bb441p+7, -0x1.9b8d6efd833c4p+6, 0x1.e6b9bfc912a61p+5, -0x1.d872a65489bc7p+4, 0x1.82e4e50171641p+3, -0x1.3c81b080d7c59p+2, 0x1.87117e04fd822p+0, -0x1.f2d1dbd395099p-6, -0x1.327c0d249414p-3, 0x1.13b8c9585145fp-5, -0x1.094893076dab2p-13, -0x1.784719262e6dap-14, 0x1.31d26875ab45fp-23, 0x1.bc3aef2e9698bp-36, -0x0p+0}; + return {0x0p+0, 0x1.82ba18a281555p+1, -0x1.ee321ac782e81p+4, 0x1.174e5f65a44a6p+7, -0x1.6e81d57c4c979p+8, 0x1.368de3361fae5p+9, -0x1.7106731d7c871p+9, 0x1.661d220cefa1p+9, -0x1.6833b778e773bp+9, 0x1.833c1b7a24cc4p+9, -0x1.704d0cf5b403fp+9, 0x1.2a287b4a8744cp+9, -0x1.d795731af32d5p+8, 0x1.7a6623bbe9af8p+8, -0x1.0ddd9fa1ad022p+8, 0x1.4f824182bb441p+7, -0x1.9b8d6efd833c4p+6, 0x1.e6b9bfc912a61p+5, -0x1.d872a65489bc7p+4, 0x1.82e4e50171641p+3, -0x1.3c81b080d7c59p+2, 0x1.87117e04fd822p+0, -0x1.f2d1dbd395099p-6, -0x1.327c0d249414p-3, 0x1.13b8c9585145fp-5, -0x1.094893076dab2p-13, -0x1.784719262e6dap-14, 0x1.31d26875ab45fp-23, 0x1.bc3aef2e9698bp-36, 0x0p+0}; } if constexpr (order == 12) { - return {0x0p+0, 0x1.229017de89889p+0, -0x1.74b098d7b2942p+3, 0x1.a3d6fe58853c2p+5, -0x1.0ee9fe2c639a7p+7, 0x1.b7ec28edec454p+7, -0x1.dcbffedb3a508p+7, 0x1.8f9512e48d1c4p+7, -0x1.7421b1a880459p+7, 0x1.a17e1d21e73d2p+7, -0x1.8b13badbca1d9p+7, 0x1.210062e92f489p+7, -0x1.a9798d44da6c2p+6, 0x1.62f521d1972a8p+6, -0x1.f0d14679f69cp+5, 0x1.0b0540b21cf09p+5, -0x1.2e7f81d72375p+4, 0x1.776b19bc1de7bp+3, -0x1.390aaca35a349p+2, 0x1.0e68e94457017p+0, -0x1.1d9e671612a46p-2, 0x1.1e141f6f8381bp-5, 0x1.626281f06a565p-3, -0x1.00510e27c6afap-3, 0x1.dda065aa933f4p-6, -0x1.397e42b4cc1c2p-10, -0x1.5e2780fee3a22p-13, 0x1.93d63eaebefb8p-23, 0x1.24c485651202dp-34, 0x0p+0}; + return {0x0p+0, 0x1.229017de89889p+0, -0x1.74b098d7b2942p+3, 0x1.a3d6fe58853c2p+5, -0x1.0ee9fe2c639a7p+7, 0x1.b7ec28edec454p+7, -0x1.dcbffedb3a508p+7, 0x1.8f9512e48d1c4p+7, -0x1.7421b1a880459p+7, 0x1.a17e1d21e73d2p+7, -0x1.8b13badbca1d9p+7, 0x1.210062e92f489p+7, -0x1.a9798d44da6c2p+6, 0x1.62f521d1972a8p+6, -0x1.f0d14679f69cp+5, 0x1.0b0540b21cf09p+5, -0x1.2e7f81d72375p+4, 0x1.776b19bc1de7bp+3, -0x1.390aaca35a349p+2, 0x1.0e68e94457017p+0, -0x1.1d9e671612a46p-2, 0x1.1e141f6f8381bp-5, 0x1.626281f06a565p-3, -0x1.00510e27c6afap-3, 0x1.dda065aa933f4p-6, -0x1.397e42b4cc1c2p-10, -0x1.5e2780fee3a22p-13, 0x1.93d63eaebefb8p-23, 0x1.24c485651202dp-34, -0x0p+0}; } if constexpr (order == 13) { - return {0x0p+0, 0x1.2dba81606cdf4p-3, -0x1.83ba9062dc10bp+0, 0x1.bc6ce42e9d3a2p+2, -0x1.2c97bd817af95p+4, 0x1.0e06914d93155p+5, -0x1.5f4706680d4aep+5, 0x1.6ea3fbf492341p+5, -0x1.5a777ed4931f2p+5, 0x1.424978021982dp+5, -0x1.3090ff3d7fed6p+5, 0x1.23e4419ddb641p+5, -0x1.07fd356f7673cp+5, 0x1.a8f488a3b6e4bp+4, -0x1.49932384ed8b5p+4, 0x1.0a96d421140ffp+4, -0x1.8f60cd9c05603p+3, 0x1.003bcbf26a5dbp+3, -0x1.433ef046d9ed1p+2, 0x1.a65b7dff93521p+1, -0x1.d36032adf2dbdp+0, 0x1.a4a1ad470bd0ep-1, -0x1.88e9f63513cep-2, 0x1.6764f965c9511p-3, -0x1.91c36b23af1d8p-5, 0x1.07d03d7a1adc2p-8, 0x1.362d3e37ff6cdp-11, -0x1.92dbfdbfa8198p-20, -0x1.22ff804507dbep-30, -0x0p+0}; + return {0x0p+0, 0x1.2dba81606cdf4p-3, -0x1.83ba9062dc10bp+0, 0x1.bc6ce42e9d3a2p+2, -0x1.2c97bd817af95p+4, 0x1.0e06914d93155p+5, -0x1.5f4706680d4aep+5, 0x1.6ea3fbf492341p+5, -0x1.5a777ed4931f2p+5, 0x1.424978021982dp+5, -0x1.3090ff3d7fed6p+5, 0x1.23e4419ddb641p+5, -0x1.07fd356f7673cp+5, 0x1.a8f488a3b6e4bp+4, -0x1.49932384ed8b5p+4, 0x1.0a96d421140ffp+4, -0x1.8f60cd9c05603p+3, 0x1.003bcbf26a5dbp+3, -0x1.433ef046d9ed1p+2, 0x1.a65b7dff93521p+1, -0x1.d36032adf2dbdp+0, 0x1.a4a1ad470bd0ep-1, -0x1.88e9f63513cep-2, 0x1.6764f965c9511p-3, -0x1.91c36b23af1d8p-5, 0x1.07d03d7a1adc2p-8, 0x1.362d3e37ff6cdp-11, -0x1.92dbfdbfa8198p-20, -0x1.22ff804507dbep-30, 0x0p+0}; } if constexpr (order == 14) { return {0x0p+0, 0x1.8dd6e1684e11dp-6, -0x1.ffb4de00653d3p-3, 0x1.1f8df89dea984p+0, -0x1.6eae32a3a7907p+1, 0x1.200cfdab0a888p+2, -0x1.1f287662480abp+2, 0x1.90990b7ee9dd2p+1, -0x1.3d166b62b6086p+1, 0x1.74d60ae1a8cebp+1, -0x1.68026579c2214p+1, 0x1.e76ba8ae988d5p+0, -0x1.60830949d4c83p+0, 0x1.48f2a8ad7050dp+0, -0x1.e7d09d1d5c76ep-1, 0x1.1252ee85de925p-1, -0x1.6e9d007e3ce51p-2, 0x1.0a88fbec92db2p-2, -0x1.16ea71f276b01p-3, 0x1.018afa9348368p-4, -0x1.2fa053de7510ep-5, 0x1.2375ee2696f87p-6, -0x1.73b10c938e4b6p-8, 0x1.1decc8370b235p-9, -0x1.b8713a4dd74a9p-11, 0x1.732711f764c01p-14, 0x1.5deb76c540b6cp-16, -0x1.9271259f10414p-23, -0x1.2099915b93354p-32, 0x0p+0}; @@ -1521,25 +1859,25 @@ constexpr std::array daubechies_scaling_integer_grid() } if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0L, 0xe.cceb08e0232ebfep-15L, 0x8.697cc2a13d0ee1p-7L, 0xa.529c93355636f38p-4L, 0x8.fe286827bf83d25p-4L, -0xe.a4bba81395fd148p-5L, 0x9.abad43ece0b19efp-5L, -0xb.f3225588c443427p-6L, 0xd.0bc2bb2ddca46a9p-7L, -0xb.89ad356d45a90abp-8L, 0xe.c67ee5d8b0c44cdp-10L, -0xa.bf0abdade753fd6p-12L, -0xa.fb1990274acfe19p-18L, 0x8.8522c4ecfc3eb6ep-16L, -0xa.c913268b7310da9p-19L, 0xc.4cbcbc26b8c299cp-21L, -0xa.7c208b4d0dd68c5p-21L, 0xb.a4a9e9cb3e66c66p-23L, -0xf.be58d677e7a1ad2p-29L, -0xe.495f10d77864d6p-29L, -0x9.dcd2be2673f3d47p-38L, -0xb.52c67607d112652p-38L, 0xa.5f8f5c66a64e114p-40L, 0xb.4b833f8b8ad0a0ap-47L, -0xa.89ebc85e9217eeap-52L, -0xd.9ca1e014c35331bp-60L, 0xa.a69985f2bc1edb9p-70L, -0x9.fb70f3189b26326p-83L, -0xe.86c417c2c3da4c7p-107L, 0x0p+0L}; + return {0x0p+0L, 0xe.cceb08e0232ebfep-15L, 0x8.697cc2a13d0ee1p-7L, 0xa.529c93355636f38p-4L, 0x8.fe286827bf83d25p-4L, -0xe.a4bba81395fd148p-5L, 0x9.abad43ece0b19efp-5L, -0xb.f3225588c443427p-6L, 0xd.0bc2bb2ddca46a9p-7L, -0xb.89ad356d45a90abp-8L, 0xe.c67ee5d8b0c44cdp-10L, -0xa.bf0abdade753fd6p-12L, -0xa.fb1990274acfe19p-18L, 0x8.8522c4ecfc3eb6ep-16L, -0xa.c913268b7310da9p-19L, 0xc.4cbcbc26b8c299cp-21L, -0xa.7c208b4d0dd68c5p-21L, 0xb.a4a9e9cb3e66c66p-23L, -0xf.be58d677e7a1ad2p-29L, -0xe.495f10d77864d6p-29L, -0x9.dcd2be2673f3d47p-38L, -0xb.52c67607d112652p-38L, 0xa.5f8f5c66a64e114p-40L, 0xb.4b833f8b8ad0a0ap-47L, -0xa.89ebc85e9217eeap-52L, -0xd.9ca1e014c35331bp-60L, 0xa.a69985f2bc1edb9p-70L, -0x9.fb70f3189b26326p-83L, -0xe.86c417c2c3da4c7p-107L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xd.7b39b8b93a579b8p-12L, 0xe.3d6a2e84375262fp-6L, 0xc.bab6584977037b5p-4L, -0xa.8c8b32be0c1a23fp-3L, 0xb.663747831202959p-5L, -0xc.679beb0c165058cp-7L, 0xc.d1fd17a0ea4a983p-7L, -0x8.5285f11795c36ecp-6L, 0xe.f9fa7b60cea28cap-7L, -0x9.6a5bf38aedb5fc2p-7L, 0x8.340f26105cfe721p-8L, -0x8.da86b44e5f6c6f9p-10L, 0xa.4d6689a512a5d01p-14L, 0x8.b328caaca1f1c8cp-14L, -0xe.1368f9638643783p-16L, 0x9.80108c73b15088ep-19L, 0xa.4fdf67ebece365dp-20L, -0xc.3c0d25352fbe46dp-22L, 0xa.f68568b2566925p-27L, 0xe.d253aac33a56ee8p-28L, -0xb.f11e391bf9fc9acp-32L, -0xd.ec79677c64f81e9p-38L, 0x8.e30a80fd082403ap-40L, -0xe.0dc599cc4f0122fp-47L, -0xc.a8ab79ce599d1e7p-55L, 0xe.8fc6edbe80cc4a8p-63L, -0x9.a31aef33e745dcdp-77L, -0xe.0636941fba0f2ecp-100L, -0x0p+0L}; + return {0x0p+0L, 0xd.7b39b8b93a579b8p-12L, 0xe.3d6a2e84375262fp-6L, 0xc.bab6584977037b5p-4L, -0xa.8c8b32be0c1a23fp-3L, 0xb.663747831202959p-5L, -0xc.679beb0c165058cp-7L, 0xc.d1fd17a0ea4a983p-7L, -0x8.5285f11795c36ecp-6L, 0xe.f9fa7b60cea28cap-7L, -0x9.6a5bf38aedb5fc2p-7L, 0x8.340f26105cfe721p-8L, -0x8.da86b44e5f6c6f9p-10L, 0xa.4d6689a512a5d01p-14L, 0x8.b328caaca1f1c8cp-14L, -0xe.1368f9638643783p-16L, 0x9.80108c73b15088ep-19L, 0xa.4fdf67ebece365dp-20L, -0xc.3c0d25352fbe46dp-22L, 0xa.f68568b2566925p-27L, 0xe.d253aac33a56ee8p-28L, -0xb.f11e391bf9fc9acp-32L, -0xd.ec79677c64f81e9p-38L, 0x8.e30a80fd082403ap-40L, -0xe.0dc599cc4f0122fp-47L, -0xc.a8ab79ce599d1e7p-55L, 0xe.8fc6edbe80cc4a8p-63L, -0x9.a31aef33e745dcdp-77L, -0xe.0636941fba0f2ecp-100L, 0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0xa.9550b3a1bf69d4cp-9L, 0x9.79c3228669b01a3p-4L, -0xc.96d1f07a3cafa97p-5L, -0x8.08736119b1617adp-2L, 0xd.d2f2b8399be77e4p-2L, -0xb.77d0d1a8f344a12p-2L, 0xf.177ffbc96536692p-3L, -0xf.4f4240ae714d2acp-4L, 0x9.f3de7e41ee9a787p-5L, -0x9.f90f2f41edcdbb5p-9L, -0x8.07048dc1886be21p-8L, 0xc.9929752ea076dc3p-11L, 0x8.65a9ded0927a627p-10L, -0xb.76632cb7ef5cbbcp-11L, 0x8.ed1e446f22c9d07p-13L, 0x8.7b82e4884dc45e4p-15L, -0xb.43f8bb20adad0a1p-16L, 0x8.1dfba4938f506e5p-18L, -0x8.52b864cbdc7b5dap-23L, -0xd.b0642b5bae37c7cp-25L, 0x9.79b640126a3c29ep-27L, -0xd.5b5a695064f587ep-33L, -0xd.bbedea6b125d8c1p-36L, 0x8.1703505a92944ccp-42L, 0xf.c806dc0c202de26p-49L, -0xa.e6355d251b37dfep-57L, 0xb.cd4df0dd6d782f3p-70L, 0x8.9658e330867ad2ep-91L, -0x0p+0L}; + return {0x0p+0L, 0xa.9550b3a1bf69d4cp-9L, 0x9.79c3228669b01a3p-4L, -0xc.96d1f07a3cafa97p-5L, -0x8.08736119b1617adp-2L, 0xd.d2f2b8399be77e4p-2L, -0xb.77d0d1a8f344a12p-2L, 0xf.177ffbc96536692p-3L, -0xf.4f4240ae714d2acp-4L, 0x9.f3de7e41ee9a787p-5L, -0x9.f90f2f41edcdbb5p-9L, -0x8.07048dc1886be21p-8L, 0xc.9929752ea076dc3p-11L, 0x8.65a9ded0927a627p-10L, -0xb.76632cb7ef5cbbcp-11L, 0x8.ed1e446f22c9d07p-13L, 0x8.7b82e4884dc45e4p-15L, -0xb.43f8bb20adad0a1p-16L, 0x8.1dfba4938f506e5p-18L, -0x8.52b864cbdc7b5dap-23L, -0xd.b0642b5bae37c7cp-25L, 0x9.79b640126a3c29ep-27L, -0xd.5b5a695064f587ep-33L, -0xd.bbedea6b125d8c1p-36L, 0x8.1703505a92944ccp-42L, 0xf.c806dc0c202de26p-49L, -0xa.e6355d251b37dfep-57L, 0xb.cd4df0dd6d782f3p-70L, 0x8.9658e330867ad2ep-91L, 0x0p+0L}; } if constexpr (order == 3) { return {0x0p+0L, 0xd.ef23ef44a9bf7e6p-7L, 0xf.fb71cf02de0cb05p-4L, -0x8.76fbc0963f37be8p-1L, 0xb.c4757dff7ab7e6ep-1L, -0x8.5cf2c6824f158e6p-1L, 0xa.beb952a6cdbec82p-2L, -0xa.d762ccc9eb2601dp-2L, 0xb.35f0027de12c188p-2L, -0x9.2bdb98710a46a7ap-2L, 0xb.0f351247d3b2edap-3L, -0x8.eb30b84242b9b67p-4L, 0xb.b1a5749c2f3e942p-7L, 0xd.572f59b67919cdep-8L, -0xb.3516ec08c4d2b92p-8L, 0xc.f72e1c6ff9e2d6dp-10L, 0xe.772295aae3180b3p-15L, -0xb.e8731ba9d6fc085p-13L, 0xc.ad4dd8a66760405p-15L, -0xd.6345c24b6f75385p-20L, -0xa.51f298ee66ad3e4p-20L, 0xa.2d2d956d67f7238p-23L, -0xd.02c2f3943a728d1p-31L, -0xa.525579b7ed76162p-31L, 0xc.0c6e1e1b32163bep-37L, 0xd.e47631a948722aep-44L, -0x8.e287a56da6a461dp-51L, 0xa.a0f72f7f5d13f61p-64L, 0xf.779e334a13dd19fp-85L, -0x0p+0L}; } if constexpr (order == 4) { - return {0x0p+0L, 0xe.d4f7dc266880dc5p-5L, -0x8.54b1a91e3c07cabp-5L, -0xb.756bc5953fc385dp-1L, 0x8.fd85bf73ff4da1p+1L, -0xd.135907cdef77f86p+1L, 0xa.d1b1380b495aeaap+1L, -0xe.1dc9ba1f6af0fa5p-1L, -0x8.1c9faa033715437p+0L, 0xe.70719adcdae7ec4p+0L, -0x9.9b8fa1bc7e12e6ep+0L, 0x8.23a26399544b84bp-5L, 0xa.eaddd56169ee9cdp-1L, -0xa.b481d5e4e9b9684p-1L, 0xa.79b3a285d814a56p-2L, -0x8.b78df8f23eebd9ap-4L, -0x8.653044fe20f733p-6L, 0xf.e8f321b94c6f489p-7L, -0x8.93ab4e369e900fp-8L, 0x8.18e721eb7954d94p-12L, 0xe.de2d091a80b9ee2p-14L, -0xb.72bac364ced9545p-16L, 0x9.9c60964d4ada3f3p-22L, 0xf.6419dee46b558e8p-24L, -0x9.8f70f1115417f37p-29L, -0x8.3466712818e830ep-35L, 0xd.5a4368c8a906c55p-43L, -0xc.b8d6308a3e25ebp-55L, -0x9.41b2dacc9130e5dp-74L, -0x0p+0L}; + return {0x0p+0L, 0xe.d4f7dc266880dc5p-5L, -0x8.54b1a91e3c07cabp-5L, -0xb.756bc5953fc385dp-1L, 0x8.fd85bf73ff4da1p+1L, -0xd.135907cdef77f86p+1L, 0xa.d1b1380b495aeaap+1L, -0xe.1dc9ba1f6af0fa5p-1L, -0x8.1c9faa033715437p+0L, 0xe.70719adcdae7ec4p+0L, -0x9.9b8fa1bc7e12e6ep+0L, 0x8.23a26399544b84bp-5L, 0xa.eaddd56169ee9cdp-1L, -0xa.b481d5e4e9b9684p-1L, 0xa.79b3a285d814a56p-2L, -0x8.b78df8f23eebd9ap-4L, -0x8.653044fe20f733p-6L, 0xf.e8f321b94c6f489p-7L, -0x8.93ab4e369e900fp-8L, 0x8.18e721eb7954d94p-12L, 0xe.de2d091a80b9ee2p-14L, -0xb.72bac364ced9545p-16L, 0x9.9c60964d4ada3f3p-22L, 0xf.6419dee46b558e8p-24L, -0x9.8f70f1115417f37p-29L, -0x8.3466712818e830ep-35L, 0xd.5a4368c8a906c55p-43L, -0xc.b8d6308a3e25ebp-55L, -0x9.41b2dacc9130e5dp-74L, 0x0p+0L}; } if constexpr (order == 5) { - return {0x0p+0L, 0xc.5145f8fa5d7812bp-3L, -0x8.5c765a89f338723p+0L, 0x9.80e8bd62f0e36d7p+1L, -0xc.052feaf5df5265fp+1L, 0xa.51cf1f08246b12ap+1L, -0x8.8a413c74ecd0982p+1L, 0x8.c71226bcd019464p+1L, -0x9.c84334dd03bcb23p+1L, 0xc.0223638d6d8a444p+1L, -0x8.5203ca3cc7208f6p+2L, 0xa.9284ee82627b576p+2L, -0xa.5a34298e2d8cfacp+2L, 0xe.4078a18719a503cp+1L, -0xc.16f69e44f3f4fd2p+0L, 0xb.b0850b3844f8cadp-3L, 0xd.8544d440c6033bfp-3L, -0x9.5a8b6d2e8407dd6p-3L, 0xa.440c4e0731919f2p-5L, -0x8.b6ec8fe746979d1p-9L, -0xc.abeababfa6ac0f1p-10L, 0xb.09de79617e3529fp-12L, -0x8.56de0126d2a8a97p-17L, -0xa.2482acbd44843d2p-19L, 0x9.1c5eaa88ac31dcbp-24L, 0x8.5c31de2c9d0ea8bp-30L, -0x9.6d6295ae9addc71p-37L, 0xd.455ad309c458ed8p-49L, 0x9.a7e7c45e7d9feeap-67L, 0x0p+0L}; + return {0x0p+0L, 0xc.5145f8fa5d7812bp-3L, -0x8.5c765a89f338723p+0L, 0x9.80e8bd62f0e36d7p+1L, -0xc.052feaf5df5265fp+1L, 0xa.51cf1f08246b12ap+1L, -0x8.8a413c74ecd0982p+1L, 0x8.c71226bcd019464p+1L, -0x9.c84334dd03bcb23p+1L, 0xc.0223638d6d8a444p+1L, -0x8.5203ca3cc7208f6p+2L, 0xa.9284ee82627b576p+2L, -0xa.5a34298e2d8cfacp+2L, 0xe.4078a18719a503cp+1L, -0xc.16f69e44f3f4fd2p+0L, 0xb.b0850b3844f8cadp-3L, 0xd.8544d440c6033bfp-3L, -0x9.5a8b6d2e8407dd6p-3L, 0xa.440c4e0731919f2p-5L, -0x8.b6ec8fe746979d1p-9L, -0xc.abeababfa6ac0f1p-10L, 0xb.09de79617e3529fp-12L, -0x8.56de0126d2a8a97p-17L, -0xa.2482acbd44843d2p-19L, 0x9.1c5eaa88ac31dcbp-24L, 0x8.5c31de2c9d0ea8bp-30L, -0x9.6d6295ae9addc71p-37L, 0xd.455ad309c458ed8p-49L, 0x9.a7e7c45e7d9feeap-67L, -0x0p+0L}; } if constexpr (order == 6) { - return {0x0p+0L, 0xf.0ab7ac0a2d5d3e8p-2L, -0xe.c9a85911c615c82p+1L, 0xd.81f1cabf66b5001p+3L, -0xf.a8efd3c4ec3c419p+4L, 0xd.8ecf71990eca11bp+5L, -0x9.e485bf1e50edc17p+6L, 0xd.0812fcefab32f7bp+6L, -0xf.7416dd5b55881cap+6L, 0xf.e78b4c99c8261c4p+6L, -0xd.f7706e0646ed8ddp+6L, 0xa.a2fa4f007a4af9bp+6L, -0xe.1ce51aadeae94b8p+5L, 0xe.8bf371344016517p+4L, -0xc.682f15c0e7b935cp+2L, -0xd.2beed726f676c5ap+2L, 0x8.32dfdce7f6881c4p+3L, -0x8.d3c1df77e743d81p+2L, 0x9.74f960ac0d34b75p+0L, -0x9.e56cd1213828f04p-5L, -0x8.da59d3d53874134p-4L, 0x8.ad18a34d4e700e2p-6L, -0xa.e33531e49a3a34ep-11L, -0xa.edab0664546ca1p-13L, 0xe.2bdf2954afcd1ep-18L, 0xe.4b9c033e2c84ec9p-24L, -0xb.1fb29623912c4c5p-30L, 0xb.b4bb3eda211db22p-41L, 0x8.8459c371cf4ab4bp-58L, 0x0p+0L}; + return {0x0p+0L, 0xf.0ab7ac0a2d5d3e8p-2L, -0xe.c9a85911c615c82p+1L, 0xd.81f1cabf66b5001p+3L, -0xf.a8efd3c4ec3c419p+4L, 0xd.8ecf71990eca11bp+5L, -0x9.e485bf1e50edc17p+6L, 0xd.0812fcefab32f7bp+6L, -0xf.7416dd5b55881cap+6L, 0xf.e78b4c99c8261c4p+6L, -0xd.f7706e0646ed8ddp+6L, 0xa.a2fa4f007a4af9bp+6L, -0xe.1ce51aadeae94b8p+5L, 0xe.8bf371344016517p+4L, -0xc.682f15c0e7b935cp+2L, -0xd.2beed726f676c5ap+2L, 0x8.32dfdce7f6881c4p+3L, -0x8.d3c1df77e743d81p+2L, 0x9.74f960ac0d34b75p+0L, -0x9.e56cd1213828f04p-5L, -0x8.da59d3d53874134p-4L, 0x8.ad18a34d4e700e2p-6L, -0xa.e33531e49a3a34ep-11L, -0xa.edab0664546ca1p-13L, 0xe.2bdf2954afcd1ep-18L, 0xe.4b9c033e2c84ec9p-24L, -0xb.1fb29623912c4c5p-30L, 0xb.b4bb3eda211db22p-41L, 0x8.8459c371cf4ab4bp-58L, -0x0p+0L}; } if constexpr (order == 7) { return {0x0p+0L, 0xe.c386f5e602e22c6p-1L, -0x8.615c585940c9ee7p+3L, 0x8.85e9ba6b1aa85ccp+5L, -0xa.220ed77990ea00bp+6L, 0xf.576a4111664dc93p+6L, -0xe.f502ad56a76577ep+6L, 0x8.7536f43aab75351p+6L, 0x9.ddc90b0228ce8d7p+2L, -0xb.e01ea6e7aa8a396p+6L, 0xd.bbefb63b9185cdp+7L, -0xa.ceea2e0c37d88e3p+8L, 0xc.956af742a2c67bbp+8L, -0xb.b8b74d94c4b8e53p+8L, 0x9.a66ca166a39d2d4p+8L, -0xe.9084343fd1b7644p+7L, 0x9.3f1020c8928bd55p+7L, -0x8.770098e0d827732p+6L, 0x8.9ffe00b7ab651d2p+4L, 0xc.810d4eea709578cp-2L, -0xe.5ca82d384b2dbfdp+0L, 0xf.88e6b0c619ac534p-2L, -0xd.1ff7f0d4a16a0e5p-6L, -0xd.4a9ed441ba370f6p-8L, 0xc.b8c5f71d7b945cfp-12L, 0xd.6a124f9ccac6c82p-18L, -0xf.5b8668d520288fbp-24L, 0xb.9003503d04bfb0cp-34L, 0x8.698313f351569a4p-50L, 0x0p+0L}; @@ -1548,19 +1886,19 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0x8.aa8ac563754c257p+0L, -0xa.7f61d351960f794p+3L, 0xb.86f620f57cbe932p+5L, -0xf.4a67f658f7d0a3cp+6L, 0xd.f8588069a68203p+7L, -0x9.c948c01fe7a3daep+8L, 0xb.ce67a857da36deap+8L, -0xd.5b6484c8b08d94p+8L, 0xe.23f6cd0bdce6402p+8L, -0xd.78802bc1e4e0454p+8L, 0xb.9542ce55da38fbfp+8L, -0x9.423735cd8a7a408p+8L, 0xd.9ec3effb54aa43bp+7L, -0x8.d708293d724a1cp+7L, 0xa.0f0b74e21a99604p+6L, -0xa.3001862df903727p+5L, 0x8.40c736ecd66e3b7p+4L, -0xc.7785b363b31632ap+1L, -0xb.75c761697e78222p+0L, 0x9.d5d0181f80e2122p+0L, -0xa.c46b691cb246e7cp-2L, 0xa.e5031d144bd1a3cp-6L, 0xb.9644270369ccd47p-8L, -0x9.5bdcced391cd468p-11L, -0x9.acd6af648a62d24p-17L, 0x8.67f844ea6ac9781p-22L, -0x9.03a9abaad597738p-32L, -0xd.1d6ceaac9a2dc82p-48L, -0x0p+0L}; } if constexpr (order == 9) { - return {0x0p+0L, 0x8.ba7d8eb39831c18p+0L, -0xa.e7b1da03950427fp+3L, 0xc.2cb815c9848fe3fp+5L, -0x8.0471c6326a024f5p+7L, 0xe.01e0dc6fb09f8cp+7L, -0x8.f069828b6686adbp+8L, 0x9.9a827173155c815p+8L, -0xa.24c51cda2ee968bp+8L, 0xa.8062115bf26b28ap+8L, -0x9.6b7c8b797831eb6p+8L, 0xe.2dec5c5f666d9f8p+7L, -0x9.db9046e0c283a87p+7L, 0xd.258c0c883e39073p+6L, -0xe.01ac1f2494c092fp+5L, 0x8.92a6aee8d1e432cp+4L, 0xd.f0ca84cbce12938p-1L, -0xb.55fa92090f522ecp+2L, 0xd.efd4a4a391e9b21p+2L, -0xb.d4e0815eda4a88ap+2L, 0xc.349069e83f691d5p+1L, -0xd.4d6fd92e2793a35p-1L, 0x8.99bb20dc4eddf8ap-4L, 0x8.c8e3231160d8992p-6L, -0xc.468c211c336121fp-9L, -0xd.7727a335dcb4b2ep-15L, 0x8.af2f4ba3ff0ddeep-19L, -0xd.e2248f7707ee606p-29L, -0xa.18e01f3aa66c51bp-43L, 0x0p+0L}; + return {0x0p+0L, 0x8.ba7d8eb39831c18p+0L, -0xa.e7b1da03950427fp+3L, 0xc.2cb815c9848fe3fp+5L, -0x8.0471c6326a024f5p+7L, 0xe.01e0dc6fb09f8cp+7L, -0x8.f069828b6686adbp+8L, 0x9.9a827173155c815p+8L, -0xa.24c51cda2ee968bp+8L, 0xa.8062115bf26b28ap+8L, -0x9.6b7c8b797831eb6p+8L, 0xe.2dec5c5f666d9f8p+7L, -0x9.db9046e0c283a87p+7L, 0xd.258c0c883e39073p+6L, -0xe.01ac1f2494c092fp+5L, 0x8.92a6aee8d1e432cp+4L, 0xd.f0ca84cbce12938p-1L, -0xb.55fa92090f522ecp+2L, 0xd.efd4a4a391e9b21p+2L, -0xb.d4e0815eda4a88ap+2L, 0xc.349069e83f691d5p+1L, -0xd.4d6fd92e2793a35p-1L, 0x8.99bb20dc4eddf8ap-4L, 0x8.c8e3231160d8992p-6L, -0xc.468c211c336121fp-9L, -0xd.7727a335dcb4b2ep-15L, 0x8.af2f4ba3ff0ddeep-19L, -0xd.e2248f7707ee606p-29L, -0xa.18e01f3aa66c51bp-43L, -0x0p+0L}; } if constexpr (order == 10) { - return {0x0p+0L, 0xa.bee90172f4255c3p-1L, -0xd.a135ca4c3c846a5p+2L, 0xf.7a8579b5e4a4f6ap+4L, -0xa.6d47322333f3562p+6L, 0x9.6c44d5844c887bdp+7L, -0xc.a2b764377e3a1ebp+7L, 0xe.50fbae94e0bc253p+7L, -0xf.9757925a45f487cp+7L, 0x8.530717ee753bcd5p+8L, -0x8.3ff3ae16c29c979p+8L, 0xf.159bf6afa230cc6p+7L, -0xd.147e7fb73425ae6p+7L, 0xa.acb695f3e0fc1c3p+7L, -0x8.13b08baf665a54p+7L, 0xb.87a2d1f4db643efp+6L, -0xf.6fad2d9aa709453p+5L, 0x9.3d8f0994c5d9f7bp+5L, -0x9.df34921f79618f8p+4L, 0x9.db8f809079523d6p+3L, -0x8.8cc2eca027a29bcp+2L, 0x9.dad4bb17829d702p+0L, -0xe.1960c3b3edb91b1p-4L, -0xa.ec744dc5d17a352p-5L, 0x9.d8da354be17d4f6p-7L, 0x9.1b83681fb7ba338p-13L, -0xc.e137e4279ffaf08p-17L, 0xc.b149cd09c7159bbp-26L, 0x9.3a1452c9a7cedecp-39L, -0x0p+0L}; + return {0x0p+0L, 0xa.bee90172f4255c3p-1L, -0xd.a135ca4c3c846a5p+2L, 0xf.7a8579b5e4a4f6ap+4L, -0xa.6d47322333f3562p+6L, 0x9.6c44d5844c887bdp+7L, -0xc.a2b764377e3a1ebp+7L, 0xe.50fbae94e0bc253p+7L, -0xf.9757925a45f487cp+7L, 0x8.530717ee753bcd5p+8L, -0x8.3ff3ae16c29c979p+8L, 0xf.159bf6afa230cc6p+7L, -0xd.147e7fb73425ae6p+7L, 0xa.acb695f3e0fc1c3p+7L, -0x8.13b08baf665a54p+7L, 0xb.87a2d1f4db643efp+6L, -0xf.6fad2d9aa709453p+5L, 0x9.3d8f0994c5d9f7bp+5L, -0x9.df34921f79618f8p+4L, 0x9.db8f809079523d6p+3L, -0x8.8cc2eca027a29bcp+2L, 0x9.dad4bb17829d702p+0L, -0xe.1960c3b3edb91b1p-4L, -0xa.ec744dc5d17a352p-5L, 0x9.d8da354be17d4f6p-7L, 0x9.1b83681fb7ba338p-13L, -0xc.e137e4279ffaf08p-17L, 0xc.b149cd09c7159bbp-26L, 0x9.3a1452c9a7cedecp-39L, 0x0p+0L}; } if constexpr (order == 11) { - return {0x0p+0L, 0xc.15d0c5140aaa4eep-2L, -0xf.7190d63c174081fp+1L, 0x8.ba72fb2d2252c3fp+4L, -0xb.740eabe264bca0cp+5L, 0x9.b46f19b0fd72575p+6L, -0xb.883398ebe4385ep+6L, 0xb.30e910677d07ffp+6L, -0xb.419dbbc73b9d5a1p+6L, 0xc.19e0dbd12662221p+6L, -0xb.826867ada01fb9cp+6L, 0x9.5143da543a25f3ap+6L, -0xe.bcab98d7996a714p+5L, 0xb.d3311ddf4d7bdfbp+5L, -0x8.6eecfd0d6810f0bp+5L, 0xa.7c120c15da204bcp+4L, -0xc.dc6b77ec19e1f99p+3L, 0xf.35cdfe48953061cp+2L, -0xe.c39532a44de361dp+1L, 0xc.1727280b8b20591p+0L, -0x9.e40d8406be2c4fap-1L, 0xc.388bf027ec112cbp-3L, -0xf.968ede9ca84c64dp-9L, -0x9.93e06924a09fd14p-6L, 0x8.9dc64ac28a2fbc2p-8L, -0x8.4a44983b6d59171p-16L, -0xb.c238c931736ccdbp-17L, 0x9.8e9343ad5a2f5d8p-26L, 0xd.e1d77974b4c54b1p-39L, -0x0p+0L}; + return {0x0p+0L, 0xc.15d0c5140aaa4eep-2L, -0xf.7190d63c174081fp+1L, 0x8.ba72fb2d2252c3fp+4L, -0xb.740eabe264bca0cp+5L, 0x9.b46f19b0fd72575p+6L, -0xb.883398ebe4385ep+6L, 0xb.30e910677d07ffp+6L, -0xb.419dbbc73b9d5a1p+6L, 0xc.19e0dbd12662221p+6L, -0xb.826867ada01fb9cp+6L, 0x9.5143da543a25f3ap+6L, -0xe.bcab98d7996a714p+5L, 0xb.d3311ddf4d7bdfbp+5L, -0x8.6eecfd0d6810f0bp+5L, 0xa.7c120c15da204bcp+4L, -0xc.dc6b77ec19e1f99p+3L, 0xf.35cdfe48953061cp+2L, -0xe.c39532a44de361dp+1L, 0xc.1727280b8b20591p+0L, -0x9.e40d8406be2c4fap-1L, 0xc.388bf027ec112cbp-3L, -0xf.968ede9ca84c64dp-9L, -0x9.93e06924a09fd14p-6L, 0x8.9dc64ac28a2fbc2p-8L, -0x8.4a44983b6d59171p-16L, -0xb.c238c931736ccdbp-17L, 0x9.8e9343ad5a2f5d8p-26L, 0xd.e1d77974b4c54b1p-39L, 0x0p+0L}; } if constexpr (order == 12) { - return {0x0p+0L, 0x9.1480bef44c4469ep-3L, -0xb.a584c6bd94a1187p+0L, 0xd.1eb7f2c429e0f2ep+2L, -0x8.774ff1631cd3a64p+4L, 0xd.bf61476f622a169p+4L, -0xe.e5fff6d9d283fd3p+4L, 0xc.7ca8972468e2375p+4L, -0xb.a10d8d44022caeap+4L, 0xd.0bf0e90f39e8d94p+4L, -0xc.589dd6de50ec435p+4L, 0x9.080317497a44b68p+4L, -0xd.4bcc6a26d36101bp+3L, 0xb.17a90e8cb9542f6p+3L, -0xf.868a33cfb4e032cp+2L, 0x8.582a0590e784928p+2L, -0x9.73fc0eb91ba83cbp+1L, 0xb.bb58cde0ef3d615p+0L, -0x9.c855651ad1a4682p-1L, 0x8.73474a22b80bb4fp-3L, -0x8.ecf338b09522ep-5L, 0x8.f0a0fb7c1c0d8ddp-8L, 0xb.13140f8352b2905p-6L, -0x8.0288713e357cfe6p-6L, 0xe.ed032d5499f9d13p-9L, -0x9.cbf215a660e12a2p-13L, -0xa.f13c07f71d1127bp-16L, 0xc.9eb1f575f7dbcbbp-26L, 0x9.26242b289016945p-37L, 0x0p+0L}; + return {0x0p+0L, 0x9.1480bef44c4469ep-3L, -0xb.a584c6bd94a1187p+0L, 0xd.1eb7f2c429e0f2ep+2L, -0x8.774ff1631cd3a64p+4L, 0xd.bf61476f622a169p+4L, -0xe.e5fff6d9d283fd3p+4L, 0xc.7ca8972468e2375p+4L, -0xb.a10d8d44022caeap+4L, 0xd.0bf0e90f39e8d94p+4L, -0xc.589dd6de50ec435p+4L, 0x9.080317497a44b68p+4L, -0xd.4bcc6a26d36101bp+3L, 0xb.17a90e8cb9542f6p+3L, -0xf.868a33cfb4e032cp+2L, 0x8.582a0590e784928p+2L, -0x9.73fc0eb91ba83cbp+1L, 0xb.bb58cde0ef3d615p+0L, -0x9.c855651ad1a4682p-1L, 0x8.73474a22b80bb4fp-3L, -0x8.ecf338b09522ep-5L, 0x8.f0a0fb7c1c0d8ddp-8L, 0xb.13140f8352b2905p-6L, -0x8.0288713e357cfe6p-6L, 0xe.ed032d5499f9d13p-9L, -0x9.cbf215a660e12a2p-13L, -0xa.f13c07f71d1127bp-16L, 0xc.9eb1f575f7dbcbbp-26L, 0x9.26242b289016945p-37L, -0x0p+0L}; } if constexpr (order == 13) { - return {0x0p+0L, 0x9.6dd40b0366fa267p-6L, -0xc.1dd48316e0854aap-3L, 0xd.e3672174e9d1088p-1L, -0x9.64bdec0bd7ca5b2p+1L, 0x8.70348a6c98aa9bbp+2L, -0xa.fa3833406a56d39p+2L, 0xb.751fdfa491a058dp+2L, -0xa.d3bbf6a498f90bp+2L, 0xa.124bc010cc1696ap+2L, -0x9.8487f9ebff6b313p+2L, 0x9.1f220ceedb2076ep+2L, -0x8.3fe9ab7bb39dc96p+2L, 0xd.47a4451db725977p+1L, -0xa.4c991c276c5a664p+1L, 0x8.54b6a108a07f661p+1L, -0xc.7b066ce02b0141p+0L, 0x8.01de5f9352ed819p+0L, -0xa.19f78236cf689c9p-1L, 0xd.32dbeffc9a904b7p-2L, -0xe.9b01956f96deb78p-3L, 0xd.250d6a385e86ee4p-4L, -0xc.474fb1a89e70305p-5L, 0xb.3b27cb2e4a88b76p-6L, -0xc.8e1b591d78ebf4ap-8L, 0x8.3e81ebd0d6e0c17p-11L, 0x9.b169f1bffb66918p-14L, -0xc.96dfedfd40cbd7ep-23L, -0x9.17fc02283edf3c4p-33L, -0x0p+0L}; + return {0x0p+0L, 0x9.6dd40b0366fa267p-6L, -0xc.1dd48316e0854aap-3L, 0xd.e3672174e9d1088p-1L, -0x9.64bdec0bd7ca5b2p+1L, 0x8.70348a6c98aa9bbp+2L, -0xa.fa3833406a56d39p+2L, 0xb.751fdfa491a058dp+2L, -0xa.d3bbf6a498f90bp+2L, 0xa.124bc010cc1696ap+2L, -0x9.8487f9ebff6b313p+2L, 0x9.1f220ceedb2076ep+2L, -0x8.3fe9ab7bb39dc96p+2L, 0xd.47a4451db725977p+1L, -0xa.4c991c276c5a664p+1L, 0x8.54b6a108a07f661p+1L, -0xc.7b066ce02b0141p+0L, 0x8.01de5f9352ed819p+0L, -0xa.19f78236cf689c9p-1L, 0xd.32dbeffc9a904b7p-2L, -0xe.9b01956f96deb78p-3L, 0xd.250d6a385e86ee4p-4L, -0xc.474fb1a89e70305p-5L, 0xb.3b27cb2e4a88b76p-6L, -0xc.8e1b591d78ebf4ap-8L, 0x8.3e81ebd0d6e0c17p-11L, 0x9.b169f1bffb66918p-14L, -0xc.96dfedfd40cbd7ep-23L, -0x9.17fc02283edf3c4p-33L, 0x0p+0L}; } if constexpr (order == 14) { return {0x0p+0L, 0xc.6eb70b42708eae9p-9L, -0xf.fda6f00329e9b71p-6L, 0x8.fc6fc4ef54c1db5p-3L, -0xb.7571951d3c8341p-2L, 0x9.0067ed5854443d7p-1L, -0x8.f943b3124055b9cp-1L, 0xc.84c85bf74ee8fcap-2L, -0x9.e8b35b15b042f15p-2L, 0xb.a6b0570d4675539p-2L, -0xb.40132bce1109dcp-2L, 0xf.3b5d4574c46a8f3p-3L, -0xb.04184a4ea6416d5p-3L, 0xa.4795456b82864acp-3L, -0xf.3e84e8eae3b6c57p-4L, 0x8.9297742ef492803p-4L, -0xb.74e803f1e728564p-5L, 0x8.5447df6496d92bp-5L, -0x8.b7538f93b58072dp-6L, 0x8.0c57d49a41b3dccp-7L, -0x9.7d029ef3a886eafp-8L, 0x9.1baf7134b7c3668p-9L, -0xb.9d88649c725b305p-11L, 0x8.ef6641b8591aa6cp-12L, -0xd.c389d26eba54b8ep-14L, 0xb.99388fbb2600ba3p-17L, 0xa.ef5bb62a05b60a1p-19L, -0xc.93892cf88209c7cp-26L, -0x9.04cc8adc99aa115p-35L, 0x0p+0L}; @@ -1569,52 +1907,99 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.d99d611c0465d7fca8709213621p-12Q, 0x1.0d2f985427a1dc1f62afa99d998cp-4Q, 0x1.4a539266aac6de6ff0ee136fe6bp-1Q, 0x1.1fc50d04f7f07a49e55f06b78357p-1Q, -0x1.d497750272bfa28f3f1990b740d3p-2Q, 0x1.3575a87d9c1633de9f0ee95125b3p-2Q, -0x1.7e644ab11888684db8a7b8d90491p-3Q, 0x1.a1785765bb948d52e0838b0df1ap-4Q, -0x1.7135a6ada8b52155f89869cf22d5p-5Q, 0x1.d8cfdcbb1618899a1617de65e07ep-7Q, -0x1.57e157b5bcea7fac037e4b9b62bp-9Q, -0x1.5f633204e959fc32c151ba98708bp-15Q, 0x1.10a4589d9f87d6dc51e36837ed03p-13Q, -0x1.592264d16e621b5275bdd9d12d4dp-16Q, 0x1.89979784d7185338d2badb26cadp-18Q, -0x1.4f841169a1bad189406e2832bc2dp-18Q, 0x1.74953d3967ccd8cc322dbf25294ep-20Q, -0x1.f7cb1acefcf435a3d287cb8094aap-26Q, -0x1.c92be21aef0c9ac0fb550ddd5f85p-26Q, -0x1.3b9a57c4ce7e7a8e7b0e1df18a41p-35Q, -0x1.6a58cec0fa224ca49741d50416e8p-35Q, 0x1.4bf1eb8cd4c9c2273508a8b73f42p-37Q, 0x1.697067f1715a141417bb7553b3a4p-44Q, -0x1.513d790bd242fdd412e02eaf3fb6p-49Q, -0x1.b3943c02986a6636aaf05d95d85p-57Q, 0x1.54d330be5783db7123cd1333ac81p-67Q, -0x1.3f6e1e631364c64c65f6b5a7fe31p-80Q, -0x1.d0d882f8587b498d8efb759e0601p-104Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.d99d611c0465d7fca87092137394p-12Q, 0x1.0d2f985427a1dc1f62afa99d998fp-4Q, 0x1.4a539266aac6de6ff0ee136fe6aap-1Q, 0x1.1fc50d04f7f07a49e55f06b78355p-1Q, -0x1.d497750272bfa28f3f1990b740bdp-2Q, 0x1.3575a87d9c1633de9f0ee95125a2p-2Q, -0x1.7e644ab11888684db8a7b8d90489p-3Q, 0x1.a1785765bb948d52e0838b0df196p-4Q, -0x1.7135a6ada8b52155f89869cf22c7p-5Q, 0x1.d8cfdcbb1618899a1617de65e071p-7Q, -0x1.57e157b5bcea7fac037e4b9b62aap-9Q, -0x1.5f633204e959fc32c151ba987165p-15Q, 0x1.10a4589d9f87d6dc51e36837ed0bp-13Q, -0x1.592264d16e621b5275bdd9d12d3ep-16Q, 0x1.89979784d7185338d2badb26cabcp-18Q, -0x1.4f841169a1bad189406e2832bc2dp-18Q, 0x1.74953d3967ccd8cc322dbf252946p-20Q, -0x1.f7cb1acefcf435a3d287cb8094c6p-26Q, -0x1.c92be21aef0c9ac0fb550ddd5f87p-26Q, -0x1.3b9a57c4ce7e7a8e7b0e1df188abp-35Q, -0x1.6a58cec0fa224ca49741d5041713p-35Q, 0x1.4bf1eb8cd4c9c2273508a8b73f46p-37Q, 0x1.697067f1715a141417bb7553b3a7p-44Q, -0x1.513d790bd242fdd412e02eaf3fd9p-49Q, -0x1.b3943c02986a6636aaf05d95d84p-57Q, 0x1.54d330be5783db7123cd1333ac9cp-67Q, -0x1.3f6e1e631364c64c65f6b5a7fe23p-80Q, -0x1.d0d882f8587b498d8efb759e05fp-104Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.af673717274af370272903c200ap-9Q, 0x1.c7ad45d086ea4c5ed9ed7e340d9bp-3Q, 0x1.9756cb092ee06f6ac1eb577b9667p-1Q, -0x1.51916657c183447d0774789d62f8p+0Q, 0x1.6cc6e8f0624052b2c0fdcc8950a9p-2Q, -0x1.8cf37d6182ca0b170d0a042e41d9p-4Q, 0x1.9a3fa2f41d4953051b0c6d4a1af5p-4Q, -0x1.0a50be22f2b86dd755f1bb101dbcp-3Q, 0x1.df3f4f6c19d45193b61450be397cp-4Q, -0x1.2d4b7e715db6bf84cb93e1a160d4p-4Q, 0x1.0681e4c20b9fce41d5b4e567565fp-5Q, -0x1.1b50d689cbed8df146901e68b65ap-7Q, 0x1.49acd134a254ba0136bf2c9ddd2bp-11Q, 0x1.16651955943e391787562b8520dbp-11Q, -0x1.c26d1f2c70c86f0644644cef751p-13Q, 0x1.3002118e762a111c6bcee4aaae42p-16Q, 0x1.49fbecfd7d9c6cba55cd30ac0602p-17Q, -0x1.8781a4a6a5f7c8daadd9ede24939p-19Q, 0x1.5ed0ad164acd249f0f9d827483acp-24Q, 0x1.da4a7558674addd03b35614f79bdp-25Q, -0x1.7e23c7237f3f9358779e22d38cap-29Q, -0x1.bd8f2cef8c9f03d137232e9e48dbp-35Q, 0x1.1c61501fa10480730673344e35a7p-37Q, -0x1.c1b8b33989e0245e7c861b898ec7p-44Q, -0x1.95156f39cb33a3cd95db28e3ba68p-52Q, 0x1.d1f8ddb7d01989509bfbf0327cdap-60Q, -0x1.34635de67ce8bb9a35ccd2f4bc82p-74Q, -0x1.c0c6d283f741e5d8d9e1ced44cbap-97Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.af673717274af370272903c1fa7cp-9Q, 0x1.c7ad45d086ea4c5ed9ed7e340defp-3Q, 0x1.9756cb092ee06f6ac1eb577b96f6p-1Q, -0x1.51916657c183447d0774789d6344p+0Q, 0x1.6cc6e8f0624052b2c0fdcc8950d3p-2Q, -0x1.8cf37d6182ca0b170d0a042e4192p-4Q, 0x1.9a3fa2f41d4953051b0c6d4a1b03p-4Q, -0x1.0a50be22f2b86dd755f1bb101decp-3Q, 0x1.df3f4f6c19d45193b61450be39f8p-4Q, -0x1.2d4b7e715db6bf84cb93e1a16129p-4Q, 0x1.0681e4c20b9fce41d5b4e56756a7p-5Q, -0x1.1b50d689cbed8df146901e68b6b4p-7Q, 0x1.49acd134a254ba0136bf2c9ddd8p-11Q, 0x1.16651955943e391787562b852142p-11Q, -0x1.c26d1f2c70c86f0644644cef75b6p-13Q, 0x1.3002118e762a111c6bcee4aaae9bp-16Q, 0x1.49fbecfd7d9c6cba55cd30ac067dp-17Q, -0x1.8781a4a6a5f7c8daadd9ede249c3p-19Q, 0x1.5ed0ad164acd249f0f9d827483fep-24Q, 0x1.da4a7558674addd03b35614f7a6dp-25Q, -0x1.7e23c7237f3f9358779e22d38d23p-29Q, -0x1.bd8f2cef8c9f03d137232e9e498bp-35Q, 0x1.1c61501fa10480730673344e3608p-37Q, -0x1.c1b8b33989e0245e7c861b898f54p-44Q, -0x1.95156f39cb33a3cd95db28e3bb11p-52Q, 0x1.d1f8ddb7d01989509bfbf0327d67p-60Q, -0x1.34635de67ce8bb9a35ccd2f4bcc3p-74Q, -0x1.c0c6d283f741e5d8d9e1ced44ca2p-97Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.52aa167437ed3a97a2d16e2e814p-6Q, 0x1.2f386450cd3603452775e405d98cp-1Q, -0x1.92da3e0f4795f52ddad3070744b5p-2Q, -0x1.010e6c23362c2f5a0189ea0fe507p+1Q, 0x1.ba5e5707337cefc73943a8303951p+1Q, -0x1.6efa1a351e68942304e8e68b7a36p+1Q, 0x1.e2efff792ca6cd2456dfdb721d3p+0Q, -0x1.e9e84815ce29a5578b4bc0477766p-1Q, 0x1.3e7bcfc83dd34f0d929299012fe2p-2Q, -0x1.3f21e5e83db9b76a1e6a21ec102ep-6Q, -0x1.00e091b8310d7c425038e08db391p-5Q, 0x1.93252ea5d40edb85ff0ddad30d7p-8Q, 0x1.0cb53bda124f4c4d4c0ae3af47ep-7Q, -0x1.6ecc6596fdeb97786cd08cbbbc9bp-8Q, 0x1.1da3c88de4593a0d10cc249b863dp-10Q, 0x1.0f705c9109b88bc792c8e251c2cep-12Q, -0x1.687f176415b5a1410c9f394cb9e8p-13Q, 0x1.03bf749271ea0dc9bfa9a81f431dp-15Q, -0x1.0a570c997b8f6bb3aa2b6fc455bcp-20Q, -0x1.b60c856b75c6f8f8db3b0f76f77ep-22Q, 0x1.2f36c8024d47853b1fc5abd2c44cp-24Q, -0x1.ab6b4d2a0c9eb0fb784066974351p-30Q, -0x1.b77dbd4d624bb182ce2a80889f4fp-33Q, 0x1.02e06a0b525289974212166730a4p-39Q, 0x1.f900db818405bc4cfc19c1904249p-46Q, -0x1.5cc6aba4a366fbfbcb9e7e9b0d93p-54Q, 0x1.79a9be1badaf05e53c8d4ae1d448p-67Q, 0x1.12cb1c6610cf5a5ca8d9bf44c534p-88Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.52aa167437ed3a97a2d16e2e7e71p-6Q, 0x1.2f386450cd3603452775e405daacp-1Q, -0x1.92da3e0f4795f52ddad307073cb1p-2Q, -0x1.010e6c23362c2f5a0189ea0fe7f3p+1Q, 0x1.ba5e5707337cefc73943a8303bc5p+1Q, -0x1.6efa1a351e68942304e8e68b7bacp+1Q, 0x1.e2efff792ca6cd2456dfdb721f76p+0Q, -0x1.e9e84815ce29a5578b4bc0477acbp-1Q, 0x1.3e7bcfc83dd34f0d929299013451p-2Q, -0x1.3f21e5e83db9b76a1e6a21ec3442p-6Q, -0x1.00e091b8310d7c425038e08dacbfp-5Q, 0x1.93252ea5d40edb85ff0ddad301dp-8Q, 0x1.0cb53bda124f4c4d4c0ae3af4779p-7Q, -0x1.6ecc6596fdeb97786cd08cbbbaedp-8Q, 0x1.1da3c88de4593a0d10cc249b83cep-10Q, 0x1.0f705c9109b88bc792c8e251c3f5p-12Q, -0x1.687f176415b5a1410c9f394cb959p-13Q, 0x1.03bf749271ea0dc9bfa9a81f4245p-15Q, -0x1.0a570c997b8f6bb3aa2b6fc454e1p-20Q, -0x1.b60c856b75c6f8f8db3b0f76f67dp-22Q, 0x1.2f36c8024d47853b1fc5abd2c569p-24Q, -0x1.ab6b4d2a0c9eb0fb78406697468ap-30Q, -0x1.b77dbd4d624bb182ce2a8088a4c2p-33Q, 0x1.02e06a0b5252899742121667393ep-39Q, 0x1.f900db818405bc4cfc19c190531fp-46Q, -0x1.5cc6aba4a366fbfbcb9e7e9b2b91p-54Q, 0x1.79a9be1badaf05e53c8d4ae211e7p-67Q, 0x1.12cb1c6610cf5a5ca8d9bf45819bp-88Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.bde47de89537efcc2943722b96bdp-4Q, 0x1.ff6e39e05bc1960ac6a7468afb9cp-1Q, -0x1.0edf7812c7e6f7d06a00b362f2edp+2Q, 0x1.788eafbfef56fcdc50a685d205b6p+2Q, -0x1.0b9e58d049e2b1cb9469b0149a1ap+2Q, 0x1.57d72a54d9b7d9046e3ca22b7fc2p+1Q, -0x1.5aec59993d64c03ae451f5fb9ac3p+1Q, 0x1.66be004fbc25830ff3a497ea8396p+1Q, -0x1.257b730e2148d4f4b3feb86356b8p+1Q, 0x1.61e6a248fa765db41939b126ff2cp+0Q, -0x1.1d661708485736ce63b6c04b43ccp-1Q, 0x1.7634ae9385e7d28433590ede6772p-4Q, 0x1.aae5eb36cf2339bb1da3727f868ap-5Q, -0x1.66a2dd81189a5724bb1062f0dbecp-5Q, 0x1.9ee5c38dff3c5ada29575f743c4fp-7Q, 0x1.cee452b55c630166e1f1c6509c8cp-12Q, -0x1.7d0e63753adf810a13b7946ecd49p-10Q, 0x1.95a9bb14ccec080a617568800ab6p-12Q, -0x1.ac68b8496deea7093d3eaa370cb3p-17Q, -0x1.4a3e531dccd5a7c88df667aa9ebfp-17Q, 0x1.45a5b2adacfee470f99a3f9ace09p-20Q, -0x1.a0585e72874e51a270db9477885p-28Q, -0x1.4a4aaf36fdaec2c3a3e857f50dfbp-28Q, 0x1.818dc3c36642c77c4040a75f4584p-34Q, 0x1.bc8ec635290e455c58f05f4ab9c8p-41Q, -0x1.1c50f4adb4d48c39b492719c233cp-48Q, 0x1.541ee5efeba27ec1d6332fa503dp-61Q, 0x1.eef3c669427ba33d298eab6d278p-82Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.bde47de89537efcc2943722b907bp-4Q, 0x1.ff6e39e05bc1960ac6a7468afb9ep-1Q, -0x1.0edf7812c7e6f7d06a00b362ef27p+2Q, 0x1.788eafbfef56fcdc50a685d1f90ep+2Q, -0x1.0b9e58d049e2b1cb9469b014878dp+2Q, 0x1.57d72a54d9b7d9046e3ca22b5dccp+1Q, -0x1.5aec59993d64c03ae451f5fb822ap+1Q, 0x1.66be004fbc25830ff3a497ea74efp+1Q, -0x1.257b730e2148d4f4b3feb863502dp+1Q, 0x1.61e6a248fa765db41939b126fafep+0Q, -0x1.1d661708485736ce63b6c04b417fp-1Q, 0x1.7634ae9385e7d28433590ede5d72p-4Q, 0x1.aae5eb36cf2339bb1da3727f92c7p-5Q, -0x1.66a2dd81189a5724bb1062f0dfebp-5Q, 0x1.9ee5c38dff3c5ada29575f743d87p-7Q, 0x1.cee452b55c630166e1f1c650af12p-12Q, -0x1.7d0e63753adf810a13b7946ecd6fp-10Q, 0x1.95a9bb14ccec080a6175688009ap-12Q, -0x1.ac68b8496deea7093d3eaa37178ap-17Q, -0x1.4a3e531dccd5a7c88df667aa9928p-17Q, 0x1.45a5b2adacfee470f99a3f9acab4p-20Q, -0x1.a0585e72874e51a270db9477829dp-28Q, -0x1.4a4aaf36fdaec2c3a3e857f50877p-28Q, 0x1.818dc3c36642c77c4040a75f3899p-34Q, 0x1.bc8ec635290e455c58f05f4aae9ap-41Q, -0x1.1c50f4adb4d48c39b492719c193cp-48Q, 0x1.541ee5efeba27ec1d6332fa4f538p-61Q, 0x1.eef3c669427ba33d298eab6d070cp-82Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.da9efb84cd101b891a55bf090876p-2Q, -0x1.0a963523c780f95520ba62e0ae99p-2Q, -0x1.6ead78b2a7f870bae850968cd2c2p+2Q, 0x1.1fb0b7ee7fe9b42077abdaf5e253p+4Q, -0x1.a26b20f9bdeeff0cd0b5e87989aep+4Q, 0x1.5a362701692b5d54a80faabeb08bp+4Q, -0x1.c3b93743ed5e1f4aae7ff9680d26p+2Q, -0x1.0393f54066e2a86d4f5766fcb157p+3Q, 0x1.ce0e335b9b5cfd8737f6de07ffafp+3Q, -0x1.3371f4378fc25cdcbf584ed998cep+3Q, 0x1.04744c732a8970957ba707ed40dap-2Q, 0x1.5d5bbaac2d3dd399541ae8c86b98p+2Q, -0x1.56903abc9d372d08f72cf8f9d84fp+2Q, 0x1.4f367450bb0294accf5c9a7e9554p+1Q, -0x1.16f1bf1e47dd7b33b29f107a965cp-1Q, -0x1.0ca6089fc41ee660907b2bb58a89p-3Q, 0x1.fd1e6437298de912355a40f320d6p-4Q, -0x1.127569c6d3d201e096a74c3e9f6bp-5Q, 0x1.031ce43d6f2a9b28afac205cb30cp-9Q, 0x1.dbc5a12350173dc4ceb0edd4094ep-11Q, -0x1.6e57586c99db2a8af6576e5da36dp-13Q, 0x1.338c12c9a95b47e57d454a7c5751p-19Q, 0x1.ec833bdc8d6ab1cf492647695cc2p-21Q, -0x1.31ee1e222a82fe6e397b0f1aa142p-26Q, -0x1.068cce25031d061c7d5229b84eeap-32Q, 0x1.ab486d191520d8a9aefca6d37aefp-40Q, -0x1.971ac61147c4bd5f21d58d94b0d3p-52Q, -0x1.28365b5992261cb91d89a4a5eba6p-71Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.da9efb84cd101b891a55bf085a33p-2Q, -0x1.0a963523c780f95520ba62e1635dp-2Q, -0x1.6ead78b2a7f870bae850968c013ap+2Q, 0x1.1fb0b7ee7fe9b42077abdaf556e2p+4Q, -0x1.a26b20f9bdeeff0cd0b5e878c8cap+4Q, 0x1.5a362701692b5d54a80faabe0329p+4Q, -0x1.c3b93743ed5e1f4aae7ff96667ep+2Q, -0x1.0393f54066e2a86d4f5766fcec98p+3Q, 0x1.ce0e335b9b5cfd8737f6de07dc86p+3Q, -0x1.3371f4378fc25cdcbf584ed9698fp+3Q, 0x1.04744c732a8970957ba707eb759dp-2Q, 0x1.5d5bbaac2d3dd399541ae8c8527cp+2Q, -0x1.56903abc9d372d08f72cf8f9b7f6p+2Q, 0x1.4f367450bb0294accf5c9a7e742cp+1Q, -0x1.16f1bf1e47dd7b33b29f107a7717p-1Q, -0x1.0ca6089fc41ee660907b2bb584cap-3Q, 0x1.fd1e6437298de912355a40f30818p-4Q, -0x1.127569c6d3d201e096a74c3e92a3p-5Q, 0x1.031ce43d6f2a9b28afac205ca3a5p-9Q, 0x1.dbc5a12350173dc4ceb0edd40202p-11Q, -0x1.6e57586c99db2a8af6576e5d9fc9p-13Q, 0x1.338c12c9a95b47e57d454a7c66e9p-19Q, 0x1.ec833bdc8d6ab1cf492647696452p-21Q, -0x1.31ee1e222a82fe6e397b0f1ab0a7p-26Q, -0x1.068cce25031d061c7d5229b85c51p-32Q, 0x1.ab486d191520d8a9aefca6d39becp-40Q, -0x1.971ac61147c4bd5f21d58d94dd2bp-52Q, -0x1.28365b5992261cb91d89a4a61c9dp-71Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.8a28bf1f4baf0256370de9cbbbf3p+0Q, -0x1.0b8ecb513e670e46e8b61fdb81fap+3Q, 0x1.301d17ac5e1c6daeb2bb90052014p+4Q, -0x1.80a5fd5ebbea4cbe232c3d259f67p+4Q, 0x1.4a39e3e1048d6253983413fa5691p+4Q, -0x1.1148278e9d9a1304c4d279b67053p+4Q, 0x1.18e244d79a0328c7ff6ea967eef5p+4Q, -0x1.3908669ba07796469d99446fcffap+4Q, 0x1.80446c71adb1488769cf4e1f8d42p+4Q, -0x1.0a40794798e411ebd23986f8288ap+5Q, 0x1.52509dd04c4f6aeb9cbf502539fbp+5Q, -0x1.4b468531c5b19f58ba9821786258p+5Q, 0x1.c80f1430e334a07768f1a651dda2p+4Q, -0x1.82ded3c89e7e9fa329e762fc41f5p+3Q, 0x1.7610a167089f1959ecdad356948cp+0Q, 0x1.b0a89a8818c0677d48d730c11145p+0Q, -0x1.2b516da5d080fbac57eada1e0e8ap+0Q, 0x1.488189c0e63233e3103870456b25p-2Q, -0x1.16dd91fce8d2f3a24746d4df4144p-6Q, -0x1.957d5757f4d581e1eb8139ee8367p-7Q, 0x1.613bcf2c2fc6a53ed2c91b812d4dp-9Q, -0x1.0adbc024da55152d1e362e768c76p-14Q, -0x1.44905597a89087a3899ef231d6f7p-16Q, 0x1.238bd55115863b967f9591a85e2bp-21Q, 0x1.0b863bc593a1d515b8c451fdf4ccp-27Q, -0x1.2dac52b5d35bb8e11505ead79853p-34Q, 0x1.a8ab5a61388b1db01ad92615e5f6p-46Q, 0x1.34fcf88bcfb3fdd3eace821f889ap-64Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.8a28bf1f4baf0256370de9e50cdfp+0Q, -0x1.0b8ecb513e670e46e8b61ff5e5a2p+3Q, 0x1.301d17ac5e1c6daeb2bb903493bbp+4Q, -0x1.80a5fd5ebbea4cbe232c3d8a57f1p+4Q, 0x1.4a39e3e1048d62539834148e9e34p+4Q, -0x1.1148278e9d9a1304c4d27a6289e7p+4Q, 0x1.18e244d79a0328c7ff6eaa1380dep+4Q, -0x1.3908669ba07796469d9944fd1af2p+4Q, 0x1.80446c71adb1488769cf4e603a7ap+4Q, -0x1.0a40794798e411ebd23986dcd959p+5Q, 0x1.52509dd04c4f6aeb9cbf4fd2a65ep+5Q, -0x1.4b468531c5b19f58ba9821140c9p+5Q, 0x1.c80f1430e334a07768f1a5bc676fp+4Q, -0x1.82ded3c89e7e9fa329e76277e5cep+3Q, 0x1.7610a167089f1959ecdad2bfe856p+0Q, 0x1.b0a89a8818c0677d48d7304191d3p+0Q, -0x1.2b516da5d080fbac57ead9c2cab4p+0Q, 0x1.488189c0e63233e310386fe21bdep-2Q, -0x1.16dd91fce8d2f3a24746d48a1c72p-6Q, -0x1.957d5757f4d581e1eb81397c4cedp-7Q, 0x1.613bcf2c2fc6a53ed2c91b207503p-9Q, -0x1.0adbc024da55152d1e362e31540ap-14Q, -0x1.44905597a89087a3899ef1de6ff1p-16Q, 0x1.238bd55115863b967f9591633549p-21Q, 0x1.0b863bc593a1d515b8c451bf0e45p-27Q, -0x1.2dac52b5d35bb8e11505ea96f44p-34Q, 0x1.a8ab5a61388b1db01ad925c31a8cp-46Q, 0x1.34fcf88bcfb3fdd3eace81ef29a8p-64Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.e156f58145aba7d0b30fa35feff6p+1Q, -0x1.d9350b2238c2b904f5fdfd02be6bp+4Q, 0x1.b03e3957ecd6a002d130937fdeb5p+6Q, -0x1.f51dfa789d878832ad001d30e39cp+7Q, 0x1.b1d9ee3321d942364cb8271dfebap+8Q, -0x1.3c90b7e3ca1db82e1a61d27c7ae2p+9Q, 0x1.a1025f9df5665ef6d6390bf01f8bp+9Q, -0x1.ee82dbab6ab103949b52c0019f4cp+9Q, 0x1.fcf169933904c38827bff55b6c1p+9Q, -0x1.beee0dc0c8ddb1ba161390e5fd9fp+9Q, 0x1.545f49e00f495f369a9c2947535ap+9Q, -0x1.c39ca355bd5d296f3796271b492ep+8Q, 0x1.d17e6e268802ca2d8ab4b3a8e721p+7Q, -0x1.8d05e2b81cf726b84ae7af5a8e1fp+5Q, -0x1.a57ddae4deced8b3bcbf5da22cap+5Q, 0x1.065bfb9cfed103880a47e9c73209p+6Q, -0x1.1a783beefce87b0115cd8021056bp+5Q, 0x1.2e9f2c1581a696ea72950a297825p+3Q, -0x1.3cad9a2427051e071bf1f8338794p-2Q, -0x1.1b4b3a7aa70e82673e69d7fdae94p-1Q, 0x1.15a31469a9ce01c4f9e608774673p-3Q, -0x1.5c66a63c9347469ce6f6732b0a8p-8Q, -0x1.5db560cc8a8d9420c2df7832dd62p-10Q, 0x1.c57be52a95f9a3c03fb08e74a459p-15Q, 0x1.c9738067c5909d91761fe5fd95cfp-21Q, -0x1.63f652c47225898a139de258494dp-27Q, 0x1.769767db4423b6439ddbea7dbce4p-38Q, 0x1.108b386e39e95695575898c417c9p-55Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.e156f58145aba7d0b30fa35cff6p+1Q, -0x1.d9350b2238c2b904f5fdfc3f59d8p+4Q, 0x1.b03e3957ecd6a002d130922f2289p+6Q, -0x1.f51dfa789d878832ad001b3c3bbap+7Q, 0x1.b1d9ee3321d942364cb8258ac548p+8Q, -0x1.3c90b7e3ca1db82e1a61d1d6988cp+9Q, 0x1.a1025f9df5665ef6d6390bf76e1p+9Q, -0x1.ee82dbab6ab103949b52c0e24238p+9Q, 0x1.fcf169933904c38827bff6f06e1ap+9Q, -0x1.beee0dc0c8ddb1ba16139309e6dap+9Q, 0x1.545f49e00f495f369a9c2bc574c5p+9Q, -0x1.c39ca355bd5d296f37962bd729eep+8Q, 0x1.d17e6e268802ca2d8ab4ba84d645p+7Q, -0x1.8d05e2b81cf726b84ae7be04d2f8p+5Q, -0x1.a57ddae4deced8b3bcbf57c78c0cp+5Q, 0x1.065bfb9cfed103880a47e8cebd5dp+6Q, -0x1.1a783beefce87b0115cd7f827bd2p+5Q, 0x1.2e9f2c1581a696ea729509934246p+3Q, -0x1.3cad9a2427051e071bf1f9b27c09p-2Q, -0x1.1b4b3a7aa70e82673e69d678de04p-1Q, 0x1.15a31469a9ce01c4f9e606bc0537p-3Q, -0x1.5c66a63c9347469ce6f66ff5c6a6p-8Q, -0x1.5db560cc8a8d9420c2df7533732ep-10Q, 0x1.c57be52a95f9a3c03fb08957c434p-15Q, 0x1.c9738067c5909d91761fe08abd47p-21Q, -0x1.63f652c47225898a139ddd320614p-27Q, 0x1.769767db4423b6439ddbe400214ap-38Q, 0x1.108b386e39e95695575892a5277bp-55Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.d870debcc05c458cb432559ebfc5p+2Q, -0x1.0c2b8b0b28193dcd228c4e6d1c95p+6Q, 0x1.10bd374d63550b983999fd9b98p+8Q, -0x1.4441daef321d4016bb9b098a7297p+9Q, 0x1.eaed48222cc9b9253eb90b0dcf97p+9Q, -0x1.dea055aad4ecaefb97bc94a552f5p+9Q, 0x1.0ea6de87556ea6a2de72c35c89c8p+9Q, 0x1.3bb921604519d1ae8a5d0ccd5d1ep+5Q, -0x1.7c03d4dcf551472cf76721c1c17cp+9Q, 0x1.b77df6c77230b9a06a45739b39aap+10Q, -0x1.59dd45c186fb11c5ad1d0f189e18p+11Q, 0x1.92ad5ee85458cf75ddd23bfc0512p+11Q, -0x1.7716e9b298971ca51bb637e98e57p+11Q, 0x1.34cd942cd473a5a710149f0fdbbdp+11Q, -0x1.d2108687fa36ec88dd75fde72adbp+10Q, 0x1.27e2041912517aaa65b8280aa4e9p+10Q, -0x1.0ee0131c1b04ee634d2080c95b01p+9Q, 0x1.13ffc016f56ca3a3bb7e6018d857p+7Q, 0x1.9021a9dd4e12af1889880347a2f3p+1Q, -0x1.cb9505a70965b7f9ec7d47aa192ap+3Q, 0x1.f11cd618c3358a67a90246f84b5cp+1Q, -0x1.a3fefe1a942d41c95d704e932873p-3Q, -0x1.a953da883746e1eb5fcefdddfb0dp-5Q, 0x1.9718bee3af728b9e4c377574de7ep-9Q, 0x1.ad4249f39958d903ac0c0b219af3p-15Q, -0x1.eb70cd1aa40511f5c136d6883df5p-21Q, 0x1.72006a07a097f617e893c7382f23p-31Q, 0x1.0d30627e6a2ad3489ce1b7745733p-47Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.d870debcc05c458cb431fd983345p+2Q, -0x1.0c2b8b0b28193dcd228c0a0c405bp+6Q, 0x1.10bd374d63550b983999c56c677ap+8Q, -0x1.4441daef321d4016bb9b2c10ec43p+9Q, 0x1.eaed48222cc9b9253ebb102b9831p+9Q, -0x1.dea055aad4ecaefb97c3b4138e1fp+9Q, 0x1.0ea6de87556ea6a2de81d408b23ep+9Q, 0x1.3bb921604519d1ae88e6a7fa3786p+5Q, -0x1.7c03d4dcf551472cf7483533c9dbp+9Q, 0x1.b77df6c77230b9a06a324d910941p+10Q, -0x1.59dd45c186fb11c5ad121467058cp+11Q, 0x1.92ad5ee85458cf75ddc7493a06c7p+11Q, -0x1.7716e9b298971ca51bace1729b0ap+11Q, 0x1.34cd942cd473a5a7100d811101f7p+11Q, -0x1.d2108687fa36ec88dd6bfb56d5c3p+10Q, 0x1.27e2041912517aaa65b2132e4553p+10Q, -0x1.0ee0131c1b04ee634d1b07d2c971p+9Q, 0x1.13ffc016f56ca3a3bb78dd1c64f4p+7Q, 0x1.9021a9dd4e12af18897a92604f62p+1Q, -0x1.cb9505a70965b7f9ec7314ae6da2p+3Q, 0x1.f11cd618c3358a67a8f728986e77p+1Q, -0x1.a3fefe1a942d41c95d66abeb0178p-3Q, -0x1.a953da883746e1eb5fc521fbad44p-5Q, 0x1.9718bee3af728b9e4c2d8088bafdp-9Q, 0x1.ad4249f39958d903ac018ed0138fp-15Q, -0x1.eb70cd1aa40511f5c12a3ada0131p-21Q, 0x1.72006a07a097f617e889edbdb056p-31Q, 0x1.0d30627e6a2ad3489cda0318f0edp-47Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.155158ac6ea984ad1f39657983b3p+3Q, -0x1.4fec3a6a32c1ef2818fc096fddd7p+6Q, 0x1.70dec41eaf97d263c2e27cc1784ep+8Q, -0x1.e94cfecb1efa1478b21e27ec9309p+9Q, 0x1.bf0b100d34d0405ff79ebd2004c2p+10Q, -0x1.39291803fcf47b5c2680912e1935p+11Q, 0x1.79ccf50afb46dbd4b771bbe9314ap+11Q, -0x1.ab6c90991611b280fa5f8fb17229p+11Q, 0x1.c47ed9a17b9cc8042e74a92f11b8p+11Q, -0x1.af1005783c9c08a75d43de02a3efp+11Q, 0x1.72a859cabb471f7e1c88f5de7fd4p+11Q, -0x1.2846e6b9b14f481005e1b83a4b88p+11Q, 0x1.b3d87dff6a954876ee2d25afa785p+10Q, -0x1.1ae10527ae49437f787df6e5258ep+10Q, 0x1.41e16e9c43532c08707790b425f3p+9Q, -0x1.460030c5bf206e4d0614b974f3a2p+8Q, 0x1.0818e6dd9acdc76d8ca672811999p+7Q, -0x1.8ef0b66c7662c653e52a9a26f648p+4Q, -0x1.6eb8ec2d2fcf0443ad7badae070dp+3Q, 0x1.3aba0303f01c424453f9ef91eafp+3Q, -0x1.588d6d239648dcf73cd93c85e3bap+1Q, 0x1.5ca063a2897a34772f3c4e199577p-3Q, 0x1.72c884e06d399a8e64fd9e5def96p-5Q, -0x1.2b7b99da7239a8d084357a60a47cp-8Q, -0x1.359ad5ec914c5a48afa14674a42fp-14Q, 0x1.0cff089d4d592f01775a283b1eb2p-19Q, -0x1.207535755ab2ee6fe496d4a13eeep-29Q, -0x1.a3ad9d559345b904814202802d71p-45Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.155158ac6ea984ad1f3ad98465a9p+3Q, -0x1.4fec3a6a32c1ef2818fdbca7bd5fp+6Q, 0x1.70dec41eaf97d263c2e4504b0b21p+8Q, -0x1.e94cfecb1efa1478b22094cf32b8p+9Q, 0x1.bf0b100d34d0405ff7a1094810ecp+10Q, -0x1.39291803fcf47b5c26824c7c465ep+11Q, 0x1.79ccf50afb46dbd4b77400a63149p+11Q, -0x1.ab6c90991611b280fa6243394583p+11Q, 0x1.c47ed9a17b9cc8042e779917f5f2p+11Q, -0x1.af1005783c9c08a75d46ca645f35p+11Q, 0x1.72a859cabb471f7e1c8ba7bd2a6cp+11Q, -0x1.2846e6b9b14f481005e402049827p+11Q, 0x1.b3d87dff6a954876ee30a3fd1e1p+10Q, -0x1.1ae10527ae49437f7880589e6393p+10Q, 0x1.41e16e9c43532c08707a85b672ep+9Q, -0x1.460030c5bf206e4d0618004a8fep+8Q, 0x1.0818e6dd9acdc76d8ca94db3b3b3p+7Q, -0x1.8ef0b66c7662c653e53071c7fb7ep+4Q, -0x1.6eb8ec2d2fcf0443ad7c1412d0d4p+3Q, 0x1.3aba0303f01c424453fb561d43b2p+3Q, -0x1.588d6d239648dcf73cdacc19a23ap+1Q, 0x1.5ca063a2897a34772f3d9594be58p-3Q, 0x1.72c884e06d399a8e64ff05cdd7a2p-5Q, -0x1.2b7b99da7239a8d08435e37194cp-8Q, -0x1.359ad5ec914c5a48afa1ae580694p-14Q, 0x1.0cff089d4d592f01775a150c05eep-19Q, -0x1.207535755ab2ee6fe496486e6edap-29Q, -0x1.a3ad9d559345b904814003502ba2p-45Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.174fb1d6730638307d208a7b9705p+3Q, -0x1.5cf63b4072a084fdeb8b32e3f8f4p+6Q, 0x1.859702b93091fc7e6589a6acc4cp+8Q, -0x1.008e38c64d4049e94bd5995565e4p+10Q, 0x1.c03c1b8df613f18067635d57973dp+10Q, -0x1.1e0d30516cd0d5b6c114eb50863dp+11Q, 0x1.33504e2e62ab9029d451c22dbffap+11Q, -0x1.4498a39b45dd2d15e6efe9a76837p+11Q, 0x1.500c422b7e4d651447d31248b36bp+11Q, -0x1.2d6f916f2f063d6cac6e50e8332ap+11Q, 0x1.c5bd8b8beccdb3ef65612beb26bfp+10Q, -0x1.3b7208dc1850750db50e8cf692d2p+10Q, 0x1.a4b1819107c720e5477b69693072p+9Q, -0x1.c03583e49298125db8ea16f1c92fp+8Q, 0x1.1254d5dd1a3c865791dce6763bcfp+7Q, 0x1.be19509979c252700b664c41f013p+2Q, -0x1.6abf524121ea45d75b14942386cep+5Q, 0x1.bdfa9494723d3641f8f38a0cc0ebp+5Q, -0x1.7a9c102bdb495114d11c4dc94aa3p+5Q, 0x1.86920d3d07ed23a99340d183d76p+4Q, -0x1.a9adfb25c4f27469db40c9474b64p+2Q, 0x1.1337641b89dbbf1427d9b379e883p-1Q, 0x1.191c64622c1b13245bb01b5d2dc3p-3Q, -0x1.88d18423866c243d7190bc69d463p-6Q, -0x1.aee4f466bb96965b6a3465feff1bp-12Q, 0x1.15e5e9747fe1bbdbc08e7b80eb4fp-16Q, -0x1.bc4491eee0fdcc0c5c68f4d91f7dp-26Q, -0x1.431c03e754cd8a35cd878b071e01p-40Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.174fb1d6730638307d1e4b445fc7p+3Q, -0x1.5cf63b4072a084fdeb886ad661e9p+6Q, 0x1.859702b93091fc7e65868db7a8fbp+8Q, -0x1.008e38c64d4049e94bd38a5f00e3p+10Q, 0x1.c03c1b8df613f180675faa2c200ap+10Q, -0x1.1e0d30516cd0d5b6c1126d4bf14cp+11Q, 0x1.33504e2e62ab9029d44ee63bfb62p+11Q, -0x1.4498a39b45dd2d15e6ecc8905aabp+11Q, 0x1.500c422b7e4d651447cfcdfc454bp+11Q, -0x1.2d6f916f2f063d6cac6b467c2932p+11Q, 0x1.c5bd8b8beccdb3ef655c28cdfe75p+10Q, -0x1.3b7208dc1850750db50ab0ef592ep+10Q, 0x1.a4b1819107c720e54775d3b0e2c4p+9Q, -0x1.c03583e49298125db8e2fdf27d4ep+8Q, 0x1.1254d5dd1a3c865791d5348ec394p+7Q, 0x1.be19509979c252700bdddf4796f4p+2Q, -0x1.6abf524121ea45d75b1ac598d945p+5Q, 0x1.bdfa9494723d3641f8f4e66eff1ap+5Q, -0x1.7a9c102bdb495114d11be11a8205p+5Q, 0x1.86920d3d07ed23a9933ffc257d69p+4Q, -0x1.a9adfb25c4f27469db3fea5dd201p+2Q, 0x1.1337641b89dbbf1427d95e0cc537p-1Q, 0x1.191c64622c1b13245bafd3429ab6p-3Q, -0x1.88d18423866c243d7190f3f8f03dp-6Q, -0x1.aee4f466bb96965b6a34b6c35598p-12Q, 0x1.15e5e9747fe1bbdbc08f26b48b4cp-16Q, -0x1.bc4491eee0fdcc0c5c6a94682339p-26Q, -0x1.431c03e754cd8a35cd8981f0bf35p-40Q, 0x0p+0Q}; } if constexpr (order == 10) { - return {0x0p+0Q, 0x1.57dd202e5e84ab85696b3b081p+2Q, -0x1.b426b94987908d499f20a9e25757p+5Q, 0x1.ef50af36bc949ed3fa5d7e0a8198p+7Q, -0x1.4da8e644667e6ac3b79bfab28161p+9Q, 0x1.2d889ab089910f7ad40ce0f8df85p+10Q, -0x1.9456ec86efc743d5028d89866bbdp+10Q, 0x1.ca1f75d29c1784a6a77e065e7ddep+10Q, -0x1.f2eaf24b48be90f886aebc94dadbp+10Q, 0x1.0a60e2fdcea779a9912a9120de2ep+11Q, -0x1.07fe75c2d85392f1210e0f990473p+11Q, 0x1.e2b37ed5f446198c3a3c3919467ep+10Q, -0x1.a28fcff6e684b5cca8b59e89af3bp+10Q, 0x1.5596d2be7c1f83852a278b67a766p+10Q, -0x1.02761175eccb4a7f32e2ed6eb998p+10Q, 0x1.70f45a3e9b6c87dda4f640c6221p+9Q, -0x1.edf5a5b354e128a66f72c39ece6fp+8Q, 0x1.27b1e13298bb3ef65c5911d31c4bp+8Q, -0x1.3be69243ef2c31f022d98f8f933ep+7Q, 0x1.3b71f0120f2a47ab2eeb31559ad4p+6Q, -0x1.11985d9404f45378f92bac82976fp+5Q, 0x1.3b5a9762f053ae0408ef30897c49p+3Q, -0x1.c32c18767db723614caa803fec42p-1Q, -0x1.5d8e89b8ba2f46a3384127d85bb4p-2Q, 0x1.3b1b46a97c2fa9eb152314a4a3e9p-4Q, 0x1.23706d03f6f7466fb40930bedc5cp-10Q, -0x1.9c26fc84f3ff5e0f45c2413885cdp-14Q, 0x1.962939a138e2b376292fd9833a65p-23Q, 0x1.27428a5934f9dbd8cb61b82d774ep-36Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.57dd202e5e84ab856980df8a0abap+2Q, -0x1.b426b94987908d499f3bffafa19ep+5Q, 0x1.ef50af36bc949ed3fa7cc19e8e96p+7Q, -0x1.4da8e644667e6ac3b7b19c4c383dp+9Q, 0x1.2d889ab089910f7ad4219226878ep+10Q, -0x1.9456ec86efc743d502abdf76eae3p+10Q, 0x1.ca1f75d29c1784a6a7a3af88a28cp+10Q, -0x1.f2eaf24b48be90f886d98564f553p+10Q, 0x1.0a60e2fdcea779a991419059c46dp+11Q, -0x1.07fe75c2d85392f12125b660934dp+11Q, 0x1.e2b37ed5f446198c3a6ab7d8b74fp+10Q, -0x1.a28fcff6e684b5cca8e0268f1e92p+10Q, 0x1.5596d2be7c1f83852a4b17681f79p+10Q, -0x1.02761175eccb4a7f32feddc56feep+10Q, 0x1.70f45a3e9b6c87dda520903f4aafp+9Q, -0x1.edf5a5b354e128a66fada7d4bcf3p+8Q, 0x1.27b1e13298bb3ef65c7ced26ff2fp+8Q, -0x1.3be69243ef2c31f0230131660198p+7Q, 0x1.3b71f0120f2a47ab2f14bf7b7d89p+6Q, -0x1.11985d9404f45378f95059bc551ep+5Q, 0x1.3b5a9762f053ae040918d7979484p+3Q, -0x1.c32c18767db723614ce78e339586p-1Q, -0x1.5d8e89b8ba2f46a3386878a383e3p-2Q, 0x1.3b1b46a97c2fa9eb1545e9c9486p-4Q, 0x1.23706d03f6f7466fb42dcd72c19fp-10Q, -0x1.9c26fc84f3ff5e0f45e88806fbbbp-14Q, 0x1.962939a138e2b376295550104948p-23Q, 0x1.27428a5934f9dbd8cb77b8eb93d8p-36Q, 0x0p+0Q}; } if constexpr (order == 11) { - return {0x0p+0Q, 0x1.82ba18a2815549dbb59529e31e5ap+1Q, -0x1.ee321ac782e8103dfdbc2361bd6ap+4Q, 0x1.174e5f65a44a587e237d6c3b553dp+7Q, -0x1.6e81d57c4c979417ab2afd3c009fp+8Q, 0x1.368de3361fae4ae909ed8745994cp+9Q, -0x1.7106731d7c870bc083f73b59d2eep+9Q, 0x1.661d220cefa0ffe013b3cf726fc3p+9Q, -0x1.6833b778e773ab42be67a15c0ce1p+9Q, 0x1.833c1b7a24cc4442e64b44e53f55p+9Q, -0x1.704d0cf5b403f737ee634427f2bbp+9Q, 0x1.2a287b4a8744be736378cf1ad4c7p+9Q, -0x1.d795731af32d4e2789adddfc9044p+8Q, 0x1.7a6623bbe9af7bf6c835c65c7832p+8Q, -0x1.0ddd9fa1ad021e162c7b141c194dp+8Q, 0x1.4f824182bb440977dbefd0a35cbfp+7Q, -0x1.9b8d6efd833c3f31fde4ac45e744p+6Q, 0x1.e6b9bfc912a60c385c629c5efb9fp+5Q, -0x1.d872a65489bc6c3914ee01ff515dp+4Q, 0x1.82e4e50171640b22bb957ff7eae6p+3Q, -0x1.3c81b080d7c589f42c5ce6389905p+2Q, 0x1.87117e04fd822595de53b26cd146p+0Q, -0x1.f2d1dbd395098c995382a933550bp-6Q, -0x1.327c0d249413fa2745d7e64f577bp-3Q, 0x1.13b8c9585145f7834dd210f62242p-5Q, -0x1.094893076dab22e2cc62b655bbffp-13Q, -0x1.784719262e6d99b573a61c97f7f8p-14Q, 0x1.31d26875ab45ebb06f0f6f8f22c8p-23Q, 0x1.bc3aef2e9698a9624f5205459225p-36Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.82ba18a2815549dbb583ba20e3a4p+1Q, -0x1.ee321ac782e8103dfda5e2a50005p+4Q, 0x1.174e5f65a44a587e2370d6742aeep+7Q, -0x1.6e81d57c4c979417ab1a67acd69dp+8Q, 0x1.368de3361fae4ae909df52a5836ap+9Q, -0x1.7106731d7c870bc083e5fa51f617p+9Q, 0x1.661d220cefa0ffe013a28a70693fp+9Q, -0x1.6833b778e773ab42be55fb8d5e31p+9Q, 0x1.833c1b7a24cc4442e638654d7d43p+9Q, -0x1.704d0cf5b403f737ee51433c941bp+9Q, 0x1.2a287b4a8744be736369f360e45fp+9Q, -0x1.d795731af32d4e2789960ef06165p+8Q, 0x1.7a6623bbe9af7bf6c822bfb77cd2p+8Q, -0x1.0ddd9fa1ad021e162c6d71d17f6ap+8Q, 0x1.4f824182bb440977dbde7b407e9p+7Q, -0x1.9b8d6efd833c3f31fdcf2bc0b9fap+6Q, 0x1.e6b9bfc912a60c385c4952c1112ep+5Q, -0x1.d872a65489bc6c3914d51095ebc1p+4Q, 0x1.82e4e50171640b22bb8023c09d2ep+3Q, -0x1.3c81b080d7c589f42c4b3bd2cdd6p+2Q, 0x1.87117e04fd822595de3e0b568ccp+0Q, -0x1.f2d1dbd395098c995334374fed2ep-6Q, -0x1.327c0d249413fa2745cbbd687d3ep-3Q, 0x1.13b8c9585145f7834dc70fb2de56p-5Q, -0x1.094893076dab22e2cc6f5a93ce22p-13Q, -0x1.784719262e6d99b5739a61a4981ap-14Q, 0x1.31d26875ab45ebb06f0484706cp-23Q, 0x1.bc3aef2e9698a9624f45add91d4dp-36Q, 0x0p+0Q}; } if constexpr (order == 12) { - return {0x0p+0Q, 0x1.229017de89888d3b45dd8cbfea97p+0Q, -0x1.74b098d7b294230e195e9582cce8p+3Q, 0x1.a3d6fe58853c1e5c5b02b3c7091ap+5Q, -0x1.0ee9fe2c639a74c7c040d58ce97ep+7Q, 0x1.b7ec28edec4542d27f8e52ddc0eep+7Q, -0x1.dcbffedb3a507fa5c4eb668bdfccp+7Q, 0x1.8f9512e48d1c46e9ac992677a5b8p+7Q, -0x1.7421b1a8804595d4b26039d25693p+7Q, 0x1.a17e1d21e73d1b2880fd626879bep+7Q, -0x1.8b13badbca1d886a88315897811ap+7Q, 0x1.210062e92f4896d0f004a46e2b61p+7Q, -0x1.a9798d44da6c2035da4b20d5799bp+6Q, 0x1.62f521d1972a85eb2c685554b0c3p+6Q, -0x1.f0d14679f69c06584d129cb1dd4fp+5Q, 0x1.0b0540b21cf0924f554194ec7fd4p+5Q, -0x1.2e7f81d72375079565939ed3cb2dp+4Q, 0x1.776b19bc1de7ac2a6f7b7fc9f33cp+3Q, -0x1.390aaca35a348d0447a8760eee46p+2Q, 0x1.0e68e9445701769efc732f28d561p+0Q, -0x1.1d9e671612a45bff7de530a9d9acp-2Q, 0x1.1e141f6f8381b1b9941445268e56p-5Q, 0x1.626281f06a565209b564a6bd772p-3Q, -0x1.00510e27c6af9fccce79c2c0e3f3p-3Q, 0x1.dda065aa933f3a2523260c5e0824p-6Q, -0x1.397e42b4cc1c2544392f2098e5e3p-10Q, -0x1.5e2780fee3a224f5cbbe3f817e91p-13Q, 0x1.93d63eaebefb797682cedf0250afp-23Q, 0x1.24c485651202d28a48b30f621a03p-34Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.229017de89888d3b45e2c184d9bp+0Q, -0x1.74b098d7b294230e1965426f3612p+3Q, 0x1.a3d6fe58853c1e5c5b0a3a09e40cp+5Q, -0x1.0ee9fe2c639a74c7c045b3701c38p+7Q, 0x1.b7ec28edec4542d27f9646062fefp+7Q, -0x1.dcbffedb3a507fa5c4f4218a69c2p+7Q, 0x1.8f9512e48d1c46e9aca0a2a1ffcap+7Q, -0x1.7421b1a8804595d4b26746d9ca32p+7Q, 0x1.a17e1d21e73d1b2881053890e718p+7Q, -0x1.8b13badbca1d886a8838c2c2e2e8p+7Q, 0x1.210062e92f4896d0f00a29c58cfbp+7Q, -0x1.a9798d44da6c2035da535dfbec27p+6Q, 0x1.62f521d1972a85eb2c6f26f231b9p+6Q, -0x1.f0d14679f69c06584d1c30d18738p+5Q, 0x1.0b0540b21cf0924f5546e5194d02p+5Q, -0x1.2e7f81d7237507956599c3ca61c1p+4Q, 0x1.776b19bc1de7ac2a6f830edb0d24p+3Q, -0x1.390aaca35a348d0447af0cac40bp+2Q, 0x1.0e68e9445701769efc7a68d035e5p+0Q, -0x1.1d9e671612a45bff7deef6e6cc44p-2Q, 0x1.1e141f6f8381b1b9942811bfdb96p-5Q, 0x1.626281f06a565209b56968645fb1p-3Q, -0x1.00510e27c6af9fccce7dab2661cp-3Q, 0x1.dda065aa933f3a25232d375fa99bp-6Q, -0x1.397e42b4cc1c25443933189b9067p-10Q, -0x1.5e2780fee3a224f5cbc2e8463206p-13Q, 0x1.93d63eaebefb797682d434c6108cp-23Q, 0x1.24c485651202d28a48b67967bbebp-34Q, 0x0p+0Q}; } if constexpr (order == 13) { - return {0x0p+0Q, 0x1.2dba81606cdf44cd9f079191a5b6p-3Q, -0x1.83ba9062dc10a95420b209411d9dp+0Q, 0x1.bc6ce42e9d3a21102e53db0ffbf5p+2Q, -0x1.2c97bd817af94b6452b9fa0d6cc7p+4Q, 0x1.0e06914d9315537516f325b1a949p+5Q, -0x1.5f4706680d4ada71d400dc2041dap+5Q, 0x1.6ea3fbf492340b1a8748a4fe5e1ep+5Q, -0x1.5a777ed4931f215f8e0bf28ba3b3p+5Q, 0x1.424978021982d2d37f646f8229b6p+5Q, -0x1.3090ff3d7fed662537bdbe4e02dbp+5Q, 0x1.23e4419ddb640edbe25bd0d3d323p+5Q, -0x1.07fd356f7673b92c13aaeedc3102p+5Q, 0x1.a8f488a3b6e4b2eef60e436347eap+4Q, -0x1.49932384ed8b4cc7bb557f0494b6p+4Q, 0x1.0a96d421140fecc2982c96f08508p+4Q, -0x1.8f60cd9c05602820630a2d130bddp+3Q, 0x1.003bcbf26a5db032107ba63bca4dp+3Q, -0x1.433ef046d9ed13921cc7a928013bp+2Q, 0x1.a65b7dff9352096da27656f15252p+1Q, -0x1.d36032adf2dbd6f014be67c6b6d9p+0Q, 0x1.a4a1ad470bd0ddc88c181c767028p-1Q, -0x1.88e9f63513ce060ad4280c3ae552p-2Q, 0x1.6764f965c95116ec3ca65a5d1d99p-3Q, -0x1.91c36b23af1d7e93ac72a63e1ecp-5Q, 0x1.07d03d7a1adc182d3615f97f92d8p-8Q, 0x1.362d3e37ff6cd230a2a84b0df184p-11Q, -0x1.92dbfdbfa8197afc834c0f617825p-20Q, -0x1.22ff804507dbe78851cf26324af8p-30Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.2dba81606cdf44cd9f04d2f8bc14p-3Q, -0x1.83ba9062dc10a95420ae8251630ap+0Q, 0x1.bc6ce42e9d3a21102e4fdf0d4671p+2Q, -0x1.2c97bd817af94b6452b764a95107p+4Q, 0x1.0e06914d9315537516f107f294e6p+5Q, -0x1.5f4706680d4ada71d3fe8928e941p+5Q, 0x1.6ea3fbf492340b1a8746b11d0c42p+5Q, -0x1.5a777ed4931f215f8e0a373e4b9fp+5Q, 0x1.424978021982d2d37f62990dfb19p+5Q, -0x1.3090ff3d7fed662537bbff91030bp+5Q, 0x1.23e4419ddb640edbe25a71aaad29p+5Q, -0x1.07fd356f7673b92c13a9d66edf4fp+5Q, 0x1.a8f488a3b6e4b2eef60c68cd2c1fp+4Q, -0x1.49932384ed8b4cc7bb541dede413p+4Q, 0x1.0a96d421140fecc2982baba8b026p+4Q, -0x1.8f60cd9c056028206308e7df4429p+3Q, 0x1.003bcbf26a5db032107ad008618cp+3Q, -0x1.433ef046d9ed13921cc6b579a83ap+2Q, 0x1.a65b7dff9352096da27547ffc3e7p+1Q, -0x1.d36032adf2dbd6f014bd3f02cf6dp+0Q, 0x1.a4a1ad470bd0ddc88c1710fd49dcp-1Q, -0x1.88e9f63513ce060ad42735911b82p-2Q, 0x1.6764f965c95116ec3ca5a4be4d2fp-3Q, -0x1.91c36b23af1d7e93ac71caa65612p-5Q, 0x1.07d03d7a1adc182d361556de1e4bp-8Q, 0x1.362d3e37ff6cd230a2a77cad24c8p-11Q, -0x1.92dbfdbfa8197afc834aaea734e3p-20Q, -0x1.22ff804507dbe78851ce06e1d7fp-30Q, 0x0p+0Q}; } if constexpr (order == 14) { - return {0x0p+0Q, 0x1.8dd6e1684e11d5d1ba3d30411455p-6Q, -0x1.ffb4de00653d36e2054f8a61ef33p-3Q, 0x1.1f8df89dea983b6a683ab3dea296p+0Q, -0x1.6eae32a3a790681f248c15595ebap+1Q, 0x1.200cfdab0a8887ae485b249984acp+2Q, -0x1.1f287662480ab738cbe30fecb657p+2Q, 0x1.90990b7ee9dd1f94866e95a6da25p+1Q, -0x1.3d166b62b6085e29fb948fdc0ca7p+1Q, 0x1.74d60ae1a8ceaa71b4a8963d6056p+1Q, -0x1.68026579c2213b7f75e80846b227p+1Q, 0x1.e76ba8ae988d51e585809060cc1fp+0Q, -0x1.60830949d4c82da954f72fb8f218p+0Q, 0x1.48f2a8ad7050c9588f36c847ca49p+0Q, -0x1.e7d09d1d5c76d8ae64a9d1075b8ep-1Q, 0x1.1252ee85de9250052c524f707253p-1Q, -0x1.6e9d007e3ce50ac7539d68d5ba34p-2Q, 0x1.0a88fbec92db255ff32afa74479fp-2Q, -0x1.16ea71f276b00e5a14dbe15b1f7cp-3Q, 0x1.018afa9348367b971e99c9ccc188p-4Q, -0x1.2fa053de7510dd5de4017cd3190dp-5Q, 0x1.2375ee2696f86cd08bc39452c848p-6Q, -0x1.73b10c938e4b6609ab6e783698f5p-8Q, 0x1.1decc8370b2354d839f68c8d33cap-9Q, -0x1.b8713a4dd74a971b6935d59629ecp-11Q, 0x1.732711f764c01745616312d53ea3p-14Q, 0x1.5deb76c540b6c1414e8da0e84c77p-16Q, -0x1.9271259f104138f720caf85fff1dp-23Q, -0x1.2099915b9335422a7d174776e0cbp-32Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.8dd6e1684e11d5d1ba3be6ea3c1dp-6Q, -0x1.ffb4de00653d36e2054de2d9b35cp-3Q, 0x1.1f8df89dea983b6a6839c59e1daap+0Q, -0x1.6eae32a3a790681f248ae47d8bf4p+1Q, 0x1.200cfdab0a8887ae485a3302d7acp+2Q, -0x1.1f287662480ab738cbe219de6228p+2Q, 0x1.90990b7ee9dd1f94866d2e2c98f7p+1Q, -0x1.3d166b62b6085e29fb936a0976f7p+1Q, 0x1.74d60ae1a8ceaa71b4a74664e6fcp+1Q, -0x1.68026579c2213b7f75e6c5dc86c1p+1Q, 0x1.e76ba8ae988d51e5857ecafcf58dp+0Q, -0x1.60830949d4c82da954f5df283712p+0Q, 0x1.48f2a8ad7050c9588f35978df03dp+0Q, -0x1.e7d09d1d5c76d8ae64a80dc22b4p-1Q, 0x1.1252ee85de9250052c51460801d2p-1Q, -0x1.6e9d007e3ce50ac7539c0411656fp-2Q, 0x1.0a88fbec92db255ff329ff3310a4p-2Q, -0x1.16ea71f276b00e5a14dad4f88487p-3Q, 0x1.018afa9348367b971e98c4cc0c2cp-4Q, -0x1.2fa053de7510dd5de40051b25ee8p-5Q, 0x1.2375ee2696f86cd08bc27b41fb5bp-6Q, -0x1.73b10c938e4b6609ab6cf8acbfb8p-8Q, 0x1.1decc8370b2354d839f55dfbd7ebp-9Q, -0x1.b8713a4dd74a971b693427cc738fp-11Q, 0x1.732711f764c017456161af308333p-14Q, 0x1.5deb76c540b6c1414e8c8011ad5bp-16Q, -0x1.9271259f104138f720ca0ebaa72bp-23Q, -0x1.2099915b9335422a7d16c948a51bp-32Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.000451674235365384163942534112879962170050430005649917728757105702078353003628"), boost::lexical_cast("0.0657192182866101725866380380286811711515267979947671850787346119584203921772"), boost::lexical_cast("0.645168852837185491636493374398382329354332388562492079567204840361307401530"), boost::lexical_cast("0.562050253731258347205225316820341051454701066703611230358129787369760785703"), boost::lexical_cast("-0.457609012865475182073165321965578159870245716869287833800525163245742305892"), boost::lexical_cast("0.302206642786606318842929559153148332332027636245062198716044751793827663646"), boost::lexical_cast("-0.186714728860412474380906761378313253397706130867010868609662030951952027624"), boost::lexical_cast("0.101921407123630858758878752387723770129600361381616407855191001954194217355"), boost::lexical_cast("-0.0450695281445151618957628013259453588544003268599264913526498769137792861370"), boost::lexical_cast("0.0144290759837282383389717270501147248409603304909144671371390973500564022245"), boost::lexical_cast("-0.00262359805753383314662667515147465743725326741143989187946940239264695275198"), boost::lexical_cast("-0.0000418886520841363769876466059678934092937240028663097642468207760071276890909"), boost::lexical_cast("0.000130005825599913762664943931799127959428720573899694402098048868888541005861"), boost::lexical_cast("-0.0000205716103829132083896977152938360606246573125609400824113246425939226624402"), boost::lexical_cast("0.00000586498015739086657425466432113622386414392393452860334775926059357778996230"), boost::lexical_cast("-0.00000499957637035187196702848333851389108402668590913054256330886021719308298712"), boost::lexical_cast("0.00000138797970659198398937552944013353477360674956899913623607020403817559610213"), boost::lexical_cast("-0.0000000293246341063622314369884411909694341374016914830560434158406924220522844059"), boost::lexical_cast("-0.0000000266108789272668583275470247613518141118690036911170538022214691534270571516"), boost::lexical_cast("-0.0000000000358798958751818824805546395996552774193550110102954766818768372071949994542"), boost::lexical_cast("-0.0000000000411940737663914578546068859164549863164641326242451122480764989500567400523"), boost::lexical_cast("0.00000000000943444434993874525374981775164876413640256062778860481019536432363883306329"), boost::lexical_cast("0.0000000000000802555990656338684626332640433500241162747359468279574694310485074495210891"), boost::lexical_cast("-0.00000000000000234007347019229302189231520607745332418408168658262584544662206333484487383"), boost::lexical_cast("-0.0000000000000000118063935549154939400230495672962537326752673673203124419820222929027040784"), boost::lexical_cast("0.00000000000000000000902156164058513114611965908129419583178659829820202967090436659668867250204"), boost::lexical_cast("-0.00000000000000000000000103213448481218221009064172156534966525116936574987378830865635836819679217"), boost::lexical_cast("-0.0000000000000000000000000000000895260346451574665144738326201699984549687922838691880872307609498354042916"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00329134509554637016227932395665184462188816405990441294841331937353859018226"), boost::lexical_cast("0.222498460222472570856273888144670809240856508400605204839473169454853935753"), boost::lexical_cast("0.795584053870187153774544931353721619014829085153170531707050020981654416712"), boost::lexical_cast("-1.31862487452009442113191889013673630946692796798217185455367151031243111753"), boost::lexical_cast("0.356227531120169092417942057959374242399264990210294310292353566593351691969"), boost::lexical_cast("-0.0969118974391443107220210564208451767882607680272587960271393042788920753139"), boost::lexical_cast("0.100158344781294000713035822000520082413219469752287984509961094639923004704"), boost::lexical_cast("-0.130036817018062768743563639955461355704215091556126309135663258237107378316"), boost::lexical_cast("0.117003736727942246589361189897913287911205837308941552740306120021988232773"), boost::lexical_cast("-0.0735583247350015119447973100838355102019211295561712733895699734366729336147"), boost::lexical_cast("0.0320443599633683857344012220821277284392085436118203012615734033030618281606"), boost::lexical_cast("-0.00864611125470508985643225531487538786192034817394773971373053363374166094832"), boost::lexical_cast("0.000628805288742353846490436895658042874791044019850556792669438723659506085433"), boost::lexical_cast("0.000530996165887140074103720044534180857989796558151325571171563750787375335630"), boost::lexical_cast("-0.000214779976330435101072773020094474738162154098655749881678420221771826004102"), boost::lexical_cast("0.0000181202936405411896779927444691964784933446136755724601326144179927538206594"), boost::lexical_cast("0.00000983429208199500966319547766620244833625578532495918145530854169815290840910"), boost::lexical_cast("-0.00000291695012617423905198714249842169472953358927807533287184982174200989887962"), boost::lexical_cast("0.0000000816805151056558922184516574886797062939832551592181636407453778207357205351"), boost::lexical_cast("0.0000000552147222971053211575103164058845299224045417814192301423715110168730452639"), boost::lexical_cast("-0.00000000278043267728072036716596349031021595779494213305561207660868932770850125951"), boost::lexical_cast("-0.0000000000506542254942098412185567568651337434634840678880205714031416165837498235238"), boost::lexical_cast("0.00000000000808256938962468939245796995705643475400792001340399660747359264165908131377"), boost::lexical_cast("-0.0000000000000998582294082358754350176794222318406554783198601555538700921435939017946389"), boost::lexical_cast("-0.000000000000000351354126713507884430073360081165916784665517276373638465106586156112456813"), boost::lexical_cast("0.00000000000000000157877499711653737932118233203050006270260955310540472677365606073041849944"), boost::lexical_cast("-0.0000000000000000000000637731750269505916186533295298744348554008849524832564488593506481003691981"), boost::lexical_cast("-0.0000000000000000000000000000110631985666703620681934992597766218656255805692698991301252307109696735556"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0206704348828442146455298601806634783291751329720893335837042915536707378997"), boost::lexical_cast("0.592227110732533668578196417495075085776270621924559929262444977224271579097"), boost::lexical_cast("-0.393410653765291902433654817300663592654609126271817695403842500410554851245"), boost::lexical_cast("-2.00825263709370592101160988069513144599529156226855536777407723196800985003"), boost::lexical_cast("3.45600402690522611687855374504814910966687688506140696928870357367763805207"), boost::lexical_cast("-2.86700751870813930579622494686911790950745721733944746524273875866576699091"), boost::lexical_cast("1.88647457798347347099275071442649242213607288760070094281108153092725485932"), boost::lexical_cast("-0.956850292836935604631540519513924221386391922474899432365133146628294288211"), boost::lexical_cast("0.311019178959628658277170626061412967741738777405140811903034561579177783544"), boost::lexical_cast("-0.0194782967746181932246482266173892495865298049064803547744629981318754422562"), boost::lexical_cast("-0.0313570829471545004393086766795416583820751761342161837181042072847055050674"), boost::lexical_cast("0.00615150822507380481298471457879524284933712566490823438535524615873979419699"), boost::lexical_cast("0.00820031568959443119144645656936832514382458714118391502141763262037478621079"), boost::lexical_cast("-0.00559689979763050004637051840086547958672230503688973990238062875917621549458"), boost::lexical_cast("0.00108962928377240734615453107312674463537085212267186648902987674997945923733"), boost::lexical_cast("0.000258864319280176698538293850130236134559386073543313286799132944540622102087"), boost::lexical_cast("-0.000171898103078683638566235253747478209530138496225519577636080550780658518207"), boost::lexical_cast("0.0000309643593428530836922212378988146884356326608056935343727759049059725321223"), boost::lexical_cast("-0.000000992193952216759361998206689460639053628352064203189180453876299839498267728"), boost::lexical_cast("-0.000000407964839436173861149529833860827000185779144514563959244446135200869586348"), boost::lexical_cast("0.0000000705975083156988948042006749490456594343348564541499729785531649950346638501"), boost::lexical_cast("-0.00000000155494179555932056144441546086944808103333056502334729683797165052002203223"), boost::lexical_cast("-0.000000000199857445192527259692451554428036856578337723773413083760501868541113100329"), boost::lexical_cast("0.00000000000183942900453685991873954617889384304378063723737901417198613372194175703222"), boost::lexical_cast("0.0000000000000280333173005321969994829794928971151622655528245490950449547091812376086824"), boost::lexical_cast("-0.0000000000000000756287516479864730495516004403817436298330236371191825066059211760651100095"), boost::lexical_cast("0.00000000000000000000999665788433766570461546432082424563816636646761251573329874233246246718961"), boost::lexical_cast("0.00000000000000000000000000346838035061342291761151778299701276081089278724101229318566334215065043283"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.108860484914954355575079084123243067459138310025744627437589606265973071599"), boost::lexical_cast("0.998887833249571574793052798864346575877689982939641232390178172030375530161"), boost::lexical_cast("-4.23238946756428856622131292649026891499466392216766277033807459199608937126"), boost::lexical_cast("5.88370889419216762997764273176879062741698215984105909165713345305176600493"), boost::lexical_cast("-4.18153972950635043322094865169225941018236097827115854289221926390733666302"), boost::lexical_cast("2.68625382559861128387876607708138212048108442724703967044946506502965986523"), boost::lexical_cast("-2.71033782942212120942300194056190679749862535535035830851858838821499116226"), boost::lexical_cast("2.80267337697322824370014932789371815543658898251892562879598691459308783545"), boost::lexical_cast("-2.29282987775747551395165451529677668919917484323451781112725285361710130069"), boost::lexical_cast("1.38242544442842915241462115657754442376597315779845068025541999436023658186"), boost::lexical_cast("-0.557419509659821724210988870096723764341990624840837128686052996727907371417"), boost::lexical_cast("0.0913588351617082455490771960757168500073024080354221476837833915643532317832"), boost::lexical_cast("0.0521115869546275007352831459735453272977332230195277247545553011333489468213"), boost::lexical_cast("-0.0437788320785046747745346318425081514627922547506568893727540135563564332044"), boost::lexical_cast("0.0126616673332992189763107668027329389224194983671833648722585850627694599870"), boost::lexical_cast("0.000441448103933958333509284170313361172667888623881067406682817939537903874448"), boost::lexical_cast("-0.00145361406367327911114133543555577415997816227432838988097249869672074010228"), boost::lexical_cast("0.000386870394595489219311323992284710227818861035531855271955313566170705603465"), boost::lexical_cast("-0.0000127675849793530154804055067259332359495984011575122830149195089883065001976"), boost::lexical_cast("-0.00000984202193485852050035097860846555963077977093712397464798289054164353785487"), boost::lexical_cast("0.00000121313056970512630452162029729108592943238420540807995979786912047956902162"), boost::lexical_cast("-0.00000000605861992739089687382030498760415289269264550833486793263523845161506867233"), boost::lexical_cast("-0.00000000480637734385966690366533313966404604324257069377664472991243197708870665367"), boost::lexical_cast("0.0000000000876647773931341316071062687585175265372059405788465230989307402677425063505"), boost::lexical_cast("0.000000000000789693132057393370058232851770479415791480697650703122951856272042933692562"), boost::lexical_cast("-0.00000000000000394568035880557031827281908497945772005279351103258103359896718769121745485"), boost::lexical_cast("0.000000000000000000576186871216969872110176316067425636374680848236512588856967818814130253782"), boost::lexical_cast("0.000000000000000000000000399819240477850657780597515175272454717319941884716677679140202464346919659"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.463497095089465556193152361674354253550988460728700341512951575248924005107"), boost::lexical_cast("-0.260338621434017069194053753179442990911796110131041248263757604108300285944"), boost::lexical_cast("-5.72933785864723347958689894576856896970871030371827125012166758462465732047"), boost::lexical_cast("17.98064416088037112447262961210309819025869195128448398522612428283054724080"), boost::lexical_cast("-26.15115449481430666135654454601908476913798365469208452665031301194399803840"), boost::lexical_cast("21.63822079230404623177750575684281008376996692891143829654563260593428321030"), boost::lexical_cast("-7.05817968019025161983821299053916328782422062221848193813994955273557967790"), boost::lexical_cast("-8.11181128099913899853666875636635568569027342591544318148780945667167347907"), boost::lexical_cast("14.43923347370119331414236561312914409252115548929447052983356089629331208180"), boost::lexical_cast("-9.60766039707057083044613368973988543650262251496746962365376370801259816429"), boost::lexical_cast("0.254349894074616002886672766738792455231069414161313786718905562281170886778"), boost::lexical_cast("5.45872370542653337904479516900588079252234184768289022901378718755768784979"), boost::lexical_cast("-5.35255306643817868800359080338618790990023650113900088092988956482209882224"), boost::lexical_cast("2.61884931508941023112322057748116480880128421631501355291655017759032872768"), boost::lexical_cast("-0.544813129850747446272398562457900585540272070585851811513882046278191469393"), boost::lexical_cast("-0.131176059127497035521761280194566727490837461219732199796495750703105213740"), boost::lexical_cast("0.124296561686239461871148096056473522101237708684506720861975326392569561724"), boost::lexical_cast("-0.0335032525969103386712875546102562852883523762416026454755015996210457308706"), boost::lexical_cast("0.00197687421925104166227063798049851778200652533856069925030249177610043199615"), boost::lexical_cast("0.000907463054694841802512946678881228619813411228517790637608215643817975804741"), boost::lexical_cast("-0.000174685093401222970344248415273071087172528039501120783385838904981987795138"), boost::lexical_cast("0.00000229140491543835493234065523810377340538057291963129940713094363492371457667"), boost::lexical_cast("0.000000917376265236181573917176045082865834981330874821423583901682913289270269380"), boost::lexical_cast("-0.0000000178074782772529767026962575165367966565557061024587011596888125628493484815"), boost::lexical_cast("-0.000000000238787852610260980034963670269451676132667432806865308573034008434193644445"), boost::lexical_cast("0.00000000000151801385578324942916928975944130135623202429359583566878602650893789670624"), boost::lexical_cast("-0.000000000000000353106940189348195874403026790192524180728472834959918047053114899585048985"), boost::lexical_cast("-0.000000000000000000000490042195447641265484925140544266723530168196082394169729111887193451305107"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.53968424333623591283539637104393285306939860118163339899756370093511752412"), boost::lexical_cast("-8.36118093364641071529734734349327158167828129455095101209909508144950844421"), boost::lexical_cast("19.00710265475370468078225452071655698496996076626930820052271290018734955410"), boost::lexical_cast("-24.04052483563886538469582688782856892395508706836015455488573334599930766580"), boost::lexical_cast("20.63913333795138578853149761490637030572718665431616641957345863819867808720"), boost::lexical_cast("-17.08011584958297102568375705513842664210388848702083749417185061652687170920"), boost::lexical_cast("17.55524143428210432499122213752206106254752320830907975294234324350799433880"), boost::lexical_cast("-19.56455097953537387041983773986348842091325243494736289394773636533578502420"), boost::lexical_cast("24.01670498281153432550600418634366701269994413307461865903740508422306310080"), boost::lexical_cast("-33.28148132262550348111697065791345588077894804510178954360174393891984479610"), boost::lexical_cast("42.28936350567703557972644120171241320325939901556345142153549130433210665950"), boost::lexical_cast("-41.40943373570026124612528767222691112123207497138997507301595976366377899660"), boost::lexical_cast("28.50368136498153869650031108535771315726615052538666183891156005702322580770"), boost::lexical_cast("-12.08970059569761086730267951049932958603674239966305615386495196624445364550"), boost::lexical_cast("1.46119126096220632514786029604710199172818340040776736162153531687984436840"), boost::lexical_cast("1.69007268736527437715523188086809199467627091856919669141240791790387659253"), boost::lexical_cast("-1.16921124742703235845376498243007226742896232096052353425298018102553247710"), boost::lexical_cast("0.320806648634560611806653735358063869544619918599484137286628075250908147793"), boost::lexical_cast("-0.0170205999053340524093626134534504044131532660032315483110190757667509195644"), boost::lexical_cast("-0.0123745609743425718328045581079363596477322528018678302846161407372341760769"), boost::lexical_cast("0.00269495872461749278937894414651717305557023546290073525941350512704421287628"), boost::lexical_cast("-0.0000636240007004980264934020663683814909158562231106074681170796063893995191439"), boost::lexical_cast("-0.0000193455103657614392543301741967257949034899863831055047403088880777986411556"), boost::lexical_cast("0.000000543047159360829865209946475973261539370518740747480923818151249126619846189"), boost::lexical_cast("0.00000000778598331220689574680060505013012792715985361940745149089414772050997826569"), boost::lexical_cast("-0.0000000000685925299554479615829881764374497385028698287479222092891938709078253622707"), boost::lexical_cast("0.0000000000000235738843909944600637338699828608981498881273911589420488771624426365157864"), boost::lexical_cast("0.0000000000000000000654307895488301061055340897951003080401798618960776945151552704816810354728"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.76046627819172595883579644359769953588535927343615287177933134988108839887"), boost::lexical_cast("-29.57545007102832657505743042011930496079450543026239630758938313589160532240"), boost::lexical_cast("108.06076562293097255019034894476937881414402744559487246258107823410272147100"), boost::lexical_cast("-250.55855156825033737879997781487474575584645685461277748381454265462847743800"), boost::lexical_cast("433.85129088951476536844660346166919823690012103418599659417068253860704897400"), boost::lexical_cast("-633.13061187142324243446054071388968011665704146897570849362072311779672021000"), boost::lexical_cast("834.01854300005356154348334819062306666614375690886471768229153759480600689000"), boost::lexical_cast("-989.02232878407997120358917296431206973916448753054681863157557204973406068100"), boost::lexical_cast("1017.88603439602004763640177568787110596329999229043433566699158997753449125000"), boost::lexical_cast("-893.85979471023473569530438057552113081237409230440464102711969573113903766400"), boost::lexical_cast("680.74444199320236644223784616878658122038563144919598756685948523953944743700"), boost::lexical_cast("-451.61186729310171527075800065120538411278520704643026316215948118992976179100"), boost::lexical_cast("232.74693413172044063567820009907697632227981752574909323161715193839229115800"), boost::lexical_cast("-49.62787383879085055577682941397994398270572566635118571746050265908129325690"), boost::lexical_cast("-52.68645266346889530866217977440828165209704972435580166424853416940379389960"), boost::lexical_cast("65.58982701592708822194210862578781927575261800997369868610970088145137416290"), boost::lexical_cast("-35.30870806416811325167467803727623467536045583746263032317420353531903306020"), boost::lexical_cast("9.45693020058134236236600914378186391920422807218483316498811188937316130359"), boost::lexical_cast("-0.309255989510124888838029367237184571273819098555330087401099231089501040621"), boost::lexical_cast("-0.553308322403180080662599855565330327614574762204447931420915764088214443229"), boost::lexical_cast("0.135564956163967134955269497874425345862822277717224909042351279062593810689"), boost::lexical_cast("-0.00531617697249685655413505764052220837874749434001927999181762850859579155872"), boost::lexical_cast("-0.00133403209032194873051891038551751265477738184982267945387427251670469994336"), boost::lexical_cast("0.0000540595013560067659511437186384964395648420570660778415392983733962063677878"), boost::lexical_cast("0.000000852069217823962821991801896006403698378777746783454675044188487130238725815"), boost::lexical_cast("-0.0000000103598635303144789735973280116080267383974282294610808060500440818154996985"), boost::lexical_cast("0.00000000000532326436761189266527809050123441642697540291063663589608819865551319229350"), boost::lexical_cast("0.0000000000000000295492612379887305461120954141505699178535540439686934703841872278010480863"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.38188904221300776496009553048328527576967910065603262630183408064961588176"), boost::lexical_cast("-67.04252259666674067633742223812249438362172734096027398031203225656148164940"), boost::lexical_cast("272.73912509608366716885866926191887521865157404771591884845733117796365013300"), boost::lexical_cast("-648.51449384638772307312239131652586511983283577261311478642454334856167122300"), boost::lexical_cast("981.85376383959687377603447626048634109920104854648430762305735754076198344100"), boost::lexical_cast("-957.25261435887056636875408331000776657447691883681487882680731075009939532500"), boost::lexical_cast("541.30366603538032163248551525965043960470666784840537611909029954347476521100"), boost::lexical_cast("39.46539569102171970705958669748925636189807552510212755901108827273086521860"), boost::lexical_cast("-760.02993356684106043735642415972224288718293309831726448424859435908357278400"), boost::lexical_cast("1757.96818720008277561277665672510216931821317114629250348699495528960281618000"), boost::lexical_cast("-2766.91476513255525367674460260698725596040373449509635634609462930432032153000"), boost::lexical_cast("3221.41783539270407631009108958251542185799510806531936255493906833962767291000"), boost::lexical_cast("-3000.71602754404820657764337837297990613638348460036621198220820334626336373000"), boost::lexical_cast("2470.42433778280717582983628335578899816038747362488063072589123876893726477000"), boost::lexical_cast("-1864.25821113047613457963263669044806128695158307572413234609544859584885145000"), boost::lexical_cast("1183.53150011814970334873822520119965114014726798970411170643520179119098445000"), boost::lexical_cast("-541.75058318442630698467104298817880920356698078100114691327566384707686791700"), boost::lexical_cast("137.99951240297224977307761334347678893729357990322145120547559793252791826600"), boost::lexical_cast("3.12602732950121750809668208362625489517387955383131958143915945154981671955"), boost::lexical_cast("-14.36194117187840557384339396841994678599549531498197679768014612622396331010"), boost::lexical_cast("3.88369251450641812542291404390995294553530491514707983578184816105564596373"), boost::lexical_cast("-0.205076203523751335646189692334735950522359458346215290146294237414818037925"), boost::lexical_cast("-0.0519198673443746908093580937887859538950707062316162140689427725731341271982"), boost::lexical_cast("0.00310590105240650772150514682372321446899318001963069459842377331199995861966"), boost::lexical_cast("0.0000511716533793490097430403325096759854066642658007865906291974896322156973598"), boost::lexical_cast("-0.000000915379504933333794585544205822404705959783310556611306655341242734341633518"), boost::lexical_cast("0.000000000673029022229937708128420645199884166792336526676086359571430889068627124496"), boost::lexical_cast("0.00000000000000747149572478212798771461071516239850864323299591892246195331160945379616491"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.66617997816256087920214536690617523746852206827065901622480769322290866167"), boost::lexical_cast("-83.98069158491897137664435643009459588979224859539210985853414803563252312670"), boost::lexical_cast("368.87018005167903705545229666937571099808324458744316183527918620353726742800"), boost::lexical_cast("-978.60152567875426023724121513068510566332100363338255210925843566160434538000"), boost::lexical_cast("1788.17285471112791661414958933940320019900977016707109161896875006334039594000"), boost::lexical_cast("-2505.28418158917689197444930176607319501629136847421443278162092799123039839000"), boost::lexical_cast("3022.40491246297357949186655015360733638291689023377677784285814202906653466000"), boost::lexical_cast("-3419.39265112219216302436718059863861209172985626334602672566056357398676317000"), boost::lexical_cast("3619.96406625884105825247254683983713351764036286848853247298077428329530067000"), boost::lexical_cast("-3448.50066768491548867152223553559079606474609521504982348767152988432081387000"), boost::lexical_cast("2965.26096092775058800222809037838051197376961526002823132548802908800674743000"), boost::lexical_cast("-2370.21566471701430778551537838896798515071343646894034846503015619772514804000"), boost::lexical_cast("1743.38269029053220243343945130374232884233597011426038758644227989592405303000"), boost::lexical_cast("-1131.51593963642249460026014723981984745424498754407883282530799710966079933000"), boost::lexical_cast("643.76118806159351516503113028075491121270396142347621937335117880501444850600"), boost::lexical_cast("-326.00074420849016938772363017187446532879284433779346261909720782417377859600"), boost::lexical_cast("132.04863636507697220410685855738565713363890174302170404844428502247667225600"), boost::lexical_cast("-24.93376772277967886098168919462189547482955889196701960148760723136973166400"), boost::lexical_cast("-11.46007355523622142805150360772463017894407819656429723380717693966775564550"), boost::lexical_cast("9.83520651597144304944047691431100720299540773467198740353710392336582989354"), boost::lexical_cast("-2.69181598889969722526095182382965976931346646569879768346189984962140006978"), boost::lexical_cast("0.170227793119178996114554027953840164114050954576165838411751690985113034637"), boost::lexical_cast("0.0452616305587191906906494463453331102952776770834099929727401231003607603490"), boost::lexical_cast("-0.00456974512275900662016820515100695013104712320434429376265064123517366266192"), boost::lexical_cast("-0.0000738155428701868927889552496062375155784301031721819122602154168460705282344"), boost::lexical_cast("0.00000200417805609293879064935927873520236391193751194342643471993129180158539068"), boost::lexical_cast("-0.00000000209880706796452611382955148605270725220758859068164296317180454372369377273"), boost::lexical_cast("-0.0000000000000465936380567652114719537560618521630318410912594224492450951043895287614753"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.72847835430747578271505940879392817014574904538191687349175230203052100211"), boost::lexical_cast("-87.24046040248515953396974656933062782610014739997179110379894560357414245520"), boost::lexical_cast("389.58988530574605311236047709354236113070541543269814845208675455966229540400"), boost::lexical_cast("-1026.22221524757438134135537633211873760625163523383080063432834094852546692000"), boost::lexical_cast("1792.93918179541631021688427461004056301988797982219951847510033799076038456000"), boost::lexical_cast("-2288.41214820149496386771786036086875129982895627472684354601681048945900938000"), boost::lexical_cast("2458.50954360267178809055553896154712231820849082662071689423543492550962685000"), boost::lexical_cast("-2596.76997150082880482258601881426530105265882898194790860287791956876237858000"), boost::lexical_cast("2688.38307737987921311800960622311996109514265545357119388268171549268774070000"), boost::lexical_cast("-2411.48650321182678409587384256865680519785438974750423956549570619527017446000"), boost::lexical_cast("1814.96164224744171541403234219853877586836575705876463094283829263461877926000"), boost::lexical_cast("-1261.78179075598184586999264045402353666457191513788617366898826973902302211000"), boost::lexical_cast("841.38676655654695150319104651983606990067095607106581498410485823300639441800"), boost::lexical_cast("-448.20904377535777870670016285684401262406426096054935991931563578462255940200"), boost::lexical_cast("137.16569415040272577867061166123400360598914522499642465421078486401470231300"), boost::lexical_cast("6.97029509532788895885164044921726939214354175896907818967947070760987898130"), boost::lexical_cast("-45.34341860661268956588627411545980012291737814825718255408526440488307550890"), boost::lexical_cast("55.74735370610838025915657695145098428353232401912757615516991907215832408810"), boost::lexical_cast("-47.32620271933516468424041285810723316313451633124158857561987010794991368370"), boost::lexical_cast("24.41065715637416470293954557751523613609531738353047901798090642091718991060"), boost::lexical_cast("-6.65124396027002908823875984373242061438238591321150033722971368086704479617"), boost::lexical_cast("0.537531975137361943952820148566801590297468742601138200538147419339609552580"), boost::lexical_cast("0.137261184926968071617250973316263533192179366757491899389956174516444039153"), boost::lexical_cast("-0.0239757337968515916483444709404140761125184131451276108629481306614530373711"), boost::lexical_cast("-0.000410932878749734216531821493671349775506467371457544836055057579036862846795"), boost::lexical_cast("0.0000165640171463349552097550017612947486316141194677792210133363117017273377794"), boost::lexical_cast("-0.0000000258597924701581016593914203020341509426840234287159000763753949926949104263"), boost::lexical_cast("-0.00000000000114791530792780648836943943902186807559930855796434559067866982676609926206"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 10) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.37287144211047504433704259901170390442721988996694171621504548629516455500"), boost::lexical_cast("-54.51890809483490464852283248943415532742549501170721326549017349607757265280"), boost::lexical_cast("247.65758677532204293221852843860039171893106744274564279152987067839641783700"), boost::lexical_cast("-667.31952719692784203091445371189075055828427651171572798348516350202578612200"), boost::lexical_cast("1206.13444150385134150552864103423123937369610639043173021135297756204197139000"), boost::lexical_cast("-1617.35818646827561667680600978897561880473542593995241051599248884894163073000"), boost::lexical_cast("1832.49156632655474156472726861249059324354983667150184526174507469910118731000"), boost::lexical_cast("-1995.67103845695443412193473876339890830254900007363102304644200890512301198000"), boost::lexical_cast("2131.02770891534946890637577113319756817054287535999854454320796762879118815000"), boost::lexical_cast("-2111.95187513591062446244103153762651327657529103137337383793513437628034658000"), boost::lexical_cast("1930.80461644034257841108186913574331573849553980249852538863650267384764992000"), boost::lexical_cast("-1674.24706814300119787406852339956482688948935893569842998213675767018340090000"), boost::lexical_cast("1366.35661279794117490633588742507550359572013220593797272821411949768939054000"), boost::lexical_cast("-1033.84481571316170085412808060764164688210636040456382284874028192216356915000"), boost::lexical_cast("737.90900404538211792129865165976450017644934243508965145264819927501132834700"), boost::lexical_cast("-493.95955963918928208805985585771230332863018601652969197751321482230632186700"), boost::lexical_cast("295.69484249333185830134864171026294553463486994728404251971308252543408822300"), boost::lexical_cast("-157.95033466620052198343083333630677317616869298083612156110564608777827008500"), boost::lexical_cast("78.86126735894737975190973401300435275810030284606457363717046418120379800980"), boost::lexical_cast("-34.19939723625297188671822278987343132401852492048877442030253470317557547340"), boost::lexical_cast("9.85480851482372144542629775026818779321611645636661320085440910666337715905"), boost::lexical_cast("-0.881195797409289017926845853302397485367129834932274334657677636659627396326"), boost::lexical_cast("-0.341364051723345408298411031291185136527925242955856494823260412052622050419"), boost::lexical_cast("0.0769303093181967020937802382117977446742217414595484586532006746274227409798"), boost::lexical_cast("0.00111175217988709633101089934655770002991047763696322734469092738921189950071"), boost::lexical_cast("-0.0000982647635077159314335458943401180956222687035734331269592286893349623594861"), boost::lexical_cast("0.000000189133470696662119943963434893213305034415041925165273061718661046346898186"), boost::lexical_cast("0.0000000000167835835060281197407582642924424716906566393004236332464276808169954678267"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 11) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.02130420622658340696449326038237531822446799531129776174318955573407685405"), boost::lexical_cast("-30.88723257001993621576643426629273861715132220480188564481242234143744414420"), boost::lexical_cast("139.65307157164095118547259358765798565209048590969720241210221184082814259900"), boost::lexical_cast("-366.50716378087925339618840606165232094377044199283379149990581531088506707700"), boost::lexical_cast("621.10849644228854707468833979073748978917989740451446746601968372897995517700"), boost::lexical_cast("-738.05038803654141867136650825674832560704059341561497206520134648959243742700"), boost::lexical_cast("716.22760163975362868384596863440985771640184356269565624056314309892640235800"), boost::lexical_cast("-720.40403662968977912382793878795331281967949028146265663798101543449138262900"), boost::lexical_cast("774.46958853527806540260330998289032375034119650758547176995108093121313426500"), boost::lexical_cast("-736.60195800103968521796236805592735351842535720597394502820018520167468427100"), boost::lexical_cast("596.31626254658612005766603140598759356655195606907637429116209218854881937200"), boost::lexical_cast("-471.58378761708200298998558351304868385444119358761564411342671419904990477200"), boost::lexical_cast("378.39898275809490245077643425004608535503558145569856205930880098307153717800"), boost::lexical_cast("-269.86571703409037356854373301981664730493718351969444434530300707084602972400"), boost::lexical_cast("167.75440605674704647078720706448625075038628046714247177190414075458807244900"), boost::lexical_cast("-102.88811870683190292233095418098044601993226910564909825458147979457012259200"), boost::lexical_cast("60.84069783294831355931283800609894422578310981797539730725548116612260807360"), boost::lexical_cast("-29.52799065611523148766040534779036649587797273072633016718343937010872259070"), boost::lexical_cast("12.09044122964690028250983947194193410583757173591995469038844600943694632610"), boost::lexical_cast("-4.94541561682043406565916615601715119979854449991220349537517054946542132239"), boost::lexical_cast("1.52761066076119130776354014949615007676815462459446946713730714810296595229"), boost::lexical_cast("-0.0304455420249075430891047039138326243093334846566920021789140647984175448097"), boost::lexical_cast("-0.149650671652588930076956033416283389031589049770514927584948507803553202910"), boost::lexical_cast("0.0336574490088785668148493615449347354611183173599708036294762098419950316423"), boost::lexical_cast("-0.000126497027151469654378765535979290734289731625144899692503470508091193529475"), boost::lexical_cast("-0.0000897116011370451342055211796348790683035477616931359835457707561956726691767"), boost::lexical_cast("0.000000142409422634022110726759123860758274606648079204544228006777846621754692259"), boost::lexical_cast("0.0000000000252515640185869778340276613779458838796409717012259538150426423432799209608"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 12) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.13501118834531862832791685103090778732600754703053509379504805718104885902"), boost::lexical_cast("-11.64655725601608471987125140319522273869255472727074641759372417306485077730"), boost::lexical_cast("52.47997731358147104819352051854695978618817398284168789151634324060243697900"), boost::lexical_cast("-135.45701731410847795494161971266033798422685436748530857469841989392043701600"), boost::lexical_cast("219.96124976643716810233421769891415115050379995458616095550270708427626420900"), boost::lexical_cast("-238.37499127470823560688111086646834383929171370516476493761439859373820683700"), boost::lexical_cast("199.79115976545848616437399472512434089517222358850429527846981583702591271100"), boost::lexical_cast("-186.06580854955499729692153505979598892043417420915640640747325871682106260700"), boost::lexical_cast("208.74631601283777221705885370999784696071568535053317514980802005864771752100"), boost::lexical_cast("-197.53853499262074041123518689566722947819857600237876006152376593189070798400"), boost::lexical_cast("144.50075463010970867145970534859505768015783636183955794684498462003441805100"), boost::lexical_cast("-106.36870296080726935127337203425079184767065663506312262840651389217392205900"), boost::lexical_cast("88.73938682065148057511439985326164459436444773853443006110286562673807699280"), boost::lexical_cast("-62.10218520435182935953770979789019089452934455495249757573801037083579624320"), boost::lexical_cast("33.37756480360810332092878948658803898197552007679892596614034975425467298740"), boost::lexical_cast("-18.90612968481519997245444759492813159382596260487606074048382930111416740570"), boost::lexical_cast("11.73182379476133043347419318594516895878294775638321702310633621242203615490"), boost::lexical_cast("-4.89127651169185001615684659153647879805287303355244863107672447172949919127"), boost::lexical_cast("1.05628831785634767244430613794778237383118902182955930156963055438457640198"), boost::lexical_cast("-0.278924570772378963005919620761891241290397678645427497366931683979103470313"), boost::lexical_cast("0.0349217046715326267223252535829602432217755405230717045003308341586538338077"), boost::lexical_cast("0.173039450787921076573568728042430497574717189628459371201122511640416535804"), boost::lexical_cast("-0.125154600705023543935668144417468315166811999855906394348835987111005330572"), boost::lexical_cast("0.0291520111880351888227853532698326680951804379655921639568061622853077591827"), boost::lexical_cast("-0.00119588167326521772050685130712167568577493075580492617893532154147491503516"), boost::lexical_cast("-0.000166966587098874949698033688140021197028135858548757937517355756848615445303"), boost::lexical_cast("0.000000188051207904050407421484278134701770752347161244389100186827497009857301113"), boost::lexical_cast("0.0000000000665676590058883342359366356514472856699743985374049531980671537812596361102"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 13) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.147328387026945181742534360727928536657557400346046037192839862582804936900"), boost::lexical_cast("-1.51456549085202376204483791233550876670959441040514033264111698819378554402"), boost::lexical_cast("6.94414619972386232622555773936309700660158456761079287802696168029991317902"), boost::lexical_cast("-18.78704596117275369235580835040616276805576972998620945843399189205354798320"), boost::lexical_cast("33.75320683102715133888929607462218380210425052594719299190672951764918964970"), boost::lexical_cast("-43.90968018808903858591509195317885887927809302282775758823494965859626988710"), boost::lexical_cast("45.83007041045357748015949276788143174487066194868689328670377077172900922670"), boost::lexical_cast("-43.30834737848262311266594213584179463295479030127624741231273476750096363320"), boost::lexical_cast("40.28587342872956736979372620674121597409935291189432692644089811506211904560"), boost::lexical_cast("-38.07079933210995921006056307099293201249460698597519136937589815349848540930"), boost::lexical_cast("36.48645327878740068202506706074164138888906527167902669842548785200456090760"), boost::lexical_cast("-32.99863707618939353424238452194841065903680035129007522576517208426242003870"), boost::lexical_cast("26.55970062209079850156043839739581666886976736313064228805575294861660949750"), boost::lexical_cast("-20.59842254567111580869690652690847120193788739757843717989385899237339101340"), boost::lexical_cast("16.66182339593160150140392670274598786225164619130356052597867372641808254150"), boost::lexical_cast("-12.48056679222918764776819055454069770140079985190646278545971576285539893300"), boost::lexical_cast("8.00729939791465563598426689351883338497952088924077343600523943715192249470"), boost::lexical_cast("-5.05071646613187505818485190469727424915951382050926867171160457018863109602"), boost::lexical_cast("3.29966711978217146018111284131326004314469156813581461296273109642531273479"), boost::lexical_cast("-1.82568661448281886663681039165151047023026983547946329025101178092516198927"), boost::lexical_cast("0.821545996592165413015176926103918379703993671815822408869238370242177789874"), boost::lexical_cast("-0.383704993238053425488527996051173229244898380519514965582775999086944158021"), boost::lexical_cast("0.175485561770223825536069856812357489141836294882044305667107034046144733761"), boost::lexical_cast("-0.0490433781210161672748726863502704850354754206732915757148321796262332557411"), boost::lexical_cast("0.00402547360327382273192760485491174840524317417151707477913869414062168673233"), boost::lexical_cast("0.000591615163102432487394020984370444214618369356333750305162759222030306708281"), boost::lexical_cast("-0.00000150076799335799622176733790301367198750063662367274615802926812851245445696"), boost::lexical_cast("-0.00000000105864474240497768156598640472330313913710369319591100716113011216570777723"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 14) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0242821885342162555172194807204060720439176164669704179647896832718856332498"), boost::lexical_cast("-0.249856695544308322348171496342170210083410754460476379583874589925971489368"), boost::lexical_cast("1.12326005797749044778439744178131419781661379271554672577789771011822915870"), boost::lexical_cast("-2.86469109526581467211201873076519837722365386321507572083194802001927335161"), boost::lexical_cast("4.50079290106999295066844741272526027729937316456024276862452670751556633337"), boost::lexical_cast("-4.48684463117403305020608532973799146401232890979166234034679061467612710549"), boost::lexical_cast("3.12967055985402796636707893316937491613623416550895649179552121609620465579"), boost::lexical_cast("-2.47724668807865361819228723977775474438205454678621615947243362585570677107"), boost::lexical_cast("2.91278205889249382066105160662535333323212648243270007533168890574238996600"), boost::lexical_cast("-2.81257313199263046793165930650235695480992793053614182870128250653240399226"), boost::lexical_cast("1.90398649466128702523970742655503101903096138960699394205660617785029524613"), boost::lexical_cast("-1.37699945499915151843967957813503956475301514890644971272041072293843226357"), boost::lexical_cast("1.28495268091529903567348249127974601649844237295023870994028850106617764318"), boost::lexical_cast("-0.952763471445207071061796159152966939284649904476335068736845300084967366990"), boost::lexical_cast("0.535788968888742389713782672547333938330308007633675251508339886039944284585"), boost::lexical_cast("-0.358020789818714250877447233131478684920110238088884239583652089996295811608"), boost::lexical_cast("0.260288177789983828698553363324988305811986215701965042156106479955015465057"), boost::lexical_cast("-0.136189356052305779370763109924086580150032155644746928185072140262278106899"), boost::lexical_cast("0.0628766811464750403125935867053544555088689453179188749663490799516604967151"), boost::lexical_cast("-0.0370637548509496888808797750019041755705513054464047218196448291548517149764"), boost::lexical_cast("0.0177893472376662545340696681623277652018062438254456540388233762026125185107"), boost::lexical_cast("-0.00567156369248172085563495886241541581202423428371480185063640538001288280474"), boost::lexical_cast("0.00218143409758500086570687953062016667230176987210602107478648809100271457937"), boost::lexical_cast("-0.000840077010916613961293716749850474022730704167044599676252293240098595360069"), boost::lexical_cast("0.0000884896797884032945739919608263751800212682320278642794159422173907791309331"), boost::lexical_cast("0.0000208568442490274769998537189218999959487143160425280136701000686328977000945"), boost::lexical_cast("-0.000000187401650616022963832478803386742923717598478201557979913608078604137745338"), boost::lexical_cast("-0.000000000262480056546984342244841766991496735739199664461987202512509327833476650923"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } if constexpr (p == 16) { if constexpr (std::is_same_v) { @@ -1622,16 +2007,16 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.674708p-13f, 0x1.27cdb4p-5f, 0x1.f3f9a4p-2f, 0x1.8a1b0ep-1f, -0x1.d00082p-2f, 0x1.06c982p-2f, -0x1.4ec10ap-3f, 0x1.b93c32p-4f, -0x1.09f5f4p-4f, 0x1.0b6a76p-5f, -0x1.a17eb8p-7f, 0x1.cda18ep-9f, -0x1.18156ap-11f, -0x1.547c4ep-15f, 0x1.a1d518p-15f, -0x1.fb90c6p-17f, 0x1.085bbcp-19f, 0x1.4a16eap-22f, -0x1.3b0f84p-23f, 0x1.42695p-28f, 0x1.acf5ccp-29f, 0x1.c7dfc2p-37f, -0x1.99a498p-37f, 0x1.0c54f6p-42f, 0x1.60b622p-49f, -0x1.63607p-54f, 0x1.f308a8p-62f, -0x1.dcd83cp-74f, -0x1.f4c81ep-87f, 0x1.f541a8p-112f, -0x0p+0f}; } if constexpr (order == 1) { - return {0x0p+0f, 0x1.5e2be4p-10f, 0x1.115596p-3f, 0x1.8e066ep-1f, -0x1.9a3aeap-1f, -0x1.b4e824p-2f, 0x1.24d79cp-1f, -0x1.96ff08p-2f, 0x1.7cff08p-3f, -0x1.3b2f7p-5f, -0x1.8c4396p-6f, 0x1.d82f62p-6f, -0x1.d30848p-7f, 0x1.b8ca7p-9f, 0x1.4ea26ep-13f, -0x1.44550ap-12f, 0x1.116fb6p-15f, 0x1.e6f46ap-16f, -0x1.73244cp-17f, 0x1.105e3p-20f, 0x1.85ee5ap-23f, -0x1.5ac9f2p-25f, 0x1.d789f4p-30f, 0x1.8d5e3ep-35f, -0x1.c8b384p-37f, 0x1.38fe4p-43f, 0x1.f524d2p-49f, -0x1.a73b7ep-57f, -0x1.c53204p-68f, 0x1.a5354ep-81f, -0x1.a59b92p-105f, 0x0p+0f}; + return {0x0p+0f, 0x1.5e2be4p-10f, 0x1.115596p-3f, 0x1.8e066ep-1f, -0x1.9a3aeap-1f, -0x1.b4e824p-2f, 0x1.24d79cp-1f, -0x1.96ff08p-2f, 0x1.7cff08p-3f, -0x1.3b2f7p-5f, -0x1.8c4396p-6f, 0x1.d82f62p-6f, -0x1.d30848p-7f, 0x1.b8ca7p-9f, 0x1.4ea26ep-13f, -0x1.44550ap-12f, 0x1.116fb6p-15f, 0x1.e6f46ap-16f, -0x1.73244cp-17f, 0x1.105e3p-20f, 0x1.85ee5ap-23f, -0x1.5ac9f2p-25f, 0x1.d789f4p-30f, 0x1.8d5e3ep-35f, -0x1.c8b384p-37f, 0x1.38fe4p-43f, 0x1.f524d2p-49f, -0x1.a73b7ep-57f, -0x1.c53204p-68f, 0x1.a5354ep-81f, -0x1.a59b92p-105f, -0x0p+0f}; } if constexpr (order == 2) { - return {0x0p+0f, 0x1.295efep-7f, 0x1.9d61ccp-2f, 0x1.161d42p-2f, -0x1.5b7a46p+1f, 0x1.d1174ep+1f, -0x1.64fd52p+1f, 0x1.05168ep+1f, -0x1.657508p+0f, 0x1.a38bfp-1f, -0x1.889b16p-2f, 0x1.152c76p-3f, -0x1.1b4c9ap-5f, 0x1.907f1ep-8f, -0x1.48b152p-13f, -0x1.a3276ep-11f, 0x1.19008ap-11f, -0x1.4a0f3p-13f, 0x1.b16d86p-17f, 0x1.3c9bcap-19f, 0x1.899254p-24f, -0x1.e003aep-24f, -0x1.b118f8p-27f, 0x1.a8e81cp-30f, 0x1.472048p-36f, 0x1.0bc546p-41f, -0x1.5b7878p-47f, -0x1.75c578p-53f, -0x1.4450ep-64f, 0x1.74639cp-76f, -0x1.74be14p-99f, -0x0p+0f}; + return {0x0p+0f, 0x1.295efep-7f, 0x1.9d61ccp-2f, 0x1.161d42p-2f, -0x1.5b7a46p+1f, 0x1.d1174ep+1f, -0x1.64fd52p+1f, 0x1.05168ep+1f, -0x1.657508p+0f, 0x1.a38bfp-1f, -0x1.889b16p-2f, 0x1.152c76p-3f, -0x1.1b4c9ap-5f, 0x1.907f1ep-8f, -0x1.48b152p-13f, -0x1.a3276ep-11f, 0x1.19008ap-11f, -0x1.4a0f3p-13f, 0x1.b16d86p-17f, 0x1.3c9bcap-19f, 0x1.899254p-24f, -0x1.e003aep-24f, -0x1.b118f8p-27f, 0x1.a8e81cp-30f, 0x1.472048p-36f, 0x1.0bc546p-41f, -0x1.5b7878p-47f, -0x1.75c578p-53f, -0x1.4450ep-64f, 0x1.74639cp-76f, -0x1.74be14p-99f, 0x0p+0f}; } if constexpr (order == 3) { - return {0x0p+0f, 0x1.ade0c6p-5f, 0x1.c28b44p-1f, -0x1.5f4cdp+1f, 0x1.cdb8f6p+0f, 0x1.f77744p+0f, -0x1.dd879cp+1f, 0x1.37053cp+1f, -0x1.1bfa76p-2f, -0x1.2b5034p+0f, 0x1.63e226p+0f, -0x1.a29914p-1f, 0x1.852868p-3f, 0x1.9a9664p-4f, -0x1.c29f78p-4f, 0x1.54d634p-5f, -0x1.41b2a6p-9f, -0x1.225dap-8f, 0x1.f9019ap-10f, -0x1.2c2838p-12f, -0x1.8e8742p-16f, 0x1.c9f58cp-17f, -0x1.61f64ap-20f, -0x1.96b8bp-25f, 0x1.71f48cp-27f, -0x1.b5fc8ep-34f, -0x1.c5963ep-38f, 0x1.6b4e6cp-45f, 0x1.e67136p-58f, -0x1.6aff4p-67f, 0x1.6b579p-89f, -0x0p+0f}; + return {0x0p+0f, 0x1.ade0c6p-5f, 0x1.c28b44p-1f, -0x1.5f4cdp+1f, 0x1.cdb8f6p+0f, 0x1.f77744p+0f, -0x1.dd879cp+1f, 0x1.37053cp+1f, -0x1.1bfa76p-2f, -0x1.2b5034p+0f, 0x1.63e226p+0f, -0x1.a29914p-1f, 0x1.852868p-3f, 0x1.9a9664p-4f, -0x1.c29f78p-4f, 0x1.54d634p-5f, -0x1.41b2a6p-9f, -0x1.225dap-8f, 0x1.f9019ap-10f, -0x1.2c2838p-12f, -0x1.8e8742p-16f, 0x1.c9f58cp-17f, -0x1.61f64ap-20f, -0x1.96b8bp-25f, 0x1.71f48cp-27f, -0x1.b5fc8ep-34f, -0x1.c5963ep-38f, 0x1.6b4e6cp-45f, 0x1.e67136p-58f, -0x1.6aff4p-67f, 0x1.6b579p-89f, 0x0p+0f}; } if constexpr (order == 4) { - return {0x0p+0f, 0x1.002834p-2f, 0x1.74f146p-1f, -0x1.d40722p+2f, 0x1.2af6fp+4f, -0x1.a43136p+4f, 0x1.9a15aep+4f, -0x1.38d1bep+4f, 0x1.6c6cdcp+3f, -0x1.13619ap+2f, 0x1.d56ce2p-1f, -0x1.e42908p-1f, 0x1.e52912p+0f, -0x1.ee224ep+0f, 0x1.1f26d6p+0f, -0x1.588844p-2f, -0x1.9e45fcp-7f, 0x1.dcd2d2p-5f, -0x1.93116cp-6f, 0x1.0e0178p-8f, 0x1.31f3fap-12f, -0x1.f6b0ep-13f, 0x1.f05078p-16f, 0x1.2ec5bap-20f, -0x1.47f2bp-22f, 0x1.bcb022p-29f, 0x1.1bcefep-32f, -0x1.34d97ap-39f, -0x1.6f2c8cp-53f, 0x1.34e43ep-60f, -0x1.352f98p-81f, 0x0p+0f}; + return {0x0p+0f, 0x1.002834p-2f, 0x1.74f146p-1f, -0x1.d40722p+2f, 0x1.2af6fp+4f, -0x1.a43136p+4f, 0x1.9a15aep+4f, -0x1.38d1bep+4f, 0x1.6c6cdcp+3f, -0x1.13619ap+2f, 0x1.d56ce2p-1f, -0x1.e42908p-1f, 0x1.e52912p+0f, -0x1.ee224ep+0f, 0x1.1f26d6p+0f, -0x1.588844p-2f, -0x1.9e45fcp-7f, 0x1.dcd2d2p-5f, -0x1.93116cp-6f, 0x1.0e0178p-8f, 0x1.31f3fap-12f, -0x1.f6b0ep-13f, 0x1.f05078p-16f, 0x1.2ec5bap-20f, -0x1.47f2bp-22f, 0x1.bcb022p-29f, 0x1.1bcefep-32f, -0x1.34d97ap-39f, -0x1.6f2c8cp-53f, 0x1.34e43ep-60f, -0x1.352f98p-81f, -0x0p+0f}; } if constexpr (order == 5) { return {0x0p+0f, 0x1.e5d8b2p-1f, -0x1.e7e4aep+1f, 0x1.643948p+1f, 0x1.8bf778p+3f, -0x1.39576p+5f, 0x1.f6657cp+5f, -0x1.2981aap+6f, 0x1.0cf3p+6f, -0x1.71528cp+4f, -0x1.136588p+6f, 0x1.5ecf14p+7f, -0x1.ca8fbep+7f, 0x1.83a966p+7f, -0x1.9d9118p+6f, 0x1.818f5cp+4f, 0x1.4e782cp+3f, -0x1.7fba74p+3f, 0x1.361d7ep+2f, -0x1.85fee8p-1f, -0x1.fcc32p-4f, 0x1.30d54cp-4f, -0x1.4236c8p-7f, -0x1.6b6d4cp-12f, 0x1.251cb8p-13f, -0x1.7df628p-19f, -0x1.6d7bap-23f, 0x1.04735p-29f, 0x1.ecabdp-41f, -0x1.035efp-49f, 0x1.039e9p-69f, 0x0p+0f}; @@ -1640,13 +2025,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.5c435cp+1f, -0x1.45ad88p+4f, 0x1.1ac644p+6f, -0x1.3bcd24p+7f, 0x1.1132bep+8f, -0x1.a33216p+8f, 0x1.2bec4cp+9f, -0x1.83ddd4p+9f, 0x1.b1ad42p+9f, -0x1.9d7a32p+9f, 0x1.5526f8p+9f, -0x1.e99686p+8f, 0x1.186a9ap+8f, -0x1.4f805p+6f, -0x1.84955p+5f, 0x1.59efa2p+6f, -0x1.dac7aep+5f, 0x1.620788p+4f, -0x1.88bb02p+1f, -0x1.04b916p+0f, 0x1.18c698p-1f, -0x1.508ddcp-4f, -0x1.539386p-9f, 0x1.9eab9ap-10f, -0x1.980b92p-15f, -0x1.761c2ap-19f, 0x1.64e7e2p-25f, 0x1.1823b8p-35f, -0x1.623924p-44f, 0x1.6290fap-63f, 0x0p+0f}; } if constexpr (order == 7) { - return {0x0p+0f, 0x1.891444p+2f, -0x1.c4b29p+5f, 0x1.d994c4p+7f, -0x1.26defep+9f, 0x1.ddf578p+9f, -0x1.fd207ap+9f, 0x1.36152ap+9f, 0x1.d8616ap+6f, -0x1.190b42p+10f, 0x1.36219cp+11f, -0x1.eed74p+11f, 0x1.31c14ap+12f, -0x1.31807ap+12f, 0x1.07e38p+12f, -0x1.9ca0ep+11f, 0x1.192392p+11f, -0x1.28f7fp+10f, 0x1.8ef118p+8f, -0x1.076216p+5f, -0x1.3734aap+5f, 0x1.2e313ep+4f, -0x1.913ecep+1f, -0x1.aba4ep-4f, 0x1.5578cap-4f, -0x1.f3ff48p-9f, -0x1.bd3a12p-13f, 0x1.29ffeap-18f, 0x1.5e7712p-28f, -0x1.267e4p-36f, 0x1.26c8dap-54f, -0x0p+0f}; + return {0x0p+0f, 0x1.891444p+2f, -0x1.c4b29p+5f, 0x1.d994c4p+7f, -0x1.26defep+9f, 0x1.ddf578p+9f, -0x1.fd207ap+9f, 0x1.36152ap+9f, 0x1.d8616ap+6f, -0x1.190b42p+10f, 0x1.36219cp+11f, -0x1.eed74p+11f, 0x1.31c14ap+12f, -0x1.31807ap+12f, 0x1.07e38p+12f, -0x1.9ca0ep+11f, 0x1.192392p+11f, -0x1.28f7fp+10f, 0x1.8ef118p+8f, -0x1.076216p+5f, -0x1.3734aap+5f, 0x1.2e313ep+4f, -0x1.913ecep+1f, -0x1.aba4ep-4f, 0x1.5578cap-4f, -0x1.f3ff48p-9f, -0x1.bd3a12p-13f, 0x1.29ffeap-18f, 0x1.5e7712p-28f, -0x1.267e4p-36f, 0x1.26c8dap-54f, 0x0p+0f}; } if constexpr (order == 8) { - return {0x0p+0f, 0x1.1c0608p+3f, -0x1.65d998p+6f, 0x1.9d8978p+8f, -0x1.24c8d8p+10f, 0x1.21d47ap+11f, -0x1.bbc006p+11f, 0x1.2211c4p+12f, -0x1.5c65p+12f, 0x1.845a36p+12f, -0x1.87e6ep+12f, 0x1.650412p+12f, -0x1.2b9aap+12f, 0x1.cebcfcp+11f, -0x1.3e375cp+11f, 0x1.7d70c6p+10f, -0x1.8fd688p+9f, 0x1.57b6f4p+8f, -0x1.3e2cp+6f, -0x1.f1e0f6p+4f, 0x1.39f676p+5f, -0x1.07f7dep+4f, 0x1.6eaf02p+1f, 0x1.f8896cp-4f, -0x1.b78e4ap-4f, 0x1.faf294p-8f, 0x1.a6b604p-12f, -0x1.9886bep-17f, -0x1.7c0bdep-26f, 0x1.90aca4p-34f, -0x1.91166ep-51f, 0x0p+0f}; + return {0x0p+0f, 0x1.1c0608p+3f, -0x1.65d998p+6f, 0x1.9d8978p+8f, -0x1.24c8d8p+10f, 0x1.21d47ap+11f, -0x1.bbc006p+11f, 0x1.2211c4p+12f, -0x1.5c65p+12f, 0x1.845a36p+12f, -0x1.87e6ep+12f, 0x1.650412p+12f, -0x1.2b9aap+12f, 0x1.cebcfcp+11f, -0x1.3e375cp+11f, 0x1.7d70c6p+10f, -0x1.8fd688p+9f, 0x1.57b6f4p+8f, -0x1.3e2cp+6f, -0x1.f1e0f6p+4f, 0x1.39f676p+5f, -0x1.07f7dep+4f, 0x1.6eaf02p+1f, 0x1.f8896cp-4f, -0x1.b78e4ap-4f, 0x1.faf294p-8f, 0x1.a6b604p-12f, -0x1.9886bep-17f, -0x1.7c0bdep-26f, 0x1.90aca4p-34f, -0x1.91166ep-51f, -0x0p+0f}; } if constexpr (order == 9) { - return {0x0p+0f, 0x1.58e7ep+3f, -0x1.c53a2ap+6f, 0x1.0cc18ep+9f, -0x1.7c92fcp+10f, 0x1.6a1946p+11f, -0x1.fab772p+11f, 0x1.254298p+12f, -0x1.407f9ep+12f, 0x1.53233cp+12f, -0x1.3b528cp+12f, 0x1.e2ea28p+11f, -0x1.3d616ap+11f, 0x1.75fce6p+10f, -0x1.2b5b5p+9f, -0x1.18e052p+7f, 0x1.ed1ee2p+8f, -0x1.f5a5a8p+8f, 0x1.920c94p+8f, -0x1.22c138p+8f, 0x1.4b1ba2p+7f, -0x1.ec877p+5f, 0x1.641262p+3f, 0x1.3bac8p-1f, -0x1.3ae0dcp-1f, 0x1.0ba446p-4f, 0x1.c3804ap-9f, -0x1.3c78fcp-13f, -0x1.6e90a4p-22f, 0x1.34c398p-29f, -0x1.351bbcp-45f, 0x0p+0f}; + return {0x0p+0f, 0x1.58e7ep+3f, -0x1.c53a2ap+6f, 0x1.0cc18ep+9f, -0x1.7c92fcp+10f, 0x1.6a1946p+11f, -0x1.fab772p+11f, 0x1.254298p+12f, -0x1.407f9ep+12f, 0x1.53233cp+12f, -0x1.3b528cp+12f, 0x1.e2ea28p+11f, -0x1.3d616ap+11f, 0x1.75fce6p+10f, -0x1.2b5b5p+9f, -0x1.18e052p+7f, 0x1.ed1ee2p+8f, -0x1.f5a5a8p+8f, 0x1.920c94p+8f, -0x1.22c138p+8f, 0x1.4b1ba2p+7f, -0x1.ec877p+5f, 0x1.641262p+3f, 0x1.3bac8p-1f, -0x1.3ae0dcp-1f, 0x1.0ba446p-4f, 0x1.c3804ap-9f, -0x1.3c78fcp-13f, -0x1.6e90a4p-22f, 0x1.34c398p-29f, -0x1.351bbcp-45f, -0x0p+0f}; } if constexpr (order == 10) { return {0x0p+0f, 0x1.0cfd94p+3f, -0x1.68c00ep+6f, 0x1.b4a63ap+8f, -0x1.3c4fdp+10f, 0x1.35efeap+11f, -0x1.c3872cp+11f, 0x1.1261acp+12f, -0x1.39e1fap+12f, 0x1.5e4c9ep+12f, -0x1.6b72e4p+12f, 0x1.578fd4p+12f, -0x1.30faf4p+12f, 0x1.0174aep+12f, -0x1.942bc4p+11f, 0x1.25cbc8p+11f, -0x1.914caap+10f, 0x1.f93f04p+9f, -0x1.1b4f5ep+9f, 0x1.1df01cp+8f, -0x1.048db6p+7f, 0x1.730bccp+5f, -0x1.09b56cp+3f, -0x1.4fb834p+0f, 0x1.e38e1p-1f, -0x1.ee07e6p-4f, -0x1.913ceep-8f, 0x1.0726b8p-11f, 0x1.2751c6p-20f, -0x1.00ceb8p-26f, 0x1.012308p-41f, 0x0p+0f}; @@ -1661,7 +2046,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0f, 0x1.a308fp-1f, -0x1.1df37cp+3f, 0x1.5a47ccp+5f, -0x1.e7cc32p+6f, 0x1.ba5aa6p+7f, -0x1.137ebep+8f, 0x1.07f96cp+8f, -0x1.f176d6p+7f, 0x1.0c09ap+8f, -0x1.12bf1p+8f, 0x1.de16d6p+7f, -0x1.8c7b4ap+7f, 0x1.565926p+7f, -0x1.13d91ap+7f, 0x1.8b69dep+6f, -0x1.15b78cp+6f, 0x1.8188b8p+5f, -0x1.e03c02p+4f, 0x1.12ed8cp+4f, -0x1.36a5bp+3f, 0x1.3d2642p+2f, -0x1.11ef14p+1f, 0x1.c294dap-1f, -0x1.4f57e8p-2f, 0x1.1ebd9ap-4f, 0x1.367918p-14f, -0x1.fdd378p-10f, -0x1.0fc074p-22f, 0x1.f945fcp-22f, -0x1.fb1bdp-34f, 0x0p+0f}; } if constexpr (order == 14) { - return {0x0p+0f, 0x1.74ef14p-3f, -0x1.fd9d32p+0f, 0x1.3320f2p+3f, -0x1.a9e31ep+4f, 0x1.73dbdep+5f, -0x1.aa50f2p+5f, 0x1.5e48acp+5f, -0x1.20d7a8p+5f, 0x1.4350bap+5f, -0x1.549ap+5f, 0x1.0d8c72p+5f, -0x1.8fe88ap+4f, 0x1.63da6cp+4f, -0x1.24224p+4f, 0x1.7851e2p+3f, -0x1.e4fd18p+2f, 0x1.610a44p+2f, -0x1.ae4c3ep+1f, 0x1.a6fe28p+0f, -0x1.ccc92p-1f, 0x1.f93894p-2f, -0x1.8612dep-3f, 0x1.fd43fcp-5f, -0x1.aafa1ep-6f, 0x1.b63874p-8f, 0x1.071682p-11f, -0x1.a84c4p-12f, 0x1.a20c24p-18f, 0x1.e7f1cp-23f, -0x1.eb089ap-34f, 0x0p+0f}; + return {0x0p+0f, 0x1.74ef14p-3f, -0x1.fd9d32p+0f, 0x1.3320f2p+3f, -0x1.a9e31ep+4f, 0x1.73dbdep+5f, -0x1.aa50f2p+5f, 0x1.5e48acp+5f, -0x1.20d7a8p+5f, 0x1.4350bap+5f, -0x1.549ap+5f, 0x1.0d8c72p+5f, -0x1.8fe88ap+4f, 0x1.63da6cp+4f, -0x1.24224p+4f, 0x1.7851e2p+3f, -0x1.e4fd18p+2f, 0x1.610a44p+2f, -0x1.ae4c3ep+1f, 0x1.a6fe28p+0f, -0x1.ccc92p-1f, 0x1.f93894p-2f, -0x1.8612dep-3f, 0x1.fd43fcp-5f, -0x1.aafa1ep-6f, 0x1.b63874p-8f, 0x1.071682p-11f, -0x1.a84c4p-12f, 0x1.a20c24p-18f, 0x1.e7f1cp-23f, -0x1.eb089ap-34f, -0x0p+0f}; } if constexpr (order == 15) { return {0x0p+0f, 0x1.31c72ap-6f, -0x1.a21aa8p-3f, 0x1.f656a4p-1f, -0x1.589b5p+1f, 0x1.250496p+2f, -0x1.3b0f08p+2f, 0x1.bed88p+1f, -0x1.37fe76p+1f, 0x1.75c34ap+1f, -0x1.9f32b2p+1f, 0x1.2a50b6p+1f, -0x1.80aff2p+0f, 0x1.71f9bp+0f, -0x1.40d216p+0f, 0x1.6edc3cp-1f, -0x1.abb5dp-2f, 0x1.5fdcbap-2f, -0x1.af4e9cp-3f, 0x1.57b33ep-4f, -0x1.736294p-5f, 0x1.e1a61ep-6f, -0x1.381382p-7f, 0x1.a99b88p-10f, -0x1.191adap-10f, 0x1.44a23ap-12f, 0x1.4db128p-13f, -0x1.2cad38p-14f, 0x1.f38c66p-19f, 0x1.c87078p-24f, -0x1.cdd01ap-34f, -0x0p+0f}; @@ -1672,16 +2057,16 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.674708c20fd28p-13, 0x1.27cdb30a789aap-5, 0x1.f3f9a4213a58ep-2, 0x1.8a1b0e63e768fp-1, -0x1.d0008134e7b25p-2, 0x1.06c9817f611eap-2, -0x1.4ec109006f3abp-3, 0x1.b93c322324f49p-4, -0x1.09f5f4083e297p-4, 0x1.0b6a75dfa25cdp-5, -0x1.a17eb803ff746p-7, 0x1.cda18d3f662aap-9, -0x1.1815693b1e50ap-11, -0x1.547c4d557ee7fp-15, 0x1.a1d518779619bp-15, -0x1.fb90c559a340ap-17, 0x1.085bbb58c3dc6p-19, 0x1.4a16ea18a78a9p-22, -0x1.3b0f83cef7c9dp-23, 0x1.426950d9b6bcap-28, 0x1.acf5cc83787c7p-29, 0x1.c7dfc1cbcd56p-37, -0x1.99a4987142751p-37, 0x1.0c54f6dbbd52bp-42, 0x1.60b6215484a1dp-49, -0x1.6360709f9f94cp-54, 0x1.f308a7934d099p-62, -0x1.dcd83ccd7b40ep-74, -0x1.f4c81d09055a8p-87, 0x1.f541a7bafa402p-112, -0x0p+0}; } if constexpr (order == 1) { - return {0x0p+0, 0x1.5e2be3ffc02e6p-10, 0x1.115596e3350edp-3, 0x1.8e066ec21fc6ap-1, -0x1.9a3ae9a2a692bp-1, -0x1.b4e823397cf88p-2, 0x1.24d79baf908bcp-1, -0x1.96ff08990aa2p-2, 0x1.7cff079859d45p-3, -0x1.3b2f6fbc125fp-5, -0x1.8c439625af32p-6, 0x1.d82f61038e0ep-6, -0x1.d308486caa608p-7, 0x1.b8ca6f1e525d9p-9, 0x1.4ea26d28d3087p-13, -0x1.4455094b3efadp-12, 0x1.116fb5095b29ap-15, 0x1.e6f46905743cfp-16, -0x1.73244b5651139p-17, 0x1.105e30d7ecb46p-20, 0x1.85ee598e5c773p-23, -0x1.5ac9f1c76ae72p-25, 0x1.d789f3d703addp-30, 0x1.8d5e3e20027e8p-35, -0x1.c8b3833c3b769p-37, 0x1.38fe40b99904fp-43, 0x1.f524d19d8420ap-49, -0x1.a73b7d5e557e7p-57, -0x1.c5320460bba02p-68, 0x1.a5354de9b5e4cp-81, -0x1.a59b918cf087fp-105, 0x0p+0}; + return {0x0p+0, 0x1.5e2be3ffc02e6p-10, 0x1.115596e3350edp-3, 0x1.8e066ec21fc6ap-1, -0x1.9a3ae9a2a692bp-1, -0x1.b4e823397cf88p-2, 0x1.24d79baf908bcp-1, -0x1.96ff08990aa2p-2, 0x1.7cff079859d45p-3, -0x1.3b2f6fbc125fp-5, -0x1.8c439625af32p-6, 0x1.d82f61038e0ep-6, -0x1.d308486caa608p-7, 0x1.b8ca6f1e525d9p-9, 0x1.4ea26d28d3087p-13, -0x1.4455094b3efadp-12, 0x1.116fb5095b29ap-15, 0x1.e6f46905743cfp-16, -0x1.73244b5651139p-17, 0x1.105e30d7ecb46p-20, 0x1.85ee598e5c773p-23, -0x1.5ac9f1c76ae72p-25, 0x1.d789f3d703addp-30, 0x1.8d5e3e20027e8p-35, -0x1.c8b3833c3b769p-37, 0x1.38fe40b99904fp-43, 0x1.f524d19d8420ap-49, -0x1.a73b7d5e557e7p-57, -0x1.c5320460bba02p-68, 0x1.a5354de9b5e4cp-81, -0x1.a59b918cf087fp-105, -0x0p+0}; } if constexpr (order == 2) { - return {0x0p+0, 0x1.295efeac152d8p-7, 0x1.9d61cc47e5de2p-2, 0x1.161d416b67638p-2, -0x1.5b7a45663376bp+1, 0x1.d1174d09edd0ep+1, -0x1.64fd520a6621ap+1, 0x1.05168da964846p+1, -0x1.6575089c4586dp+0, 0x1.a38bf0b53f437p-1, -0x1.889b16ed752f1p-2, 0x1.152c76b8c5aa6p-3, -0x1.1b4c99876d202p-5, 0x1.907f1e8b42629p-8, -0x1.48b152205d27fp-13, -0x1.a3276d4b1b41fp-11, 0x1.19008ab2bad0ep-11, -0x1.4a0f2fc3a3fe6p-13, 0x1.b16d8531bcd97p-17, 0x1.3c9bc919e0e4ap-19, 0x1.899254d741919p-24, -0x1.e003adff466a7p-24, -0x1.b118f867cd64ep-27, 0x1.a8e81cf9b2bf5p-30, 0x1.472047d4ce812p-36, 0x1.0bc546f1206bp-41, -0x1.5b78778ec812cp-47, -0x1.75c5773026aecp-53, -0x1.4450e0ff79234p-64, 0x1.74639b34e972ap-76, -0x1.74be14820bd54p-99, -0x0p+0}; + return {0x0p+0, 0x1.295efeac152d8p-7, 0x1.9d61cc47e5de2p-2, 0x1.161d416b67638p-2, -0x1.5b7a45663376bp+1, 0x1.d1174d09edd0ep+1, -0x1.64fd520a6621ap+1, 0x1.05168da964846p+1, -0x1.6575089c4586dp+0, 0x1.a38bf0b53f437p-1, -0x1.889b16ed752f1p-2, 0x1.152c76b8c5aa6p-3, -0x1.1b4c99876d202p-5, 0x1.907f1e8b42629p-8, -0x1.48b152205d27fp-13, -0x1.a3276d4b1b41fp-11, 0x1.19008ab2bad0ep-11, -0x1.4a0f2fc3a3fe6p-13, 0x1.b16d8531bcd97p-17, 0x1.3c9bc919e0e4ap-19, 0x1.899254d741919p-24, -0x1.e003adff466a7p-24, -0x1.b118f867cd64ep-27, 0x1.a8e81cf9b2bf5p-30, 0x1.472047d4ce812p-36, 0x1.0bc546f1206bp-41, -0x1.5b78778ec812cp-47, -0x1.75c5773026aecp-53, -0x1.4450e0ff79234p-64, 0x1.74639b34e972ap-76, -0x1.74be14820bd54p-99, 0x0p+0}; } if constexpr (order == 3) { - return {0x0p+0, 0x1.ade0c67a6df63p-5, 0x1.c28b430a75f2ap-1, -0x1.5f4ccfba427cfp+1, 0x1.cdb8f607de72ep+0, 0x1.f77743196657ap+0, -0x1.dd879ba809268p+1, 0x1.37053c10bce29p+1, -0x1.1bfa76c0a943ap-2, -0x1.2b5034c5e7cecp+0, 0x1.63e2260baa9fep+0, -0x1.a29913a0c0f2ep-1, 0x1.852867c8ceb36p-3, 0x1.9a9664fc9e679p-4, -0x1.c29f78e2de8f5p-4, 0x1.54d634445fcf7p-5, -0x1.41b2a5a54a663p-9, -0x1.225d9fec5c6e9p-8, 0x1.f9019974a7ddbp-10, -0x1.2c283714217e7p-12, -0x1.8e8742bbbfb21p-16, 0x1.c9f58c62dd5d4p-17, -0x1.61f6495ed1b8fp-20, -0x1.96b8b0f8a15e3p-25, 0x1.71f48c99d030bp-27, -0x1.b5fc8d66ab6dp-34, -0x1.c5963ee2273d3p-38, 0x1.6b4e6ce52480bp-45, 0x1.e67135f42b49bp-58, -0x1.6aff40a6dd5b4p-67, 0x1.6b5790e714dd8p-89, -0x0p+0}; + return {0x0p+0, 0x1.ade0c67a6df63p-5, 0x1.c28b430a75f2ap-1, -0x1.5f4ccfba427cfp+1, 0x1.cdb8f607de72ep+0, 0x1.f77743196657ap+0, -0x1.dd879ba809268p+1, 0x1.37053c10bce29p+1, -0x1.1bfa76c0a943ap-2, -0x1.2b5034c5e7cecp+0, 0x1.63e2260baa9fep+0, -0x1.a29913a0c0f2ep-1, 0x1.852867c8ceb36p-3, 0x1.9a9664fc9e679p-4, -0x1.c29f78e2de8f5p-4, 0x1.54d634445fcf7p-5, -0x1.41b2a5a54a663p-9, -0x1.225d9fec5c6e9p-8, 0x1.f9019974a7ddbp-10, -0x1.2c283714217e7p-12, -0x1.8e8742bbbfb21p-16, 0x1.c9f58c62dd5d4p-17, -0x1.61f6495ed1b8fp-20, -0x1.96b8b0f8a15e3p-25, 0x1.71f48c99d030bp-27, -0x1.b5fc8d66ab6dp-34, -0x1.c5963ee2273d3p-38, 0x1.6b4e6ce52480bp-45, 0x1.e67135f42b49bp-58, -0x1.6aff40a6dd5b4p-67, 0x1.6b5790e714dd8p-89, 0x0p+0}; } if constexpr (order == 4) { - return {0x0p+0, 0x1.002833198203cp-2, 0x1.74f145f5180b5p-1, -0x1.d40722c67b8b3p+2, 0x1.2af6f0f464bc5p+4, -0x1.a43135145799ap+4, 0x1.9a15ae041271p+4, -0x1.38d1bd49e9af3p+4, 0x1.6c6cdb14d7fe1p+3, -0x1.13619aaa119f9p+2, 0x1.d56ce1ec874a1p-1, -0x1.e42907ae7a264p-1, 0x1.e52911f9f6566p+0, -0x1.ee224ef8eb13dp+0, 0x1.1f26d6223d44dp+0, -0x1.5888435f57836p-2, -0x1.9e45fc4e6f7c9p-7, 0x1.dcd2d2ebfb6e4p-5, -0x1.93116bc1ac6b7p-6, 0x1.0e01783e342a4p-8, 0x1.31f3faa90de9fp-12, -0x1.f6b0df77a544p-13, 0x1.f05077a02c3acp-16, 0x1.2ec5b9d224e6cp-20, -0x1.47f2b0eb68edbp-22, 0x1.bcb021bf883a2p-29, 0x1.1bcefd6cfba52p-32, -0x1.34d97adc52a39p-39, -0x1.6f2c8c9ca395p-53, 0x1.34e43d9253e6fp-60, -0x1.352f98f0f2e49p-81, 0x0p+0}; + return {0x0p+0, 0x1.002833198203cp-2, 0x1.74f145f5180b5p-1, -0x1.d40722c67b8b3p+2, 0x1.2af6f0f464bc5p+4, -0x1.a43135145799ap+4, 0x1.9a15ae041271p+4, -0x1.38d1bd49e9af3p+4, 0x1.6c6cdb14d7fe1p+3, -0x1.13619aaa119f9p+2, 0x1.d56ce1ec874a1p-1, -0x1.e42907ae7a264p-1, 0x1.e52911f9f6566p+0, -0x1.ee224ef8eb13dp+0, 0x1.1f26d6223d44dp+0, -0x1.5888435f57836p-2, -0x1.9e45fc4e6f7c9p-7, 0x1.dcd2d2ebfb6e4p-5, -0x1.93116bc1ac6b7p-6, 0x1.0e01783e342a4p-8, 0x1.31f3faa90de9fp-12, -0x1.f6b0df77a544p-13, 0x1.f05077a02c3acp-16, 0x1.2ec5b9d224e6cp-20, -0x1.47f2b0eb68edbp-22, 0x1.bcb021bf883a2p-29, 0x1.1bcefd6cfba52p-32, -0x1.34d97adc52a39p-39, -0x1.6f2c8c9ca395p-53, 0x1.34e43d9253e6fp-60, -0x1.352f98f0f2e49p-81, -0x0p+0}; } if constexpr (order == 5) { return {0x0p+0, 0x1.e5d8b15d3664dp-1, -0x1.e7e4ae8313c98p+1, 0x1.643947f56174fp+1, 0x1.8bf77730624fbp+3, -0x1.39575fcf961c1p+5, 0x1.f6657cd6c7e2ap+5, -0x1.2981aaa66ca37p+6, 0x1.0cf300079688ep+6, -0x1.71528cd9cab13p+4, -0x1.13658826409b4p+6, 0x1.5ecf135e336b8p+7, -0x1.ca8fbd8754dc2p+7, 0x1.83a96558c6c07p+7, -0x1.9d91182e0786ap+6, 0x1.818f5ca05f024p+4, 0x1.4e782cc994095p+3, -0x1.7fba734a37797p+3, 0x1.361d7d826bb5bp+2, -0x1.85fee8307d591p-1, -0x1.fcc3205624ce5p-4, 0x1.30d54b861144bp-4, -0x1.4236c7ccc62dfp-7, -0x1.6b6d4bcc089efp-12, 0x1.251cb75a77a65p-13, -0x1.7df627db3ed38p-19, -0x1.6d7ba0319a18p-23, 0x1.047350b843565p-29, 0x1.ecabd0f857c51p-41, -0x1.035ef08b1273dp-49, 0x1.039e900e7fa13p-69, 0x0p+0}; @@ -1690,13 +2075,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.5c435b4994699p+1, -0x1.45ad88073e625p+4, 0x1.1ac643e9c99f9p+6, -0x1.3bcd24e1c22f1p+7, 0x1.1132bead650e6p+8, -0x1.a3321607e3596p+8, 0x1.2bec4ce73b525p+9, -0x1.83ddd4224b9acp+9, 0x1.b1ad4241d86bfp+9, -0x1.9d7a3218170b3p+9, 0x1.5526f87e8214fp+9, -0x1.e996857ebd3fep+8, 0x1.186a9a24f3388p+8, -0x1.4f804f76b6d5cp+6, -0x1.84954fc1821p+5, 0x1.59efa11d2ec7p+6, -0x1.dac7ad3b33c96p+5, 0x1.62078796373e7p+4, -0x1.88bb023e9f2fap+1, -0x1.04b9160269b8ap+0, 0x1.18c6982acbd2dp-1, -0x1.508ddc9d3ccb4p-4, -0x1.539386e1415cfp-9, 0x1.9eab992a4b9abp-10, -0x1.980b92ff814ccp-15, -0x1.761c29381edd3p-19, 0x1.64e7e2ec4af2dp-25, 0x1.1823b743e4c41p-35, -0x1.623923d3ddbafp-44, 0x1.6290fa803758ep-63, 0x0p+0}; } if constexpr (order == 7) { - return {0x0p+0, 0x1.891443770e9f6p+2, -0x1.c4b28f7dbecf4p+5, 0x1.d994c46f08418p+7, -0x1.26defe09eb9e3p+9, 0x1.ddf577c4250f8p+9, -0x1.fd2079b0f3ddbp+9, 0x1.36152a2e286dp+9, 0x1.d8616a51db369p+6, -0x1.190b42892374cp+10, 0x1.36219b3961795p+11, -0x1.eed74001662f8p+11, 0x1.31c149450a5eap+12, -0x1.31807a4d8f7d9p+12, 0x1.07e37f0875c29p+12, -0x1.9ca0e06fa4e41p+11, 0x1.192392a49659fp+11, -0x1.28f7ef65a911cp+10, 0x1.8ef1182eeb70cp+8, -0x1.076216da5c43bp+5, -0x1.3734a9c9c5015p+5, 0x1.2e313dce4fbf1p+4, -0x1.913ecda1e3437p+1, -0x1.aba4e0591b35fp-4, 0x1.5578ca229685fp-4, -0x1.f3ff47839e58dp-9, -0x1.bd3a12076a4f5p-13, 0x1.29ffe91412a2ap-18, 0x1.5e7711914b059p-28, -0x1.267e3f1ece052p-36, 0x1.26c8d9be624c4p-54, -0x0p+0}; + return {0x0p+0, 0x1.891443770e9f6p+2, -0x1.c4b28f7dbecf4p+5, 0x1.d994c46f08418p+7, -0x1.26defe09eb9e3p+9, 0x1.ddf577c4250f8p+9, -0x1.fd2079b0f3ddbp+9, 0x1.36152a2e286dp+9, 0x1.d8616a51db369p+6, -0x1.190b42892374cp+10, 0x1.36219b3961795p+11, -0x1.eed74001662f8p+11, 0x1.31c149450a5eap+12, -0x1.31807a4d8f7d9p+12, 0x1.07e37f0875c29p+12, -0x1.9ca0e06fa4e41p+11, 0x1.192392a49659fp+11, -0x1.28f7ef65a911cp+10, 0x1.8ef1182eeb70cp+8, -0x1.076216da5c43bp+5, -0x1.3734a9c9c5015p+5, 0x1.2e313dce4fbf1p+4, -0x1.913ecda1e3437p+1, -0x1.aba4e0591b35fp-4, 0x1.5578ca229685fp-4, -0x1.f3ff47839e58dp-9, -0x1.bd3a12076a4f5p-13, 0x1.29ffe91412a2ap-18, 0x1.5e7711914b059p-28, -0x1.267e3f1ece052p-36, 0x1.26c8d9be624c4p-54, 0x0p+0}; } if constexpr (order == 8) { - return {0x0p+0, 0x1.1c06072fbf26fp+3, -0x1.65d998749f19fp+6, 0x1.9d8978b96f57fp+8, -0x1.24c8d76a7f36dp+10, 0x1.21d479bc00698p+11, -0x1.bbc006c939353p+11, 0x1.2211c4425df9cp+12, -0x1.5c64ff1d8bf67p+12, 0x1.845a35a315834p+12, -0x1.87e6df0fbf8efp+12, 0x1.6504110de640cp+12, -0x1.2b9aa02be2b35p+12, 0x1.cebcfb329a57fp+11, -0x1.3e375c669dacp+11, 0x1.7d70c67fe8974p+10, -0x1.8fd6874952e8bp+9, 0x1.57b6f4096f1cfp+8, -0x1.3e2c004c73161p+6, -0x1.f1e0f66437532p+4, 0x1.39f676c722756p+5, -0x1.07f7de36ead71p+4, 0x1.6eaf02b444bc5p+1, 0x1.f8896c7b27aebp-4, -0x1.b78e4a3636f78p-4, 0x1.faf293c65fc89p-8, 0x1.a6b604defe6a9p-12, -0x1.9886be2865e4cp-17, -0x1.7c0bde2d4dd5p-26, 0x1.90aca39ea2e8bp-34, -0x1.91166efa6d0a9p-51, 0x0p+0}; + return {0x0p+0, 0x1.1c06072fbf26fp+3, -0x1.65d998749f19fp+6, 0x1.9d8978b96f57fp+8, -0x1.24c8d76a7f36dp+10, 0x1.21d479bc00698p+11, -0x1.bbc006c939353p+11, 0x1.2211c4425df9cp+12, -0x1.5c64ff1d8bf67p+12, 0x1.845a35a315834p+12, -0x1.87e6df0fbf8efp+12, 0x1.6504110de640cp+12, -0x1.2b9aa02be2b35p+12, 0x1.cebcfb329a57fp+11, -0x1.3e375c669dacp+11, 0x1.7d70c67fe8974p+10, -0x1.8fd6874952e8bp+9, 0x1.57b6f4096f1cfp+8, -0x1.3e2c004c73161p+6, -0x1.f1e0f66437532p+4, 0x1.39f676c722756p+5, -0x1.07f7de36ead71p+4, 0x1.6eaf02b444bc5p+1, 0x1.f8896c7b27aebp-4, -0x1.b78e4a3636f78p-4, 0x1.faf293c65fc89p-8, 0x1.a6b604defe6a9p-12, -0x1.9886be2865e4cp-17, -0x1.7c0bde2d4dd5p-26, 0x1.90aca39ea2e8bp-34, -0x1.91166efa6d0a9p-51, -0x0p+0}; } if constexpr (order == 9) { - return {0x0p+0, 0x1.58e7df673241ap+3, -0x1.c53a29616fa38p+6, 0x1.0cc18d57a1a2p+9, -0x1.7c92fc1b6ca39p+10, 0x1.6a1945d20b68ep+11, -0x1.fab771c0e1bafp+11, 0x1.254298acbb2d4p+12, -0x1.407f9dc95f9b1p+12, 0x1.53233c63dd8a8p+12, -0x1.3b528b3453998p+12, 0x1.e2ea2797d25e5p+11, -0x1.3d6169dd11c9cp+11, 0x1.75fce5d641404p+10, -0x1.2b5b50127f9f5p+9, -0x1.18e0518b142ecp+7, 0x1.ed1ee257a974bp+8, -0x1.f5a5a8d8a9b3cp+8, 0x1.920c943e9e1a2p+8, -0x1.22c1385412c46p+8, 0x1.4b1ba13f6628bp+7, -0x1.ec876f34dee07p+5, 0x1.641261f15a2bcp+3, 0x1.3bac7fcb6882p-1, -0x1.3ae0db5ff49e1p-1, 0x1.0ba445bef297cp-4, 0x1.c3804abda5b0fp-9, -0x1.3c78fba89f7e5p-13, -0x1.6e90a45b17e12p-22, 0x1.34c398a5dd485p-29, -0x1.351bbccd566d6p-45, 0x0p+0}; + return {0x0p+0, 0x1.58e7df673241ap+3, -0x1.c53a29616fa38p+6, 0x1.0cc18d57a1a2p+9, -0x1.7c92fc1b6ca39p+10, 0x1.6a1945d20b68ep+11, -0x1.fab771c0e1bafp+11, 0x1.254298acbb2d4p+12, -0x1.407f9dc95f9b1p+12, 0x1.53233c63dd8a8p+12, -0x1.3b528b3453998p+12, 0x1.e2ea2797d25e5p+11, -0x1.3d6169dd11c9cp+11, 0x1.75fce5d641404p+10, -0x1.2b5b50127f9f5p+9, -0x1.18e0518b142ecp+7, 0x1.ed1ee257a974bp+8, -0x1.f5a5a8d8a9b3cp+8, 0x1.920c943e9e1a2p+8, -0x1.22c1385412c46p+8, 0x1.4b1ba13f6628bp+7, -0x1.ec876f34dee07p+5, 0x1.641261f15a2bcp+3, 0x1.3bac7fcb6882p-1, -0x1.3ae0db5ff49e1p-1, 0x1.0ba445bef297cp-4, 0x1.c3804abda5b0fp-9, -0x1.3c78fba89f7e5p-13, -0x1.6e90a45b17e12p-22, 0x1.34c398a5dd485p-29, -0x1.351bbccd566d6p-45, -0x0p+0}; } if constexpr (order == 10) { return {0x0p+0, 0x1.0cfd9304e9d0fp+3, -0x1.68c00ea69764dp+6, 0x1.b4a63a85c6a12p+8, -0x1.3c4fcf304828fp+10, 0x1.35efe9ab816f7p+11, -0x1.c3872b5b6dcd2p+11, 0x1.1261ac83f506cp+12, -0x1.39e1fa3f00834p+12, 0x1.5e4c9d364466fp+12, -0x1.6b72e41a84906p+12, 0x1.578fd4c404249p+12, -0x1.30faf3648505dp+12, 0x1.0174ad7c89821p+12, -0x1.942bc49f2f52ap+11, 0x1.25cbc7992fd64p+11, -0x1.914caac567631p+10, 0x1.f93f030387c4dp+9, -0x1.1b4f5dfc787bcp+9, 0x1.1df01b8a36a8bp+8, -0x1.048db6f3ab7c2p+7, 0x1.730bcb9c58bfcp+5, -0x1.09b56b87c1c8p+3, -0x1.4fb833b30fa7fp+0, 0x1.e38e1048601a6p-1, -0x1.ee07e572041f7p-4, -0x1.913ced3c0164bp-8, 0x1.0726b83c4032cp-11, 0x1.2751c6763466cp-20, -0x1.00ceb77e39cacp-26, 0x1.0123085a89101p-41, 0x0p+0}; @@ -1711,7 +2096,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0, 0x1.a308ef1d16805p-1, -0x1.1df37cb20ef6dp+3, 0x1.5a47cc2daffcbp+5, -0x1.e7cc32d4c7f06p+6, 0x1.ba5aa6f58d154p+7, -0x1.137ebe2556bb6p+8, 0x1.07f96c27b79bap+8, -0x1.f176d6c3151d9p+7, 0x1.0c09a0e0bcbap+8, -0x1.12bf0f34a9a55p+8, 0x1.de16d55d65d2cp+7, -0x1.8c7b496d3d3fep+7, 0x1.56592506626bcp+7, -0x1.13d919c9693b3p+7, 0x1.8b69de5718a0ap+6, -0x1.15b78c90e7837p+6, 0x1.8188b8db550ffp+5, -0x1.e03c011f666acp+4, 0x1.12ed8b36e9864p+4, -0x1.36a5b057bc26fp+3, 0x1.3d2641cf67e9p+2, -0x1.11ef148707dfap+1, 0x1.c294da23fe2ap-1, -0x1.4f57e7e05e819p-2, 0x1.1ebd9964081cfp-4, 0x1.367917f76eee3p-14, -0x1.fdd37749c94d9p-10, -0x1.0fc0733cbc7d6p-22, 0x1.f945fb653cfdbp-22, -0x1.fb1bcfae6e46dp-34, 0x0p+0}; } if constexpr (order == 14) { - return {0x0p+0, 0x1.74ef139ad4e12p-3, -0x1.fd9d32fdef74p+0, 0x1.3320f17be8b7p+3, -0x1.a9e31dbd98dd1p+4, 0x1.73dbdd38a87f5p+5, -0x1.aa50f206f25c7p+5, 0x1.5e48ac9c2f1f2p+5, -0x1.20d7a78e95ecfp+5, 0x1.4350b94e5aa2ep+5, -0x1.5499ff05228dep+5, 0x1.0d8c7214ffee1p+5, -0x1.8fe88996cfa9ap+4, 0x1.63da6bffb7323p+4, -0x1.24223f5c1b9d9p+4, 0x1.7851e19176716p+3, -0x1.e4fd178fcd0efp+2, 0x1.610a439acb289p+2, -0x1.ae4c3e147b71cp+1, 0x1.a6fe28ab7ffaap+0, -0x1.ccc920f98175ep-1, 0x1.f9389387bff6bp-2, -0x1.8612de961fd02p-3, 0x1.fd43fc0e7883fp-5, -0x1.aafa1e0c4a87p-6, 0x1.b638737fa8e8fp-8, 0x1.071682a1f5058p-11, -0x1.a84c3f530239bp-12, 0x1.a20c2374a0f67p-18, 0x1.e7f1c0adda0f6p-23, -0x1.eb089a4058efep-34, 0x0p+0}; + return {0x0p+0, 0x1.74ef139ad4e12p-3, -0x1.fd9d32fdef74p+0, 0x1.3320f17be8b7p+3, -0x1.a9e31dbd98dd1p+4, 0x1.73dbdd38a87f5p+5, -0x1.aa50f206f25c7p+5, 0x1.5e48ac9c2f1f2p+5, -0x1.20d7a78e95ecfp+5, 0x1.4350b94e5aa2ep+5, -0x1.5499ff05228dep+5, 0x1.0d8c7214ffee1p+5, -0x1.8fe88996cfa9ap+4, 0x1.63da6bffb7323p+4, -0x1.24223f5c1b9d9p+4, 0x1.7851e19176716p+3, -0x1.e4fd178fcd0efp+2, 0x1.610a439acb289p+2, -0x1.ae4c3e147b71cp+1, 0x1.a6fe28ab7ffaap+0, -0x1.ccc920f98175ep-1, 0x1.f9389387bff6bp-2, -0x1.8612de961fd02p-3, 0x1.fd43fc0e7883fp-5, -0x1.aafa1e0c4a87p-6, 0x1.b638737fa8e8fp-8, 0x1.071682a1f5058p-11, -0x1.a84c3f530239bp-12, 0x1.a20c2374a0f67p-18, 0x1.e7f1c0adda0f6p-23, -0x1.eb089a4058efep-34, -0x0p+0}; } if constexpr (order == 15) { return {0x0p+0, 0x1.31c729360063ep-6, -0x1.a21aa8a66a683p-3, 0x1.f656a46fa2a91p-1, -0x1.589b4fca92a9fp+1, 0x1.25049558932c2p+2, -0x1.3b0f087615a27p+2, 0x1.bed87f332745cp+1, -0x1.37fe75fa2aa3bp+1, 0x1.75c34ae38a12p+1, -0x1.9f32b219f201fp+1, 0x1.2a50b5ebe798ep+1, -0x1.80aff2523d4b3p+0, 0x1.71f9af43c19f1p+0, -0x1.40d21595459ccp+0, 0x1.6edc3b8de7cbdp-1, -0x1.abb5cf29e076bp-2, 0x1.5fdcb9c5e1f88p-2, -0x1.af4e9b9242255p-3, 0x1.57b33e4d63cb5p-4, -0x1.736294d370decp-5, 0x1.e1a61d7964669p-6, -0x1.38138139d6cd8p-7, 0x1.a99b874715d59p-10, -0x1.191ada841d112p-10, 0x1.44a23a1750afbp-12, 0x1.4db128e094988p-13, -0x1.2cad37f3dbf9ep-14, 0x1.f38c667f69482p-19, 0x1.c870773604d03p-24, -0x1.cdd01a024c711p-34, -0x0p+0}; @@ -1722,16 +2107,16 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xb.3a3846107e93c71p-16L, 0x9.3e6d9853c4d4d26p-8L, 0xf.9fcd2109d2c70bp-5L, 0xc.50d8731f3b477fep-4L, -0xe.800409a73d92674p-5L, 0x8.364c0bfb08f4c1cp-5L, -0xa.7608480379d5af6p-6L, 0xd.c9e1911927a4784p-7L, -0x8.4fafa041f14b7dbp-7L, 0x8.5b53aefd12e6ae9p-8L, -0xd.0bf5c01ffba2e16p-10L, 0xe.6d0c69fb315533p-12L, -0x8.c0ab49d8f284eep-14L, -0xa.a3e26aabf73f753p-18L, 0xd.0ea8c3bcb0cd49bp-18L, -0xf.dc862acd1a0536cp-20L, 0x8.42dddac61ee2f0bp-22L, 0xa.50b750c53c5492bp-25L, -0x9.d87c1e77be4e6b7p-26L, 0xa.134a86cdb5e53d1p-31L, 0xd.67ae641bc3e3b4bp-32L, 0xe.3efe0e5e6ab002dp-40L, -0xc.cd24c38a13a8934p-40L, 0x8.62a7b6ddea955d3p-45L, 0xb.05b10aa4250e4b5p-52L, -0xb.1b0384fcfca5df4p-57L, 0xf.98453c9a684c9f5p-65L, -0xe.e6c1e66bda07395p-77L, -0xf.a640e8482ad4089p-90L, 0xf.aa0d3dd7d200c8bp-115L, -0x0p+0L}; } if constexpr (order == 1) { - return {0x0p+0L, 0xa.f15f1ffe0172e5bp-13L, 0x8.8aacb719a8764e8p-6L, 0xc.70337610fe3509fp-4L, -0xc.d1d74d153495bebp-4L, -0xd.a74119cbe7c3dc1p-5L, 0x9.26bcdd7c845def1p-4L, -0xc.b7f844c8550ff96p-5L, 0xb.e7f83cc2cea254cp-6L, -0x9.d97b7de092f7fa8p-8L, -0xc.621cb12d798fd78p-9L, 0xe.c17b081c7070057p-9L, -0xe.984243655303eaap-10L, 0xd.c65378f292ec7e1p-12L, 0xa.751369469843a67p-16L, -0xa.22a84a59f7d64eap-15L, 0x8.8b7da84ad94ceep-18L, 0xf.37a3482ba1e794ep-19L, -0xb.99225ab2889ca73p-20L, 0x8.82f186bf65a2e47p-23L, 0xc.2f72cc72e3b957cp-26L, -0xa.d64f8e3b5739183p-28L, 0xe.bc4f9eb81d6e738p-33L, 0xc.6af1f10013f432fp-38L, -0xe.459c19e1dbb49cp-40L, 0x9.c7f205ccc827418p-46L, 0xf.a9268cec210502dp-52L, -0xd.39dbeaf2abf3a86p-60L, -0xe.29902305dd00cf8p-71L, 0xd.29aa6f4daf25f05p-84L, -0xd.2cdc8c67843fbf1p-108L, 0x0p+0L}; + return {0x0p+0L, 0xa.f15f1ffe0172e5bp-13L, 0x8.8aacb719a8764e8p-6L, 0xc.70337610fe3509fp-4L, -0xc.d1d74d153495bebp-4L, -0xd.a74119cbe7c3dc1p-5L, 0x9.26bcdd7c845def1p-4L, -0xc.b7f844c8550ff96p-5L, 0xb.e7f83cc2cea254cp-6L, -0x9.d97b7de092f7fa8p-8L, -0xc.621cb12d798fd78p-9L, 0xe.c17b081c7070057p-9L, -0xe.984243655303eaap-10L, 0xd.c65378f292ec7e1p-12L, 0xa.751369469843a67p-16L, -0xa.22a84a59f7d64eap-15L, 0x8.8b7da84ad94ceep-18L, 0xf.37a3482ba1e794ep-19L, -0xb.99225ab2889ca73p-20L, 0x8.82f186bf65a2e47p-23L, 0xc.2f72cc72e3b957cp-26L, -0xa.d64f8e3b5739183p-28L, 0xe.bc4f9eb81d6e738p-33L, 0xc.6af1f10013f432fp-38L, -0xe.459c19e1dbb49cp-40L, 0x9.c7f205ccc827418p-46L, 0xf.a9268cec210502dp-52L, -0xd.39dbeaf2abf3a86p-60L, -0xe.29902305dd00cf8p-71L, 0xd.29aa6f4daf25f05p-84L, -0xd.2cdc8c67843fbf1p-108L, -0x0p+0L}; } if constexpr (order == 2) { - return {0x0p+0L, 0x9.4af7f560a96bcb2p-10L, 0xc.eb0e623f2ef1314p-5L, 0x8.b0ea0b5b3b1bf47p-5L, -0xa.dbd22b319bb54d5p-2L, 0xe.88ba684f6e872d5p-2L, -0xb.27ea9053310cf1ap-2L, 0x8.28b46d4b2423017p-2L, -0xb.2ba844e22c3642p-3L, 0xd.1c5f85a9fa1b98bp-4L, -0xc.44d8b76ba978ba9p-5L, 0x8.a963b5c62d530fcp-6L, -0x8.da64cc3b6900f46p-8L, 0xc.83f8f45a13145ecp-11L, -0xa.458a9102e93f63ap-16L, -0xd.193b6a58da0f707p-14L, 0x8.c8045595d6873c2p-14L, -0xa.50797e1d1ff33a2p-16L, 0xd.8b6c298de6cba8p-20L, 0x9.e4de48cf0724d64p-22L, 0xc.4c92a6ba0c8c4adp-27L, -0xf.001d6ffa3353439p-27L, -0xd.88c7c33e6b26e41p-30L, 0xd.4740e7cd95fa76bp-33L, 0xa.39023ea674090bcp-39L, 0x8.5e2a378903582b6p-44L, -0xa.dbc3bc7640960d4p-50L, -0xb.ae2bb9813575fa4p-56L, -0xa.228707fbc919e5bp-67L, 0xb.a31cd9a74b94ec4p-79L, -0xb.a5f0a4105eaa2e2p-102L, -0x0p+0L}; + return {0x0p+0L, 0x9.4af7f560a96bcb2p-10L, 0xc.eb0e623f2ef1314p-5L, 0x8.b0ea0b5b3b1bf47p-5L, -0xa.dbd22b319bb54d5p-2L, 0xe.88ba684f6e872d5p-2L, -0xb.27ea9053310cf1ap-2L, 0x8.28b46d4b2423017p-2L, -0xb.2ba844e22c3642p-3L, 0xd.1c5f85a9fa1b98bp-4L, -0xc.44d8b76ba978ba9p-5L, 0x8.a963b5c62d530fcp-6L, -0x8.da64cc3b6900f46p-8L, 0xc.83f8f45a13145ecp-11L, -0xa.458a9102e93f63ap-16L, -0xd.193b6a58da0f707p-14L, 0x8.c8045595d6873c2p-14L, -0xa.50797e1d1ff33a2p-16L, 0xd.8b6c298de6cba8p-20L, 0x9.e4de48cf0724d64p-22L, 0xc.4c92a6ba0c8c4adp-27L, -0xf.001d6ffa3353439p-27L, -0xd.88c7c33e6b26e41p-30L, 0xd.4740e7cd95fa76bp-33L, 0xa.39023ea674090bcp-39L, 0x8.5e2a378903582b6p-44L, -0xa.dbc3bc7640960d4p-50L, -0xb.ae2bb9813575fa4p-56L, -0xa.228707fbc919e5bp-67L, 0xb.a31cd9a74b94ec4p-79L, -0xb.a5f0a4105eaa2e2p-102L, 0x0p+0L}; } if constexpr (order == 3) { - return {0x0p+0L, 0xd.6f0633d36fb15fep-8L, 0xe.145a1853af94c61p-4L, -0xa.fa667dd213e750bp-2L, 0xe.6dc7b03ef3972cbp-3L, 0xf.bbba18cb32bd3c5p-3L, -0xe.ec3cdd404933d4fp-2L, 0x9.b829e085e714688p-2L, -0x8.dfd3b6054a1d126p-5L, -0x9.5a81a62f3e7613dp-3L, 0xb.1f11305d54fef5bp-3L, -0xd.14c89d060796ef7p-4L, 0xc.29433e46759ad44p-6L, 0xc.d4b327e4f33c651p-7L, -0xe.14fbc716f47a93ep-7L, 0xa.a6b1a222fe7b777p-8L, -0xa.0d952d2a5331434p-12L, -0x9.12ecff62e374622p-11L, 0xf.c80ccba53eedb19p-13L, -0x9.6141b8a10bf3aa6p-15L, -0xc.743a15ddfd9089p-19L, 0xe.4fac6316eae9c34p-20L, -0xb.0fb24af68dc7671p-23L, -0xc.b5c587c50af1901p-28L, 0xb.8fa464ce81856ffp-30L, -0xd.afe46b355b67eadp-37L, -0xe.2cb1f71139e968ap-41L, 0xb.5a73672924054c6p-48L, 0xf.3389afa15a4d6d7p-61L, -0xb.57fa0536eada04ep-70L, 0xb.5abc8738a6ec098p-92L, -0x0p+0L}; + return {0x0p+0L, 0xd.6f0633d36fb15fep-8L, 0xe.145a1853af94c61p-4L, -0xa.fa667dd213e750bp-2L, 0xe.6dc7b03ef3972cbp-3L, 0xf.bbba18cb32bd3c5p-3L, -0xe.ec3cdd404933d4fp-2L, 0x9.b829e085e714688p-2L, -0x8.dfd3b6054a1d126p-5L, -0x9.5a81a62f3e7613dp-3L, 0xb.1f11305d54fef5bp-3L, -0xd.14c89d060796ef7p-4L, 0xc.29433e46759ad44p-6L, 0xc.d4b327e4f33c651p-7L, -0xe.14fbc716f47a93ep-7L, 0xa.a6b1a222fe7b777p-8L, -0xa.0d952d2a5331434p-12L, -0x9.12ecff62e374622p-11L, 0xf.c80ccba53eedb19p-13L, -0x9.6141b8a10bf3aa6p-15L, -0xc.743a15ddfd9089p-19L, 0xe.4fac6316eae9c34p-20L, -0xb.0fb24af68dc7671p-23L, -0xc.b5c587c50af1901p-28L, 0xb.8fa464ce81856ffp-30L, -0xd.afe46b355b67eadp-37L, -0xe.2cb1f71139e968ap-41L, 0xb.5a73672924054c6p-48L, 0xf.3389afa15a4d6d7p-61L, -0xb.57fa0536eada04ep-70L, 0xb.5abc8738a6ec098p-92L, 0x0p+0L}; } if constexpr (order == 4) { - return {0x0p+0L, 0x8.014198cc101dfabp-5L, 0xb.a78a2fa8c05a46p-4L, -0xe.a0391633dc59632p-1L, 0x9.57b787a325e2b8ep+1L, -0xd.2189a8a2bccd13fp+1L, 0xc.d0ad7020938821dp+1L, -0x9.c68dea4f4d7949p+1L, 0xb.6366d8a6bff083fp+0L, -0x8.9b0cd5508cfcbdap-1L, 0xe.ab670f643a5062fp-4L, -0xf.21483d73d132347p-4L, 0xf.29488fcfb2b3205p-3L, -0xf.711277c7589ea5dp-3L, 0x8.f936b111ea265a4p-3L, -0xa.c4421afabc1b145p-5L, -0xc.f22fe2737be4b07p-10L, 0xe.e696975fdb72006p-8L, -0xc.988b5e0d635b9p-9L, 0x8.700bc1f1a15234ap-11L, 0x9.8f9fd5486f4f6f1p-15L, -0xf.b586fbbd2a200d7p-16L, 0xf.8283bd0161d5d44p-19L, 0x9.762dce912735e76p-23L, -0xa.3f95875b476d467p-25L, 0xd.e5810dfc41d0fc9p-32L, 0x8.de77eb67dd2905dp-35L, -0x9.a6cbd6e2951c534p-42L, -0xb.796464e51ca7defp-56L, 0x9.a721ec929f3744cp-63L, -0x9.a97cc78797246d9p-84L, 0x0p+0L}; + return {0x0p+0L, 0x8.014198cc101dfabp-5L, 0xb.a78a2fa8c05a46p-4L, -0xe.a0391633dc59632p-1L, 0x9.57b787a325e2b8ep+1L, -0xd.2189a8a2bccd13fp+1L, 0xc.d0ad7020938821dp+1L, -0x9.c68dea4f4d7949p+1L, 0xb.6366d8a6bff083fp+0L, -0x8.9b0cd5508cfcbdap-1L, 0xe.ab670f643a5062fp-4L, -0xf.21483d73d132347p-4L, 0xf.29488fcfb2b3205p-3L, -0xf.711277c7589ea5dp-3L, 0x8.f936b111ea265a4p-3L, -0xa.c4421afabc1b145p-5L, -0xc.f22fe2737be4b07p-10L, 0xe.e696975fdb72006p-8L, -0xc.988b5e0d635b9p-9L, 0x8.700bc1f1a15234ap-11L, 0x9.8f9fd5486f4f6f1p-15L, -0xf.b586fbbd2a200d7p-16L, 0xf.8283bd0161d5d44p-19L, 0x9.762dce912735e76p-23L, -0xa.3f95875b476d467p-25L, 0xd.e5810dfc41d0fc9p-32L, 0x8.de77eb67dd2905dp-35L, -0x9.a6cbd6e2951c534p-42L, -0xb.796464e51ca7defp-56L, 0x9.a721ec929f3744cp-63L, -0x9.a97cc78797246d9p-84L, -0x0p+0L}; } if constexpr (order == 5) { return {0x0p+0L, 0xf.2ec58ae9b326a91p-4L, -0xf.3f2574189e4c21p-2L, 0xb.21ca3fab0ba7711p-2L, 0xc.5fbbb983127d9a8p+0L, -0x9.cabafe7cb0e079fp+2L, 0xf.b32be6b63f14cdcp+2L, -0x9.4c0d5533651b59dp+3L, 0x8.6798003cb446c2fp+3L, -0xb.8a9466ce5589bd2p+1L, -0x8.9b2c413204da0b9p+3L, 0xa.f6789af19b5be1p+4L, -0xe.547dec3aa6e0c9p+4L, 0xc.1d4b2ac6360394ap+4L, -0xc.ec88c1703c353c7p+3L, 0xc.0c7ae502f811c1cp+1L, 0xa.73c1664ca04a6f6p+0L, -0xb.fdd39a51bbcb87p+0L, 0x9.b0ebec135dad9dap-1L, -0xc.2ff74183eac8757p-4L, -0xf.e61902b12672b5fp-7L, 0x9.86aa5c308a25804p-7L, -0xa.11b63e66316fb48p-10L, -0xb.5b6a5e6044f76b4p-15L, 0x9.28e5bad3bd32814p-16L, -0xb.efb13ed9f69bfabp-22L, -0xb.6bdd018cd0bfce3p-26L, 0x8.239a85c21ab28b1p-32L, 0xf.655e87c2be28938p-44L, -0x8.1af78458939ea43p-52L, 0x8.1cf48073fd095efp-72L, 0x0p+0L}; @@ -1740,13 +2125,13 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xa.e21ada4ca34ca18p-2L, -0xa.2d6c4039f3128bdp+1L, 0x8.d6321f4e4cfc7p+3L, -0x9.de69270e1178454p+4L, 0x8.8995f56b287327p+5L, -0xd.1990b03f1acb0aep+5L, 0x9.5f626739da926f4p+6L, -0xc.1eeea1125cd5fdbp+6L, 0xd.8d6a120ec35f6eap+6L, -0xc.ebd190c0b85945bp+6L, 0xa.a937c3f410a79b7p+6L, -0xf.4cb42bf5e9fec33p+5L, 0x8.c354d12799c3f3ap+5L, -0xa.7c027bb5b6adc35p+3L, -0xc.24aa7e0c10803ep+2L, 0xa.cf7d08e97637cb2p+3L, -0xe.d63d69d99e4aebp+2L, 0xb.103c3cb1b9f39dbp+1L, -0xc.45d811f4f97cc5dp-2L, -0x8.25c8b0134dc4eacp-3L, 0x8.c634c1565e9668ap-4L, -0xa.846ee4e9e65a1e2p-7L, -0xa.9c9c370a0ae7abcp-12L, 0xc.f55cc9525cd59bdp-13L, -0xc.c05c97fc0a662abp-18L, -0xb.b0e149c0f6e94f3p-22L, 0xb.273f17625796a99p-28L, 0x8.c11dba1f262097fp-38L, -0xb.11c91e9eedd7769p-47L, 0xb.1487d401bac7208p-66L, 0x0p+0L}; } if constexpr (order == 7) { - return {0x0p+0L, 0xc.48a21bb874fadacp-1L, -0xe.25947bedf679c74p+2L, 0xe.cca62378420be4ep+4L, -0x9.36f7f04f5cf1891p+6L, 0xe.efabbe21287bc6p+6L, -0xf.e903cd879eed94cp+6L, 0x9.b0a951714367f56p+6L, 0xe.c30b528ed9b461fp+3L, -0x8.c85a14491ba6385p+7L, 0x9.b10cd9cb0bcab3ep+8L, -0xf.76ba000b317bf3bp+8L, 0x9.8e0a4a2852f4c19p+9L, -0x9.8c03d26c7bec5cfp+9L, 0x8.3f1bf843ae145d5p+9L, -0xc.e507037d2720736p+8L, 0x8.c91c9524b2cfadfp+8L, -0x9.47bf7b2d488e112p+7L, 0xc.7788c1775b861dcp+5L, -0x8.3b10b6d2e21d939p+2L, -0x9.b9a54e4e280a5b6p+2L, 0x9.7189ee727df88e1p+1L, -0xc.89f66d0f1a1b57cp-2L, -0xd.5d2702c8d9af7bcp-7L, 0xa.abc65114b42fbafp-7L, -0xf.9ffa3c1cf2c6819p-12L, -0xd.e9d0903b527a85p-16L, 0x9.4fff48a09514e9bp-21L, 0xa.f3b88c8a582c5bap-31L, -0x9.33f1f8f67028c1p-39L, 0x9.3646cdf31261e85p-57L, -0x0p+0L}; + return {0x0p+0L, 0xc.48a21bb874fadacp-1L, -0xe.25947bedf679c74p+2L, 0xe.cca62378420be4ep+4L, -0x9.36f7f04f5cf1891p+6L, 0xe.efabbe21287bc6p+6L, -0xf.e903cd879eed94cp+6L, 0x9.b0a951714367f56p+6L, 0xe.c30b528ed9b461fp+3L, -0x8.c85a14491ba6385p+7L, 0x9.b10cd9cb0bcab3ep+8L, -0xf.76ba000b317bf3bp+8L, 0x9.8e0a4a2852f4c19p+9L, -0x9.8c03d26c7bec5cfp+9L, 0x8.3f1bf843ae145d5p+9L, -0xc.e507037d2720736p+8L, 0x8.c91c9524b2cfadfp+8L, -0x9.47bf7b2d488e112p+7L, 0xc.7788c1775b861dcp+5L, -0x8.3b10b6d2e21d939p+2L, -0x9.b9a54e4e280a5b6p+2L, 0x9.7189ee727df88e1p+1L, -0xc.89f66d0f1a1b57cp-2L, -0xd.5d2702c8d9af7bcp-7L, 0xa.abc65114b42fbafp-7L, -0xf.9ffa3c1cf2c6819p-12L, -0xd.e9d0903b527a85p-16L, 0x9.4fff48a09514e9bp-21L, 0xa.f3b88c8a582c5bap-31L, -0x9.33f1f8f67028c1p-39L, 0x9.3646cdf31261e85p-57L, 0x0p+0L}; } if constexpr (order == 8) { - return {0x0p+0L, 0x8.e030397df9379acp+0L, -0xb.2eccc3a4f8cf9fbp+3L, 0xc.ec4bc5cb7abf8aap+5L, -0x9.2646bb53f9b6b84p+7L, 0x9.0ea3cde0034bd8ap+8L, -0xd.de003649c9a9964p+8L, 0x9.108e2212efce172p+9L, -0xa.e327f8ec5fb3bd6p+9L, 0xc.22d1ad18ac1a3e5p+9L, -0xc.3f36f87dfc77a18p+9L, 0xb.2820886f3206234p+9L, -0x9.5cd5015f159aa05p+9L, 0xe.75e7d994d2bf56ep+8L, -0x9.f1bae334ed5fea7p+8L, 0xb.eb8633ff44b9f04p+7L, -0xc.7eb43a4a9745482p+6L, 0xa.bdb7a04b78e780bp+5L, -0x9.f160026398b080cp+3L, -0xf.8f07b321ba98ffdp+1L, 0x9.cfb3b63913ab26dp+2L, -0x8.3fbef1b756b8bfp+1L, 0xb.757815a225e2672p-2L, 0xf.c44b63d93d7545p-7L, -0xd.bc7251b1b7bbe9bp-7L, 0xf.d7949e32fe445dap-11L, 0xd.35b026f7f354a7ap-15L, -0xc.c435f1432f26328p-20L, -0xb.e05ef16a6ea832dp-29L, 0xc.85651cf5174561cp-37L, -0xc.88b377d3685495ep-54L, 0x0p+0L}; + return {0x0p+0L, 0x8.e030397df9379acp+0L, -0xb.2eccc3a4f8cf9fbp+3L, 0xc.ec4bc5cb7abf8aap+5L, -0x9.2646bb53f9b6b84p+7L, 0x9.0ea3cde0034bd8ap+8L, -0xd.de003649c9a9964p+8L, 0x9.108e2212efce172p+9L, -0xa.e327f8ec5fb3bd6p+9L, 0xc.22d1ad18ac1a3e5p+9L, -0xc.3f36f87dfc77a18p+9L, 0xb.2820886f3206234p+9L, -0x9.5cd5015f159aa05p+9L, 0xe.75e7d994d2bf56ep+8L, -0x9.f1bae334ed5fea7p+8L, 0xb.eb8633ff44b9f04p+7L, -0xc.7eb43a4a9745482p+6L, 0xa.bdb7a04b78e780bp+5L, -0x9.f160026398b080cp+3L, -0xf.8f07b321ba98ffdp+1L, 0x9.cfb3b63913ab26dp+2L, -0x8.3fbef1b756b8bfp+1L, 0xb.757815a225e2672p-2L, 0xf.c44b63d93d7545p-7L, -0xd.bc7251b1b7bbe9bp-7L, 0xf.d7949e32fe445dap-11L, 0xd.35b026f7f354a7ap-15L, -0xc.c435f1432f26328p-20L, -0xb.e05ef16a6ea832dp-29L, 0xc.85651cf5174561cp-37L, -0xc.88b377d3685495ep-54L, -0x0p+0L}; } if constexpr (order == 9) { - return {0x0p+0L, 0xa.c73efb39920cedbp+0L, -0xe.29d14b0b7d1c041p+3L, 0x8.660c6abd0d0fda4p+6L, -0xb.e497e0db651c4abp+7L, 0xb.50ca2e905b46c5dp+8L, -0xf.d5bb8e070dd7927p+8L, 0x9.2a14c565d96a24dp+9L, -0xa.03fcee4afcd8902p+9L, 0xa.9919e31eec53f8cp+9L, -0x9.da9459a29ccbc9bp+9L, 0xf.17513cbe92f2a28p+8L, -0x9.eb0b4ee88e4de52p+8L, 0xb.afe72eb20a022bp+7L, -0x9.5ada8093fcfab6ap+6L, -0x8.c7028c58a1762e5p+4L, 0xf.68f712bd4ba559bp+5L, -0xf.ad2d46c54d9e03ap+5L, 0xc.9064a1f4f0d1331p+5L, -0x9.1609c2a09622ff8p+5L, 0xa.58dd09fb31458efp+4L, -0xf.643b79a6f703a82p+2L, 0xb.20930f8ad15e1ebp+0L, 0x9.dd63fe5b440fe97p-4L, -0x9.d706daffa4f07edp-4L, 0x8.5d222df794bdd1ep-7L, 0xe.1c0255ed2d877d5p-12L, -0x9.e3c7dd44fbf26e9p-16L, -0xb.748522d8bf08c1ap-25L, 0x9.a61cc52eea42bddp-32L, -0x9.a8dde66ab36adabp-48L, 0x0p+0L}; + return {0x0p+0L, 0xa.c73efb39920cedbp+0L, -0xe.29d14b0b7d1c041p+3L, 0x8.660c6abd0d0fda4p+6L, -0xb.e497e0db651c4abp+7L, 0xb.50ca2e905b46c5dp+8L, -0xf.d5bb8e070dd7927p+8L, 0x9.2a14c565d96a24dp+9L, -0xa.03fcee4afcd8902p+9L, 0xa.9919e31eec53f8cp+9L, -0x9.da9459a29ccbc9bp+9L, 0xf.17513cbe92f2a28p+8L, -0x9.eb0b4ee88e4de52p+8L, 0xb.afe72eb20a022bp+7L, -0x9.5ada8093fcfab6ap+6L, -0x8.c7028c58a1762e5p+4L, 0xf.68f712bd4ba559bp+5L, -0xf.ad2d46c54d9e03ap+5L, 0xc.9064a1f4f0d1331p+5L, -0x9.1609c2a09622ff8p+5L, 0xa.58dd09fb31458efp+4L, -0xf.643b79a6f703a82p+2L, 0xb.20930f8ad15e1ebp+0L, 0x9.dd63fe5b440fe97p-4L, -0x9.d706daffa4f07edp-4L, 0x8.5d222df794bdd1ep-7L, 0xe.1c0255ed2d877d5p-12L, -0x9.e3c7dd44fbf26e9p-16L, -0xb.748522d8bf08c1ap-25L, 0x9.a61cc52eea42bddp-32L, -0x9.a8dde66ab36adabp-48L, -0x0p+0L}; } if constexpr (order == 10) { return {0x0p+0L, 0x8.67ec98274e874f4p+0L, -0xb.46007534bb26601p+3L, 0xd.a531d42e35090ebp+5L, -0x9.e27e798241476f8p+7L, 0x9.af7f4d5c0b7b569p+8L, -0xe.1c395adb6e69289p+8L, 0x8.930d641fa835ff8p+9L, -0x9.cf0fd1f80419d17p+9L, 0xa.f264e9b223377bap+9L, -0xb.5b9720d42482e67p+9L, 0xa.bc7ea62021246d6p+9L, -0x9.87d79b24282e6fbp+9L, 0x8.0ba56be44c10be5p+9L, -0xc.a15e24f97a95118p+8L, 0x9.2e5e3cc97eb1e7ap+8L, -0xc.8a65562b3b184f6p+7L, 0xf.c9f8181c3e2680dp+6L, -0x8.da7aefe3c3dde19p+6L, 0x8.ef80dc51b545874p+5L, -0x8.246db79d5be0e64p+4L, 0xb.985e5ce2c5fe107p+2L, -0x8.4dab5c3e0e3fdbep+0L, -0xa.7dc19d987d3f778p-3L, 0xf.1c70824300d3066p-4L, -0xf.703f2b9020fb9c6p-7L, -0xc.89e769e00b25ab7p-11L, 0x8.3935c1e20195fc1p-14L, 0x9.3a8e33b1a335de3p-23L, -0x8.0675bbf1ce55e11p-29L, 0x8.091842d44880a98p-44L, 0x0p+0L}; @@ -1761,7 +2146,7 @@ constexpr std::array daubechies_scaling_integer_grid() return {0x0p+0L, 0xd.184778e8b402badp-4L, -0x8.ef9be59077b66a9p+0L, 0xa.d23e616d7fe5968p+2L, -0xf.3e6196a63f82e61p+3L, 0xd.d2d537ac68aa3c8p+4L, -0x8.9bf5f12ab5dae19p+5L, 0x8.3fcb613dbcdd0e4p+5L, -0xf.8bb6b618a8ec653p+4L, 0x8.604d0705e5cffc7p+5L, -0x8.95f879a54d2a806p+5L, 0xe.f0b6aaeb2e95db1p+4L, -0xc.63da4b69e9fec14p+4L, 0xa.b2c92833135e147p+4L, -0x8.9ec8ce4b49d9743p+4L, 0xc.5b4ef2b8c504f17p+3L, -0x8.adbc64873c1b94ap+3L, 0xc.0c45c6daa87f51cp+2L, -0xf.01e008fb335633p+1L, 0x8.976c59b74c322cp+1L, -0x9.b52d82bde13767bp+0L, 0x9.e9320e7b3f47defp-1L, -0x8.8f78a4383efd09p-2L, 0xe.14a6d11ff14fe9cp-4L, -0xa.7abf3f02f40c74p-5L, 0x8.f5eccb2040e7b75p-7L, 0x9.b3c8bfbb7771784p-17L, -0xf.ee9bba4e4a6c8ddp-13L, -0x8.7e0399e5e3eb2bep-25L, 0xf.ca2fdb29e7ed48cp-25L, -0xf.d8de7d73723689ep-37L, 0x0p+0L}; } if constexpr (order == 14) { - return {0x0p+0L, 0xb.a7789cd6a708f8p-6L, -0xf.ece997ef7b9fe29p-3L, 0x9.99078bdf45b839ap+0L, -0xd.4f18edecc6e84b2p+1L, 0xb.9edee9c543fa832p+2L, -0xd.5287903792e3955p+2L, 0xa.f24564e178f8f8p+2L, -0x9.06bd3c74af67abfp+2L, 0xa.1a85ca72d516d28p+2L, -0xa.a4cff829146ee94p+2L, 0x8.6c6390a7ff70509p+2L, -0xc.7f444cb67d4d2a9p+1L, 0xb.1ed35ffdb991773p+1L, -0x9.2111fae0dceca83p+1L, 0xb.c28f0c8bb38af61p+0L, -0xf.27e8bc7e687797cp-1L, 0xb.08521cd65944bcep-1L, -0xd.7261f0a3db8e14ap-2L, 0xd.37f1455bffd4c88p-3L, -0xe.664907cc0baeeacp-4L, 0xf.c9c49c3dffb59aap-5L, -0xc.3096f4b0fe81145p-6L, 0xf.ea1fe073c41f722p-8L, -0xd.57d0f0625437c47p-9L, 0xd.b1c39bfd474775fp-11L, 0x8.38b4150fa82bf11p-14L, -0xd.4261fa9811cdb2p-15L, 0xd.10611ba507b38p-21L, 0xf.3f8e056ed07b157p-26L, -0xf.5844d202c77f32cp-37L, 0x0p+0L}; + return {0x0p+0L, 0xb.a7789cd6a708f8p-6L, -0xf.ece997ef7b9fe29p-3L, 0x9.99078bdf45b839ap+0L, -0xd.4f18edecc6e84b2p+1L, 0xb.9edee9c543fa832p+2L, -0xd.5287903792e3955p+2L, 0xa.f24564e178f8f8p+2L, -0x9.06bd3c74af67abfp+2L, 0xa.1a85ca72d516d28p+2L, -0xa.a4cff829146ee94p+2L, 0x8.6c6390a7ff70509p+2L, -0xc.7f444cb67d4d2a9p+1L, 0xb.1ed35ffdb991773p+1L, -0x9.2111fae0dceca83p+1L, 0xb.c28f0c8bb38af61p+0L, -0xf.27e8bc7e687797cp-1L, 0xb.08521cd65944bcep-1L, -0xd.7261f0a3db8e14ap-2L, 0xd.37f1455bffd4c88p-3L, -0xe.664907cc0baeeacp-4L, 0xf.c9c49c3dffb59aap-5L, -0xc.3096f4b0fe81145p-6L, 0xf.ea1fe073c41f722p-8L, -0xd.57d0f0625437c47p-9L, 0xd.b1c39bfd474775fp-11L, 0x8.38b4150fa82bf11p-14L, -0xd.4261fa9811cdb2p-15L, 0xd.10611ba507b38p-21L, 0xf.3f8e056ed07b157p-26L, -0xf.5844d202c77f32cp-37L, -0x0p+0L}; } if constexpr (order == 15) { return {0x0p+0L, 0x9.8e3949b0031f00ap-9L, -0xd.10d5453353419edp-6L, 0xf.b2b5237d1548b4fp-4L, -0xa.c4da7e54954f883p-2L, 0x9.2824aac49960d3ep-1L, -0x9.d87843b0ad13405p-1L, 0xd.f6c3f9993a2dfbdp-2L, -0x9.bff3afd1551db4ap-2L, 0xb.ae1a571c508fe19p-2L, -0xc.f99590cf900f84fp-2L, 0x9.5285af5f3cc721cp-2L, -0xc.057f9291ea599a1p-3L, 0xb.8fcd7a1e0cf84a9p-3L, -0xa.0690acaa2ce5ec5p-3L, 0xb.76e1dc6f3e5e678p-4L, -0xd.5dae794f03b58fap-5L, 0xa.fee5ce2f0fc3e14p-5L, -0xd.7a74dc92112ab1p-6L, 0xa.bd99f26b1e5a94cp-7L, -0xb.9b14a69b86f63cfp-8L, 0xf.0d30ebcb2334763p-9L, -0x9.c09c09ceb66c13bp-10L, 0xd.4cdc3a38aeac8ap-13L, -0x8.c8d6d420e888ec5p-13L, 0xa.2511d0ba857d42dp-15L, 0xa.6d894704a4c3cb1p-16L, -0x9.6569bf9edfcf3d1p-17L, 0xf.9c6333fb4a41095p-22L, 0xe.4383b9b026817b9p-27L, -0xe.6e80d0126388779p-37L, -0x0p+0L}; @@ -1770,55 +2155,105 @@ constexpr std::array daubechies_scaling_integer_grid() #ifdef BOOST_HAS_FLOAT128 if constexpr (std::is_same_v) { if constexpr (order == 0) { - return {0x0p+0Q, 0x1.674708c20fd278e13cb308fc018cp-13Q, 0x1.27cdb30a789a9a4cba57381b8109p-5Q, 0x1.f3f9a4213a58e15fea805c6fce04p-2Q, 0x1.8a1b0e63e768effc8742d136ac68p-1Q, -0x1.d0008134e7b24ce7a0bdb2d5e174p-2Q, 0x1.06c9817f611e98379b152a389faep-2Q, -0x1.4ec109006f3ab5eb9ef4b4145d22p-3Q, 0x1.b93c322324f48f0734b615fc988cp-4Q, -0x1.09f5f4083e296fb6c1df50020f4ap-4Q, 0x1.0b6a75dfa25cd5d117e101973337p-5Q, -0x1.a17eb803ff745c2b927f4b56bb4ap-7Q, 0x1.cda18d3f662aa65f684ad290726ep-9Q, -0x1.1815693b1e509dbfebb4547eb7b2p-11Q, -0x1.547c4d557ee7eea60970ca463ebcp-15Q, 0x1.a1d518779619a935a6506c218d65p-15Q, -0x1.fb90c559a340a6d74429771a6508p-17Q, 0x1.085bbb58c3dc5e159337591d11dp-19Q, 0x1.4a16ea18a78a9255137a36b6eea7p-22Q, -0x1.3b0f83cef7c9cd6e4992ef7a8df5p-23Q, 0x1.426950d9b6bca7a253eba2c282edp-28Q, 0x1.acf5cc83787c76964322f9b1342cp-29Q, 0x1.c7dfc1cbcd560059e1fa3bbb0d88p-37Q, -0x1.99a4987142751268f68b0c6ed2ddp-37Q, 0x1.0c54f6dbbd52aba64c70d9892a39p-42Q, 0x1.60b6215484a1c96af7151c514271p-49Q, -0x1.6360709f9f94bbe775bd0ffbecdcp-54Q, 0x1.f308a7934d0993ea0193288827f6p-62Q, -0x1.dcd83ccd7b40e72afa7a2bb7cfc1p-74Q, -0x1.f4c81d09055a8112f9a8f0e29d27p-87Q, 0x1.f541a7bafa4019158f37f50aca0cp-112Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.674708c20fd278e13cb308fbf6b6p-13Q, 0x1.27cdb30a789a9a4cba57381b80dfp-5Q, 0x1.f3f9a4213a58e15fea805c6fce03p-2Q, 0x1.8a1b0e63e768effc8742d136ac6ep-1Q, -0x1.d0008134e7b24ce7a0bdb2d5e177p-2Q, 0x1.06c9817f611e98379b152a389fafp-2Q, -0x1.4ec109006f3ab5eb9ef4b4145d24p-3Q, 0x1.b93c322324f48f0734b615fc9893p-4Q, -0x1.09f5f4083e296fb6c1df50020f51p-4Q, 0x1.0b6a75dfa25cd5d117e10197333bp-5Q, -0x1.a17eb803ff745c2b927f4b56bb55p-7Q, 0x1.cda18d3f662aa65f684ad290727fp-9Q, -0x1.1815693b1e509dbfebb4547eb7c2p-11Q, -0x1.547c4d557ee7eea60970ca463eb3p-15Q, 0x1.a1d518779619a935a6506c218d6ap-15Q, -0x1.fb90c559a340a6d74429771a650ap-17Q, 0x1.085bbb58c3dc5e159337591d11c5p-19Q, 0x1.4a16ea18a78a9255137a36b6eeb6p-22Q, -0x1.3b0f83cef7c9cd6e4992ef7a8e0ap-23Q, 0x1.426950d9b6bca7a253eba2c282ddp-28Q, 0x1.acf5cc83787c76964322f9b1343dp-29Q, 0x1.c7dfc1cbcd560059e1fa3bbb0da4p-37Q, -0x1.99a4987142751268f68b0c6ed2ep-37Q, 0x1.0c54f6dbbd52aba64c70d9892a56p-42Q, 0x1.60b6215484a1c96af7151c51425dp-49Q, -0x1.6360709f9f94bbe775bd0ffbeceep-54Q, 0x1.f308a7934d0993ea019328882821p-62Q, -0x1.dcd83ccd7b40e72afa7a2bb7cfap-74Q, -0x1.f4c81d09055a8112f9a8f0e29d58p-87Q, 0x1.f541a7bafa4019158f37f50aca47p-112Q, 0x0p+0Q}; } if constexpr (order == 1) { - return {0x0p+0Q, 0x1.5e2be3ffc02e5cb63d505e4d41fep-10Q, 0x1.115596e3350ec9cfc7fd8b282be7p-3Q, 0x1.8e066ec21fc6a13efd57c0a1a877p-1Q, -0x1.9a3ae9a2a692b7d6fe0312f42f92p-1Q, -0x1.b4e823397cf87b829664fcfb60e4p-2Q, 0x1.24d79baf908bbde12d97a94a7ed1p-1Q, -0x1.96ff08990aa1ff2b3a6156b3a6a7p-2Q, 0x1.7cff079859d44a97134acb0b37c4p-3Q, -0x1.3b2f6fbc125eff4f9e00971a7fffp-5Q, -0x1.8c439625af31faef37a9ac49e531p-6Q, 0x1.d82f61038e0e00ad9adf79408fc1p-6Q, -0x1.d308486caa607d54998083598b6bp-7Q, 0x1.b8ca6f1e525d8fc1aecc19124973p-9Q, 0x1.4ea26d28d30874cd6f1bece4d064p-13Q, -0x1.4455094b3efac9d3c28631c94f7ap-12Q, 0x1.116fb5095b299dc0400b6814e25bp-15Q, 0x1.e6f46905743cf29b32a5a94efc8dp-16Q, -0x1.73244b56511394e5623a6c13b538p-17Q, 0x1.105e30d7ecb45c8d929e54615a9cp-20Q, 0x1.85ee598e5c772af7b4423f5e48b1p-23Q, -0x1.5ac9f1c76ae72306c6963aa9eb21p-25Q, 0x1.d789f3d703adce6fceeb7470eb4ep-30Q, 0x1.8d5e3e20027e865e92d2141a2b67p-35Q, -0x1.c8b3833c3b76938050c849f3c889p-37Q, 0x1.38fe40b99904e82fbd88d14cb2f1p-43Q, 0x1.f524d19d8420a05a730c8d14360bp-49Q, -0x1.a73b7d5e557e750b97979bfe8dccp-57Q, -0x1.c5320460bba019effc9564690e27p-68Q, 0x1.a5354de9b5e4be0a26cfffd8bd46p-81Q, -0x1.a59b918cf087f7e28a66eadc804dp-105Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.5e2be3ffc02e5cb63d505e4d42d9p-10Q, 0x1.115596e3350ec9cfc7fd8b282c15p-3Q, 0x1.8e066ec21fc6a13efd57c0a1a8d5p-1Q, -0x1.9a3ae9a2a692b7d6fe0312f42fd2p-1Q, -0x1.b4e823397cf87b829664fcfb615p-2Q, 0x1.24d79baf908bbde12d97a94a7f11p-1Q, -0x1.96ff08990aa1ff2b3a6156b3a6f7p-2Q, 0x1.7cff079859d44a97134acb0b3815p-3Q, -0x1.3b2f6fbc125eff4f9e00971a8041p-5Q, -0x1.8c439625af31faef37a9ac49e57fp-6Q, 0x1.d82f61038e0e00ad9adf7940901dp-6Q, -0x1.d308486caa607d54998083598bc8p-7Q, 0x1.b8ca6f1e525d8fc1aecc191249d8p-9Q, 0x1.4ea26d28d30874cd6f1bece4d0cdp-13Q, -0x1.4455094b3efac9d3c28631c94fc4p-12Q, 0x1.116fb5095b299dc0400b6814e296p-15Q, 0x1.e6f46905743cf29b32a5a94efd0bp-16Q, -0x1.73244b56511394e5623a6c13b582p-17Q, 0x1.105e30d7ecb45c8d929e54615ad8p-20Q, 0x1.85ee598e5c772af7b4423f5e4908p-23Q, -0x1.5ac9f1c76ae72306c6963aa9eb6ap-25Q, 0x1.d789f3d703adce6fceeb7470ebe2p-30Q, 0x1.8d5e3e20027e865e92d2141a2b73p-35Q, -0x1.c8b3833c3b76938050c849f3c902p-37Q, 0x1.38fe40b99904e82fbd88d14cb331p-43Q, 0x1.f524d19d8420a05a730c8d14369dp-49Q, -0x1.a73b7d5e557e750b97979bfe8e3ep-57Q, -0x1.c5320460bba019effc9564690ea4p-68Q, 0x1.a5354de9b5e4be0a26cfffd8bdbp-81Q, -0x1.a59b918cf087f7e28a66eadc80bbp-105Q, 0x0p+0Q}; } if constexpr (order == 2) { - return {0x0p+0Q, 0x1.295efeac152d79633d42d6d9172ap-7Q, 0x1.9d61cc47e5de2628b18136c91d91p-2Q, 0x1.161d416b67637e8de5329814da2p-2Q, -0x1.5b7a45663376a9aa5f95ed876f1cp+1Q, 0x1.d1174d09edd0e5a9b8dec824cdfdp+1Q, -0x1.64fd520a66219e33ceb19171c86dp+1Q, 0x1.05168da96484602e8bf4113ac457p+1Q, -0x1.6575089c4586c8407b43149ab041p+0Q, 0x1.a38bf0b53f437316576c7b5f768p-1Q, -0x1.889b16ed752f17512574ee2082eap-2Q, 0x1.152c76b8c5aa61f7d1f86545ce6dp-3Q, -0x1.1b4c99876d201e8bbadda8305d7dp-5Q, 0x1.907f1e8b42628bd87c6dfaa4224dp-8Q, -0x1.48b152205d27ec7322d3d940e06dp-13Q, -0x1.a3276d4b1b41ee0d43115b5aa5e8p-11Q, 0x1.19008ab2bad0e78321ce13187997p-11Q, -0x1.4a0f2fc3a3fe6743d3250b9f059bp-13Q, 0x1.b16d8531bcd974ffcfcfb27586b6p-17Q, 0x1.3c9bc919e0e49ac8c1ec9b7c733dp-19Q, 0x1.899254d74191895a0ee7c7e36bb2p-24Q, -0x1.e003adff466a6871b6189e1534p-24Q, -0x1.b118f867cd64dc8214de14f222d4p-27Q, 0x1.a8e81cf9b2bf4ed6a7f80b7fef41p-30Q, 0x1.472047d4ce812177c2886070e70ap-36Q, 0x1.0bc546f1206b056c51ef6c4e49f4p-41Q, -0x1.5b78778ec812c1a8126f0f850a88p-47Q, -0x1.75c5773026aebf4866564852975ap-53Q, -0x1.4450e0ff79233cb66d7ae040758fp-64Q, 0x1.74639b34e9729d879c349c615547p-76Q, -0x1.74be14820bd545c3f1e6ecd10653p-99Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.295efeac152d79633d42d6d916dap-7Q, 0x1.9d61cc47e5de2628b18136c91ea6p-2Q, 0x1.161d416b67637e8de5329814dbadp-2Q, -0x1.5b7a45663376a9aa5f95ed877064p+1Q, 0x1.d1174d09edd0e5a9b8dec824cf43p+1Q, -0x1.64fd520a66219e33ceb19171c931p+1Q, 0x1.05168da96484602e8bf4113ac4e7p+1Q, -0x1.6575089c4586c8407b43149ab11bp+0Q, 0x1.a38bf0b53f437316576c7b5f77a6p-1Q, -0x1.889b16ed752f17512574ee20842fp-2Q, 0x1.152c76b8c5aa61f7d1f86545cf96p-3Q, -0x1.1b4c99876d201e8bbadda8305eebp-5Q, 0x1.907f1e8b42628bd87c6dfaa42428p-8Q, -0x1.48b152205d27ec7322d3d940da05p-13Q, -0x1.a3276d4b1b41ee0d43115b5aa81dp-11Q, 0x1.19008ab2bad0e78321ce13187a8p-11Q, -0x1.4a0f2fc3a3fe6743d3250b9f0687p-13Q, 0x1.b16d8531bcd974ffcfcfb275888ap-17Q, 0x1.3c9bc919e0e49ac8c1ec9b7c72d7p-19Q, 0x1.899254d74191895a0ee7c7e368dfp-24Q, -0x1.e003adff466a6871b6189e153009p-24Q, -0x1.b118f867cd64dc8214de14f22a3dp-27Q, 0x1.a8e81cf9b2bf4ed6a7f80b7fee49p-30Q, 0x1.472047d4ce812177c28860710d42p-36Q, 0x1.0bc546f1206b056c51ef6c4e3c73p-41Q, -0x1.5b78778ec812c1a8126f0f855511p-47Q, -0x1.75c5773026aebf48665648526e47p-53Q, -0x1.4450e0ff79233cb66d7ae0406fdfp-64Q, 0x1.74639b34e9729d879c349c60a705p-76Q, -0x1.74be14820bd545c3f1e6ecce41eap-99Q, 0x0p+0Q}; } if constexpr (order == 3) { - return {0x0p+0Q, 0x1.ade0c67a6df62bfb0e80195f5a2fp-5Q, 0x1.c28b430a75f298c1d73bb81e4847p-1Q, -0x1.5f4ccfba427cea15c66f4a5c1f37p+1Q, 0x1.cdb8f607de72e596ea568a0387dfp+0Q, 0x1.f77743196657a78ad5bf74421206p+0Q, -0x1.dd879ba809267a9d7904ab43625dp+1Q, 0x1.37053c10bce28d1022d31ac10de9p+1Q, -0x1.1bfa76c0a943a24b6df5bb2a1509p-2Q, -0x1.2b5034c5e7cec27aa44e7ea3cb6cp+0Q, 0x1.63e2260baa9fdeb5f048ba37b6ebp+0Q, -0x1.a29913a0c0f2ddeebb2bd3c28a1p-1Q, 0x1.852867c8ceb35a88f788b40867b1p-3Q, 0x1.9a9664fc9e678ca180654356d53fp-4Q, -0x1.c29f78e2de8f527b7cd8a08d3865p-4Q, 0x1.54d634445fcf6eedbc5dccf05e12p-5Q, -0x1.41b2a5a54a66286808252915cbfp-9Q, -0x1.225d9fec5c6e8c447caf2b42dbedp-8Q, 0x1.f9019974a7ddb631ebee782882ddp-10Q, -0x1.2c283714217e754b55528b629523p-12Q, -0x1.8e8742bbbfb2111f9226dbaeba4ep-16Q, 0x1.c9f58c62dd5d38676514b49cb9bcp-17Q, -0x1.61f6495ed1b8ece209fc78f1e52ap-20Q, -0x1.96b8b0f8a15e32028c8ee00782fdp-25Q, 0x1.71f48c99d030adfe377a70568859p-27Q, -0x1.b5fc8d66ab6cfd5a83337a0ceda7p-34Q, -0x1.c5963ee2273d2d13e0940bb14697p-38Q, 0x1.6b4e6ce52480a98b4ad64082bf85p-45Q, 0x1.e67135f42b49adad0031055a34f8p-58Q, -0x1.6aff40a6dd5b409b62d449651f14p-67Q, 0x1.6b5790e714dd812f487575d068fp-89Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.ade0c67a6df62bfb0e80195f4993p-5Q, 0x1.c28b430a75f298c1d73bb81e4353p-1Q, -0x1.5f4ccfba427cea15c66f4a5c12bbp+1Q, 0x1.cdb8f607de72e596ea568a034c8fp+0Q, 0x1.f77743196657a78ad5bf74425543p+0Q, -0x1.dd879ba809267a9d7904ab437cc5p+1Q, 0x1.37053c10bce28d1022d31ac1246dp+1Q, -0x1.1bfa76c0a943a24b6df5bb2abebdp-2Q, -0x1.2b5034c5e7cec27aa44e7ea3a878p+0Q, 0x1.63e2260baa9fdeb5f048ba37a04bp+0Q, -0x1.a29913a0c0f2ddeebb2bd3c275b3p-1Q, 0x1.852867c8ceb35a88f788b40857cap-3Q, 0x1.9a9664fc9e678ca180654356c297p-4Q, -0x1.c29f78e2de8f527b7cd8a08d24efp-4Q, 0x1.54d634445fcf6eedbc5dccf04eadp-5Q, -0x1.41b2a5a54a66286808252915b865p-9Q, -0x1.225d9fec5c6e8c447caf2b42ced4p-8Q, 0x1.f9019974a7ddb631ebee782869d1p-10Q, -0x1.2c283714217e754b55528b628588p-12Q, -0x1.8e8742bbbfb2111f9226dbaea15fp-16Q, 0x1.c9f58c62dd5d38676514b49c9e2ep-17Q, -0x1.61f6495ed1b8ece209fc78f1d085p-20Q, -0x1.96b8b0f8a15e32028c8ee0076679p-25Q, 0x1.71f48c99d030adfe377a7056701dp-27Q, -0x1.b5fc8d66ab6cfd5a83337a0cc9b9p-34Q, -0x1.c5963ee2273d2d13e0940bb125cdp-38Q, 0x1.6b4e6ce52480a98b4ad64082a237p-45Q, 0x1.e67135f42b49adad00310559fa39p-58Q, -0x1.6aff40a6dd5b409b62d44964fcf6p-67Q, 0x1.6b5790e714dd812f487575d04214p-89Q, 0x0p+0Q}; } if constexpr (order == 4) { - return {0x0p+0Q, 0x1.002833198203bf56e8fbb6906848p-2Q, 0x1.74f145f5180b48bf2521976c532bp-1Q, -0x1.d40722c67b8b2c63d49b5a9adf94p+2Q, 0x1.2af6f0f464bc571c8b763a836373p+4Q, -0x1.a43135145799a27dfd1fadf683bp+4Q, 0x1.9a15ae0412710439a9b40c2df6c6p+4Q, -0x1.38d1bd49e9af291f59c9f34bbc8fp+4Q, 0x1.6c6cdb14d7fe107edc16c4947af5p+3Q, -0x1.13619aaa119f97b37d6d1c2a2f99p+2Q, 0x1.d56ce1ec874a0c5dd634fb4d532fp-1Q, -0x1.e42907ae7a26468d6ecb1d9b0202p-1Q, 0x1.e52911f9f656640a2404f83c369fp+0Q, -0x1.ee224ef8eb13d4b961d19b800725p+0Q, 0x1.1f26d6223d44cb481a2910c8c507p+0Q, -0x1.5888435f5783628967f9baa292dep-2Q, -0x1.9e45fc4e6f7c960ebee0a7c6f2b4p-7Q, 0x1.dcd2d2ebfb6e400bbcf752c44dedp-5Q, -0x1.93116bc1ac6b7200b82ddbfbe355p-6Q, 0x1.0e01783e342a4693e98c9eddee16p-8Q, 0x1.31f3faa90de9ede16d91478c925bp-12Q, -0x1.f6b0df77a54401ad9bab43898f0dp-13Q, 0x1.f05077a02c3aba8741da976da8a2p-16Q, 0x1.2ec5b9d224e6bceb5db9ee6f77e8p-20Q, -0x1.47f2b0eb68eda8ce48926b183b67p-22Q, 0x1.bcb021bf883a1f92a78fc9e4385p-29Q, 0x1.1bcefd6cfba520ba0473784ac481p-32Q, -0x1.34d97adc52a38a676a55a69541ap-39Q, -0x1.6f2c8c9ca394fbdec6dda2529befp-53Q, 0x1.34e43d9253e6e8975e6c8e7e1076p-60Q, -0x1.352f98f0f2e48db2a203fb3601f4p-81Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.002833198203bf56e8fbb6905c21p-2Q, 0x1.74f145f5180b48bf2521976daf68p-1Q, -0x1.d40722c67b8b2c63d49b5a9b6cadp+2Q, 0x1.2af6f0f464bc571c8b763a8383eap+4Q, -0x1.a43135145799a27dfd1fadf6761p+4Q, 0x1.9a15ae0412710439a9b40c2dd4dbp+4Q, -0x1.38d1bd49e9af291f59c9f34bcde4p+4Q, 0x1.6c6cdb14d7fe107edc16c4953b35p+3Q, -0x1.13619aaa119f97b37d6d1c2c4585p+2Q, 0x1.d56ce1ec874a0c5dd634fb59d6d1p-1Q, -0x1.e42907ae7a26468d6ecb1d9e3f24p-1Q, 0x1.e52911f9f656640a2404f83a2b4fp+0Q, -0x1.ee224ef8eb13d4b961d19b7d1c3bp+0Q, 0x1.1f26d6223d44cb481a2910c6eba2p+0Q, -0x1.5888435f5783628967f9baa03f79p-2Q, -0x1.9e45fc4e6f7c960ebee0a7c398e8p-7Q, 0x1.dcd2d2ebfb6e400bbcf752c0bf7fp-5Q, -0x1.93116bc1ac6b7200b82ddbf8d638p-6Q, 0x1.0e01783e342a4693e98c9edbf33cp-8Q, 0x1.31f3faa90de9ede16d914789626ap-12Q, -0x1.f6b0df77a54401ad9bab438557ddp-13Q, 0x1.f05077a02c3aba8741da9769ad4ep-16Q, 0x1.2ec5b9d224e6bceb5db9ee6cff1dp-20Q, -0x1.47f2b0eb68eda8ce48926b156c9bp-22Q, 0x1.bcb021bf883a1f92a78fc9df6525p-29Q, 0x1.1bcefd6cfba520ba047378483637p-32Q, -0x1.34d97adc52a38a676a55a692601cp-39Q, -0x1.6f2c8c9ca394fbdec6dda2487026p-53Q, 0x1.34e43d9253e6e8975e6c8e7aefefp-60Q, -0x1.352f98f0f2e48db2a203fb32a0f2p-81Q, 0x0p+0Q}; } if constexpr (order == 5) { - return {0x0p+0Q, 0x1.e5d8b15d3664d52108fae1119eb3p-1Q, -0x1.e7e4ae8313c9841f6b4ba69959c8p+1Q, 0x1.643947f56174ee22b35087d6e12ep+1Q, 0x1.8bf77730624fb34f058db90d09abp+3Q, -0x1.39575fcf961c0f3da45ce1cc2c7bp+5Q, 0x1.f6657cd6c7e299b7cc89d5ddbefap+5Q, -0x1.2981aaa66ca36b3a94f827b0b8dbp+6Q, 0x1.0cf300079688d85d6be47384ed72p+6Q, -0x1.71528cd9cab137a39829b250a696p+4Q, -0x1.13658826409b41720bd51b25ad91p+6Q, 0x1.5ecf135e336b7c201cd13f369622p+7Q, -0x1.ca8fbd8754dc1920d78e09c343d4p+7Q, 0x1.83a96558c6c07294f0fd7084bf69p+7Q, -0x1.9d91182e0786a78e2338c78e73d6p+6Q, 0x1.818f5ca05f023837d630b0fd1c9bp+4Q, 0x1.4e782cc994094deb15353773c74ap+3Q, -0x1.7fba734a377970e0ae8d81fa7364p+3Q, 0x1.361d7d826bb5b3b3a1616d435b7ap+2Q, -0x1.85fee8307d590ead49f8c8c0db3dp-1Q, -0x1.fcc3205624ce56be678cf8dd8b95p-4Q, 0x1.30d54b861144b0080c77faaf98c5p-4Q, -0x1.4236c7ccc62df6904f17923598dp-7Q, -0x1.6b6d4bcc089eed67f907624e3601p-12Q, 0x1.251cb75a77a65027fa18c44159c1p-13Q, -0x1.7df627db3ed37f55c551bd809c99p-19Q, -0x1.6d7ba0319a17f9c5347fd4990ca2p-23Q, 0x1.047350b843565161f3ac66f52b72p-29Q, 0x1.ecabd0f857c5126fafed07e0ff9fp-41Q, -0x1.035ef08b1273d485ae68801b61a7p-49Q, 0x1.039e900e7fa12bdd9aa0b52e7d7ap-69Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.e5d8b15d3664d52108fae09a8e52p-1Q, -0x1.e7e4ae8313c9841f6b4ba59501e9p+1Q, 0x1.643947f56174ee22b35084254df8p+1Q, 0x1.8bf77730624fb34f058dbb215e6ap+3Q, -0x1.39575fcf961c0f3da45ce2cb7fb1p+5Q, 0x1.f6657cd6c7e299b7cc89d7d3daa3p+5Q, -0x1.2981aaa66ca36b3a94f8297750dp+6Q, 0x1.0cf300079688d85d6be476057064p+6Q, -0x1.71528cd9cab137a39829bbec9ca2p+4Q, -0x1.13658826409b41720bd51a0f2d32p+6Q, 0x1.5ecf135e336b7c201cd13f9f1c7bp+7Q, -0x1.ca8fbd8754dc1920d78e0ace3c5ep+7Q, 0x1.83a96558c6c07294f0fd718cdf26p+7Q, -0x1.9d91182e0786a78e2338c8bf2ff2p+6Q, 0x1.818f5ca05f023837d630b257f2ffp+4Q, 0x1.4e782cc994094deb153537dfc8d9p+3Q, -0x1.7fba734a377970e0ae8d82bc8b81p+3Q, 0x1.361d7d826bb5b3b3a1616de586bdp+2Q, -0x1.85fee8307d590ead49f8c992534dp-1Q, -0x1.fcc3205624ce56be678cf9a5a7bcp-4Q, 0x1.30d54b861144b0080c77fb2ef955p-4Q, -0x1.4236c7ccc62df6904f1792b21926p-7Q, -0x1.6b6d4bcc089eed67f90762e3bff2p-12Q, 0x1.251cb75a77a65027fa18c49d6fe7p-13Q, -0x1.7df627db3ed37f55c551bdd12823p-19Q, -0x1.6d7ba0319a17f9c5347fd4ebc07ap-23Q, 0x1.047350b843565161f3ac671e5f76p-29Q, 0x1.ecabd0f857c5126fafed07e8e831p-41Q, -0x1.035ef08b1273d485ae68801933a9p-49Q, 0x1.039e900e7fa12bdd9aa0b500dd5fp-69Q, 0x0p+0Q}; } if constexpr (order == 6) { - return {0x0p+0Q, 0x1.5c435b4994699430de1f0c23d617p+1Q, -0x1.45ad88073e6251792d84632e4f3fp+4Q, 0x1.1ac643e9c99f8dff42b4b524dcf6p+6Q, -0x1.3bcd24e1c22f08a7330d93c59d11p+7Q, 0x1.1132bead650e64e0cc624fab813p+8Q, -0x1.a3321607e359615c22640004ddabp+8Q, 0x1.2bec4ce73b524de840d2af23d04bp+9Q, -0x1.83ddd4224b9abfb64ecabda1d5d5p+9Q, 0x1.b1ad4241d86bedd378c0243ed9a2p+9Q, -0x1.9d7a3218170b28b67328a62c7a74p+9Q, 0x1.5526f87e8214f36e89fc5bb73ce9p+9Q, -0x1.e996857ebd3fd865f8b8b92d1e0ep+8Q, 0x1.186a9a24f3387e74b221163382ebp+8Q, -0x1.4f804f76b6d5b86a618f7579c739p+6Q, -0x1.84954fc1821007c0fd22b5bb0514p+5Q, 0x1.59efa11d2ec6f964630b6ee3dd9dp+6Q, -0x1.dac7ad3b33c95d5f07d9022e2d45p+5Q, 0x1.62078796373e73b5598b789d53cp+4Q, -0x1.88bb023e9f2f98b9b7a5cb3efe82p+1Q, -0x1.04b9160269b89d57d0a514a7e722p+0Q, 0x1.18c6982acbd2cd140bf32c40e2bfp-1Q, -0x1.508ddc9d3ccb43c37b8bf5160a7bp-4Q, -0x1.539386e1415cf5772194f932f5bcp-9Q, 0x1.9eab992a4b9ab37998a475e020b6p-10Q, -0x1.980b92ff814cc556c4aed6edadddp-15Q, -0x1.761c29381edd29e5680cf26d10acp-19Q, 0x1.64e7e2ec4af2d5325d3b1b81e06p-25Q, 0x1.1823b743e4c412fe2e1a19821c84p-35Q, -0x1.623923d3ddbaeed10b04f5b48b46p-44Q, 0x1.6290fa803758e40f0b8255ed89fdp-63Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.5c435b4994699430de1f0bf0f96ep+1Q, -0x1.45ad88073e6251792d84638c28d6p+4Q, 0x1.1ac643e9c99f8dff42b4b5f9e976p+6Q, -0x1.3bcd24e1c22f08a7330d952db5cp+7Q, 0x1.1132bead650e64e0cc6250fd5a4cp+8Q, -0x1.a3321607e359615c22640184890cp+8Q, 0x1.2bec4ce73b524de840d2af975fb7p+9Q, -0x1.83ddd4224b9abfb64ecabd8660acp+9Q, 0x1.b1ad4241d86bedd378c0238858cbp+9Q, -0x1.9d7a3218170b28b67328a4e4a6f8p+9Q, 0x1.5526f87e8214f36e89fc59fbe6b5p+9Q, -0x1.e996857ebd3fd865f8b8b57715d2p+8Q, 0x1.186a9a24f3387e74b22113290d4ap+8Q, -0x1.4f804f76b6d5b86a618f6e232bp+6Q, -0x1.84954fc1821007c0fd22bc06ae8ep+5Q, 0x1.59efa11d2ec6f964630b6fd432d3p+6Q, -0x1.dac7ad3b33c95d5f07d90297e68ap+5Q, 0x1.62078796373e73b5598b78c1554p+4Q, -0x1.88bb023e9f2f98b9b7a5caf3d0d1p+1Q, -0x1.04b9160269b89d57d0a515a32ad5p+0Q, 0x1.18c6982acbd2cd140bf32d2822bbp-1Q, -0x1.508ddc9d3ccb43c37b8bf661b39ap-4Q, -0x1.539386e1415cf5772194fa5cb789p-9Q, 0x1.9eab992a4b9ab37998a4782656d7p-10Q, -0x1.980b92ff814cc556c4aeda05445fp-15Q, -0x1.761c29381edd29e5680cf5367b41p-19Q, 0x1.64e7e2ec4af2d5325d3b1ebf7038p-25Q, 0x1.1823b743e4c412fe2e1a1caf98aep-35Q, -0x1.623923d3ddbaeed10b04fa360d62p-44Q, 0x1.6290fa803758e40f0b825bbc6f28p-63Q, 0x0p+0Q}; } if constexpr (order == 7) { - return {0x0p+0Q, 0x1.891443770e9f5b58ca0b8becb52ep+2Q, -0x1.c4b28f7dbecf38e874d341781c95p+5Q, 0x1.d994c46f08417c9c24a36bb24434p+7Q, -0x1.26defe09eb9e312242e5ff410da3p+9Q, 0x1.ddf577c4250f78c0132b7ac736e1p+9Q, -0x1.fd2079b0f3ddb297d55b16fe84bp+9Q, 0x1.36152a2e286cfeac4352523397cdp+9Q, 0x1.d8616a51db368c3df94db95c5c72p+6Q, -0x1.190b42892374c709dd821decb54p+10Q, 0x1.36219b396179567cea598487367ep+11Q, -0x1.eed74001662f7e761e889a73b6ep+11Q, 0x1.31c149450a5e9832b2f7a4322f07p+12Q, -0x1.31807a4d8f7d8b9ec23aba57ce8ep+12Q, 0x1.07e37f0875c28ba98c5ad47ed33fp+12Q, -0x1.9ca0e06fa4e40e6ba99e5e66481ep+11Q, 0x1.192392a49659f5be4af76f76ab89p+11Q, -0x1.28f7ef65a911c2242d46f559ac11p+10Q, 0x1.8ef1182eeb70c3b810abd66139cfp+8Q, -0x1.076216da5c43b27292caed829f7ap+5Q, -0x1.3734a9c9c5014b6b42adc6c9cbep+5Q, 0x1.2e313dce4fbf11c25ec1c482fcb8p+4Q, -0x1.913ecda1e3436af7caa7765fe945p+1Q, -0x1.aba4e0591b35ef78387e98333cf8p-4Q, 0x1.5578ca229685f75ec4d7ad4713cep-4Q, -0x1.f3ff47839e58d032a19fef9f4efp-9Q, -0x1.bd3a12076a4f509f06e41d1d4df9p-13Q, 0x1.29ffe91412a29d368ce3dc6e38c5p-18Q, 0x1.5e7711914b058b73ae87986d7f1ap-28Q, -0x1.267e3f1ece05182094a61971cb39p-36Q, 0x1.26c8d9be624c3d09b4283ff340e2p-54Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.891443770e9f5b58ca0bdbd939d6p+2Q, -0x1.c4b28f7dbecf38e874d3b242d4fbp+5Q, 0x1.d994c46f08417c9c24a3de260d39p+7Q, -0x1.26defe09eb9e312242e62017ceb2p+9Q, 0x1.ddf577c4250f78c0132ae5d7d1cep+9Q, -0x1.fd2079b0f3ddb297d557ffac7fap+9Q, 0x1.36152a2e286cfeac434a875affb8p+9Q, 0x1.d8616a51db368c3df9bbb5de82cep+6Q, -0x1.190b42892374c709dd8c148043fep+10Q, 0x1.36219b396179567cea600ef5a5e7p+11Q, -0x1.eed74001662f7e761e907ef9b166p+11Q, 0x1.31c149450a5e9832b2fbd7c32f38p+12Q, -0x1.31807a4d8f7d8b9ec23e94e23c9ap+12Q, 0x1.07e37f0875c28ba98c5df12ea151p+12Q, -0x1.9ca0e06fa4e40e6ba9a2f070a627p+11Q, 0x1.192392a49659f5be4afa683922a3p+11Q, -0x1.28f7ef65a911c2242d4a04d3586cp+10Q, 0x1.8ef1182eeb70c3b810afe07ad9aep+8Q, -0x1.076216da5c43b27292cd22bcb978p+5Q, -0x1.3734a9c9c5014b6b42b155a6abedp+5Q, 0x1.2e313dce4fbf11c25ec52c766e83p+4Q, -0x1.913ecda1e3436af7caac068805f8p+1Q, -0x1.aba4e0591b35ef78388396d8949ap-4Q, 0x1.5578ca229685f75ec4dbb7fb72b6p-4Q, -0x1.f3ff47839e58d032a1a624c1f604p-9Q, -0x1.bd3a12076a4f509f06e99bb28599p-13Q, 0x1.29ffe91412a29d368ce7b0895443p-18Q, 0x1.5e7711914b058b73ae8c4ed370dp-28Q, -0x1.267e3f1ece05182094aa29382cf7p-36Q, 0x1.26c8d9be624c3d09b42c989d403cp-54Q, 0x0p+0Q}; } if constexpr (order == 8) { - return {0x0p+0Q, 0x1.1c06072fbf26f358c9f18045c124p+3Q, -0x1.65d998749f19f3f527890dd9f349p+6Q, 0x1.9d8978b96f57f154ef9e43eaf80dp+8Q, -0x1.24c8d76a7f36d7089e403e85e9fap+10Q, 0x1.21d479bc00697b14d91b67255a8bp+11Q, -0x1.bbc006c9393532c76b5f0b5bef94p+11Q, 0x1.2211c4425df9c2e46c413666253fp+12Q, -0x1.5c64ff1d8bf677ab09ae01e0a5e1p+12Q, 0x1.845a35a3158347c96bec7865086bp+12Q, -0x1.87e6df0fbf8ef42fd53aa9972193p+12Q, 0x1.6504110de640c4682cbbe6b8a6e7p+12Q, -0x1.2b9aa02be2b35409ccb01b40da2ap+12Q, 0x1.cebcfb329a57eadc95a91a00a9a1p+11Q, -0x1.3e375c669dabfd4de918596ad52p+11Q, 0x1.7d70c67fe8973e080c2d05792b11p+10Q, -0x1.8fd6874952e8a903dad0f0ef170dp+9Q, 0x1.57b6f4096f1cf0152665b7fd82f9p+8Q, -0x1.3e2c004c73161017d20213f7c5c1p+6Q, -0x1.f1e0f66437531ffa2878e9c69067p+4Q, 0x1.39f676c7227564daf7250a1ee97dp+5Q, -0x1.07f7de36ead717df75680da7494ep+4Q, 0x1.6eaf02b444bc4ce468426b7d5bcep+1Q, 0x1.f8896c7b27aea8a0c13c77300d42p-4Q, -0x1.b78e4a3636f77d36046090a9c9b3p-4Q, 0x1.faf293c65fc88bb39eaf30523dfep-8Q, 0x1.a6b604defe6a94f42a0086be2586p-12Q, -0x1.9886be2865e4c650159b3c14bf08p-17Q, -0x1.7c0bde2d4dd50659d8e7bf0799bbp-26Q, 0x1.90aca39ea2e8ac3870c8fe9456dap-34Q, -0x1.91166efa6d0a92bc7a2ca99b7dfbp-51Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.1c06072fbf26f358c9f078f98565p+3Q, -0x1.65d998749f19f3f52787d2ac7bd1p+6Q, 0x1.9d8978b96f57f154ef9ce52c7bdfp+8Q, -0x1.24c8d76a7f36d7089e3f4940c827p+10Q, 0x1.21d479bc00697b14d91a6dd4bcabp+11Q, -0x1.bbc006c9393532c76b5d7283eb2fp+11Q, 0x1.2211c4425df9c2e46c401315e702p+12Q, -0x1.5c64ff1d8bf677ab09ac8c8005b4p+12Q, 0x1.845a35a3158347c96beac73413ep+12Q, -0x1.87e6df0fbf8ef42fd538df2c44e6p+12Q, 0x1.6504110de640c4682cba264cf46ap+12Q, -0x1.2b9aa02be2b35409ccae86a8991fp+12Q, 0x1.cebcfb329a57eadc95a6866f02e1p+11Q, -0x1.3e375c669dabfd4de916796f2023p+11Q, 0x1.7d70c67fe8973e080c2a8eb7f182p+10Q, -0x1.8fd6874952e8a903dace07633bccp+9Q, 0x1.57b6f4096f1cf0152662dc88de7ap+8Q, -0x1.3e2c004c73161017d1fe47d49586p+6Q, -0x1.f1e0f66437531ffa287a43716481p+4Q, 0x1.39f676c7227564daf7244ac826e7p+5Q, -0x1.07f7de36ead717df75674d143f33p+4Q, 0x1.6eaf02b444bc4ce4684168c04e9ap+1Q, 0x1.f8896c7b27aea8a0c13b638bec5cp-4Q, -0x1.b78e4a3636f77d36045fd051d0a7p-4Q, 0x1.faf293c65fc88bb39eaf07f0c833p-8Q, 0x1.a6b604defe6a94f42a0056ad171bp-12Q, -0x1.9886be2865e4c650159b7d4d95b1p-17Q, -0x1.7c0bde2d4dd50659d8e873b48d0ap-26Q, 0x1.90aca39ea2e8ac3870ca13b1a564p-34Q, -0x1.91166efa6d0a92bc7a2e9704d452p-51Q, 0x0p+0Q}; } if constexpr (order == 9) { - return {0x0p+0Q, 0x1.58e7df6732419db59e963fb33d94p+3Q, -0x1.c53a29616fa380817d7988f924b1p+6Q, 0x1.0cc18d57a1a1fb48e1055941c825p+9Q, -0x1.7c92fc1b6ca3895680be8b3bffe9p+10Q, 0x1.6a1945d20b68d8baff3e866c5cdap+11Q, -0x1.fab771c0e1baf24e2c87e6ba962ap+11Q, 0x1.254298acbb2d449a7b36affa5b18p+12Q, -0x1.407f9dc95f9b1203f97a18e79578p+12Q, 0x1.53233c63dd8a7f18f09c08d93b73p+12Q, -0x1.3b528b34539979362d85428f478fp+12Q, 0x1.e2ea2797d25e54507eaadbdfe8c3p+11Q, -0x1.3d6169dd11c9bca321155575b38p+11Q, 0x1.75fce5d641404560c110d19350b3p+10Q, -0x1.2b5b50127f9f56d44e8ab9654e78p+9Q, -0x1.18e0518b142ec5c99d4cfb0c02dep+7Q, 0x1.ed1ee257a974ab35fe9854c84beep+8Q, -0x1.f5a5a8d8a9b3c073ca74b7aa8b3fp+8Q, 0x1.920c943e9e1a266133c5fbd7d496p+8Q, -0x1.22c1385412c45fef7248020243cfp+8Q, 0x1.4b1ba13f6628b1dd44c07737a72dp+7Q, -0x1.ec876f34dee07503da6d353b7ff9p+5Q, 0x1.641261f15a2bc3d54eafcffb8c39p+3Q, 0x1.3bac7fcb6881fd2d747e22c3e33ap-1Q, -0x1.3ae0db5ff49e0fda9ef3c1ee8d61p-1Q, 0x1.0ba445bef297ba3c0908ff2bb4d9p-4Q, 0x1.c3804abda5b0efa9daf29b604e6cp-9Q, -0x1.3c78fba89f7e4dd2da6247dd38d1p-13Q, -0x1.6e90a45b17e11834e3133934b3a2p-22Q, 0x1.34c398a5dd4857b9fcc96bbdccaep-29Q, -0x1.351bbccd566d5b56e0d97b1d8b32p-45Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.58e7df6732419db59e9ac42f9ab1p+3Q, -0x1.c53a29616fa380817d7f5e347aefp+6Q, 0x1.0cc18d57a1a1fb48e108cac3a066p+9Q, -0x1.7c92fc1b6ca3895680c38212861fp+10Q, 0x1.6a1945d20b68d8baff4381a817e2p+11Q, -0x1.fab771c0e1baf24e2c8f95c4199fp+11Q, 0x1.254298acbb2d449a7b3bb526f729p+12Q, -0x1.407f9dc95f9b1203f980178aa4a8p+12Q, 0x1.53233c63dd8a7f18f0a2b3af5ccep+12Q, -0x1.3b528b34539979362d8c0e80e80ep+12Q, 0x1.e2ea2797d25e54507eb78c335f71p+11Q, -0x1.3d6169dd11c9bca3212058149b0bp+11Q, 0x1.75fce5d641404560c1229131d8bdp+10Q, -0x1.2b5b50127f9f56d44ea4f01f61c9p+9Q, -0x1.18e0518b142ec5c99d05ce213217p+7Q, 0x1.ed1ee257a974ab35fe81e878de48p+8Q, -0x1.f5a5a8d8a9b3c073ca67ee8615b8p+8Q, 0x1.920c943e9e1a266133bfad52e46dp+8Q, -0x1.22c1385412c45fef72454e0ef403p+8Q, 0x1.4b1ba13f6628b1dd44be57f24352p+7Q, -0x1.ec876f34dee07503da6a5d0e4af4p+5Q, 0x1.641261f15a2bc3d54eada0d94bc5p+3Q, 0x1.3bac7fcb6881fd2d747aef7d1cc5p-1Q, -0x1.3ae0db5ff49e0fda9ef09cfb9b34p-1Q, 0x1.0ba445bef297ba3c0905b698e9c6p-4Q, 0x1.c3804abda5b0efa9daece8d22468p-9Q, -0x1.3c78fba89f7e4dd2da5d2b0f1ab2p-13Q, -0x1.6e90a45b17e11834e30d4035587ep-22Q, 0x1.34c398a5dd4857b9fcc2b9b3ec09p-29Q, -0x1.351bbccd566d5b56e0d110fac029p-45Q, 0x0p+0Q}; } if constexpr (order == 10) { - return {0x0p+0Q, 0x1.0cfd9304e9d0e9e89a58da63527ap+3Q, -0x1.68c00ea69764cc01a57e59f4b6b3p+6Q, 0x1.b4a63a85c6a121d6db74c511805bp+8Q, -0x1.3c4fcf304828edf088a1b16ea07fp+10Q, 0x1.35efe9ab816f6ad2ce45644d2fd8p+11Q, -0x1.c3872b5b6dcd2512d768b35e0756p+11Q, 0x1.1261ac83f506bff0f39595d045e8p+12Q, -0x1.39e1fa3f00833a2dd6cf3f9d927bp+12Q, 0x1.5e4c9d364466ef749b997ff3a6cp+12Q, -0x1.6b72e41a84905cceda4b9c52f497p+12Q, 0x1.578fd4c404248dabc97584331c2p+12Q, -0x1.30faf3648505cdf5f67d9aa16b7dp+12Q, 0x1.0174ad7c898217c9040304ce9297p+12Q, -0x1.942bc49f2f52a22fa3fb0a0c2104p+11Q, 0x1.25cbc7992fd63cf3174ccf32c535p+11Q, -0x1.914caac5676309ecc707d67c3b11p+10Q, 0x1.f93f030387c4d019b699660bf6c3p+9Q, -0x1.1b4f5dfc787bbc3226392268b2fbp+9Q, 0x1.1df01b8a36a8b0e740bc1ec53a5bp+8Q, -0x1.048db6f3ab7c1cc8ce55d6b0a75fp+7Q, 0x1.730bcb9c58bfc20d60d07c0998acp+5Q, -0x1.09b56b87c1c7fb7baefa593d3ee2p+3Q, -0x1.4fb833b30fa7eeef6a7e9c60d9dap+0Q, 0x1.e38e1048601a60cbcefd6c477b1bp-1Q, -0x1.ee07e572041f738c257ecf9ffa9bp-4Q, -0x1.913ced3c0164b56d324da52a041bp-8Q, 0x1.0726b83c4032bf81b9b5324fe2d4p-11Q, 0x1.2751c6763466bbc5b3627d689424p-20Q, -0x1.00ceb77e39cabc22cbb16a695fdap-26Q, 0x1.0123085a8910152fac9e37f89667p-41Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.0cfd9304e9d0e9e89a508d967352p+3Q, -0x1.68c00ea69764cc01a573447ef7eep+6Q, 0x1.b4a63a85c6a121d6db6758f94115p+8Q, -0x1.3c4fcf304828edf08897e340df25p+10Q, 0x1.35efe9ab816f6ad2ce3b95243287p+11Q, -0x1.c3872b5b6dcd2512d759e390543cp+11Q, 0x1.1261ac83f506bff0f38c31198cefp+12Q, -0x1.39e1fa3f00833a2dd6c432f2edcep+12Q, 0x1.5e4c9d364466ef749b8d0d88979bp+12Q, -0x1.6b72e41a84905cceda3e7fc6c066p+12Q, 0x1.578fd4c404248dabc968b7c529b9p+12Q, -0x1.30faf3648505cdf5f671e0ae34fdp+12Q, 0x1.0174ad7c898217c903f8f07741efp+12Q, -0x1.942bc49f2f52a22fa3eae80252dcp+11Q, 0x1.25cbc7992fd63cf31740b115daf5p+11Q, -0x1.914caac5676309ecc6f6c550d8ebp+10Q, 0x1.f93f030387c4d019b6838cf24389p+9Q, -0x1.1b4f5dfc787bbc32262ca3f167bep+9Q, 0x1.1df01b8a36a8b0e740af0c5b60a7p+8Q, -0x1.048db6f3ab7c1cc8ce49930b812dp+7Q, 0x1.730bcb9c58bfc20d60bef0471523p+5Q, -0x1.09b56b87c1c7fb7baeed74ce6cdbp+3Q, -0x1.4fb833b30fa7eeef6a7358348b92p+0Q, 0x1.e38e1048601a60cbceead8c786b8p-1Q, -0x1.ee07e572041f738c256c5953b0d7p-4Q, -0x1.913ced3c0164b56d323de7f36c57p-8Q, 0x1.0726b83c4032bf81b9ad0141e709p-11Q, 0x1.2751c6763466bbc5b359801c4ca6p-20Q, -0x1.00ceb77e39cabc22cbab1770a0b7p-26Q, 0x1.0123085a8910152fac9990b7a672p-41Q, 0x0p+0Q}; } if constexpr (order == 11) { - return {0x0p+0Q, 0x1.6ddd33f198eb3c96ba063e358bd1p+2Q, -0x1.ef9ef6f596ce44132c400459330bp+5Q, 0x1.2bec86422c72fb4a90434380b422p+8Q, -0x1.ab3138ae63b3c1e29f0289d542dap+9Q, 0x1.90171accf1ae92cfd9a8b825cb23p+10Q, -0x1.0b8279e6381aa2b741ba53014abbp+11Q, 0x1.21c7cbc3a51f50320f0eba7f41fcp+11Q, -0x1.3291c6bd3630cafeef000c3ad649p+11Q, 0x1.52187d4f278255d9064abfc39513p+11Q, -0x1.5764b21031af003ebeb2fc812432p+11Q, 0x1.2d82b77758b7aad296d2a3297f76p+11Q, -0x1.efcf6fd97e7509c927947ebcfe7bp+10Q, 0x1.96b834131566dc9e05fa0d23f1dbp+10Q, -0x1.34d67cf0a39ad9453ec607f4238bp+10Q, 0x1.9aafba6f0ff85ebebf990bae7248p+9Q, -0x1.002f1ef9723b265f845856382322p+9Q, 0x1.378956144d5be0ceae49930a1c88p+8Q, -0x1.48f6827b3eeb52ea5b26c2ed113p+7Q, 0x1.17de886be7cb3ac887b94bba647bp+6Q, -0x1.abd1c377daaf4123bc220ca55b7bp+4Q, 0x1.18836fa0aedf116ff461c07e603dp+3Q, -0x1.72b11631904f6bd3fce02c59a632p-2Q, -0x1.93c736e0c44c0da3f44d1f9fb885p+0Q, 0x1.74105b4ecfea6c16422a97b509cfp-1Q, -0x1.a9382883de207a4dbe506bf11d8fp-4Q, -0x1.8ee02bc822713114de4c636e81aep-9Q, 0x1.b89c5ecf7a7b773088b92afebabbp-11Q, 0x1.5051009d42a4549b60d53bde7219p-19Q, -0x1.a9ba33acc416babe2770ada65c3ap-25Q, 0x1.aa6a7d0ba81031b3c996c62600c5p-39Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.6ddd33f198eb3c96ba1c54f670fdp+2Q, -0x1.ef9ef6f596ce44132c5dde1777d4p+5Q, 0x1.2bec86422c72fb4a905555a96936p+8Q, -0x1.ab3138ae63b3c1e29f1c692c8b8ep+9Q, 0x1.90171accf1ae92cfd9c146fd2557p+10Q, -0x1.0b8279e6381aa2b741cb2d9796cbp+11Q, 0x1.21c7cbc3a51f50320f21aa56334ap+11Q, -0x1.3291c6bd3630cafeef14937244cfp+11Q, 0x1.52187d4f278255d90661622e17d1p+11Q, -0x1.5764b21031af003ebeca03a2b0b9p+11Q, 0x1.2d82b77758b7aad296e73eef7d7bp+11Q, -0x1.efcf6fd97e7509c927b7122c5c13p+10Q, 0x1.96b834131566dc9e06167e63c7d4p+10Q, -0x1.34d67cf0a39ad9453edbb75a25c5p+10Q, 0x1.9aafba6f0ff85ebebfb694ebd422p+9Q, -0x1.002f1ef9723b265f846b3c2332f6p+9Q, 0x1.378956144d5be0ceae60b1a0aa28p+8Q, -0x1.48f6827b3eeb52ea5b3fa287d164p+7Q, 0x1.17de886be7cb3ac887cff35422aap+6Q, -0x1.abd1c377daaf4123bc47a29397f4p+4Q, 0x1.18836fa0aedf116ff47c167f808p+3Q, -0x1.72b11631904f6bd3fd5a823e34cp-2Q, -0x1.93c736e0c44c0da3f45cfa30760fp+0Q, 0x1.74105b4ecfea6c16423bc348f8fp-1Q, -0x1.a9382883de207a4dbe62c7de34c2p-4Q, -0x1.8ee02bc822713114de66688f8544p-9Q, 0x1.b89c5ecf7a7b773088c639b3a53ap-11Q, 0x1.5051009d42a4549b60dc1a4ffdc1p-19Q, -0x1.a9ba33acc416babe2777385baddfp-25Q, 0x1.aa6a7d0ba81031b3c9971794d3cep-39Q, 0x0p+0Q}; } if constexpr (order == 12) { - return {0x0p+0Q, 0x1.7e688b7526a774b7675960f4a94cp+1Q, -0x1.044f66dd0bb355e9e8503e18e935p+5Q, 0x1.39d2780b0ad2f5c13050620039bcp+7Q, -0x1.b63bb8898df0968b0e8fec1fd9a7p+8Q, 0x1.86b367123a2139a592c1528e8f55p+9Q, -0x1.d8001c1817ddf23795fa181f861ep+9Q, 0x1.b397f071da3115c2852f6422a8c8p+9Q, -0x1.9ca191acc971e01d773c5479fb8dp+9Q, 0x1.d28d7edb2db091286aa35eb84214p+9Q, -0x1.daeab5bf793f0a5db1ed52776228p+9Q, 0x1.738e37d47cc21d48d43df1f6d78p+9Q, -0x1.0785a3e74df59d2028a07275bacep+9Q, 0x1.a556a97ba734840eabbaaf9977bap+8Q, -0x1.320671c41025d2eac6cd6f7d0dadp+8Q, 0x1.33661041ead74be91556b7ad619ap+7Q, -0x1.d86506577d5080199f42262a920cp+5Q, 0x1.9ebe0657238551a24be276081da8p+4Q, -0x1.ec9ee9042933244440176ee46c34p-1Q, -0x1.1034340999c868fff4dcb8a37e58p+4Q, 0x1.04d7524f6a9fff23ce8e27e29df3p+4Q, -0x1.2fcc89fd04e88d59c73ed84bf7b4p+3Q, 0x1.7c24bc012bffc7d1e2142c729735p+2Q, -0x1.c84c145900f77b34a48b3cd01e16p+1Q, 0x1.57bccbd9e4fcea0faae95542b1dcp+0Q, -0x1.d81daf1af068d1091e33cdbbae6bp-3Q, -0x1.20f9f72def1de8f22bf9f5b255c4p-13Q, 0x1.c2f2ad7e016f5272ff0429610dd4p-9Q, 0x1.baf6705e59cac328415a41de4538p-17Q, -0x1.ae94eeab2dbd4d40eaa80ab9debep-22Q, 0x1.af91281d9938911a632b5cd0ed85p-35Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.7e688b7526a774b76724ba13a96cp+1Q, -0x1.044f66dd0bb355e9e82c72d5eaffp+5Q, 0x1.39d2780b0ad2f5c130250e42d893p+7Q, -0x1.b63bb8898df0968b0e5291c5adf1p+8Q, 0x1.86b367123a2139a59288ccfca3dfp+9Q, -0x1.d8001c1817ddf23795b1149354dfp+9Q, 0x1.b397f071da3115c284e47fbefa66p+9Q, -0x1.9ca191acc971e01d76f080b3e85ap+9Q, 0x1.d28d7edb2db091286a502e3d1491p+9Q, -0x1.daeab5bf793f0a5db198f7c1b01p+9Q, 0x1.738e37d47cc21d48d3f57dfe7cfep+9Q, -0x1.0785a3e74df59d20286619983999p+9Q, 0x1.a556a97ba734840eab5a765f294cp+8Q, -0x1.320671c41025d2eac683ee371196p+8Q, 0x1.33661041ead74be914f62376ca64p+7Q, -0x1.d86506577d5080199e51f7260b6fp+5Q, 0x1.9ebe0657238551a24ab6c6c0e20bp+4Q, -0x1.ec9ee904293324442bcbed481925p-1Q, -0x1.1034340999c868fff5238312a8aap+4Q, 0x1.04d7524f6a9fff23ceab9523e19cp+4Q, -0x1.2fcc89fd04e88d59c75667d7c4bbp+3Q, 0x1.7c24bc012bffc7d1e21de0348c52p+2Q, -0x1.c84c145900f77b34a4876818624fp+1Q, 0x1.57bccbd9e4fcea0faae4ccf7a2f9p+0Q, -0x1.d81daf1af068d1091e32e8f2fcc9p-3Q, -0x1.20f9f72def1de8f22a005f73e8a4p-13Q, 0x1.c2f2ad7e016f5272ff115101365p-9Q, 0x1.baf6705e59cac3284164d29d2adfp-17Q, -0x1.ae94eeab2dbd4d40eac4360abe26p-22Q, 0x1.af91281d9938911a63573a1c8a3ap-35Q, 0x0p+0Q}; } if constexpr (order == 13) { - return {0x0p+0Q, 0x1.a308ef1d1680575961469f8667e2p-1Q, -0x1.1df37cb20ef6cd526ba94f6e5b81p+3Q, 0x1.5a47cc2daffcb2cf20f274a5d38ap+5Q, -0x1.e7cc32d4c7f05cc178a022548d5cp+6Q, 0x1.ba5aa6f58d154790fde028986d8dp+7Q, -0x1.137ebe2556bb5c31390698cc2046p+8Q, 0x1.07f96c27b79ba1c76a43166f429dp+8Q, -0x1.f176d6c3151d8ca65c15ab30195bp+7Q, 0x1.0c09a0e0bcb9ff8d7d5939eac1c2p+8Q, -0x1.12bf0f34a9a5500b54a8cb7aa2b3p+8Q, 0x1.de16d55d65d2bb62ec748b786b23p+7Q, -0x1.8c7b496d3d3fd8274ea834d98fd2p+7Q, 0x1.56592506626bc28d37a6f5de979bp+7Q, -0x1.13d919c9693b2e85ee3bb9c46203p+7Q, 0x1.8b69de5718a09e2e84dbb4686bcep+6Q, -0x1.15b78c90e783729339c279a7a26bp+6Q, 0x1.8188b8db550fea388993af5f214fp+5Q, -0x1.e03c011f666ac66011ab6c26ae29p+4Q, 0x1.12ed8b36e986458009c1cf96319ap+4Q, -0x1.36a5b057bc26ecf63126b2eacd51p+3Q, 0x1.3d2641cf67e8fbde6d1c40fa7b62p+2Q, -0x1.11ef148707dfa11f55a24428d5aap+1Q, 0x1.c294da23fe29fd37f9b451eef74cp-1Q, -0x1.4f57e7e05e818e7ff01d8a0db422p-2Q, 0x1.1ebd9964081cf6e9a358f38d567ap-4Q, 0x1.367917f76eee2f07742561edeafcp-14Q, -0x1.fdd37749c94d91b95e4c419dae2dp-10Q, -0x1.0fc0733cbc7d657bb2162af22ff6p-22Q, 0x1.f945fb653cfda9182e56ec03c70ep-22Q, -0x1.fb1bcfae6e46d13bafa847e0d908p-34Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.a308ef1d16805759614e47ced45fp-1Q, -0x1.1df37cb20ef6cd526bae886688ccp+3Q, 0x1.5a47cc2daffcb2cf20f8cbe23f9dp+5Q, -0x1.e7cc32d4c7f05cc178a92423af38p+6Q, 0x1.ba5aa6f58d154790fde87c08c1abp+7Q, -0x1.137ebe2556bb5c31390bfbcc3555p+8Q, 0x1.07f96c27b79ba1c76a48900fad0dp+8Q, -0x1.f176d6c3151d8ca65c2069cc8ba9p+7Q, 0x1.0c09a0e0bcb9ff8d7d5ef1548dd1p+8Q, -0x1.12bf0f34a9a5500b54ae9f341239p+8Q, 0x1.de16d55d65d2bb62ec7f100c7235p+7Q, -0x1.8c7b496d3d3fd8274eb146a1b265p+7Q, 0x1.56592506626bc28d37aec7a2a08bp+7Q, -0x1.13d919c9693b2e85ee4209bf711ep+7Q, 0x1.8b69de5718a09e2e84e51d955579p+6Q, -0x1.15b78c90e783729339c94d803f63p+6Q, 0x1.8188b8db550fea38899d2489ef66p+5Q, -0x1.e03c011f666ac66011b7609652a9p+4Q, 0x1.12ed8b36e986458009c8fb08c63dp+4Q, -0x1.36a5b057bc26ecf6312ef4c8aa89p+3Q, 0x1.3d2641cf67e8fbde6d24a0c08316p+2Q, -0x1.11ef148707dfa11f55a9bad8158fp+1Q, 0x1.c294da23fe29fd37f9c13ab439f3p-1Q, -0x1.4f57e7e05e818e7ff02709327119p-2Q, 0x1.1ebd9964081cf6e9a360b8a8d058p-4Q, 0x1.367917f76eee2f0773ffda2dee7cp-14Q, -0x1.fdd37749c94d91b95e5811e014fcp-10Q, -0x1.0fc0733cbc7d657bb2812f3ed59dp-22Q, 0x1.f945fb653cfda9182e6054d0438ep-22Q, -0x1.fb1bcfae6e46d13bafafa99aa27p-34Q, 0x0p+0Q}; } if constexpr (order == 14) { - return {0x0p+0Q, 0x1.74ef139ad4e11f00f66e50f0812ap-3Q, -0x1.fd9d32fdef73fc52b4e1aac15ce8p+0Q, 0x1.3320f17be8b7073381f61db6e694p+3Q, -0x1.a9e31dbd98dd09635b204c104094p+4Q, 0x1.73dbdd38a87f5064434afb97d3afp+5Q, -0x1.aa50f206f25c72a99ccb3ca40e39p+5Q, 0x1.5e48ac9c2f1f1eff351bab98be85p+5Q, -0x1.20d7a78e95ecf57e7aeb50618786p+5Q, 0x1.4350b94e5aa2da50e62a1b36016ep+5Q, -0x1.5499ff05228ddd2807d9b6ef1056p+5Q, 0x1.0d8c7214ffee0a1235c0b7c3c0bap+5Q, -0x1.8fe88996cfa9a5515805a5fa2aadp+4Q, 0x1.63da6bffb7322ee61ea230916038p+4Q, -0x1.24223f5c1b9d9506d6c2601299dfp+4Q, 0x1.7851e19176715ec2bb51da095d1ap+3Q, -0x1.e4fd178fcd0ef2f7356543216bcep+2Q, 0x1.610a439acb28979c59046810bc68p+2Q, -0x1.ae4c3e147b71c29486543afa4302p+1Q, 0x1.a6fe28ab7ffa991086da6716cc39p+0Q, -0x1.ccc920f98175dd579809ace45452p-1Q, 0x1.f9389387bff6b354c94c19c46a5ap-2Q, -0x1.8612de961fd0228a7f6974df4498p-3Q, 0x1.fd43fc0e7883ee43ba9b27c30441p-5Q, -0x1.aafa1e0c4a86f88db623dcf8b499p-6Q, 0x1.b638737fa8e8eebd49a0e1375a7p-8Q, 0x1.071682a1f5057e2143bccc924ee3p-11Q, -0x1.a84c3f530239b63f7db3d411d854p-12Q, 0x1.a20c2374a0f67000161244836cf3p-18Q, 0x1.e7f1c0adda0f62adb6884d961058p-23Q, -0x1.eb089a4058efe658e6fb3c8b8fp-34Q, 0x0p+0Q}; + return {0x0p+0Q, 0x1.74ef139ad4e11f00f65daa8820cdp-3Q, -0x1.fd9d32fdef73fc52b4caeb648516p+0Q, 0x1.3320f17be8b7073381e865362afep+3Q, -0x1.a9e31dbd98dd09635b0d379485c8p+4Q, 0x1.73dbdd38a87f5064433a350c721dp+5Q, -0x1.aa50f206f25c72a99cb7b1dfa7d2p+5Q, 0x1.5e48ac9c2f1f1eff350b14cb6a0cp+5Q, -0x1.20d7a78e95ecf57e7add31db3fd2p+5Q, 0x1.4350b94e5aa2da50e61a74e27b2cp+5Q, -0x1.5499ff05228ddd2807c95d8259cp+5Q, 0x1.0d8c7214ffee0a1235b3874b3a3ap+5Q, -0x1.8fe88996cfa9a55157f19af30b98p+4Q, 0x1.63da6bffb7322ee61e908c187b83p+4Q, -0x1.24223f5c1b9d9506d6b401adee8dp+4Q, 0x1.7851e19176715ec2bb3ef2e77d74p+3Q, -0x1.e4fd178fcd0ef2f7354c8299da37p+2Q, 0x1.610a439acb28979c58f2b0d330cdp+2Q, -0x1.ae4c3e147b71c294863ea12a0857p+1Q, 0x1.a6fe28ab7ffa991086c47e322a6dp+0Q, -0x1.ccc920f98175dd5797f1c22d8029p-1Q, 0x1.f9389387bff6b354c93278385205p-2Q, -0x1.8612de961fd0228a7f5532d1edd2p-3Q, 0x1.fd43fc0e7883ee43ba7f30ad9465p-5Q, -0x1.aafa1e0c4a86f88db60d4f1fa17bp-6Q, 0x1.b638737fa8e8eebd498a75e7c49cp-8Q, 0x1.071682a1f5057e2143b4d72fc7c5p-11Q, -0x1.a84c3f530239b63f7da26929d4ffp-12Q, 0x1.a20c2374a0f6700016084886c2a8p-18Q, 0x1.e7f1c0adda0f62adb67917e7d654p-23Q, -0x1.eb089a4058efe658e6efa5db9e34p-34Q, 0x0p+0Q}; } if constexpr (order == 15) { - return {0x0p+0Q, 0x1.31c729360063e0149d5c21a7efcfp-6Q, -0x1.a21aa8a66a6833da58113cf2bbfap-3Q, 0x1.f656a46fa2a9169e56d7dc88f3edp-1Q, -0x1.589b4fca92a9f10523315f53d228p+1Q, 0x1.25049558932c1a7bf948af8c4d53p+2Q, -0x1.3b0f087615a2680943285adb90b5p+2Q, 0x1.bed87f332745bf792ba1df447904p+1Q, -0x1.37fe75fa2aa3b693bb4d2b4c5752p+1Q, 0x1.75c34ae38a11fc314406fb081d96p+1Q, -0x1.9f32b219f201f09e837dabeb3924p+1Q, 0x1.2a50b5ebe798e437ef1f44157963p+1Q, -0x1.80aff2523d4b3342a82c358ca6abp+0Q, 0x1.71f9af43c19f0952a4d93db93c54p+0Q, -0x1.40d21595459cbd8977223938b804p+0Q, 0x1.6edc3b8de7cbccef39a51cdb458bp-1Q, -0x1.abb5cf29e076b1f30f2dbef2decbp-2Q, 0x1.5fdcb9c5e1f87c285afdd98f767dp-2Q, -0x1.af4e9b9242255620df43c5f22d7fp-3Q, 0x1.57b33e4d63cb5298c708e6fd316dp-4Q, -0x1.736294d370dec79efb385dfdd9c2p-5Q, 0x1.e1a61d7964668ec603c20655891bp-6Q, -0x1.38138139d6cd8275efff1464190ap-7Q, 0x1.a99b874715d59140bd38f0c805c4p-10Q, -0x1.191ada841d111d8ae180fd0e9563p-10Q, 0x1.44a23a1750afa85a3000e1c75486p-12Q, 0x1.4db128e094987961ef3da6b416efp-13Q, -0x1.2cad37f3dbf9e7a2353f8dcbd256p-14Q, 0x1.f38c667f694821291da05561f948p-19Q, 0x1.c870773604d02f72b6510873557cp-24Q, -0x1.cdd01a024c710ef11bd7cd0b9b3cp-34Q, -0x0p+0Q}; + return {0x0p+0Q, 0x1.31c729360063e0149d619e7c5659p-6Q, -0x1.a21aa8a66a6833da5818bdb00dc4p-3Q, 0x1.f656a46fa2a9169e56e0e1915e67p-1Q, -0x1.589b4fca92a9f10523379245a6fbp+1Q, 0x1.25049558932c1a7bf94dfb345bd9p+2Q, -0x1.3b0f087615a26809432e1d6e01c8p+2Q, 0x1.bed87f332745bf792baa46fb22d3p+1Q, -0x1.37fe75fa2aa3b693bb533ebc90ap+1Q, 0x1.75c34ae38a11fc31440e21813692p+1Q, -0x1.9f32b219f201f09e83858382dcccp+1Q, 0x1.2a50b5ebe798e437ef2503085768p+1Q, -0x1.80aff2523d4b3342a833db6031p+0Q, 0x1.71f9af43c19f0952a4e07472578p+0Q, -0x1.40d21595459cbd897728656ded6bp+0Q, 0x1.6edc3b8de7cbccef39ac5c5b8452p-1Q, -0x1.abb5cf29e076b1f30f36686df3b2p-2Q, 0x1.5fdcb9c5e1f87c285b04c2fd8053p-2Q, -0x1.af4e9b9242255620df4c3ab9bf57p-3Q, 0x1.57b33e4d63cb5298c7100384e3b2p-4Q, -0x1.736294d370dec79efb4014a700a8p-5Q, 0x1.e1a61d7964668ec603cb9aadd499p-6Q, -0x1.38138139d6cd8275f0059b0302fbp-7Q, 0x1.a99b874715d59140bd445bce9797p-10Q, -0x1.191ada841d111d8ae1875d5194c5p-10Q, 0x1.44a23a1750afa85a30082caf581dp-12Q, 0x1.4db128e094987961ef4278d6a462p-13Q, -0x1.2cad37f3dbf9e7a235442f3e067dp-14Q, 0x1.f38c667f694821291da674a42ae8p-19Q, 0x1.c870773604d02f72b6568dfdd8eep-24Q, -0x1.cdd01a024c710ef11bdc57da89cfp-34Q, 0x0p+0Q}; } } #endif + if constexpr (std::is_same_v) { + if constexpr (order == 0) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.000171316851323746428212831421306300113678607875446348503559419927437918383967"), boost::lexical_cast("0.0361088272946006985912064934900062644165629414989774122809757345902866027938"), boost::lexical_cast("0.488256992843695840962159179639502910381980307460695354580458818691887940645"), boost::lexical_cast("0.769737672515207083007430504821028844267689308307112651993923296421178108389"), boost::lexical_cast("-0.453126925329274055451166333557401859659406793270554665033541123983449765432"), boost::lexical_cast("0.256628058814639987338137180313733199002175042843789042052759470470604205726"), boost::lexical_cast("-0.163454122854003496557302427492278171149085655394974230532183221080254700021"), boost::lexical_cast("0.107723422859916997108276817161022290367504837432994030942098049009089713930"), boost::lexical_cast("-0.0649318249233011704784968686914491012172054359333812436767935404371230620232"), boost::lexical_cast("0.0326435377329051629426715185593256884476167946008041064239605220708580188240"), boost::lexical_cast("-0.0127409361375573448882342299469851670195888311206647480453026814799719677344"), boost::lexical_cast("0.00352196549620161398967203337357383200834551341224048951969904909167613097889"), boost::lexical_cast("-0.000534217142003219306131911092756991844459258563640870926150016500754364314332"), boost::lexical_cast("-0.0000405890411165595317643619001506764641287318490078309353140855497110673976431"), boost::lexical_cast("0.0000498095041023299888778042223185543062245836773367960445465000704315159966296"), boost::lexical_cast("-0.0000151266310013612774856135240041061222014350088021428301604611262734516728901"), boost::lexical_cast("0.00000196962302501772214722461685124074719608921063431828230431618407481183902342"), boost::lexical_cast("0.000000307419811865464641941041529634159778226115669718094511609235500455794645613"), boost::lexical_cast("-0.000000146711526898488736937232395914501861484051305606502624138556023532223617309"), boost::lexical_cast("0.00000000469170321491953908065098991723043621408692762756980179169088515131858959747"), boost::lexical_cast("0.00000000312109588324696299578629133466134546804934425652317350217208685069513949015"), boost::lexical_cast("0.0000000000129567198099448561278298370512360354984106954815513505005111818553145714634"), boost::lexical_cast("-0.0000000000116427529260004024077348030611493564888124415305981619797224470056679948811"), boost::lexical_cast("0.000000000000238326595578192588974326088085766915138526617008998625640603860278073091204"), boost::lexical_cast("0.00000000000000244742730302692510517546840958886727657274951555813495950007886554971190043"), boost::lexical_cast("-0.0000000000000000770600420494052668960125627196143256619852875376018693997338520252928378898"), boost::lexical_cast("0.000000000000000000422698076320704793842624462462122259676671218339643878393761622611533681352"), boost::lexical_cast("-0.0000000000000000000000986091681636424791402346661562732411914581846543827917931134779717124541059"), boost::lexical_cast("-0.0000000000000000000000000126415071901335517823653751264600698935766480825324951588072073703511279792"), boost::lexical_cast("0.000000000000000000000000000000000377103451930012080634362697114829703633218765482534208185011848812515552568"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 1) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00133579806419009115196675706637156796250602084906080838786026804834468971451"), boost::lexical_cast("0.133464030083480084488351954591647717793838350786372177549592743667488710460"), boost::lexical_cast("0.777392827221672586310666248128747829200320493773819351137332467588231583243"), boost::lexical_cast("-0.801230717758959652961918527009129684833274859723487119504590846793863335812"), boost::lexical_cast("-0.426666784652518489250422806683556250288833676277503213685236945222428885252"), boost::lexical_cast("0.571957459622602012169769841907390760981552952793047182594349400518281072515"), boost::lexical_cast("-0.397457250920213664316589385904613867162187759231452008713125765190307200547"), boost::lexical_cast("0.186033305489426000253295545948948513398939530758207475017080180368379398183"), boost::lexical_cast("-0.0384747679059492805673916579189810661778669575642656012980830136829451472564"), boost::lexical_cast("-0.0241860357552808869059750766214192783314611864202213790162280116456669700270"), boost::lexical_cast("0.0288198897744401662329162080788778906001500235821576069533309114033731355962"), boost::lexical_cast("-0.0142526963839655487645868201986010179113871984727712950466970890939532437287"), boost::lexical_cast("0.00336296659876176824397694271542208875883948628180586907906711210463700136985"), boost::lexical_cast("0.000159566153593696861386281086000847690312020416646262230382754818302321719438"), boost::lexical_cast("-0.000309307263435472022314536922703140898276518864598497490064213305898284747610"), boost::lexical_cast("0.0000325961537538155977461153441016758163050507356702941089478538114352859222854"), boost::lexical_cast("0.0000290247635542117698570144977074207416731978843448666289133343239852468689816"), boost::lexical_cast("-0.0000110608868168013164312795909662150842245074396074718805254622442187665703898"), boost::lexical_cast("0.00000101464961764211094555255572688179572800548750891083281483490440540837760392"), boost::lexical_cast("0.000000181575796575106178569931388126652092356228605369118455900710625612685300521"), boost::lexical_cast("-0.0000000403715350553834157466382021922715956137169052960785956913878496250614284899"), boost::lexical_cast("0.00000000171544844106973826322799913004035593507782409764976544917598966515593650516"), boost::lexical_cast("0.0000000000451755267309694366768252738364162154259717215355595513364624281739328028806"), boost::lexical_cast("-0.0000000000129802294066363039747634462122684813596696625800552726940142002601766408318"), boost::lexical_cast("0.000000000000138996891829717676890440608071964520497157312831377423601945181405496090684"), boost::lexical_cast("0.00000000000000347738382169564687828118552109166638991744665362295779616649639285729819837"), boost::lexical_cast("-0.0000000000000000114717366932132278311818016897232315223329690486333509730375898406349099958"), boost::lexical_cast("-0.00000000000000000000599799090330095203536315142157704385751706823140887377206448675107156989932"), boost::lexical_cast("0.000000000000000000000000680498581094669635360619813975423231834669537307635911669206391386823114209"), boost::lexical_cast("-0.0000000000000000000000000000000405993437164566724529315224811697049713922457638122491969890878584620874206"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 2) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00907504496732640314944688849486681911170876832663177666164174959468906643803"), boost::lexical_cast("0.403693382156658974454216765797474206766624418327280399905409355427011080214"), boost::lexical_cast("0.271595976047908300146227934593263488450798813237955930924729605110240403784"), boost::lexical_cast("-2.71466891756329191846888796871430523337714028235285198760495724403435013146"), boost::lexical_cast("3.63352358803570678788478060023534112555476154451350510970246835738280509121"), boost::lexical_cast("-2.78898072726975682640228727618234727138388953315526188172240636749159256228"), boost::lexical_cast("2.03975077410817374151183520926644188466298014618670416662972210485960248730"), boost::lexical_cast("-1.39631704154228509023706369056571803134772531763393599140130182392659436684"), boost::lexical_cast("0.819427034497158945142654966863542712206855345194448346903634159296239630598"), boost::lexical_cast("-0.383404119723578321449814608400708917510598449828088961243589855149596001885"), boost::lexical_cast("0.135338714135930963195025224311403350634380005187589310729670665679985290100"), boost::lexical_cast("-0.0345824240315870800399189191226465109691714421609307243691766680673623150574"), boost::lexical_cast("0.00611109252646139447895469481926612685642577266141459174233983728056045874462"), boost::lexical_cast("-0.000156732873630400332452745828101813648998758607431152977455922938360286361652"), boost::lexical_cast("-0.000799472830647854921185434616224208697749055953896801846063825566821972723190"), boost::lexical_cast("0.000535969002468135628001789755566345264258267679652530938019113713661289348208"), boost::lexical_cast("-0.000157384549414717885084996140216171026329363074442489876604893016989401039526"), boost::lexical_cast("0.0000129171554337007654761147781184602376979060587640275295086289574304678711395"), boost::lexical_cast("0.00000235891742489546284645209760127039465129319583273974596760329794893748689585"), boost::lexical_cast("0.0000000916355305976574852247317081462867277633622646780812044187106843272112326405"), boost::lexical_cast("-0.000000111762055600082304510067275185623693221628140706419356829204316323573355820"), boost::lexical_cast("-0.0000000126047973860633771018680395413773434461601001774651486849360410809332840361"), boost::lexical_cast("0.00000000154580154095772067092661818331346769426075368407031625141514557326211824376"), boost::lexical_cast("0.0000000000185949656985422215139801744960422197149550325212978585262596149007208130605"), boost::lexical_cast("0.000000000000475656161103013775576836068201182321050146685578942140172354013017630940520"), boost::lexical_cast("-0.00000000000000964424579936565782431696216162300377942338427905223389622237003668698745504"), boost::lexical_cast("-0.000000000000000162097483836675470258977768421201321419436509333952009353262345869183739617"), boost::lexical_cast("-0.0000000000000000000686765701841635939050965407015716594433862441435219008736510985170543518442"), boost::lexical_cast("0.0000000000000000000000192520645691275200631994551227278033106343644450467270809557380021147426532"), boost::lexical_cast("-0.00000000000000000000000000000229720301797888422217182338458254109542893787274416640198192653932982382539"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 3) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0524753452804691735477738251517009853016979362519517221207312376177764782969"), boost::lexical_cast("0.879968733813233322230074392947552628565967066414165711760276698494844390125"), boost::lexical_cast("-2.74453159899437732175018000055779377712653677438008754872020488131059119320"), boost::lexical_cast("1.80360353176224527101835802230946052421659096363090207129121849285840468259"), boost::lexical_cast("1.96666354532348341330633181326044172915860234894700083373343277220577971735"), boost::lexical_cast("-3.73070092873449595291889929112197581304463119652084787245047615859331130715"), boost::lexical_cast("2.42984724824215839353390105174821482301107399626250856007397139446613345585"), boost::lexical_cast("-0.277322631367784241585872795091101589798351228341158053606520050000850391984"), boost::lexical_cast("-1.16919259864499295419145746896607736986733203837630984609448122373016720827"), boost::lexical_cast("1.39016950402094561654444812940516530484537994331951170078343059431705063505"), boost::lexical_cast("-0.817574132321601018212216995379856653768755317510857634630667447972613443467"), boost::lexical_cast("0.190018473449379212093490515862790233603734487245387060360549170220720527831"), boost::lexical_cast("0.100241083602577673991999687326956519174898192619719218177625643190688840896"), boost::lexical_cast("-0.110015365802528313698254717873775724459189967181830195015949587831350610756"), boost::lexical_cast("0.0416060467568914386443724185616672217060437647984160864439680078935440524035"), boost::lexical_cast("-0.00245435974160983337464675102356272887367440646869277382351633348615279833109"), boost::lexical_cast("-0.00443062929513058573083346981678078784735168535836855152956465826632431223593"), boost::lexical_cast("0.00192644595259837997265354752663163334685724941492449191301572332061212680367"), boost::lexical_cast("-0.000286252108033456570905469351445678979854820611278948347680038000227240824154"), boost::lexical_cast("-0.0000237541414511668265954922688834169477800802817148790300058634367070336055647"), boost::lexical_cast("0.0000136482469252724735030504787827046649952988816328627069135194335843416601041"), boost::lexical_cast("-0.00000131861141712690876615365340120264536061804975586109036631891707678386628591"), boost::lexical_cast("-0.0000000473486085383219537439492823717115126567852265733507953095631575087828890796"), boost::lexical_cast("0.0000000107671154662516331418850350729831199883227731812375998404087097072976836721"), boost::lexical_cast("-0.0000000000995866077139100400870850073442653083344654813486051402700610836989945821329"), boost::lexical_cast("-0.00000000000644585749433741211569153851347580280472182636866394478917140428098212069667"), boost::lexical_cast("0.0000000000000403351073771297890412924077239685188093056035814882459390662060096671857385"), boost::lexical_cast("0.00000000000000000659252152542076182761062902783690995247798500608023765240694648924331810668"), boost::lexical_cast("-0.00000000000000000000960845271049957763593097408492741398950372383171287599580336659389110633204"), boost::lexical_cast("0.00000000000000000000000000229301073796668864262563070071270109124544905677035858311033933294273314683"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 4) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.250153349334599315252252388126799299269205865296558881938205954482634425962"), boost::lexical_cast("0.728403268974963829703458458071470050940885133583732803633168550716310693177"), boost::lexical_cast("-7.31293553717675839320538206374566119063264654529238980016770942275333057680"), boost::lexical_cast("18.68528838602266775292882053961758029216187265423226470274612731462272361220"), boost::lexical_cast("-26.26201351114432524894573270494314114413810106786511729006960444976330657170"), boost::lexical_cast("25.63029290762557459998254683581314951053365051306913942327754105908104915980"), boost::lexical_cast("-19.55120591041754554650107676016020601099463018398879255525071777101622456320"), boost::lexical_cast("11.38828805991210130161237386775166797562787000397306556310659987606493988010"), boost::lexical_cast("-4.30283228500638291198113772321275270873046197281267419596706014023411466725"), boost::lexical_cast("0.916846332667450611187893927561003746742522420503995679541446843858673884695"), boost::lexical_cast("-0.945625534103851129678007688099239113134137817655559774710855777516502347910"), boost::lexical_cast("1.89515793182939656979518906226485738613531079677925225755026655593370960082"), boost::lexical_cast("-1.93021100594621881524555259846350558417500093095145605126078231465409489372"), boost::lexical_cast("1.12168634735032240026321692944283569195655093165680965383861531031185719852"), boost::lexical_cast("-0.336457302755550977576916271285480607975977081669910226236184937860992298991"), boost::lexical_cast("-0.0126426202740467393304674214034871452929934964899914857227809055709449712216"), boost::lexical_cast("0.0582059974257001233798447456344149565398178531031451066540415121870578243558"), boost::lexical_cast("-0.0246013214406903516120171910897552685116442802184487116944341538415325680043"), boost::lexical_cast("0.00411996064777101316931682571931078586923686158543745182753395278198530764373"), boost::lexical_cast("0.000291779559634866855426419087305363632521209937998931712658121173823485969925"), boost::lexical_cast("-0.000239701704903312956607867825407660197652926764025390834805038196728688308116"), boost::lexical_cast("0.0000295826390590035655056112200057348642111500715341367896808394225854268570663"), boost::lexical_cast("0.00000112791496012934939362671595835297640696200634426263650389034453900171789361"), boost::lexical_cast("-0.000000305425386948880794569641314813535348968283260910445455462866729010610312003"), boost::lexical_cast("0.00000000323553114835699703688881035252953349590896466534687900103865721438408552054"), boost::lexical_cast("0.000000000258122376607866610987411018878425618791837110136955492805044321479509589635"), boost::lexical_cast("-0.00000000000219450790662654304491928786757425834815059646115033341354646744288934919567"), boost::lexical_cast("-0.000000000000000159236348311539532630177443070999135468225820289422009164997153592635443466"), boost::lexical_cast("0.00000000000000000104656532906862901171727858795431981501763265514191943218716516961575846913"), boost::lexical_cast("-0.000000000000000000000000499516806365011687457115487988706495932857454344801314889510253590960148386"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 5) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.948918860081173023486878449541710926994880432689837974961014397406181264670"), boost::lexical_cast("-3.81166631126650312996004125539249329519725796000525742386348292571081819916"), boost::lexical_cast("2.78299808007697130717152451621473328395694372256303981775622804889029881229"), boost::lexical_cast("12.37395820093160240345825282236635205331906106919047160212092164049284839100"), boost::lexical_cast("-39.16766321350906531896872834791517677824323075070438683104809495173394326760"), boost::lexical_cast("62.79955451772214024240382060087062426787397929319295079601210237275121712680"), boost::lexical_cast("-74.37662754095149895480040703763760620711511291610626181895862800609093747870"), boost::lexical_cast("67.23730480057039248447342118422920230943504437004823887131700745396390082610"), boost::lexical_cast("-23.08265385699185215685260119277430566259281075316203981240706774938023666940"), boost::lexical_cast("-68.84915218133284171164114487633189831096395205709886147861137522063085837340"), boost::lexical_cast("175.40444464090045806415168932366102695577037312699033623699052962519622077400"), boost::lexical_cast("-229.28074286375890467633294993254440174269835310543834526028533785864822388200"), boost::lexical_cast("193.83085133958977511845883119454638599531183632122825347548271736828828668300"), boost::lexical_cast("-103.39169380112586043483075412413138934035348978763581785737531822374487802400"), boost::lexical_cast("24.09750044484111524536729862648168444109977342535349604249164282561465455780"), boost::lexical_cast("10.45216979380374210587460533102864566884224012655559338370841906137296941750"), boost::lexical_cast("-11.99151005263756363002508198337155102952159028098769603630967872540787513590"), boost::lexical_cast("4.84554994331741826783417472084829739722607030792844096956440587496738411823"), boost::lexical_cast("-0.761710410994668509466406853308159275909502383230971027854958930856015369067"), boost::lexical_cast("-0.124209524454545658676627889167517050395399779084274645999974675911672746289"), boost::lexical_cast("0.0744221639771051463314174298022584491868353705194585772380078427077920515089"), boost::lexical_cast("-0.00983319049696390510116538964560712881930733797491178109985861752053037330480"), boost::lexical_cast("-0.000346590936489614878108837586184646026813106498935784307571500760640790704534"), boost::lexical_cast("0.000139766775489175116907285138350503430979371922048966698178677524730163900835"), boost::lexical_cast("-0.00000284583528087152912455876731878039503894920609382383306623061678825974042090"), boost::lexical_cast("-0.000000170191243809068258319726930807249987074459356894402421753166625042558224671"), boost::lexical_cast("0.00000000189502643796773771078878563475104632826265649607597910973035053389210254464"), boost::lexical_cast("0.000000000000875159779988110397841134172673233828490501760246058591460605371182339054825"), boost::lexical_cast("-0.00000000000000179974686472459484619567373444439533680836492233083181824874458737160102214"), boost::lexical_cast("0.00000000000000000000171801697948722978384418571523357254435734351358127403605526786536558291798"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 6) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.72080556004295870927948424445222388100259573295765738309696540518313358664"), boost::lexical_cast("-20.35486605481687082915848974154624621834658263785879525672648653134317139910"), boost::lexical_cast("70.69361844342337341827651301058270782618285357205640682781626444606188387450"), boost::lexical_cast("-157.90067201133162316239612336927048444714935472994185058634807793776069875000"), boost::lexical_cast("273.19822200505440746851580897502900411638483947712679427834499734688751603100"), boost::lexical_cast("-419.19564866352573545746821411474547215410128530316966417749138435741251020600"), boost::lexical_cast("599.84609690090711287694432739982078555920467552320725430638045237415518597600"), boost::lexical_cast("-775.73303631488442783947171088475881408364372009796884367795062491210589677500"), boost::lexical_cast("867.35358450953923058123434268208131384207780232732818873949031917800169735900"), boost::lexical_cast("-826.95465375065970699136161187085785345289352007444881210861847791029287195400"), boost::lexical_cast("682.30445844031956022343618018820158741773280156063117441757258118184658256700"), boost::lexical_cast("-489.58797447319361281730621439860073553304564691478746587385050469768692568500"), boost::lexical_cast("280.41641455591206428665542158114941187595434907081896095846035277563013174300"), boost::lexical_cast("-83.87530313006339392205670404100927251009153086911120664987656189069922028960"), boost::lexical_cast("-48.57290602853936778598444588838000320319188797120667088890627817071006819220"), boost::lexical_cast("86.48401303861623414105279810601960248737236193164692484110937025080244348070"), boost::lexical_cast("-59.34749838115491965382974741024204031184960541600602452546612244205852115450"), boost::lexical_cast("22.12683829000516493499208689759136028373805834965052266237848630047551885400"), boost::lexical_cast("-3.06820705468851142387494397352111576035038520405038204822630392926462913822"), boost::lexical_cast("-1.01844918784056167247769356011865100548861696497532359778154988643933299720"), boost::lexical_cast("0.548390155052322116601605108703391030814361014039987127607247780249699826925"), boost::lexical_cast("-0.0821665399305853726866950173051458732522788040166080680936985410341364899325"), boost::lexical_cast("-0.00259076138957212819580904996053947215856595645621290484740534408016060849032"), boost::lexical_cast("0.00158184168192186218699552573165552035786412989560027541837371028175219359299"), boost::lexical_cast("-0.0000486427797988048217823553064360225239762325535402325453015988941445205147689"), boost::lexical_cast("-0.00000278733673658518296782298192418270556801753284097037387222408724354826075481"), boost::lexical_cast("0.0000000415493043046997178773581906387206851820091297524869075078083888063058100083"), boost::lexical_cast("0.0000000000318481755988583873479575641293261720504490443808109780404429573043006066979"), boost::lexical_cast("-0.0000000000000786533511511639686500635180600662013025908347693905569053412273585440000541"), boost::lexical_cast("0.000000000000000000150164678504192250638011216866493543394290529002160876206865753397561385614"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 7) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("6.14186178805038248389630463226453535538160220630273168999055179268700878311"), boost::lexical_cast("-56.58718775023035303740954199011503276263410041781331860722827039023288201390"), boost::lexical_cast("236.79056117034701253831145295400349362659332673554984369468013095569697737800"), boost::lexical_cast("-589.74212764744550791699351051034231997851066299588318672773755627012133999100"), boost::lexical_cast("955.91771747407523740699612277021093282646971930388485874767008345752406868200"), boost::lexical_cast("-1018.25371372134704439175662005189756423202874621778366040811852543575681051000"), boost::lexical_cast("620.16534974073328124363357805606821825717843510348080668139769912997493261800"), boost::lexical_cast("118.09513214016409343018299161962983559825963510724745846686457205186992634000"), boost::lexical_cast("-1124.17593601667896107495596149804572042346983911263262865208494201555643863000"), boost::lexical_cast("2481.05019825971494606026459932673050920844604853044544044249826635533039896000"), boost::lexical_cast("-3958.72656316717252768182437149784469578445448081086451227500629910596142977000"), boost::lexical_cast("4892.08038810778226650447637979773553060005455552013373826491377287611549607000"), boost::lexical_cast("-4888.02985912371580185159900968286792361495832247558286519513525186654679328000"), boost::lexical_cast("4222.21851392745950660685593080126541478731847689276755099970578373193227197000"), boost::lexical_cast("-3301.02739698605769321367226000985199110976449700946791984290949429902919623000"), boost::lexical_cast("2249.11165074697026237037038692307185505620568793949311249024089637097353635000"), boost::lexical_cast("-1187.87398664007835892158563773173750314639645000950438376922380430030480509000"), boost::lexical_cast("398.94177525756891966681160860599524375229162312548764259215104838155477665200"), boost::lexical_cast("-32.92289515108174067117397420787028784793135289819773804980403784424237633870"), boost::lexical_cast("-38.90071447021924707376179244031261113671069629451701962465484487047604238050"), boost::lexical_cast("18.88702183332856460379524735396940221841668334008996536437289731073857378770"), boost::lexical_cast("-3.13472910313296479389678303201845822338839740930736804510308660361540192213"), boost::lexical_cast("-0.104405285224584684173481804595561114177382914767308859899431383064024115571"), boost::lexical_cast("0.0833671470549304163921288867140169654715033486774418851176340785841513622562"), boost::lexical_cast("-0.00381467578864364562968701846853701311666229039725704435440024110934078146310"), boost::lexical_cast("-0.000212300699997037803249607997697918026005513531720485603301750991443816531034"), boost::lexical_cast("0.00000444054082400028863949114022229769838935441151556537774085307875568116728653"), boost::lexical_cast("0.00000000509993859755275328806308874095727887214819535696251443253417433071486761002"), boost::lexical_cast("-0.0000000000167399975134582079218262940873121039789400471542818329635957062341003441119"), boost::lexical_cast("0.0000000000000000639212147850254313089119430941095253920739364313765534055842450107396358145"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 8) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.87573584867024438192288359005520927769283739845626908320402959675129181181"), boost::lexical_cast("-89.46249563427999259136175287546983385362056330272761288548978010797275886190"), boost::lexical_cast("413.53699835747096831461960515667083330041243777158520357367773071672954421000"), boost::lexical_cast("-1171.13814794944060840954109636487013129118793177524654224322494272585137735000"), boost::lexical_cast("2318.63986015396571592184876974869163171162613486972744615164020031916734488000"), boost::lexical_cast("-3550.00082837270164131331314150441834830049599401355505132632489796798446179000"), boost::lexical_cast("4641.11041485509138580464243430685343405509172986351525682383304436384521680000"), boost::lexical_cast("-5574.31228403733210075849705237883208794074944113113868870635833735655518388000"), boost::lexical_cast("6213.63809498218005198867412543832867815767594736394946861528827045454364892000"), boost::lexical_cast("-6270.42945837810044547764288676694403309477382977177928731847017182750753511000"), boost::lexical_cast("5712.25416364615036894363595935332173184639280691157188990767737995783827699000"), boost::lexical_cast("-4793.66410435252078277013910846939514432498915716171347756825555965008446551000"), boost::lexical_cast("3701.90566377778244662006515118308691363996241871472358316732096914372421991000"), boost::lexical_cast("-2545.73002939982681324232451707199314555811122671561913141889937616476059628000"), boost::lexical_cast("1525.76211545671409952881904946874414887615701953904066966165263931990216324000"), boost::lexical_cast("-799.67600361393244423210153323478015290110022742899088191532821628208931108000"), boost::lexical_cast("343.71466120684357322054217074049470228013278108322582312246908268821531549000"), boost::lexical_cast("-79.54296988918714825182831271113602645818430801267882016130158946025000070880"), boost::lexical_cast("-31.11742247721594622537736075250551303862928746280885436044292583853573827770"), boost::lexical_cast("39.24534373830708704714957239063819401930019800422830284025236588588276304120"), boost::lexical_cast("-16.49801465465629310378163586594498701051184640106636079791958143499072398020"), boost::lexical_cast("2.86471589853451505092762387909842635954128523779170775248876357690346385928"), boost::lexical_cast("0.123177932504841138584100462602213000414409636861317554953311729819152981937"), boost::lexical_cast("-0.107313432588339694252584996265922811157032804886175374104426839751272364880"), boost::lexical_cast("0.00773540599618550353141393406195746669996857798924014596151059620636703068705"), boost::lexical_cast("0.000403128635241149243596335554099377174869092597389189451754820571281078679507"), boost::lexical_cast("-0.0000121750336610624680031947143595873921578210617486500364426723519144528821747"), boost::lexical_cast("-0.0000000221216095903365985949388422841378231674809606300993758039913686908512670984"), boost::lexical_cast("0.0000000000911028045352580286145166937280851897647011765638383494849691163731056620327"), boost::lexical_cast("-0.000000000000000695776129234608161606962102284274675410179267386907251288229647263547841513"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 9) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("10.77830476909189246875213224644256434851574836114150288979408883932663408760"), boost::lexical_cast("-113.30679847949875283481197239555445238305089613518166263999502351065318841000"), boost::lexical_cast("537.51212592498992595355212803505674673365549040582999946710655984020061098100"), boost::lexical_cast("-1522.29663739785441603519129487498101658679127253026107709485943801614900510000"), boost::lexical_cast("2896.78977300861767873975381093516844970516257221777808353633619790702973572000"), boost::lexical_cast("-4053.73263591850224842595039982230587297183053442752128125465336858346975258000"), boost::lexical_cast("4692.16227410427044352689392249627854521349603478803164622820633019994975786000"), boost::lexical_cast("-5127.97602212282174693460907248514758996752003938521226665443443773461217536000"), boost::lexical_cast("5426.20224367656186913233154675879829819354550253827715074695101579354057124000"), boost::lexical_cast("-5045.15898544937188101087562784811147553356778814416690263956287346030906424000"), boost::lexical_cast("3863.31733313644020638644030085749560942435363977228787799940538794012224406000"), boost::lexical_cast("-2539.04417279695725930037661713449400977494982097924738163800547690349669888000"), boost::lexical_cast("1495.95152813312696164796032367069415490408732672326544293608639517256708804000"), boost::lexical_cast("-598.71338111144603167677059201789107648873467499782686184459249005987266004500"), boost::lexical_cast("-140.43812212582941929559905584906021898863758588035667146287549276998098600600"), boost::lexical_cast("493.12064121138670888525270736014297176175068242740057327881696669435953096300"), boost::lexical_cast("-501.64710764067763354144069937731667392246374465461102519748339502452412766200"), boost::lexical_cast("402.04913703308025098584676401156574655968469749939939291725245197030615330000"), boost::lexical_cast("-290.75476575334721451091504764009888592656309571548514827563707050104045459700"), boost::lexical_cast("165.55396459695871034570692084628299088745963671918908584151041422747359826100"), boost::lexical_cast("-61.56613007836500140570535045646327943146923286793207561329066790849269699840"), boost::lexical_cast("11.12724396838290672842395163676983586805573062177784417480776259950013093590"), boost::lexical_cast("0.616550439434153199469147689908320765572732324919216224085798570609031970737"), boost::lexical_cast("-0.614996772254297606838306172301584143891219608321996340606361952393554618405"), boost::lexical_cast("0.0653422092865749098941219576491799499470841617658284880902741473153604810456"), boost::lexical_cast("0.00344468033183476613063821405936170839437245968135759299996161161087759703491"), boost::lexical_cast("-0.000150905890468010880910940122626955537936454095361790792537415847674081059644"), boost::lexical_cast("-0.000000341390266894352391056312753971168883114216701317332621177306336321608604935"), boost::lexical_cast("0.00000000224655412582960893249160250701023608274672603071809480941098000782254450127"), boost::lexical_cast("-0.0000000000000343179206875786428614845147622090553145880464453051733061740197696623777452"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 10) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.40595389327657226503694497012483164362124209823619932408143213509789418142"), boost::lexical_cast("-90.18755588816675228829817416935430178296553880218263006522596252933799260750"), boost::lexical_cast("436.64933048343039643869664274295205972159884268297618856653635883730240629900"), boost::lexical_cast("-1265.24702078863967272446087300490983418244378482038979633311557029559187581000"), boost::lexical_cast("2479.49727416305844438566515309514579938046134972182762000607495793961979937000"), boost::lexical_cast("-3612.22404262013984275650095257916266122615183211172708920604427365997332248000"), boost::lexical_cast("4390.10461803162979442824063337386992495525825588510223744432684369166514283000"), boost::lexical_cast("-5022.12359523964154158524736614172785466023371493789078267642792825970442996000"), boost::lexical_cast("5604.78838183135573305540445463913574361373339338579848172772266429190600683000"), boost::lexical_cast("-5815.18068935187129727737790596258417265132106330711026316076022878535003649000"), boost::lexical_cast("5496.98944474809909883345018624513683552577448320588129783533814897200127901000"), boost::lexical_cast("-4879.68442203485471741212789690616385244300504302852282730946221011631520548000"), boost::lexical_cast("4119.29235509599810627701483024966303400343567833202767250947700453832737400000"), boost::lexical_cast("-3233.36775168650371444115689095291480507860192155181401201543648075525710965000"), boost::lexical_cast("2350.36811503737581431248480830061956015641307301010846976218535988613892099000"), boost::lexical_cast("-1605.19792304130910913657642308517047415091779052762305083384570282636342729000"), boost::lexical_cast("1010.49227947358451800455150244650563573753526087564849242400820565186861825000"), boost::lexical_cast("-566.62005573161101918270073525503120095406475610339310771504079035825340859100"), boost::lexical_cast("285.93792022547194485799602926303040314550718046007817587164843637458151043200"), boost::lexical_cast("-130.27678643673248754523842749099954235730480748012199117865803024394099262500"), boost::lexical_cast("46.38075945039597150032827358523901955451289440527106334217760766144442187450"), boost::lexical_cast("-8.30339600100546654050525461274557456779962476685870904307407201958336470745"), boost::lexical_cast("-1.31140444871530779856774818636439538472323427394561636210886717702287713836"), boost::lexical_cast("0.944443234286201477285280631764338282009445764538235481135279079602176865296"), boost::lexical_cast("-0.120612999220845884841770938047070126476556890469242771667061304639099680352"), boost::lexical_cast("-0.00612240592818620183859019486914162369755180328595090553906554353918907508111"), boost::lexical_cast("0.000501921174446894651071522876884881677798862264257444046312361569076439240403"), boost::lexical_cast("0.00000110015062442341106953762659845461877288849794732582550741170847972381078513"), boost::lexical_cast("-0.0000000149481631455733098677769729640496918070320996170917395536883890913165962523"), boost::lexical_cast("0.000000000000456766795438744131185097599240634110830128913864595728289285533008059188955"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 11) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.71662615388384035490661602572026128251294325475247692177411024734707018748"), boost::lexical_cast("-61.95261947504494240974525516761288737718458065654976960732742872670132713050"), boost::lexical_cast("299.92392362199005365846763014477362358033777481183567437527249031455105143600"), boost::lexical_cast("-854.38454227321882602012934795768021816131020192369607501580124187697270944900"), boost::lexical_cast("1600.36101077653647183632909120922276146512736031345582867483706653247060307000"), boost::lexical_cast("-2140.07738028486081463619489247776891689722101986432309104955433096170807913000"), boost::lexical_cast("2318.24362356424763321295439620892210840488958065858246141680343191186676880000"), boost::lexical_cast("-2452.55551014503575390323183594502097923638970524686355738420251386509103336000"), boost::lexical_cast("2704.76529653278947329663444759952034890877923302103630805132576388538972614000"), boost::lexical_cast("-2747.14673623756244311092333721767148045245885058383000695480413427282125343000"), boost::lexical_cast("2412.08489577605845461832534754288001056964932833568370698369648585962621442000"), boost::lexical_cast("-1983.24120175694784202508820179002467936094914905473739070428929084792886805000"), boost::lexical_cast("1626.87817837800998599505523804923350020881957088925397853144571494720023844000"), boost::lexical_cast("-1235.35137573220290037298796944863432831370478695788713485540725637661419976000"), boost::lexical_cast("821.37287700919909202293078059900314209961592538962184148238624773351355270700"), boost::lexical_cast("-512.36813276364982792979888767414531827457847125018199834823820044378682592500"), boost::lexical_cast("311.53646971596379276316317223887976975287113725456002799972326204795524864500"), boost::lexical_cast("-164.48146424429947905468701694679777546495466959145717581719894831842925074900"), boost::lexical_cast("69.96731728174455147890349889940708552672488525211671432746656999693968225190"), boost::lexical_cast("-26.73871180360852431769728634910008054094567759215735127221449159427110567160"), boost::lexical_cast("8.76604443915764102583091274494705031974551432188167671170993272943904796868"), boost::lexical_cast("-0.362003657126549623871141694778787300536949241545084284403839044422181900363"), boost::lexical_cast("-1.57725852000685070664686477385087762553122190528479055773272661383335169406"), boost::lexical_cast("0.726687291498781501912136314567313444745762140706471235702655842502262486103"), boost::lexical_cast("-0.103813322317258033888614985218841754913997474053598134379424827680388803266"), boost::lexical_cast("-0.00304317984052183404339782146911467997675320910745831815762231114417956519165"), boost::lexical_cast("0.000840398448358251520779467930923617673432444631095231180255579031943245676198"), boost::lexical_cast("0.00000250575256067101292262100569305822521295926652713304136991428596750128740360"), boost::lexical_cast("-0.0000000495611865767157365743127106863134595887690986921006107382476777985767199385"), boost::lexical_cast("0.00000000000302986770281715807340388725183309305879191944670327753347349945452961991743"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 12) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.98756545276892961683405920317400782688926167457213404606206894953469090570"), boost::lexical_cast("-32.53877041522938902748893248611882921380701347287193692458464408872270681770"), boost::lexical_cast("156.91107210642938297454108565759471733768304768928530524781265126236462047800"), boost::lexical_cast("-438.23328456607176854897749709031392294408668236354846841483816529557797373400"), boost::lexical_cast("781.40158298338287783314503913374413961456166368022728026502599517169883168300"), boost::lexical_cast("-944.00085736432437654121844433808421180478044182471803034745876831993387206200"), boost::lexical_cast("871.18702529100316496510657599432732757147821503683438970158984398762342159700"), boost::lexical_cast("-825.26225814663098471936651058959817182597766714375609693318512269093807603100"), boost::lexical_cast("933.10543384295409309368246495330995137453207941551441370036549134265538765800"), boost::lexical_cast("-949.83367150707461495067586025268239472985940864418244218914669709742438195200"), boost::lexical_cast("743.11107879726135141484801469462437364046148934147523506605304654685788997800"), boost::lexical_cast("-527.04406443888294920168702045857144963725142274860553582472478068752203879100"), boost::lexical_cast("421.33852360565335024951901100209978198412810212541506159854671267737618195800"), boost::lexical_cast("-306.02517342943412940702644642463233060183139335286436410908479737189261628600"), boost::lexical_cast("153.69934278480254603223204551372425554980051718272712837279730258851702658500"), boost::lexical_cast("-59.04932850218943944934225606851905428436217033134937163374348351651622137740"), boost::lexical_cast("25.92139276541304973776659197601093424514632883892831929110158475123035210590"), boost::lexical_cast("-0.962149888761450607548667577621856494158643540101329999411575837264452498654"), boost::lexical_cast("-17.01274493932990083951623416795053065446598743948526471513759064128883019650"), boost::lexical_cast("16.30256873151847666122910844100498304960224732436925588411210572182662140460"), boost::lexical_cast("-9.49371814172560994368165179232263581655149629936005381772523795944996123037"), boost::lexical_cast("5.93974208940926161725307281051166656360861938611697972636537005680715438577"), boost::lexical_cast("-3.56482176156890404621445412519261540357391040079386784517365108357090968874"), boost::lexical_cast("1.34272455281915240128955665480521952634664404440227746448796352198622736864"), boost::lexical_cast("-0.230525367745987004995002631304137357183156209105644834496304002576886379356"), boost::lexical_cast("-0.000137794698671713437634696681954243933103735285034498363332772681562760804986"), boost::lexical_cast("0.00344045989823171334589527993003846308427283936104805061708662437757755864133"), boost::lexical_cast("0.0000132013157638346537184564818139969682565470634989172759825885721468788821545"), boost::lexical_cast("-0.000000401010519633852578247631428587627292136452995638469407199569086176144778907"), boost::lexical_cast("0.0000000000490634895829511758823128551590445161881103933303527735015583380577005829440"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 13) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.818427536297577413662164686067597972826506918636591011690333183337912720187"), boost::lexical_cast("-8.93597254540483169304505499620510189518004297750684300492893393884837531090"), boost::lexical_cast("43.28505740826911943179704985609069278737276400385479670313947361507288590850"), boost::lexical_cast("-121.94941265554743093324264638861456116774169427109119662746887892891581414600"), boost::lexical_cast("221.17705504748540968473650066059868951479247074002625157942998465440826537800"), boost::lexical_cast("-275.49508889548757008568001670977657433955615658111585669026893704820453833800"), boost::lexical_cast("263.97430656654945046201101887433086255955773561111355779696585609107954522100"), boost::lexical_cast("-248.73210725434071237643827703257935321449607282648266512518873782422456148600"), boost::lexical_cast("268.03761105163175511980802546399577987927646399395524413177595218195546680300"), boost::lexical_cast("-274.74632577077619559794959711805873055919483442081245207387230106955552634800"), boost::lexical_cast("239.04459659450491561902145275774681231766178202091849139640330374817659226000"), boost::lexical_cast("-198.24079457638428918916507018047876417177573585609523087243911695920766059300"), boost::lexical_cast("171.17411060286929567487650609762363461665749097833059519177248964117986882700"), boost::lexical_cast("-137.92402486238060270403376601148674136697949366488773861402567537082900349700"), boost::lexical_cast("98.85338722312749675832616392395611353702627445403696398493090489812880274670"), boost::lexical_cast("-69.42924715436025679968823314670561196868618424662305178477940854240571797230"), boost::lexical_cast("48.19175883630122313265867563554087765085528907020382930380472297614957949970"), boost::lexical_cast("-30.01464950814868046242052769312726238783217187685035205505179037973211186450"), boost::lexical_cast("17.18299409341888528416337955184486836168042336837628442005969736301859437960"), boost::lexical_cast("-9.70772568832145809755029602593534775626803932755931576353380272720933569318"), boost::lexical_cast("4.95546002630693726392090932025925003607433594321786357647449706566309372496"), boost::lexical_cast("-2.14010864823626171034034636914985284178400701423559135938044246487466223776"), boost::lexical_cast("0.880041901487022196333800296293828350812076915017847173990679115863977711041"), boost::lexical_cast("-0.327483771390349393328449791379023445875626515179961154056969671224666397451"), boost::lexical_cast("0.0700050346208691475219456475608152516659372000469712274360723295281871848387"), boost::lexical_cast("0.0000740225367427644001587409378753952383212767606234921042405852483821239061334"), boost::lexical_cast("-0.00194483199670374685015094187211770910054778766605235293849027402856312150840"), boost::lexical_cast("-0.000000253088547271589825310570020884344496366999521135191317044614410762991878950"), boost::lexical_cast("0.000000470572493262891053536372764217043903584963956635299308538734504960681361207"), boost::lexical_cast("-0.000000000115303154806547333281398739726672346354039012152713743670663506289507432912"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 14) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.182096627390465002841872599753582960857482793103154443921292798922930823312"), boost::lexical_cast("-1.99067991923898541144309882988836202482422764820095134691586013396479875824"), boost::lexical_cast("9.59777139855370444734294750686163842012139708590050472898305559257417654445"), boost::lexical_cast("-26.61794828473449778541050916432452820900605760472867782882032588243833218460"), boost::lexical_cast("46.48235553993428243642096843754171537043857798264743456557286506206884999660"), boost::lexical_cast("-53.28952413012626128654306352591401630142078063921055789323943087480417380740"), boost::lexical_cast("43.78548547762683495894325883003176846356585388587214183280498394113771237500"), boost::lexical_cast("-36.10530005831753430370334734266356752826479202721810859304361182987411236780"), boost::lexical_cast("40.41441594328021583316039518661942961300602117705878612433379552772328367060"), boost::lexical_cast("-42.57519344340992846492391425032425629733148181868603643066418155132222692720"), boost::lexical_cast("33.69357696920429126980241665391486766936852157516836030131774633802657214380"), boost::lexical_cast("-24.99427184019678212351060274549661020691119426526756451144184518863090205460"), boost::lexical_cast("22.24082565201673464792084352820810035044717879419914422566840373427801119710"), boost::lexical_cast("-18.25836120586050027075089243454704089299356205520219684237280836587814742320"), boost::lexical_cast("11.75999525461842751380077638481339770186505465117919491977936260095287395430"), boost::lexical_cast("-7.57794751208369560067407289978430835851835802702956349867965768312335398938"), boost::lexical_cast("5.51625146977006284358570281266574340943582336186123580684755277118777603718"), boost::lexical_cast("-3.36170173645122190520455082014298086926033428887456137863348894911353768638"), boost::lexical_cast("1.65231565653810221017900302691080368910278392146172824258223867713998781120"), boost::lexical_cast("-0.899971991021384569041112723985746774474890344096613796399657618872823089914"), boost::lexical_cast("0.493379883919252205004540248830738351306813744782324207970147006276757888741"), boost::lexical_cast("-0.190465678173474433044011230247932891163095527351165979372112094377892415660"), boost::lexical_cast("0.0621662066439658745587942761812051647689996933574065948837820956985288446830"), boost::lexical_cast("-0.0260606091916674704141077213394275894517321034885463805642148072294982340641"), boost::lexical_cast("0.00668671436111235768206809845426737458018128101136661828669846361010276014213"), boost::lexical_cast("0.000501800405113171457500759977346203260700591357705539339843489778157288724465"), boost::lexical_cast("-0.000404641953708090404336673259880430820473496337074290841846682708432617331297"), boost::lexical_cast("0.00000622939193262507048296472703033235853521538144434623520667251347304027494807"), boost::lexical_cast("0.000000227216792432532934218802486321263209684697324571081185820714866955957698807"), boost::lexical_cast("-0.000000000111648115236885172375463021306155593347638298619118930265825307233276056732"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + if constexpr (order == 15) { + return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0186632063341731699487622519569900676156629675744736414459848077254980584439"), boost::lexical_cast("-0.204152410105326344047690139058847944463463829383572825741723149474265517687"), boost::lexical_cast("0.981129778506629236917943314009391202465976027147847806934681206721129743489"), boost::lexical_cast("-2.69223973647360950767394915742670959250796023828609553625040576017143217370"), boost::lexical_cast("4.57840474748508233139703474514191577520139760766602312536057813786879861719"), boost::lexical_cast("-4.92279254466715210570744929069389870019317731597159546050988432127489832899"), boost::lexical_cast("3.49098196027493477759169680079840596940785122938110897581250074622145540830"), boost::lexical_cast("-2.43745302882351007548114866638762563227820344626399026957104467610746424919"), boost::lexical_cast("2.92002235517806230637018721558192349007812525216552453182604910919733517109"), boost::lexical_cast("-3.24373461024153144136567992763463788222027847288621903947814561657763790774"), boost::lexical_cast("2.33058809298308412023805776435915774549596651226832414404182013235265783095"), boost::lexical_cast("-1.50268473155783226586328187697167000171012304032869369458457484335905926235"), boost::lexical_cast("1.44521613506514880646597775935884860442911229706573188445594135154651054603"), boost::lexical_cast("-1.25320563215574317573983783719179686555846390567587617560334570616539136371"), boost::lexical_cast("0.716523991653864912132988574383055048288486387296028098428465297303529312898"), boost::lexical_cast("-0.417685734682996474655995981787950272634517973441398985560062415678439970424"), boost::lexical_cast("0.343615439131547337750639931144047450610704550982732392292547279251562842012"), boost::lexical_cast("-0.210599151040031056875841224107239694928740122133299240427666270185426716963"), boost::lexical_cast("0.0839111741718053411362323568803319587928469795988859679968270250707587553192"), boost::lexical_cast("-0.0453350931889210140035133942035842323703748999105117340363647560154703981313"), boost::lexical_cast("0.0293975150903577374499867887808058812502982622650503969014313916908299400994"), boost::lexical_cast("-0.00952380952701618903633264790459773368829395336984965315811681382826752366623"), boost::lexical_cast("0.00162356389207281836884637948122226515491709153554839790386903440166058269155"), boost::lexical_cast("-0.00107233008114088588860897903711349245756991842194937466975676115541205802164"), boost::lexical_cast("0.000309594820880373636252028432067839316250026602381083168344278875876631484733"), boost::lexical_cast("0.000159116759294319410028654591726757975556683309929396718417834438386747643662"), boost::lexical_cast("-0.0000716868960901604452106499159427785061407281838428321680583983254056627687328"), boost::lexical_cast("0.00000372192590676834494238303138990722411083877718883831917839190468860584330496"), boost::lexical_cast("0.000000106273060435352363021386153934099392277182493972188516192741747367832383831"), boost::lexical_cast("-0.000000000105004095727400196995819073889347146562377832036002728993854591918261645500"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; + } + } } std::array m{}; for (auto & x : m) { From fe5bb27ab8fa47144f5ca5fa3c5cd01c3e4e6de0 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 5 Feb 2020 10:36:21 -0500 Subject: [PATCH 009/104] Demonstrate that matched Holder interpolation does indeed have higher accuracy and that the exponent should be reduced a bit [CI SKIP] --- example/daubechies_accuracy.cpp | 167 +++--------------- .../special_functions/daubechies_scaling.hpp | 2 +- 2 files changed, 25 insertions(+), 144 deletions(-) diff --git a/example/daubechies_accuracy.cpp b/example/daubechies_accuracy.cpp index 87e7fdb0f..eddd1e5a3 100644 --- a/example/daubechies_accuracy.cpp +++ b/example/daubechies_accuracy.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -81,143 +80,6 @@ void do_ulp() } -template -void test_interpolate_with_roots() -{ - std::cout << "Testing interpolation with roots on type " << boost::core::demangle(typeid(Real).name()) << " and " << p << " vanishing moments.\n"; - using std::floor; - using std::ceil; - using std::abs; - int rmax = 22; - auto phi_dense = boost::math::detail::dyadic_grid(rmax); - auto phi_dense_prime = boost::math::detail::dyadic_grid(rmax); - Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - - auto roots = boost::math::detail::daubechies_scaling_roots(); - auto root_derivatives = boost::math::detail::daubechies_scaling_derivatives_at_roots(); - if (std::is_same_v) { - roots.resize(12); - root_derivatives.resize(12); - std::cout << "Last root = " << roots.back() << "\n"; - } - - for (int r = 5; r <= rmax - 1; ++r) { - auto phi_accurate = boost::math::detail::dyadic_grid(r); - std::vector phi(phi_accurate.size()); - for (size_t i = 0; i < phi_accurate.size(); ++i) { - phi[i] = Real(phi_accurate[i]); - } - auto phi_prime_accurate = boost::math::detail::dyadic_grid(r); - std::vector phi_prime(phi_accurate.size()); - for (size_t i = 0; i < phi_prime_accurate.size(); ++i) { - phi_prime[i] = Real(phi_prime_accurate[i]); - } - - std::vector x(phi.size()); - Real dx = (2*p-1)/static_cast(x.size()-1); - std::cout << "dx = " << dx << "\n"; - for (size_t i = 0; i < x.size(); ++i) { - x[i] = i*dx; - } - - //std::cout << "x.size() before insertion = " << x.size() << "\n"; - //std::cout << "Adding " << roots.size() << " roots; giving " << x.size() + roots.size() << " total\n"; - // Now insert the roots into the vector: - //x.resize(x.size() + roots.size()); - //phi.resize(phi.size() + roots.size()); - //phi_prime.resize(phi_prime.size() + roots.size()); - #ifdef COMPUTE_ROOTS - for (size_t i = 0; i < roots.size(); ++i) { - auto root = roots[i]; - auto index = static_cast(ceil(root/dx)) + i; - //std::cout << "Inserting root at index " << index << "\n"; - x.insert(x.begin() + index, root); - phi.insert(phi.begin() + index, Real(0)); - phi_prime.insert(phi_prime.begin()+ index, root_derivatives[i]); - } - #endif - /*if (std::is_sorted(x.begin(), x.end())) { - std::cout << "x is sorted! This is good!\n"; - } else { - std::cout << "x is not sorted! This is bad!\n"; - } - std::cout << "x.size() = " << x.size() << "\n"; - std::cout << "phi.size()=" << phi.size() << "\n";*/ - - if constexpr (p < 6 && p >= 3) { - auto ch = boost::math::interpolators::cubic_hermite(std::move(x), std::move(phi), std::move(phi_prime)); - Real flt_distance = 0; - Real sup = 0; - Real worst_abscissa = 0; - Real worst_value = 0; - Real worst_computed = 0; - Real worst_absolute_abscissa = 0; - Real worst_absolute_value = 0; - Real worst_computed_absolute_value = 0; - Real condition_number1 = 0; - Real condition_number2 = 0; - Real l1 = 0; - Real rel_error_sum = 0; - for (size_t i = phi_dense.size()/16; i < phi_dense.size(); ++i) { - Real t = i*dx_dense; - Real computed = ch(t); - Real expected = Real(phi_dense[i]); - if (abs(expected) < 100*std::numeric_limits::epsilon()) { - continue; - } - - Real diff = abs(computed - expected); - l1 += diff; - rel_error_sum += diff/abs(expected); - Real distance = abs(boost::math::float_distance(computed, expected)); - if (distance > flt_distance) { - flt_distance = distance; - worst_abscissa = t; - worst_value = expected; - worst_computed = computed; - condition_number1 = abs(t*ch.prime(t)/expected); - } - if (diff > sup) { - sup = diff; - worst_absolute_abscissa = t; - worst_absolute_value = expected; - worst_computed_absolute_value = computed; - condition_number2 = abs(t*ch.prime(t)/expected); - } - } - std::cout << std::setprecision(std::numeric_limits::digits10 + 3); - std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; - std::cout << "\tWorst abscissa = " << worst_abscissa << "\n" - << "\tWorst expected = " << worst_value << "\n" - << "\tWorst computed = " << worst_computed << "\n" - << "\tCondition number: " << condition_number1 << "\n"; - std::cout << "\tWorst absolute abscissa = " << worst_absolute_abscissa << "\n" - << "\tExpected value at worst absolute abscissa = " << worst_absolute_value <<"\n" - << "\tComputed value at worst absolute abscissa = " << worst_computed_absolute_value << "\n" - << "\tCondition number: " << condition_number2 << "\n" - << "\tL1 error = " << l1*dx_dense << "\n" - << "\tRelative error sum = " << rel_error_sum*dx_dense << "\n"; - std::cout << "\tRAM = " << 4*phi_accurate.size()*sizeof(Real) << " bytes\n"; - - std::vector x_acc(phi_dense.size()); - - for (size_t i = 0; i < x_acc.size(); ++i) { - x_acc[i] = i*dx_dense; - } - - //std::cout << "phi_dense.size() = " << phi_dense.size() << "\n"; - auto phi_dense_copy = phi_dense; - auto phi_dense_prime_copy = phi_dense_prime; - auto acc = boost::math::interpolators::cubic_hermite(std::move(x_acc), std::move(phi_dense_copy), std::move(phi_dense_prime_copy)); - std::cout << "Writing ulp plot\n"; - quicksvg::ulp_plot(ch, acc, Real(0), Real(2*p-1), - "ULP plot of Daubechies with " + std::to_string(r) + " refinements", - "daub" + std::to_string(p) + "_" + std::to_string(r) + ".svg", 50000, 1100, 10); - std::cout << "Done writing ulp plot\n"; - } - - } -} template void choose_refinement() @@ -317,7 +179,7 @@ template void find_best_interpolator() { using std::abs; - int rmax = 14; + int rmax = 18; auto phi_dense = boost::math::detail::dyadic_grid(rmax); Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); for (int r = 2; r < rmax-2; ++r) @@ -333,6 +195,22 @@ void find_best_interpolator() x[i] = i*dx; } + { + auto phi_copy = phi; + auto phi_prime_copy = phi_prime; + auto mh = boost::math::detail::matched_holder(std::move(phi_copy), std::move(phi_prime_copy), r); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - mh(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "matched_holder"}); + } + + { auto linear = [&phi, &dx, &r](Real x)->Real { if (x <= 0 || x >= 2*p-1) { @@ -389,6 +267,9 @@ void find_best_interpolator() m.insert({cbs_sup, "cubic_b_spline"}); } + + // Whittaker-Shannon interpolation has linear complexity; test over all points and it's quadratic. + // I ran this a couple times and found it's not competitive; so comment out for now. /*{ auto phi_copy = phi; auto ws = boost::math::interpolators::whittaker_shannon(std::move(phi_copy), Real(0), dx); @@ -622,14 +503,14 @@ void find_best_interpolator() int main() { - do_ulp(); - //test_interpolate_with_roots(); + //do_ulp(); + //choose_refinement(); //choose_refinement(); - /*// Says linear interpolation is the best: + // Says linear interpolation is the best: find_best_interpolator(); - // Says linear interpolation is the best: + /*// Says linear interpolation is the best: find_best_interpolator(); // Says cubic_hermite_spline is best: diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 8eb8ec393..b8990c4da 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -102,7 +102,7 @@ public: // It's only exactly right at dyadic rationals. //Real constexpr const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); // So we're gonna make the graph dip a little harder; this will capture more of the self-similar behavior: - Real constexpr const alpha = 0.35; + Real constexpr const alpha = 0.3; int64_t i = static_cast(std::floor(x/h_)); Real t = (x- i*h_)/h_; Real v = y_[i]; From 1ac3beacd7874d49182f5ef3b3f018b8f3acf4a6 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 5 Feb 2020 11:06:05 -0500 Subject: [PATCH 010/104] Clean up finding best interpolator code for Daubechies scaling [CI SKIP] --- ... => find_best_daubechies_interpolator.cpp} | 24 ++++++++++--------- .../special_functions/daubechies_scaling.hpp | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) rename example/{daubechies_accuracy.cpp => find_best_daubechies_interpolator.cpp} (96%) diff --git a/example/daubechies_accuracy.cpp b/example/find_best_daubechies_interpolator.cpp similarity index 96% rename from example/daubechies_accuracy.cpp rename to example/find_best_daubechies_interpolator.cpp index eddd1e5a3..9ca360dd5 100644 --- a/example/daubechies_accuracy.cpp +++ b/example/find_best_daubechies_interpolator.cpp @@ -17,12 +17,12 @@ #include #include #include -#include -#include +//#include +//#include using boost::multiprecision::float128; -template +/*template void do_ulp() { std::cout << "Creating ULP plot on type " << boost::core::demangle(typeid(Real).name()) << " and " << p << " vanishing moments.\n"; @@ -78,7 +78,7 @@ void do_ulp() title, 15000, 1100, 10); std::cout << "Done writing ulp plot\n"; -} +}*/ template @@ -179,10 +179,10 @@ template void find_best_interpolator() { using std::abs; - int rmax = 18; + int rmax = 15; auto phi_dense = boost::math::detail::dyadic_grid(rmax); Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - for (int r = 2; r < rmax-2; ++r) + for (int r = 2; r < rmax-1; ++r) { std::map m; auto phi = boost::math::detail::dyadic_grid(r); @@ -190,7 +190,7 @@ void find_best_interpolator() std::vector x(phi.size()); Real dx = (2*p-1)/static_cast(x.size()-1); - std::cout << "dx = " << dx << "\n"; + std::cout << "dx = 1/" << (1 << r) << " = " << dx << "\n"; for (size_t i = 0; i < x.size(); ++i) { x[i] = i*dx; } @@ -346,6 +346,7 @@ void find_best_interpolator() m.insert({sup, "makima"}); } + // Again, linear complexity of evaluation => quadratic complexity of exhaustive checking. /*{ auto trig = boost::math::interpolators::cardinal_trigonometric(phi, Real(0), dx); Real sup = 0; @@ -489,15 +490,16 @@ void find_best_interpolator() } std::string best = "none"; Real best_sup = 1000000000; + std::cout << std::setprecision(20) << std::fixed; for (auto & e : m) { - std::cout << std::setprecision(20) << std::fixed << e.first << " is error of " << e.second << "\n"; + std::cout << "\t" << e.first << " is error of " << e.second << "\n"; if (e.first < best_sup) { best = e.second; best_sup = e.first; } } - std::cout << "The best method for p = " << p << " is the " << best << "\n"; + std::cout << "\tThe best method for p = " << p << " is the " << best << "\n"; } } @@ -510,7 +512,7 @@ int main() { // Says linear interpolation is the best: find_best_interpolator(); - /*// Says linear interpolation is the best: + // Says linear interpolation is the best: find_best_interpolator(); // Says cubic_hermite_spline is best: @@ -526,5 +528,5 @@ int main() { find_best_interpolator(); // Says quintic_hermite_spline is best: - find_best_interpolator();*/ + find_best_interpolator(); } diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index b8990c4da..f77c50691 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -102,7 +102,7 @@ public: // It's only exactly right at dyadic rationals. //Real constexpr const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); // So we're gonna make the graph dip a little harder; this will capture more of the self-similar behavior: - Real constexpr const alpha = 0.3; + Real constexpr const alpha = Real(3)/Real(10); int64_t i = static_cast(std::floor(x/h_)); Real t = (x- i*h_)/h_; Real v = y_[i]; From 07e884c38649be4fcaf3491feb4de2aac5fd622c Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 7 Feb 2020 09:46:02 -0500 Subject: [PATCH 011/104] Choose refinement for each type and number of vanishing moment. [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 132 ++++++++++++++++-- 1 file changed, 120 insertions(+), 12 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index f77c50691..62b8a4de0 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -100,10 +100,10 @@ public: } // This is the exact Holder exponent, but it's pessimistic almost everywhere! // It's only exactly right at dyadic rationals. - //Real constexpr const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); + Real const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); // So we're gonna make the graph dip a little harder; this will capture more of the self-similar behavior: - Real constexpr const alpha = Real(3)/Real(10); - int64_t i = static_cast(std::floor(x/h_)); + //Real constexpr const alpha = Real(3)/Real(10); + int64_t i = static_cast(floor(x/h_)); Real t = (x- i*h_)/h_; Real v = y_[i]; Real dphi = dydx_[i+1]*h_; @@ -118,6 +118,36 @@ private: RandomAccessContainer dydx_; }; + +template +class linear_interpolation { +public: + using Real = typename RandomAccessContainer::value_type; + + linear_interpolation(RandomAccessContainer && y, int grid_refinements) : y_{std::move(y)} + { + grid_refinements_ = grid_refinements; + } + + Real operator()(Real x) const { + using std::floor; + if (x <= 0 || x >= 5) { + return 0; + } + Real y = x*(1<(k); + + Real t = y - k; + return (1-t)*y_[kk] + t*y_[kk+1]; + } + +private: + int grid_refinements_; + RandomAccessContainer y_; +}; + } template @@ -125,25 +155,95 @@ class daubechies_scaling { public: daubechies_scaling(int grid_refinements = -1) { + static_assert(p <= 15, "Scaling functions only implements up to p = 15"); using boost::multiprecision::float128; if (grid_refinements < 0) { - grid_refinements = 20; + if (std::is_same_v) + { + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + std::array r{-1, -1, 22, 21, 19, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11}; + grid_refinements = r[p]; + } + else if (std::is_same_v) + { + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + std::array r{-1, -1, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 20, 19, 18, 18}; + grid_refinements = r[p]; + } + else + { + grid_refinements = 22; + } } - if (p==3) { - throw std::domain_error("p = 3 is not yet implemented!"); - } // Compute the refined grid: // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. - std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); + std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { + // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: + if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + else if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + + return detail::dyadic_grid(grid_refinements); + }); // Compute the derivative of the refined grid: - std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); + std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { + if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + else if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + + return detail::dyadic_grid(grid_refinements); + }); // if necessary, compute the second derivative: std::vector d2ydx2; if constexpr (p >= 6) { - std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { return detail::dyadic_grid(grid_refinements); }); + std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { + if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + else if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + + return detail::dyadic_grid(grid_refinements); }); d2ydx2 = t3.get(); } @@ -162,6 +262,9 @@ public: if constexpr (p==2) { m_mh = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); } + if constexpr (p==3) { + m_lin = std::make_shared>>(std::move(y), grid_refinements); + } if constexpr (p == 4 || p == 5) { m_cbh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx)); } @@ -175,6 +278,9 @@ public: if constexpr (p==2) { return m_mh->operator()(x); } + if constexpr (p==3) { + return m_lin->operator()(x); + } if constexpr (p==4 || p ==5) { return m_cbh->operator()(x); } @@ -184,8 +290,8 @@ public: } Real prime(Real x) const { - if constexpr (p==2) { - throw std::domain_error("The 2-vanishing moment Daubechies scaling function is not continuously differentiable."); + if constexpr (p==2 || p == 3) { + throw std::domain_error("The 2 and 3-vanishing moment Daubechies scaling function is not continuously differentiable."); } if constexpr (p==4 || p ==5) { return m_cbh->prime(x); @@ -203,6 +309,8 @@ private: size_t m_levels; // Need this for p = 2: std::shared_ptr>> m_mh; + // Need this for p = 3: + std::shared_ptr>> m_lin; // need this for p = 4,5: std::shared_ptr>> m_cbh; // need this for p >= 6: From 231dd8cb56bd04bc75c7f622d9d8f672629add3d Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 7 Feb 2020 10:49:22 -0500 Subject: [PATCH 012/104] Tamp down on grid refinements [CI SKIP] --- include/boost/math/special_functions/daubechies_scaling.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 62b8a4de0..c0e026080 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -167,13 +167,15 @@ public: } else if (std::is_same_v) { + // r = 21 is correct for p >= 10. + // Before that, r > 21 would be appropriate, but the hardware isn't there yet! // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - std::array r{-1, -1, 22, 22, 22, 22, 22, 22, 22, 22, 21, 21, 20, 19, 18, 18}; + std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18}; grid_refinements = r[p]; } else { - grid_refinements = 22; + grid_refinements = 21; } } From 09213a0835f94a7945b0afcabffe2a6d3008fdfd Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 8 Feb 2020 12:46:28 -0500 Subject: [PATCH 013/104] Add septic Hermite interpolation. This still needs some tlc to get to 1ULP evaluation [CI SKIP] --- example/find_best_daubechies_interpolator.cpp | 103 +++++------ .../detail/septic_hermite_detail.hpp | 160 ++++++++++++++++++ .../math/interpolators/septic_hermite.hpp | 38 +++++ .../special_functions/daubechies_scaling.hpp | 50 +++++- 4 files changed, 282 insertions(+), 69 deletions(-) create mode 100644 include/boost/math/interpolators/detail/septic_hermite_detail.hpp create mode 100644 include/boost/math/interpolators/septic_hermite.hpp diff --git a/example/find_best_daubechies_interpolator.cpp b/example/find_best_daubechies_interpolator.cpp index 9ca360dd5..d9277f698 100644 --- a/example/find_best_daubechies_interpolator.cpp +++ b/example/find_best_daubechies_interpolator.cpp @@ -5,8 +5,9 @@ #include #include #include -#include #include +#include +#include #include #include #include @@ -22,64 +23,6 @@ using boost::multiprecision::float128; -/*template -void do_ulp() -{ - std::cout << "Creating ULP plot on type " << boost::core::demangle(typeid(Real).name()) << " and " << p << " vanishing moments.\n"; - using std::floor; - using std::ceil; - using std::abs; - int rmax = 14; - std::cout << "Computing phi_dense\n"; - std::future> f1 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax); }); - std::future> f2 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax); }); - - std::cout << "Computing phi and phi_prime\n"; - std::future> f3 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax-2); }); - std::future> f4 = std::async(std::launch::async, [&]{ return boost::math::detail::dyadic_grid(rmax-2); }); - auto phi_dense = f1.get(); - auto phi_dense_prime = f2.get(); - auto phi_accurate = f3.get(); - auto phi_prime_accurate = f4.get(); - - Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - std::cout << "Done precomputing grids; downcasting now.\n"; - std::vector phi(phi_accurate.size()); - for (size_t i = 0; i < phi_accurate.size(); ++i) { - phi[i] = Real(phi_accurate[i]); - } - std::vector phi_prime(phi_accurate.size()); - for (size_t i = 0; i < phi_prime_accurate.size(); ++i) { - phi_prime[i] = Real(phi_prime_accurate[i]); - } - phi_accurate.resize(0); - phi_prime_accurate.resize(0); - - std::vector x(phi.size()); - Real dx = (2*p-1)/static_cast(x.size()-1); - std::cout << "dx = " << dx << "\n"; - for (size_t i = 0; i < x.size(); ++i) { - x[i] = i*dx; - } - - auto ch = boost::math::interpolators::cubic_hermite(std::move(x), std::move(phi), std::move(phi_prime)); - - std::vector x_acc(phi_dense.size()); - - for (size_t i = 0; i < x_acc.size(); ++i) { - x_acc[i] = i*dx_dense; - } - - auto acc = boost::math::interpolators::cubic_hermite(std::move(x_acc), std::move(phi_dense), std::move(phi_dense_prime)); - std::cout << "Writing ulp plot\n"; - std::string title = "daub" + std::to_string(p) + "_" + std::to_string(rmax-2) + "_" + boost::core::demangle(typeid(Real).name()) + ".svg"; - quicksvg::ulp_plot(ch, acc, Real(0), Real(2*p-1), - "ULP plot of Daubechies with " + std::to_string(rmax-2) + " refinements on type " + boost::core::demangle(typeid(Real).name()), - title, 15000, 1100, 10); - std::cout << "Done writing ulp plot\n"; - -}*/ - template void choose_refinement() @@ -486,11 +429,29 @@ void find_best_interpolator() m.insert({sup, "Third-order Taylor"}); } + { + auto phi_copy = phi; + auto x_copy = x; + auto phi_prime_copy = phi_prime; + auto phi_dbl_prime_copy = phi_dbl_prime; + auto phi_triple_prime_copy = phi_triple_prime; + auto sh = boost::math::interpolators::septic_hermite(std::move(x_copy), std::move(phi_copy), std::move(phi_prime_copy), std::move(phi_dbl_prime_copy), std::move(phi_triple_prime_copy)); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - sh(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "septic_hermite_spline"}); + } + } std::string best = "none"; Real best_sup = 1000000000; - std::cout << std::setprecision(20) << std::fixed; + std::cout << std::setprecision(std::numeric_limits::digits10 + 3) << std::fixed; for (auto & e : m) { std::cout << "\t" << e.first << " is error of " << e.second << "\n"; @@ -505,12 +466,10 @@ void find_best_interpolator() int main() { - //do_ulp(); - //choose_refinement(); //choose_refinement(); // Says linear interpolation is the best: - find_best_interpolator(); + /*find_best_interpolator(); // Says linear interpolation is the best: find_best_interpolator(); @@ -528,5 +487,21 @@ int main() { find_best_interpolator(); // Says quintic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator();*/ + // Says quintic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + /* + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator();*/ + + // Says septic_hermite_spline is best: + find_best_interpolator(); } diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp new file mode 100644 index 000000000..c3e4b8e0b --- /dev/null +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -0,0 +1,160 @@ +#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_SEPTIC_HERMITE_DETAIL_HPP +#define BOOST_MATH_INTERPOLATORS_DETAIL_SEPTIC_HERMITE_DETAIL_HPP +#include +#include +#include +#include + +namespace boost::math::interpolators::detail { + +template +class septic_hermite_detail { +public: + using Real = typename RandomAccessContainer::value_type; + septic_hermite_detail(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3) + : x_{std::move(x)}, y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)}, d3ydx3_{std::move(d3ydx3)} + { + if (x_.size() != y_.size()) { + throw std::domain_error("Number of abscissas must = number of ordinates."); + } + if (x_.size() != dydx_.size()) { + throw std::domain_error("Numbers of derivatives must = number of abscissas."); + } + if (x_.size() != d2ydx2_.size()) { + throw std::domain_error("Number of second derivatives must equal number of abscissas."); + } + if (x_.size() != d3ydx3_.size()) { + throw std::domain_error("Number of third derivatives must equal number of abscissas."); + } + + if (x_.size() < 2) { + throw std::domain_error("At least 2 abscissas are required."); + } + Real x0 = x_[0]; + for (decltype(x_.size()) i = 1; i < x_.size(); ++i) { + Real x1 = x_[i]; + if (x1 <= x0) + { + throw std::domain_error("Abscissas must be sorted in strictly increasing order x0 < x1 < ... < x_{n-1}"); + } + x0 = x1; + } + } + + void push_back(Real x, Real y, Real dydx, Real d2ydx2, Real d3ydx3) { + using std::abs; + using std::isnan; + if (x <= x_.back()) { + throw std::domain_error("Calling push_back must preserve the monotonicity of the x's"); + } + x_.push_back(x); + y_.push_back(y); + dydx_.push_back(dydx); + d2ydx2_.push_back(d2ydx2); + d3ydx3_.push_back(d3ydx3); + } + + Real operator()(Real x) const { + if (x < x_[0] || x > x_.back()) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x_[0] << ", " << x_.back() << "]"; + throw std::domain_error(oss.str()); + } + // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. + // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. + if (x == x_.back()) { + return y_.back(); + } + + auto it = std::upper_bound(x_.begin(), x_.end(), x); + auto i = std::distance(x_.begin(), it) -1; + Real x0 = *(it-1); + Real x1 = *it; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + // Velocity: + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + // Acceleration: + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + // Jerk: + Real j0 = d3ydx3_[i]; + Real j1 = d3ydx3_[i+1]; + + Real dx = (x1-x0); + Real t = (x-x0)/dx; + + // See: + // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m + Real t2 = t*t; + Real t3 = t2*t; + Real t4 = t3*t; + Real t5 = t4*t; + Real t6 = t5*t; + Real t7 = t6*t; + Real dx2 = dx*dx; + Real dx3 = dx2*dx; + Real z0 = 20*t7 - 70*t6 + 84*t5 - 35*t4 + 1; + Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; + Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; + Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; + Real z4 = 1 - z0; + Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; + Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; + Real z7 = t7/6 - t6/2 + t5/2 - t4/6; + + Real y = z0*y0 + z1*dx*v0 + z2*dx2*a0 + z3*dx3*j0 + z4*y1 + z5*dx*v1 + z6*dx2*a1 + z7*dx3*j1; + return y; + } + + Real prime(Real x) const { + if (x < x_[0] || x > x_.back()) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x_[0] << ", " << x_.back() << "]"; + throw std::domain_error(oss.str()); + } + if (x == x_.back()) { + return dydx_.back(); + } + + auto it = std::upper_bound(x_.begin(), x_.end(), x); + auto i = std::distance(x_.begin(), it) -1; + Real x0 = *(it-1); + Real x1 = *it; + Real s0 = dydx_[i]; + Real s1 = dydx_[i+1]; + + // Ridiculous linear interpolation. Fine for now: + Real numerator = s0*(x1-x) + s1*(x-x0); + Real denominator = x1 - x0; + return numerator/denominator; + } + + + friend std::ostream& operator<<(std::ostream & os, const septic_hermite_detail & m) + { + os << "(x,y,y') = {"; + for (size_t i = 0; i < m.x_.size() - 1; ++i) { + os << "(" << m.x_[i] << ", " << m.y_[i] << ", " << m.dydx_[i] << ", " << m.d2ydx2_[i] << ", " << m.d3ydx3_[i] << "), "; + } + auto n = m.x_.size()-1; + os << "(" << m.x_[n] << ", " << m.y_[n] << ", " << m.dydx_[n] << ", " << m.d2ydx2_[n] << m.d3ydx3_[n] << ")}"; + return os; + } + + + +private: + RandomAccessContainer x_; + RandomAccessContainer y_; + RandomAccessContainer dydx_; + RandomAccessContainer d2ydx2_; + RandomAccessContainer d3ydx3_; +}; +} +#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp new file mode 100644 index 000000000..c544d1c63 --- /dev/null +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -0,0 +1,38 @@ +#ifndef BOOST_MATH_INTERPOLATORS_SEPTIC_HERMITE_HPP +#define BOOST_MATH_INTERPOLATORS_SEPTIC_HERMITE_HPP +#include +#include +#include +#include + +namespace boost::math::interpolators { + +template +class septic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + septic_hermite(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx, + RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3) + : impl_(std::make_shared>(std::move(x), + std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3))) + {} + + Real operator()(Real x) const { + return impl_->operator()(x); + } + + Real prime(Real x) const { + return impl_->prime(x); + } + + friend std::ostream& operator<<(std::ostream & os, const septic_hermite & m) + { + os << *m.impl_; + return os; + } + +private: + std::shared_ptr> impl_; +}; +} +#endif \ No newline at end of file diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index c0e026080..591030adb 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -19,6 +19,7 @@ #include #include #include +#include namespace boost::math { @@ -226,6 +227,7 @@ public: // if necessary, compute the second derivative: std::vector d2ydx2; + std::vector d3ydx3; if constexpr (p >= 6) { std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { @@ -245,10 +247,35 @@ public: return w; } - return detail::dyadic_grid(grid_refinements); }); + return detail::dyadic_grid(grid_refinements); + }); + + if constexpr (p >= 10) { + std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { + if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + else if constexpr (std::is_same_v) { + auto v = detail::dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) { + w[i] = v[i]; + } + return w; + } + + return detail::dyadic_grid(grid_refinements); }); + d3ydx3 = t4.get(); + } d2ydx2 = t3.get(); } + auto y = t0.get(); auto dydx = t1.get(); @@ -270,9 +297,13 @@ public: if constexpr (p == 4 || p == 5) { m_cbh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx)); } - else if constexpr (p >= 6) { + if constexpr (p >= 6 && p <= 9) { m_qh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); } + if constexpr (p >= 10) { + m_sh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + } + } @@ -286,9 +317,12 @@ public: if constexpr (p==4 || p ==5) { return m_cbh->operator()(x); } - else if constexpr (p >= 6) { + if constexpr (p >= 6 && p <= 9) { return m_qh->operator()(x); } + if constexpr (p >= 10) { + return m_sh->operator()(x); + } } Real prime(Real x) const { @@ -298,9 +332,12 @@ public: if constexpr (p==4 || p ==5) { return m_cbh->prime(x); } - else if constexpr (p >= 6) { + if constexpr (p >= 6 && p <= 9) { return m_qh->prime(x); } + if constexpr (p >= 10) { + return m_sh->prime(x); + } } std::pair support() const { @@ -315,9 +352,12 @@ private: std::shared_ptr>> m_lin; // need this for p = 4,5: std::shared_ptr>> m_cbh; - // need this for p >= 6: + // need this for p = 6,7,8,9: std::shared_ptr>> m_qh; + // need this for p >= 10: + std::shared_ptr>> m_sh; + /*Real constant_interpolation(Real x) const { if (x <= 0 || x >= 2*p-1) { return Real(0); From 3f5dc81fee5fd2527f08c1725c70270744557282 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 10 Feb 2020 13:31:26 -0500 Subject: [PATCH 014/104] Equispace cubic Hermite interpolation. [CI SKIP] --- .../interpolators/cardinal_cubic_hermite.hpp | 71 ++++++ .../detail/cardinal_cubic_hermite_detail.hpp | 204 ++++++++++++++++++ .../detail/septic_hermite_detail.hpp | 8 +- .../special_functions/daubechies_scaling.hpp | 14 +- test/cardinal_cubic_hermite_test.cpp | 182 ++++++++++++++++ 5 files changed, 474 insertions(+), 5 deletions(-) create mode 100644 include/boost/math/interpolators/cardinal_cubic_hermite.hpp create mode 100644 include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp create mode 100644 test/cardinal_cubic_hermite_test.cpp diff --git a/include/boost/math/interpolators/cardinal_cubic_hermite.hpp b/include/boost/math/interpolators/cardinal_cubic_hermite.hpp new file mode 100644 index 000000000..f5a502990 --- /dev/null +++ b/include/boost/math/interpolators/cardinal_cubic_hermite.hpp @@ -0,0 +1,71 @@ +// Copyright Nick Thompson, 2020 +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_MATH_INTERPOLATORS_CARDINAL_CUBIC_HERMITE_HPP +#define BOOST_MATH_INTERPOLATORS_CARDINAL_CUBIC_HERMITE_HPP +#include +#include + +namespace boost::math::interpolators { + +template +class cardinal_cubic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + + cardinal_cubic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, Real x0, Real dx) + : impl_(std::make_shared>(std::move(y), std::move(dydx), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + friend std::ostream& operator<<(std::ostream & os, const cardinal_cubic_hermite & m) + { + os << *m.impl_; + return os; + } + +private: + std::shared_ptr> impl_; +}; + + +template +class cardinal_cubic_hermite_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + cardinal_cubic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) + : impl_(std::make_shared>(std::move(data), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + friend std::ostream& operator<<(std::ostream & os, const cardinal_cubic_hermite_aos & m) + { + os << *m.impl_; + return os; + } + +private: + std::shared_ptr> impl_; +}; + +} +#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp new file mode 100644 index 000000000..dbbbc1a5a --- /dev/null +++ b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp @@ -0,0 +1,204 @@ +#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_CUBIC_HERMITE_DETAIL_HPP +#define BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_CUBIC_HERMITE_DETAIL_HPP +#include +#include +#include +#include +#include +#include + +namespace boost::math::interpolators::detail { + +template +class cardinal_cubic_hermite_detail { +public: + using Real = typename RandomAccessContainer::value_type; + + cardinal_cubic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer dydx, Real x0, Real dx) + : y_{std::move(y)}, dydx_{std::move(dydx)}, x0_{x0}, dx_{dx} + { + using std::abs; + using std::isnan; + if (y_.size() != dydx_.size()) + { + throw std::domain_error("There must be the same number of derivatives as ordinates."); + } + if (y_.size() < 2) + { + throw std::domain_error("Must be at least two data points."); + } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + } + + // Why not implement push_back? It's awkward: If the buffer is circular, x0_ += dx_. + // If the buffer is not circular, x0_ is unchanged. + // We need a concept for circular_buffer! + + inline Real operator()(Real x) const { + const Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return y_.back(); + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + + return (1-t)*(1-t)*(y0*(1+2*t) + v0*(x-xi)) + + t*t*(y1*(3-2*t) + dx_*v1*(t-1)); + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dydx_.back(); + } + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + + return 6*t*(1-t)*(y1 - y0)/dx_ + (3*t*t - 4*t+1)*v0 + t*(3*t-2)*v1; + } + + + auto size() const + { + return y_.size(); + } + + RandomAccessContainer y_; + RandomAccessContainer dydx_; + Real x0_; + Real dx_; +}; + + +template +class cardinal_cubic_hermite_detail_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + cardinal_cubic_hermite_detail_aos(RandomAccessContainer && dat, Real x0, Real dx) + : dat_{std::move(dat)}, x0_{x0}, dx_{dx} + { + if (dat_.size() < 2) + { + throw std::domain_error("Must be at least two data points."); + } + if (dat_[0].size() != 2) + { + throw std::domain_error("Each datum must contain (y, y'), and nothing else."); + } + } + + inline Real operator()(Real x) const { + using std::floor; + const Real xf = x0_ + (dat_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return dat_.back()[0]; + } + + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x-xi)/dx_; + Real y0 = dat_[i][0]; + Real y1 = dat_[i+1][0]; + Real v0 = dat_[i][1]; + Real v1 = dat_[i+1][1]; + + + return (1-t)*(1-t)*(y0*(1+2*t) + v0*(x-xi)) + + t*t*(y1*(3-2*t) + dx_*v1*(t-1)); + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (dat_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dat_.back()[1]; + } + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + Real y0 = dat_[i][0]; + Real y1 = dat_[i+1][0]; + Real v0 = dat_[i][1]; + Real v1 = dat_[i+1][1]; + + return 6*t*(1-t)*(y1 - y0)/dx_ + (3*t*t - 4*t+1)*v0 + t*(3*t-2)*v1; + } + + + auto size() const { + return dat_.size(); + } + + RandomAccessContainer dat_; + Real x0_; + Real dx_; +}; + + +} +#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index c3e4b8e0b..224f7aab5 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -97,11 +97,15 @@ public: Real t7 = t6*t; Real dx2 = dx*dx; Real dx3 = dx2*dx; - Real z0 = 20*t7 - 70*t6 + 84*t5 - 35*t4 + 1; + + + Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); + Real z4 = -s; + Real z0 = s + 1; Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; - Real z4 = 1 - z0; + Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; Real z7 = t7/6 - t6/2 + t5/2 - t4/6; diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 591030adb..ad794caf2 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #include @@ -295,7 +295,8 @@ public: m_lin = std::make_shared>>(std::move(y), grid_refinements); } if constexpr (p == 4 || p == 5) { - m_cbh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx)); + Real dx = Real(1)/(1 << grid_refinements); + m_cbh = std::make_shared>>(std::move(y), std::move(dydx), Real(0), dx); } if constexpr (p >= 6 && p <= 9) { m_qh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); @@ -308,6 +309,9 @@ public: Real operator()(Real x) const { + if (x <= 0 || x >= 2*p-1) { + return 0; + } if constexpr (p==2) { return m_mh->operator()(x); } @@ -326,6 +330,10 @@ public: } Real prime(Real x) const { + if (x <= 0 || x >= 2*p-1) + { + return 0; + } if constexpr (p==2 || p == 3) { throw std::domain_error("The 2 and 3-vanishing moment Daubechies scaling function is not continuously differentiable."); } @@ -351,7 +359,7 @@ private: // Need this for p = 3: std::shared_ptr>> m_lin; // need this for p = 4,5: - std::shared_ptr>> m_cbh; + std::shared_ptr>> m_cbh; // need this for p = 6,7,8,9: std::shared_ptr>> m_qh; diff --git a/test/cardinal_cubic_hermite_test.cpp b/test/cardinal_cubic_hermite_test.cpp new file mode 100644 index 000000000..4af0ebfd5 --- /dev/null +++ b/test/cardinal_cubic_hermite_test.cpp @@ -0,0 +1,182 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "math_unit_test.hpp" +#include +#include +#include +#include +#include +#include +#ifdef BOOST_HAS_FLOAT128 +#include +using boost::multiprecision::float128; +#endif + + +using boost::math::interpolators::cardinal_cubic_hermite; +using boost::math::interpolators::cardinal_cubic_hermite_aos; + +template +void test_constant() +{ + Real x0 = 0; + Real dx = 2; + std::vector y(25); + for (auto & t : y) { + t = 7; + } + + std::vector dydx(y.size(), Real(0)); + + auto hermite_spline = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); + + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), hermite_spline(t), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(t), 2); + } + + // Array of structs: + + std::vector> data(25); + for (auto & t : data) { + t[0] = 7; + t[1] = 0; + } + auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(t), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(t), 2); + } + +} + + +template +void test_linear() +{ + Real x0 = 0; + Real dx = 1; + std::vector y{0,1,2,3}; + std::vector dydx{1,1,1,1}; + auto y_copy = y; + auto dydx_copy = dydx; + auto hermite_spline = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); + + CHECK_ULP_CLOSE(y[0], hermite_spline(0), 0); + CHECK_ULP_CLOSE(Real(1)/Real(2), hermite_spline(Real(1)/Real(2)), 10); + CHECK_ULP_CLOSE(y[1], hermite_spline(1), 0); + CHECK_ULP_CLOSE(Real(3)/Real(2), hermite_spline(Real(3)/Real(2)), 10); + CHECK_ULP_CLOSE(y[2], hermite_spline(2), 0); + CHECK_ULP_CLOSE(Real(5)/Real(2), hermite_spline(Real(5)/Real(2)), 10); + CHECK_ULP_CLOSE(y[3], hermite_spline(3), 0); + + + y.resize(45); + dydx.resize(45); + for (size_t i = 0; i < y.size(); ++i) { + y[i] = i; + dydx[i] = 1; + } + + y_copy = y; + dydx_copy = dydx; + hermite_spline = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); + for (Real t = 0; t < 44; t += 0.5) { + CHECK_ULP_CLOSE(t, hermite_spline(t), 0); + CHECK_ULP_CLOSE(Real(1), hermite_spline.prime(t), 0); + } + +} + +/* +template +void test_quadratic() +{ + std::vector x(50); + std::default_random_engine rd; + std::uniform_real_distribution dis(0.1,1); + Real x0 = dis(rd); + x[0] = x0; + for (size_t i = 1; i < x.size(); ++i) { + x[i] = x[i-1] + dis(rd); + } + Real xmax = x.back(); + + std::vector y(x.size()); + std::vector dydx(x.size()); + for (size_t i = 0; i < x.size(); ++i) { + y[i] = x[i]*x[i]/2; + dydx[i] = x[i]; + } + + auto s = cubic_hermite(std::move(x), std::move(y), std::move(dydx)); + for (Real t = x0; t <= xmax; t+= 0.0125) + { + CHECK_ULP_CLOSE(t*t/2, s(t), 5); + CHECK_ULP_CLOSE(t, s.prime(t), 65); + } +} + +template +void test_interpolation_condition() +{ + for (size_t n = 4; n < 50; ++n) { + std::vector x(n); + std::vector y(n); + std::vector dydx(n); + std::default_random_engine rd; + std::uniform_real_distribution dis(0,1); + Real x0 = dis(rd); + x[0] = x0; + y[0] = dis(rd); + for (size_t i = 1; i < n; ++i) { + x[i] = x[i-1] + dis(rd); + y[i] = dis(rd); + dydx[i] = dis(rd); + } + + auto x_copy = x; + auto y_copy = y; + auto dydx_copy = dydx; + auto s = cubic_hermite(std::move(x_copy), std::move(y_copy), std::move(dydx_copy)); + //std::cout << "s = " << s << "\n"; + for (size_t i = 0; i < x.size(); ++i) { + CHECK_ULP_CLOSE(y[i], s(x[i]), 2); + CHECK_ULP_CLOSE(dydx[i], s.prime(x[i]), 2); + } + } +}*/ + +int main() +{ + test_constant(); + test_constant(); + test_constant(); + + test_linear(); + test_linear(); + test_linear(); + + /* + test_quadratic(); + test_interpolation_condition(); + + test_quadratic(); + test_interpolation_condition(); + + test_quadratic(); + test_interpolation_condition();*/ + +#ifdef BOOST_HAS_FLOAT128 + test_constant(); + test_linear(); +#endif + + return boost::math::test::report_errors(); +} From 12254d7133f7ef3f4c7ec1e989663f6987b211a2 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 10 Feb 2020 13:45:26 -0500 Subject: [PATCH 015/104] More tests of the cardinal_cubic_hermite interpolator. [CI SKIP] --- test/cardinal_cubic_hermite_test.cpp | 99 ++++++++++++++++------------ 1 file changed, 57 insertions(+), 42 deletions(-) diff --git a/test/cardinal_cubic_hermite_test.cpp b/test/cardinal_cubic_hermite_test.cpp index 4af0ebfd5..b3998b964 100644 --- a/test/cardinal_cubic_hermite_test.cpp +++ b/test/cardinal_cubic_hermite_test.cpp @@ -84,74 +84,91 @@ void test_linear() dydx[i] = 1; } - y_copy = y; - dydx_copy = dydx; - hermite_spline = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); + hermite_spline = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); for (Real t = 0; t < 44; t += 0.5) { CHECK_ULP_CLOSE(t, hermite_spline(t), 0); CHECK_ULP_CLOSE(Real(1), hermite_spline.prime(t), 0); } + std::vector> data(45); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i; + data[i][1] = 1; + } + + auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t < 44; t += 0.5) { + CHECK_ULP_CLOSE(t, hermite_spline_aos(t), 0); + CHECK_ULP_CLOSE(Real(1), hermite_spline_aos.prime(t), 0); + } + + } -/* + template void test_quadratic() { - std::vector x(50); - std::default_random_engine rd; - std::uniform_real_distribution dis(0.1,1); - Real x0 = dis(rd); - x[0] = x0; - for (size_t i = 1; i < x.size(); ++i) { - x[i] = x[i-1] + dis(rd); - } - Real xmax = x.back(); + Real x0 = -1; + Real dx = Real(1)/Real(256); - std::vector y(x.size()); - std::vector dydx(x.size()); - for (size_t i = 0; i < x.size(); ++i) { - y[i] = x[i]*x[i]/2; - dydx[i] = x[i]; + std::vector y(50); + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + Real x = x0 + i*dx; + y[i] = x*x/2; + dydx[i] = x; } - auto s = cubic_hermite(std::move(x), std::move(y), std::move(dydx)); - for (Real t = x0; t <= xmax; t+= 0.0125) + auto s = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); + for (Real t = x0; t <= x0 + 49*dx; t+= 0.0125) { - CHECK_ULP_CLOSE(t*t/2, s(t), 5); - CHECK_ULP_CLOSE(t, s.prime(t), 65); + CHECK_ULP_CLOSE(t*t/2, s(t), 12); + CHECK_ULP_CLOSE(t, s.prime(t), 70); } + + std::vector> data(50); + for (size_t i = 0; i < data.size(); ++i) { + Real x = x0 + i*dx; + data[i][0] = x*x/2; + data[i][1] = x; + } + + + auto saos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + for (Real t = x0; t <= x0 + 49*dx; t+= 0.0125) + { + CHECK_ULP_CLOSE(t*t/2, saos(t), 12); + CHECK_ULP_CLOSE(t, saos.prime(t), 70); + } + } + template void test_interpolation_condition() { for (size_t n = 4; n < 50; ++n) { - std::vector x(n); std::vector y(n); std::vector dydx(n); std::default_random_engine rd; - std::uniform_real_distribution dis(0,1); - Real x0 = dis(rd); - x[0] = x0; - y[0] = dis(rd); - for (size_t i = 1; i < n; ++i) { - x[i] = x[i-1] + dis(rd); + std::uniform_real_distribution dis(0.1,1); + Real x0 = Real(2); + Real dx = Real(1)/Real(128); + for (size_t i = 0; i < n; ++i) { y[i] = dis(rd); dydx[i] = dis(rd); } - auto x_copy = x; auto y_copy = y; auto dydx_copy = dydx; - auto s = cubic_hermite(std::move(x_copy), std::move(y_copy), std::move(dydx_copy)); - //std::cout << "s = " << s << "\n"; - for (size_t i = 0; i < x.size(); ++i) { - CHECK_ULP_CLOSE(y[i], s(x[i]), 2); - CHECK_ULP_CLOSE(dydx[i], s.prime(x[i]), 2); + auto s = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); + for (size_t i = 0; i < y.size(); ++i) { + CHECK_ULP_CLOSE(y[i], s(x0 + i*dx), 2); + CHECK_ULP_CLOSE(dydx[i], s.prime(x0 + i*dx), 2); } } -}*/ +} int main() { @@ -163,19 +180,17 @@ int main() test_linear(); test_linear(); - /* test_quadratic(); - test_interpolation_condition(); - test_quadratic(); - test_interpolation_condition(); - test_quadratic(); - test_interpolation_condition();*/ + test_interpolation_condition(); + test_interpolation_condition(); + test_interpolation_condition(); #ifdef BOOST_HAS_FLOAT128 test_constant(); test_linear(); + test_quadratic(); #endif return boost::math::test::report_errors(); From 6ff37dcddf3f2696bb85d56e2b3a1072b6168cc5 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 10 Feb 2020 14:11:55 -0500 Subject: [PATCH 016/104] Inline some evaluations [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index ad794caf2..01f66a475 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -91,7 +91,7 @@ public: h_ = Real(1)/(1<< grid_refinements); } - Real operator()(Real x) const { + inline Real operator()(Real x) const { using std::log; using std::floor; using std::sqrt; @@ -130,11 +130,8 @@ public: grid_refinements_ = grid_refinements; } - Real operator()(Real x) const { + inline Real operator()(Real x) const { using std::floor; - if (x <= 0 || x >= 5) { - return 0; - } Real y = x*(1<) { - // r = 21 is correct for p >= 10. - // Before that, r > 21 would be appropriate, but the hardware isn't there yet! // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18}; grid_refinements = r[p]; @@ -279,8 +274,6 @@ public: auto y = t0.get(); auto dydx = t1.get(); - - // Storing the vector of x's is unnecessary; it's only because I haven't implemented an equispaced cubic Hermite interpolator: std::vector x(y.size()); Real h = Real(2*p-1)/(x.size()-1); @@ -308,7 +301,7 @@ public: } - Real operator()(Real x) const { + inline Real operator()(Real x) const { if (x <= 0 || x >= 2*p-1) { return 0; } @@ -358,12 +351,11 @@ private: std::shared_ptr>> m_mh; // Need this for p = 3: std::shared_ptr>> m_lin; - // need this for p = 4,5: + // Need this for p = 4,5: std::shared_ptr>> m_cbh; - // need this for p = 6,7,8,9: + // Need this for p = 6,7,8,9: std::shared_ptr>> m_qh; - - // need this for p >= 10: + // Need this for p >= 10: std::shared_ptr>> m_sh; /*Real constant_interpolation(Real x) const { From be35dfedfa912bf8be765982bfc1dc4c15dfa088 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 10 Feb 2020 18:26:23 -0500 Subject: [PATCH 017/104] Sketch out cardinal quintic hermite [CI SKIP] --- .../cardinal_quintic_hermite.hpp | 54 +++++ .../detail/cardinal_cubic_hermite_detail.hpp | 1 - .../cardinal_quintic_hermite_detail.hpp | 203 ++++++++++++++++++ .../detail/quintic_hermite_detail.hpp | 4 +- .../special_functions/daubechies_scaling.hpp | 4 +- test/cardinal_quintic_hermite_test.cpp | 178 +++++++++++++++ 6 files changed, 439 insertions(+), 5 deletions(-) create mode 100644 include/boost/math/interpolators/cardinal_quintic_hermite.hpp create mode 100644 include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp create mode 100644 test/cardinal_quintic_hermite_test.cpp diff --git a/include/boost/math/interpolators/cardinal_quintic_hermite.hpp b/include/boost/math/interpolators/cardinal_quintic_hermite.hpp new file mode 100644 index 000000000..e515f40e8 --- /dev/null +++ b/include/boost/math/interpolators/cardinal_quintic_hermite.hpp @@ -0,0 +1,54 @@ +#ifndef BOOST_MATH_INTERPOLATORS_CARDINAL_QUINTIC_HERMITE_HPP +#define BOOST_MATH_INTERPOLATORS_CARDINAL_QUINTIC_HERMITE_HPP +#include +#include +#include +#include + +namespace boost::math::interpolators { + +template +class cardinal_quintic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_quintic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) + : impl_(std::make_shared>(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + +private: + std::shared_ptr> impl_; +}; + +template +class cardinal_quintic_hermite_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + cardinal_quintic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) + : impl_(std::make_shared>(std::move(data), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + +private: + std::shared_ptr> impl_; +}; + +} +#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp index dbbbc1a5a..3d7f165c8 100644 --- a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp @@ -129,7 +129,6 @@ public: } inline Real operator()(Real x) const { - using std::floor; const Real xf = x0_ + (dat_.size()-1)*dx_; if (x < x0_ || x > xf) { std::ostringstream oss; diff --git a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp new file mode 100644 index 000000000..13489447a --- /dev/null +++ b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp @@ -0,0 +1,203 @@ +#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_QUINTIC_HERMITE_DETAIL_HPP +#define BOOST_MATH_INTERPOLATORS_DETAIL_QUINTIC_HERMITE_DETAIL_HPP +#include +#include +#include +#include + +namespace boost::math::interpolators::detail { + +template +class cardinal_quintic_hermite_detail { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_quintic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) + : y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)}, x0_{x0}, dx_{dx} + { + if (y_.size() != dydx_.size()) { + throw std::domain_error("Numbers of derivatives must = number of abscissas."); + } + if (y_.size() != d2ydx2_.size()) { + throw std::domain_error("Number of second derivatives must equal number of abscissas."); + } + if (y_.size() < 2) { + throw std::domain_error("At least 2 abscissas are required."); + } + } + + + inline Real operator()(Real x) const { + const Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return y_.back(); + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + + // See the 'Basis functions' section of: + // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf + // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs + Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; + y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx_; + y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx_*dx_/2; + y += t*t*t*((1 + t*(-2 + t))*a1*dx_*dx_/2 + (-4 + t*(7 -3*t))*v1*dx_ + (10 + t*(-15 + 6*t))*y1); + // there's a bug here! + return std::numeric_limits::quiet_NaN(); + return y; + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return dydx_.back(); + } + + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real s0 = dydx_[i]; + Real s1 = dydx_[i+1]; + + return std::numeric_limits::quiet_NaN(); + } + + + +private: + RandomAccessContainer y_; + RandomAccessContainer dydx_; + RandomAccessContainer d2ydx2_; + Real x0_; + Real dx_; +}; + + +template +class cardinal_quintic_hermite_detail_aos { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_quintic_hermite_detail_aos(RandomAccessContainer && data, Real x0, Real dx) + : data_{std::move(data)} , x0_{x0}, dx_{dx} + { + if (data_.size() < 2) + { + throw std::domain_error("At least two points are required to interpolate using cardinal_quintic_hermite_aos"); + } + + if (data_[0].size() != 3) + { + throw std::domain_error("Each datum passed to the cardinal_quintic_hermite_aos must have three elements: {y, y', y''}"); + } + } + + + inline Real operator()(Real x) const { + const Real xf = x0_ + (data_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return data_.back()[0]; + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; + Real v0 = data_[i][1]; + Real v1 = data_[i+1][1]; + Real a0 = data_[i][2]; + Real a1 = data_[i+1][2]; + + // See the 'Basis functions' section of: + // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf + // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs + Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; + y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx_; + y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx_*dx_/2; + y += t*t*t*((1 + t*(-2 + t))*a1*dx_*dx_/2 + (-4 + t*(7 -3*t))*v1*dx_ + (10 + t*(-15 + 6*t))*y1); + return y; + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (data_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return data_.back()[1]; + } + + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real v0 = data_[i][1]; + Real v1 = data_[i+1][1]; + + return std::numeric_limits::quiet_NaN(); + } + + + +private: + RandomAccessContainer data_; + Real x0_; + Real dx_; +}; + +} +#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index f70a4744f..0d2a2d170 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -48,7 +48,7 @@ public: d2ydx2_.push_back(d2ydx2); } - Real operator()(Real x) const { + inline Real operator()(Real x) const { if (x < x_[0] || x > x_.back()) { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); @@ -86,7 +86,7 @@ public: return y; } - Real prime(Real x) const { + inline Real prime(Real x) const { if (x < x_[0] || x > x_.back()) { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 01f66a475..bbea82803 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -312,7 +312,7 @@ public: return m_lin->operator()(x); } if constexpr (p==4 || p ==5) { - return m_cbh->operator()(x); + return m_cbh->unchecked_evaluation(x); } if constexpr (p >= 6 && p <= 9) { return m_qh->operator()(x); @@ -331,7 +331,7 @@ public: throw std::domain_error("The 2 and 3-vanishing moment Daubechies scaling function is not continuously differentiable."); } if constexpr (p==4 || p ==5) { - return m_cbh->prime(x); + return m_cbh->unchecked_prime(x); } if constexpr (p >= 6 && p <= 9) { return m_qh->prime(x); diff --git a/test/cardinal_quintic_hermite_test.cpp b/test/cardinal_quintic_hermite_test.cpp new file mode 100644 index 000000000..c7b1ba9a3 --- /dev/null +++ b/test/cardinal_quintic_hermite_test.cpp @@ -0,0 +1,178 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "math_unit_test.hpp" +#include +#include +#include +#include +#include +#ifdef BOOST_HAS_FLOAT128 +#include +using boost::multiprecision::float128; +#endif + + +using boost::math::interpolators::cardinal_quintic_hermite; +using boost::math::interpolators::cardinal_quintic_hermite_aos; + +template +void test_constant() +{ + + std::vector y(25); + std::vector dydx(y.size(), 0); + std::vector d2ydx2(y.size(), 0); + for (auto & t : y) { + t = 7; + } + Real x0 = 4; + Real dx = Real(1)/Real(8); + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), qh(t), 24); + //CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + } + + +} + + +template +void test_linear() +{ + std::vector y{0,1,2,3, 4,5,6,7,8,9}; + Real x0 = 0; + Real dx = 1; + std::vector dydx(y.size(), 1); + std::vector d2ydx2(y.size(), 0); + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 9; t += 0.25) { + CHECK_ULP_CLOSE(Real(t), qh(t), 2); + //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + } +} + +template +void test_quadratic() +{ + Real x0 = 0; + Real dx = 1; + std::vector y(10); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i/2; + } + + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = i; + } + + std::vector d2ydx2(y.size(), 1); + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 9; t += 0.0078125) { + CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 2); + //CHECK_ULP_CLOSE(t, qh.prime(t), 2); + } + +} + +template +void test_cubic() +{ + Real x0 = 0; + Real dx = 1; + std::vector y(10); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i*i/6; + } + + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = i*i/2; + } + + std::vector d2ydx2(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + d2ydx2[i] = i; + } + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 9; t += 0.0078125) { + CHECK_ULP_CLOSE(Real(t*t*t)/6, qh(t), 10); + } +} + +template +void test_quartic() +{ + + Real x0 = 0; + Real dx = 1; + std::vector y(11); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i*i*i/24; + } + + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = i*i*i/6; + } + + std::vector d2ydx2(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + d2ydx2[i] = i*i/2; + } + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 1; t <= 11; t += 0.0078125) { + CHECK_ULP_CLOSE(Real(t*t*t*t)/24, qh(t), 100); + } +} + + +int main() +{ + /*test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic();*/ + + test_constant(); + test_linear(); + test_quadratic(); + /*test_cubic(); + test_quartic(); + + test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic(); + +#ifdef BOOST_HAS_FLOAT128 + test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic(); +#endif*/ + + return boost::math::test::report_errors(); +} From a0e61cb190fe8fbde904886b877668934bd7fd5b Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 11 Feb 2020 08:44:04 -0500 Subject: [PATCH 018/104] Fix test of cardinal hermite splines [CI SKIP] --- .../cardinal_quintic_hermite_detail.hpp | 5 +- .../detail/quintic_hermite_detail.hpp | 3 +- test/cardinal_quintic_hermite_test.cpp | 102 ++++++++++++++---- 3 files changed, 88 insertions(+), 22 deletions(-) diff --git a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp index 13489447a..9233a3e42 100644 --- a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp @@ -61,8 +61,6 @@ public: y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx_; y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx_*dx_/2; y += t*t*t*((1 + t*(-2 + t))*a1*dx_*dx_/2 + (-4 + t*(7 -3*t))*v1*dx_ + (10 + t*(-15 + 6*t))*y1); - // there's a bug here! - return std::numeric_limits::quiet_NaN(); return y; } @@ -108,7 +106,8 @@ private: template class cardinal_quintic_hermite_detail_aos { public: - using Real = typename RandomAccessContainer::value_type; + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; cardinal_quintic_hermite_detail_aos(RandomAccessContainer && data, Real x0, Real dx) : data_{std::move(data)} , x0_{x0}, dx_{dx} { diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 0d2a2d170..1342c1c51 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -39,7 +39,8 @@ public: void push_back(Real x, Real y, Real dydx, Real d2ydx2) { using std::abs; using std::isnan; - if (x <= x_.back()) { + if (x <= x_.back()) + { throw std::domain_error("Calling push_back must preserve the monotonicity of the x's"); } x_.push_back(x); diff --git a/test/cardinal_quintic_hermite_test.cpp b/test/cardinal_quintic_hermite_test.cpp index c7b1ba9a3..e44c02161 100644 --- a/test/cardinal_quintic_hermite_test.cpp +++ b/test/cardinal_quintic_hermite_test.cpp @@ -8,8 +8,6 @@ #include "math_unit_test.hpp" #include #include -#include -#include #include #ifdef BOOST_HAS_FLOAT128 #include @@ -40,14 +38,26 @@ void test_constant() //CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); } + std::vector> data(25); + for (size_t i = 0; i < data.size(); ++i) + { + data[i][0] = 7; + data[i][1] = 0; + data[i][2] = 0; + } + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), qh_aos(t), 24); + //CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + } } template void test_linear() { - std::vector y{0,1,2,3, 4,5,6,7,8,9}; + std::vector y{0,1,2,3,4,5,6,7,8,9}; Real x0 = 0; Real dx = 1; std::vector dydx(y.size(), 1); @@ -59,6 +69,21 @@ void test_linear() CHECK_ULP_CLOSE(Real(t), qh(t), 2); //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i; + data[i][1] = 1; + data[i][2] = 0; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + + for (Real t = 0; t <= 9; t += 0.25) { + CHECK_ULP_CLOSE(Real(t), qh_aos(t), 2); + //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + } + } template @@ -69,7 +94,7 @@ void test_quadratic() std::vector y(10); for (size_t i = 0; i < y.size(); ++i) { - y[i] = i*i/2; + y[i] = i*i/Real(2); } std::vector dydx(y.size()); @@ -82,10 +107,24 @@ void test_quadratic() auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); for (Real t = 0; t <= 9; t += 0.0078125) { - CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 2); + Real computed = qh(t); + CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); //CHECK_ULP_CLOSE(t, qh.prime(t), 2); } + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i/Real(2); + data[i][1] = i; + data[i][2] = 1; + } + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + + for (Real t = 0; t <= 9; t += 0.0078125) { + Real computed = qh_aos(t); + CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); + //CHECK_ULP_CLOSE(t, qh_aos.prime(t), 2); + } } template @@ -96,12 +135,12 @@ void test_cubic() std::vector y(10); for (size_t i = 0; i < y.size(); ++i) { - y[i] = i*i*i/6; + y[i] = i*i*i/Real(6); } std::vector dydx(y.size()); for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = i*i/2; + dydx[i] = i*i/Real(2); } std::vector d2ydx2(y.size()); @@ -112,7 +151,21 @@ void test_cubic() auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); for (Real t = 0; t <= 9; t += 0.0078125) { - CHECK_ULP_CLOSE(Real(t*t*t)/6, qh(t), 10); + Real computed = qh(t); + CHECK_ULP_CLOSE(Real(t*t*t)/6, computed, 10); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i*i/Real(6); + data[i][1] = i*i/Real(2); + data[i][2] = i; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t <= 9; t += 0.0078125) { + Real computed = qh_aos(t); + CHECK_ULP_CLOSE(Real(t*t*t)/6, computed, 10); } } @@ -122,42 +175,55 @@ void test_quartic() Real x0 = 0; Real dx = 1; - std::vector y(11); + std::vector y(7); for (size_t i = 0; i < y.size(); ++i) { - y[i] = i*i*i*i/24; + y[i] = i*i*i*i; } std::vector dydx(y.size()); for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = i*i*i/6; + dydx[i] = 4*i*i*i; } std::vector d2ydx2(y.size()); for (size_t i = 0; i < y.size(); ++i) { - d2ydx2[i] = i*i/2; + d2ydx2[i] = 12*i*i; } auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); - for (Real t = 1; t <= 11; t += 0.0078125) { - CHECK_ULP_CLOSE(Real(t*t*t*t)/24, qh(t), 100); + for (Real t = 0; t <= 6; t += 0.0078125) { + CHECK_ULP_CLOSE(Real(t*t*t*t), qh(t), 250); + } + + std::vector> data(7); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i*i*i; + data[i][1] = 4*i*i*i; + data[i][2] = 12*i*i; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t <= 6; t += 0.0078125) { + Real computed = qh_aos(t); + CHECK_ULP_CLOSE(t*t*t*t, computed, 10); } } int main() { - /*test_constant(); + test_constant(); test_linear(); test_quadratic(); test_cubic(); - test_quartic();*/ + test_quartic(); test_constant(); test_linear(); test_quadratic(); - /*test_cubic(); + test_cubic(); test_quartic(); test_constant(); @@ -172,7 +238,7 @@ int main() test_quadratic(); test_cubic(); test_quartic(); -#endif*/ +#endif return boost::math::test::report_errors(); } From 6c13d7989b3da7a5a6914ea192510866382db988 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 11 Feb 2020 09:08:21 -0500 Subject: [PATCH 019/104] O(1) evaluation of quintic Hermite splines. [CI SKIP] --- .../detail/cardinal_quintic_hermite_detail.hpp | 4 ++-- .../math/special_functions/daubechies_scaling.hpp | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp index 9233a3e42..c395da147 100644 --- a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp @@ -1,5 +1,5 @@ -#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_QUINTIC_HERMITE_DETAIL_HPP -#define BOOST_MATH_INTERPOLATORS_DETAIL_QUINTIC_HERMITE_DETAIL_HPP +#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_QUINTIC_HERMITE_DETAIL_HPP +#define BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_QUINTIC_HERMITE_DETAIL_HPP #include #include #include diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index bbea82803..5416eb46f 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -220,7 +221,7 @@ public: return detail::dyadic_grid(grid_refinements); }); - // if necessary, compute the second derivative: + // if necessary, compute the second and third derivative: std::vector d2ydx2; std::vector d3ydx3; if constexpr (p >= 6) { @@ -292,7 +293,8 @@ public: m_cbh = std::make_shared>>(std::move(y), std::move(dydx), Real(0), dx); } if constexpr (p >= 6 && p <= 9) { - m_qh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); + Real dx = Real(1)/(1 << grid_refinements); + m_qh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), Real(0), dx); } if constexpr (p >= 10) { m_sh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); @@ -315,14 +317,14 @@ public: return m_cbh->unchecked_evaluation(x); } if constexpr (p >= 6 && p <= 9) { - return m_qh->operator()(x); + return m_qh->unchecked_evaluation(x); } if constexpr (p >= 10) { return m_sh->operator()(x); } } - Real prime(Real x) const { + inline Real prime(Real x) const { if (x <= 0 || x >= 2*p-1) { return 0; @@ -334,7 +336,7 @@ public: return m_cbh->unchecked_prime(x); } if constexpr (p >= 6 && p <= 9) { - return m_qh->prime(x); + return m_qh->unchecked_prime(x); } if constexpr (p >= 10) { return m_sh->prime(x); @@ -354,7 +356,7 @@ private: // Need this for p = 4,5: std::shared_ptr>> m_cbh; // Need this for p = 6,7,8,9: - std::shared_ptr>> m_qh; + std::shared_ptr>> m_qh; // Need this for p >= 10: std::shared_ptr>> m_sh; From 44d528049b707afbe7e5b843d1c96b5166ccc5ea Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 11 Feb 2020 11:35:25 -0500 Subject: [PATCH 020/104] Second derivatives of quintic Hermite interpolators [CI SKIP] --- .../cardinal_quintic_hermite.hpp | 4 +- .../cardinal_quintic_hermite_detail.hpp | 60 ++++++++++++++++--- .../detail/quintic_hermite_detail.hpp | 19 ++++-- test/cardinal_quintic_hermite_test.cpp | 22 ++++--- test/quintic_hermite_test.cpp | 5 +- 5 files changed, 85 insertions(+), 25 deletions(-) diff --git a/include/boost/math/interpolators/cardinal_quintic_hermite.hpp b/include/boost/math/interpolators/cardinal_quintic_hermite.hpp index e515f40e8..d2d1ce696 100644 --- a/include/boost/math/interpolators/cardinal_quintic_hermite.hpp +++ b/include/boost/math/interpolators/cardinal_quintic_hermite.hpp @@ -23,6 +23,9 @@ public: return impl_->prime(x); } + inline Real double_prime(Real x) const { + return impl_->double_prime(x); + } private: std::shared_ptr> impl_; @@ -45,7 +48,6 @@ public: return impl_->prime(x); } - private: std::shared_ptr> impl_; }; diff --git a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp index c395da147..c59b360a8 100644 --- a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp @@ -86,13 +86,53 @@ public: Real xi = x0_ + i*dx_; Real t = (x - xi)/dx_; - Real s0 = dydx_[i]; - Real s1 = dydx_[i+1]; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; - return std::numeric_limits::quiet_NaN(); + Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0)/dx_; + dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; + dydx += (t*dx_/2)*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); + return dydx; } + inline Real double_prime(Real x) const { + const Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) { + return d2ydx2_.back(); + } + return this->unchecked_double_prime(x); + } + + inline Real unchecked_double_prime(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + + Real d2ydx2 = 60*t*(1 - 3*t + 2*t*t)*(y1 - y0)/(dx_*dx_); + d2ydx2 += (12*t/dx_)*((-3 + 8*t - 5*t*t)*v0 - (2 - 7*t + 5*t*t)*v1); + d2ydx2 += (1 - 9*t + 18*t*t - 10*t*t*t)*a0 + t*(3 - 12*t + 10*t*t)*a1; + return d2ydx2; + } private: RandomAccessContainer y_; @@ -152,9 +192,6 @@ public: Real a0 = data_[i][2]; Real a1 = data_[i+1][2]; - // See the 'Basis functions' section of: - // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf - // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx_; y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx_*dx_/2; @@ -184,10 +221,17 @@ public: Real xi = x0_ + i*dx_; Real t = (x - xi)/dx_; + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; Real v0 = data_[i][1]; Real v1 = data_[i+1][1]; + Real a0 = data_[i][2]; + Real a1 = data_[i+1][2]; - return std::numeric_limits::quiet_NaN(); + Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0)/dx_; + dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; + dydx += (t*dx_/2)*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); + return dydx; } @@ -199,4 +243,4 @@ private: }; } -#endif \ No newline at end of file +#endif diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 1342c1c51..84f64df9e 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -103,13 +103,20 @@ public: auto i = std::distance(x_.begin(), it) -1; Real x0 = *(it-1); Real x1 = *it; - Real s0 = dydx_[i]; - Real s1 = dydx_[i+1]; + Real dx = x1 - x0; - // Ridiculous linear interpolation. Fine for now: - Real numerator = s0*(x1-x) + s1*(x-x0); - Real denominator = x1 - x0; - return numerator/denominator; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + Real t= (x-x0)/dx; + + Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0)/dx; + dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; + dydx += (t*dx/2)*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); + return dydx; } diff --git a/test/cardinal_quintic_hermite_test.cpp b/test/cardinal_quintic_hermite_test.cpp index e44c02161..20f1bf633 100644 --- a/test/cardinal_quintic_hermite_test.cpp +++ b/test/cardinal_quintic_hermite_test.cpp @@ -35,7 +35,8 @@ void test_constant() for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { CHECK_ULP_CLOSE(Real(7), qh(t), 24); - //CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 24); } std::vector> data(25); @@ -49,7 +50,7 @@ void test_constant() auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { CHECK_ULP_CLOSE(Real(7), qh_aos(t), 24); - //CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), qh_aos.prime(t), 24); } } @@ -67,7 +68,8 @@ void test_linear() for (Real t = 0; t <= 9; t += 0.25) { CHECK_ULP_CLOSE(Real(t), qh(t), 2); - //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 2); } std::vector> data(10); @@ -81,7 +83,8 @@ void test_linear() for (Real t = 0; t <= 9; t += 0.25) { CHECK_ULP_CLOSE(Real(t), qh_aos(t), 2); - //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + CHECK_ULP_CLOSE(Real(1), qh_aos.prime(t), 2); + //CHECK_ULP_CLOSE(Real(0), qh_aos.double_prime(t), 2); } } @@ -109,7 +112,8 @@ void test_quadratic() for (Real t = 0; t <= 9; t += 0.0078125) { Real computed = qh(t); CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); - //CHECK_ULP_CLOSE(t, qh.prime(t), 2); + CHECK_ULP_CLOSE(t, qh.prime(t), 15); + CHECK_ULP_CLOSE(1, qh.double_prime(t), 32); } std::vector> data(10); @@ -123,7 +127,7 @@ void test_quadratic() for (Real t = 0; t <= 9; t += 0.0078125) { Real computed = qh_aos(t); CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); - //CHECK_ULP_CLOSE(t, qh_aos.prime(t), 2); + CHECK_ULP_CLOSE(t, qh_aos.prime(t), 7); } } @@ -153,6 +157,8 @@ void test_cubic() for (Real t = 0; t <= 9; t += 0.0078125) { Real computed = qh(t); CHECK_ULP_CLOSE(Real(t*t*t)/6, computed, 10); + CHECK_ULP_CLOSE(t*t/2, qh.prime(t), 15); + CHECK_ULP_CLOSE(t, qh.double_prime(t), 39); } std::vector> data(10); @@ -166,13 +172,13 @@ void test_cubic() for (Real t = 0; t <= 9; t += 0.0078125) { Real computed = qh_aos(t); CHECK_ULP_CLOSE(Real(t*t*t)/6, computed, 10); + CHECK_ULP_CLOSE(t*t/2, qh_aos.prime(t), 10); } } template void test_quartic() { - Real x0 = 0; Real dx = 1; std::vector y(7); @@ -195,6 +201,7 @@ void test_quartic() for (Real t = 0; t <= 6; t += 0.0078125) { CHECK_ULP_CLOSE(Real(t*t*t*t), qh(t), 250); + CHECK_ULP_CLOSE(4*t*t*t, qh.prime(t), 250); } std::vector> data(7); @@ -208,6 +215,7 @@ void test_quartic() for (Real t = 0; t <= 6; t += 0.0078125) { Real computed = qh_aos(t); CHECK_ULP_CLOSE(t*t*t*t, computed, 10); + CHECK_ULP_CLOSE(4*t*t*t, qh_aos.prime(t), 64); } } diff --git a/test/quintic_hermite_test.cpp b/test/quintic_hermite_test.cpp index 278955648..70547c879 100644 --- a/test/quintic_hermite_test.cpp +++ b/test/quintic_hermite_test.cpp @@ -103,7 +103,7 @@ void test_quadratic() for (Real t = 0; t <= 9; t += 0.0078125) { CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 2); - CHECK_ULP_CLOSE(t, qh.prime(t), 2); + CHECK_ULP_CLOSE(t, qh.prime(t), 7); } boost::random::mt19937 rng; @@ -133,9 +133,8 @@ void test_quadratic() for (Real t = xmin; t <= xmax; t += 0.125) { CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 4); + CHECK_ULP_CLOSE(t, qh.prime(t), 36); } - - } template From 0da0bc855b312bbab49f859da4c8cea795748928 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 13 Feb 2020 14:52:44 -0500 Subject: [PATCH 021/104] Never use Eigen + auto [CI SKIP] --- example/daubechies_scaling_integer_grid.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/example/daubechies_scaling_integer_grid.cpp b/example/daubechies_scaling_integer_grid.cpp index e4f832af9..3c7377a6a 100644 --- a/example/daubechies_scaling_integer_grid.cpp +++ b/example/daubechies_scaling_integer_grid.cpp @@ -1,5 +1,5 @@ /* - * Copyright Nick Thompson, 2019 + * Copyright Nick Thompson, John Maddock 2020 * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -55,7 +55,7 @@ std::list> integer_grid() Eigen::EigenSolver es(A); - auto complex_eigs = es.eigenvalues(); + typename Eigen::EigenSolver::EigenvalueType complex_eigs = es.eigenvalues(); std::vector eigs(complex_eigs.size(), std::numeric_limits::quiet_NaN()); @@ -80,7 +80,8 @@ std::list> integer_grid() } size_t idx = std::distance(eigs.begin(), it); std::cout << "Eigenvector for derivative " << j << " is at index " << idx << "\n"; - auto const & complex_eigenvec = es.eigenvectors().col(idx); + typename Eigen::EigenSolver::EigenvectorsType complex_eigenvectors = es.eigenvectors(); + auto complex_eigenvec = complex_eigenvectors.col(idx); std::vector eigenvec(complex_eigenvec.size() + 2, std::numeric_limits::quiet_NaN()); eigenvec[0] = 0; eigenvec[eigenvec.size()-1] = 0; @@ -221,7 +222,7 @@ int main() constexpr const size_t p_max = 15; std::ofstream fs{"daubechies_scaling_integer_grid.hpp"}; fs << "/*\n" - << " * Copyright Nick Thompson, 2019\n" + << " * Copyright Nick Thompson, John Maddock, 2020\n" << " * Use, modification and distribution are subject to the\n" << " * Boost Software License, Version 1.0. (See accompanying file\n" << " * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n" From 9397b01a3f6525f377fa18efc9f8b8501a4c8554 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 13 Feb 2020 17:34:52 -0500 Subject: [PATCH 022/104] O(1) septic Hermite splines [CI SKIP] --- .../detail/septic_hermite_detail.hpp | 222 +++++++++++++- .../math/interpolators/septic_hermite.hpp | 23 ++ .../special_functions/daubechies_scaling.hpp | 43 ++- test/septic_hermite_test.cpp | 288 ++++++++++++++++++ 4 files changed, 553 insertions(+), 23 deletions(-) create mode 100644 test/septic_hermite_test.cpp diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 224f7aab5..1df68f69e 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -160,5 +160,225 @@ private: RandomAccessContainer d2ydx2_; RandomAccessContainer d3ydx3_; }; + +template +class cardinal_septic_hermite_detail { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_septic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3, Real x0, Real dx) + : y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)}, d3ydx3_{std::move(d3ydx3)}, x0_{x0}, dx_{dx} + { + if (y_.size() != dydx_.size()) { + throw std::domain_error("Numbers of derivatives must = number of ordinates."); + } + if (y_.size() != d2ydx2_.size()) { + throw std::domain_error("Number of second derivatives must equal number of ordinates."); + } + if (y_.size() != d3ydx3_.size()) { + throw std::domain_error("Number of third derivatives must equal number of ordinates."); + } + + if (y_.size() < 2) { + throw std::domain_error("At least 2 abscissas are required."); + } + } + + inline Real operator()(Real x) const { + Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. + // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. + if (x == xf) + { + return y_.back(); + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + // Velocity: + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + // Acceleration: + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + // Jerk: + Real j0 = d3ydx3_[i]; + Real j1 = d3ydx3_[i+1]; + + // See: + // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m + Real t2 = t*t; + Real t3 = t2*t; + Real t4 = t3*t; + Real t5 = t4*t; + Real t6 = t5*t; + Real t7 = t6*t; + Real dx2 = dx_*dx_; + Real dx3 = dx2*dx_; + + Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); + Real z4 = -s; + Real z0 = s + 1; + Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; + Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; + Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; + + Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; + Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; + Real z7 = t7/6 - t6/2 + t5/2 - t4/6; + + return z0*y0 + z1*dx_*v0 + z2*dx2*a0 + z3*dx3*j0 + z4*y1 + z5*dx_*v1 + z6*dx2*a1 + z7*dx3*j1; + } + + inline Real prime(Real x) const { + Real xf = x0_ + (y_.size()-1)*dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dydx_.back(); + } + + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + +private: + RandomAccessContainer y_; + RandomAccessContainer dydx_; + RandomAccessContainer d2ydx2_; + RandomAccessContainer d3ydx3_; + Real x0_; + Real dx_; +}; + + +template +class cardinal_septic_hermite_detail_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + cardinal_septic_hermite_detail_aos(RandomAccessContainer && dat, Real x0, Real dx) + : data_{std::move(dat)}, x0_{x0}, dx_{dx} + { + if (data_.size() < 2) { + throw std::domain_error("At least 2 abscissas are required."); + } + if (data_[0].size() != 4) { + throw std::domain_error("There must be 4 data items per struct."); + } + } + + inline Real operator()(Real x) const { + Real xf = x0_ + (data_.size()-1)*dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. + // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. + if (x == xf) + { + return data_.back()[0]; + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const { + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; + // Velocity: + Real v0 = data_[i][1]; + Real v1 = data_[i+1][1]; + // Acceleration: + Real a0 = data_[i][2]; + Real a1 = data_[i+1][2]; + // Jerk: + Real j0 = data_[i][3]; + Real j1 = data_[i+1][3]; + + Real t2 = t*t; + Real t3 = t2*t; + Real t4 = t3*t; + Real t5 = t4*t; + Real t6 = t5*t; + Real t7 = t6*t; + Real dx2 = dx_*dx_; + Real dx3 = dx2*dx_; + + Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); + Real z4 = -s; + Real z0 = s + 1; + Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; + Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; + Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; + + Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; + Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; + Real z7 = t7/6 - t6/2 + t5/2 - t4/6; + + return z0*y0 + z1*dx_*v0 + z2*dx2*a0 + z3*dx3*j0 + z4*y1 + z5*dx_*v1 + z6*dx2*a1 + z7*dx3*j1; + } + + inline Real prime(Real x) const { + Real xf = x0_ + (data_.size()-1)*dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return data_.back()[1]; + } + + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + return std::numeric_limits::quiet_NaN(); + } + +private: + RandomAccessContainer data_; + Real x0_; + Real dx_; +}; + + } -#endif \ No newline at end of file +#endif diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp index c544d1c63..54da49a02 100644 --- a/include/boost/math/interpolators/septic_hermite.hpp +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -34,5 +34,28 @@ public: private: std::shared_ptr> impl_; }; + +template +class cardinal_septic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_septic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, + RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3, Real x0, Real dx) + : impl_(std::make_shared>( + std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx)) + {} + + Real operator()(Real x) const { + return impl_->operator()(x); + } + + Real prime(Real x) const { + return impl_->prime(x); + } + +private: + std::shared_ptr> impl_; +}; + } #endif \ No newline at end of file diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 5416eb46f..43037e9f3 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -13,7 +13,9 @@ #include #include #include +#if BOOST_HAS_FLOAT128 #include +#endif #include #include #include @@ -89,7 +91,7 @@ public: matched_holder(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements) : y_{std::move(y)}, dydx_{std::move(dydx)} { - h_ = Real(1)/(1<< grid_refinements); + inv_h_ = 1<< grid_refinements; } inline Real operator()(Real x) const { @@ -97,25 +99,27 @@ public: using std::floor; using std::sqrt; using std::pow; - if (x <= 0 || x >= 3) { - return 0; - } // This is the exact Holder exponent, but it's pessimistic almost everywhere! // It's only exactly right at dyadic rationals. + // Some compilers do not evaluate this at compile time: Real const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); + Real const onemalpham1 = 1/(1-alpha); + //const Real alpha = 0.5500156865235042; // So we're gonna make the graph dip a little harder; this will capture more of the self-similar behavior: //Real constexpr const alpha = Real(3)/Real(10); - int64_t i = static_cast(floor(x/h_)); - Real t = (x- i*h_)/h_; + Real s = x*inv_h_; + Real ii = floor(s); + int64_t i = static_cast(ii); + Real t = s - ii; Real v = y_[i]; - Real dphi = dydx_[i+1]*h_; - v += (dphi - alpha*(y_[i+1] - y_[i]))*t/(1-alpha); - v += (-dphi + y_[i+1] - y_[i])*pow(t, alpha)/(1-alpha); + Real dphi = dydx_[i+1]/inv_h_; + Real diff = y_[i+1] - y_[i]; + v += ((dphi - alpha*diff)*t + (-dphi + diff)*pow(t, alpha) )*onemalpham1; return v; } private: - Real h_; + Real inv_h_; RandomAccessContainer y_; RandomAccessContainer dydx_; }; @@ -155,7 +159,9 @@ public: daubechies_scaling(int grid_refinements = -1) { static_assert(p <= 15, "Scaling functions only implements up to p = 15"); + #if BOOST_HAS_FLOAT128 using boost::multiprecision::float128; + #endif if (grid_refinements < 0) { if (std::is_same_v) @@ -275,13 +281,6 @@ public: auto y = t0.get(); auto dydx = t1.get(); - // Storing the vector of x's is unnecessary; it's only because I haven't implemented an equispaced cubic Hermite interpolator: - std::vector x(y.size()); - Real h = Real(2*p-1)/(x.size()-1); - for (size_t i = 0; i < x.size(); ++i) { - x[i] = i*h; - } - if constexpr (p==2) { m_mh = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); } @@ -297,9 +296,9 @@ public: m_qh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), Real(0), dx); } if constexpr (p >= 10) { - m_sh = std::make_shared>>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + Real dx = Real(1)/(1 << grid_refinements); + m_sh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), Real(0), dx); } - } @@ -320,7 +319,7 @@ public: return m_qh->unchecked_evaluation(x); } if constexpr (p >= 10) { - return m_sh->operator()(x); + return m_sh->unchecked_evaluation(x); } } @@ -339,7 +338,7 @@ public: return m_qh->unchecked_prime(x); } if constexpr (p >= 10) { - return m_sh->prime(x); + return m_sh->unchecked_prime(x); } } @@ -358,7 +357,7 @@ private: // Need this for p = 6,7,8,9: std::shared_ptr>> m_qh; // Need this for p >= 10: - std::shared_ptr>> m_sh; + std::shared_ptr>> m_sh; /*Real constant_interpolation(Real x) const { if (x <= 0 || x >= 2*p-1) { diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp new file mode 100644 index 000000000..ed9772328 --- /dev/null +++ b/test/septic_hermite_test.cpp @@ -0,0 +1,288 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "math_unit_test.hpp" +#include +#include +#include +#include +#include +#ifdef BOOST_HAS_FLOAT128 +#include +using boost::multiprecision::float128; +#endif + + +using boost::math::interpolators::septic_hermite; +using boost::math::interpolators::cardinal_septic_hermite; + +template +void test_constant() +{ + + std::vector x{0,1,2,3, 9, 22, 81}; + std::vector y(x.size()); + std::vector dydx(x.size(), 0); + std::vector d2ydx2(x.size(), 0); + std::vector d3ydx3(x.size(), 0); + for (auto & t : y) { + t = 7; + } + + auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = 0; t <= 81; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), sh(t), 24); + CHECK_ULP_CLOSE(Real(0), sh.prime(t), 24); + } + + Real x0 = 0; + Real dx = 1; + y.resize(128, 7); + dydx.resize(128, 0); + d2ydx2.resize(128, 0); + d3ydx3.resize(128, 0); + auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); + for (Real t = x0; t <= 127; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), csh(t), 24); + //CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); + } + +} + + +template +void test_linear() +{ + std::vector x{0,1,2,3, 4,5,6,7,8,9}; + std::vector y = x; + std::vector dydx(x.size(), 1); + std::vector d2ydx2(x.size(), 0); + std::vector d3ydx3(x.size(), 0); + + auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = 0; t <= 9; t += 0.25) { + CHECK_ULP_CLOSE(Real(t), sh(t), 2); + //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + } + + boost::random::mt19937 rng; + boost::random::uniform_real_distribution dis(0.5,1); + x.resize(512); + x[0] = dis(rng); + Real xmin = x[0]; + for (size_t i = 1; i < x.size(); ++i) { + x[i] = x[i-1] + dis(rng); + } + Real xmax = x.back(); + + y = x; + dydx.resize(x.size(), 1); + d2ydx2.resize(x.size(), 0); + d3ydx3.resize(x.size(), 0); + + sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = xmin; t <= xmax; t += 0.125) { + CHECK_ULP_CLOSE(t, sh(t), 15); + } +} + +template +void test_quadratic() +{ + std::vector x{0,1,2,3,4,5,6,7,8,9}; + std::vector y(x.size()); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = x[i]*x[i]/2; + } + + std::vector dydx(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = x[i]; + } + + std::vector d2ydx2(x.size(), 1); + std::vector d3ydx3(x.size(), 0); + + auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = 0; t <= 9; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t/2, sh(t), 100); + //CHECK_ULP_CLOSE(t, qh.prime(t), 7); + } + + boost::random::mt19937 rng; + boost::random::uniform_real_distribution dis(0.5,1); + x.resize(8); + x[0] = dis(rng); + Real xmin = x[0]; + for (size_t i = 1; i < x.size(); ++i) { + x[i] = x[i-1] + dis(rng); + } + Real xmax = x.back(); + + y.resize(x.size()); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = x[i]*x[i]/2; + } + + dydx.resize(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = x[i]; + } + + d2ydx2.resize(x.size(), 1); + d3ydx3.resize(x.size(), 0); + + sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = xmin; t <= xmax; t += 0.125) { + CHECK_ULP_CLOSE(t*t/2, sh(t), 24); + //CHECK_ULP_CLOSE(t, qh.prime(t), 36); + } +} + +template +void test_cubic() +{ + + std::vector x{0,1,2,3,4,5,6,7}; + Real xmax = x.back(); + std::vector y(x.size()); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = x[i]*x[i]*x[i]; + } + + std::vector dydx(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = 3*x[i]*x[i]; + } + + std::vector d2ydx2(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + d2ydx2[i] = 6*x[i]; + } + std::vector d3ydx3(x.size(), 6); + + auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = 0; t <= xmax; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t*t, sh(t), 151); + } +} + +template +void test_quartic() +{ + + std::vector x{0,1,2,3,4,5,6,7,8,9}; + Real xmax = x.back(); + std::vector y(x.size()); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = x[i]*x[i]*x[i]*x[i]; + } + + std::vector dydx(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = 4*x[i]*x[i]*x[i]; + } + + std::vector d2ydx2(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + d2ydx2[i] = 12*x[i]*x[i]; + } + + std::vector d3ydx3(x.size()); + for (size_t i = 0; i < y.size(); ++i) { + d3ydx3[i] = 24*x[i]; + } + + auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + + for (Real t = 1; t <= xmax; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t*t*t, sh(t), 117); + } +} + + +template +void test_interpolation_condition() +{ + for (size_t n = 4; n < 50; ++n) { + std::vector x(n); + std::vector y(n); + std::vector dydx(n); + std::vector d2ydx2(n); + std::vector d3ydx3(n); + boost::random::mt19937 rd; + boost::random::uniform_real_distribution dis(0,1); + Real x0 = dis(rd); + x[0] = x0; + y[0] = dis(rd); + for (size_t i = 1; i < n; ++i) { + x[i] = x[i-1] + dis(rd); + y[i] = dis(rd); + dydx[i] = dis(rd); + d2ydx2[i] = dis(rd); + d3ydx3[i] = dis(rd); + } + + auto x_copy = x; + auto y_copy = y; + auto dydx_copy = dydx; + auto d2ydx2_copy = d2ydx2; + auto d3ydx3_copy = d3ydx3; + auto s = septic_hermite(std::move(x_copy), std::move(y_copy), std::move(dydx_copy), std::move(d2ydx2_copy), std::move(d3ydx3_copy)); + + for (size_t i = 0; i < x.size(); ++i) { + CHECK_ULP_CLOSE(y[i], s(x[i]), 2); + //CHECK_ULP_CLOSE(dydx[i], s.prime(x[i]), 2); + } + } +} + + +int main() +{ + test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic(); + test_interpolation_condition(); + + test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic(); + test_interpolation_condition(); + + test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic(); + test_interpolation_condition(); + +#ifdef BOOST_HAS_FLOAT128 + test_constant(); + test_linear(); + test_quadratic(); + test_cubic(); + test_quartic(); + test_interpolation_condition(); +#endif + + return boost::math::test::report_errors(); +} From 2134a9c914e620bb9120a3189771e1d0bd5081f2 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 15 Feb 2020 08:36:38 -0500 Subject: [PATCH 023/104] Move examples/daubechies_files.cpp to examples/daubechies_wavelets/some_file.cpp [CI SKIP] --- .../daubechies_coefficients.cpp | 0 .../daubechies_scaling_integer_grid.cpp | 0 .../find_best_daubechies_interpolator.cpp | 584 ++++++++++++++++++ example/find_best_daubechies_interpolator.cpp | 507 --------------- .../detail/septic_hermite_detail.hpp | 11 +- .../special_functions/daubechies_scaling.hpp | 4 +- 6 files changed, 596 insertions(+), 510 deletions(-) rename example/{ => daubechies_wavelets}/daubechies_coefficients.cpp (100%) rename example/{ => daubechies_wavelets}/daubechies_scaling_integer_grid.cpp (100%) create mode 100644 example/daubechies_wavelets/find_best_daubechies_interpolator.cpp delete mode 100644 example/find_best_daubechies_interpolator.cpp diff --git a/example/daubechies_coefficients.cpp b/example/daubechies_wavelets/daubechies_coefficients.cpp similarity index 100% rename from example/daubechies_coefficients.cpp rename to example/daubechies_wavelets/daubechies_coefficients.cpp diff --git a/example/daubechies_scaling_integer_grid.cpp b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp similarity index 100% rename from example/daubechies_scaling_integer_grid.cpp rename to example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp new file mode 100644 index 000000000..09292ebca --- /dev/null +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -0,0 +1,584 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include +//#include + +using boost::multiprecision::float128; + + +template +void choose_refinement() +{ + std::cout << "Choosing refinement for " << boost::core::demangle(typeid(Real).name()) << " precision Daubechies scaling function with " << p << " vanishing moments.\n"; + using std::abs; + int rmax = 21; + auto phi_dense = boost::math::detail::dyadic_grid(rmax); + Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); + + for (int r = 2; r <= rmax - 2; ++r) + { + auto phi_accurate = boost::math::detail::dyadic_grid(r); + std::vector phi(phi_accurate.size()); + for (size_t i = 0; i < phi_accurate.size(); ++i) + { + phi[i] = Real(phi_accurate[i]); + } + auto phi_prime_accurate = boost::math::detail::dyadic_grid(r); + std::vector phi_prime(phi_accurate.size()); + for (size_t i = 0; i < phi_prime_accurate.size(); ++i) + { + phi_prime[i] = Real(phi_prime_accurate[i]); + } + + Real dx = (2*p-1)/static_cast(phi.size()-1); + std::cout << "\tdx = 1/" << (1/dx) << " = " << dx << "\n"; + + if constexpr (p < 6 && p >= 3) + { + auto ch = boost::math::interpolators::cardinal_cubic_hermite(std::move(phi), std::move(phi_prime), Real(0), Real(dx)); + Real flt_distance = 0; + Real sup = 0; + Real worst_abscissa = 0; + Real worst_value = 0; + Real worst_computed = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real t = i*dx_dense; + Real computed = ch(t); + Real expected = Real(phi_dense[i]); + if (std::abs(expected) < 100*std::numeric_limits::epsilon()) + { + continue; + } + Real diff = abs(computed - expected); + Real distance = abs(boost::math::float_distance(computed, expected)); + if (distance > flt_distance) + { + flt_distance = distance; + worst_abscissa = t; + worst_value = expected; + worst_computed = computed; + } + if (diff > sup) + { + sup = diff; + } + } + std::cout << "\t\tFloat distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; + std::cout << "\t\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; + } + else if constexpr (p >= 6) + { + auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + auto qh = boost::math::interpolators::cardinal_quintic_hermite(std::move(phi), std::move(phi_prime), std::move(phi_dbl_prime), Real(0), dx); + Real flt_distance = 0; + Real sup = 0; + Real worst_abscissa = 0; + Real worst_value = 0; + Real worst_computed = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real t = i*dx_dense; + Real computed = qh(t); + Real expected = Real(phi_dense[i]); + if (std::abs(expected) < 100*std::numeric_limits::epsilon()) + { + continue; + } + + Real diff = abs(computed - expected); + Real distance = abs(boost::math::float_distance(computed, expected)); + if (distance > flt_distance) + { + flt_distance = distance; + worst_abscissa = t; + worst_value = expected; + worst_computed = computed; + } + if (diff > sup) + { + sup = diff; + } + std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; + std::cout << "\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; + } + } + } +} + +template +void find_best_interpolator() +{ + std::string filename = "daubechies_" + std::to_string(p) + "_scaling_convergence.csv"; + std::ofstream fs{filename}; + static_assert(sizeof(PreciseReal) >= sizeof(Real), "sizeof(PreciseReal) >= sizeof(Real) is required."); + using std::abs; + int rmax = 21; + auto phi_dense_precise = boost::math::detail::dyadic_grid(rmax); + std::vector phi_dense(phi_dense_precise.size()); + for (size_t i = 0; i < phi_dense.size(); ++i) + { + phi_dense[i] = static_cast(phi_dense_precise[i]); + } + phi_dense_precise.resize(0); + + Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); + fs << std::setprecision(std::numeric_limits::digits10 + 3); + fs << std::fixed; + fs << "r, matched_holder, linear, quadratic B-spline, cubic B-spline, quintic B-spline, cubic Hermite, pchip, makima, fo_taylor"; + if (p==2) { + fs << "\n"; + } + else { + fs << ", quintic hermite, second-order taylor"; + if (p > 3) + { + fs << ", third order taylor, septic_hermite\n"; + } + else { + fs << "\n"; + } + } + for (int r = 2; r < rmax-1; ++r) + { + fs << r << ", "; + std::map m; + auto phi = boost::math::detail::dyadic_grid(r); + auto phi_prime = boost::math::detail::dyadic_grid(r); + + std::vector x(phi.size()); + Real dx = (2*p-1)/static_cast(x.size()-1); + std::cout << "dx = 1/" << (1 << r) << " = " << dx << "\n"; + for (size_t i = 0; i < x.size(); ++i) + { + x[i] = i*dx; + } + + { + auto phi_copy = phi; + auto phi_prime_copy = phi_prime; + auto mh = boost::math::detail::matched_holder(std::move(phi_copy), std::move(phi_prime_copy), r); + Real sup = 0; + // call to matched_holder is unchecked: + for (size_t i = 0; i < phi_dense.size() - 1; ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - mh(x)); + if (diff > sup) + { + sup = diff; + } + } + m.insert({sup, "matched_holder"}); + fs << sup << ", "; + } + + + { + auto linear = [&phi, &dx, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) + { + return Real(0); + } + using std::floor; + + Real y = (1<(k); + + Real t = y - k; + return (1-t)*phi[kk] + t*phi[kk+1]; + }; + + Real linear_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - linear(x)); + if (diff > linear_sup) + { + linear_sup = diff; + } + } + m.insert({linear_sup, "linear interpolation"}); + fs << linear_sup << ", "; + } + + + { + auto qbs = boost::math::interpolators::cardinal_quadratic_b_spline(phi.data(), phi.size(), Real(0), dx, phi_prime.front(), phi_prime.back()); + Real qbs_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - qbs(x)); + if (diff > qbs_sup) { + qbs_sup = diff; + } + } + m.insert({qbs_sup, "quadratic_b_spline"}); + fs << qbs_sup << ", "; + } + + { + auto cbs = boost::math::interpolators::cardinal_cubic_b_spline(phi.data(), phi.size(), Real(0), dx, phi_prime.front(), phi_prime.back()); + Real cbs_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - cbs(x)); + if (diff > cbs_sup) + { + cbs_sup = diff; + } + } + m.insert({cbs_sup, "cubic_b_spline"}); + fs << cbs_sup << ", "; + } + + { + auto qbs = boost::math::interpolators::cardinal_quintic_b_spline(phi.data(), phi.size(), Real(0), dx, {0,0}, {0,0}); + Real qbs_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - qbs(x)); + if (diff > qbs_sup) + { + qbs_sup = diff; + } + } + m.insert({qbs_sup, "quintic_b_spline"}); + fs << qbs_sup << ", "; + } + + { + auto phi_copy = phi; + auto phi_prime_copy = phi_prime; + auto ch = boost::math::interpolators::cardinal_cubic_hermite(std::move(phi_copy), std::move(phi_prime_copy), Real(0), dx); + Real chs_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - ch(x)); + if (diff > chs_sup) + { + chs_sup = diff; + } + } + m.insert({chs_sup, "cubic_hermite_spline"}); + fs << chs_sup << ", "; + } + + { + auto phi_copy = phi; + auto x_copy = x; + auto phi_prime_copy = phi_prime; + auto pc = boost::math::interpolators::pchip(std::move(x_copy), std::move(phi_copy)); + Real pchip_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - pc(x)); + if (diff > pchip_sup) + { + pchip_sup = diff; + } + } + m.insert({pchip_sup, "pchip"}); + fs << pchip_sup << ", "; + } + + { + auto phi_copy = phi; + auto x_copy = x; + auto pc = boost::math::interpolators::makima(std::move(x_copy), std::move(phi_copy)); + Real makima_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - pc(x)); + if (diff > makima_sup) + { + makima_sup = diff; + } + } + m.insert({makima_sup, "makima"}); + fs << makima_sup << ", "; + } + + // Whittaker-Shannon interpolation has linear complexity; test over all points and it's quadratic. + // I ran this a couple times and found it's not competitive; so comment out for now. + /*{ + auto phi_copy = phi; + auto ws = boost::math::interpolators::whittaker_shannon(std::move(phi_copy), Real(0), dx); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + using std::abs; + Real diff = abs(phi_dense[i] - ws(x)); + if (diff > sup) { + sup = diff; + } + } + + m.insert({sup, "whittaker_shannon"}); + } + + // Again, linear complexity of evaluation => quadratic complexity of exhaustive checking. + { + auto trig = boost::math::interpolators::cardinal_trigonometric(phi, Real(0), dx); + Real sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { + Real x = i*dx_dense; + using std::abs; + Real diff = abs(phi_dense[i] - trig(x)); + if (diff > sup) { + sup = diff; + } + } + m.insert({sup, "trig"}); + }*/ + + { + auto fotaylor = [&phi, &phi_prime, &r](Real x)->Real + { + if (x <= 0 || x >= 2*p-1) + { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1< fo_sup) + { + fo_sup = diff; + } + } + m.insert({fo_sup, "First-order Taylor"}); + if (p==2) { + fs << fo_sup << "\n"; + } + else { + fs << fo_sup << ", "; + } + } + + if constexpr (p > 2) { + auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + + { + auto phi_copy = phi; + auto phi_prime_copy = phi_prime; + auto phi_dbl_prime_copy = phi_dbl_prime; + auto qh = boost::math::interpolators::cardinal_quintic_hermite(std::move(phi_copy), std::move(phi_prime_copy), std::move(phi_dbl_prime_copy), Real(0), dx); + Real qh_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - qh(x)); + if (diff > qh_sup) + { + qh_sup = diff; + } + } + m.insert({qh_sup, "quintic_hermite_spline"}); + fs << qh_sup << ", "; + } + + { + auto sotaylor = [&phi, &phi_prime, &phi_dbl_prime, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) + { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1< so_sup) + { + so_sup = diff; + } + } + m.insert({so_sup, "Second-order Taylor"}); + if (p > 3) + { + fs << so_sup << ", "; + } + else + { + fs << so_sup << "\n"; + } + + } + } + + if constexpr (p > 3) + { + auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + auto phi_triple_prime = boost::math::detail::dyadic_grid(r); + + { + auto totaylor = [&phi, &phi_prime, &phi_dbl_prime, &phi_triple_prime, &r](Real x)->Real { + if (x <= 0 || x >= 2*p-1) { + return 0; + } + using std::floor; + + Real y = (1<(k); + if (y - k < k + 1 - y) + { + Real eps = (y-k)/(1< to_sup) + { + to_sup = diff; + } + } + + m.insert({to_sup, "Third-order Taylor"}); + fs << to_sup << ", "; + } + + { + auto phi_copy = phi; + auto phi_prime_copy = phi_prime; + auto phi_dbl_prime_copy = phi_dbl_prime; + auto phi_triple_prime_copy = phi_triple_prime; + auto sh = boost::math::interpolators::cardinal_septic_hermite(std::move(phi_copy), std::move(phi_prime_copy), std::move(phi_dbl_prime_copy), std::move(phi_triple_prime_copy), Real(0), dx); + Real septic_sup = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) + { + Real x = i*dx_dense; + Real diff = abs(phi_dense[i] - sh(x)); + if (diff > septic_sup) + { + septic_sup = diff; + } + } + m.insert({septic_sup, "septic_hermite_spline"}); + fs << septic_sup << ", "; + } + + + } + std::string best = "none"; + Real best_sup = 1000000000; + std::cout << std::setprecision(std::numeric_limits::digits10 + 3) << std::fixed; + for (auto & e : m) + { + std::cout << "\t" << e.first << " is error of " << e.second << "\n"; + if (e.first < best_sup) + { + best = e.second; + best_sup = e.first; + } + } + std::cout << "\tThe best method for p = " << p << " is the " << best << "\n"; + } +} + +int main() { + //choose_refinement(); + //choose_refinement(); + //choose_refinement(); + // Says linear interpolation is the best: + find_best_interpolator(); + // Says linear interpolation is the best: + find_best_interpolator(); + // Says cubic_hermite_spline is best: + find_best_interpolator(); + // Says cubic_hermite_spline is best: + find_best_interpolator(); + // Says quintic_hermite_spline is best: + find_best_interpolator(); + // Says quintic_hermite_spline is best: + find_best_interpolator(); + // Says quintic_hermite_spline is best: + find_best_interpolator(); + // Says quintic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); + // Says septic_hermite_spline is best: + find_best_interpolator(); +} diff --git a/example/find_best_daubechies_interpolator.cpp b/example/find_best_daubechies_interpolator.cpp deleted file mode 100644 index d9277f698..000000000 --- a/example/find_best_daubechies_interpolator.cpp +++ /dev/null @@ -1,507 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include - -using boost::multiprecision::float128; - - -template -void choose_refinement() -{ - using std::abs; - int rmax = 22; - auto phi_dense = boost::math::detail::dyadic_grid(rmax); - Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - - for (int r = 2; r <= rmax - 2; ++r) { - auto phi_accurate = boost::math::detail::dyadic_grid(r); - std::vector phi(phi_accurate.size()); - for (size_t i = 0; i < phi_accurate.size(); ++i) { - phi[i] = Real(phi_accurate[i]); - } - auto phi_prime_accurate = boost::math::detail::dyadic_grid(r); - std::vector phi_prime(phi_accurate.size()); - for (size_t i = 0; i < phi_prime_accurate.size(); ++i) { - phi_prime[i] = Real(phi_prime_accurate[i]); - } - - std::vector x(phi.size()); - Real dx = (2*p-1)/static_cast(x.size()-1); - std::cout << "dx = " << dx << "\n"; - for (size_t i = 0; i < x.size(); ++i) { - x[i] = i*dx; - } - - if constexpr (p < 6 && p >= 3) { - auto ch = boost::math::interpolators::cubic_hermite(std::move(x), std::move(phi), std::move(phi_prime)); - Real flt_distance = 0; - Real sup = 0; - Real worst_abscissa = 0; - Real worst_value = 0; - Real worst_computed = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real t = i*dx_dense; - Real computed = ch(t); - Real expected = Real(phi_dense[i]); - if (std::abs(expected) < 100*std::numeric_limits::epsilon()) { - continue; - } - - Real diff = abs(computed - expected); - Real distance = abs(boost::math::float_distance(computed, expected)); - if (distance > flt_distance) { - flt_distance = distance; - worst_abscissa = t; - worst_value = expected; - worst_computed = computed; - } - if (diff > sup) { - sup = diff; - } - } - std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; - std::cout << "\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; - std::cout << "\tRAM = " << 3*phi_accurate.size()*sizeof(Real) << " bytes\n"; - } - else if constexpr (p >= 6) { - - auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); - auto qh = boost::math::interpolators::quintic_hermite(std::move(x), std::move(phi), std::move(phi_prime), std::move(phi_dbl_prime)); - Real flt_distance = 0; - Real sup = 0; - Real worst_abscissa = 0; - Real worst_value = 0; - Real worst_computed = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real t = i*dx_dense; - Real computed = qh(t); - Real expected = Real(phi_dense[i]); - if (std::abs(expected) < 100*std::numeric_limits::epsilon()) { - continue; - } - - Real diff = abs(computed - expected); - Real distance = abs(boost::math::float_distance(computed, expected)); - if (distance > flt_distance) { - flt_distance = distance; - worst_abscissa = t; - worst_value = expected; - worst_computed = computed; - } - if (diff > sup) { - sup = diff; - } - } - std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; - std::cout << "\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; - std::cout << "\tRAM = " << 3*phi_accurate.size()*sizeof(Real) << " bytes\n"; - } - } -} - -template -void find_best_interpolator() -{ - using std::abs; - int rmax = 15; - auto phi_dense = boost::math::detail::dyadic_grid(rmax); - Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - for (int r = 2; r < rmax-1; ++r) - { - std::map m; - auto phi = boost::math::detail::dyadic_grid(r); - auto phi_prime = boost::math::detail::dyadic_grid(r); - - std::vector x(phi.size()); - Real dx = (2*p-1)/static_cast(x.size()-1); - std::cout << "dx = 1/" << (1 << r) << " = " << dx << "\n"; - for (size_t i = 0; i < x.size(); ++i) { - x[i] = i*dx; - } - - { - auto phi_copy = phi; - auto phi_prime_copy = phi_prime; - auto mh = boost::math::detail::matched_holder(std::move(phi_copy), std::move(phi_prime_copy), r); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - mh(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "matched_holder"}); - } - - - { - auto linear = [&phi, &dx, &r](Real x)->Real { - if (x <= 0 || x >= 2*p-1) { - return Real(0); - } - using std::floor; - - Real y = (1<(k); - - Real t = y - k; - return (1-t)*phi[kk] + t*phi[kk+1]; - }; - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - linear(x)); - if (diff > sup) { - sup = diff; - } - } - - m.insert({sup, "linear interpolation"}); - } - - - { - auto qbs = boost::math::interpolators::cardinal_quadratic_b_spline(phi.data(), phi.size(), Real(0), dx, phi_prime.front(), phi_prime.back()); - Real qbs_sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - qbs(x)); - if (diff > qbs_sup) { - qbs_sup = diff; - } - } - - m.insert({qbs_sup, "quadratic_b_spline"}); - } - - { - auto cbs = boost::math::interpolators::cardinal_cubic_b_spline(phi.data(), phi.size(), Real(0), dx, phi_prime.front(), phi_prime.back()); - Real cbs_sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - cbs(x)); - if (diff > cbs_sup) { - cbs_sup = diff; - } - } - - m.insert({cbs_sup, "cubic_b_spline"}); - } - - - // Whittaker-Shannon interpolation has linear complexity; test over all points and it's quadratic. - // I ran this a couple times and found it's not competitive; so comment out for now. - /*{ - auto phi_copy = phi; - auto ws = boost::math::interpolators::whittaker_shannon(std::move(phi_copy), Real(0), dx); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - using std::abs; - Real diff = abs(phi_dense[i] - ws(x)); - if (diff > sup) { - sup = diff; - } - } - - m.insert({sup, "whittaker_shannon"}); - }*/ - - { - auto qbs = boost::math::interpolators::cardinal_quintic_b_spline(phi.data(), phi.size(), Real(0), dx, {0,0}, {0,0}); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - qbs(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "quintic_b_spline"}); - } - - { - auto phi_copy = phi; - auto x_copy = x; - auto phi_prime_copy = phi_prime; - auto ch = boost::math::interpolators::cubic_hermite(std::move(x_copy), std::move(phi_copy), std::move(phi_prime_copy)); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - ch(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "cubic_hermite_spline"}); - } - - { - auto phi_copy = phi; - auto x_copy = x; - auto phi_prime_copy = phi_prime; - auto pc = boost::math::interpolators::pchip(std::move(x_copy), std::move(phi_copy)); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - pc(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "pchip"}); - } - - { - auto phi_copy = phi; - auto x_copy = x; - auto pc = boost::math::interpolators::makima(std::move(x_copy), std::move(phi_copy)); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - pc(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "makima"}); - } - - // Again, linear complexity of evaluation => quadratic complexity of exhaustive checking. - /*{ - auto trig = boost::math::interpolators::cardinal_trigonometric(phi, Real(0), dx); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - using std::abs; - Real diff = abs(phi_dense[i] - trig(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "trig"}); - }*/ - - { - auto fotaylor = [&phi, &phi_prime, &r](Real x)->Real { - if (x <= 0 || x >= 2*p-1) { - return 0; - } - using std::floor; - - Real y = (1<(k); - if (y - k < k + 1 - y) - { - Real eps = (y-k)/(1< sup) { - sup = diff; - } - } - - m.insert({sup, "First-order Taylor"}); - } - - if constexpr (p > 2) { - auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); - - { - auto phi_copy = phi; - auto x_copy = x; - auto phi_prime_copy = phi_prime; - auto phi_dbl_prime_copy = phi_dbl_prime; - auto qh = boost::math::interpolators::quintic_hermite(std::move(x_copy), std::move(phi_copy), std::move(phi_prime_copy), std::move(phi_dbl_prime_copy)); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - qh(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "quintic_hermite_spline"}); - } - - { - auto sotaylor = [&phi, &phi_prime, &phi_dbl_prime, &r](Real x)->Real { - if (x <= 0 || x >= 2*p-1) { - return 0; - } - using std::floor; - - Real y = (1<(k); - if (y - k < k + 1 - y) - { - Real eps = (y-k)/(1< sup) { - sup = diff; - } - } - - m.insert({sup, "Second-order Taylor"}); - } - } - - if constexpr (p > 3) { - auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); - auto phi_triple_prime = boost::math::detail::dyadic_grid(r); - - { - auto totaylor = [&phi, &phi_prime, &phi_dbl_prime, &phi_triple_prime, &r](Real x)->Real { - if (x <= 0 || x >= 2*p-1) { - return 0; - } - using std::floor; - - Real y = (1<(k); - if (y - k < k + 1 - y) - { - Real eps = (y-k)/(1< sup) { - sup = diff; - } - } - - m.insert({sup, "Third-order Taylor"}); - } - - { - auto phi_copy = phi; - auto x_copy = x; - auto phi_prime_copy = phi_prime; - auto phi_dbl_prime_copy = phi_dbl_prime; - auto phi_triple_prime_copy = phi_triple_prime; - auto sh = boost::math::interpolators::septic_hermite(std::move(x_copy), std::move(phi_copy), std::move(phi_prime_copy), std::move(phi_dbl_prime_copy), std::move(phi_triple_prime_copy)); - Real sup = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) { - Real x = i*dx_dense; - Real diff = abs(phi_dense[i] - sh(x)); - if (diff > sup) { - sup = diff; - } - } - m.insert({sup, "septic_hermite_spline"}); - } - - - } - std::string best = "none"; - Real best_sup = 1000000000; - std::cout << std::setprecision(std::numeric_limits::digits10 + 3) << std::fixed; - for (auto & e : m) { - - std::cout << "\t" << e.first << " is error of " << e.second << "\n"; - if (e.first < best_sup) { - best = e.second; - best_sup = e.first; - } - } - std::cout << "\tThe best method for p = " << p << " is the " << best << "\n"; - } -} - -int main() { - - //choose_refinement(); - //choose_refinement(); - // Says linear interpolation is the best: - /*find_best_interpolator(); - - // Says linear interpolation is the best: - find_best_interpolator(); - - // Says cubic_hermite_spline is best: - find_best_interpolator(); - - // Says cubic_hermite_spline is best: - find_best_interpolator(); - - // Says quintic_hermite_spline is best: - find_best_interpolator(); - - // Says quintic_hermite_spline is best: - find_best_interpolator(); - - // Says quintic_hermite_spline is best: - find_best_interpolator();*/ - // Says quintic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - /* - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator();*/ - - // Says septic_hermite_spline is best: - find_best_interpolator(); -} diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 1df68f69e..8b7fea73f 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -263,7 +263,16 @@ public: } inline Real unchecked_prime(Real x) const { - return std::numeric_limits::quiet_NaN(); + //TODO: Get the high accuracy approximation by differentiating the interpolant! + using std::floor; + auto i = static_cast(floor((x-x0_)/dx_)); + Real xi = x0_ + i*dx_; + Real t = (x - xi)/dx_; + + // Velocity: + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + return (v0+v1)/2; } private: diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 43037e9f3..3d5fc7d55 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -13,7 +13,7 @@ #include #include #include -#if BOOST_HAS_FLOAT128 +#ifdef BOOST_HAS_FLOAT128 #include #endif #include @@ -159,7 +159,7 @@ public: daubechies_scaling(int grid_refinements = -1) { static_assert(p <= 15, "Scaling functions only implements up to p = 15"); - #if BOOST_HAS_FLOAT128 + #ifdef BOOST_HAS_FLOAT128 using boost::multiprecision::float128; #endif if (grid_refinements < 0) From 1b8a746280dd2ccffeeacf210498b71b50a0fb69 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 15 Feb 2020 08:37:56 -0500 Subject: [PATCH 024/104] Remove spaces in tokens to make the file easier to parse [CI SKIP] --- .../find_best_daubechies_interpolator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index 09292ebca..3fa311368 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -146,15 +146,15 @@ void find_best_interpolator() Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); fs << std::setprecision(std::numeric_limits::digits10 + 3); fs << std::fixed; - fs << "r, matched_holder, linear, quadratic B-spline, cubic B-spline, quintic B-spline, cubic Hermite, pchip, makima, fo_taylor"; + fs << "r, matched_holder, linear, quadratic_b_spline, cubic_b_spline, quintic_b_spline, cubic_hermite, pchip, makima, fo_taylor"; if (p==2) { fs << "\n"; } else { - fs << ", quintic hermite, second-order taylor"; + fs << ", quintic_hermite, second_order_taylor"; if (p > 3) { - fs << ", third order taylor, septic_hermite\n"; + fs << ", third_order_taylor, septic_hermite\n"; } else { fs << "\n"; From 8de87a76d17fb23ba5f3ec903bd996016eec9ff1 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 15 Feb 2020 08:51:11 -0500 Subject: [PATCH 025/104] Sensible cleanup [CI SKIP] --- .../find_best_daubechies_interpolator.cpp | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index 3fa311368..e6e87f89a 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -134,7 +134,7 @@ void find_best_interpolator() std::ofstream fs{filename}; static_assert(sizeof(PreciseReal) >= sizeof(Real), "sizeof(PreciseReal) >= sizeof(Real) is required."); using std::abs; - int rmax = 21; + int rmax = 20; auto phi_dense_precise = boost::math::detail::dyadic_grid(rmax); std::vector phi_dense(phi_dense_precise.size()); for (size_t i = 0; i < phi_dense.size(); ++i) @@ -147,18 +147,21 @@ void find_best_interpolator() fs << std::setprecision(std::numeric_limits::digits10 + 3); fs << std::fixed; fs << "r, matched_holder, linear, quadratic_b_spline, cubic_b_spline, quintic_b_spline, cubic_hermite, pchip, makima, fo_taylor"; - if (p==2) { - fs << "\n"; - } - else { - fs << ", quintic_hermite, second_order_taylor"; - if (p > 3) - { - fs << ", third_order_taylor, septic_hermite\n"; - } - else { + if (p==2) + { fs << "\n"; - } + } + else + { + fs << ", quintic_hermite, second_order_taylor"; + if (p > 3) + { + fs << ", third_order_taylor, septic_hermite\n"; + } + else + { + fs << "\n"; + } } for (int r = 2; r < rmax-1; ++r) { @@ -180,7 +183,7 @@ void find_best_interpolator() auto phi_prime_copy = phi_prime; auto mh = boost::math::detail::matched_holder(std::move(phi_copy), std::move(phi_prime_copy), r); Real sup = 0; - // call to matched_holder is unchecked: + // call to matched_holder is unchecked, so only go to phi_dense.size() -1. for (size_t i = 0; i < phi_dense.size() - 1; ++i) { Real x = i*dx_dense; From d2938c89e7802a9255fb5c9d0c7cecfa8edb1161 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 15 Feb 2020 09:21:21 -0500 Subject: [PATCH 026/104] Controversially commit Daubechies plots [CI SKIP] --- .../daubechies_wavelets/daubechies_plots.cpp | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 example/daubechies_wavelets/daubechies_plots.cpp diff --git a/example/daubechies_wavelets/daubechies_plots.cpp b/example/daubechies_wavelets/daubechies_plots.cpp new file mode 100644 index 000000000..4250dafa3 --- /dev/null +++ b/example/daubechies_wavelets/daubechies_plots.cpp @@ -0,0 +1,164 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#include +#include +#include +#include +#include +#include + + +using boost::multiprecision::float128; +constexpr const int GRAPH_WIDTH = 700; + +template +void plot_phi(int grid_refinements = -1) +{ + auto phi = boost::math::daubechies_scaling(); + if (grid_refinements >= 0) + { + phi = boost::math::daubechies_scaling(grid_refinements); + } + Real a = 0; + Real b = phi.support().second; + std::string title = "Daubechies " + std::to_string(p) + " scaling function"; + std::string filename = "daubechies_" + std::to_string(p) + "_scaling.svg"; + int samples = 1024; + quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); + daub.set_stroke_width(1); + daub.add_fn(phi); + daub.write_all(); +} + +template +void plot_convergence() +{ + auto phi0 = boost::math::daubechies_scaling(0); + Real a = 0; + Real b = phi0.support().second; + std::string title = "Daubechies " + std::to_string(p) + " scaling at 0 (green), 1 (orange), 2 (red), and 24 (blue) grid refinements"; + std::string filename = "daubechies_" + std::to_string(p) + "_scaling_convergence.svg"; + + quicksvg::graph_fn daub(a, b, title, filename, 1024, GRAPH_WIDTH); + daub.set_stroke_width(1); + + daub.add_fn(phi0, "green"); + auto phi1 = boost::math::daubechies_scaling(1); + daub.add_fn(phi1, "orange"); + auto phi2 = boost::math::daubechies_scaling(2); + daub.add_fn(phi2, "red"); + + auto phi21 = boost::math::daubechies_scaling(21); + daub.add_fn(phi21); + daub.write_all(); +} + +template +void plot_condition_number() +{ + using std::abs; + using std::log; + static_assert(p >= 4, "p = 2,3 are not differentiable, so condition numbers cannot be effectively evaluated."); + auto phi = boost::math::daubechies_scaling(); + Real a = 1000*std::numeric_limits::epsilon(); + Real b = phi.support().second - 1000*std::numeric_limits::epsilon(); + std::string title = "log10 of condition number of function evaluation for Daubechies " + std::to_string(p) + " scaling function."; + std::string filename = "daubechies_" + std::to_string(p) + "_scaling_condition_number.svg"; + + + quicksvg::graph_fn daub(a, b, title, filename, 2048, GRAPH_WIDTH); + daub.set_stroke_width(1); + + auto cond = [&phi](Real x) + { + Real y = phi(x); + Real dydx = phi.prime(x); + Real z = abs(x*dydx/y); + using std::isnan; + if (z==0) + { + return Real(-1); + } + if (isnan(z)) + { + // Graphing libraries don't like nan's: + return Real(1); + } + return log10(z); + }; + daub.add_fn(cond); + daub.write_all(); +} + +template +void do_ulp(int coarse_refinements, PhiPrecise phi_precise) +{ + auto phi_coarse = boost::math::daubechies_scaling(coarse_refinements); + + std::string title = std::to_string(p) + " vanishing moment ULP plot at " + std::to_string(coarse_refinements) + " refinements and " + boost::core::demangle(typeid(CoarseReal).name()) + " precision"; + std::string filename = "daubechies_" + std::to_string(p) + "_" + boost::core::demangle(typeid(CoarseReal).name()) + "_" + std::to_string(coarse_refinements) + "_refinements.svg"; + int samples = 20000; + int clip = 20; + quicksvg::ulp_plot(phi_coarse, phi_precise, CoarseReal(0), phi_coarse.support().second, title, filename, samples, GRAPH_WIDTH, clip); +} + + +int main() +{ + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + plot_convergence(); + + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + + using PreciseReal = float128; + using CoarseReal = long double; + int precise_refinements = 21; + constexpr const int p = 9; + std::cout << "Computing precise scaling function in " << boost::core::demangle(typeid(PreciseReal).name()) << " precision.\n"; + auto phi_precise = boost::math::daubechies_scaling(precise_refinements); + std::cout << "Beginning comparison with functions computed in " << boost::core::demangle(typeid(CoarseReal).name()) << " precision.\n"; + for (int i = 7; i <= precise_refinements-1; ++i) + { + std::cout << "\tCoarse refinement " << i << "\n"; + do_ulp(i, phi_precise); + } +} From 3338c0c6e6a4b10e4be8c2ac495e0237c32b8806 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 16 Feb 2020 09:46:58 -0500 Subject: [PATCH 027/104] Add in benchmarks, remove some commented out code that is duplicated in example/daubechies_wavelets/find_best_daubechies_interpolator.cpp [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 340 ++++++++++++++++++ .../special_functions/daubechies_scaling.hpp | 157 +------- 2 files changed, 346 insertions(+), 151 deletions(-) create mode 100644 example/daubechies_wavelets/bench.cpp diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp new file mode 100644 index 000000000..fcda6ff28 --- /dev/null +++ b/example/daubechies_wavelets/bench.cpp @@ -0,0 +1,340 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +static void UnitStep(benchmark::internal::Benchmark* b) +{ + for (int i = 7; i <= 25; ++i) + { + b->Args({i}); + } +} + +double exponential(long long unsigned int j) +{ + return std::pow(2, j); +} + + +template +void DyadicGrid(benchmark::State & state) +{ + int j = state.range(0); + size_t s = 0; + for (auto _ : state) + { + auto v = boost::math::detail::dyadic_grid(j); + benchmark::DoNotOptimize(v[0]); + s = v.size(); + } + + state.counters["RAM"] = s*sizeof(Real); + state.SetComplexityN(state.range(0)); +} + +BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); +BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); +BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); + + +template +void ScalingEvaluation(benchmark::State & state) +{ + auto phi = boost::math::daubechies_scaling(); + Real x = 0; + for (auto _ : state) + { + benchmark::DoNotOptimize(phi(x)); + x += std::numeric_limits::epsilon(); + } +} + + +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 2); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 3); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 4); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 5); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 6); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 7); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 8); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 9); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 10); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 11); + + +template +void ScalingConstructor(benchmark::State & state) +{ + for (auto _ : state) + { + benchmark::DoNotOptimize(boost::math::daubechies_scaling()); + } +} + +BENCHMARK_TEMPLATE(ScalingConstructor, float, 2)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, double, 2)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, long double, 2)->Unit(benchmark::kMillisecond); + +BENCHMARK_TEMPLATE(ScalingConstructor, float, 3)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, double, 3)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, long double, 3)->Unit(benchmark::kMillisecond); + +BENCHMARK_TEMPLATE(ScalingConstructor, float, 4)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, double, 4)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, long double, 4)->Unit(benchmark::kMillisecond); + +BENCHMARK_TEMPLATE(ScalingConstructor, float, 5)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, double, 5)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, long double, 5)->Unit(benchmark::kMillisecond); + +BENCHMARK_TEMPLATE(ScalingConstructor, float, 11)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, double, 11)->Unit(benchmark::kMillisecond); +BENCHMARK_TEMPLATE(ScalingConstructor, long double, 11)->Unit(benchmark::kMillisecond); + +template +void CardinalCubicHermite(benchmark::State & state) +{ + using boost::math::interpolators::detail::cardinal_cubic_hermite_detail; + auto n = state.range(0); + std::vector y(n); + std::vector dydx(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = dis(rd); + dydx[i] = dis(rd); + } + + Real dx = Real(1)/Real(8); + Real x0 = 0; + Real xf = x0 + (y.size()-1)*dx; + + auto qh = cardinal_cubic_hermite_detail(std::move(y), std::move(dydx), x0, dx); + Real x = 0; + for (auto _ : state) + { + benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); + x += xf/128; + if (x >= xf) + { + x = x0; + } + } +} + +BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); + +template +void CardinalCubicHermiteAOS(benchmark::State & state) +{ + auto n = state.range(0); + std::vector> dat(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + for (size_t i = 0; i < dat.size(); ++i) + { + dat[i][0] = dis(rd); + dat[i][1] = dis(rd); + } + + using boost::math::interpolators::detail::cardinal_cubic_hermite_detail_aos; + Real dx = Real(1)/Real(8); + Real x0 = 0; + Real xf = x0 + (dat.size()-1)*dx; + auto qh = cardinal_cubic_hermite_detail_aos(std::move(dat), x0, dx); + Real x = 0; + for (auto _ : state) + { + benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); + x += xf/128; + if (x >= xf) + { + x = x0; + } + } +} + +BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<14)->Complexity(); + +template +void SineEvaluation(benchmark::State& state) +{ + std::default_random_engine gen; + std::uniform_real_distribution x_dis(0, 3.14159); + + Real x = x_dis(gen); + for (auto _ : state) + { + benchmark::DoNotOptimize(std::sin(x)); + x += std::numeric_limits::epsilon(); + } +} + +BENCHMARK_TEMPLATE(SineEvaluation, float); +BENCHMARK_TEMPLATE(SineEvaluation, double); +BENCHMARK_TEMPLATE(SineEvaluation, long double); + +template +void ExpEvaluation(benchmark::State& state) +{ + std::default_random_engine gen; + std::uniform_real_distribution x_dis(0, 3.14159); + + Real x = x_dis(gen); + for (auto _ : state) + { + benchmark::DoNotOptimize(std::exp(x)); + x += std::numeric_limits::epsilon(); + } +} + +BENCHMARK_TEMPLATE(ExpEvaluation, float); +BENCHMARK_TEMPLATE(ExpEvaluation, double); +BENCHMARK_TEMPLATE(ExpEvaluation, long double); + +template +void PowEvaluation(benchmark::State& state) +{ + std::default_random_engine gen; + std::uniform_real_distribution x_dis(0, 3.14159); + + Real x = x_dis(gen); + for (auto _ : state) + { + benchmark::DoNotOptimize(std::pow(x, x+1)); + x += std::numeric_limits::epsilon(); + } +} + +BENCHMARK_TEMPLATE(PowEvaluation, float); +BENCHMARK_TEMPLATE(PowEvaluation, double); +BENCHMARK_TEMPLATE(PowEvaluation, long double); + + +template +void CardinalQuinticHermite(benchmark::State & state) +{ + using boost::math::interpolators::detail::cardinal_quintic_hermite_detail; + auto n = state.range(0); + std::vector y(n); + std::vector dydx(n); + std::vector d2ydx2(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = dis(rd); + dydx[i] = dis(rd); + d2ydx2[i] = dis(rd); + } + + Real dx = Real(1)/Real(8); + Real x0 = 0; + Real xf = x0 + (y.size()-1)*dx; + + auto qh = cardinal_quintic_hermite_detail(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + Real x = 0; + for (auto _ : state) + { + benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); + x += xf/128; + if (x >= xf) + { + x = x0; + } + } +} + +BENCHMARK_TEMPLATE(CardinalQuinticHermite, float)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermite, long double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); + + +template +void CardinalQuinticHermiteAOS(benchmark::State & state) +{ + auto n = state.range(0); + std::vector> dat(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + for (size_t i = 0; i < dat.size(); ++i) + { + dat[i][0] = dis(rd); + dat[i][1] = dis(rd); + dat[i][2] = dis(rd); + } + + using boost::math::interpolators::detail::cardinal_quintic_hermite_detail_aos; + Real dx = Real(1)/Real(8); + Real x0 = 0; + Real xf = x0 + (dat.size()-1)*dx; + auto qh = cardinal_quintic_hermite_detail_aos(std::move(dat), x0, dx); + Real x = 0; + for (auto _ : state) { + benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); + x += xf/128; + if (x >= xf) + { + x = x0; + } + } +} + +BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, float)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, long double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); + + +template +void CardinalSepticHermite(benchmark::State & state) +{ + using boost::math::interpolators::detail::cardinal_septic_hermite_detail; + auto n = state.range(0); + std::vector y(n); + std::vector dydx(n); + std::vector d2ydx2(n); + std::vector d3ydx3(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = dis(rd); + dydx[i] = dis(rd); + d2ydx2[i] = dis(rd); + d3ydx3[i] = dis(rd); + } + + Real dx = Real(1)/Real(8); + Real x0 = 0; + Real xf = x0 + (y.size()-1)*dx; + + auto sh = cardinal_septic_hermite_detail(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); + Real x = 0; + for (auto _ : state) + { + benchmark::DoNotOptimize(sh.unchecked_evaluation(x)); + x += xf/128; + if (x >= xf) + { + x = x0; + } + } +} + +BENCHMARK_TEMPLATE(CardinalSepticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); + + +BENCHMARK_MAIN(); \ No newline at end of file diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 3d5fc7d55..8a57a4fa0 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -328,10 +328,10 @@ public: { return 0; } - if constexpr (p==2 || p == 3) { + if constexpr (p == 2 || p == 3) { throw std::domain_error("The 2 and 3-vanishing moment Daubechies scaling function is not continuously differentiable."); } - if constexpr (p==4 || p ==5) { + if constexpr (p == 4 || p == 5) { return m_cbh->unchecked_prime(x); } if constexpr (p >= 6 && p <= 9) { @@ -342,12 +342,12 @@ public: } } - std::pair support() const { + std::pair support() const + { return {0, 2*p-1}; } private: - size_t m_levels; // Need this for p = 2: std::shared_ptr>> m_mh; // Need this for p = 3: @@ -359,36 +359,7 @@ private: // Need this for p >= 10: std::shared_ptr>> m_sh; - /*Real constant_interpolation(Real x) const { - if (x <= 0 || x >= 2*p-1) { - return Real(0); - } - using std::floor; - Real y = (1 << m_levels)*x; - Real k = floor(y); - - if (y - k < k + 1 - y) - { - return m_v[static_cast(k)]; - } - return m_v[static_cast(k)+1]; - } - - Real linear_interpolation(Real x) const { - if (x <= 0 || x >= 2*p-1) { - return Real(0); - } - using std::floor; - - Real y = (1<(k); - - Real t = y - k; - return (1-t)*m_v[kk] + t*m_v[kk+1]; - } - + /* Real single_crank_linear(Real x) const { if (x <= 0 || x >= 2*p-1) { return Real(0); @@ -444,129 +415,13 @@ private: return a*t*t + b*t + y0; } - - Real double_crank_linear(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - - - Real first_order_taylor(Real x) const { - if (x <= 0 || x >= 2*p-1) { - return 0; - } - using std::floor; - - Real y = (1<(k); - if (y - k < k + 1 - y) - { - Real eps = (y-k)/(1<= 2*p-1) { - return 0; - } - using std::floor; - - Real y = (1<(k); - if (y - k < k + 1 - y) - { - Real eps = (y-k)/(1<::quiet_NaN(); - } - - Real single_crank_first_order_taylor(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - - Real double_crank_first_order_taylor(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - - Real single_crank_second_order_taylor(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - - Real double_crank_second_order_taylor(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - - Real single_crank_third_order_taylor(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - - Real double_crank_third_order_taylor(Real x) const { - return std::numeric_limits::quiet_NaN(); - } - size_t bytes() const { size_t s = sizeof(*this); s += m_v.size()*sizeof(Real); return s; } - - size_t size() const { - return m_v.size(); - } - - Real index_to_abscissa(size_t i) { - return i/m_inv_spacing; - } - - // This is for debugging only; use the .at() - Real operator[](size_t i) const { - return m_v.at(i); - } - - Real prime(size_t i) const { - return m_v_prime.at(i); - } - - Real spacing() const { - return 1/m_inv_spacing; - } - - auto begin() const { - return m_v.begin(); - } - - auto end() const { - return m_v.end(); - } - - auto data() const { - return m_v.data(); - } - -private: - size_t m_levels; - Real m_inv_spacing; - std::array m_c; - std::vector m_v; - std::vector m_v_prime; - std::vector m_v_dbl_prime;*/ +*/ }; } From 2b93ff6b6d5892edd483c418f62079797eab0ad2 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 16 Feb 2020 11:24:39 -0500 Subject: [PATCH 028/104] Using int64_t rather than long long unsigned int [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index fcda6ff28..8cae7f368 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -22,7 +22,7 @@ static void UnitStep(benchmark::internal::Benchmark* b) } } -double exponential(long long unsigned int j) +double exponential(int64_t j) { return std::pow(2, j); } @@ -44,9 +44,9 @@ void DyadicGrid(benchmark::State & state) state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); -BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); -BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); +BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(); +//BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); +//BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); template From e40b3a19d65ad362a459603706589081cadc5eeb Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 16 Feb 2020 11:38:42 -0500 Subject: [PATCH 029/104] Fix argument to complexity [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 8cae7f368..9e359b15a 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -22,7 +22,7 @@ static void UnitStep(benchmark::internal::Benchmark* b) } } -double exponential(int64_t j) +double exponential(benchmark::IterationCount j) { return std::pow(2, j); } @@ -44,7 +44,7 @@ void DyadicGrid(benchmark::State & state) state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(); +BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); //BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); //BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); From ae436992f7739854921f7bc86294671778280efb Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 16 Feb 2020 16:57:18 -0500 Subject: [PATCH 030/104] Improve performance of cardinal_cubic_hermite evaluation [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 6 +- .../detail/cardinal_cubic_hermite_detail.hpp | 166 +++++++++++------- 2 files changed, 101 insertions(+), 71 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 9e359b15a..ab91a6a6f 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -52,7 +52,7 @@ BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMil template void ScalingEvaluation(benchmark::State & state) { - auto phi = boost::math::daubechies_scaling(); + auto phi = boost::math::daubechies_scaling(); Real x = 0; for (auto _ : state) { @@ -135,7 +135,7 @@ void CardinalCubicHermite(benchmark::State & state) } } -BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); template void CardinalCubicHermiteAOS(benchmark::State & state) @@ -167,7 +167,7 @@ void CardinalCubicHermiteAOS(benchmark::State & state) } } -BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<14)->Complexity(); +BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); template void SineEvaluation(benchmark::State& state) diff --git a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp index 3d7f165c8..eb8167edd 100644 --- a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp @@ -15,11 +15,11 @@ public: using Real = typename RandomAccessContainer::value_type; cardinal_cubic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer dydx, Real x0, Real dx) - : y_{std::move(y)}, dydx_{std::move(dydx)}, x0_{x0}, dx_{dx} + : y_{std::move(y)}, dy_{std::move(dydx)}, x0_{x0}, inv_dx_{1/dx} { using std::abs; using std::isnan; - if (y_.size() != dydx_.size()) + if (y_.size() != dy_.size()) { throw std::domain_error("There must be the same number of derivatives as ordinates."); } @@ -31,6 +31,11 @@ public: { throw std::domain_error("dx > 0 is required."); } + + for (auto & dy : dy_) + { + dy *= dx; + } } // Why not implement push_back? It's awkward: If the buffer is circular, x0_ += dx_. @@ -38,38 +43,9 @@ public: // We need a concept for circular_buffer! inline Real operator()(Real x) const { - const Real xf = x0_ + (y_.size()-1)*dx_; - if (x < x0_ || x > xf) { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) { - return y_.back(); - } - return this->unchecked_evaluation(x); - } - - inline Real unchecked_evaluation(Real x) const - { - using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; - Real y0 = y_[i]; - Real y1 = y_[i+1]; - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; - - return (1-t)*(1-t)*(y0*(1+2*t) + v0*(x-xi)) - + t*t*(y1*(3-2*t) + dx_*v1*(t-1)); - } - - inline Real prime(Real x) const { - const Real xf = x0_ + (y_.size()-1)*dx_; - if (x < x0_ || x > xf) { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" @@ -78,22 +54,58 @@ public: } if (x == xf) { - return dydx_.back(); + return y_.back(); + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + + Real r = 1-t; + return r*r*(y0*(1+2*t) + dy0*t) + + t*t*(y1*(3-2*t) - dy1*r); + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dy_.back()*inv_dx_; } return this->unchecked_prime(x); } inline Real unchecked_prime(Real x) const { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; Real y0 = y_[i]; Real y1 = y_[i+1]; - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; - return 6*t*(1-t)*(y1 - y0)/dx_ + (3*t*t - 4*t+1)*v0 + t*(3*t-2)*v1; + Real dy = 6*t*(1-t)*(y1 - y0) + (3*t*t - 4*t+1)*dy0 + t*(3*t-2)*dy1; + return dy*inv_dx_; } @@ -103,9 +115,9 @@ public: } RandomAccessContainer y_; - RandomAccessContainer dydx_; + RandomAccessContainer dy_; Real x0_; - Real dx_; + Real inv_dx_; }; @@ -116,7 +128,7 @@ public: using Real = typename Point::value_type; cardinal_cubic_hermite_detail_aos(RandomAccessContainer && dat, Real x0, Real dx) - : dat_{std::move(dat)}, x0_{x0}, dx_{dx} + : dat_{std::move(dat)}, x0_{x0}, inv_dx_{1/dx} { if (dat_.size() < 2) { @@ -126,42 +138,56 @@ public: { throw std::domain_error("Each datum must contain (y, y'), and nothing else."); } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & d : dat_) + { + d[1] *= dx; + } } inline Real operator()(Real x) const { - const Real xf = x0_ + (dat_.size()-1)*dx_; - if (x < x0_ || x > xf) { + const Real xf = x0_ + (dat_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - if (x == xf) { + if (x == xf) + { return dat_.back()[0]; } - return this->unchecked_evaluation(x); } - inline Real unchecked_evaluation(Real x) const { + inline Real unchecked_evaluation(Real x) const + { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x-xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + + Real t = s - ii; Real y0 = dat_[i][0]; Real y1 = dat_[i+1][0]; - Real v0 = dat_[i][1]; - Real v1 = dat_[i+1][1]; + Real dy0 = dat_[i][1]; + Real dy1 = dat_[i+1][1]; - - return (1-t)*(1-t)*(y0*(1+2*t) + v0*(x-xi)) - + t*t*(y1*(3-2*t) + dx_*v1*(t-1)); + Real r = 1-t; + return r*r*(y0*(1+2*t) + dy0*t) + + t*t*(y1*(3-2*t) - dy1*r); } inline Real prime(Real x) const { - const Real xf = x0_ + (dat_.size()-1)*dx_; - if (x < x0_ || x > xf) { + const Real xf = x0_ + (dat_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" @@ -175,27 +201,31 @@ public: return this->unchecked_prime(x); } - inline Real unchecked_prime(Real x) const { + inline Real unchecked_prime(Real x) const + { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; Real y0 = dat_[i][0]; + Real dy0 = dat_[i][1]; Real y1 = dat_[i+1][0]; - Real v0 = dat_[i][1]; - Real v1 = dat_[i+1][1]; + Real dy1 = dat_[i+1][1]; - return 6*t*(1-t)*(y1 - y0)/dx_ + (3*t*t - 4*t+1)*v0 + t*(3*t-2)*v1; + Real dy = 6*t*(1-t)*(y1 - y0) + (3*t*t - 4*t+1)*dy0 + t*(3*t-2)*dy1; + return dy*inv_dx_; } - auto size() const { + auto size() const + { return dat_.size(); } RandomAccessContainer dat_; Real x0_; - Real dx_; + Real inv_dx_; }; From 4cd72f622516b463cc200b8a78e3b6cae138fa6e Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 16 Feb 2020 17:26:20 -0500 Subject: [PATCH 031/104] Improve performance of matched_holder and linear interpolation. [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 8a57a4fa0..c6f973e04 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -57,25 +57,29 @@ std::vector dyadic_grid(int64_t j_max) { // Where this value will go: int64_t delivery_idx = k*(1 << (j_max-j)); - if (delivery_idx >= (int64_t) v.size()) - { - std::cerr << "Delivery index out of range!\n"; - continue; - } + // This is a nice check, but we've tested this exhaustively, and it's expensive: + //if (delivery_idx >= (int64_t) v.size()) { + // std::cerr << "Delivery index out of range!\n"; + // continue; + //} Real term = 0; - for (int64_t l = 0; l < (int64_t) c.size(); ++l) { + for (int64_t l = 0; l < (int64_t) c.size(); ++l) + { int64_t idx = k*(1 << (j_max - j + 1)) - l*(1 << j_max); - if (idx < 0) { + if (idx < 0) + { break; } - if (idx < (int64_t) v.size()) { + if (idx < (int64_t) v.size()) + { term += c[l]*v[idx]; } } - if (!isnan(v[delivery_idx])) { - std::cerr << "Delivery index already populated!, = " << v[delivery_idx] << "\n"; - std::cerr << "would overwrite with " << term << "\n"; - } + // Again, another nice check: + //if (!isnan(v[delivery_idx])) { + // std::cerr << "Delivery index already populated!, = " << v[delivery_idx] << "\n"; + // std::cerr << "would overwrite with " << term << "\n"; + //} v[delivery_idx] = term; } } @@ -89,39 +93,36 @@ class matched_holder { public: using Real = typename RandomAccessContainer::value_type; - matched_holder(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements) : y_{std::move(y)}, dydx_{std::move(dydx)} + matched_holder(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements) : y_{std::move(y)}, dy_{std::move(dydx)} { - inv_h_ = 1<< grid_refinements; + inv_h_ = (1 << grid_refinements); + Real h = 1/inv_h_; + for (auto & dy : dy_) + { + dy *= h; + } } inline Real operator()(Real x) const { - using std::log; using std::floor; using std::sqrt; - using std::pow; // This is the exact Holder exponent, but it's pessimistic almost everywhere! // It's only exactly right at dyadic rationals. - // Some compilers do not evaluate this at compile time: - Real const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); - Real const onemalpham1 = 1/(1-alpha); - //const Real alpha = 0.5500156865235042; - // So we're gonna make the graph dip a little harder; this will capture more of the self-similar behavior: - //Real constexpr const alpha = Real(3)/Real(10); + //Real const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); + // We're gonna use alpha = 1/2, rather than 0.5500... Real s = x*inv_h_; Real ii = floor(s); - int64_t i = static_cast(ii); + auto i = static_cast(ii); Real t = s - ii; - Real v = y_[i]; - Real dphi = dydx_[i+1]/inv_h_; + Real dphi = dy_[i+1]; Real diff = y_[i+1] - y_[i]; - v += ((dphi - alpha*diff)*t + (-dphi + diff)*pow(t, alpha) )*onemalpham1; - return v; + return y_[i] + (2*dphi - diff)*t + 2*sqrt(t)*(diff-dphi); } private: Real inv_h_; RandomAccessContainer y_; - RandomAccessContainer dydx_; + RandomAccessContainer dy_; }; @@ -132,22 +133,21 @@ public: linear_interpolation(RandomAccessContainer && y, int grid_refinements) : y_{std::move(y)} { - grid_refinements_ = grid_refinements; + s_ = (1 << grid_refinements); } inline Real operator()(Real x) const { using std::floor; - Real y = x*(1<(k); - + int64_t kk = static_cast(k); Real t = y - k; return (1-t)*y_[kk] + t*y_[kk+1]; } private: - int grid_refinements_; + Real s_; RandomAccessContainer y_; }; From 4dd1ddf9039fcf770409acc6e61d32923d1b672c Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 16 Feb 2020 18:07:46 -0500 Subject: [PATCH 032/104] Improve performance of quintic Hermite interpolation [CI SKIP] --- .../cardinal_quintic_hermite_detail.hpp | 209 +++++++++++------- 1 file changed, 130 insertions(+), 79 deletions(-) diff --git a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp index c59b360a8..28944f76d 100644 --- a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp @@ -12,95 +12,123 @@ class cardinal_quintic_hermite_detail { public: using Real = typename RandomAccessContainer::value_type; cardinal_quintic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) - : y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)}, x0_{x0}, dx_{dx} + : y_{std::move(y)}, dy_{std::move(dydx)}, d2y_{std::move(d2ydx2)}, x0_{x0}, inv_dx_{1/dx} { - if (y_.size() != dydx_.size()) { + if (y_.size() != dy_.size()) + { throw std::domain_error("Numbers of derivatives must = number of abscissas."); } - if (y_.size() != d2ydx2_.size()) { + if (y_.size() != d2y_.size()) + { throw std::domain_error("Number of second derivatives must equal number of abscissas."); } - if (y_.size() < 2) { + if (y_.size() < 2) + { throw std::domain_error("At least 2 abscissas are required."); } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & dy : dy_) + { + dy *= dx; + } + + for (auto & d2y : d2y_) + { + d2y *= (dx*dx)/2; + } } - inline Real operator()(Real x) const { - const Real xf = x0_ + (y_.size()-1)*dx_; - if (x < x0_ || x > xf) { + inline Real operator()(Real x) const + { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - if (x == xf) { + if (x == xf) + { return y_.back(); } return this->unchecked_evaluation(x); } - inline Real unchecked_evaluation(Real x) const { + inline Real unchecked_evaluation(Real x) const + { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; Real y0 = y_[i]; Real y1 = y_[i+1]; - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; - Real a0 = d2ydx2_[i]; - Real a1 = d2ydx2_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real d2y0 = d2y_[i]; + Real d2y1 = d2y_[i+1]; // See the 'Basis functions' section of: // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; - y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx_; - y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx_*dx_/2; - y += t*t*t*((1 + t*(-2 + t))*a1*dx_*dx_/2 + (-4 + t*(7 -3*t))*v1*dx_ + (10 + t*(-15 + 6*t))*y1); + y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; + y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; + y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); return y; } - inline Real prime(Real x) const { - const Real xf = x0_ + (y_.size()-1)*dx_; - if (x < x0_ || x > xf) { + inline Real prime(Real x) const + { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - if (x == xf) { - return dydx_.back(); + if (x == xf) + { + return dy_.back()*inv_dx_; } return this->unchecked_prime(x); } - inline Real unchecked_prime(Real x) const { + inline Real unchecked_prime(Real x) const + { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; Real y0 = y_[i]; Real y1 = y_[i+1]; - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; - Real a0 = d2ydx2_[i]; - Real a1 = d2ydx2_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real d2y0 = d2y_[i]; + Real d2y1 = d2y_[i+1]; - Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0)/dx_; - dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; - dydx += (t*dx_/2)*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); + Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0); + dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*dy0 - t*t*(12 - 28*t + 15*t*t)*dy1; + dydx += t*((2 - 9*t + 12*t*t - 5*t*t*t)*d2y0 + t*(3 - 8*t + 5*t*t)*d2y1); + dydx *= inv_dx_; return dydx; } inline Real double_prime(Real x) const { - const Real xf = x0_ + (y_.size()-1)*dx_; + const Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); @@ -108,8 +136,9 @@ public: << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - if (x == xf) { - return d2ydx2_.back(); + if (x == xf) + { + return d2y_.back()*2*inv_dx_*inv_dx_; } return this->unchecked_double_prime(x); @@ -117,29 +146,31 @@ public: inline Real unchecked_double_prime(Real x) const { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = y_[i]; Real y1 = y_[i+1]; - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; - Real a0 = d2ydx2_[i]; - Real a1 = d2ydx2_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real d2y0 = d2y_[i]; + Real d2y1 = d2y_[i+1]; - Real d2ydx2 = 60*t*(1 - 3*t + 2*t*t)*(y1 - y0)/(dx_*dx_); - d2ydx2 += (12*t/dx_)*((-3 + 8*t - 5*t*t)*v0 - (2 - 7*t + 5*t*t)*v1); - d2ydx2 += (1 - 9*t + 18*t*t - 10*t*t*t)*a0 + t*(3 - 12*t + 10*t*t)*a1; + Real d2ydx2 = 60*t*(1 - 3*t + 2*t*t)*(y1 - y0)*inv_dx_*inv_dx_; + d2ydx2 += (12*t)*((-3 + 8*t - 5*t*t)*dy0 - (2 - 7*t + 5*t*t)*dy1); + d2ydx2 += (1 - 9*t + 18*t*t - 10*t*t*t)*d2y0*(2*inv_dx_*inv_dx_) + t*(3 - 12*t + 10*t*t)*d2y1*(2*inv_dx_*inv_dx_); return d2ydx2; } private: RandomAccessContainer y_; - RandomAccessContainer dydx_; - RandomAccessContainer d2ydx2_; + RandomAccessContainer dy_; + RandomAccessContainer d2y_; Real x0_; - Real dx_; + Real inv_dx_; }; @@ -149,7 +180,7 @@ public: using Point = typename RandomAccessContainer::value_type; using Real = typename Point::value_type; cardinal_quintic_hermite_detail_aos(RandomAccessContainer && data, Real x0, Real dx) - : data_{std::move(data)} , x0_{x0}, dx_{dx} + : data_{std::move(data)} , x0_{x0}, inv_dx_{1/dx} { if (data_.size() < 2) { @@ -160,19 +191,32 @@ public: { throw std::domain_error("Each datum passed to the cardinal_quintic_hermite_aos must have three elements: {y, y', y''}"); } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & datum : data_) + { + datum[1] *= dx; + datum[2] *= (dx*dx/2); + } } - inline Real operator()(Real x) const { - const Real xf = x0_ + (data_.size()-1)*dx_; - if (x < x0_ || x > xf) { + inline Real operator()(Real x) const + { + const Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - if (x == xf) { + if (x == xf) + { return data_.back()[0]; } return this->unchecked_evaluation(x); @@ -181,35 +225,40 @@ public: inline Real unchecked_evaluation(Real x) const { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = data_[i][0]; + Real dy0 = data_[i][1]; + Real d2y0 = data_[i][2]; Real y1 = data_[i+1][0]; - Real v0 = data_[i][1]; - Real v1 = data_[i+1][1]; - Real a0 = data_[i][2]; - Real a1 = data_[i+1][2]; + Real dy1 = data_[i+1][1]; + Real d2y1 = data_[i+1][2]; Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; - y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx_; - y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx_*dx_/2; - y += t*t*t*((1 + t*(-2 + t))*a1*dx_*dx_/2 + (-4 + t*(7 -3*t))*v1*dx_ + (10 + t*(-15 + 6*t))*y1); + y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; + y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; + y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); return y; } - inline Real prime(Real x) const { - const Real xf = x0_ + (data_.size()-1)*dx_; - if (x < x0_ || x > xf) { + inline Real prime(Real x) const + { + const Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - if (x == xf) { - return data_.back()[1]; + if (x == xf) + { + return data_.back()[1]*inv_dx_; } return this->unchecked_prime(x); @@ -217,9 +266,11 @@ public: inline Real unchecked_prime(Real x) const { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = data_[i][0]; Real y1 = data_[i+1][0]; @@ -228,10 +279,10 @@ public: Real a0 = data_[i][2]; Real a1 = data_[i+1][2]; - Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0)/dx_; - dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; - dydx += (t*dx_/2)*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); - return dydx; + Real dy = 30*t*t*(1 - 2*t + t*t)*(y1-y0); + dy += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; + dy += t*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); + return dy*inv_dx_; } @@ -239,7 +290,7 @@ public: private: RandomAccessContainer data_; Real x0_; - Real dx_; + Real inv_dx_; }; } From 70e95ac1fa54da7a4d232647ac1a339ed2bef824 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 16 Feb 2020 18:58:22 -0500 Subject: [PATCH 033/104] Improve the performance of the septic hermite interpolation [CI SKIP] --- .../detail/septic_hermite_detail.hpp | 170 +++++++++++------- 1 file changed, 106 insertions(+), 64 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 8b7fea73f..8a8787980 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -166,26 +166,52 @@ class cardinal_septic_hermite_detail { public: using Real = typename RandomAccessContainer::value_type; cardinal_septic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3, Real x0, Real dx) - : y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)}, d3ydx3_{std::move(d3ydx3)}, x0_{x0}, dx_{dx} + : y_{std::move(y)}, dy_{std::move(dydx)}, d2y_{std::move(d2ydx2)}, d3y_{std::move(d3ydx3)}, x0_{x0}, inv_dx_{1/dx} { - if (y_.size() != dydx_.size()) { + if (y_.size() != dy_.size()) + { throw std::domain_error("Numbers of derivatives must = number of ordinates."); } - if (y_.size() != d2ydx2_.size()) { + if (y_.size() != d2y_.size()) + { throw std::domain_error("Number of second derivatives must equal number of ordinates."); } - if (y_.size() != d3ydx3_.size()) { + if (y_.size() != d3y_.size()) + { throw std::domain_error("Number of third derivatives must equal number of ordinates."); } - if (y_.size() < 2) { + if (y_.size() < 2) + { throw std::domain_error("At least 2 abscissas are required."); } + + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & dy : dy_) + { + dy *= dx; + } + for (auto & d2y : d2y_) + { + d2y *= (dx*dx/2); + } + + for (auto & d3y : d3y_) + { + d3y *= (dx*dx*dx/6); + } + } - inline Real operator()(Real x) const { - Real xf = x0_ + (y_.size()-1)*dx_; - if (x < x0_ || x > xf) { + inline Real operator()(Real x) const + { + Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" @@ -203,49 +229,51 @@ public: inline Real unchecked_evaluation(Real x) const { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s3 = (x-x0_)*inv_dx_; + Real ii = floor(s3); + auto i = static_cast(ii); + Real t = s3 - ii; Real y0 = y_[i]; Real y1 = y_[i+1]; // Velocity: - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; // Acceleration: - Real a0 = d2ydx2_[i]; - Real a1 = d2ydx2_[i+1]; + Real a0 = d2y_[i]; + Real a1 = d2y_[i+1]; // Jerk: - Real j0 = d3ydx3_[i]; - Real j1 = d3ydx3_[i+1]; + Real j0 = d3y_[i]; + Real j1 = d3y_[i+1]; // See: // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m Real t2 = t*t; Real t3 = t2*t; Real t4 = t3*t; - Real t5 = t4*t; - Real t6 = t5*t; - Real t7 = t6*t; - Real dx2 = dx_*dx_; - Real dx3 = dx2*dx_; Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); Real z4 = -s; Real z0 = s + 1; - Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; - Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; - Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; + //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); + Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); + //Real z2 = t2*(4*t5 - 15*t4 + 20*t3 - 10*t2 + 1); + Real z2 = t2*(1+ t2*(4*t3 - 15*t + 20*t - 10)); + //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); + Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); - Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; - Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; - Real z7 = t7/6 - t6/2 + t5/2 - t4/6; + //Real z5 = t4*(10*t3 - 34*t2 + 39*t - 15); + Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); + //Real z6 = t4*(-4*t3 + 13*t2 - 14*t + 5); + Real z6 = t4*(5 + t*(-14 + t*(13-4*t))); + //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); + Real z7 = t4*(-1 + t*(3+t*(-3+t))); - return z0*y0 + z1*dx_*v0 + z2*dx2*a0 + z3*dx3*j0 + z4*y1 + z5*dx_*v1 + z6*dx2*a1 + z7*dx3*j1; + return z0*y0 + z1*dy0 + z2*a0 + z3*j0 + z4*y1 + z5*dy1 + z6*a1 + z7*j1; } inline Real prime(Real x) const { - Real xf = x0_ + (y_.size()-1)*dx_; + Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { std::ostringstream oss; @@ -256,7 +284,7 @@ public: } if (x == xf) { - return dydx_.back(); + return dy_.back()/inv_dx_; } return this->unchecked_prime(x); @@ -265,23 +293,24 @@ public: inline Real unchecked_prime(Real x) const { //TODO: Get the high accuracy approximation by differentiating the interpolant! using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s3 = (x-x0_)*inv_dx_; + Real ii = floor(s3); + auto i = static_cast(ii); + Real t = s3 - ii; // Velocity: - Real v0 = dydx_[i]; - Real v1 = dydx_[i+1]; - return (v0+v1)/2; + Real v0 = dy_[i]; + Real v1 = dy_[i+1]; + return (v0+v1)*inv_dx_/2; } private: RandomAccessContainer y_; - RandomAccessContainer dydx_; - RandomAccessContainer d2ydx2_; - RandomAccessContainer d3ydx3_; + RandomAccessContainer dy_; + RandomAccessContainer d2y_; + RandomAccessContainer d3y_; Real x0_; - Real dx_; + Real inv_dx_; }; @@ -291,7 +320,7 @@ public: using Point = typename RandomAccessContainer::value_type; using Real = typename Point::value_type; cardinal_septic_hermite_detail_aos(RandomAccessContainer && dat, Real x0, Real dx) - : data_{std::move(dat)}, x0_{x0}, dx_{dx} + : data_{std::move(dat)}, x0_{x0}, inv_dx_{1/dx} { if (data_.size() < 2) { throw std::domain_error("At least 2 abscissas are required."); @@ -299,11 +328,20 @@ public: if (data_[0].size() != 4) { throw std::domain_error("There must be 4 data items per struct."); } + + for (auto & datum : data_) + { + datum[1] *= dx; + datum[2] *= (dx*dx/2); + datum[3] *= (dx*dx*dx/6); + } } - inline Real operator()(Real x) const { - Real xf = x0_ + (data_.size()-1)*dx_; - if (x < x0_ || x > xf) { + inline Real operator()(Real x) const + { + Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" @@ -321,15 +359,17 @@ public: inline Real unchecked_evaluation(Real x) const { using std::floor; - auto i = static_cast(floor((x-x0_)/dx_)); - Real xi = x0_ + i*dx_; - Real t = (x - xi)/dx_; + Real s3 = (x-x0_)*inv_dx_; + Real ii = floor(s3); + auto i = static_cast(ii); + Real t = s3 - ii; + Real y0 = data_[i][0]; Real y1 = data_[i+1][0]; // Velocity: - Real v0 = data_[i][1]; - Real v1 = data_[i+1][1]; + Real dy0 = data_[i][1]; + Real dy1 = data_[i+1][1]; // Acceleration: Real a0 = data_[i][2]; Real a1 = data_[i+1][2]; @@ -340,28 +380,30 @@ public: Real t2 = t*t; Real t3 = t2*t; Real t4 = t3*t; - Real t5 = t4*t; - Real t6 = t5*t; - Real t7 = t6*t; - Real dx2 = dx_*dx_; - Real dx3 = dx2*dx_; Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); Real z4 = -s; Real z0 = s + 1; - Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; - Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; - Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; + //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); + Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); + //Real z2 = t2*(4*t5 - 15*t4 + 20*t3 - 10*t2 + 1); + Real z2 = t2*(1+ t2*(4*t3 - 15*t + 20*t - 10)); + //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); + Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); - Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; - Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; - Real z7 = t7/6 - t6/2 + t5/2 - t4/6; + //Real z5 = t4*(10*t3 - 34*t2 + 39*t - 15); + Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); + //Real z6 = t4*(-4*t3 + 13*t2 - 14*t + 5); + Real z6 = t4*(5 + t*(-14 + t*(13-4*t))); + //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); + Real z7 = t4*(-1 + t*(3+t*(-3+t))); + + return z0*y0 + z1*dy0 + z2*a0 + z3*j0 + z4*y1 + z5*dy1 + z6*a1 + z7*j1; - return z0*y0 + z1*dx_*v0 + z2*dx2*a0 + z3*dx3*j0 + z4*y1 + z5*dx_*v1 + z6*dx2*a1 + z7*dx3*j1; } inline Real prime(Real x) const { - Real xf = x0_ + (data_.size()-1)*dx_; + Real xf = x0_ + (data_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { std::ostringstream oss; @@ -385,7 +427,7 @@ public: private: RandomAccessContainer data_; Real x0_; - Real dx_; + Real inv_dx_; }; From 1aa2ba2337404b4afd2875b2c30520fb0c099ded Mon Sep 17 00:00:00 2001 From: NAThompson Date: Mon, 17 Feb 2020 12:24:17 -0500 Subject: [PATCH 034/104] Fix bug in septic_hermite; add unit tests [CI SKIP] --- .../detail/septic_hermite_detail.hpp | 70 +++++++------- .../math/interpolators/septic_hermite.hpp | 22 +++++ test/septic_hermite_test.cpp | 92 ++++++++++++++++++- 3 files changed, 143 insertions(+), 41 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 8a8787980..122c2ae38 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -233,6 +233,28 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; + // See: + // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m + Real t2 = t*t; + Real t3 = t2*t; + Real t4 = t3*t; + + Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); + Real z4 = -s; + Real z0 = s + 1; + //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); + Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); + //Real z2 = t2*(4*t4*t - 15*t4 + 20*t3 - 10*t2 + 1); + Real z2 = t2*(1 + t2*(-10 + t*(20 + t*(-15+4*t)))); + //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); + Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); + + //Real z5 = t4*(10*t3 - 34*t2 + 39*t - 15); + Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); + //Real z6 = t4*(-4*t3 + 13*t2 - 14*t + 5); + Real z6 = t4*(5 + t*(-14 + t*(13-4*t))); + //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); + Real z7 = t4*(-1 + t*(3+t*(-3+t))); Real y0 = y_[i]; Real y1 = y_[i+1]; @@ -246,29 +268,6 @@ public: Real j0 = d3y_[i]; Real j1 = d3y_[i+1]; - // See: - // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m - Real t2 = t*t; - Real t3 = t2*t; - Real t4 = t3*t; - - Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); - Real z4 = -s; - Real z0 = s + 1; - //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); - Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); - //Real z2 = t2*(4*t5 - 15*t4 + 20*t3 - 10*t2 + 1); - Real z2 = t2*(1+ t2*(4*t3 - 15*t + 20*t - 10)); - //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); - Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); - - //Real z5 = t4*(10*t3 - 34*t2 + 39*t - 15); - Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); - //Real z6 = t4*(-4*t3 + 13*t2 - 14*t + 5); - Real z6 = t4*(5 + t*(-14 + t*(13-4*t))); - //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); - Real z7 = t4*(-1 + t*(3+t*(-3+t))); - return z0*y0 + z1*dy0 + z2*a0 + z3*j0 + z4*y1 + z5*dy1 + z6*a1 + z7*j1; } @@ -363,20 +362,6 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; - - - Real y0 = data_[i][0]; - Real y1 = data_[i+1][0]; - // Velocity: - Real dy0 = data_[i][1]; - Real dy1 = data_[i+1][1]; - // Acceleration: - Real a0 = data_[i][2]; - Real a1 = data_[i+1][2]; - // Jerk: - Real j0 = data_[i][3]; - Real j1 = data_[i+1][3]; - Real t2 = t*t; Real t3 = t2*t; Real t4 = t3*t; @@ -387,7 +372,7 @@ public: //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); //Real z2 = t2*(4*t5 - 15*t4 + 20*t3 - 10*t2 + 1); - Real z2 = t2*(1+ t2*(4*t3 - 15*t + 20*t - 10)); + Real z2 = t2*(1 + t2*(-10 + t*(20 + t*(-15+4*t)))); //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); @@ -398,6 +383,15 @@ public: //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); Real z7 = t4*(-1 + t*(3+t*(-3+t))); + Real y0 = data_[i][0]; + Real dy0 = data_[i][1]; + Real a0 = data_[i][2]; + Real j0 = data_[i][3]; + Real y1 = data_[i+1][0]; + Real dy1 = data_[i+1][1]; + Real a1 = data_[i+1][2]; + Real j1 = data_[i+1][3]; + return z0*y0 + z1*dy0 + z2*a0 + z3*j0 + z4*y1 + z5*dy1 + z6*a1 + z7*j1; } diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp index 54da49a02..77ebe3024 100644 --- a/include/boost/math/interpolators/septic_hermite.hpp +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -57,5 +57,27 @@ private: std::shared_ptr> impl_; }; + +template +class cardinal_septic_hermite_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + cardinal_septic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) + : impl_(std::make_shared>(std::move(data), x0, dx)) + {} + + Real operator()(Real x) const { + return impl_->operator()(x); + } + + Real prime(Real x) const { + return impl_->prime(x); + } + +private: + std::shared_ptr> impl_; +}; + } #endif \ No newline at end of file diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index ed9772328..6a7c4c7ea 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -19,6 +19,7 @@ using boost::multiprecision::float128; using boost::math::interpolators::septic_hermite; using boost::math::interpolators::cardinal_septic_hermite; +using boost::math::interpolators::cardinal_septic_hermite_aos; template void test_constant() @@ -35,7 +36,8 @@ void test_constant() auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); - for (Real t = 0; t <= 81; t += 0.25) { + for (Real t = 0; t <= 81; t += 0.25) + { CHECK_ULP_CLOSE(Real(7), sh(t), 24); CHECK_ULP_CLOSE(Real(0), sh.prime(t), 24); } @@ -52,13 +54,27 @@ void test_constant() //CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); } + std::vector> data(128); + for (size_t i = 0; i < data.size(); ++i) + { + data[i][0] = 7; + data[i][1] = 0; + data[i][2] = 0; + data[i][3] = 0; + } + auto csh_aos = cardinal_septic_hermite_aos(std::move(data), x0, dx); + for (Real t = x0; t <= 127; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), csh_aos(t), 24); + //CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); + } + } template void test_linear() { - std::vector x{0,1,2,3, 4,5,6,7,8,9}; + std::vector x{0,1,2,3,4,5,6,7,8,9}; std::vector y = x; std::vector dydx(x.size(), 1); std::vector d2ydx2(x.size(), 0); @@ -88,9 +104,39 @@ void test_linear() sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); - for (Real t = xmin; t <= xmax; t += 0.125) { + for (Real t = xmin; t <= xmax; t += 0.125) + { CHECK_ULP_CLOSE(t, sh(t), 15); } + + Real x0 = 0; + Real dx = 1; + y.resize(10); + dydx.resize(10, 1); + d2ydx2.resize(10, 0); + d3ydx3.resize(10, 0); + for (size_t i = 0; i < y.size(); ++i) { + y[i] = i; + } + auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); + for (Real t = 0; t <= 9; t += 0.125) + { + CHECK_ULP_CLOSE(t, csh(t), 15); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) + { + data[i][0] = i; + data[i][1] = 1; + data[i][2] = 0; + data[i][3] = 0; + } + auto csh_aos = cardinal_septic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t <= 9; t += 0.125) + { + CHECK_ULP_CLOSE(t, csh_aos(t), 15); + } } template @@ -148,8 +194,48 @@ void test_quadratic() CHECK_ULP_CLOSE(t*t/2, sh(t), 24); //CHECK_ULP_CLOSE(t, qh.prime(t), 36); } + + y.resize(10); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i/Real(2); + } + + dydx.resize(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + dydx[i] = i; + } + + d2ydx2.resize(y.size(), 1); + d3ydx3.resize(y.size(), 0); + + Real x0 = 0; + Real dx = 1; + auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); + for (Real t = x0; t <= 9; t += 0.125) + { + CHECK_ULP_CLOSE(t*t/2, csh(t), 24); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) + { + data[i][0] = i*i/Real(2); + data[i][1] = i; + data[i][2] = 1; + data[i][3] = 0; + } + auto csh_aos = cardinal_septic_hermite_aos(std::move(data), x0, dx); + for (Real t = x0; t <= 9; t += 0.125) + { + CHECK_ULP_CLOSE(t*t/2, csh_aos(t), 24); + } + } + + template void test_cubic() { From 741696c7e730f32ded395289e74b8ea15f12554a Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 18 Feb 2020 06:20:30 -0500 Subject: [PATCH 035/104] Protect ourselves with a few more unit tests for septic_hermite [CI SKIP] --- .../detail/septic_hermite_detail.hpp | 23 ------- test/septic_hermite_test.cpp | 64 ++++++++++++++++++- 2 files changed, 63 insertions(+), 24 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 122c2ae38..18e8e6c29 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -180,7 +180,6 @@ public: { throw std::domain_error("Number of third derivatives must equal number of ordinates."); } - if (y_.size() < 2) { throw std::domain_error("At least 2 abscissas are required."); @@ -199,7 +198,6 @@ public: { d2y *= (dx*dx/2); } - for (auto & d3y : d3y_) { d3y *= (dx*dx*dx/6); @@ -218,8 +216,6 @@ public: << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. - // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. if (x == xf) { return y_.back(); @@ -242,29 +238,19 @@ public: Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); Real z4 = -s; Real z0 = s + 1; - //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); - //Real z2 = t2*(4*t4*t - 15*t4 + 20*t3 - 10*t2 + 1); Real z2 = t2*(1 + t2*(-10 + t*(20 + t*(-15+4*t)))); - //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); - - //Real z5 = t4*(10*t3 - 34*t2 + 39*t - 15); Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); - //Real z6 = t4*(-4*t3 + 13*t2 - 14*t + 5); Real z6 = t4*(5 + t*(-14 + t*(13-4*t))); - //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); Real z7 = t4*(-1 + t*(3+t*(-3+t))); Real y0 = y_[i]; Real y1 = y_[i+1]; - // Velocity: Real dy0 = dy_[i]; Real dy1 = dy_[i+1]; - // Acceleration: Real a0 = d2y_[i]; Real a1 = d2y_[i+1]; - // Jerk: Real j0 = d3y_[i]; Real j1 = d3y_[i+1]; @@ -347,8 +333,6 @@ public: << x0_ << ", " << xf << "]"; throw std::domain_error(oss.str()); } - // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. - // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. if (x == xf) { return data_.back()[0]; @@ -369,18 +353,11 @@ public: Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); Real z4 = -s; Real z0 = s + 1; - //Real z1 = t*(10*t6 - 36*t5 + 45*t4 - 20*t3 + 1); Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36+10*t)))); - //Real z2 = t2*(4*t5 - 15*t4 + 20*t3 - 10*t2 + 1); Real z2 = t2*(1 + t2*(-10 + t*(20 + t*(-15+4*t)))); - //Real z3 = t3*(t4 - 4*t3 + 6*t2 - 4*t + 1); Real z3 = t3*(1 + t*(-4+t*(6+t*(-4+t)))); - - //Real z5 = t4*(10*t3 - 34*t2 + 39*t - 15); Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); - //Real z6 = t4*(-4*t3 + 13*t2 - 14*t + 5); Real z6 = t4*(5 + t*(-14 + t*(13-4*t))); - //Real z7 = t4*(t3 - 3*t2 + 3*t - 1); Real z7 = t4*(-1 + t*(3+t*(-3+t))); Real y0 = data_[i][0]; diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index 6a7c4c7ea..eacedf44f 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -231,7 +231,6 @@ void test_quadratic() { CHECK_ULP_CLOSE(t*t/2, csh_aos(t), 24); } - } @@ -264,6 +263,38 @@ void test_cubic() for (Real t = 0; t <= xmax; t += 0.0078125) { CHECK_ULP_CLOSE(t*t*t, sh(t), 151); } + + Real x0 = 0; + Real dx = 1; + y.resize(8); + dydx.resize(8); + d2ydx2.resize(8); + d3ydx3.resize(8,6); + for (size_t i = 0; i < y.size(); ++i) { + y[i] = i*i*i; + dydx[i] = 3*i*i; + d2ydx2[i] = 6*i; + } + + auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); + + for (Real t = 0; t <= xmax; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t*t, csh(t), 151); + } + + std::vector> data(8); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i*i; + data[i][1] = 3*i*i; + data[i][2] = 6*i; + data[i][3] = 6; + } + + auto csh_aos = cardinal_septic_hermite_aos(std::move(data), x0, dx); + + for (Real t = 0; t <= xmax; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t*t, csh_aos(t), 151); + } } template @@ -298,6 +329,37 @@ void test_quartic() for (Real t = 1; t <= xmax; t += 0.0078125) { CHECK_ULP_CLOSE(t*t*t*t, sh(t), 117); } + + y.resize(10); + dydx.resize(10); + d2ydx2.resize(10); + d3ydx3.resize(10); + for (size_t i = 0; i < y.size(); ++i) { + y[i] = i*i*i*i; + dydx[i] = 4*i*i*i; + d2ydx2[i] = 12*i*i; + d3ydx3[i] = 24*i; + } + + auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), Real(0), Real(1)); + + for (Real t = 1; t <= xmax; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t*t*t, csh(t), 117); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i*i*i; + data[i][1] = 4*i*i*i; + data[i][2] = 12*i*i; + data[i][3] = 24*i; + } + + auto csh_aos = cardinal_septic_hermite_aos(std::move(data), Real(0), Real(1)); + for (Real t = 1; t <= xmax; t += 0.0078125) { + CHECK_ULP_CLOSE(t*t*t*t, csh_aos(t), 117); + } + } From ab2e877315e45ffaba65a21af1c663829f4dcc0f Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 18 Feb 2020 07:01:02 -0500 Subject: [PATCH 036/104] Consolidate cubic_hermite.hpp and cardinal_cubic_hermite.hpp [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 52 +++- .../daubechies_wavelets/daubechies_plots.cpp | 8 +- .../find_best_daubechies_interpolator.cpp | 9 +- .../interpolators/cardinal_cubic_hermite.hpp | 71 ------ .../math/interpolators/cubic_hermite.hpp | 57 +++++ .../detail/cardinal_cubic_hermite_detail.hpp | 233 ------------------ .../detail/cubic_hermite_detail.hpp | 221 +++++++++++++++++ .../detail/septic_hermite_detail.hpp | 2 +- .../special_functions/daubechies_scaling.hpp | 2 +- test/cardinal_cubic_hermite_test.cpp | 197 --------------- test/cubic_hermite_test.cpp | 171 +++++++++++++ 11 files changed, 505 insertions(+), 518 deletions(-) delete mode 100644 include/boost/math/interpolators/cardinal_cubic_hermite.hpp delete mode 100644 include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp delete mode 100644 test/cardinal_cubic_hermite_test.cpp diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index ab91a6a6f..69a01aaf9 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include @@ -72,6 +72,10 @@ BENCHMARK_TEMPLATE(ScalingEvaluation, double, 8); BENCHMARK_TEMPLATE(ScalingEvaluation, double, 9); BENCHMARK_TEMPLATE(ScalingEvaluation, double, 10); BENCHMARK_TEMPLATE(ScalingEvaluation, double, 11); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 12); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 13); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 14); +BENCHMARK_TEMPLATE(ScalingEvaluation, double, 15); template @@ -258,9 +262,8 @@ void CardinalQuinticHermite(benchmark::State & state) } } -BENCHMARK_TEMPLATE(CardinalQuinticHermite, float)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); -BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); -BENCHMARK_TEMPLATE(CardinalQuinticHermite, long double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); + template @@ -293,9 +296,7 @@ void CardinalQuinticHermiteAOS(benchmark::State & state) } } -BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, float)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); -BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); -BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, long double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); template @@ -334,7 +335,42 @@ void CardinalSepticHermite(benchmark::State & state) } } -BENCHMARK_TEMPLATE(CardinalSepticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(); +BENCHMARK_TEMPLATE(CardinalSepticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); + +template +void CardinalSepticHermiteAOS(benchmark::State & state) +{ + using boost::math::interpolators::detail::cardinal_septic_hermite_detail_aos; + auto n = state.range(0); + std::vector> data(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + for (size_t i = 0; i < data.size(); ++i) + { + for (size_t j = 0; j < 4; ++j) + { + data[i][j] = dis(rd); + } + } + + Real dx = Real(1)/Real(8); + Real x0 = 0; + Real xf = x0 + (data.size()-1)*dx; + + auto sh = cardinal_septic_hermite_detail_aos(std::move(data), x0, dx); + Real x = 0; + for (auto _ : state) + { + benchmark::DoNotOptimize(sh.unchecked_evaluation(x)); + x += xf/128; + if (x >= xf) + { + x = x0; + } + } +} + +BENCHMARK_TEMPLATE(CardinalSepticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); BENCHMARK_MAIN(); \ No newline at end of file diff --git a/example/daubechies_wavelets/daubechies_plots.cpp b/example/daubechies_wavelets/daubechies_plots.cpp index 4250dafa3..8f843bc23 100644 --- a/example/daubechies_wavelets/daubechies_plots.cpp +++ b/example/daubechies_wavelets/daubechies_plots.cpp @@ -127,7 +127,7 @@ int main() plot_phi(); plot_phi(); plot_phi(); - plot_phi(); + //plot_phi(); plot_phi(); plot_phi(); plot_phi(); @@ -150,9 +150,9 @@ int main() plot_condition_number(); using PreciseReal = float128; - using CoarseReal = long double; - int precise_refinements = 21; - constexpr const int p = 9; + using CoarseReal = double; + int precise_refinements = 22; + constexpr const int p = 12; std::cout << "Computing precise scaling function in " << boost::core::demangle(typeid(PreciseReal).name()) << " precision.\n"; auto phi_precise = boost::math::daubechies_scaling(precise_refinements); std::cout << "Beginning comparison with functions computed in " << boost::core::demangle(typeid(CoarseReal).name()) << " precision.\n"; diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index e6e87f89a..46d8a14f5 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -1,3 +1,9 @@ +// Copyright Nick Thompson, 2020 +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt +// or copy at http://www.boost.org/LICENSE_1_0.txt) + #include #include #include @@ -7,7 +13,6 @@ #include #include #include -#include #include #include #include @@ -21,8 +26,6 @@ #include #include #include -//#include -//#include using boost::multiprecision::float128; diff --git a/include/boost/math/interpolators/cardinal_cubic_hermite.hpp b/include/boost/math/interpolators/cardinal_cubic_hermite.hpp deleted file mode 100644 index f5a502990..000000000 --- a/include/boost/math/interpolators/cardinal_cubic_hermite.hpp +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright Nick Thompson, 2020 -// Use, modification and distribution are subject to the -// Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt -// or copy at http://www.boost.org/LICENSE_1_0.txt) - -#ifndef BOOST_MATH_INTERPOLATORS_CARDINAL_CUBIC_HERMITE_HPP -#define BOOST_MATH_INTERPOLATORS_CARDINAL_CUBIC_HERMITE_HPP -#include -#include - -namespace boost::math::interpolators { - -template -class cardinal_cubic_hermite { -public: - using Real = typename RandomAccessContainer::value_type; - - cardinal_cubic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, Real x0, Real dx) - : impl_(std::make_shared>(std::move(y), std::move(dydx), x0, dx)) - {} - - inline Real operator()(Real x) const { - return impl_->operator()(x); - } - - inline Real prime(Real x) const { - return impl_->prime(x); - } - - friend std::ostream& operator<<(std::ostream & os, const cardinal_cubic_hermite & m) - { - os << *m.impl_; - return os; - } - -private: - std::shared_ptr> impl_; -}; - - -template -class cardinal_cubic_hermite_aos { -public: - using Point = typename RandomAccessContainer::value_type; - using Real = typename Point::value_type; - - cardinal_cubic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) - : impl_(std::make_shared>(std::move(data), x0, dx)) - {} - - inline Real operator()(Real x) const { - return impl_->operator()(x); - } - - inline Real prime(Real x) const { - return impl_->prime(x); - } - - friend std::ostream& operator<<(std::ostream & os, const cardinal_cubic_hermite_aos & m) - { - os << *m.impl_; - return os; - } - -private: - std::shared_ptr> impl_; -}; - -} -#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/cubic_hermite.hpp b/include/boost/math/interpolators/cubic_hermite.hpp index 678590658..79aea2b9e 100644 --- a/include/boost/math/interpolators/cubic_hermite.hpp +++ b/include/boost/math/interpolators/cubic_hermite.hpp @@ -42,5 +42,62 @@ private: std::shared_ptr> impl_; }; +template +class cardinal_cubic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + + cardinal_cubic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, Real x0, Real dx) + : impl_(std::make_shared>(std::move(y), std::move(dydx), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + friend std::ostream& operator<<(std::ostream & os, const cardinal_cubic_hermite & m) + { + os << *m.impl_; + return os; + } + +private: + std::shared_ptr> impl_; +}; + + +template +class cardinal_cubic_hermite_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + cardinal_cubic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) + : impl_(std::make_shared>(std::move(data), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + friend std::ostream& operator<<(std::ostream & os, const cardinal_cubic_hermite_aos & m) + { + os << *m.impl_; + return os; + } + +private: + std::shared_ptr> impl_; +}; + + } #endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp deleted file mode 100644 index eb8167edd..000000000 --- a/include/boost/math/interpolators/detail/cardinal_cubic_hermite_detail.hpp +++ /dev/null @@ -1,233 +0,0 @@ -#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_CUBIC_HERMITE_DETAIL_HPP -#define BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_CUBIC_HERMITE_DETAIL_HPP -#include -#include -#include -#include -#include -#include - -namespace boost::math::interpolators::detail { - -template -class cardinal_cubic_hermite_detail { -public: - using Real = typename RandomAccessContainer::value_type; - - cardinal_cubic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer dydx, Real x0, Real dx) - : y_{std::move(y)}, dy_{std::move(dydx)}, x0_{x0}, inv_dx_{1/dx} - { - using std::abs; - using std::isnan; - if (y_.size() != dy_.size()) - { - throw std::domain_error("There must be the same number of derivatives as ordinates."); - } - if (y_.size() < 2) - { - throw std::domain_error("Must be at least two data points."); - } - if (dx <= 0) - { - throw std::domain_error("dx > 0 is required."); - } - - for (auto & dy : dy_) - { - dy *= dx; - } - } - - // Why not implement push_back? It's awkward: If the buffer is circular, x0_ += dx_. - // If the buffer is not circular, x0_ is unchanged. - // We need a concept for circular_buffer! - - inline Real operator()(Real x) const { - const Real xf = x0_ + (y_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return y_.back(); - } - return this->unchecked_evaluation(x); - } - - inline Real unchecked_evaluation(Real x) const - { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - Real y0 = y_[i]; - Real y1 = y_[i+1]; - Real dy0 = dy_[i]; - Real dy1 = dy_[i+1]; - - Real r = 1-t; - return r*r*(y0*(1+2*t) + dy0*t) - + t*t*(y1*(3-2*t) - dy1*r); - } - - inline Real prime(Real x) const { - const Real xf = x0_ + (y_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return dy_.back()*inv_dx_; - } - return this->unchecked_prime(x); - } - - inline Real unchecked_prime(Real x) const { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - Real y0 = y_[i]; - Real y1 = y_[i+1]; - Real dy0 = dy_[i]; - Real dy1 = dy_[i+1]; - - Real dy = 6*t*(1-t)*(y1 - y0) + (3*t*t - 4*t+1)*dy0 + t*(3*t-2)*dy1; - return dy*inv_dx_; - } - - - auto size() const - { - return y_.size(); - } - - RandomAccessContainer y_; - RandomAccessContainer dy_; - Real x0_; - Real inv_dx_; -}; - - -template -class cardinal_cubic_hermite_detail_aos { -public: - using Point = typename RandomAccessContainer::value_type; - using Real = typename Point::value_type; - - cardinal_cubic_hermite_detail_aos(RandomAccessContainer && dat, Real x0, Real dx) - : dat_{std::move(dat)}, x0_{x0}, inv_dx_{1/dx} - { - if (dat_.size() < 2) - { - throw std::domain_error("Must be at least two data points."); - } - if (dat_[0].size() != 2) - { - throw std::domain_error("Each datum must contain (y, y'), and nothing else."); - } - if (dx <= 0) - { - throw std::domain_error("dx > 0 is required."); - } - - for (auto & d : dat_) - { - d[1] *= dx; - } - } - - inline Real operator()(Real x) const { - const Real xf = x0_ + (dat_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return dat_.back()[0]; - } - return this->unchecked_evaluation(x); - } - - inline Real unchecked_evaluation(Real x) const - { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - - Real t = s - ii; - Real y0 = dat_[i][0]; - Real y1 = dat_[i+1][0]; - Real dy0 = dat_[i][1]; - Real dy1 = dat_[i+1][1]; - - Real r = 1-t; - return r*r*(y0*(1+2*t) + dy0*t) - + t*t*(y1*(3-2*t) - dy1*r); - } - - inline Real prime(Real x) const { - const Real xf = x0_ + (dat_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return dat_.back()[1]; - } - return this->unchecked_prime(x); - } - - inline Real unchecked_prime(Real x) const - { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - Real y0 = dat_[i][0]; - Real dy0 = dat_[i][1]; - Real y1 = dat_[i+1][0]; - Real dy1 = dat_[i+1][1]; - - Real dy = 6*t*(1-t)*(y1 - y0) + (3*t*t - 4*t+1)*dy0 + t*(3*t-2)*dy1; - return dy*inv_dx_; - } - - - auto size() const - { - return dat_.size(); - } - - RandomAccessContainer dat_; - Real x0_; - Real inv_dx_; -}; - - -} -#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp index 6cce795f7..231b9177f 100644 --- a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp @@ -156,5 +156,226 @@ public: RandomAccessContainer y_; RandomAccessContainer dydx_; }; + +template +class cardinal_cubic_hermite_detail { +public: + using Real = typename RandomAccessContainer::value_type; + + cardinal_cubic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer dydx, Real x0, Real dx) + : y_{std::move(y)}, dy_{std::move(dydx)}, x0_{x0}, inv_dx_{1/dx} + { + using std::abs; + using std::isnan; + if (y_.size() != dy_.size()) + { + throw std::domain_error("There must be the same number of derivatives as ordinates."); + } + if (y_.size() < 2) + { + throw std::domain_error("Must be at least two data points."); + } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & dy : dy_) + { + dy *= dx; + } + } + + // Why not implement push_back? It's awkward: If the buffer is circular, x0_ += dx_. + // If the buffer is not circular, x0_ is unchanged. + // We need a concept for circular_buffer! + + inline Real operator()(Real x) const { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return y_.back(); + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + + Real r = 1-t; + return r*r*(y0*(1+2*t) + dy0*t) + + t*t*(y1*(3-2*t) - dy1*r); + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dy_.back()*inv_dx_; + } + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + + Real dy = 6*t*(1-t)*(y1 - y0) + (3*t*t - 4*t+1)*dy0 + t*(3*t-2)*dy1; + return dy*inv_dx_; + } + + + auto size() const + { + return y_.size(); + } + + RandomAccessContainer y_; + RandomAccessContainer dy_; + Real x0_; + Real inv_dx_; +}; + + +template +class cardinal_cubic_hermite_detail_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + cardinal_cubic_hermite_detail_aos(RandomAccessContainer && dat, Real x0, Real dx) + : dat_{std::move(dat)}, x0_{x0}, inv_dx_{1/dx} + { + if (dat_.size() < 2) + { + throw std::domain_error("Must be at least two data points."); + } + if (dat_[0].size() != 2) + { + throw std::domain_error("Each datum must contain (y, y'), and nothing else."); + } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & d : dat_) + { + d[1] *= dx; + } + } + + inline Real operator()(Real x) const { + const Real xf = x0_ + (dat_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dat_.back()[0]; + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + + Real t = s - ii; + Real y0 = dat_[i][0]; + Real y1 = dat_[i+1][0]; + Real dy0 = dat_[i][1]; + Real dy1 = dat_[i+1][1]; + + Real r = 1-t; + return r*r*(y0*(1+2*t) + dy0*t) + + t*t*(y1*(3-2*t) - dy1*r); + } + + inline Real prime(Real x) const { + const Real xf = x0_ + (dat_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dat_.back()[1]; + } + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = dat_[i][0]; + Real dy0 = dat_[i][1]; + Real y1 = dat_[i+1][0]; + Real dy1 = dat_[i+1][1]; + + Real dy = 6*t*(1-t)*(y1 - y0) + (3*t*t - 4*t+1)*dy0 + t*(3*t-2)*dy1; + return dy*inv_dx_; + } + + + auto size() const + { + return dat_.size(); + } + + RandomAccessContainer dat_; + Real x0_; + Real inv_dx_; +}; + + } #endif diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 18e8e6c29..87ceffe23 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -281,7 +281,7 @@ public: Real s3 = (x-x0_)*inv_dx_; Real ii = floor(s3); auto i = static_cast(ii); - Real t = s3 - ii; + //Real t = s3 - ii; // Velocity: Real v0 = dy_[i]; diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index c6f973e04..5d7ff0140 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/test/cardinal_cubic_hermite_test.cpp b/test/cardinal_cubic_hermite_test.cpp deleted file mode 100644 index b3998b964..000000000 --- a/test/cardinal_cubic_hermite_test.cpp +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright Nick Thompson, 2020 - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "math_unit_test.hpp" -#include -#include -#include -#include -#include -#include -#ifdef BOOST_HAS_FLOAT128 -#include -using boost::multiprecision::float128; -#endif - - -using boost::math::interpolators::cardinal_cubic_hermite; -using boost::math::interpolators::cardinal_cubic_hermite_aos; - -template -void test_constant() -{ - Real x0 = 0; - Real dx = 2; - std::vector y(25); - for (auto & t : y) { - t = 7; - } - - std::vector dydx(y.size(), Real(0)); - - auto hermite_spline = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); - - for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { - CHECK_ULP_CLOSE(Real(7), hermite_spline(t), 2); - CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(t), 2); - } - - // Array of structs: - - std::vector> data(25); - for (auto & t : data) { - t[0] = 7; - t[1] = 0; - } - auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); - - for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { - CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(t), 2); - CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(t), 2); - } - -} - - -template -void test_linear() -{ - Real x0 = 0; - Real dx = 1; - std::vector y{0,1,2,3}; - std::vector dydx{1,1,1,1}; - auto y_copy = y; - auto dydx_copy = dydx; - auto hermite_spline = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); - - CHECK_ULP_CLOSE(y[0], hermite_spline(0), 0); - CHECK_ULP_CLOSE(Real(1)/Real(2), hermite_spline(Real(1)/Real(2)), 10); - CHECK_ULP_CLOSE(y[1], hermite_spline(1), 0); - CHECK_ULP_CLOSE(Real(3)/Real(2), hermite_spline(Real(3)/Real(2)), 10); - CHECK_ULP_CLOSE(y[2], hermite_spline(2), 0); - CHECK_ULP_CLOSE(Real(5)/Real(2), hermite_spline(Real(5)/Real(2)), 10); - CHECK_ULP_CLOSE(y[3], hermite_spline(3), 0); - - - y.resize(45); - dydx.resize(45); - for (size_t i = 0; i < y.size(); ++i) { - y[i] = i; - dydx[i] = 1; - } - - hermite_spline = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); - for (Real t = 0; t < 44; t += 0.5) { - CHECK_ULP_CLOSE(t, hermite_spline(t), 0); - CHECK_ULP_CLOSE(Real(1), hermite_spline.prime(t), 0); - } - - std::vector> data(45); - for (size_t i = 0; i < data.size(); ++i) { - data[i][0] = i; - data[i][1] = 1; - } - - auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); - for (Real t = 0; t < 44; t += 0.5) { - CHECK_ULP_CLOSE(t, hermite_spline_aos(t), 0); - CHECK_ULP_CLOSE(Real(1), hermite_spline_aos.prime(t), 0); - } - - -} - - -template -void test_quadratic() -{ - Real x0 = -1; - Real dx = Real(1)/Real(256); - - std::vector y(50); - std::vector dydx(y.size()); - for (size_t i = 0; i < y.size(); ++i) { - Real x = x0 + i*dx; - y[i] = x*x/2; - dydx[i] = x; - } - - auto s = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); - for (Real t = x0; t <= x0 + 49*dx; t+= 0.0125) - { - CHECK_ULP_CLOSE(t*t/2, s(t), 12); - CHECK_ULP_CLOSE(t, s.prime(t), 70); - } - - std::vector> data(50); - for (size_t i = 0; i < data.size(); ++i) { - Real x = x0 + i*dx; - data[i][0] = x*x/2; - data[i][1] = x; - } - - - auto saos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); - for (Real t = x0; t <= x0 + 49*dx; t+= 0.0125) - { - CHECK_ULP_CLOSE(t*t/2, saos(t), 12); - CHECK_ULP_CLOSE(t, saos.prime(t), 70); - } - -} - - -template -void test_interpolation_condition() -{ - for (size_t n = 4; n < 50; ++n) { - std::vector y(n); - std::vector dydx(n); - std::default_random_engine rd; - std::uniform_real_distribution dis(0.1,1); - Real x0 = Real(2); - Real dx = Real(1)/Real(128); - for (size_t i = 0; i < n; ++i) { - y[i] = dis(rd); - dydx[i] = dis(rd); - } - - auto y_copy = y; - auto dydx_copy = dydx; - auto s = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); - for (size_t i = 0; i < y.size(); ++i) { - CHECK_ULP_CLOSE(y[i], s(x0 + i*dx), 2); - CHECK_ULP_CLOSE(dydx[i], s.prime(x0 + i*dx), 2); - } - } -} - -int main() -{ - test_constant(); - test_constant(); - test_constant(); - - test_linear(); - test_linear(); - test_linear(); - - test_quadratic(); - test_quadratic(); - test_quadratic(); - - test_interpolation_condition(); - test_interpolation_condition(); - test_interpolation_condition(); -#ifdef BOOST_HAS_FLOAT128 - test_constant(); - test_linear(); - test_quadratic(); -#endif - - return boost::math::test::report_errors(); -} diff --git a/test/cubic_hermite_test.cpp b/test/cubic_hermite_test.cpp index 554ff07bc..8b1636768 100644 --- a/test/cubic_hermite_test.cpp +++ b/test/cubic_hermite_test.cpp @@ -18,6 +18,9 @@ using boost::multiprecision::float128; using boost::math::interpolators::cubic_hermite; +using boost::math::interpolators::cardinal_cubic_hermite; +using boost::math::interpolators::cardinal_cubic_hermite_aos; + template void test_constant() @@ -192,27 +195,195 @@ void test_interpolation_condition() } } +template +void test_cardinal_constant() +{ + Real x0 = 0; + Real dx = 2; + std::vector y(25); + for (auto & t : y) { + t = 7; + } + + std::vector dydx(y.size(), Real(0)); + + auto hermite_spline = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); + + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), hermite_spline(t), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(t), 2); + } + + // Array of structs: + + std::vector> data(25); + for (auto & t : data) { + t[0] = 7; + t[1] = 0; + } + auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { + CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(t), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(t), 2); + } + +} + + +template +void test_cardinal_linear() +{ + Real x0 = 0; + Real dx = 1; + std::vector y{0,1,2,3}; + std::vector dydx{1,1,1,1}; + auto y_copy = y; + auto dydx_copy = dydx; + auto hermite_spline = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); + + CHECK_ULP_CLOSE(y[0], hermite_spline(0), 0); + CHECK_ULP_CLOSE(Real(1)/Real(2), hermite_spline(Real(1)/Real(2)), 10); + CHECK_ULP_CLOSE(y[1], hermite_spline(1), 0); + CHECK_ULP_CLOSE(Real(3)/Real(2), hermite_spline(Real(3)/Real(2)), 10); + CHECK_ULP_CLOSE(y[2], hermite_spline(2), 0); + CHECK_ULP_CLOSE(Real(5)/Real(2), hermite_spline(Real(5)/Real(2)), 10); + CHECK_ULP_CLOSE(y[3], hermite_spline(3), 0); + + + y.resize(45); + dydx.resize(45); + for (size_t i = 0; i < y.size(); ++i) { + y[i] = i; + dydx[i] = 1; + } + + hermite_spline = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); + for (Real t = 0; t < 44; t += 0.5) { + CHECK_ULP_CLOSE(t, hermite_spline(t), 0); + CHECK_ULP_CLOSE(Real(1), hermite_spline.prime(t), 0); + } + + std::vector> data(45); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i; + data[i][1] = 1; + } + + auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t < 44; t += 0.5) { + CHECK_ULP_CLOSE(t, hermite_spline_aos(t), 0); + CHECK_ULP_CLOSE(Real(1), hermite_spline_aos.prime(t), 0); + } + + +} + + +template +void test_cardinal_quadratic() +{ + Real x0 = -1; + Real dx = Real(1)/Real(256); + + std::vector y(50); + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + Real x = x0 + i*dx; + y[i] = x*x/2; + dydx[i] = x; + } + + auto s = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); + for (Real t = x0; t <= x0 + 49*dx; t+= 0.0125) + { + CHECK_ULP_CLOSE(t*t/2, s(t), 12); + CHECK_ULP_CLOSE(t, s.prime(t), 70); + } + + std::vector> data(50); + for (size_t i = 0; i < data.size(); ++i) { + Real x = x0 + i*dx; + data[i][0] = x*x/2; + data[i][1] = x; + } + + + auto saos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + for (Real t = x0; t <= x0 + 49*dx; t+= 0.0125) + { + CHECK_ULP_CLOSE(t*t/2, saos(t), 12); + CHECK_ULP_CLOSE(t, saos.prime(t), 70); + } + +} + + +template +void test_cardinal_interpolation_condition() +{ + for (size_t n = 4; n < 50; ++n) { + std::vector y(n); + std::vector dydx(n); + std::default_random_engine rd; + std::uniform_real_distribution dis(0.1,1); + Real x0 = Real(2); + Real dx = Real(1)/Real(128); + for (size_t i = 0; i < n; ++i) { + y[i] = dis(rd); + dydx[i] = dis(rd); + } + + auto y_copy = y; + auto dydx_copy = dydx; + auto s = cardinal_cubic_hermite(std::move(y_copy), std::move(dydx_copy), x0, dx); + for (size_t i = 0; i < y.size(); ++i) { + CHECK_ULP_CLOSE(y[i], s(x0 + i*dx), 2); + CHECK_ULP_CLOSE(dydx[i], s.prime(x0 + i*dx), 2); + } + } +} + + + int main() { test_constant(); test_linear(); test_quadratic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_interpolation_condition(); + test_constant(); test_linear(); test_quadratic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_interpolation_condition(); + test_constant(); test_linear(); test_quadratic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_interpolation_condition(); + #ifdef BOOST_HAS_FLOAT128 test_constant(); test_linear(); + test_cardinal_constant(); + test_cardinal_linear(); #endif return boost::math::test::report_errors(); From 6290803975612bca9f2b072792dc5a831ec38381 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 18 Feb 2020 08:11:48 -0500 Subject: [PATCH 037/104] Finish up cubic Hermite interpolation. --- doc/interpolators/cubic_hermite.qbk | 117 +++++++++++++++++- example/daubechies_wavelets/bench.cpp | 50 +++++++- .../math/interpolators/cubic_hermite.hpp | 4 +- .../detail/cubic_hermite_detail.hpp | 68 +++++----- test/Jamfile.v2 | 1 + 5 files changed, 201 insertions(+), 39 deletions(-) diff --git a/doc/interpolators/cubic_hermite.qbk b/doc/interpolators/cubic_hermite.qbk index 0948ae80f..7b78e621e 100644 --- a/doc/interpolators/cubic_hermite.qbk +++ b/doc/interpolators/cubic_hermite.qbk @@ -32,12 +32,38 @@ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) friend std::ostream& operator<<(std::ostream & os, const cubic_hermite & m); }; - } // namespaces + template + class cardinal_cubic_hermite { + public: + using Real = typename RandomAccessContainer::value_type; + cardinal_cubic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, Real x0, Real dx) + + inline Real operator()(Real x) const; + + inline Real prime(Real x) const; + }; + + + template + class cardinal_cubic_hermite_aos { + public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + cardinal_cubic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx); + + inline Real operator()(Real x) const; + + inline Real prime(Real x) const; + }; + + } // namespaces [heading Cubic Hermite Interpolation] The cubic Hermite interpolant takes non-equispaced data and interpolates between them via cubic Hermite polynomials whose slopes must be provided. +This is a very nice interpolant for solution skeletons of ODEs steppers, since numerically solving /y/' = /f/(/x/, /y/) produces a list of positions, values, and their derivatives, i.e. (/x/,/y/,/y/')=(/x/,/y/,/f/(/x/,/y/))-which is exactly what is required for the cubic Hermite interpolator. The interpolant is /C/[super 1] and evaluation has [bigo](log(/N/)) complexity. An example usage is as follows: @@ -74,5 +100,94 @@ Hence we can use `boost::circular_buffer` to do real-time interpolation: // interpolate at 4.5: y = circular_hermite(4.5); +For the equispaced case, we can either use `cardinal_cubic_hermite`, which accepts two separate arrays of `y` and `dydx`, or we can use `cardinal_cubic_hermite_aos`, +which takes a vector of `(y, dydx)`, i.e., and array of structs (`aos`). +The array of structs should be preferred as it uses cache more effectively. + +Usage is as follows: + + using boost::math::interpolators::cardinal_cubic_hermite; + double x0 = 0; + double dx = 1; + std::vector y(128, 1); + std::vector dydx(128, 0); + auto ch = cardinal_cubic_hermite(std::move(y), std::move(dydx), x0, dx); + +For the "array of structs" version: + + using boost::math::interpolators::cardinal_cubic_hermite_aos; + std::vector> data(128); + for (auto & datum : data) { + datum[0] = 1; // y + datum[1] = 0; // y' + } + + auto ch = cardinal_cubic_hermite_aos(std::move(data), x0, dx); + +[heading Performance] + +Google benchmark was used to evaluate the performance. + +``` +Run on (16 X 4300 MHz CPU s) +CPU Caches: + L1 Data 32 KiB (x8) + L1 Instruction 32 KiB (x8) + L2 Unified 1024 KiB (x8) + L3 Unified 11264 KiB (x1) +Load Average: 1.16, 1.11, 0.99 +----------------------------------------------------- +Benchmark Time +----------------------------------------------------- +CubicHermite/256 9.67 ns +CubicHermite/512 10.4 ns +CubicHermite/1024 10.9 ns +CubicHermite/2048 12.3 ns +CubicHermite/4096 13.4 ns +CubicHermite/8192 14.9 ns +CubicHermite/16384 15.5 ns +CubicHermite/32768 18.0 ns +CubicHermite/65536 19.9 ns +CubicHermite/131072 23.0 ns +CubicHermite/262144 25.3 ns +CubicHermite/524288 28.9 ns +CubicHermite/1048576 31.0 ns +CubicHermite_BigO 1.32 lgN +CubicHermite_RMS 13 % +CardinalCubicHermite/256 3.14 ns +CardinalCubicHermite/512 3.13 ns +CardinalCubicHermite/1024 3.19 ns +CardinalCubicHermite/2048 3.14 ns +CardinalCubicHermite/4096 3.38 ns +CardinalCubicHermite/8192 3.54 ns +CardinalCubicHermite/16384 3.51 ns +CardinalCubicHermite/32768 3.76 ns +CardinalCubicHermite/65536 5.82 ns +CardinalCubicHermite/131072 5.76 ns +CardinalCubicHermite/262144 5.85 ns +CardinalCubicHermite/524288 5.69 ns +CardinalCubicHermite/1048576 5.77 ns +CardinalCubicHermite_BigO 4.28 (1) +CardinalCubicHermite_RMS 28 % +CardinalCubicHermiteAOS/256 3.22 ns +CardinalCubicHermiteAOS/512 3.22 ns +CardinalCubicHermiteAOS/1024 3.26 ns +CardinalCubicHermiteAOS/2048 3.23 ns +CardinalCubicHermiteAOS/4096 3.49 ns +CardinalCubicHermiteAOS/8192 3.57 ns +CardinalCubicHermiteAOS/16384 3.73 ns +CardinalCubicHermiteAOS/32768 4.12 ns +CardinalCubicHermiteAOS/65536 4.13 ns +CardinalCubicHermiteAOS/131072 4.12 ns +CardinalCubicHermiteAOS/262144 4.12 ns +CardinalCubicHermiteAOS/524288 4.12 ns +CardinalCubicHermiteAOS/1048576 4.19 ns +CardinalCubicHermiteAOS_BigO 3.73 (1) +CardinalCubicHermiteAOS_RMS 11 % +``` + +The logarithmic complexity of the non-equispaced version is evident, as is the better cache utilization of the "array of structs" version as the problem size gets larger. + + [endsect] [/section:cubic_hermite] diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 69a01aaf9..8c3558f3a 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -10,7 +10,7 @@ #include #include #include -#include +#include #include #include @@ -107,6 +107,44 @@ BENCHMARK_TEMPLATE(ScalingConstructor, float, 11)->Unit(benchmark::kMillisecond) BENCHMARK_TEMPLATE(ScalingConstructor, double, 11)->Unit(benchmark::kMillisecond); BENCHMARK_TEMPLATE(ScalingConstructor, long double, 11)->Unit(benchmark::kMillisecond); +template +void CubicHermite(benchmark::State & state) +{ + using boost::math::interpolators::cubic_hermite; + auto n = state.range(0); + std::vector x(n); + std::vector y(n); + std::vector dydx(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + x[0] = dis(rd); + y[0] = dis(rd); + dydx[0] = dis(rd); + for (size_t i = 1; i < y.size(); ++i) + { + x[i] = x[i-1] + dis(rd); + y[i] = dis(rd); + dydx[i] = dis(rd); + } + Real x0 = x.front(); + Real xf = x.back(); + + auto qh = cubic_hermite(std::move(x), std::move(y), std::move(dydx)); + Real t = x0; + for (auto _ : state) + { + benchmark::DoNotOptimize(qh(t)); + t += (xf-x0)/128; + if (t >= xf) + { + t = x0; + } + } + state.SetComplexityN(state.range(0)); +} + +BENCHMARK_TEMPLATE(CubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::oLogN); + template void CardinalCubicHermite(benchmark::State & state) { @@ -137,9 +175,10 @@ void CardinalCubicHermite(benchmark::State & state) x = x0; } } + state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); +BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); template void CardinalCubicHermiteAOS(benchmark::State & state) @@ -169,9 +208,10 @@ void CardinalCubicHermiteAOS(benchmark::State & state) x = x0; } } + state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); +BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); template void SineEvaluation(benchmark::State& state) @@ -260,6 +300,7 @@ void CardinalQuinticHermite(benchmark::State & state) x = x0; } } + state.SetComplexityN(state.range(0)); } BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); @@ -294,6 +335,7 @@ void CardinalQuinticHermiteAOS(benchmark::State & state) x = x0; } } + state.SetComplexityN(state.range(0)); } BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); @@ -333,6 +375,7 @@ void CardinalSepticHermite(benchmark::State & state) x = x0; } } + state.SetComplexityN(state.range(0)); } BENCHMARK_TEMPLATE(CardinalSepticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); @@ -368,6 +411,7 @@ void CardinalSepticHermiteAOS(benchmark::State & state) x = x0; } } + state.SetComplexityN(state.range(0)); } BENCHMARK_TEMPLATE(CardinalSepticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); diff --git a/include/boost/math/interpolators/cubic_hermite.hpp b/include/boost/math/interpolators/cubic_hermite.hpp index 79aea2b9e..c3ac71d7b 100644 --- a/include/boost/math/interpolators/cubic_hermite.hpp +++ b/include/boost/math/interpolators/cubic_hermite.hpp @@ -20,11 +20,11 @@ public: : impl_(std::make_shared>(std::move(x), std::move(y), std::move(dydx))) {} - Real operator()(Real x) const { + inline Real operator()(Real x) const { return impl_->operator()(x); } - Real prime(Real x) const { + inline Real prime(Real x) const { return impl_->prime(x); } diff --git a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp index 231b9177f..ee8e63f74 100644 --- a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp @@ -20,7 +20,8 @@ class cubic_hermite_detail { public: using Real = typename RandomAccessContainer::value_type; - cubic_hermite_detail(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer dydx) : x_{std::move(x)}, y_{std::move(y)}, dydx_{std::move(dydx)} + cubic_hermite_detail(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer dydx) + : x_{std::move(x)}, y_{std::move(y)}, dydx_{std::move(dydx)} { using std::abs; using std::isnan; @@ -37,9 +38,11 @@ public: throw std::domain_error("Must be at least two data points."); } Real x0 = x_[0]; - for (size_t i = 1; i < x_.size(); ++i) { + for (size_t i = 1; i < x_.size(); ++i) + { Real x1 = x_[i]; - if (x1 <= x0) { + if (x1 <= x0) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Abscissas must be listed in strictly increasing order x0 < x1 < ... < x_{n-1}, "; @@ -50,10 +53,12 @@ public: } } - void push_back(Real x, Real y, Real dydx) { + void push_back(Real x, Real y, Real dydx) + { using std::abs; using std::isnan; - if (x <= x_.back()) { + if (x <= x_.back()) + { throw std::domain_error("Calling push_back must preserve the monotonicity of the x's"); } x_.push_back(x); @@ -61,8 +66,10 @@ public: dydx_.push_back(dydx); } - Real operator()(Real x) const { - if (x < x_[0] || x > x_.back()) { + Real operator()(Real x) const + { + if (x < x_[0] || x > x_.back()) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" @@ -71,7 +78,8 @@ public: } // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. - if (x == x_.back()) { + if (x == x_.back()) + { return y_.back(); } @@ -88,35 +96,25 @@ public: // See the section 'Representations' in the page // https://en.wikipedia.org/wiki/Cubic_Hermite_spline - // This uses the factorized form: - //Real y = y0*(1+2*t)*(1-t)*(1-t) + dx*s0*t*(1-t)*(1-t) - // + y1*t*t*(3-2*t) + dx*s1*t*t*(t-1); - // And then factorized further: Real y = (1-t)*(1-t)*(y0*(1+2*t) + s0*(x-x0)) + t*t*(y1*(3-2*t) + dx*s1*(t-1)); return y; - - // Another representation, useful for understanding the derivative calc: - /*Real d1 = (y1 - y0 - s0*dx)/(dx*dx); - Real d2 = (s1 - s0)/(2*dx); - Real c2 = 3*d1 - 2*d2; - Real c3 = 2*(d2 - d1)/dx; - Real y = y0 + s0*(x-x0) + c2*(x-x0)*(x-x0) + c3*(x-x0)*(x-x0)*(x-x0); - return y;*/ } - Real prime(Real x) const { - if (x < x_[0] || x > x_.back()) { + Real prime(Real x) const + { + if (x < x_[0] || x > x_.back()) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x_[0] << ", " << x_.back() << "]"; throw std::domain_error(oss.str()); } - if (x == x_.back()) { + if (x == x_.back()) + { return dydx_.back(); } - auto it = std::upper_bound(x_.begin(), x_.end(), x); auto i = std::distance(x_.begin(), it) -1; Real x0 = *(it-1); @@ -131,16 +129,15 @@ public: Real d2 = (s1 - s0)/(2*dx); Real c2 = 3*d1 - 2*d2; Real c3 = 2*(d2 - d1)/dx; - Real dydx = s0 + 2*c2*(x-x0) + 3*c3*(x-x0)*(x-x0); - - return dydx; + return s0 + 2*c2*(x-x0) + 3*c3*(x-x0)*(x-x0); } friend std::ostream& operator<<(std::ostream & os, const cubic_hermite_detail & m) { os << "(x,y,y') = {"; - for (size_t i = 0; i < m.x_.size() - 1; ++i) { + for (size_t i = 0; i < m.x_.size() - 1; ++i) + { os << "(" << m.x_[i] << ", " << m.y_[i] << ", " << m.dydx_[i] << "), "; } auto n = m.x_.size()-1; @@ -148,7 +145,8 @@ public: return os; } - auto size() const { + auto size() const + { return x_.size(); } @@ -190,7 +188,8 @@ public: // If the buffer is not circular, x0_ is unchanged. // We need a concept for circular_buffer! - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { const Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { @@ -224,7 +223,8 @@ public: + t*t*(y1*(3-2*t) - dy1*r); } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { const Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { @@ -297,7 +297,8 @@ public: } } - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { const Real xf = x0_ + (dat_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { @@ -332,7 +333,8 @@ public: + t*t*(y1*(3-2*t) - dy1*r); } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { const Real xf = x0_ + (dat_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index d7543f0f0..f74444221 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -948,6 +948,7 @@ test-suite misc : [ run cardinal_quintic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run makima_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run pchip_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] + [ run septic_hermite_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run quintic_hermite_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run cubic_hermite_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run catmull_rom_test.cpp ../../test/build//boost_unit_test_framework : : : TEST=1 [ requires cxx11_hdr_array cxx11_hdr_initializer_list ] : catmull_rom_test_1 ] From dd11bb82c7146516bab00ecd79ecda5acd99ebe7 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 18 Feb 2020 12:55:10 -0500 Subject: [PATCH 038/104] Typo removal [CI SKIP] --- .../find_best_daubechies_interpolator.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index 46d8a14f5..ee6ff24bb 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -401,11 +401,13 @@ void find_best_interpolator() } } m.insert({fo_sup, "First-order Taylor"}); - if (p==2) { - fs << fo_sup << "\n"; + if (p==2) + { + fs << fo_sup << "\n"; } - else { - fs << fo_sup << ", "; + else + { + fs << fo_sup << ", "; } } @@ -534,7 +536,7 @@ void find_best_interpolator() } } m.insert({septic_sup, "septic_hermite_spline"}); - fs << septic_sup << ", "; + fs << septic_sup << "\n"; } From 5a9e39709d433183239af50aa79b75739a432fc6 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 18 Feb 2020 13:18:04 -0500 Subject: [PATCH 039/104] Regress accuracy. [CI SKIP] --- .../regress_daubechies_accuracy.cpp | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 example/daubechies_wavelets/regress_daubechies_accuracy.cpp diff --git a/example/daubechies_wavelets/regress_daubechies_accuracy.cpp b/example/daubechies_wavelets/regress_daubechies_accuracy.cpp new file mode 100644 index 000000000..9161d0743 --- /dev/null +++ b/example/daubechies_wavelets/regress_daubechies_accuracy.cpp @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +int main(int argc, char** argv) +{ + if (argc != 2) + { + std::cout << "Usage: ./regress_accuracy.x foo.csv\n"; + return 1; + } + std::string filename = std::string(argv[1]); + std::ifstream ifs(filename.c_str()); + if (!ifs.good()) + { + std::cerr << "Couldn't find file " << filename << "\n"; + return 1; + } + std::map> m; + + std::string header_line; + std::getline(ifs, header_line); + std::cout << "Header line = " << header_line << "\n"; + std::vector header_strs; + boost::split(header_strs, header_line, boost::is_any_of(",")); + for (auto & s : header_strs) { + boost::algorithm::trim(s); + } + + std::string line; + std::vector r; + std::vector matched_holder; + std::vector linear; + std::vector quadratic_b_spline; + std::vector cubic_b_spline; + std::vector quintic_b_spline; + std::vector cubic_hermite; + std::vector pchip; + while(std::getline(ifs, line)) + { + std::vector strs; + boost::split(strs, line, boost::is_any_of(",")); + for (auto & s : strs) + { + boost::algorithm::trim(s); + } + std::vector v(strs.size(), std::numeric_limits::quiet_NaN()); + for (size_t i = 0; i < v.size(); ++i) + { + v[i] = std::stod(strs[i]); + } + r.push_back(v[0]); + matched_holder.push_back(std::log2(v[1])); + linear.push_back(std::log2(v[2])); + quadratic_b_spline.push_back(std::log2(v[3])); + cubic_b_spline.push_back(std::log2(v[4])); + quintic_b_spline.push_back(std::log2(v[5])); + cubic_hermite.push_back(std::log2(v[6])); + pchip.push_back(std::log2(v[7])); + } + + std::cout << std::fixed << std::setprecision(16); + auto p = boost::math::statistics::simple_ordinary_least_squares(r, matched_holder); + + assert(p.second < 0); + std::cout << "Matched Holder : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infy)\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, linear); + assert(p.second < 0); + std::cout << "Linear : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, quadratic_b_spline); + assert(p.second < 0); + std::cout << "Quadratic B-spline: " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_b_spline); + assert(p.second < 0); + std::cout << "Cubic B-spline : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, quintic_b_spline); + assert(p.second < 0); + std::cout << "Quintic B-spline : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_hermite); + assert(p.second < 0); + std::cout << "Cubic Hermite : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_hermite); + assert(p.second < 0); + std::cout << "pchip : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + +} \ No newline at end of file From fa79cecc4280fedc2abd7f2c935187e1cfbdbb2e Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Tue, 18 Feb 2020 14:50:16 -0500 Subject: [PATCH 040/104] Regress on accuracy. [CI SKIP] --- .../regress_daubechies_accuracy.cpp | 62 ++++++++++++++++--- 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/example/daubechies_wavelets/regress_daubechies_accuracy.cpp b/example/daubechies_wavelets/regress_daubechies_accuracy.cpp index 9161d0743..913bfac2f 100644 --- a/example/daubechies_wavelets/regress_daubechies_accuracy.cpp +++ b/example/daubechies_wavelets/regress_daubechies_accuracy.cpp @@ -43,6 +43,12 @@ int main(int argc, char** argv) std::vector quintic_b_spline; std::vector cubic_hermite; std::vector pchip; + std::vector makima; + std::vector fotaylor; + std::vector quintic_hermite; + std::vector sotaylor; + std::vector totaylor; + std::vector septic_hermite; while(std::getline(ifs, line)) { std::vector strs; @@ -64,36 +70,76 @@ int main(int argc, char** argv) quintic_b_spline.push_back(std::log2(v[5])); cubic_hermite.push_back(std::log2(v[6])); pchip.push_back(std::log2(v[7])); + makima.push_back(std::log2(v[8])); + fotaylor.push_back(std::log2(v[9])); + if (v.size() > 10) { + quintic_hermite.push_back(std::log2(v[10])); + sotaylor.push_back(std::log2(v[11])); + } + if (v.size() > 12) { + totaylor.push_back(std::log2(v[12])); + septic_hermite.push_back(std::log2(v[13])); + } } std::cout << std::fixed << std::setprecision(16); auto p = boost::math::statistics::simple_ordinary_least_squares(r, matched_holder); assert(p.second < 0); - std::cout << "Matched Holder : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infy)\n"; + std::cout << "Matched Holder : " << p.first << " - " << std::abs(p.second) << "r\n"; p = boost::math::statistics::simple_ordinary_least_squares(r, linear); assert(p.second < 0); - std::cout << "Linear : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + std::cout << "Linear : " << p.first << " - " << std::abs(p.second) << "r\n"; p = boost::math::statistics::simple_ordinary_least_squares(r, quadratic_b_spline); assert(p.second < 0); - std::cout << "Quadratic B-spline: " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + std::cout << "Quadratic B-spline: " << p.first << " - " << std::abs(p.second) << "r\n"; p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_b_spline); assert(p.second < 0); - std::cout << "Cubic B-spline : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + std::cout << "Cubic B-spline : " << p.first << " - " << std::abs(p.second) << "r\n"; p = boost::math::statistics::simple_ordinary_least_squares(r, quintic_b_spline); assert(p.second < 0); - std::cout << "Quintic B-spline : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + std::cout << "Quintic B-spline : " << p.first << " - " << std::abs(p.second) << "r\n"; p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_hermite); assert(p.second < 0); - std::cout << "Cubic Hermite : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + std::cout << "Cubic Hermite : " << p.first << " - " << std::abs(p.second) << "r\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_hermite); + p = boost::math::statistics::simple_ordinary_least_squares(r, pchip); assert(p.second < 0); - std::cout << "pchip : " << p.first << " - " << std::abs(p.second) << "*log2(||phi - phi_r||_infty)\n"; + std::cout << "pchip : " << p.first << " - " << std::abs(p.second) << "r\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, makima); + assert(p.second < 0); + std::cout << "makima : " << p.first << " - " << std::abs(p.second) << "r\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, fotaylor); + assert(p.second < 0); + std::cout << "First-order Taylor: " << p.first << " - " << std::abs(p.second) << "r\n"; + + if (sotaylor.size() > 0) + { + p = boost::math::statistics::simple_ordinary_least_squares(r, quintic_hermite); + assert(p.second < 0); + std::cout << "Quintic Hermite : " << p.first << " - " << std::abs(p.second) << "r\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, sotaylor); + assert(p.second < 0); + std::cout << "Second-orde Taylor: " << p.first << " - " << std::abs(p.second) << "r\n"; + } + + if (totaylor.size() > 0) + { + p = boost::math::statistics::simple_ordinary_least_squares(r, totaylor); + assert(p.second < 0); + std::cout << "Third-order Taylor: " << p.first << " - " << std::abs(p.second) << "r\n"; + + p = boost::math::statistics::simple_ordinary_least_squares(r, septic_hermite); + assert(p.second < 0); + std::cout << "septic hermite : " << p.first << " - " << std::abs(p.second) << "r\n"; + } } \ No newline at end of file From 067474845686545f1c2624a1d2d3fc1b2cced890 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Wed, 19 Feb 2020 07:41:29 -0500 Subject: [PATCH 041/104] Version used for data provided in paper [CI SKIP] --- .../find_best_daubechies_interpolator.cpp | 32 ++++---- .../regress_daubechies_accuracy.cpp | 81 ++++++++++--------- 2 files changed, 58 insertions(+), 55 deletions(-) diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index ee6ff24bb..2cfb7f268 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -137,7 +137,8 @@ void find_best_interpolator() std::ofstream fs{filename}; static_assert(sizeof(PreciseReal) >= sizeof(Real), "sizeof(PreciseReal) >= sizeof(Real) is required."); using std::abs; - int rmax = 20; + int rmax = 17; + std::cout << "Computing phi_dense_precise\n"; auto phi_dense_precise = boost::math::detail::dyadic_grid(rmax); std::vector phi_dense(phi_dense_precise.size()); for (size_t i = 0; i < phi_dense.size(); ++i) @@ -145,6 +146,7 @@ void find_best_interpolator() phi_dense[i] = static_cast(phi_dense_precise[i]); } phi_dense_precise.resize(0); + std::cout << "Done\n"; Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); fs << std::setprecision(std::numeric_limits::digits10 + 3); @@ -562,31 +564,31 @@ int main() { //choose_refinement(); //choose_refinement(); // Says linear interpolation is the best: - find_best_interpolator(); + find_best_interpolator(); // Says linear interpolation is the best: - find_best_interpolator(); + find_best_interpolator(); // Says cubic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says cubic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says quintic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says quintic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says quintic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says quintic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator(); } diff --git a/example/daubechies_wavelets/regress_daubechies_accuracy.cpp b/example/daubechies_wavelets/regress_daubechies_accuracy.cpp index 913bfac2f..d7b0f3297 100644 --- a/example/daubechies_wavelets/regress_daubechies_accuracy.cpp +++ b/example/daubechies_wavelets/regress_daubechies_accuracy.cpp @@ -83,63 +83,64 @@ int main(int argc, char** argv) } std::cout << std::fixed << std::setprecision(16); - auto p = boost::math::statistics::simple_ordinary_least_squares(r, matched_holder); + auto q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, matched_holder); + assert(std::get<1>(q) < 0); + std::cout << "Matched Holder : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - assert(p.second < 0); - std::cout << "Matched Holder : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, linear); + assert(std::get<1>(q) < 0); + std::cout << "Linear : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, linear); - assert(p.second < 0); - std::cout << "Linear : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, quadratic_b_spline); + assert(std::get<1>(q) < 0); + std::cout << "Quadratic B-spline: " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, quadratic_b_spline); - assert(p.second < 0); - std::cout << "Quadratic B-spline: " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, cubic_b_spline); + assert(std::get<1>(q) < 0); + std::cout << "Cubic B-spline : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_b_spline); - assert(p.second < 0); - std::cout << "Cubic B-spline : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, quintic_b_spline); + assert(std::get<1>(q) < 0); + std::cout << "Quintic B-spline : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, quintic_b_spline); - assert(p.second < 0); - std::cout << "Quintic B-spline : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, cubic_hermite); + assert(std::get<1>(q) < 0); + std::cout << "Cubic Hermite : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, cubic_hermite); - assert(p.second < 0); - std::cout << "Cubic Hermite : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, pchip); + assert(std::get<1>(q) < 0); + std::cout << "PCHIP : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, pchip); - assert(p.second < 0); - std::cout << "pchip : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, makima); + assert(std::get<1>(q) < 0); + std::cout << "Makima : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, makima); - assert(p.second < 0); - std::cout << "makima : " << p.first << " - " << std::abs(p.second) << "r\n"; - - p = boost::math::statistics::simple_ordinary_least_squares(r, fotaylor); - assert(p.second < 0); - std::cout << "First-order Taylor: " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, fotaylor); + assert(std::get<1>(q) < 0); + std::cout << "First-order Taylor: " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; if (sotaylor.size() > 0) { - p = boost::math::statistics::simple_ordinary_least_squares(r, quintic_hermite); - assert(p.second < 0); - std::cout << "Quintic Hermite : " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, quintic_hermite); + assert(std::get<1>(q) < 0); + std::cout << "Quintic Hermite : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; + + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, sotaylor); + assert(std::get<1>(q) < 0); + std::cout << "2nd order Taylor : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, sotaylor); - assert(p.second < 0); - std::cout << "Second-orde Taylor: " << p.first << " - " << std::abs(p.second) << "r\n"; } if (totaylor.size() > 0) { - p = boost::math::statistics::simple_ordinary_least_squares(r, totaylor); - assert(p.second < 0); - std::cout << "Third-order Taylor: " << p.first << " - " << std::abs(p.second) << "r\n"; + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, totaylor); + assert(std::get<1>(q) < 0); + std::cout << "3rd order Taylor : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; + + q = boost::math::statistics::simple_ordinary_least_squares_with_R_squared(r, septic_hermite); + assert(std::get<1>(q) < 0); + std::cout << "Septic Hermite : " << std::get<0>(q) << " - " << std::abs(std::get<1>(q)) << "r, R^2 = " << std::get<2>(q) << "\n"; - p = boost::math::statistics::simple_ordinary_least_squares(r, septic_hermite); - assert(p.second < 0); - std::cout << "septic hermite : " << p.first << " - " << std::abs(p.second) << "r\n"; } } \ No newline at end of file From 2ae966266d7738ba5b87b2b4d90fdf42925b4819 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 20 Feb 2020 06:52:11 -0500 Subject: [PATCH 042/104] Unify and patch up quintic hermite interpolation [CI SKIP] --- .../cardinal_quintic_hermite.hpp | 56 --- .../cardinal_quintic_hermite_detail.hpp | 297 ------------- .../detail/quintic_hermite_detail.hpp | 413 +++++++++++++++++- .../math/interpolators/quintic_hermite.hpp | 57 ++- .../special_functions/daubechies_scaling.hpp | 1 - test/cardinal_quintic_hermite_test.cpp | 252 ----------- test/quintic_hermite_test.cpp | 318 ++++++++++++-- 7 files changed, 738 insertions(+), 656 deletions(-) delete mode 100644 include/boost/math/interpolators/cardinal_quintic_hermite.hpp delete mode 100644 include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp delete mode 100644 test/cardinal_quintic_hermite_test.cpp diff --git a/include/boost/math/interpolators/cardinal_quintic_hermite.hpp b/include/boost/math/interpolators/cardinal_quintic_hermite.hpp deleted file mode 100644 index d2d1ce696..000000000 --- a/include/boost/math/interpolators/cardinal_quintic_hermite.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef BOOST_MATH_INTERPOLATORS_CARDINAL_QUINTIC_HERMITE_HPP -#define BOOST_MATH_INTERPOLATORS_CARDINAL_QUINTIC_HERMITE_HPP -#include -#include -#include -#include - -namespace boost::math::interpolators { - -template -class cardinal_quintic_hermite { -public: - using Real = typename RandomAccessContainer::value_type; - cardinal_quintic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) - : impl_(std::make_shared>(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx)) - {} - - inline Real operator()(Real x) const { - return impl_->operator()(x); - } - - inline Real prime(Real x) const { - return impl_->prime(x); - } - - inline Real double_prime(Real x) const { - return impl_->double_prime(x); - } - -private: - std::shared_ptr> impl_; -}; - -template -class cardinal_quintic_hermite_aos { -public: - using Point = typename RandomAccessContainer::value_type; - using Real = typename Point::value_type; - cardinal_quintic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) - : impl_(std::make_shared>(std::move(data), x0, dx)) - {} - - inline Real operator()(Real x) const { - return impl_->operator()(x); - } - - inline Real prime(Real x) const { - return impl_->prime(x); - } - -private: - std::shared_ptr> impl_; -}; - -} -#endif \ No newline at end of file diff --git a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp deleted file mode 100644 index 28944f76d..000000000 --- a/include/boost/math/interpolators/detail/cardinal_quintic_hermite_detail.hpp +++ /dev/null @@ -1,297 +0,0 @@ -#ifndef BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_QUINTIC_HERMITE_DETAIL_HPP -#define BOOST_MATH_INTERPOLATORS_DETAIL_CARDINAL_QUINTIC_HERMITE_DETAIL_HPP -#include -#include -#include -#include - -namespace boost::math::interpolators::detail { - -template -class cardinal_quintic_hermite_detail { -public: - using Real = typename RandomAccessContainer::value_type; - cardinal_quintic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) - : y_{std::move(y)}, dy_{std::move(dydx)}, d2y_{std::move(d2ydx2)}, x0_{x0}, inv_dx_{1/dx} - { - if (y_.size() != dy_.size()) - { - throw std::domain_error("Numbers of derivatives must = number of abscissas."); - } - if (y_.size() != d2y_.size()) - { - throw std::domain_error("Number of second derivatives must equal number of abscissas."); - } - if (y_.size() < 2) - { - throw std::domain_error("At least 2 abscissas are required."); - } - if (dx <= 0) - { - throw std::domain_error("dx > 0 is required."); - } - - for (auto & dy : dy_) - { - dy *= dx; - } - - for (auto & d2y : d2y_) - { - d2y *= (dx*dx)/2; - } - } - - - inline Real operator()(Real x) const - { - const Real xf = x0_ + (y_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return y_.back(); - } - return this->unchecked_evaluation(x); - } - - inline Real unchecked_evaluation(Real x) const - { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - - Real y0 = y_[i]; - Real y1 = y_[i+1]; - Real dy0 = dy_[i]; - Real dy1 = dy_[i+1]; - Real d2y0 = d2y_[i]; - Real d2y1 = d2y_[i+1]; - - // See the 'Basis functions' section of: - // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf - // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs - Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; - y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; - y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; - y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); - return y; - } - - inline Real prime(Real x) const - { - const Real xf = x0_ + (y_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return dy_.back()*inv_dx_; - } - - return this->unchecked_prime(x); - } - - inline Real unchecked_prime(Real x) const - { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - - Real y0 = y_[i]; - Real y1 = y_[i+1]; - Real dy0 = dy_[i]; - Real dy1 = dy_[i+1]; - Real d2y0 = d2y_[i]; - Real d2y1 = d2y_[i+1]; - - Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0); - dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*dy0 - t*t*(12 - 28*t + 15*t*t)*dy1; - dydx += t*((2 - 9*t + 12*t*t - 5*t*t*t)*d2y0 + t*(3 - 8*t + 5*t*t)*d2y1); - dydx *= inv_dx_; - return dydx; - } - - inline Real double_prime(Real x) const { - const Real xf = x0_ + (y_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return d2y_.back()*2*inv_dx_*inv_dx_; - } - - return this->unchecked_double_prime(x); - } - - inline Real unchecked_double_prime(Real x) const { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - - - Real y0 = y_[i]; - Real y1 = y_[i+1]; - Real dy0 = dy_[i]; - Real dy1 = dy_[i+1]; - Real d2y0 = d2y_[i]; - Real d2y1 = d2y_[i+1]; - - Real d2ydx2 = 60*t*(1 - 3*t + 2*t*t)*(y1 - y0)*inv_dx_*inv_dx_; - d2ydx2 += (12*t)*((-3 + 8*t - 5*t*t)*dy0 - (2 - 7*t + 5*t*t)*dy1); - d2ydx2 += (1 - 9*t + 18*t*t - 10*t*t*t)*d2y0*(2*inv_dx_*inv_dx_) + t*(3 - 12*t + 10*t*t)*d2y1*(2*inv_dx_*inv_dx_); - return d2ydx2; - } - -private: - RandomAccessContainer y_; - RandomAccessContainer dy_; - RandomAccessContainer d2y_; - Real x0_; - Real inv_dx_; -}; - - -template -class cardinal_quintic_hermite_detail_aos { -public: - using Point = typename RandomAccessContainer::value_type; - using Real = typename Point::value_type; - cardinal_quintic_hermite_detail_aos(RandomAccessContainer && data, Real x0, Real dx) - : data_{std::move(data)} , x0_{x0}, inv_dx_{1/dx} - { - if (data_.size() < 2) - { - throw std::domain_error("At least two points are required to interpolate using cardinal_quintic_hermite_aos"); - } - - if (data_[0].size() != 3) - { - throw std::domain_error("Each datum passed to the cardinal_quintic_hermite_aos must have three elements: {y, y', y''}"); - } - if (dx <= 0) - { - throw std::domain_error("dx > 0 is required."); - } - - for (auto & datum : data_) - { - datum[1] *= dx; - datum[2] *= (dx*dx/2); - } - } - - - inline Real operator()(Real x) const - { - const Real xf = x0_ + (data_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return data_.back()[0]; - } - return this->unchecked_evaluation(x); - } - - inline Real unchecked_evaluation(Real x) const - { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - - - Real y0 = data_[i][0]; - Real dy0 = data_[i][1]; - Real d2y0 = data_[i][2]; - Real y1 = data_[i+1][0]; - Real dy1 = data_[i+1][1]; - Real d2y1 = data_[i+1][2]; - - Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; - y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; - y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; - y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); - return y; - } - - inline Real prime(Real x) const - { - const Real xf = x0_ + (data_.size()-1)/inv_dx_; - if (x < x0_ || x > xf) - { - std::ostringstream oss; - oss.precision(std::numeric_limits::digits10+3); - oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" - << x0_ << ", " << xf << "]"; - throw std::domain_error(oss.str()); - } - if (x == xf) - { - return data_.back()[1]*inv_dx_; - } - - return this->unchecked_prime(x); - } - - inline Real unchecked_prime(Real x) const { - using std::floor; - Real s = (x-x0_)*inv_dx_; - Real ii = floor(s); - auto i = static_cast(ii); - Real t = s - ii; - - - Real y0 = data_[i][0]; - Real y1 = data_[i+1][0]; - Real v0 = data_[i][1]; - Real v1 = data_[i+1][1]; - Real a0 = data_[i][2]; - Real a1 = data_[i+1][2]; - - Real dy = 30*t*t*(1 - 2*t + t*t)*(y1-y0); - dy += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; - dy += t*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); - return dy*inv_dx_; - } - - - -private: - RandomAccessContainer data_; - Real x0_; - Real inv_dx_; -}; - -} -#endif diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 84f64df9e..18a1990c7 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -13,20 +13,25 @@ public: using Real = typename RandomAccessContainer::value_type; quintic_hermite_detail(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2) : x_{std::move(x)}, y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)} { - if (x_.size() != y_.size()) { + if (x_.size() != y_.size()) + { throw std::domain_error("Number of abscissas must = number of ordinates."); } - if (x_.size() != dydx_.size()) { + if (x_.size() != dydx_.size()) + { throw std::domain_error("Numbers of derivatives must = number of abscissas."); } - if (x_.size() != d2ydx2_.size()) { + if (x_.size() != d2ydx2_.size()) + { throw std::domain_error("Number of second derivatives must equal number of abscissas."); } - if (x_.size() < 2) { + if (x_.size() < 2) + { throw std::domain_error("At least 2 abscissas are required."); } Real x0 = x_[0]; - for (decltype(x_.size()) i = 1; i < x_.size(); ++i) { + for (decltype(x_.size()) i = 1; i < x_.size(); ++i) + { Real x1 = x_[i]; if (x1 <= x0) { @@ -36,7 +41,8 @@ public: } } - void push_back(Real x, Real y, Real dydx, Real d2ydx2) { + void push_back(Real x, Real y, Real dydx, Real d2ydx2) + { using std::abs; using std::isnan; if (x <= x_.back()) @@ -50,7 +56,8 @@ public: } inline Real operator()(Real x) const { - if (x < x_[0] || x > x_.back()) { + if (x < x_[0] || x > x_.back()) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" @@ -59,7 +66,8 @@ public: } // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. - if (x == x_.back()) { + if (x == x_.back()) + { return y_.back(); } @@ -76,26 +84,31 @@ public: Real dx = (x1-x0); Real t = (x-x0)/dx; + Real t2 = t*t; + Real t3 = t2*t; // See the 'Basis functions' section of: // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs - Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; - y += t*(1+ t*t*(-6 + t*(8 -3*t)))*v0*dx; - y += t*t*(1 + t*(-3 + t*(3-t)))*a0*dx*dx/2; - y += t*t*t*((1 + t*(-2 + t))*a1*dx*dx/2 + (-4 + t*(7 -3*t))*v1*dx + (10 + t*(-15 + 6*t))*y1); + Real y = (1- t3*(10 + t*(-15 + 6*t)))*y0; + y += t*(1+ t2*(-6 + t*(8 -3*t)))*v0*dx; + y += t2*(1 + t*(-3 + t*(3-t)))*a0*dx*dx/2; + y += t3*((1 + t*(-2 + t))*a1*dx*dx/2 + (-4 + t*(7 - 3*t))*v1*dx + (10 + t*(-15 + 6*t))*y1); return y; } - inline Real prime(Real x) const { - if (x < x_[0] || x > x_.back()) { + inline Real prime(Real x) const + { + if (x < x_[0] || x > x_.back()) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x_[0] << ", " << x_.back() << "]"; throw std::domain_error(oss.str()); } - if (x == x_.back()) { + if (x == x_.back()) + { return dydx_.back(); } @@ -112,13 +125,51 @@ public: Real a0 = d2ydx2_[i]; Real a1 = d2ydx2_[i+1]; Real t= (x-x0)/dx; + Real t2 = t*t; - Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0)/dx; + Real dydx = 30*t2*(1 - 2*t + t*t)*(y1-y0)/dx; dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; dydx += (t*dx/2)*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); return dydx; } + inline Real double_prime(Real x) const + { + if (x < x_[0] || x > x_.back()) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x_[0] << ", " << x_.back() << "]"; + throw std::domain_error(oss.str()); + } + if (x == x_.back()) + { + return d2ydx2_.back(); + } + + auto it = std::upper_bound(x_.begin(), x_.end(), x); + auto i = std::distance(x_.begin(), it) -1; + Real x0 = *(it-1); + Real x1 = *it; + Real dx = x1 - x0; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + Real t = (x-x0)/dx; + + Real d2ydx2 = 60*t*(1 + t*(-3 + 2*t))*(y1-y0)/(dx*dx); + d2ydx2 += 12*t*(-3 + t*(8 - 5*t))*v0/dx; + d2ydx2 -= 12*t*(2 + t*(-7 + 5*t))*v1/dx; + d2ydx2 += (1 + t*(-9 + t*(18 - 10*t)))*a0; + d2ydx2 += t*(3 + t*(-12 + 10*t))*a1; + + return d2ydx2; + } friend std::ostream& operator<<(std::ostream & os, const quintic_hermite_detail & m) { @@ -131,13 +182,337 @@ public: return os; } - - private: RandomAccessContainer x_; RandomAccessContainer y_; RandomAccessContainer dydx_; RandomAccessContainer d2ydx2_; }; + + +template +class cardinal_quintic_hermite_detail { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_quintic_hermite_detail(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) + : y_{std::move(y)}, dy_{std::move(dydx)}, d2y_{std::move(d2ydx2)}, x0_{x0}, inv_dx_{1/dx} + { + if (y_.size() != dy_.size()) + { + throw std::domain_error("Numbers of derivatives must = number of abscissas."); + } + if (y_.size() != d2y_.size()) + { + throw std::domain_error("Number of second derivatives must equal number of abscissas."); + } + if (y_.size() < 2) + { + throw std::domain_error("At least 2 abscissas are required."); + } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & dy : dy_) + { + dy *= dx; + } + + for (auto & d2y : d2y_) + { + d2y *= (dx*dx)/2; + } + } + + + inline Real operator()(Real x) const + { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return y_.back(); + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real d2y0 = d2y_[i]; + Real d2y1 = d2y_[i+1]; + + // See the 'Basis functions' section of: + // https://www.rose-hulman.edu/~finn/CCLI/Notes/day09.pdf + // Also: https://github.com/MrHexxx/QuinticHermiteSpline/blob/master/HermiteSpline.cs + Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; + y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; + y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; + y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); + return y; + } + + inline Real prime(Real x) const + { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return dy_.back()*inv_dx_; + } + + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real d2y0 = d2y_[i]; + Real d2y1 = d2y_[i+1]; + + Real dydx = 30*t*t*(1 - 2*t + t*t)*(y1-y0); + dydx += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*dy0 - t*t*(12 - 28*t + 15*t*t)*dy1; + dydx += t*((2 - 9*t + 12*t*t - 5*t*t*t)*d2y0 + t*(3 - 8*t + 5*t*t)*d2y1); + dydx *= inv_dx_; + return dydx; + } + + inline Real double_prime(Real x) const { + const Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return d2y_.back()*2*inv_dx_*inv_dx_; + } + + return this->unchecked_double_prime(x); + } + + inline Real unchecked_double_prime(Real x) const { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real d2y0 = d2y_[i]; + Real d2y1 = d2y_[i+1]; + + Real d2ydx2 = 60*t*(1 - 3*t + 2*t*t)*(y1 - y0)*inv_dx_*inv_dx_; + d2ydx2 += (12*t)*((-3 + 8*t - 5*t*t)*dy0 - (2 - 7*t + 5*t*t)*dy1); + d2ydx2 += (1 - 9*t + 18*t*t - 10*t*t*t)*d2y0*(2*inv_dx_*inv_dx_) + t*(3 - 12*t + 10*t*t)*d2y1*(2*inv_dx_*inv_dx_); + return d2ydx2; + } + +private: + RandomAccessContainer y_; + RandomAccessContainer dy_; + RandomAccessContainer d2y_; + Real x0_; + Real inv_dx_; +}; + + +template +class cardinal_quintic_hermite_detail_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + cardinal_quintic_hermite_detail_aos(RandomAccessContainer && data, Real x0, Real dx) + : data_{std::move(data)} , x0_{x0}, inv_dx_{1/dx} + { + if (data_.size() < 2) + { + throw std::domain_error("At least two points are required to interpolate using cardinal_quintic_hermite_aos"); + } + + if (data_[0].size() != 3) + { + throw std::domain_error("Each datum passed to the cardinal_quintic_hermite_aos must have three elements: {y, y', y''}"); + } + if (dx <= 0) + { + throw std::domain_error("dx > 0 is required."); + } + + for (auto & datum : data_) + { + datum[1] *= dx; + datum[2] *= (dx*dx/2); + } + } + + + inline Real operator()(Real x) const + { + const Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return data_.back()[0]; + } + return this->unchecked_evaluation(x); + } + + inline Real unchecked_evaluation(Real x) const + { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + + + Real y0 = data_[i][0]; + Real dy0 = data_[i][1]; + Real d2y0 = data_[i][2]; + Real y1 = data_[i+1][0]; + Real dy1 = data_[i+1][1]; + Real d2y1 = data_[i+1][2]; + + Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; + y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; + y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; + y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); + return y; + } + + inline Real prime(Real x) const + { + const Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return data_.back()[1]*inv_dx_; + } + + return this->unchecked_prime(x); + } + + inline Real unchecked_prime(Real x) const { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + + + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; + Real v0 = data_[i][1]; + Real v1 = data_[i+1][1]; + Real a0 = data_[i][2]; + Real a1 = data_[i+1][2]; + + Real dy = 30*t*t*(1 - 2*t + t*t)*(y1-y0); + dy += (1-18*t*t + 32*t*t*t - 15*t*t*t*t)*v0 - t*t*(12 - 28*t + 15*t*t)*v1; + dy += t*((2 - 9*t + 12*t*t - 5*t*t*t)*a0 + t*(3 - 8*t + 5*t*t)*a1); + return dy*inv_dx_; + } + + inline Real double_prime(Real x) const { + const Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return data_.back()[2]*2*inv_dx_*inv_dx_; + } + + return this->unchecked_double_prime(x); + } + + inline Real unchecked_double_prime(Real x) const { + using std::floor; + Real s = (x-x0_)*inv_dx_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + + + Real y0 = data_[i][0]; + Real dy0 = data_[i][1]; + Real d2y0 = data_[i][2]; + Real y1 = data_[i+1][0]; + Real dy1 = data_[i+1][1]; + Real d2y1 = data_[i+1][2]; + + Real d2ydx2 = 60*t*(1 - 3*t + 2*t*t)*(y1 - y0)*inv_dx_*inv_dx_; + d2ydx2 += (12*t)*((-3 + 8*t - 5*t*t)*dy0 - (2 - 7*t + 5*t*t)*dy1); + d2ydx2 += (1 - 9*t + 18*t*t - 10*t*t*t)*d2y0*(2*inv_dx_*inv_dx_) + t*(3 - 12*t + 10*t*t)*d2y1*(2*inv_dx_*inv_dx_); + return d2ydx2; + } + + +private: + RandomAccessContainer data_; + Real x0_; + Real inv_dx_; +}; + } -#endif \ No newline at end of file +#endif diff --git a/include/boost/math/interpolators/quintic_hermite.hpp b/include/boost/math/interpolators/quintic_hermite.hpp index 0111df9a1..59fe7fa9b 100644 --- a/include/boost/math/interpolators/quintic_hermite.hpp +++ b/include/boost/math/interpolators/quintic_hermite.hpp @@ -23,6 +23,10 @@ public: return impl_->prime(x); } + Real double_prime(Real x) const { + return impl_->double_prime(x); + } + friend std::ostream& operator<<(std::ostream & os, const quintic_hermite & m) { os << *m.impl_; @@ -37,5 +41,56 @@ public: private: std::shared_ptr> impl_; }; + +template +class cardinal_quintic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_quintic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx) + : impl_(std::make_shared>(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + inline Real double_prime(Real x) const { + return impl_->double_prime(x); + } + +private: + std::shared_ptr> impl_; +}; + +template +class cardinal_quintic_hermite_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + cardinal_quintic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) + : impl_(std::make_shared>(std::move(data), x0, dx)) + {} + + inline Real operator()(Real x) const { + return impl_->operator()(x); + } + + inline Real prime(Real x) const { + return impl_->prime(x); + } + + inline Real double_prime(Real x) const { + return impl_->double_prime(x); + } + +private: + std::shared_ptr> impl_; +}; + + } -#endif \ No newline at end of file +#endif diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 5d7ff0140..82abb2356 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -21,7 +21,6 @@ #include #include #include -#include #include diff --git a/test/cardinal_quintic_hermite_test.cpp b/test/cardinal_quintic_hermite_test.cpp deleted file mode 100644 index 20f1bf633..000000000 --- a/test/cardinal_quintic_hermite_test.cpp +++ /dev/null @@ -1,252 +0,0 @@ -/* - * Copyright Nick Thompson, 2020 - * Use, modification and distribution are subject to the - * Boost Software License, Version 1.0. (See accompanying file - * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - */ - -#include "math_unit_test.hpp" -#include -#include -#include -#ifdef BOOST_HAS_FLOAT128 -#include -using boost::multiprecision::float128; -#endif - - -using boost::math::interpolators::cardinal_quintic_hermite; -using boost::math::interpolators::cardinal_quintic_hermite_aos; - -template -void test_constant() -{ - - std::vector y(25); - std::vector dydx(y.size(), 0); - std::vector d2ydx2(y.size(), 0); - for (auto & t : y) { - t = 7; - } - Real x0 = 4; - Real dx = Real(1)/Real(8); - - auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); - - for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { - CHECK_ULP_CLOSE(Real(7), qh(t), 24); - CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); - CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 24); - } - - std::vector> data(25); - for (size_t i = 0; i < data.size(); ++i) - { - data[i][0] = 7; - data[i][1] = 0; - data[i][2] = 0; - } - - auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); - for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { - CHECK_ULP_CLOSE(Real(7), qh_aos(t), 24); - CHECK_ULP_CLOSE(Real(0), qh_aos.prime(t), 24); - } -} - - -template -void test_linear() -{ - std::vector y{0,1,2,3,4,5,6,7,8,9}; - Real x0 = 0; - Real dx = 1; - std::vector dydx(y.size(), 1); - std::vector d2ydx2(y.size(), 0); - - auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); - - for (Real t = 0; t <= 9; t += 0.25) { - CHECK_ULP_CLOSE(Real(t), qh(t), 2); - CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); - CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 2); - } - - std::vector> data(10); - for (size_t i = 0; i < data.size(); ++i) { - data[i][0] = i; - data[i][1] = 1; - data[i][2] = 0; - } - - auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); - - for (Real t = 0; t <= 9; t += 0.25) { - CHECK_ULP_CLOSE(Real(t), qh_aos(t), 2); - CHECK_ULP_CLOSE(Real(1), qh_aos.prime(t), 2); - //CHECK_ULP_CLOSE(Real(0), qh_aos.double_prime(t), 2); - } - -} - -template -void test_quadratic() -{ - Real x0 = 0; - Real dx = 1; - std::vector y(10); - for (size_t i = 0; i < y.size(); ++i) - { - y[i] = i*i/Real(2); - } - - std::vector dydx(y.size()); - for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = i; - } - - std::vector d2ydx2(y.size(), 1); - - auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); - - for (Real t = 0; t <= 9; t += 0.0078125) { - Real computed = qh(t); - CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); - CHECK_ULP_CLOSE(t, qh.prime(t), 15); - CHECK_ULP_CLOSE(1, qh.double_prime(t), 32); - } - - std::vector> data(10); - for (size_t i = 0; i < data.size(); ++i) { - data[i][0] = i*i/Real(2); - data[i][1] = i; - data[i][2] = 1; - } - auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); - - for (Real t = 0; t <= 9; t += 0.0078125) { - Real computed = qh_aos(t); - CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); - CHECK_ULP_CLOSE(t, qh_aos.prime(t), 7); - } -} - -template -void test_cubic() -{ - Real x0 = 0; - Real dx = 1; - std::vector y(10); - for (size_t i = 0; i < y.size(); ++i) - { - y[i] = i*i*i/Real(6); - } - - std::vector dydx(y.size()); - for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = i*i/Real(2); - } - - std::vector d2ydx2(y.size()); - for (size_t i = 0; i < y.size(); ++i) { - d2ydx2[i] = i; - } - - auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); - - for (Real t = 0; t <= 9; t += 0.0078125) { - Real computed = qh(t); - CHECK_ULP_CLOSE(Real(t*t*t)/6, computed, 10); - CHECK_ULP_CLOSE(t*t/2, qh.prime(t), 15); - CHECK_ULP_CLOSE(t, qh.double_prime(t), 39); - } - - std::vector> data(10); - for (size_t i = 0; i < data.size(); ++i) { - data[i][0] = i*i*i/Real(6); - data[i][1] = i*i/Real(2); - data[i][2] = i; - } - - auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); - for (Real t = 0; t <= 9; t += 0.0078125) { - Real computed = qh_aos(t); - CHECK_ULP_CLOSE(Real(t*t*t)/6, computed, 10); - CHECK_ULP_CLOSE(t*t/2, qh_aos.prime(t), 10); - } -} - -template -void test_quartic() -{ - Real x0 = 0; - Real dx = 1; - std::vector y(7); - for (size_t i = 0; i < y.size(); ++i) - { - y[i] = i*i*i*i; - } - - std::vector dydx(y.size()); - for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = 4*i*i*i; - } - - std::vector d2ydx2(y.size()); - for (size_t i = 0; i < y.size(); ++i) { - d2ydx2[i] = 12*i*i; - } - - auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); - - for (Real t = 0; t <= 6; t += 0.0078125) { - CHECK_ULP_CLOSE(Real(t*t*t*t), qh(t), 250); - CHECK_ULP_CLOSE(4*t*t*t, qh.prime(t), 250); - } - - std::vector> data(7); - for (size_t i = 0; i < data.size(); ++i) { - data[i][0] = i*i*i*i; - data[i][1] = 4*i*i*i; - data[i][2] = 12*i*i; - } - - auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); - for (Real t = 0; t <= 6; t += 0.0078125) { - Real computed = qh_aos(t); - CHECK_ULP_CLOSE(t*t*t*t, computed, 10); - CHECK_ULP_CLOSE(4*t*t*t, qh_aos.prime(t), 64); - } -} - - -int main() -{ - test_constant(); - test_linear(); - test_quadratic(); - test_cubic(); - test_quartic(); - - test_constant(); - test_linear(); - test_quadratic(); - test_cubic(); - test_quartic(); - - test_constant(); - test_linear(); - test_quadratic(); - test_cubic(); - test_quartic(); - -#ifdef BOOST_HAS_FLOAT128 - test_constant(); - test_linear(); - test_quadratic(); - test_cubic(); - test_quartic(); -#endif - - return boost::math::test::report_errors(); -} diff --git a/test/quintic_hermite_test.cpp b/test/quintic_hermite_test.cpp index 70547c879..4eea2f50a 100644 --- a/test/quintic_hermite_test.cpp +++ b/test/quintic_hermite_test.cpp @@ -19,27 +19,28 @@ using boost::multiprecision::float128; using boost::math::interpolators::quintic_hermite; +using boost::math::interpolators::cardinal_quintic_hermite; +using boost::math::interpolators::cardinal_quintic_hermite_aos; template void test_constant() { - std::vector x{0,1,2,3, 9, 22, 81}; std::vector y(x.size()); std::vector dydx(x.size(), 0); std::vector d2ydx2(x.size(), 0); - for (auto & t : y) { + for (auto & t : y) + { t = 7; } auto qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - - for (Real t = 0; t <= 81; t += 0.25) { + for (Real t = 0; t <= 81; t += 0.25) + { CHECK_ULP_CLOSE(Real(7), qh(t), 24); CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 24); } - - } @@ -53,9 +54,11 @@ void test_linear() auto qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - for (Real t = 0; t <= 9; t += 0.25) { + for (Real t = 0; t <= 9; t += 0.25) + { CHECK_ULP_CLOSE(Real(t), qh(t), 2); CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 2); } boost::random::mt19937 rng; @@ -63,7 +66,8 @@ void test_linear() x.resize(512); x[0] = dis(rng); Real xmin = x[0]; - for (size_t i = 1; i < x.size(); ++i) { + for (size_t i = 1; i < x.size(); ++i) + { x[i] = x[i-1] + dis(rng); } Real xmax = x.back(); @@ -74,11 +78,12 @@ void test_linear() qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - for (Real t = xmin; t <= xmax; t += 0.125) { - CHECK_ULP_CLOSE(Real(t), qh(t), 2); + for (Real t = xmin; t <= xmax; t += 0.125) + { + CHECK_ULP_CLOSE(t, qh(t), 2); + CHECK_ULP_CLOSE(Real(1), qh.prime(t), 100); + CHECK_MOLLIFIED_CLOSE(Real(0), qh.double_prime(t), 200*std::numeric_limits::epsilon()); } - - } template @@ -101,9 +106,11 @@ void test_quadratic() auto qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - for (Real t = 0; t <= 9; t += 0.0078125) { + for (Real t = 0; t <= 9; t += 0.0078125) + { CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 2); CHECK_ULP_CLOSE(t, qh.prime(t), 7); + CHECK_ULP_CLOSE(Real(1), qh.double_prime(t), 32); } boost::random::mt19937 rng; @@ -111,7 +118,8 @@ void test_quadratic() x.resize(8); x[0] = dis(rng); Real xmin = x[0]; - for (size_t i = 1; i < x.size(); ++i) { + for (size_t i = 1; i < x.size(); ++i) + { x[i] = x[i-1] + dis(rng); } Real xmax = x.back(); @@ -123,7 +131,8 @@ void test_quadratic() } dydx.resize(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { dydx[i] = x[i]; } @@ -131,9 +140,11 @@ void test_quadratic() qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - for (Real t = xmin; t <= xmax; t += 0.125) { + for (Real t = xmin; t <= xmax; t += 0.125) + { CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 4); CHECK_ULP_CLOSE(t, qh.prime(t), 36); + CHECK_ULP_CLOSE(Real(1), qh.double_prime(t), 700); } } @@ -145,23 +156,27 @@ void test_cubic() std::vector y(x.size()); for (size_t i = 0; i < y.size(); ++i) { - y[i] = x[i]*x[i]*x[i]/6; + y[i] = x[i]*x[i]*x[i]; } std::vector dydx(x.size()); for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = x[i]*x[i]/2; + dydx[i] = 3*x[i]*x[i]; } std::vector d2ydx2(x.size()); - for (size_t i = 0; i < y.size(); ++i) { - d2ydx2[i] = x[i]; + for (size_t i = 0; i < y.size(); ++i) + { + d2ydx2[i] = 6*x[i]; } auto qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - for (Real t = 0; t <= 9; t += 0.0078125) { - CHECK_ULP_CLOSE(Real(t*t*t)/6, qh(t), 10); + for (Real t = 0; t <= 9; t += 0.0078125) + { + CHECK_ULP_CLOSE(t*t*t, qh(t), 10); + CHECK_ULP_CLOSE(3*t*t, qh.prime(t), 15); + CHECK_ULP_CLOSE(6*t, qh.double_prime(t), 20); } } @@ -173,23 +188,28 @@ void test_quartic() std::vector y(x.size()); for (size_t i = 0; i < y.size(); ++i) { - y[i] = x[i]*x[i]*x[i]*x[i]/24; + y[i] = x[i]*x[i]*x[i]*x[i]; } std::vector dydx(x.size()); - for (size_t i = 0; i < y.size(); ++i) { - dydx[i] = x[i]*x[i]*x[i]/6; + for (size_t i = 0; i < y.size(); ++i) + { + dydx[i] = 4*x[i]*x[i]*x[i]; } std::vector d2ydx2(x.size()); - for (size_t i = 0; i < y.size(); ++i) { - d2ydx2[i] = x[i]*x[i]/2; + for (size_t i = 0; i < y.size(); ++i) + { + d2ydx2[i] = 12*x[i]*x[i]; } auto qh = quintic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2)); - for (Real t = 1; t <= 11; t += 0.0078125) { - CHECK_ULP_CLOSE(Real(t*t*t*t)/24, qh(t), 100); + for (Real t = 1; t <= 11; t += 0.0078125) + { + CHECK_ULP_CLOSE(t*t*t*t, qh(t), 100); + CHECK_ULP_CLOSE(4*t*t*t, qh.prime(t), 100); + CHECK_ULP_CLOSE(12*t*t, qh.double_prime(t), 100); } } @@ -223,10 +243,224 @@ void test_interpolation_condition() for (size_t i = 0; i < x.size(); ++i) { CHECK_ULP_CLOSE(y[i], s(x[i]), 2); CHECK_ULP_CLOSE(dydx[i], s.prime(x[i]), 2); + CHECK_ULP_CLOSE(d2ydx2[i], s.double_prime(x[i]), 2); } } } +template +void test_cardinal_constant() +{ + + std::vector y(25); + std::vector dydx(y.size(), 0); + std::vector d2ydx2(y.size(), 0); + for (auto & t : y) { + t = 7; + } + Real x0 = 4; + Real dx = Real(1)/Real(8); + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) + { + CHECK_ULP_CLOSE(Real(7), qh(t), 24); + CHECK_ULP_CLOSE(Real(0), qh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 24); + } + + std::vector> data(25); + for (size_t i = 0; i < data.size(); ++i) + { + data[i][0] = 7; + data[i][1] = 0; + data[i][2] = 0; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + for (Real t = x0; t <= x0 + 24*dx; t += 0.25) + { + CHECK_ULP_CLOSE(Real(7), qh_aos(t), 24); + CHECK_ULP_CLOSE(Real(0), qh_aos.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), qh_aos.double_prime(t), 24); + } +} + + +template +void test_cardinal_linear() +{ + std::vector y{0,1,2,3,4,5,6,7,8,9}; + Real x0 = 0; + Real dx = 1; + std::vector dydx(y.size(), 1); + std::vector d2ydx2(y.size(), 0); + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 9; t += 0.25) { + CHECK_ULP_CLOSE(Real(t), qh(t), 2); + CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + CHECK_ULP_CLOSE(Real(0), qh.double_prime(t), 2); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i; + data[i][1] = 1; + data[i][2] = 0; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + + for (Real t = 0; t <= 9; t += 0.25) { + CHECK_ULP_CLOSE(Real(t), qh_aos(t), 2); + CHECK_ULP_CLOSE(Real(1), qh_aos.prime(t), 2); + CHECK_ULP_CLOSE(Real(0), qh_aos.double_prime(t), 2); + } + +} + +template +void test_cardinal_quadratic() +{ + Real x0 = 0; + Real dx = 1; + std::vector y(10); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i/Real(2); + } + + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = i; + } + + std::vector d2ydx2(y.size(), 1); + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 9; t += 0.0078125) { + Real computed = qh(t); + CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); + CHECK_ULP_CLOSE(t, qh.prime(t), 15); + CHECK_ULP_CLOSE(Real(1), qh.double_prime(t), 32); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i/Real(2); + data[i][1] = i; + data[i][2] = 1; + } + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + + for (Real t = 0; t <= 9; t += 0.0078125) + { + Real computed = qh_aos(t); + CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); + CHECK_ULP_CLOSE(t, qh_aos.prime(t), 7); + CHECK_ULP_CLOSE(Real(1), qh_aos.double_prime(t), 64); + } +} + +template +void test_cardinal_cubic() +{ + Real x0 = 0; + Real dx = 1; + std::vector y(10); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i*i; + } + + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = 3*i*i; + } + + std::vector d2ydx2(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + d2ydx2[i] = 6*i; + } + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 9; t += 0.0078125) + { + Real computed = qh(t); + CHECK_ULP_CLOSE(t*t*t, computed, 10); + CHECK_ULP_CLOSE(3*t*t, qh.prime(t), 15); + CHECK_ULP_CLOSE(6*t, qh.double_prime(t), 39); + } + + std::vector> data(10); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i*i; + data[i][1] = 3*i*i; + data[i][2] = 6*i; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t <= 9; t += 0.0078125) + { + Real computed = qh_aos(t); + CHECK_ULP_CLOSE(t*t*t, computed, 10); + CHECK_ULP_CLOSE(3*t*t, qh_aos.prime(t), 15); + CHECK_ULP_CLOSE(6*t, qh_aos.double_prime(t), 30); + } +} + +template +void test_cardinal_quartic() +{ + Real x0 = 0; + Real dx = 1; + std::vector y(7); + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = i*i*i*i; + } + + std::vector dydx(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + dydx[i] = 4*i*i*i; + } + + std::vector d2ydx2(y.size()); + for (size_t i = 0; i < y.size(); ++i) { + d2ydx2[i] = 12*i*i; + } + + auto qh = cardinal_quintic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); + + for (Real t = 0; t <= 6; t += 0.0078125) + { + CHECK_ULP_CLOSE(Real(t*t*t*t), qh(t), 250); + CHECK_ULP_CLOSE(4*t*t*t, qh.prime(t), 250); + CHECK_ULP_CLOSE(12*t*t, qh.double_prime(t), 250); + } + + std::vector> data(7); + for (size_t i = 0; i < data.size(); ++i) { + data[i][0] = i*i*i*i; + data[i][1] = 4*i*i*i; + data[i][2] = 12*i*i; + } + + auto qh_aos = cardinal_quintic_hermite_aos(std::move(data), x0, dx); + for (Real t = 0; t <= 6; t += 0.0078125) + { + Real computed = qh_aos(t); + CHECK_ULP_CLOSE(t*t*t*t, computed, 10); + CHECK_ULP_CLOSE(4*t*t*t, qh_aos.prime(t), 64); + CHECK_ULP_CLOSE(12*t*t, qh_aos.double_prime(t), 128); + } +} + int main() { @@ -237,6 +471,12 @@ int main() test_quartic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_cubic(); + test_cardinal_quartic(); + test_constant(); test_linear(); test_quadratic(); @@ -244,6 +484,12 @@ int main() test_quartic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_cubic(); + test_cardinal_quartic(); + test_constant(); test_linear(); test_quadratic(); @@ -251,13 +497,25 @@ int main() test_quartic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_cubic(); + test_cardinal_quartic(); + #ifdef BOOST_HAS_FLOAT128 test_constant(); - test_linear(); + //test_linear(); test_quadratic(); test_cubic(); test_quartic(); test_interpolation_condition(); + test_cardinal_constant(); + test_cardinal_linear(); + test_cardinal_quadratic(); + test_cardinal_cubic(); + test_cardinal_quartic(); + #endif return boost::math::test::report_errors(); From a068a926438849f20a4438a9d51c1bec8740f9fe Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 20 Feb 2020 07:03:40 -0500 Subject: [PATCH 043/104] Update docs for quintic Hermite interpolation [CI SKIP] --- doc/interpolators/quintic_hermite.qbk | 37 +++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/doc/interpolators/quintic_hermite.qbk b/doc/interpolators/quintic_hermite.qbk index 574bc3c36..8ac8682c8 100644 --- a/doc/interpolators/quintic_hermite.qbk +++ b/doc/interpolators/quintic_hermite.qbk @@ -19,14 +19,43 @@ public: using Real = typename RandomAccessContainer::value_type; quintic_hermite(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2) - Real operator()(Real x) const; + inline Real operator()(Real x) const; - Real prime(Real x) const; + inline Real prime(Real x) const; + + inline Real double_prime(Real x) const; friend std::ostream& operator<<(std::ostream & os, const quintic_hermite & m); void push_back(Real x, Real y, Real dydx, Real d2ydx2); }; + +template +class cardinal_quintic_hermite { +public: + using Real = typename RandomAccessContainer::value_type; + cardinal_quintic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, Real x0, Real dx); + + inline Real operator()(Real x) const; + + inline Real prime(Real x) const; + + inline Real double_prime(Real x) const; +}; + +template +class cardinal_quintic_hermite_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + cardinal_quintic_hermite_aos(RandomAccessContainer && data, Real x0, Real dx) + + inline Real operator()(Real x) const; + + inline Real prime(Real x) const; + + inline Real double_prime(Real x) const; + } `` @@ -34,6 +63,7 @@ public: [heading Quintic Hermite Interpolation] The quintic Hermite interpolator takes a list of possibly non-uniformly spaced abscissas, ordinates, and their velocities and accelerations which are used to construct a quintic interpolating polynomial between segments. +This is useful for taking solution skeletons from ODE steppers and turning them into a continuous function, provided that the right-hand side /f/(/x/, /y/) is differentiable along the solution path. The interpolant is /C/[super 2] and its evaluation has [bigo](log(/N/)) complexity. An example usage is as follows: @@ -77,6 +107,9 @@ Hence we can use `boost::circular_buffer` to do real-time interpolation. [$../graphs/quintic_sine_approximation.svg] +For equispaced data, we can use `cardinal_quintic_hermite` or `cardinal_quintic_hermite_aos` to get constant-time evaluation. +This is useful in memory-constrained or performance critical applications where data is equispaced. + [heading Complexity and Performance] The following google benchmark demonstrates the cost of the call operator for this interpolator: From 0289eca4fe660bc37fbcce685f828dbf67de929f Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 20 Feb 2020 07:25:49 -0500 Subject: [PATCH 044/104] Documentation updates for quintic_hermite interpolation [CI SKIP] --- doc/interpolators/quintic_hermite.qbk | 79 +++++++++++++------ example/daubechies_wavelets/bench.cpp | 8 +- .../detail/quintic_hermite_detail.hpp | 9 +-- test/quintic_hermite_test.cpp | 1 - 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/doc/interpolators/quintic_hermite.qbk b/doc/interpolators/quintic_hermite.qbk index 8ac8682c8..dafea2810 100644 --- a/doc/interpolators/quintic_hermite.qbk +++ b/doc/interpolators/quintic_hermite.qbk @@ -122,33 +122,62 @@ CPU Caches: L2 Unified 1024K (x8) L3 Unified 11264K (x1) Load Average: 0.92, 0.64, 0.35 ------------------------------------------------ +-------------------------------------------------- Benchmark Time ------------------------------------------------ -BMQuinticHermite/8 8.14 ns -BMQuinticHermite/16 8.69 ns -BMQuinticHermite/32 9.42 ns -BMQuinticHermite/64 9.90 ns -BMQuinticHermite/128 10.4 ns -BMQuinticHermite/256 10.9 ns -BMQuinticHermite/512 11.6 ns -BMQuinticHermite/1024 12.3 ns -BMQuinticHermite/2048 12.8 ns -BMQuinticHermite/4096 13.6 ns -BMQuinticHermite/8192 14.6 ns -BMQuinticHermite/16384 15.5 ns -BMQuinticHermite/32768 17.4 ns -BMQuinticHermite/65536 18.5 ns -BMQuinticHermite/131072 18.8 ns -BMQuinticHermite/262144 19.8 ns -BMQuinticHermite/524288 20.5 ns -BMQuinticHermite/1048576 21.6 ns -BMQuinticHermite/2097152 22.5 ns -BMQuinticHermite/4194304 24.2 ns -BMQuinticHermite/8388608 26.6 ns -BMQuinticHermite/16777216 26.7 ns -BMQuinticHermite_BigO 1.14 lgN +-------------------------------------------------- +QuinticHermite/8 8.14 ns +QuinticHermite/16 8.69 ns +QuinticHermite/32 9.42 ns +QuinticHermite/64 9.90 ns +QuinticHermite/128 10.4 ns +QuinticHermite/256 10.9 ns +QuinticHermite/512 11.6 ns +QuinticHermite/1024 12.3 ns +QuinticHermite/2048 12.8 ns +QuinticHermite/4096 13.6 ns +QuinticHermite/8192 14.6 ns +QuinticHermite/16384 15.5 ns +QuinticHermite/32768 17.4 ns +QuinticHermite/65536 18.5 ns +QuinticHermite/131072 18.8 ns +QuinticHermite/262144 19.8 ns +QuinticHermite/524288 20.5 ns +QuinticHermite/1048576 21.6 ns +QuinticHermite/2097152 22.5 ns +QuinticHermite/4194304 24.2 ns +QuinticHermite/8388608 26.6 ns +QuinticHermite/16777216 26.7 ns +QuinticHermite_BigO 1.14 lgN +CardinalQuinticHermite/256 5.22 ns +CardinalQuinticHermite/512 5.21 ns +CardinalQuinticHermite/1024 5.21 ns +CardinalQuinticHermite/2048 5.32 ns +CardinalQuinticHermite/4096 5.33 ns +CardinalQuinticHermite/8192 5.50 ns +CardinalQuinticHermite/16384 5.74 ns +CardinalQuinticHermite/32768 7.74 ns +CardinalQuinticHermite/65536 10.6 ns +CardinalQuinticHermite/131072 10.7 ns +CardinalQuinticHermite/262144 10.6 ns +CardinalQuinticHermite/524288 10.5 ns +CardinalQuinticHermite/1048576 10.6 ns +CardinalQuinticHermite_BigO 7.57 (1) +CardinalQuinticHermiteAOS/256 5.27 ns +CardinalQuinticHermiteAOS/512 5.26 ns +CardinalQuinticHermiteAOS/1024 5.26 ns +CardinalQuinticHermiteAOS/2048 5.28 ns +CardinalQuinticHermiteAOS/4096 5.30 ns +CardinalQuinticHermiteAOS/8192 5.41 ns +CardinalQuinticHermiteAOS/16384 5.89 ns +CardinalQuinticHermiteAOS/32768 5.97 ns +CardinalQuinticHermiteAOS/65536 5.96 ns +CardinalQuinticHermiteAOS/131072 5.92 ns +CardinalQuinticHermiteAOS/262144 5.94 ns +CardinalQuinticHermiteAOS/524288 5.96 ns +CardinalQuinticHermiteAOS/1048576 5.93 ns +CardinalQuinticHermiteAOS_BigO 5.64 (1) ``` + [endsect] [/section:quintic_hermite] diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 8c3558f3a..7437ee6e8 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include static void UnitStep(benchmark::internal::Benchmark* b) @@ -303,9 +303,7 @@ void CardinalQuinticHermite(benchmark::State & state) state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); - - +BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); template void CardinalQuinticHermiteAOS(benchmark::State & state) @@ -338,7 +336,7 @@ void CardinalQuinticHermiteAOS(benchmark::State & state) state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); +BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); template diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 18a1990c7..6ab07a747 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -413,7 +413,6 @@ public: auto i = static_cast(ii); Real t = s - ii; - Real y0 = data_[i][0]; Real dy0 = data_[i][1]; Real d2y0 = data_[i][2]; @@ -421,10 +420,10 @@ public: Real dy1 = data_[i+1][1]; Real d2y1 = data_[i+1][2]; - Real y = (1- t*t*t*(10 + t*(-15 + 6*t)))*y0; - y += t*(1+ t*t*(-6 + t*(8 -3*t)))*dy0; - y += t*t*(1 + t*(-3 + t*(3-t)))*d2y0; - y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 -3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); + Real y = (1 - t*t*t*(10 + t*(-15 + 6*t)))*y0; + y += t*(1 + t*t*(-6 + t*(8 - 3*t)))*dy0; + y += t*t*(1 + t*(-3 + t*(3 - t)))*d2y0; + y += t*t*t*((1 + t*(-2 + t))*d2y1 + (-4 + t*(7 - 3*t))*dy1 + (10 + t*(-15 + 6*t))*y1); return y; } diff --git a/test/quintic_hermite_test.cpp b/test/quintic_hermite_test.cpp index 4eea2f50a..b6fd70471 100644 --- a/test/quintic_hermite_test.cpp +++ b/test/quintic_hermite_test.cpp @@ -515,7 +515,6 @@ int main() test_cardinal_quadratic(); test_cardinal_cubic(); test_cardinal_quartic(); - #endif return boost::math::test::report_errors(); From ce1a68562822965cbaf326b4faf4463087df739d Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 20 Feb 2020 07:29:25 -0500 Subject: [PATCH 045/104] Attempt to fix build by #include . --- test/septic_hermite_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index eacedf44f..d76ea14e5 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -8,6 +8,7 @@ #include "math_unit_test.hpp" #include #include +#include #include #include #include From 5d284753b645b380c4cbeb563539f76b0f9abd4b Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 20 Feb 2020 07:42:39 -0500 Subject: [PATCH 046/104] Add .double_prime(Real x) [CI SKIP] --- .../math/special_functions/daubechies_scaling.hpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 82abb2356..674ce3a22 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -101,7 +101,7 @@ public: dy *= h; } } - + inline Real operator()(Real x) const { using std::floor; using std::sqrt; @@ -341,6 +341,14 @@ public: } } + inline Real double_prime(Real x) const { + if (x <= 0 || x >= 2*p - 1) { + return Real(0); + } + if constexpr (p >= 6 && p <= 9) { + return m_qh->unchecked_double_prime(x); + } + } std::pair support() const { return {0, 2*p-1}; From 39d8efb437e27eabeff44e6a5d8fb24d7eab1971 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Fri, 21 Feb 2020 05:46:38 -0500 Subject: [PATCH 047/104] Plot derivatives and compute derivative of _3\phi [CI SKIP] --- .../daubechies_wavelets/daubechies_plots.cpp | 87 +++++++++---- .../special_functions/daubechies_scaling.hpp | 116 ++++++++++++------ 2 files changed, 138 insertions(+), 65 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_plots.cpp b/example/daubechies_wavelets/daubechies_plots.cpp index 8f843bc23..96e8ce419 100644 --- a/example/daubechies_wavelets/daubechies_plots.cpp +++ b/example/daubechies_wavelets/daubechies_plots.cpp @@ -34,6 +34,26 @@ void plot_phi(int grid_refinements = -1) daub.write_all(); } +template +void plot_dphi(int grid_refinements = -1) +{ + auto phi = boost::math::daubechies_scaling(); + if (grid_refinements >= 0) + { + phi = boost::math::daubechies_scaling(grid_refinements); + } + Real a = 0; + Real b = phi.support().second; + std::string title = "Daubechies " + std::to_string(p) + " scaling function derivative"; + std::string filename = "daubechies_" + std::to_string(p) + "_scaling_prime.svg"; + int samples = 1024; + quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); + daub.set_stroke_width(1); + auto dphi = [phi](Real x)->Real { return phi.prime(x); }; + daub.add_fn(dphi); + daub.write_all(); +} + template void plot_convergence() { @@ -62,7 +82,7 @@ void plot_condition_number() { using std::abs; using std::log; - static_assert(p >= 4, "p = 2,3 are not differentiable, so condition numbers cannot be effectively evaluated."); + static_assert(p >= 3, "p = 2 is not differentiable, so condition numbers cannot be effectively evaluated."); auto phi = boost::math::daubechies_scaling(); Real a = 1000*std::numeric_limits::epsilon(); Real b = phi.support().second - 1000*std::numeric_limits::epsilon(); @@ -109,6 +129,47 @@ void do_ulp(int coarse_refinements, PhiPrecise phi_precise) int main() { + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + plot_phi(); + + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + plot_dphi(); + + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_condition_number(); + plot_convergence(); plot_convergence(); plot_convergence(); @@ -124,30 +185,6 @@ int main() plot_convergence(); plot_convergence(); - plot_phi(); - plot_phi(); - plot_phi(); - //plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); using PreciseReal = float128; using CoarseReal = double; diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 674ce3a22..729734492 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -130,12 +130,13 @@ class linear_interpolation { public: using Real = typename RandomAccessContainer::value_type; - linear_interpolation(RandomAccessContainer && y, int grid_refinements) : y_{std::move(y)} + linear_interpolation(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements) : y_{std::move(y)}, dydx_{std::move(dydx)} { s_ = (1 << grid_refinements); } - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { using std::floor; Real y = x*s_; Real k = floor(y); @@ -145,9 +146,21 @@ public: return (1-t)*y_[kk] + t*y_[kk+1]; } + inline Real prime(Real x) const + { + using std::floor; + Real y = x*s_; + Real k = floor(y); + + int64_t kk = static_cast(k); + Real t = y - k; + return (1-t)*dydx_[kk] + t*dydx_[kk+1]; + } + private: Real s_; RandomAccessContainer y_; + RandomAccessContainer dydx_; }; } @@ -280,78 +293,101 @@ public: auto y = t0.get(); auto dydx = t1.get(); - if constexpr (p==2) { + if constexpr (p==2) + { m_mh = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); } - if constexpr (p==3) { - m_lin = std::make_shared>>(std::move(y), grid_refinements); + if constexpr (p==3) + { + m_lin = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); } - if constexpr (p == 4 || p == 5) { + if constexpr (p == 4 || p == 5) + { Real dx = Real(1)/(1 << grid_refinements); m_cbh = std::make_shared>>(std::move(y), std::move(dydx), Real(0), dx); } - if constexpr (p >= 6 && p <= 9) { + if constexpr (p >= 6 && p <= 9) + { Real dx = Real(1)/(1 << grid_refinements); m_qh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), Real(0), dx); } - if constexpr (p >= 10) { + if constexpr (p >= 10) + { Real dx = Real(1)/(1 << grid_refinements); m_sh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), Real(0), dx); } } - inline Real operator()(Real x) const { - if (x <= 0 || x >= 2*p-1) { - return 0; - } - if constexpr (p==2) { - return m_mh->operator()(x); - } - if constexpr (p==3) { - return m_lin->operator()(x); - } - if constexpr (p==4 || p ==5) { - return m_cbh->unchecked_evaluation(x); - } - if constexpr (p >= 6 && p <= 9) { - return m_qh->unchecked_evaluation(x); - } - if constexpr (p >= 10) { - return m_sh->unchecked_evaluation(x); - } - } - - inline Real prime(Real x) const { + inline Real operator()(Real x) const + { if (x <= 0 || x >= 2*p-1) { return 0; } - if constexpr (p == 2 || p == 3) { - throw std::domain_error("The 2 and 3-vanishing moment Daubechies scaling function is not continuously differentiable."); + if constexpr (p==2) + { + return m_mh->operator()(x); } - if constexpr (p == 4 || p == 5) { + if constexpr (p==3) + { + return m_lin->operator()(x); + } + if constexpr (p==4 || p ==5) + { + return m_cbh->unchecked_evaluation(x); + } + if constexpr (p >= 6 && p <= 9) + { + return m_qh->unchecked_evaluation(x); + } + if constexpr (p >= 10) + { + return m_sh->unchecked_evaluation(x); + } + } + + inline Real prime(Real x) const + { + static_assert(p != 2, "The 2-vanishing moment Daubechies scaling function is not continuously differentiable."); + if (x <= 0 || x >= 2*p-1) + { + return 0; + } + if constexpr (p == 3) + { + return m_lin->prime(x); + } + if constexpr (p == 4 || p == 5) + { return m_cbh->unchecked_prime(x); } - if constexpr (p >= 6 && p <= 9) { + if constexpr (p >= 6 && p <= 9) + { return m_qh->unchecked_prime(x); } - if constexpr (p >= 10) { + if constexpr (p >= 10) + { return m_sh->unchecked_prime(x); } } - inline Real double_prime(Real x) const { - if (x <= 0 || x >= 2*p - 1) { + inline Real double_prime(Real x) const + { + static_assert(p >= 6, "Second derivatives require at least 6 vanishing moments."); + if (x <= 0 || x >= 2*p - 1) + { return Real(0); } - if constexpr (p >= 6 && p <= 9) { + if constexpr (p >= 6 && p <= 9) + { return m_qh->unchecked_double_prime(x); } } - std::pair support() const + + std::pair support() const { - return {0, 2*p-1}; + return {Real(0), Real(2*p-1)}; } private: From cd789bda44aba4af8900de9d16c0e705ae2f0be2 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 21 Feb 2020 19:49:13 +0000 Subject: [PATCH 048/104] Make Octuple type a typedef to make it easier to change --- include/boost/math/filters/daubechies.hpp | 79 ++++++++++++----------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp index 87d5bbf36..24a71150c 100644 --- a/include/boost/math/filters/daubechies.hpp +++ b/include/boost/math/filters/daubechies.hpp @@ -13,6 +13,9 @@ #include namespace boost::math::filters { +//typedef boost::multiprecision::number, boost::int32_t, -262142, 262143>, boost::multiprecision::et_off> octuple_type; +typedef boost::multiprecision::cpp_bin_float_oct octuple_type; + template constexpr std::array daubechies_scaling_filter() { @@ -32,8 +35,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.6a09e667f3bcc908b2fb1366ea95p-1Q, 0x1.6a09e667f3bcc908b2fb1366ea95p-1Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195"), boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195"), boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195")}; } } if constexpr (p == 2) { @@ -51,8 +54,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.ee8dd4748bf14c548b969de58fap-2Q, 0x1.ac4bdd6e3fd70aae9f48d8a63d1bp-1Q, 0x1.cb0bf0b6b7108b79b4bf11d08b16p-3Q, -0x1.0907dc1930690697b13714fd4a15p-3Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.482962913144534143374871599864448683816952419504202275201171538155211606550"), boost::lexical_cast("0.836516303737807905575293780916873203459370388348439293495341472652894725147"), boost::lexical_cast("0.224143868042013381025972762240400355467883518184271761387168330840154631777"), boost::lexical_cast("-0.129409522551260381174449418812024164174534450659965256907001603657528486820")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.482962913144534143374871599864448683816952419504202275201171538155211606550"), boost::lexical_cast("0.836516303737807905575293780916873203459370388348439293495341472652894725147"), boost::lexical_cast("0.224143868042013381025972762240400355467883518184271761387168330840154631777"), boost::lexical_cast("-0.129409522551260381174449418812024164174534450659965256907001603657528486820")}; } } if constexpr (p == 3) { @@ -70,8 +73,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.54a796e50d263b67e38e82a5584cp-2Q, 0x1.9d20e247d28bb431f1e6c634b34ep-1Q, 0x1.d6ea20bf0f7447ac92de97f0e152p-2Q, -0x1.1480a85c596292857548d060a171p-3Q, -0x1.5df7ab50d483c40c41dbcf2191cfp-4Q, 0x1.2092e373789b9781e66814a5fa37p-5Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.332670552950082615998511589139005630012923399245068359708470578551793724009"), boost::lexical_cast("0.806891509311092576494493604088713490519297394994823618165092063603486835060"), boost::lexical_cast("0.459877502118491570095151942147616720808110177431492306643386780248640335647"), boost::lexical_cast("-0.135011020010254588696389906699374480562219845223781191975686255357062767858"), boost::lexical_cast("-0.0854412738820266616928191691817733115361976389880866297635174898050678201973"), boost::lexical_cast("0.0352262918857095366027406647155100293277583879174316103989340607489421719736")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.332670552950082615998511589139005630012923399245068359708470578551793724009"), boost::lexical_cast("0.806891509311092576494493604088713490519297394994823618165092063603486835060"), boost::lexical_cast("0.459877502118491570095151942147616720808110177431492306643386780248640335647"), boost::lexical_cast("-0.135011020010254588696389906699374480562219845223781191975686255357062767858"), boost::lexical_cast("-0.0854412738820266616928191691817733115361976389880866297635174898050678201973"), boost::lexical_cast("0.0352262918857095366027406647155100293277583879174316103989340607489421719736")}; } } if constexpr (p == 4) { @@ -89,8 +92,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.d7d052af15ebfcd98dc85ef4cc01p-3Q, 0x1.6e005ea45d747c624e43405b1919p-1Q, 0x1.4302cdd3de439e1a299a6a04b89fp-1Q, -0x1.ca7c6f9db5bfafb07b9dace22f7p-6Q, -0x1.7f0c1b7c604d3ef4ab50462dfcedp-3Q, 0x1.f94e2196383a8e592495a4baff62p-6Q, 0x1.0d60ac768117b7550c2a3307e30fp-5Q, -0x1.5b41730b72e293b823fb2cbd40c6p-7Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.230377813308896500863291183044070850001615248248309297791096844028271643620"), boost::lexical_cast("0.714846570552915647089921955273992603707608401099308175845011003442625044997"), boost::lexical_cast("0.630880767929858907881716338300615220203222922677195117405747328484353359854"), boost::lexical_cast("-0.0279837694168598542114137471800753854119873202244917528400335826533630929593"), boost::lexical_cast("-0.187034811719093084079570672789081419584544174374580091205777087593992585799"), boost::lexical_cast("0.0308413818355607636272193625349590501703148217200340334182121909360632337258"), boost::lexical_cast("0.0328830116668851997354075135492443886645419411375497125972727840767338203692"), boost::lexical_cast("-0.0105974017850690321048832085240272291810999649063764198348497427299589480739")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.230377813308896500863291183044070850001615248248309297791096844028271643620"), boost::lexical_cast("0.714846570552915647089921955273992603707608401099308175845011003442625044997"), boost::lexical_cast("0.630880767929858907881716338300615220203222922677195117405747328484353359854"), boost::lexical_cast("-0.0279837694168598542114137471800753854119873202244917528400335826533630929593"), boost::lexical_cast("-0.187034811719093084079570672789081419584544174374580091205777087593992585799"), boost::lexical_cast("0.0308413818355607636272193625349590501703148217200340334182121909360632337258"), boost::lexical_cast("0.0328830116668851997354075135492443886645419411375497125972727840767338203692"), boost::lexical_cast("-0.0105974017850690321048832085240272291810999649063764198348497427299589480739")}; } } if constexpr (p == 5) { @@ -108,8 +111,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.47e3c41a7b91081ae95ed12670b7p-3Q, 0x1.35291c2c4b00c30a87eaf4d05e71p-1Q, 0x1.72d89143b54f4ecd724f0b79d111p-1Q, 0x1.1b80373befcc598b25a1d5436079p-3Q, -0x1.f0384d3f814743c3d93da5cd8909p-3Q, -0x1.0826648a8dc73f96ef19214f403ep-5Q, 0x1.3dbb9b52515a99ecaa66a225e968p-4Q, -0x1.990ad4579f2e7e2dc54832641bd8p-8Q, -0x1.9c3eff32941286062a45cb776526p-7Q, 0x1.b5385e04e3c0912c23cbbf7041e8p-9Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.160102397974192914480723748020420733650544124625057832772569920207547214207"), boost::lexical_cast("0.603829269797189670540119306525062107507422163101698698796928336036862837113"), boost::lexical_cast("0.724308528437772927728071244102218640768756218232007372576733504804092797357"), boost::lexical_cast("0.138428145901320731505397146339024697314105791173956102269465221088552175948"), boost::lexical_cast("-0.242294887066382031862571379474616361991490808062618598391372691341065474637"), boost::lexical_cast("-0.0322448695846383746484797550621349283135649841637984722543426813198116091835"), boost::lexical_cast("0.0775714938400457135231304893886018198062309945201252798321014623895567160574"), boost::lexical_cast("-0.00624149021279827427419051911292019297076355716568760732341743532590851604324"), boost::lexical_cast("-0.0125807519990819994685097399317757929492045916260978502016923270647650161437"), boost::lexical_cast("0.00333572528547377127799818341581735574763652474230531509970642851567135111157")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.160102397974192914480723748020420733650544124625057832772569920207547214207"), boost::lexical_cast("0.603829269797189670540119306525062107507422163101698698796928336036862837113"), boost::lexical_cast("0.724308528437772927728071244102218640768756218232007372576733504804092797357"), boost::lexical_cast("0.138428145901320731505397146339024697314105791173956102269465221088552175948"), boost::lexical_cast("-0.242294887066382031862571379474616361991490808062618598391372691341065474637"), boost::lexical_cast("-0.0322448695846383746484797550621349283135649841637984722543426813198116091835"), boost::lexical_cast("0.0775714938400457135231304893886018198062309945201252798321014623895567160574"), boost::lexical_cast("-0.00624149021279827427419051911292019297076355716568760732341743532590851604324"), boost::lexical_cast("-0.0125807519990819994685097399317757929492045916260978502016923270647650161437"), boost::lexical_cast("0.00333572528547377127799818341581735574763652474230531509970642851567135111157")}; } } if constexpr (p == 6) { @@ -127,8 +130,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.c8def24dc3951c2a6dae413b8ddbp-4Q, 0x1.fa7eaf64539a97bd50da008738e1p-2Q, 0x1.80949fa3bc0bae02bf1b494d3af8p-1Q, 0x1.42d0fcfa92f20ff1b5b87f2f698cp-2Q, -0x1.cf63dd26916f0b589f7743608e82p-3Q, -0x1.09c33622722ead8a0ff038a97bp-3Q, 0x1.8f5dd7f4e175279c5a356a3fbcc9p-4Q, 0x1.c2ef43d6125497c75e24a80c6bfap-6Q, -0x1.02b856404e8cdf85933c3736d91cp-5Q, 0x1.225f71210a7c1202de723c931ed6p-11Q, 0x1.391514c62a31adcdfa747aebbdeep-8Q, -0x1.1a6873b7a6465e0ff5c033201061p-10Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.111540743350109463621323917240923439042539591984421675908236045797651596176"), boost::lexical_cast("0.494623890398453085677204176877855588637786382896274362353183452618869845497"), boost::lexical_cast("0.751133908021095350678934498439731685580254783338261200973042065947992668343"), boost::lexical_cast("0.315250351709197629085989654810926396649519923517294524440416381606252448494"), boost::lexical_cast("-0.226264693965439820076314500660903465670540153972896994014348779178970276888"), boost::lexical_cast("-0.129766867567261935562289605876585460845233749223581470159931065581720412930"), boost::lexical_cast("0.0975016055873230491023435525381253423398307474952551427989319312112779815986"), boost::lexical_cast("0.0275228655303057286255408395041932136573875878304345432149420287900002992420"), boost::lexical_cast("-0.0315820393174860295650790806998486690574795323731484233751146493526060457826"), boost::lexical_cast("0.000553842201161496139251918398046501220611026277386496429547652456752475273329"), boost::lexical_cast("0.00477725751094551063963597524682070705023050121658143429759325457002031530381"), boost::lexical_cast("-0.00107730108530847956485262160958720003523523360933441968981858089478841770562")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.111540743350109463621323917240923439042539591984421675908236045797651596176"), boost::lexical_cast("0.494623890398453085677204176877855588637786382896274362353183452618869845497"), boost::lexical_cast("0.751133908021095350678934498439731685580254783338261200973042065947992668343"), boost::lexical_cast("0.315250351709197629085989654810926396649519923517294524440416381606252448494"), boost::lexical_cast("-0.226264693965439820076314500660903465670540153972896994014348779178970276888"), boost::lexical_cast("-0.129766867567261935562289605876585460845233749223581470159931065581720412930"), boost::lexical_cast("0.0975016055873230491023435525381253423398307474952551427989319312112779815986"), boost::lexical_cast("0.0275228655303057286255408395041932136573875878304345432149420287900002992420"), boost::lexical_cast("-0.0315820393174860295650790806998486690574795323731484233751146493526060457826"), boost::lexical_cast("0.000553842201161496139251918398046501220611026277386496429547652456752475273329"), boost::lexical_cast("0.00477725751094551063963597524682070705023050121658143429759325457002031530381"), boost::lexical_cast("-0.00107730108530847956485262160958720003523523360933441968981858089478841770562")}; } } if constexpr (p == 7) { @@ -146,8 +149,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.3ee1cba38b6b0a205a4c9aac651fp-4Q, 0x1.960e67430300363014da61e0a27dp-2Q, 0x1.7550cd294c1fe3f40f374c82e23dp-1Q, 0x1.e10e9ba294ddc02a47644f227fffp-2Q, -0x1.26b830e491e32da8b525e8ab6aa1p-3Q, -0x1.cad37bbd5ab970931a91ed1dfe9cp-3Q, 0x1.241522ca7821c638e85eb5e52839p-4Q, 0x1.4a30727f2fa52896ef76d0300cfp-4Q, -0x1.378a8eecf45cc0627b1c4b5cace1p-5Q, -0x1.0f8eaa8ffe708c22b1145a6b8cc8p-6Q, 0x1.9b45682a50d70110df27e4af9e36p-7Q, 0x1.c271f584373d41d177397b25f7ebp-12Q, -0x1.d84a0f9cb2f314e62607c084aab4p-10Q, 0x1.72e5533fa10d324758be56783dp-12Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0778520540850091790199635219578937483791830529279556843870293717996297655927"), boost::lexical_cast("0.396539319481917306539000390936842856358715114933328740111049962075487815071"), boost::lexical_cast("0.729132090846235119916943070339282051717966061190136378269771574955357027757"), boost::lexical_cast("0.469782287405193122471591160974451738681791305678735953239252914100836922120"), boost::lexical_cast("-0.143906003928564975405068362213046001795273570549908483440175301422991840895"), boost::lexical_cast("-0.224036184993874982638140420233250964475783089677324655266509530724151657744"), boost::lexical_cast("0.0713092192668302647508765705011290482271132745141231465957511322020290613667"), boost::lexical_cast("0.0806126091510830719129224803593819058582382096562948905813921847722652754485"), boost::lexical_cast("-0.0380299369350144135795920616018580358544619693846786989828312271657410616427"), boost::lexical_cast("-0.0165745416306668806541076748917026547920450439482071370523927254871434907950"), boost::lexical_cast("0.0125509985560998406129898860341877795728947404604871003841181834416741023260"), boost::lexical_cast("0.000429577972921366521132129122819732222823535039694240974294636693544941849482"), boost::lexical_cast("-0.00180164070404749091526826291273955096258565146964109062532386481459081601883"), boost::lexical_cast("0.000353713799974520248446295836306425431095906005952004001252427564526433555672")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0778520540850091790199635219578937483791830529279556843870293717996297655927"), boost::lexical_cast("0.396539319481917306539000390936842856358715114933328740111049962075487815071"), boost::lexical_cast("0.729132090846235119916943070339282051717966061190136378269771574955357027757"), boost::lexical_cast("0.469782287405193122471591160974451738681791305678735953239252914100836922120"), boost::lexical_cast("-0.143906003928564975405068362213046001795273570549908483440175301422991840895"), boost::lexical_cast("-0.224036184993874982638140420233250964475783089677324655266509530724151657744"), boost::lexical_cast("0.0713092192668302647508765705011290482271132745141231465957511322020290613667"), boost::lexical_cast("0.0806126091510830719129224803593819058582382096562948905813921847722652754485"), boost::lexical_cast("-0.0380299369350144135795920616018580358544619693846786989828312271657410616427"), boost::lexical_cast("-0.0165745416306668806541076748917026547920450439482071370523927254871434907950"), boost::lexical_cast("0.0125509985560998406129898860341877795728947404604871003841181834416741023260"), boost::lexical_cast("0.000429577972921366521132129122819732222823535039694240974294636693544941849482"), boost::lexical_cast("-0.00180164070404749091526826291273955096258565146964109062532386481459081601883"), boost::lexical_cast("0.000353713799974520248446295836306425431095906005952004001252427564526433555672")}; } } if constexpr (p == 8) { @@ -165,8 +168,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.bdc64ada308dd431e90c51caaddfp-5Q, 0x1.4061690b4c31e70689f16560d4fdp-2Q, 0x1.59ec45992376070ce88329890c41p-1Q, 0x1.2bb39bedb5e27d5c19af764e6b08p-1Q, -0x1.03581459a95c5ec9b8a25898e79fp-6Q, -0x1.22d4f8724d56f584680effd871d8p-2Q, 0x1.ef6f9caf662af8d967c439494864p-12Q, 0x1.07acbb163ba0883fad048482f33cp-3Q, -0x1.1c9420f07509ca8be1e93402904ap-6Q, -0x1.692bc518a7fe18cb861085169737p-5Q, 0x1.ca215cd5b85b39449ec69ab26159p-7Q, 0x1.1e978df35f5fc0eabddff5ee9da6p-7Q, -0x1.3f2ef6d3ac74a30f6f64186b6be2p-8Q, -0x1.9ac501798e65cefa54cc7686cbfep-12Q, 0x1.622148e2ef341527c8d993cd7e86p-11Q, -0x1.ecbbbc88e3fc2ec652987ddfb595p-14Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0544158422431040099550094052029993550359955429473305039772928086771936225734"), boost::lexical_cast("0.312871590914299970659162375505717721949731974037022918569871242115311497533"), boost::lexical_cast("0.675630736297289806807800767047183149986911590633636422776675983811728748708"), boost::lexical_cast("0.585354683654206712771265520045098194430326667805336905570717534889570522452"), boost::lexical_cast("-0.0158291052563493056673805478764663041577447115450282655973533595603126615697"), boost::lexical_cast("-0.284015542961546926516203132374164732468435012487145179359920480909375859275"), boost::lexical_cast("0.000472484573913282770360590009825894986194801128877007464408409602299544658383"), boost::lexical_cast("0.128747426620478458857029287509708384302260157555648879557700016549770662789"), boost::lexical_cast("-0.0173693010018075461696161488680959831141308652948839431697731538851197479461"), boost::lexical_cast("-0.0440882539307947515067637232389635018975183919011099647275039198547543351349"), boost::lexical_cast("0.0139810279173982816487229305726334514423955953293434716914636811442629383260"), boost::lexical_cast("0.00874609404740577671638274324647564018040214708114067674268674702611775846381"), boost::lexical_cast("-0.00487035299345157431042218155710982401663497851215700376473620853219217075614"), boost::lexical_cast("-0.000391740373376947046298080357323776267522935007389049372449269467759195224284"), boost::lexical_cast("0.000675449406450569366369547573879299121848963001355843210361707737505966890496"), boost::lexical_cast("-0.000117476784124769533730628231698890944408669395031150392762001353514813073214")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0544158422431040099550094052029993550359955429473305039772928086771936225734"), boost::lexical_cast("0.312871590914299970659162375505717721949731974037022918569871242115311497533"), boost::lexical_cast("0.675630736297289806807800767047183149986911590633636422776675983811728748708"), boost::lexical_cast("0.585354683654206712771265520045098194430326667805336905570717534889570522452"), boost::lexical_cast("-0.0158291052563493056673805478764663041577447115450282655973533595603126615697"), boost::lexical_cast("-0.284015542961546926516203132374164732468435012487145179359920480909375859275"), boost::lexical_cast("0.000472484573913282770360590009825894986194801128877007464408409602299544658383"), boost::lexical_cast("0.128747426620478458857029287509708384302260157555648879557700016549770662789"), boost::lexical_cast("-0.0173693010018075461696161488680959831141308652948839431697731538851197479461"), boost::lexical_cast("-0.0440882539307947515067637232389635018975183919011099647275039198547543351349"), boost::lexical_cast("0.0139810279173982816487229305726334514423955953293434716914636811442629383260"), boost::lexical_cast("0.00874609404740577671638274324647564018040214708114067674268674702611775846381"), boost::lexical_cast("-0.00487035299345157431042218155710982401663497851215700376473620853219217075614"), boost::lexical_cast("-0.000391740373376947046298080357323776267522935007389049372449269467759195224284"), boost::lexical_cast("0.000675449406450569366369547573879299121848963001355843210361707737505966890496"), boost::lexical_cast("-0.000117476784124769533730628231698890944408669395031150392762001353514813073214")}; } } if constexpr (p == 9) { @@ -184,8 +187,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.37ef3e540da7c3aa0d1dcf5bb03fp-5Q, 0x1.f35f9808bc2a0772556b997598d3p-3Q, 0x1.35ab60603a287a1609387fb893b8p-1Q, 0x1.5088101e8fe3530163beb11528dcp-1Q, 0x1.10c9ca803fb2272d1e1cf6fa2d0cp-3Q, -0x1.2c4ff66fd53eee10d811f3bf5459p-2Q, -0x1.8ca8ebcdc98fc4aa06bb294a039cp-4Q, 0x1.303621e43e77126c475b311fee41p-3Q, 0x1.f768d94677996d7b05f99f12d599p-6Q, -0x1.1506294f451a1f48db3652c40168p-4Q, 0x1.07231a6b6ca0cb934ff78371a261p-12Q, 0x1.6e5f9be058887734b49665246c12p-6Q, -0x1.358a39f783bbf21cd3bb737b9bf7p-8Q, -0x1.1897b64b3bfb583210060e933d6p-8Q, 0x1.e4597bbfc711eadc2635b08cc11dp-10Q, 0x1.e3276a3bc510acb32c14bfd1c3d9p-13Q, -0x1.0833da803978a3e6248db817fff9p-12Q, 0x1.4a11ba1ad31b48b0c2e32412ef31p-15Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0380779473638783465886976588795511844877171449627841747664719248482680479602"), boost::lexical_cast("0.243834674612590353732041581649284415526361108560923136142908810357641947074"), boost::lexical_cast("0.604823123690111111903076867434236170895956271189611756533371353266219479839"), boost::lexical_cast("0.657288078051300538078212639045173214030585866924591885443603406558844920237"), boost::lexical_cast("0.133197385825007576190954945899795553692178076843366113615434683783912029373"), boost::lexical_cast("-0.293273783279174908806403195242198731043896162858990682572511282649777494073"), boost::lexical_cast("-0.0968407832229764605135081335376966022482545810459909967947126760842963820075"), boost::lexical_cast("0.148540749338106380135072717506042302479125857728060306077164939460051558202"), boost::lexical_cast("0.0307256814793333792123174007203788271410580502467074478150306050580744709008"), boost::lexical_cast("-0.0676328290613299736756422748297190159257879087135373990074833120984537787038"), boost::lexical_cast("0.000250947114831451957587189749988554331517627199370963332183416469143399245077"), boost::lexical_cast("0.0223616621236790972053737827026909524185564668830885375472181623365153339468"), boost::lexical_cast("-0.00472320475775139727792570784824246540572951491262793801875852685657845737998"), boost::lexical_cast("-0.00428150368246342983449679500231453187648118181146328837486045503769103000912"), boost::lexical_cast("0.00184764688305622647661912949112567705112108135960031816073251504574674723494"), boost::lexical_cast("0.000230385763523195967205216392824542169294066205246371197226000686680376244675"), boost::lexical_cast("-0.000251963188942710136974988684287860660728218154347802821413426535123097430873"), boost::lexical_cast("0.0000393473203162715994806898830658915070778247705551701350735993815544054870406")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0380779473638783465886976588795511844877171449627841747664719248482680479602"), boost::lexical_cast("0.243834674612590353732041581649284415526361108560923136142908810357641947074"), boost::lexical_cast("0.604823123690111111903076867434236170895956271189611756533371353266219479839"), boost::lexical_cast("0.657288078051300538078212639045173214030585866924591885443603406558844920237"), boost::lexical_cast("0.133197385825007576190954945899795553692178076843366113615434683783912029373"), boost::lexical_cast("-0.293273783279174908806403195242198731043896162858990682572511282649777494073"), boost::lexical_cast("-0.0968407832229764605135081335376966022482545810459909967947126760842963820075"), boost::lexical_cast("0.148540749338106380135072717506042302479125857728060306077164939460051558202"), boost::lexical_cast("0.0307256814793333792123174007203788271410580502467074478150306050580744709008"), boost::lexical_cast("-0.0676328290613299736756422748297190159257879087135373990074833120984537787038"), boost::lexical_cast("0.000250947114831451957587189749988554331517627199370963332183416469143399245077"), boost::lexical_cast("0.0223616621236790972053737827026909524185564668830885375472181623365153339468"), boost::lexical_cast("-0.00472320475775139727792570784824246540572951491262793801875852685657845737998"), boost::lexical_cast("-0.00428150368246342983449679500231453187648118181146328837486045503769103000912"), boost::lexical_cast("0.00184764688305622647661912949112567705112108135960031816073251504574674723494"), boost::lexical_cast("0.000230385763523195967205216392824542169294066205246371197226000686680376244675"), boost::lexical_cast("-0.000251963188942710136974988684287860660728218154347802821413426535123097430873"), boost::lexical_cast("0.0000393473203162715994806898830658915070778247705551701350735993815544054870406")}; } } if constexpr (p == 10) { @@ -203,8 +206,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.b4f6549dc7ae2d0da711a289f0cap-6Q, 0x1.8162d69198cfdb39a90922d70e5fp-3Q, 0x1.0ded5071bf8739f750ffec152978p-1Q, 0x1.607db4062d7753edab576af3e0dcp-1Q, 0x1.1feba4923f566c829244a5b4f4c2p-2Q, -0x1.ffaf7b6c111e2f4b082d1396dfd9p-3Q, -0x1.914c47c1ca801c5176763b1002edp-3Q, 0x1.04da377a0ae834bb94a9fa4f0243p-3Q, 0x1.7d29b819fd18d32d43de1a7d3641p-4Q, -0x1.246e307349ac4648ebbb94e378bbp-4Q, -0x1.e2a1dd5152b24d9c384763b949a8p-6Q, 0x1.1014069cb8f3bf95bd45be617d84p-5Q, 0x1.d8b7db3e21713e4ea2df5435db4ap-9Q, -0x1.5fb466d770edc4c0f4a29d7e3176p-7Q, 0x1.6dc8787ae38dd789b768877a70c2p-10Q, 0x1.0526072a98cd7f8751cc002da048p-9Q, -0x1.67962098c50f012db290a44515a5p-11Q, -0x1.e87f555dc50dd253428e6067701p-14Q, 0x1.888a11cfae432f4e4bd0c734fcc9p-14Q, -0x1.bd12a2a1a43db4fff0519cd821dfp-17Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0266700579005555535866174487713085827719249829085128993277997577621650735643"), boost::lexical_cast("0.188176800077691489020892973679093994270254675864039348434859544409886608680"), boost::lexical_cast("0.527201188931725586481744827959508192498140268084022344531854947145139828409"), boost::lexical_cast("0.688459039453603565741871782549235853977136404240733953727968115839903445132"), boost::lexical_cast("0.281172343660577460748726998445589287624388885902615041383154395183374807120"), boost::lexical_cast("-0.249846424327315379416101897920779100056466973713207371501312159710676300514"), boost::lexical_cast("-0.195946274377377043504299254319098131876677647638277847439678187683856178731"), boost::lexical_cast("0.127369340335793260082677233201400977078617748042224599556309752373906702894"), boost::lexical_cast("0.0930573646035723511603522898354527322694291799894692586806397410224547567765"), boost::lexical_cast("-0.0713941471663970871453360930760506476729261198370215091752375634796582409510"), boost::lexical_cast("-0.0294575368218758128582832376014183919938820051606494877976965428318490167081"), boost::lexical_cast("0.0332126740593410017397636531821591289797833741326709604332335127083312999184"), boost::lexical_cast("0.00360655356695616965542329141713340329951735051861899476273061229128656318944"), boost::lexical_cast("-0.0107331754833305750443181141065136444811154878114392321337033393709343696195"), boost::lexical_cast("0.00139535174705290116578931844795770756766054285568855242672111772342943140108"), boost::lexical_cast("0.00199240529518505611715874224264064321176255536551410528006793647824864459995"), boost::lexical_cast("-0.000685856694959711626561370981926571419662504333678692051621190356175797931438"), boost::lexical_cast("-0.000116466855129285450951480971025899189152746185434759736281923507446885853623"), boost::lexical_cast("0.0000935886703200695913340501303422285439968845621529727644352187393967719605190"), boost::lexical_cast("-0.0000132642028945212448124366753122668330574924096060582975640067461946671323150")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0266700579005555535866174487713085827719249829085128993277997577621650735643"), boost::lexical_cast("0.188176800077691489020892973679093994270254675864039348434859544409886608680"), boost::lexical_cast("0.527201188931725586481744827959508192498140268084022344531854947145139828409"), boost::lexical_cast("0.688459039453603565741871782549235853977136404240733953727968115839903445132"), boost::lexical_cast("0.281172343660577460748726998445589287624388885902615041383154395183374807120"), boost::lexical_cast("-0.249846424327315379416101897920779100056466973713207371501312159710676300514"), boost::lexical_cast("-0.195946274377377043504299254319098131876677647638277847439678187683856178731"), boost::lexical_cast("0.127369340335793260082677233201400977078617748042224599556309752373906702894"), boost::lexical_cast("0.0930573646035723511603522898354527322694291799894692586806397410224547567765"), boost::lexical_cast("-0.0713941471663970871453360930760506476729261198370215091752375634796582409510"), boost::lexical_cast("-0.0294575368218758128582832376014183919938820051606494877976965428318490167081"), boost::lexical_cast("0.0332126740593410017397636531821591289797833741326709604332335127083312999184"), boost::lexical_cast("0.00360655356695616965542329141713340329951735051861899476273061229128656318944"), boost::lexical_cast("-0.0107331754833305750443181141065136444811154878114392321337033393709343696195"), boost::lexical_cast("0.00139535174705290116578931844795770756766054285568855242672111772342943140108"), boost::lexical_cast("0.00199240529518505611715874224264064321176255536551410528006793647824864459995"), boost::lexical_cast("-0.000685856694959711626561370981926571419662504333678692051621190356175797931438"), boost::lexical_cast("-0.000116466855129285450951480971025899189152746185434759736281923507446885853623"), boost::lexical_cast("0.0000935886703200695913340501303422285439968845621529727644352187393967719605190"), boost::lexical_cast("-0.0000132642028945212448124366753122668330574924096060582975640067461946671323150")}; } } if constexpr (p == 11) { @@ -222,8 +225,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.324991607609160c660c469077c4p-6Q, 0x1.270c9c42314cf5fa956419fe6ca8p-3Q, 0x1.ccb286198c9dee96d12668532b6cp-2Q, 0x1.5f125643212cb922d29e40df5ae5p-1Q, 0x1.a5d9fccefe816554cfd2c1b4c2eap-2Q, -0x1.4c56f6b2bf66c3c093c0529f8f7fp-3Q, -0x1.18cff89a8cc4603466567c5566b2p-2Q, 0x1.0e83b8b6a4d8e932eca95459a69cp-4Q, 0x1.32d0a3f0ba73261f3f385a0ab52ep-3Q, -0x1.7cc387e4a9a091c75d9de8faea58p-5Q, -0x1.10221dbbeff7c12d2228c7667179p-4Q, 0x1.00b27276a80990547cbd63f84547p-5Q, 0x1.557516a958be52b928260c4c6ad5p-6Q, -0x1.f77975a6883f7054b8b01c477981p-7Q, -0x1.b5e49f3346a8b7e121e98be0fcfbp-9Q, 0x1.42fd20a75f9abc16cec7fe76464bp-8Q, -0x1.439543c8411328be7c3dbb239962p-12Q, -0x1.d4338d3fdae3a1309e0d7105695cp-11Q, 0x1.05415f0bc6ea25b1e91fb2adce4fp-12Q, 0x1.c8ab05d193c378f97fff6933dc9bp-15Q, -0x1.228a0febb3e8bfe721948bedcf9cp-15Q, 0x1.2d9b0b4e10d77be6e48f3790bbdep-18Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0186942977614710840254357293956197572896777445592195854328669208544639848493"), boost::lexical_cast("0.144067021150624512795191584936100114302371896755623960431885248217612109866"), boost::lexical_cast("0.449899764356045334768894037385360367780689537864893347459965579586344042705"), boost::lexical_cast("0.685686774916200511120938631696309793594020496456770349505158901745075089131"), boost::lexical_cast("0.411964368947907462925939648571066730743040041018784531569724251133330862864"), boost::lexical_cast("-0.162275245027490362240582726998551154074426432421213020964966742981832149727"), boost::lexical_cast("-0.274230846817946961202100945283526662864808952177517822190577839005023967370"), boost::lexical_cast("0.0660435881966831919006145788812630265675314216894079154111345722601572700631"), boost::lexical_cast("0.149812012466378496406656261704419329858827242026748465379690959421507533896"), boost::lexical_cast("-0.0464799551166841872716172258902374457722326096684826074745032098759584318172"), boost::lexical_cast("-0.0664387856950252052789921553697120319181956689607973962285857402336065270973"), boost::lexical_cast("0.0313350902190460760309479840830314453635810568088003196493644550909547400332"), boost::lexical_cast("0.0208409043601810630229481125565649101515776183273471569112669220076703474398"), boost::lexical_cast("-0.0153648209062015994261981160995882274401432649577300012020584862793777385002"), boost::lexical_cast("-0.00334085887301444560609080861798240610193065835949919084565673177725408174281"), boost::lexical_cast("0.00492841765605904112317073974170827369028554772991580241839745801019376641230"), boost::lexical_cast("-0.000308592858815143165175459072627895330718021660507848858192156227602365444134"), boost::lexical_cast("-0.000893023250666264613390082462264865398987951987862072879313335822408534301830"), boost::lexical_cast("0.000249152523552823498871221687266680108822119930285542538197139249093202823549"), boost::lexical_cast("0.0000544390746993684716735785687957683219193667852560079397804368892016829413126"), boost::lexical_cast("-0.0000346349841869849955412808515997404321450648804823345803594360135567940224107"), boost::lexical_cast("0.00000449427427723651009541564828231013091641049798738375346057174174843400859633")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0186942977614710840254357293956197572896777445592195854328669208544639848493"), boost::lexical_cast("0.144067021150624512795191584936100114302371896755623960431885248217612109866"), boost::lexical_cast("0.449899764356045334768894037385360367780689537864893347459965579586344042705"), boost::lexical_cast("0.685686774916200511120938631696309793594020496456770349505158901745075089131"), boost::lexical_cast("0.411964368947907462925939648571066730743040041018784531569724251133330862864"), boost::lexical_cast("-0.162275245027490362240582726998551154074426432421213020964966742981832149727"), boost::lexical_cast("-0.274230846817946961202100945283526662864808952177517822190577839005023967370"), boost::lexical_cast("0.0660435881966831919006145788812630265675314216894079154111345722601572700631"), boost::lexical_cast("0.149812012466378496406656261704419329858827242026748465379690959421507533896"), boost::lexical_cast("-0.0464799551166841872716172258902374457722326096684826074745032098759584318172"), boost::lexical_cast("-0.0664387856950252052789921553697120319181956689607973962285857402336065270973"), boost::lexical_cast("0.0313350902190460760309479840830314453635810568088003196493644550909547400332"), boost::lexical_cast("0.0208409043601810630229481125565649101515776183273471569112669220076703474398"), boost::lexical_cast("-0.0153648209062015994261981160995882274401432649577300012020584862793777385002"), boost::lexical_cast("-0.00334085887301444560609080861798240610193065835949919084565673177725408174281"), boost::lexical_cast("0.00492841765605904112317073974170827369028554772991580241839745801019376641230"), boost::lexical_cast("-0.000308592858815143165175459072627895330718021660507848858192156227602365444134"), boost::lexical_cast("-0.000893023250666264613390082462264865398987951987862072879313335822408534301830"), boost::lexical_cast("0.000249152523552823498871221687266680108822119930285542538197139249093202823549"), boost::lexical_cast("0.0000544390746993684716735785687957683219193667852560079397804368892016829413126"), boost::lexical_cast("-0.0000346349841869849955412808515997404321450648804823345803594360135567940224107"), boost::lexical_cast("0.00000449427427723651009541564828231013091641049798738375346057174174843400859633")}; } } if constexpr (p == 12) { @@ -241,8 +244,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.ada9978d2fa568b21229688156b8p-7Q, 0x1.c0c890682f8790d7f6bb1c1aa44ep-4Q, 0x1.82696272e40bd05e57c851b9cb36p-2Q, 0x1.507c59d8e6f6ac435d1e88e090b6p-1Q, 0x1.082245c29797798f324c3b86f65cp-1Q, -0x1.6eb4ac1d9855ccfed03d4133c6fbp-5Q, -0x1.43c448da45b222f8d287f72956dcp-2Q, -0x1.85996f0f3b3b27b5f0ec32953a95p-6Q, 0x1.75b757e56dd3b6e26eea4e0a43bap-3Q, 0x1.5f3ea878d368e081a5d3cb36d936p-8Q, -0x1.8afc6821933836a0611906df913cp-4Q, 0x1.638119d1c4361bb00a2f22d1f90bp-7Q, 0x1.5458dbe394eb05c5aab3c4ceb31ap-5Q, -0x1.90617513f389b7954493854c387ep-7Q, -0x1.a4c4a623e2a50fc10158bea8a45cp-7Q, 0x1.b7d844bffa4e88c2ef52650eb0e3p-8Q, 0x1.26babd1f8d1809707edb54236067p-9Q, -0x1.1dac0186ec14265ff3ab908c13a3p-9Q, 0x1.b73c724cbcd24a84c3c597249f8dp-18Q, 0x1.9788431be0bfb2d1938d25135045p-12Q, -0x1.7336904b8b4e84c0e0396f9346efp-14Q, -0x1.96b4a56f63fa8a95abb9ecaeceaep-16Q, 0x1.acb92f10c4239fce7d915af19a6cp-17Q, -0x1.9a7502d7dc2f2e1e665f9ba74bc1p-20Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0131122579572295175067460908889332806566551064193132500774828079813751369078"), boost::lexical_cast("0.109566272821185154605704505024890542607568050306677404638365743414594716237"), boost::lexical_cast("0.377355135214212657092821260487920614901094170605752633470583911562885099045"), boost::lexical_cast("0.657198722579307089302761128664116983425020328998841214139428195001939202386"), boost::lexical_cast("0.515886478427815608756032648054303270067769308703609005612764729867503168411"), boost::lexical_cast("-0.0447638856537746266676274731154016652928454363150592413907170410117965514990"), boost::lexical_cast("-0.316178453752785536864802935347803109850883903254736438957420337160049554984"), boost::lexical_cast("-0.0237792572560697276839975460913322578455336655833174115248261271603350281595"), boost::lexical_cast("0.182478605927579679854043611618924171029477144809630269832901126083410652478"), boost::lexical_cast("0.00535956967435215032827627672976833228886266518419270582163634261809269415715"), boost::lexical_cast("-0.0964321200965070820265032053432248412743088014304522051434640274861906048848"), boost::lexical_cast("0.0108491302558221843808901023774815218866163056760333465932251226434077741286"), boost::lexical_cast("0.0415462774950844407392709468190657486451353222138837486128707899413616614352"), boost::lexical_cast("-0.0122186490697482807199879826647156771298246609311655817534481104550208384247"), boost::lexical_cast("-0.0128408251983006832946603447189472849620610983231409763327522557348508782102"), boost::lexical_cast("0.00671149900879550917776702706821567245064811218585645674037945533688642441241"), boost::lexical_cast("0.00224860724099523759995086521126723401834319978614617709926201027901007445066"), boost::lexical_cast("-0.00217950361862776047159890337958417118784007529186057126498094298705073259759"), boost::lexical_cast("0.00000654512821250959556650043039932711072911177056889735663071455200741848443049"), boost::lexical_cast("0.000388653062820931443589728883779598179191748857342017752343609613138331820861"), boost::lexical_cast("-0.0000885041092082043242082164596155372659873832215147193280801544303001991847212"), boost::lexical_cast("-0.0000242415457570307840297891532053171958042377836266428223937753220729228844731"), boost::lexical_cast("0.0000127769522193797665871404636261662088737596094143942875605535392042653701946"), boost::lexical_cast("-0.00000152907175806851090271223916452290122319761543966034067260269641683218542373")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.0131122579572295175067460908889332806566551064193132500774828079813751369078"), boost::lexical_cast("0.109566272821185154605704505024890542607568050306677404638365743414594716237"), boost::lexical_cast("0.377355135214212657092821260487920614901094170605752633470583911562885099045"), boost::lexical_cast("0.657198722579307089302761128664116983425020328998841214139428195001939202386"), boost::lexical_cast("0.515886478427815608756032648054303270067769308703609005612764729867503168411"), boost::lexical_cast("-0.0447638856537746266676274731154016652928454363150592413907170410117965514990"), boost::lexical_cast("-0.316178453752785536864802935347803109850883903254736438957420337160049554984"), boost::lexical_cast("-0.0237792572560697276839975460913322578455336655833174115248261271603350281595"), boost::lexical_cast("0.182478605927579679854043611618924171029477144809630269832901126083410652478"), boost::lexical_cast("0.00535956967435215032827627672976833228886266518419270582163634261809269415715"), boost::lexical_cast("-0.0964321200965070820265032053432248412743088014304522051434640274861906048848"), boost::lexical_cast("0.0108491302558221843808901023774815218866163056760333465932251226434077741286"), boost::lexical_cast("0.0415462774950844407392709468190657486451353222138837486128707899413616614352"), boost::lexical_cast("-0.0122186490697482807199879826647156771298246609311655817534481104550208384247"), boost::lexical_cast("-0.0128408251983006832946603447189472849620610983231409763327522557348508782102"), boost::lexical_cast("0.00671149900879550917776702706821567245064811218585645674037945533688642441241"), boost::lexical_cast("0.00224860724099523759995086521126723401834319978614617709926201027901007445066"), boost::lexical_cast("-0.00217950361862776047159890337958417118784007529186057126498094298705073259759"), boost::lexical_cast("0.00000654512821250959556650043039932711072911177056889735663071455200741848443049"), boost::lexical_cast("0.000388653062820931443589728883779598179191748857342017752343609613138331820861"), boost::lexical_cast("-0.0000885041092082043242082164596155372659873832215147193280801544303001991847212"), boost::lexical_cast("-0.0000242415457570307840297891532053171958042377836266428223937753220729228844731"), boost::lexical_cast("0.0000127769522193797665871404636261662088737596094143942875605535392042653701946"), boost::lexical_cast("-0.00000152907175806851090271223916452290122319761543966034067260269641683218542373")}; } } if constexpr (p == 13) { @@ -260,8 +263,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.2d89174d37e3b6596d64d168e49p-7Q, 0x1.53664fc8a3d4c0d33efd4b4bc6fap-4Q, 0x1.3f7bf6c09afe857e70d916613d78p-2Q, 0x1.38dc5001834baade66ebb6ec9fc1p-1Q, 0x1.2d82ef0bea471de1f0a3864a5cccp-1Q, 0x1.644b251290fb4bea9c417da1f71ep-4Q, -0x1.42884206fc5ade5015e8dd0e5832p-2Q, -0x1.fe442b86ad7635e6a44fa231478p-4Q, 0x1.6f91279c81aa3aed801eca5172e8p-3Q, 0x1.2acc804557c8ab4899f3d0916648p-4Q, -0x1.b163543c8eacbf70b0092010e485p-4Q, -0x1.b1fc6de2397062d67f76ff78186p-6Q, 0x1.cbe5044520d5e315c90c0ed1b10cp-5Q, 0x1.37f29dfe3e92c6d51003ce786db8p-9Q, -0x1.867439245b0c6d71509d7a14369ep-6Q, 0x1.0128d031aa3b020f68dbd131fc68p-8Q, 0x1.db80973172630eff11f1aa6bf206p-8Q, -0x1.6a025cdac7e0fe4d3e8433e38ffbp-9Q, -0x1.58e561b1f2cf60b1ce144cfab0ffp-10Q, 0x1.e8ceb1ee24cab5dbcf0c32d1591bp-11Q, 0x1.9d26d847f17c9a8ce68c968f105dp-15Q, -0x1.5a4cf360064a4020bfd19dc8e5fp-13Q, 0x1.0159a865542d28f1113c2ad46cb5p-15Q, 0x1.5e5f8028cd834a146bf59b16d932p-17Q, -0x1.3b708a4c3be3403a7da544157c5bp-18Q, 0x1.183f9db8da3a04f4c66e4459dad2p-21Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00920213353896236797297016347564418466753417191641656238600970303711912173265"), boost::lexical_cast("0.0828612438729027796443202713123046640520811333289013507251427742009482956517"), boost::lexical_cast("0.311996322160438063396078411221404969394668352896718031716039017308515654041"), boost::lexical_cast("0.611055851158787652821199513674418056207361267601823943852658294015204037145"), boost::lexical_cast("0.588889570431218908071039534739533392766598638281283604223557340650249576137"), boost::lexical_cast("0.0869857261796472373102373983808749439923188407661970125088201664378054171345"), boost::lexical_cast("-0.314972907711388632998169825593228258287688845067878902595030681868130772999"), boost::lexical_cast("-0.124576730750815258941380833602126018079273929517363471957206932075260972005"), boost::lexical_cast("0.179476079429339843234845007233936901358196625624413339304288145469676423326"), boost::lexical_cast("0.0729489336567771638090283061047766198332592902687987355362796328461636696921"), boost::lexical_cast("-0.105807618187934326450966730419646484947886075480123665823236051077820681894"), boost::lexical_cast("-0.0264884064753436946396391224803478572641960484429769701626422412133519842633"), boost::lexical_cast("0.0561394771002834288621450199838733111998837879254310024473705625396675790207"), boost::lexical_cast("0.00237997225405907881146517095855420835809439461205193486847513927070930528134"), boost::lexical_cast("-0.0238314207103236490320640306775773913425292271763622627407729863341057724688"), boost::lexical_cast("0.00392394144879741624331637022081552655882474662345140404391840728787217413821"), boost::lexical_cast("0.00725558940161756619451839330050269889897352967964668369526982867260050623476"), boost::lexical_cast("-0.00276191123465686217801457626609844599535009333050181802496631648326614964558"), boost::lexical_cast("-0.00131567391189229893661383537059364337606041259265365230723812459474570122051"), boost::lexical_cast("0.000932326130867263386222651780254851410091808829980195230799156927112701492336"), boost::lexical_cast("0.0000492515251262894619214095738786659621010377829938882350084009445661139469929"), boost::lexical_cast("-0.000165128988556505489461668770923800075589854821465977670334780149359987420945"), boost::lexical_cast("0.0000306785375793254934664948322857547623660042821723790056312823074855283018382"), boost::lexical_cast("0.0000104419305714081370817071499108059695167070643621732816964147406843820801008"), boost::lexical_cast("-0.00000470041647936086832565019516506177132165038358297095855656805971133412246529"), boost::lexical_cast("0.000000522003509845486469173642435484317697674705215524355700153190105348895004025")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00920213353896236797297016347564418466753417191641656238600970303711912173265"), boost::lexical_cast("0.0828612438729027796443202713123046640520811333289013507251427742009482956517"), boost::lexical_cast("0.311996322160438063396078411221404969394668352896718031716039017308515654041"), boost::lexical_cast("0.611055851158787652821199513674418056207361267601823943852658294015204037145"), boost::lexical_cast("0.588889570431218908071039534739533392766598638281283604223557340650249576137"), boost::lexical_cast("0.0869857261796472373102373983808749439923188407661970125088201664378054171345"), boost::lexical_cast("-0.314972907711388632998169825593228258287688845067878902595030681868130772999"), boost::lexical_cast("-0.124576730750815258941380833602126018079273929517363471957206932075260972005"), boost::lexical_cast("0.179476079429339843234845007233936901358196625624413339304288145469676423326"), boost::lexical_cast("0.0729489336567771638090283061047766198332592902687987355362796328461636696921"), boost::lexical_cast("-0.105807618187934326450966730419646484947886075480123665823236051077820681894"), boost::lexical_cast("-0.0264884064753436946396391224803478572641960484429769701626422412133519842633"), boost::lexical_cast("0.0561394771002834288621450199838733111998837879254310024473705625396675790207"), boost::lexical_cast("0.00237997225405907881146517095855420835809439461205193486847513927070930528134"), boost::lexical_cast("-0.0238314207103236490320640306775773913425292271763622627407729863341057724688"), boost::lexical_cast("0.00392394144879741624331637022081552655882474662345140404391840728787217413821"), boost::lexical_cast("0.00725558940161756619451839330050269889897352967964668369526982867260050623476"), boost::lexical_cast("-0.00276191123465686217801457626609844599535009333050181802496631648326614964558"), boost::lexical_cast("-0.00131567391189229893661383537059364337606041259265365230723812459474570122051"), boost::lexical_cast("0.000932326130867263386222651780254851410091808829980195230799156927112701492336"), boost::lexical_cast("0.0000492515251262894619214095738786659621010377829938882350084009445661139469929"), boost::lexical_cast("-0.000165128988556505489461668770923800075589854821465977670334780149359987420945"), boost::lexical_cast("0.0000306785375793254934664948322857547623660042821723790056312823074855283018382"), boost::lexical_cast("0.0000104419305714081370817071499108059695167070643621732816964147406843820801008"), boost::lexical_cast("-0.00000470041647936086832565019516506177132165038358297095855656805971133412246529"), boost::lexical_cast("0.000000522003509845486469173642435484317697674705215524355700153190105348895004025")}; } } if constexpr (p == 14) { @@ -279,8 +282,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.a7702ace363ac35a31e24ad7f18bp-8Q, 0x1.fee460f5cb8771588fb11eee4edep-5Q, 0x1.04f777f62f422960e164233d2842p-2Q, 0x1.1bcdf22a1725c010c6b543c39465p-1Q, 0x1.432b0dc3136d3b304d5a3bf4569bp-1Q, 0x1.bfd66ae4258abee147e56af809ep-3Q, -0x1.1635861af071cce08b7655b9575p-2Q, -0x1.be885d06053beddff8849acb8697p-3Q, 0x1.1b6ef32bc7358856a3c8661f7dbbp-3Q, 0x1.1eb28fc03c55b30ce48dc30b7f77p-3Q, -0x1.63524d6aa4cf6fa795512cfa3aa5p-4Q, -0x1.2510847f3ed25a6abc4fb2ebbea9p-4Q, 0x1.c480a659de0cd4f4123d770896e6p-5Q, 0x1.ba103a92149f4583a4c79c292018p-6Q, -0x1.ee8e8a6bca9ac4ad53dedccf86b9p-6Q, -0x1.6ffce6192a67aceee5260da8193dp-8Q, 0x1.a3160ba7d924dde8cc52f58fbb97p-7Q, -0x1.873bd13c8af17ab00e30f03b73e4p-11Q, -0x1.f894721441f671f4ac26746366e6p-9Q, 0x1.1650e1f6ec4c290c75eee26e8b4ap-10Q, 0x1.7334fd9e58c69f69b95d47a6075fp-11Q, -0x1.959f69010da009a2eacf096b1dafp-12Q, -0x1.5e73f3c02020121b8b1dbc91cc8ap-15Q, 0x1.20612a2e814f83021e4b38a90018p-14Q, -0x1.5adbf364f5e1bddd8115a86dd662p-17Q, -0x1.26968e53fb76ce12ec5e07348937p-18Q, 0x1.cf0cbb4133dbb68c44095fc163dep-20Q, -0x1.7fc90f0c46da191bc033464815fbp-23Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00646115346008794781816639744862281427232715941920119921810140416821319638585"), boost::lexical_cast("0.0623647588493988983279856675843487742830533369340766716460251880613807597066"), boost::lexical_cast("0.254850267792621353665907788677828668618704241636713744378008420238232719628"), boost::lexical_cast("0.554305617940893835992683144985115484407826983095163460968399777532226842271"), boost::lexical_cast("0.631187849104856779557661713535817234862395245657001728978880959248433640269"), boost::lexical_cast("0.218670687758906521491747591821751705176577432127043205903027323352534222868"), boost::lexical_cast("-0.271688552278748041414219247618117109460488246568333081431189666923849066652"), boost::lexical_cast("-0.218033529993276044755555881270231191197524066947060475274712704179785996228"), boost::lexical_cast("0.138395213864806591073993969002157371398990046322968611905911990239065683492"), boost::lexical_cast("0.139989016584460701249294316227116344032822155561432618133368381730127661592"), boost::lexical_cast("-0.0867484115681696890456082206672779538297914953951750365749296445982289331724"), boost::lexical_cast("-0.0715489555040461307358414511517380799095806967312953809999091309335447192979"), boost::lexical_cast("0.0552371262592160441161883406053340339791383363251167215767110765995965856731"), boost::lexical_cast("0.0269814083079129169739903140321519334337576659580727423328434928060131390138"), boost::lexical_cast("-0.0301853515403906351871482262348913757378157540665865262488375619379066007462"), boost::lexical_cast("-0.00561504953035695913321837136769149863745729720392581038769868016916017798506"), boost::lexical_cast("0.0127894932663334089615733070578407929937490386157205831348153451948141528455"), boost::lexical_cast("-0.000746218989268384937181716073918178097195818798881330290043548750870183218766"), boost::lexical_cast("-0.00384963886802218744578634931609555177409681850828570049305891572532777766984"), boost::lexical_cast("0.00106169108560676184303256674938841117303394158214783086389393956154388248847"), boost::lexical_cast("0.000708021154235527858644297769761712898347186346418159537167009442266803119446"), boost::lexical_cast("-0.000386831947312954482107666339805731442732890210784216537990146842609536038748"), boost::lexical_cast("-0.0000417772457703725973526797953983925892838972659013273013105432373007939629113"), boost::lexical_cast("0.0000687550425269750960387343702162803160189037068765187527988272789892867302714"), boost::lexical_cast("-0.0000103372091845707739466140734259481458626927250949074485069144305905647763599"), boost::lexical_cast("-0.00000438970490178139411525404256136716982932308536080082571815104919437269388055"), boost::lexical_cast("0.00000172499467536781276988571269274179852358789470986735657691071794719454646345"), boost::lexical_cast("-0.000000178713996831135907633419293847083934388299030997695944699402284569127317214")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00646115346008794781816639744862281427232715941920119921810140416821319638585"), boost::lexical_cast("0.0623647588493988983279856675843487742830533369340766716460251880613807597066"), boost::lexical_cast("0.254850267792621353665907788677828668618704241636713744378008420238232719628"), boost::lexical_cast("0.554305617940893835992683144985115484407826983095163460968399777532226842271"), boost::lexical_cast("0.631187849104856779557661713535817234862395245657001728978880959248433640269"), boost::lexical_cast("0.218670687758906521491747591821751705176577432127043205903027323352534222868"), boost::lexical_cast("-0.271688552278748041414219247618117109460488246568333081431189666923849066652"), boost::lexical_cast("-0.218033529993276044755555881270231191197524066947060475274712704179785996228"), boost::lexical_cast("0.138395213864806591073993969002157371398990046322968611905911990239065683492"), boost::lexical_cast("0.139989016584460701249294316227116344032822155561432618133368381730127661592"), boost::lexical_cast("-0.0867484115681696890456082206672779538297914953951750365749296445982289331724"), boost::lexical_cast("-0.0715489555040461307358414511517380799095806967312953809999091309335447192979"), boost::lexical_cast("0.0552371262592160441161883406053340339791383363251167215767110765995965856731"), boost::lexical_cast("0.0269814083079129169739903140321519334337576659580727423328434928060131390138"), boost::lexical_cast("-0.0301853515403906351871482262348913757378157540665865262488375619379066007462"), boost::lexical_cast("-0.00561504953035695913321837136769149863745729720392581038769868016916017798506"), boost::lexical_cast("0.0127894932663334089615733070578407929937490386157205831348153451948141528455"), boost::lexical_cast("-0.000746218989268384937181716073918178097195818798881330290043548750870183218766"), boost::lexical_cast("-0.00384963886802218744578634931609555177409681850828570049305891572532777766984"), boost::lexical_cast("0.00106169108560676184303256674938841117303394158214783086389393956154388248847"), boost::lexical_cast("0.000708021154235527858644297769761712898347186346418159537167009442266803119446"), boost::lexical_cast("-0.000386831947312954482107666339805731442732890210784216537990146842609536038748"), boost::lexical_cast("-0.0000417772457703725973526797953983925892838972659013273013105432373007939629113"), boost::lexical_cast("0.0000687550425269750960387343702162803160189037068765187527988272789892867302714"), boost::lexical_cast("-0.0000103372091845707739466140734259481458626927250949074485069144305905647763599"), boost::lexical_cast("-0.00000438970490178139411525404256136716982932308536080082571815104919437269388055"), boost::lexical_cast("0.00000172499467536781276988571269274179852358789470986735657691071794719454646345"), boost::lexical_cast("-0.000000178713996831135907633419293847083934388299030997695944699402284569127317214")}; } } if constexpr (p == 15) { @@ -298,8 +301,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.2970058a26dcd961f2ddf52bca08p-8Q, 0x1.7eec010bca4c417f3cf45c166751p-5Q, 0x1.a5efd6f02857dd0be400d7c02e2cp-3Q, 0x1.f8747691d3f737355530dd281d86p-2Q, 0x1.4aa8051a530b457c39051251b937p-1Q, 0x1.5b237b0c281791146b95d35023c4p-2Q, -0x1.8bae9ca895b451d87fbb9a690248p-3Q, -0x1.27d0d6e28e01f3ef0606971828aap-2Q, 0x1.0b6623378c72eb295fa0f634a67bp-4Q, 0x1.856ba3f0d1d5aaf4f59a12cbb286p-3Q, -0x1.44f200621040cdd51fafc7035006p-5Q, -0x1.c726bf22e4a15fea85834dbb1052p-4Q, 0x1.15858527779bc1c4ec7f8b6fdd21p-5Q, 0x1.c0c32426f4662ec60f158af78296p-5Q, -0x1.a62aa972a6fc3876e9915f565de4p-6Q, -0x1.54f3ad3a0b7c5bd971d938015013p-6Q, 0x1.ee451350034703acaa0dbe95c1aep-7Q, 0x1.4e4c95b98ec2d5e117559a2b0da9p-8Q, -0x1.a92e1fc2fdcad88a36c4f23f938p-8Q, -0x1.fb000715d8e6558a8e3b0bc34d7fp-13Q, 0x1.fd6e43c3dd5e86d041c185aa9428p-10Q, -0x1.879fe7f24ba0a4818b2d76fbd7e6p-12Q, -0x1.79080f71ee322531c0337932b9a5p-12Q, 0x1.46f04a6cb59007eab6af7b114fa4p-13Q, 0x1.b0bacca20c60f4939edefbff1354p-16Q, -0x1.d7ff965f47a09038cb01ea5da5e9p-16Q, 0x1.c35f5c15433718b508f832bbf1b8p-19Q, 0x1.e6358dfe44b5282546827ce8042cp-20Q, -0x1.532291d1cbfa3eda1a3275ffd36dp-21Q, 0x1.076d01633701901bb8cc971717bp-24Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00453853736157889888145939491021169634666367124378878699791651359730618263777"), boost::lexical_cast("0.0467433948927662718917096933484357577657915170021494351311319734377213834945"), boost::lexical_cast("0.206023863986995731539891500947630721930613850564193090270204726624901561209"), boost::lexical_cast("0.492631771708139623606775707402994637261722156513093240216016003697522813162"), boost::lexical_cast("0.645813140357424358176420912010691799643260828749404618107148947895533066481"), boost::lexical_cast("0.339002535454731527691264114383577391875676949179355466933669011509397556470"), boost::lexical_cast("-0.193204139609145428706399053432147174630409003914286382793775492150589726686"), boost::lexical_cast("-0.288882596566965646248412500982233298131143563043534259497129296256293483504"), boost::lexical_cast("0.0652829528487728169228310791986957488203917428559614412596510130561953369929"), boost::lexical_cast("0.190146714007122982348489311658602051795950125817433669687815606055254287820"), boost::lexical_cast("-0.0396661765557909444838436675189620066838174282068373680544974535292838687668"), boost::lexical_cast("-0.111120936037231693365671032467405860885862376216591412050565788400539631609"), boost::lexical_cast("0.0338771439235076862085481784443352377086474468741126536946319599123012785905"), boost::lexical_cast("0.0547805505845076126891379031258187910860941599742276856424484536408030091303"), boost::lexical_cast("-0.0257670073284399625859452575426982639220364163482534013839683682541716280711"), boost::lexical_cast("-0.0208100501696930816778848342467700016205465795136489904099616617271926101264"), boost::lexical_cast("0.0150839180278359023632927446017032273624489282330562771623396889036950783790"), boost::lexical_cast("0.00510100036040754316970886018556531472480106652734422205552663106916575853665"), boost::lexical_cast("-0.00648773456031574499518168314921869081695584563938882640792896746945184786140"), boost::lexical_cast("-0.000241756490761624281166722532630017960522994699581453522332941192889131156009"), boost::lexical_cast("0.00194332398038221154176491233254108744101142486557953140145230261789465341230"), boost::lexical_cast("-0.000373482354137616992009809421364541461138763096803025662574022673555831120585"), boost::lexical_cast("-0.000359565244362468812164962007590980885819420245408409030562748046672838761659"), boost::lexical_cast("0.000155896489920599747947165824122710881625556705962549591522860363042830623991"), boost::lexical_cast("0.0000257926991553189368092586241761685591294404236876734070916011973700950042214"), boost::lexical_cast("-0.0000281332962660478136475532477707847866579144387629378890426725562075302388539"), boost::lexical_cast("0.00000336298718173757980312484521042017747213484665586407818718630450150330033976"), boost::lexical_cast("0.00000181127040794057708376851091228584116057708592533750785059029068086553957632"), boost::lexical_cast("-0.000000631688232588166442120159729951765765416613791512119551041664162606772181110"), boost::lexical_cast("0.0000000613335991330575202905629946028978860198919045088539651217384559505804672173")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00453853736157889888145939491021169634666367124378878699791651359730618263777"), boost::lexical_cast("0.0467433948927662718917096933484357577657915170021494351311319734377213834945"), boost::lexical_cast("0.206023863986995731539891500947630721930613850564193090270204726624901561209"), boost::lexical_cast("0.492631771708139623606775707402994637261722156513093240216016003697522813162"), boost::lexical_cast("0.645813140357424358176420912010691799643260828749404618107148947895533066481"), boost::lexical_cast("0.339002535454731527691264114383577391875676949179355466933669011509397556470"), boost::lexical_cast("-0.193204139609145428706399053432147174630409003914286382793775492150589726686"), boost::lexical_cast("-0.288882596566965646248412500982233298131143563043534259497129296256293483504"), boost::lexical_cast("0.0652829528487728169228310791986957488203917428559614412596510130561953369929"), boost::lexical_cast("0.190146714007122982348489311658602051795950125817433669687815606055254287820"), boost::lexical_cast("-0.0396661765557909444838436675189620066838174282068373680544974535292838687668"), boost::lexical_cast("-0.111120936037231693365671032467405860885862376216591412050565788400539631609"), boost::lexical_cast("0.0338771439235076862085481784443352377086474468741126536946319599123012785905"), boost::lexical_cast("0.0547805505845076126891379031258187910860941599742276856424484536408030091303"), boost::lexical_cast("-0.0257670073284399625859452575426982639220364163482534013839683682541716280711"), boost::lexical_cast("-0.0208100501696930816778848342467700016205465795136489904099616617271926101264"), boost::lexical_cast("0.0150839180278359023632927446017032273624489282330562771623396889036950783790"), boost::lexical_cast("0.00510100036040754316970886018556531472480106652734422205552663106916575853665"), boost::lexical_cast("-0.00648773456031574499518168314921869081695584563938882640792896746945184786140"), boost::lexical_cast("-0.000241756490761624281166722532630017960522994699581453522332941192889131156009"), boost::lexical_cast("0.00194332398038221154176491233254108744101142486557953140145230261789465341230"), boost::lexical_cast("-0.000373482354137616992009809421364541461138763096803025662574022673555831120585"), boost::lexical_cast("-0.000359565244362468812164962007590980885819420245408409030562748046672838761659"), boost::lexical_cast("0.000155896489920599747947165824122710881625556705962549591522860363042830623991"), boost::lexical_cast("0.0000257926991553189368092586241761685591294404236876734070916011973700950042214"), boost::lexical_cast("-0.0000281332962660478136475532477707847866579144387629378890426725562075302388539"), boost::lexical_cast("0.00000336298718173757980312484521042017747213484665586407818718630450150330033976"), boost::lexical_cast("0.00000181127040794057708376851091228584116057708592533750785059029068086553957632"), boost::lexical_cast("-0.000000631688232588166442120159729951765765416613791512119551041664162606772181110"), boost::lexical_cast("0.0000000613335991330575202905629946028978860198919045088539651217384559505804672173")}; } } if constexpr (p == 16) { @@ -317,8 +320,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.a2047f25eec85da6e57cd7f20965p-9Q, 0x1.1df6c86cbec60472edd73314093ap-5Q, 0x1.520d391a9410689a221d2a40ed0cp-3Q, 0x1.b8a3e5feb48792faed491d08e637p-2Q, 0x1.465391b4659339393dc6b44dd0b9p-1Q, 0x1.c2db72f84c20394e90d8314fee8dp-2Q, -0x1.6f9ed69c399c6d957cef0caf36cp-4Q, -0x1.4ee9af39c16ebfbef0c302e6791dp-2Q, -0x1.c96973b93bd864088cf77c5363e8p-6Q, 0x1.b084bf1dc763ab7d34b03cf7014cp-3Q, 0x1.bff160aba4bc2b81b5cb21d8ed3dp-6Q, -0x1.0f21999627c5eb1bdc396cd5510bp-3Q, -0x1.98ed2d2871d09c2ff301236b3aa5p-8Q, 0x1.36fc54ec8b1065ad541d9561e805p-4Q, -0x1.f159dcb973ff3c971dea81777e8cp-8Q, -0x1.2e3093b602a5114cced31fb3d21p-5Q, 0x1.516f07b10e2bfeeb35e5d488972dp-7Q, 0x1.ca8c3dcce54c309c6bfdafe5b818p-7Q, -0x1.ca18fbf2cc14161cd462d6382e8dp-8Q, -0x1.dda9bb9568c150b5b1b563e2a704p-9Q, 0x1.99ff0c3f2ed80a696d3f49d1ae83p-9Q, 0x1.abb6031610512ba452ab2c15607bp-12Q, -0x1.ed5dcd1b49a3f3c23377158c2ae9p-11Q, 0x1.df29e5ea1284520ed9350c7d7e2fp-14Q, 0x1.6e8e301063e5a66bc2dcbb672407p-13Q, -0x1.0000dea4283e8e4f97e320b5edbp-14Q, -0x1.d3f0626b575af7e0f5c7b70618f9p-17Q, 0x1.7c64ba15d23464b7681824c41ca1p-17Q, -0x1.1821ad345e7bfc3ef33cc03c406ap-20Q, -0x1.8b555407022a1683907685f46c79p-21Q, 0x1.efcebf5a99b7b789a7792201843ep-23Q, -0x1.6a61bcee28102f153c8290cebfbbp-26Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00318922092534773802976954756464595868706708675013142876787587817778694863119"), boost::lexical_cast("0.0349077143236733464103014722402302000921824143050398414614005464773763780013"), boost::lexical_cast("0.165064283488853117899125273056113481158483500234272324021359282902034099572"), boost::lexical_cast("0.430312722846003813740392542435768462063397047803698677392464629118864929936"), boost::lexical_cast("0.637356332083788898631985241299603053649859594081419812596775159322552430035"), boost::lexical_cast("0.440290256886356900039086916357167928852780303513527257878988432216501129849"), boost::lexical_cast("-0.0897510894024896428571871807744259743065924744558266014962471841522684784655"), boost::lexical_cast("-0.327063310527917704646290567568911964175722891822881242814172353116733610255"), boost::lexical_cast("-0.0279182081330282766826451959502687320433997121917473604153547976243684979156"), boost::lexical_cast("0.211190693947104288720968016326883790092849142616767943925104282659239340555"), boost::lexical_cast("0.0273402637527160413648524575720161796542902781950713022023150026811811035864"), boost::lexical_cast("-0.132388305563810390450047414775649337509228781770602797879854902742212569323"), boost::lexical_cast("-0.00623972275247487176567450339412002586544465631167876099076145808663824556181"), boost::lexical_cast("0.0759242360442763158214849874394142246153040594610094335194031399951322105236"), boost::lexical_cast("-0.00758897436885773763849489086463699579658697514499092540009716094367144606278"), boost::lexical_cast("-0.0368883976917301423335266632089455431471874842970673083106406876512904740900"), boost::lexical_cast("0.0102976596409559694116500058007661690052885626580366220885414734497334909977"), boost::lexical_cast("0.0139937688598287310295045187367032972640984029172786898849010078360486452906"), boost::lexical_cast("-0.00699001456341391667028424953651728833805785619964646907811575967502711102002"), boost::lexical_cast("-0.00364427962149838993216900054093362938705533397335310866884121504669938973849"), boost::lexical_cast("0.00312802338120626883166120255985467876782147190619360811745036081031020620657"), boost::lexical_cast("0.000407896980849712836241747032340609578243195297231054671507139711098341190969"), boost::lexical_cast("-0.000941021749359567588926645395363587540775474721673448050925027367949065706153"), boost::lexical_cast("0.000114241520038722392644022809955566294583968434493647265287709142315097418924"), boost::lexical_cast("0.000174787245225338180380175863766074687498602472861539989797195359589183047664"), boost::lexical_cast("-0.0000610359662141093583516236915052221281195725998196591914396172281391485128503"), boost::lexical_cast("-0.0000139456689882088934519907831199840198232527356919867533540870797045644631590"), boost::lexical_cast("0.0000113366086612762585875884876288653699751947106820375366175784342881379088583"), boost::lexical_cast("-0.00000104357134231160650152545473726261540488747893063567647154603268028625910132"), boost::lexical_cast("-0.000000736365678545120551209969571972556364658544554584166332743356923285383067848"), boost::lexical_cast("0.000000230878408685754586640541273294200612130630673586665552537254486473108851937"), boost::lexical_cast("-0.0000000210933963010074309700057262360348990683629758459160530774534994952533728279")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00318922092534773802976954756464595868706708675013142876787587817778694863119"), boost::lexical_cast("0.0349077143236733464103014722402302000921824143050398414614005464773763780013"), boost::lexical_cast("0.165064283488853117899125273056113481158483500234272324021359282902034099572"), boost::lexical_cast("0.430312722846003813740392542435768462063397047803698677392464629118864929936"), boost::lexical_cast("0.637356332083788898631985241299603053649859594081419812596775159322552430035"), boost::lexical_cast("0.440290256886356900039086916357167928852780303513527257878988432216501129849"), boost::lexical_cast("-0.0897510894024896428571871807744259743065924744558266014962471841522684784655"), boost::lexical_cast("-0.327063310527917704646290567568911964175722891822881242814172353116733610255"), boost::lexical_cast("-0.0279182081330282766826451959502687320433997121917473604153547976243684979156"), boost::lexical_cast("0.211190693947104288720968016326883790092849142616767943925104282659239340555"), boost::lexical_cast("0.0273402637527160413648524575720161796542902781950713022023150026811811035864"), boost::lexical_cast("-0.132388305563810390450047414775649337509228781770602797879854902742212569323"), boost::lexical_cast("-0.00623972275247487176567450339412002586544465631167876099076145808663824556181"), boost::lexical_cast("0.0759242360442763158214849874394142246153040594610094335194031399951322105236"), boost::lexical_cast("-0.00758897436885773763849489086463699579658697514499092540009716094367144606278"), boost::lexical_cast("-0.0368883976917301423335266632089455431471874842970673083106406876512904740900"), boost::lexical_cast("0.0102976596409559694116500058007661690052885626580366220885414734497334909977"), boost::lexical_cast("0.0139937688598287310295045187367032972640984029172786898849010078360486452906"), boost::lexical_cast("-0.00699001456341391667028424953651728833805785619964646907811575967502711102002"), boost::lexical_cast("-0.00364427962149838993216900054093362938705533397335310866884121504669938973849"), boost::lexical_cast("0.00312802338120626883166120255985467876782147190619360811745036081031020620657"), boost::lexical_cast("0.000407896980849712836241747032340609578243195297231054671507139711098341190969"), boost::lexical_cast("-0.000941021749359567588926645395363587540775474721673448050925027367949065706153"), boost::lexical_cast("0.000114241520038722392644022809955566294583968434493647265287709142315097418924"), boost::lexical_cast("0.000174787245225338180380175863766074687498602472861539989797195359589183047664"), boost::lexical_cast("-0.0000610359662141093583516236915052221281195725998196591914396172281391485128503"), boost::lexical_cast("-0.0000139456689882088934519907831199840198232527356919867533540870797045644631590"), boost::lexical_cast("0.0000113366086612762585875884876288653699751947106820375366175784342881379088583"), boost::lexical_cast("-0.00000104357134231160650152545473726261540488747893063567647154603268028625910132"), boost::lexical_cast("-0.000000736365678545120551209969571972556364658544554584166332743356923285383067848"), boost::lexical_cast("0.000000230878408685754586640541273294200612130630673586665552537254486473108851937"), boost::lexical_cast("-0.0000000210933963010074309700057262360348990683629758459160530774534994952533728279")}; } } if constexpr (p == 17) { @@ -336,8 +339,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.25d68f81bd86c306bc9043f43f4p-9Q, 0x1.a9bea4085cef3d6d79a074d9709ep-6Q, 0x1.0cba6633a3a6d489f4c961323b24p-3Q, 0x1.7b3d3861245d02709eb04b0b2b39p-2Q, 0x1.38d48c64aa0daf396243783e95bep-1Q, 0x1.0960af0f4068e5ac2ea6e7c9135p-1Q, 0x1.bf874a24b1d55da571e39f2bf7e7p-6Q, -0x1.50335073492d1d5e6945d8cdee28p-2Q, -0x1.0346bb1b97633ba3dcc115a9814cp-3Q, 0x1.9417930ab08a311830b19e500034p-3Q, 0x1.9e403f27b713f2db7263ac22d15fp-4Q, -0x1.03b7f2067576f3b2927e9c5889d3p-3Q, -0x1.d3b162866891a8d294e6e9eb979p-5Q, 0x1.4c35ca8307eb62387847e8508ae5p-4Q, 0x1.6d90b88bab05f824bb4e728b7a1p-6Q, -0x1.80637c4a935c7dbdd09fd2c6d8fdp-5Q, -0x1.acbb0e1b24a7711aad0c2cc58d1fp-9Q, 0x1.7477f35c89772c79eec161a3cdd2p-6Q, -0x1.8ed9cce7691caca1362d6d7abefcp-9Q, -0x1.19e6894a383d0a23e4d18574889p-7Q, 0x1.85057173113925897d4027a40b6ep-9Q, 0x1.2d9fa2834b37aecc772ff5c2d7b1p-9Q, -0x1.78a90e5fc8eeb8c9dbcf2179c3bbp-10Q, -0x1.58126708ae49d0421a9c690b913dp-12Q, 0x1.ccd01a3d65144c8ab80302b0f5dbp-12Q, -0x1.adaa9541cd34139a00a6638e9bf6p-16Q, -0x1.5822674fd0b1a40e647125cde434p-14Q, 0x1.85029b61ff0fb98b3294c269c9e6p-16Q, 0x1.d5219c45df32dc63e76e89984d9dp-18Q, -0x1.2e63809757f52cc8ed09e415ace1p-18Q, 0x1.43e648c7ce72f3a94ea0d55898bap-22Q, 0x1.3d94aa0876b2cc113a8ea22e3eecp-22Q, -0x1.69ce4aed2f58e6ecb8a211f55ad1p-24Q, 0x1.f36b16a008a288af85eb1e1cec02p-28Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00224180700103731285353596267707443691406219188056037073325053118133419193342"), boost::lexical_cast("0.0259853937036060433891486459172078831547394452487824129439994827687663725129"), boost::lexical_cast("0.131214903307824406577550623185906996014429360925997853006700439459033631661"), boost::lexical_cast("0.370350724152641150449254819072188644947707887689680382365042593579529628290"), boost::lexical_cast("0.610996615684622818188667886767937208273709389335872629137178390490835290734"), boost::lexical_cast("0.518315764056937839325453852808596804621681719771841640243990498683288900340"), boost::lexical_cast("0.0273149704032936350043125071914758648035046981896456300367294282283271222511"), boost::lexical_cast("-0.328320748363961736090966534072506176758159769815155802467913052689676377760"), boost::lexical_cast("-0.126599752215882702874467911093382550505396626010408616210372832359164928283"), boost::lexical_cast("0.197310589565010992785404704478193014255142241413564691712228422600456673716"), boost::lexical_cast("0.101135489177470272150969985643343480219662254549966487610943796293105029624"), boost::lexical_cast("-0.126815691778286311094857112866233168038479218591501706573213748994956827246"), boost::lexical_cast("-0.0570914196316769272891123947865138232416116086984534705399014464059382899408"), boost::lexical_cast("0.0811059866541608850796588574855542920102436419095449919402067822775070461335"), boost::lexical_cast("0.0223123361781037959533913605953481375623224211409368924402086919318268997481"), boost::lexical_cast("-0.0469224383892697373330089705921140050713876812549803060287843927826168188238"), boost::lexical_cast("-0.00327095553581929378165536022217749445206952595806160939280927575122449701285"), boost::lexical_cast("0.0227336765839462703184561624478844896990671374133833949802486413275635089855"), boost::lexical_cast("-0.00304298998135463706859248263790720607863339545722509658828788135585314667137"), boost::lexical_cast("-0.00860292152032285483171370641324365991792673628427173061192098670257230281191"), boost::lexical_cast("0.00296799669152609487280648506000803826995946384654837899504419503429102573503"), boost::lexical_cast("0.00230120524215354562430205986903842360424197668018944747606476493728483725055"), boost::lexical_cast("-0.00143684530480297612622289040298038490350367453072993580956143471121236432705"), boost::lexical_cast("-0.000328132519409837971395444401752011507581240244272874970019565158958075253614"), boost::lexical_cast("0.000439465427768643677838567752731784163228924931973889217946591075762286390503"), boost::lexical_cast("-0.0000256101095665484588272989121094992022166408206153190965517841374523415859860"), boost::lexical_cast("-0.0000820480320245339183909548257628218986613627304963676433868959364213432243666"), boost::lexical_cast("0.0000231868137987459508448206820570627757210669517409189533853073478931042782802"), boost::lexical_cast("0.00000699060098507675127320454970085537862776275858590205796402748138050877941586"), boost::lexical_cast("-0.00000450594247722298819410226820637831212971357260071649994491841668706683585071"), boost::lexical_cast("0.000000301654960999455741560520759487993976347616870521764689770270618984715407855"), boost::lexical_cast("0.000000295770093331685675497990525881615136787034562892431730735463949569521998500"), boost::lexical_cast("-0.0000000842394844600268017878707129692287706841031094222279962259313341617779208118"), boost::lexical_cast("0.00000000726749296856160811087976744140903503415858171978979108889204640807029047656")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00224180700103731285353596267707443691406219188056037073325053118133419193342"), boost::lexical_cast("0.0259853937036060433891486459172078831547394452487824129439994827687663725129"), boost::lexical_cast("0.131214903307824406577550623185906996014429360925997853006700439459033631661"), boost::lexical_cast("0.370350724152641150449254819072188644947707887689680382365042593579529628290"), boost::lexical_cast("0.610996615684622818188667886767937208273709389335872629137178390490835290734"), boost::lexical_cast("0.518315764056937839325453852808596804621681719771841640243990498683288900340"), boost::lexical_cast("0.0273149704032936350043125071914758648035046981896456300367294282283271222511"), boost::lexical_cast("-0.328320748363961736090966534072506176758159769815155802467913052689676377760"), boost::lexical_cast("-0.126599752215882702874467911093382550505396626010408616210372832359164928283"), boost::lexical_cast("0.197310589565010992785404704478193014255142241413564691712228422600456673716"), boost::lexical_cast("0.101135489177470272150969985643343480219662254549966487610943796293105029624"), boost::lexical_cast("-0.126815691778286311094857112866233168038479218591501706573213748994956827246"), boost::lexical_cast("-0.0570914196316769272891123947865138232416116086984534705399014464059382899408"), boost::lexical_cast("0.0811059866541608850796588574855542920102436419095449919402067822775070461335"), boost::lexical_cast("0.0223123361781037959533913605953481375623224211409368924402086919318268997481"), boost::lexical_cast("-0.0469224383892697373330089705921140050713876812549803060287843927826168188238"), boost::lexical_cast("-0.00327095553581929378165536022217749445206952595806160939280927575122449701285"), boost::lexical_cast("0.0227336765839462703184561624478844896990671374133833949802486413275635089855"), boost::lexical_cast("-0.00304298998135463706859248263790720607863339545722509658828788135585314667137"), boost::lexical_cast("-0.00860292152032285483171370641324365991792673628427173061192098670257230281191"), boost::lexical_cast("0.00296799669152609487280648506000803826995946384654837899504419503429102573503"), boost::lexical_cast("0.00230120524215354562430205986903842360424197668018944747606476493728483725055"), boost::lexical_cast("-0.00143684530480297612622289040298038490350367453072993580956143471121236432705"), boost::lexical_cast("-0.000328132519409837971395444401752011507581240244272874970019565158958075253614"), boost::lexical_cast("0.000439465427768643677838567752731784163228924931973889217946591075762286390503"), boost::lexical_cast("-0.0000256101095665484588272989121094992022166408206153190965517841374523415859860"), boost::lexical_cast("-0.0000820480320245339183909548257628218986613627304963676433868959364213432243666"), boost::lexical_cast("0.0000231868137987459508448206820570627757210669517409189533853073478931042782802"), boost::lexical_cast("0.00000699060098507675127320454970085537862776275858590205796402748138050877941586"), boost::lexical_cast("-0.00000450594247722298819410226820637831212971357260071649994491841668706683585071"), boost::lexical_cast("0.000000301654960999455741560520759487993976347616870521764689770270618984715407855"), boost::lexical_cast("0.000000295770093331685675497990525881615136787034562892431730735463949569521998500"), boost::lexical_cast("-0.0000000842394844600268017878707129692287706841031094222279962259313341617779208118"), boost::lexical_cast("0.00000000726749296856160811087976744140903503415858171978979108889204640807029047656")}; } } if constexpr (p == 18) { @@ -355,8 +358,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.9d386358a187490511616014e787p-10Q, 0x1.3c05f73c5b367536d2be9893ed8cp-6Q, 0x1.a84c610f33b444b779a9b1758c69p-4Q, 0x1.423b3247213b88555f9f2ada7d8ap-2Q, 0x1.24c67bbcaad511453636985416f3p-1Q, 0x1.24c32fbf17436364ee6d86ce0b36p-1Q, 0x1.2d834f99026e9806c6f6c1aa6cb3p-3Q, -0x1.2cb3a51535039a741562ba69c7a8p-2Q, -0x1.bb5a5b1e13b56915364cb7d6d1bfp-3Q, 0x1.323ede758da4220dcba304aad9d9p-3Q, 0x1.562eba30ba3dac1311ece1a1884ap-3Q, -0x1.7a30ff6ce5271d64766823319bd4p-4Q, -0x1.b541d802db16d80f141c678b2993p-4Q, 0x1.09c72d78f01628c7ccd127058828p-4Q, 0x1.d35d236774d120bc0fddfe320959p-5Q, -0x1.6cc216694aaa0ced2f850c2b3eb7p-5Q, -0x1.84d84c9eacf2bae4fd091b9bdb4fp-6Q, 0x1.b4f90c6dc9841e7a702107e1aca3p-6Q, 0x1.9a65be90d86a53c665da90605941p-8Q, -0x1.ababc1ea3f978443c6511c976c7fp-7Q, 0x1.f19207685977f43b68af0530733ap-14Q, 0x1.43f78b1e4d853774466d94263915p-8Q, -0x1.2544e0deeca71abd544eac93fa45p-10Q, -0x1.5f6de508b23063ffd5522faa2f1ap-10Q, 0x1.497f3c70a07cbca34a7835790cbfp-11Q, 0x1.bfe9ba59913cd96563f593913af3p-13Q, -0x1.a098a12371c0ca3dcc2d68b00891p-13Q, -0x1.49d5efd42da901d7159610c4d152p-23Q, 0x1.39d678c2c06ae863ef3b97fa7d6p-15Q, -0x1.1de76b2193bec903a9d077f1666ep-17Q, -0x1.bf4c72e2a2d93cedea468c1c5543p-19Q, 0x1.dac907ddfd9dac76e76088418dc5p-20Q, -0x1.4a5a655290e67a67e8d8672b7916p-24Q, -0x1.f9216d4e4d83adac1cb13466b74bp-24Q, 0x1.079c6a0fc4517cae3d72b9596e6p-25Q, -0x1.58b0195a8266ce508d99fc62d4eep-29Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00157631021844076043154074492993977774767075371099166036368442986184714001537"), boost::lexical_cast("0.0192885317241463770592139171582905241995466702528849757223671483332142575124"), boost::lexical_cast("0.103588465822423596224191049193725359647069655522024167297622418469656394177"), boost::lexical_cast("0.314678941337031699057199825565257993178670619048937450949130751036740690695"), boost::lexical_cast("0.571826807766607223481858937090062341939367374313093056129532404803265328819"), boost::lexical_cast("0.571801654888651335289111999406596502566804788281852506075939526421405556433"), boost::lexical_cast("0.147223111969928141575097727108107231255786410735570138780167713584411016265"), boost::lexical_cast("-0.293654040736558744247903099498115072393571072903505323966175230801212578403"), boost::lexical_cast("-0.216480934005142971123767862566827147143793723566949240838869239366378506250"), boost::lexical_cast("0.149533975565377789350930173891366720880481669189376561026194307191290248158"), boost::lexical_cast("0.167081312763257404514931813995013474532420564635398808315225063337013902642"), boost::lexical_cast("-0.0923318841508462806042937255865945973143184800014456961207450846746206498455"), boost::lexical_cast("-0.106752246659828485593220058161498486138526640462411208391770205467847935365"), boost::lexical_cast("0.0648872162119054428194757795514191146312938211663414784613714984515877764896"), boost::lexical_cast("0.0570512477385368841209076884649962226059622612043103852460067642320755043632"), boost::lexical_cast("-0.0445261419029823247155614355974465349297147789143983359275503466820231489272"), boost::lexical_cast("-0.0237332103958600010327520958266521611019751933071349023307156579014300914190"), boost::lexical_cast("0.0266707059264705902998790863167202034320789599993607281336347152037595652919"), boost::lexical_cast("0.00626216795430570748523609314449788250199032520474501319026805231525752058555"), boost::lexical_cast("-0.0130514809466120017727763644760080716975519105450757166660613358038629139862"), boost::lexical_cast("0.000118630033858117465730174159216181908454489941745231740518561572996617939506"), boost::lexical_cast("0.00494334360546673813066552951680297483429963831336647776529520326003067700242"), boost::lexical_cast("-0.00111873266699249707280065885523865018231806048258497014551268711985227900418"), boost::lexical_cast("-0.00134059629833610662951756722825158360982304452468598664032394269120723888750"), boost::lexical_cast("0.000628465682965145712561944988542083821755102279630158287434965288076478383268"), boost::lexical_cast("0.000213581561910340688403905281434192602587320032599646652254344051060271497781"), boost::lexical_cast("-0.000198648552311747948579824541636248955492779788026401787613960521573218466250"), boost::lexical_cast("-0.000000153591712353472467506977033587671719370047242702151323658728810220957329769"), boost::lexical_cast("0.0000374123788074003818109220813803539395230429261579398503073136385132849832575"), boost::lexical_cast("-0.00000852060253744669520391925491165552302243759695622637651230591706524073534413"), boost::lexical_cast("-0.00000333263447888582188878245203334103682731150590779649843982933727956405960650"), boost::lexical_cast("0.00000176871298362761545587632873075537517641250135911405881545310061923499126827"), boost::lexical_cast("-0.0000000769163268988517614600015287853959840581739758815652511676990865187416269746"), boost::lexical_cast("-0.000000117609876702823169845098235656129256134757977769539695352814136780995583426"), boost::lexical_cast("0.0000000306883586304517480093547829493397537245017978789457449293057011634442052915"), boost::lexical_cast("-0.00000000250793445494859826719517318314712673180631714486827581994140326785823293114")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00157631021844076043154074492993977774767075371099166036368442986184714001537"), boost::lexical_cast("0.0192885317241463770592139171582905241995466702528849757223671483332142575124"), boost::lexical_cast("0.103588465822423596224191049193725359647069655522024167297622418469656394177"), boost::lexical_cast("0.314678941337031699057199825565257993178670619048937450949130751036740690695"), boost::lexical_cast("0.571826807766607223481858937090062341939367374313093056129532404803265328819"), boost::lexical_cast("0.571801654888651335289111999406596502566804788281852506075939526421405556433"), boost::lexical_cast("0.147223111969928141575097727108107231255786410735570138780167713584411016265"), boost::lexical_cast("-0.293654040736558744247903099498115072393571072903505323966175230801212578403"), boost::lexical_cast("-0.216480934005142971123767862566827147143793723566949240838869239366378506250"), boost::lexical_cast("0.149533975565377789350930173891366720880481669189376561026194307191290248158"), boost::lexical_cast("0.167081312763257404514931813995013474532420564635398808315225063337013902642"), boost::lexical_cast("-0.0923318841508462806042937255865945973143184800014456961207450846746206498455"), boost::lexical_cast("-0.106752246659828485593220058161498486138526640462411208391770205467847935365"), boost::lexical_cast("0.0648872162119054428194757795514191146312938211663414784613714984515877764896"), boost::lexical_cast("0.0570512477385368841209076884649962226059622612043103852460067642320755043632"), boost::lexical_cast("-0.0445261419029823247155614355974465349297147789143983359275503466820231489272"), boost::lexical_cast("-0.0237332103958600010327520958266521611019751933071349023307156579014300914190"), boost::lexical_cast("0.0266707059264705902998790863167202034320789599993607281336347152037595652919"), boost::lexical_cast("0.00626216795430570748523609314449788250199032520474501319026805231525752058555"), boost::lexical_cast("-0.0130514809466120017727763644760080716975519105450757166660613358038629139862"), boost::lexical_cast("0.000118630033858117465730174159216181908454489941745231740518561572996617939506"), boost::lexical_cast("0.00494334360546673813066552951680297483429963831336647776529520326003067700242"), boost::lexical_cast("-0.00111873266699249707280065885523865018231806048258497014551268711985227900418"), boost::lexical_cast("-0.00134059629833610662951756722825158360982304452468598664032394269120723888750"), boost::lexical_cast("0.000628465682965145712561944988542083821755102279630158287434965288076478383268"), boost::lexical_cast("0.000213581561910340688403905281434192602587320032599646652254344051060271497781"), boost::lexical_cast("-0.000198648552311747948579824541636248955492779788026401787613960521573218466250"), boost::lexical_cast("-0.000000153591712353472467506977033587671719370047242702151323658728810220957329769"), boost::lexical_cast("0.0000374123788074003818109220813803539395230429261579398503073136385132849832575"), boost::lexical_cast("-0.00000852060253744669520391925491165552302243759695622637651230591706524073534413"), boost::lexical_cast("-0.00000333263447888582188878245203334103682731150590779649843982933727956405960650"), boost::lexical_cast("0.00000176871298362761545587632873075537517641250135911405881545310061923499126827"), boost::lexical_cast("-0.0000000769163268988517614600015287853959840581739758815652511676990865187416269746"), boost::lexical_cast("-0.000000117609876702823169845098235656129256134757977769539695352814136780995583426"), boost::lexical_cast("0.0000000306883586304517480093547829493397537245017978789457449293057011634442052915"), boost::lexical_cast("-0.00000000250793445494859826719517318314712673180631714486827581994140326785823293114")}; } } if constexpr (p == 19) { @@ -374,8 +377,8 @@ constexpr std::array daubechies_scaling_filter() return {0x1.22a1917fed859e160446bb7b167ap-10Q, 0x1.d3f6896603bf4308e8ccc5a30641p-7Q, 0x1.4cea4765b11499a3de1dc5fdc4b7p-4Q, 0x1.0ebbd74f124f24e597d3a5bc26dbp-2Q, 0x1.0c82ecc4163915332b81143283e8p-1Q, 0x1.34129e60b6e2fef58b66c45f7099p-1Q, 0x1.0b280be54f8b6ad2d41e0f33532ep-2Q, -0x1.d32194b53c8046c9a7b9b8714cebp-3Q, -0x1.24b2e1dd4c73df34e82deb7bb6c6p-2Q, 0x1.31c6940f7edfa2f8c6ddc9cd2aefp-4Q, 0x1.b2e46c16840423c52b33ff7476eep-3Q, -0x1.12957a28f5bb337e3e66ea6f23e6p-5Q, -0x1.246cd3943959a8c450bf5ca92b86p-3Q, 0x1.c3f126f461d985ee9de87f3424e5p-6Q, 0x1.63f8568e9e6ec0d34220dce2e186p-4Q, -0x1.b2323dbfdcbe6e4ed8b2320fb129p-6Q, -0x1.7629cb842f99ab236f8e908d21c2p-5Q, 0x1.6248a775ca65f9a99ecab76ed61p-6Q, 0x1.3d72f2476d00410fe80cb42bd72bp-6Q, -0x1.ca5f1bf2f3243b0308970f1f944p-7Q, -0x1.807e9f533b2172c38f0c60523009p-8Q, 0x1.cd6c23ae5d8f94f8e6c997306168p-8Q, 0x1.93274e99dc9b4cfea213c9163decp-11Q, -0x1.6043462e3e519b97ce417a7ac3b3p-9Q, 0x1.66698fcf3c2497984ab865b5b6acp-12Q, 0x1.81c5be1857465de5530984af43cbp-11Q, -0x1.1156b7a432a662bbb70ff712e064p-12Q, -0x1.054e8a6af00d6f29e88cd98738bep-13Q, 0x1.6d608dedb3cf6080fb9e6ef72893p-14Q, 0x1.56a78fb9bd526ca09fc616b1b8ap-18Q, -0x1.172d0353b3f11fc1e8818be3f7a7p-16Q, 0x1.941ff236730f0886ee4074951d94p-19Q, 0x1.9b39878b9566344204396825f773p-20Q, -0x1.7070fedc9cdecfffd4c6dc5d1fe5p-21Q, 0x1.f1373b9dbeafa1390279c531a649p-27Q, 0x1.8e4f570c878dd84d17b935d5f69ap-25Q, -0x1.7f97c3aa5d9df8ae90e909fae15p-27Q, 0x1.dc770dc2ed00b68b9c525506b211p-31Q}; } #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00110866976318171057109915419520971516424529967777343593213545529038383924770"), boost::lexical_cast("0.0142810984507643973743988915295019923474566344216366595787071599110771075191"), boost::lexical_cast("0.0812781132654595506529630678490162483984497997102862036649772686406019150041"), boost::lexical_cast("0.264388431740896784674810038028942687386237780721192071841738581477351352687"), boost::lexical_cast("0.524436377464654915336057597548406462604463364104807211639316023628078258263"), boost::lexical_cast("0.601704549127537894886707713592180262053656563958596329331393143392083219576"), boost::lexical_cast("0.260894952651038829287245667531052832417267310130190773992521389876582446158"), boost::lexical_cast("-0.228091394215482646374632577605463720709378723708642590953482241776619580080"), boost::lexical_cast("-0.285838631755826241854597569502898423721735609558833514992211937357294676905"), boost::lexical_cast("0.0746522697081032663676343311187881900586586614973190965636539995134773660042"), boost::lexical_cast("0.212349743306278488809060856705982419707707420087883944841690869803668388649"), boost::lexical_cast("-0.0335185419023028786816938841878573150697784507523896681981403258573481442235"), boost::lexical_cast("-0.142785695038736574977960273162611281299849770615242850862756243341853036336"), boost::lexical_cast("0.0275843506256286687501474352016219865537447459696342308076281830983836771416"), boost::lexical_cast("0.0869067555558122324884764542880844303478520800246819275964035297492772454078"), boost::lexical_cast("-0.0265012362501230408990183584367638736107506801768674780817134564719233152649"), boost::lexical_cast("-0.0456742262772309080564544421429579601793893573211563005088010978423298835500"), boost::lexical_cast("0.0216237674095850471303298425717237235431809706785875254257102081949907179885"), boost::lexical_cast("0.0193755498891761276463709435445799981449688509587582554640696372421676825877"), boost::lexical_cast("-0.0139883886785351416325040123524866252191681386745309583680836668669699906947"), boost::lexical_cast("-0.00586692228101217472658449343605437377381460834080875817737276517150642852313"), boost::lexical_cast("0.00704074736710524315301451120740062010940168989766538307822939808316234678585"), boost::lexical_cast("0.000768954359257548355974913914867395516347794708603940612954642251648623392855"), boost::lexical_cast("-0.00268755180070158200395736385507039863653403892098247829017026719960594838510"), boost::lexical_cast("0.000341808653458595776565165729046380813521421484881951725779403154942704074894"), boost::lexical_cast("0.000735802520505435207026048190539728187518317579277990485818949491732987619374"), boost::lexical_cast("-0.000260676135678628005731831513089752279038393936207356340861354755942716317598"), boost::lexical_cast("-0.000124600791734158775344978440890165399031734141334198090475759204698349203833"), boost::lexical_cast("0.0000871127046721992296541686238819112826841293389328208351772944342009756120059"), boost::lexical_cast("0.00000510595048707388605304922280993423157368736799210628266938926416431155785903"), boost::lexical_cast("-0.0000166401762971549445462067771989919863033367560881201810873914492293692424442"), boost::lexical_cast("0.00000301096431629652633969533445472594363264579893816242716885138250008132314822"), boost::lexical_cast("0.00000153193147669119306393183238108663603120312303272347746362414105936220672489"), boost::lexical_cast("-0.000000686275565776914270188355461348673285445274075277139241175841882669179558939"), boost::lexical_cast("0.0000000144708829879784454207821986329161542055167357407136783431616765021249777078"), boost::lexical_cast("0.0000000463693777578260422343085772821094889887174829108596229664932070020615712517"), boost::lexical_cast("-0.0000000111640206703582581639050476914247258646497579928447368224607655958423915203"), boost::lexical_cast("0.000000000866684883899761935032301354078212462728974219027305931912284064941409400037")}; + if constexpr (std::is_same_v) { + return {boost::lexical_cast("0.00110866976318171057109915419520971516424529967777343593213545529038383924770"), boost::lexical_cast("0.0142810984507643973743988915295019923474566344216366595787071599110771075191"), boost::lexical_cast("0.0812781132654595506529630678490162483984497997102862036649772686406019150041"), boost::lexical_cast("0.264388431740896784674810038028942687386237780721192071841738581477351352687"), boost::lexical_cast("0.524436377464654915336057597548406462604463364104807211639316023628078258263"), boost::lexical_cast("0.601704549127537894886707713592180262053656563958596329331393143392083219576"), boost::lexical_cast("0.260894952651038829287245667531052832417267310130190773992521389876582446158"), boost::lexical_cast("-0.228091394215482646374632577605463720709378723708642590953482241776619580080"), boost::lexical_cast("-0.285838631755826241854597569502898423721735609558833514992211937357294676905"), boost::lexical_cast("0.0746522697081032663676343311187881900586586614973190965636539995134773660042"), boost::lexical_cast("0.212349743306278488809060856705982419707707420087883944841690869803668388649"), boost::lexical_cast("-0.0335185419023028786816938841878573150697784507523896681981403258573481442235"), boost::lexical_cast("-0.142785695038736574977960273162611281299849770615242850862756243341853036336"), boost::lexical_cast("0.0275843506256286687501474352016219865537447459696342308076281830983836771416"), boost::lexical_cast("0.0869067555558122324884764542880844303478520800246819275964035297492772454078"), boost::lexical_cast("-0.0265012362501230408990183584367638736107506801768674780817134564719233152649"), boost::lexical_cast("-0.0456742262772309080564544421429579601793893573211563005088010978423298835500"), boost::lexical_cast("0.0216237674095850471303298425717237235431809706785875254257102081949907179885"), boost::lexical_cast("0.0193755498891761276463709435445799981449688509587582554640696372421676825877"), boost::lexical_cast("-0.0139883886785351416325040123524866252191681386745309583680836668669699906947"), boost::lexical_cast("-0.00586692228101217472658449343605437377381460834080875817737276517150642852313"), boost::lexical_cast("0.00704074736710524315301451120740062010940168989766538307822939808316234678585"), boost::lexical_cast("0.000768954359257548355974913914867395516347794708603940612954642251648623392855"), boost::lexical_cast("-0.00268755180070158200395736385507039863653403892098247829017026719960594838510"), boost::lexical_cast("0.000341808653458595776565165729046380813521421484881951725779403154942704074894"), boost::lexical_cast("0.000735802520505435207026048190539728187518317579277990485818949491732987619374"), boost::lexical_cast("-0.000260676135678628005731831513089752279038393936207356340861354755942716317598"), boost::lexical_cast("-0.000124600791734158775344978440890165399031734141334198090475759204698349203833"), boost::lexical_cast("0.0000871127046721992296541686238819112826841293389328208351772944342009756120059"), boost::lexical_cast("0.00000510595048707388605304922280993423157368736799210628266938926416431155785903"), boost::lexical_cast("-0.0000166401762971549445462067771989919863033367560881201810873914492293692424442"), boost::lexical_cast("0.00000301096431629652633969533445472594363264579893816242716885138250008132314822"), boost::lexical_cast("0.00000153193147669119306393183238108663603120312303272347746362414105936220672489"), boost::lexical_cast("-0.000000686275565776914270188355461348673285445274075277139241175841882669179558939"), boost::lexical_cast("0.0000000144708829879784454207821986329161542055167357407136783431616765021249777078"), boost::lexical_cast("0.0000000463693777578260422343085772821094889887174829108596229664932070020615712517"), boost::lexical_cast("-0.0000000111640206703582581639050476914247258646497579928447368224607655958423915203"), boost::lexical_cast("0.000000000866684883899761935032301354078212462728974219027305931912284064941409400037")}; } } } From bd7ded88151cd011d563ea85a35c566421b3e27e Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 21 Feb 2020 19:49:59 +0000 Subject: [PATCH 049/104] Restrict testing to p values we can actually support. [CI SKIP] --- test/daubechies_scaling_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index f4362aebc..b7d832e09 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -466,7 +466,7 @@ int main() #ifdef BOOST_HAS_FLOAT128 - boost::hana::for_each(std::make_index_sequence<23>(), [&](auto i){ + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ test_filter_ulp_distance(); test_filter_ulp_distance(); test_filter_ulp_distance(); From 65d27cfea9c7f12fd996f34077261220621ec9d3 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sat, 22 Feb 2020 11:46:25 -0500 Subject: [PATCH 050/104] Use DenseRange rather than custom argument generator in benchmarks [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 58 ++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 7437ee6e8..30feb0c70 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -14,14 +14,6 @@ #include #include -static void UnitStep(benchmark::internal::Benchmark* b) -{ - for (int i = 7; i <= 25; ++i) - { - b->Args({i}); - } -} - double exponential(benchmark::IterationCount j) { return std::pow(2, j); @@ -44,9 +36,9 @@ void DyadicGrid(benchmark::State & state) state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); -//BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); -//BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->Apply(UnitStep)->Unit(benchmark::kMillisecond)->Complexity(exponential); +BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->DenseRange(3, 22, 1)->Unit(benchmark::kMillisecond)->Complexity(exponential); +//BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->DenseRange(3, 22, 1)->Unit(benchmark::kMillisecond)->Complexity(exponential); +//BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->DenseRange(3,22,1)->Unit(benchmark::kMillisecond)->Complexity(exponential); template @@ -338,6 +330,50 @@ void CardinalQuinticHermiteAOS(benchmark::State & state) BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); +template +void SepticHermite(benchmark::State & state) +{ + using boost::math::interpolators::detail::septic_hermite_detail; + auto n = state.range(0); + std::vector x(n); + std::vector y(n); + std::vector dydx(n); + std::vector d2ydx2(n); + std::vector d3ydx3(n); + std::random_device rd; + boost::random::uniform_real_distribution dis(Real(0), Real(1)); + Real x0 = dis(rd); + x[0] = x0; + for (size_t i = 1; i < n; ++i) + { + x[i] = x[i-1] + dis(rd); + } + for (size_t i = 0; i < y.size(); ++i) + { + y[i] = dis(rd); + dydx[i] = dis(rd); + d2ydx2[i] = dis(rd); + d3ydx3[i] = dis(rd); + } + + Real xf = x.back(); + + auto sh = septic_hermite_detail(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); + Real t = x0; + for (auto _ : state) + { + benchmark::DoNotOptimize(sh(t)); + t += xf/128; + if (t >= xf) + { + t = x0; + } + } + state.SetComplexityN(state.range(0)); +} + +BENCHMARK_TEMPLATE(SepticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); + template void CardinalSepticHermite(benchmark::State & state) From 77552650299fa9b33c0e8c7b60317fff0d465a48 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sat, 22 Feb 2020 14:04:05 -0500 Subject: [PATCH 051/104] Septic hermite derivative. [CI SKIP] --- .../detail/septic_hermite_detail.hpp | 138 +++++++++++------- .../math/interpolators/septic_hermite.hpp | 44 ++++-- test/septic_hermite_test.cpp | 39 +++-- 3 files changed, 147 insertions(+), 74 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 87ceffe23..8a5630378 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -14,24 +14,30 @@ public: septic_hermite_detail(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx, RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3) : x_{std::move(x)}, y_{std::move(y)}, dydx_{std::move(dydx)}, d2ydx2_{std::move(d2ydx2)}, d3ydx3_{std::move(d3ydx3)} { - if (x_.size() != y_.size()) { + if (x_.size() != y_.size()) + { throw std::domain_error("Number of abscissas must = number of ordinates."); } - if (x_.size() != dydx_.size()) { + if (x_.size() != dydx_.size()) + { throw std::domain_error("Numbers of derivatives must = number of abscissas."); } - if (x_.size() != d2ydx2_.size()) { + if (x_.size() != d2ydx2_.size()) + { throw std::domain_error("Number of second derivatives must equal number of abscissas."); } - if (x_.size() != d3ydx3_.size()) { + if (x_.size() != d3ydx3_.size()) + { throw std::domain_error("Number of third derivatives must equal number of abscissas."); } - if (x_.size() < 2) { + if (x_.size() < 2) + { throw std::domain_error("At least 2 abscissas are required."); } Real x0 = x_[0]; - for (decltype(x_.size()) i = 1; i < x_.size(); ++i) { + for (decltype(x_.size()) i = 1; i < x_.size(); ++i) + { Real x1 = x_[i]; if (x1 <= x0) { @@ -41,7 +47,8 @@ public: } } - void push_back(Real x, Real y, Real dydx, Real d2ydx2, Real d3ydx3) { + void push_back(Real x, Real y, Real dydx, Real d2ydx2, Real d3ydx3) + { using std::abs; using std::isnan; if (x <= x_.back()) { @@ -54,17 +61,19 @@ public: d3ydx3_.push_back(d3ydx3); } - Real operator()(Real x) const { - if (x < x_[0] || x > x_.back()) { + Real operator()(Real x) const + { + if (x < x_[0] || x > x_.back()) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x_[0] << ", " << x_.back() << "]"; throw std::domain_error(oss.str()); } - // We need t := (x-x_k)/(x_{k+1}-x_k) \in [0,1) for this to work. - // Sadly this neccessitates this loathesome check, otherwise we get t = 1 at x = xf. - if (x == x_.back()) { + // t \in [0, 1) + if (x == x_.back()) + { return y_.back(); } @@ -72,6 +81,27 @@ public: auto i = std::distance(x_.begin(), it) -1; Real x0 = *(it-1); Real x1 = *it; + Real dx = (x1-x0); + Real t = (x-x0)/dx; + + // See: + // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m + Real t2 = t*t; + Real t3 = t2*t; + Real t4 = t3*t; + Real dx2 = dx*dx/2; + Real dx3 = dx2*dx/3; + + Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); + Real z4 = -s; + Real z0 = s + 1; + Real z1 = t*(1 + t3*(-20 + t*(45 + t*(-36 + 10*t)))); + Real z2 = t2*(1 + t2*(-10 + t*(20 + t*(-15 + 4*t)))); + Real z3 = t3*(1 + t*(-4 + t*(6 + t*(-4 + t)))); + Real z5 = t4*(-15 + t*(39 + t*(-34 + 10*t))); + Real z6 = t4*(5 + t*(-14 + t*(13 - 4*t))); + Real z7 = t4*(-1 + t*(3 + t*(-3+t))); + Real y0 = y_[i]; Real y1 = y_[i+1]; // Velocity: @@ -84,45 +114,21 @@ public: Real j0 = d3ydx3_[i]; Real j1 = d3ydx3_[i+1]; - Real dx = (x1-x0); - Real t = (x-x0)/dx; - - // See: - // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m - Real t2 = t*t; - Real t3 = t2*t; - Real t4 = t3*t; - Real t5 = t4*t; - Real t6 = t5*t; - Real t7 = t6*t; - Real dx2 = dx*dx; - Real dx3 = dx2*dx; - - - Real s = t4*(-35 + t*(84 + t*(-70 + 20*t))); - Real z4 = -s; - Real z0 = s + 1; - Real z1 = 10*t7 - 36*t6 + 45*t5 - 20*t4 + t; - Real z2 = 2*t7 - 15*t6/2 + 10*t5 - 5*t4 + t2/2; - Real z3 = t7/6 - 2*t6/3 + t5 - 2*t4/3 + t3/6; - - Real z5 = 10*t7 - 34*t6 + 39*t5 - 15*t4; - Real z6 = -2*t7 + 13*t6/2 - 7*t5 + 5*t4/2; - Real z7 = t7/6 - t6/2 + t5/2 - t4/6; - - Real y = z0*y0 + z1*dx*v0 + z2*dx2*a0 + z3*dx3*j0 + z4*y1 + z5*dx*v1 + z6*dx2*a1 + z7*dx3*j1; - return y; + return z0*y0 + z4*y1 + (z1*v0 + z5*v1)*dx + (z2*a0 + z6*a1)*dx2 + (z3*j0 + z7*j1)*dx3; } - Real prime(Real x) const { - if (x < x_[0] || x > x_.back()) { + Real prime(Real x) const + { + if (x < x_[0] || x > x_.back()) + { std::ostringstream oss; oss.precision(std::numeric_limits::digits10+3); oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" << x_[0] << ", " << x_.back() << "]"; throw std::domain_error(oss.str()); } - if (x == x_.back()) { + if (x == x_.back()) + { return dydx_.back(); } @@ -130,13 +136,36 @@ public: auto i = std::distance(x_.begin(), it) -1; Real x0 = *(it-1); Real x1 = *it; - Real s0 = dydx_[i]; - Real s1 = dydx_[i+1]; + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real v0 = dydx_[i]; + Real v1 = dydx_[i+1]; + Real a0 = d2ydx2_[i]; + Real a1 = d2ydx2_[i+1]; + Real j0 = d3ydx3_[i]; + Real j1 = d3ydx3_[i+1]; + Real dx = x1 - x0; + Real t = (x-x0)/dx; + Real t2 = t*t; + Real t3 = t2*t; + Real z0 = 140*t3*(1 + t*(-3 + t*(3 - t))); + Real z1 = 1 + t3*(-80 + t*(225 + t*(-216 + 70*t))); + Real z2 = t3*(-60 + t*(195 + t*(-204 + 70*t))); + Real z3 = 1 + t2*(-20 + t*(50 + t*(-45 + 14*t))); + Real z4 = t2*(10 + t*(-35 + t*(39 - 14*t))); + Real z5 = 3 + t*(-16 + t*(30 + t*(-24 + 7*t))); + Real z6 = t*(-4 + t*(15 + t*(-18 + 7*t))); - // Ridiculous linear interpolation. Fine for now: - Real numerator = s0*(x1-x) + s1*(x-x0); - Real denominator = x1 - x0; - return numerator/denominator; + Real dydx = z0*(y1-y0)/dx; + dydx += z1*v0 + z2*v1; + dydx += (x-x0)*(z3*a0 + z4*a1); + dydx += (x-x0)*(x-x0)*(z5*j0 + z6*j1)/6; + return dydx; + } + + inline Real double_prime(Real x) const + { + return std::numeric_limits::quiet_NaN(); } @@ -152,7 +181,6 @@ public: } - private: RandomAccessContainer x_; RandomAccessContainer y_; @@ -289,6 +317,11 @@ public: return (v0+v1)*inv_dx_/2; } + inline Real double_prime(Real x) const + { + return std::numeric_limits::quiet_NaN(); + } + private: RandomAccessContainer y_; RandomAccessContainer dy_; @@ -395,6 +428,11 @@ public: return std::numeric_limits::quiet_NaN(); } + inline Real double_prime(Real x) const + { + return std::numeric_limits::quiet_NaN(); + } + private: RandomAccessContainer data_; Real x0_; diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp index 77ebe3024..d65b776db 100644 --- a/include/boost/math/interpolators/septic_hermite.hpp +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -8,23 +8,31 @@ namespace boost::math::interpolators { template -class septic_hermite { +class septic_hermite +{ public: using Real = typename RandomAccessContainer::value_type; septic_hermite(RandomAccessContainer && x, RandomAccessContainer && y, RandomAccessContainer && dydx, - RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3) + RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3) : impl_(std::make_shared>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3))) {} - Real operator()(Real x) const { + inline Real operator()(Real x) const + { return impl_->operator()(x); } - Real prime(Real x) const { + inline Real prime(Real x) const + { return impl_->prime(x); } + inline Real double_prime(Real x) const + { + return impl_->double_prime(x); + } + friend std::ostream& operator<<(std::ostream & os, const septic_hermite & m) { os << *m.impl_; @@ -36,23 +44,31 @@ private: }; template -class cardinal_septic_hermite { +class cardinal_septic_hermite +{ public: using Real = typename RandomAccessContainer::value_type; cardinal_septic_hermite(RandomAccessContainer && y, RandomAccessContainer && dydx, - RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3, Real x0, Real dx) + RandomAccessContainer && d2ydx2, RandomAccessContainer && d3ydx3, Real x0, Real dx) : impl_(std::make_shared>( std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx)) {} - Real operator()(Real x) const { + inline Real operator()(Real x) const + { return impl_->operator()(x); } - Real prime(Real x) const { + inline Real prime(Real x) const + { return impl_->prime(x); } + inline Real double_prime(Real x) const + { + return impl_->double_prime(x); + } + private: std::shared_ptr> impl_; }; @@ -67,14 +83,22 @@ public: : impl_(std::make_shared>(std::move(data), x0, dx)) {} - Real operator()(Real x) const { + inline Real operator()(Real x) const + { return impl_->operator()(x); } - Real prime(Real x) const { + inline Real prime(Real x) const + { return impl_->prime(x); } + inline Real double_prime(Real x) const + { + return impl_->double_prime(x); + } + + private: std::shared_ptr> impl_; }; diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index d76ea14e5..c4f6e0289 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -31,7 +31,8 @@ void test_constant() std::vector dydx(x.size(), 0); std::vector d2ydx2(x.size(), 0); std::vector d3ydx3(x.size(), 0); - for (auto & t : y) { + for (auto & t : y) + { t = 7; } @@ -85,7 +86,7 @@ void test_linear() for (Real t = 0; t <= 9; t += 0.25) { CHECK_ULP_CLOSE(Real(t), sh(t), 2); - //CHECK_ULP_CLOSE(Real(1), qh.prime(t), 2); + CHECK_ULP_CLOSE(Real(1), sh.prime(t), 2); } boost::random::mt19937 rng; @@ -107,7 +108,8 @@ void test_linear() for (Real t = xmin; t <= xmax; t += 0.125) { - CHECK_ULP_CLOSE(t, sh(t), 15); + CHECK_ULP_CLOSE(t, sh(t), 25); + CHECK_ULP_CLOSE(Real(1), sh.prime(t), 850); } Real x0 = 0; @@ -151,7 +153,8 @@ void test_quadratic() } std::vector dydx(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { dydx[i] = x[i]; } @@ -160,9 +163,10 @@ void test_quadratic() auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); - for (Real t = 0; t <= 9; t += 0.0078125) { + for (Real t = 0; t <= 9; t += 0.0078125) + { CHECK_ULP_CLOSE(t*t/2, sh(t), 100); - //CHECK_ULP_CLOSE(t, qh.prime(t), 7); + CHECK_ULP_CLOSE(t, sh.prime(t), 7); } boost::random::mt19937 rng; @@ -170,7 +174,8 @@ void test_quadratic() x.resize(8); x[0] = dis(rng); Real xmin = x[0]; - for (size_t i = 1; i < x.size(); ++i) { + for (size_t i = 1; i < x.size(); ++i) + { x[i] = x[i-1] + dis(rng); } Real xmax = x.back(); @@ -182,7 +187,8 @@ void test_quadratic() } dydx.resize(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { dydx[i] = x[i]; } @@ -191,9 +197,10 @@ void test_quadratic() sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); - for (Real t = xmin; t <= xmax; t += 0.125) { - CHECK_ULP_CLOSE(t*t/2, sh(t), 24); - //CHECK_ULP_CLOSE(t, qh.prime(t), 36); + for (Real t = xmin; t <= xmax; t += 0.125) + { + CHECK_ULP_CLOSE(t*t/2, sh(t), 50); + CHECK_ULP_CLOSE(t, sh.prime(t), 300); } y.resize(10); @@ -261,8 +268,10 @@ void test_cubic() auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); - for (Real t = 0; t <= xmax; t += 0.0078125) { + for (Real t = 0; t <= xmax; t += 0.0078125) + { CHECK_ULP_CLOSE(t*t*t, sh(t), 151); + CHECK_ULP_CLOSE(3*t*t, sh.prime(t), 151); } Real x0 = 0; @@ -329,6 +338,7 @@ void test_quartic() for (Real t = 1; t <= xmax; t += 0.0078125) { CHECK_ULP_CLOSE(t*t*t*t, sh(t), 117); + CHECK_ULP_CLOSE(4*t*t*t, sh.prime(t), 117); } y.resize(10); @@ -393,9 +403,10 @@ void test_interpolation_condition() auto d3ydx3_copy = d3ydx3; auto s = septic_hermite(std::move(x_copy), std::move(y_copy), std::move(dydx_copy), std::move(d2ydx2_copy), std::move(d3ydx3_copy)); - for (size_t i = 0; i < x.size(); ++i) { + for (size_t i = 0; i < x.size(); ++i) + { CHECK_ULP_CLOSE(y[i], s(x[i]), 2); - //CHECK_ULP_CLOSE(dydx[i], s.prime(x[i]), 2); + CHECK_ULP_CLOSE(dydx[i], s.prime(x[i]), 2); } } } From 6edcfd6b7894419a51de783e44ee346bd67c8484 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sat, 22 Feb 2020 14:42:19 -0500 Subject: [PATCH 052/104] Accurate septic Hermite derivatives. --- .../detail/septic_hermite_detail.hpp | 63 ++++++++++++++++--- test/septic_hermite_test.cpp | 61 ++++++++++++------ 2 files changed, 97 insertions(+), 27 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 8a5630378..7a9f260c6 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -303,18 +303,37 @@ public: return this->unchecked_prime(x); } - inline Real unchecked_prime(Real x) const { - //TODO: Get the high accuracy approximation by differentiating the interpolant! + inline Real unchecked_prime(Real x) const + { using std::floor; Real s3 = (x-x0_)*inv_dx_; Real ii = floor(s3); auto i = static_cast(ii); - //Real t = s3 - ii; + Real t = s3 - ii; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real a0 = d2y_[i]; + Real a1 = d2y_[i+1]; + Real j0 = d3y_[i]; + Real j1 = d3y_[i+1]; + Real t2 = t*t; + Real t3 = t2*t; + Real z0 = 140*t3*(1 + t*(-3 + t*(3 - t))); + Real z1 = 1 + t3*(-80 + t*(225 + t*(-216 + 70*t))); + Real z2 = t3*(-60 + t*(195 + t*(-204 + 70*t))); + Real z3 = 1 + t2*(-20 + t*(50 + t*(-45 + 14*t))); + Real z4 = t2*(10 + t*(-35 + t*(39 - 14*t))); + Real z5 = 3 + t*(-16 + t*(30 + t*(-24 + 7*t))); + Real z6 = t*(-4 + t*(15 + t*(-18 + 7*t))); - // Velocity: - Real v0 = dy_[i]; - Real v1 = dy_[i+1]; - return (v0+v1)*inv_dx_/2; + Real dydx = z0*(y1-y0)*inv_dx_; + dydx += (z1*dy0 + z2*dy1)*inv_dx_; + dydx += 2*t*(z3*a0 + z4*a1)*inv_dx_; + dydx += t*t*(z5*j0 + z6*j1); + return dydx; } inline Real double_prime(Real x) const @@ -425,7 +444,35 @@ public: } inline Real unchecked_prime(Real x) const { - return std::numeric_limits::quiet_NaN(); + using std::floor; + Real s3 = (x-x0_)*inv_dx_; + Real ii = floor(s3); + auto i = static_cast(ii); + Real t = s3 - ii; + + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; + Real dy0 = data_[i][1]; + Real dy1 = data_[i+1][1]; + Real a0 = data_[i][2]; + Real a1 = data_[i+1][2]; + Real j0 = data_[i][3]; + Real j1 = data_[i+1][3]; + Real t2 = t*t; + Real t3 = t2*t; + Real z0 = 140*t3*(1 + t*(-3 + t*(3 - t))); + Real z1 = 1 + t3*(-80 + t*(225 + t*(-216 + 70*t))); + Real z2 = t3*(-60 + t*(195 + t*(-204 + 70*t))); + Real z3 = 1 + t2*(-20 + t*(50 + t*(-45 + 14*t))); + Real z4 = t2*(10 + t*(-35 + t*(39 - 14*t))); + Real z5 = 3 + t*(-16 + t*(30 + t*(-24 + 7*t))); + Real z6 = t*(-4 + t*(15 + t*(-18 + 7*t))); + + Real dydx = z0*(y1-y0)*inv_dx_; + dydx += (z1*dy0 + z2*dy1)*inv_dx_; + dydx += 2*t*(z3*a0 + z4*a1)*inv_dx_; + dydx += t*t*(z5*j0 + z6*j1); + return dydx; } inline Real double_prime(Real x) const diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index c4f6e0289..dbe9fc011 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -53,7 +53,7 @@ void test_constant() auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); for (Real t = x0; t <= 127; t += 0.25) { CHECK_ULP_CLOSE(Real(7), csh(t), 24); - //CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); } std::vector> data(128); @@ -65,9 +65,10 @@ void test_constant() data[i][3] = 0; } auto csh_aos = cardinal_septic_hermite_aos(std::move(data), x0, dx); - for (Real t = x0; t <= 127; t += 0.25) { + for (Real t = x0; t <= 127; t += 0.25) + { CHECK_ULP_CLOSE(Real(7), csh_aos(t), 24); - //CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), csh_aos.prime(t), 24); } } @@ -84,7 +85,8 @@ void test_linear() auto sh = septic_hermite(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3)); - for (Real t = 0; t <= 9; t += 0.25) { + for (Real t = 0; t <= 9; t += 0.25) + { CHECK_ULP_CLOSE(Real(t), sh(t), 2); CHECK_ULP_CLOSE(Real(1), sh.prime(t), 2); } @@ -94,7 +96,8 @@ void test_linear() x.resize(512); x[0] = dis(rng); Real xmin = x[0]; - for (size_t i = 1; i < x.size(); ++i) { + for (size_t i = 1; i < x.size(); ++i) + { x[i] = x[i-1] + dis(rng); } Real xmax = x.back(); @@ -118,13 +121,15 @@ void test_linear() dydx.resize(10, 1); d2ydx2.resize(10, 0); d3ydx3.resize(10, 0); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { y[i] = i; } auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); for (Real t = 0; t <= 9; t += 0.125) { CHECK_ULP_CLOSE(t, csh(t), 15); + CHECK_ULP_CLOSE(Real(1), csh.prime(t), 15); } std::vector> data(10); @@ -139,6 +144,7 @@ void test_linear() for (Real t = 0; t <= 9; t += 0.125) { CHECK_ULP_CLOSE(t, csh_aos(t), 15); + CHECK_ULP_CLOSE(Real(1), csh_aos.prime(t), 15); } } @@ -224,6 +230,7 @@ void test_quadratic() for (Real t = x0; t <= 9; t += 0.125) { CHECK_ULP_CLOSE(t*t/2, csh(t), 24); + CHECK_ULP_CLOSE(t, csh.prime(t), 24); } std::vector> data(10); @@ -238,6 +245,7 @@ void test_quadratic() for (Real t = x0; t <= 9; t += 0.125) { CHECK_ULP_CLOSE(t*t/2, csh_aos(t), 24); + CHECK_ULP_CLOSE(t, csh_aos.prime(t), 24); } } @@ -256,12 +264,14 @@ void test_cubic() } std::vector dydx(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { dydx[i] = 3*x[i]*x[i]; } std::vector d2ydx2(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { d2ydx2[i] = 6*x[i]; } std::vector d3ydx3(x.size(), 6); @@ -280,7 +290,8 @@ void test_cubic() dydx.resize(8); d2ydx2.resize(8); d3ydx3.resize(8,6); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { y[i] = i*i*i; dydx[i] = 3*i*i; d2ydx2[i] = 6*i; @@ -288,8 +299,10 @@ void test_cubic() auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); - for (Real t = 0; t <= xmax; t += 0.0078125) { + for (Real t = 0; t <= xmax; t += 0.0078125) + { CHECK_ULP_CLOSE(t*t*t, csh(t), 151); + CHECK_ULP_CLOSE(3*t*t, csh.prime(t), 151); } std::vector> data(8); @@ -302,8 +315,10 @@ void test_cubic() auto csh_aos = cardinal_septic_hermite_aos(std::move(data), x0, dx); - for (Real t = 0; t <= xmax; t += 0.0078125) { + for (Real t = 0; t <= xmax; t += 0.0078125) + { CHECK_ULP_CLOSE(t*t*t, csh_aos(t), 151); + CHECK_ULP_CLOSE(3*t*t, csh_aos.prime(t), 151); } } @@ -320,17 +335,20 @@ void test_quartic() } std::vector dydx(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { dydx[i] = 4*x[i]*x[i]*x[i]; } std::vector d2ydx2(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { d2ydx2[i] = 12*x[i]*x[i]; } std::vector d3ydx3(x.size()); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { d3ydx3[i] = 24*x[i]; } @@ -345,7 +363,8 @@ void test_quartic() dydx.resize(10); d2ydx2.resize(10); d3ydx3.resize(10); - for (size_t i = 0; i < y.size(); ++i) { + for (size_t i = 0; i < y.size(); ++i) + { y[i] = i*i*i*i; dydx[i] = 4*i*i*i; d2ydx2[i] = 12*i*i; @@ -354,12 +373,15 @@ void test_quartic() auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), Real(0), Real(1)); - for (Real t = 1; t <= xmax; t += 0.0078125) { + for (Real t = 1; t <= xmax; t += 0.0078125) + { CHECK_ULP_CLOSE(t*t*t*t, csh(t), 117); + CHECK_ULP_CLOSE(4*t*t*t, csh.prime(t), 117); } std::vector> data(10); - for (size_t i = 0; i < data.size(); ++i) { + for (size_t i = 0; i < data.size(); ++i) + { data[i][0] = i*i*i*i; data[i][1] = 4*i*i*i; data[i][2] = 12*i*i; @@ -367,10 +389,11 @@ void test_quartic() } auto csh_aos = cardinal_septic_hermite_aos(std::move(data), Real(0), Real(1)); - for (Real t = 1; t <= xmax; t += 0.0078125) { + for (Real t = 1; t <= xmax; t += 0.0078125) + { CHECK_ULP_CLOSE(t*t*t*t, csh_aos(t), 117); + CHECK_ULP_CLOSE(4*t*t*t, csh_aos.prime(t), 117); } - } From 4a2f1febf8fc9255cd424f28f79a2dce41569e2a Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sat, 22 Feb 2020 14:55:22 -0500 Subject: [PATCH 053/104] Bootstrap Chebyshev transform [CI SKIP] --- .../bootstrap_chebyshev.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 example/daubechies_wavelets/bootstrap_chebyshev.cpp diff --git a/example/daubechies_wavelets/bootstrap_chebyshev.cpp b/example/daubechies_wavelets/bootstrap_chebyshev.cpp new file mode 100644 index 000000000..b158fabcd --- /dev/null +++ b/example/daubechies_wavelets/bootstrap_chebyshev.cpp @@ -0,0 +1,18 @@ +#include +#include +#include + +template +void bootstrap() +{ + std::cout << "Computing phi. . .\n"; + auto phi = boost::math::daubechies_scaling(); + std::cout << "Computing Chebyshev transform of phi.\n"; + auto cheb = boost::math::chebyshev_transform(phi, phi.support().first, phi.support().second); + std::cout << "Number of coefficients = " << cheb.coefficients().size() << "\n"; +} + +int main() +{ + bootstrap(); +} \ No newline at end of file From 649b619c3fb3960a8d0045f16eb782bbb38af812 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sun, 23 Feb 2020 09:15:22 -0500 Subject: [PATCH 054/104] Use aos rather than soa [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 729734492..f078c653d 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -124,6 +124,42 @@ private: RandomAccessContainer dy_; }; +template +class matched_holder_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + matched_holder_aos(RandomAccessContainer && data, int grid_refinements) : data_{std::move(data)} + { + inv_h_ = (1 << grid_refinements); + Real h = 1/inv_h_; + for (auto & datum : data_) + { + datum[1] *= h; + } + } + + inline Real operator()(Real x) const + { + using std::floor; + using std::sqrt; + Real s = x*inv_h_; + Real ii = floor(s); + auto i = static_cast(ii); + Real t = s - ii; + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; + Real dphi = data_[i+1][1]; + Real diff = y1 - y0; + return y0 + (2*dphi - diff)*t + 2*sqrt(t)*(diff-dphi); + } + +private: + Real inv_h_; + RandomAccessContainer data_; +}; + template class linear_interpolation { @@ -295,7 +331,13 @@ public: if constexpr (p==2) { - m_mh = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + } + m_mh = std::make_shared>>>(std::move(data), grid_refinements); } if constexpr (p==3) { @@ -392,7 +434,7 @@ public: private: // Need this for p = 2: - std::shared_ptr>> m_mh; + std::shared_ptr>>> m_mh; // Need this for p = 3: std::shared_ptr>> m_lin; // Need this for p = 4,5: From 1fc51dca7cb336d5a4f3d3f318ee0b2696f2db0a Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 23 Feb 2020 12:42:12 -0500 Subject: [PATCH 055/104] Make accesses more random in benchmarks [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 83 +++++++++++++++++++-------- 1 file changed, 59 insertions(+), 24 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 30feb0c70..797121d79 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -40,16 +40,43 @@ BENCHMARK_TEMPLATE(DyadicGrid, double, 4)->DenseRange(3, 22, 1)->Unit(benchmark: //BENCHMARK_TEMPLATE(DyadicGrid, double, 8)->DenseRange(3, 22, 1)->Unit(benchmark::kMillisecond)->Complexity(exponential); //BENCHMARK_TEMPLATE(DyadicGrid, double, 11)->DenseRange(3,22,1)->Unit(benchmark::kMillisecond)->Complexity(exponential); +uint64_t s[2] = { 0x41, 0x29837592 }; + +static inline uint64_t rotl(const uint64_t x, int k) { + return (x << k) | (x >> (64 - k)); +} + +uint64_t next(void) { + const uint64_t s0 = s[0]; + uint64_t s1 = s[1]; + const uint64_t result = s0 + s1; + + s1 ^= s0; + s[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); // a, b + s[1] = rotl(s1, 36); // c + + return result; +} + +double uniform() { + return next()*(1.0/18446744073709551616.0); +} template void ScalingEvaluation(benchmark::State & state) { auto phi = boost::math::daubechies_scaling(); + Real xmax = phi.support().second; Real x = 0; + Real step = uniform()/2048; for (auto _ : state) { benchmark::DoNotOptimize(phi(x)); - x += std::numeric_limits::epsilon(); + x += step; + if (x > xmax) { + x = 0; + step = uniform()/2048; + } } } @@ -123,13 +150,15 @@ void CubicHermite(benchmark::State & state) auto qh = cubic_hermite(std::move(x), std::move(y), std::move(dydx)); Real t = x0; + Real step = uniform()*(xf-x0)/2048; for (auto _ : state) { benchmark::DoNotOptimize(qh(t)); - t += (xf-x0)/128; + t += step; if (t >= xf) { t = x0; + step = uniform()*(xf-x0)/2048; } } state.SetComplexityN(state.range(0)); @@ -148,8 +177,8 @@ void CardinalCubicHermite(benchmark::State & state) boost::random::uniform_real_distribution dis(Real(0), Real(1)); for (size_t i = 0; i < y.size(); ++i) { - y[i] = dis(rd); - dydx[i] = dis(rd); + y[i] = uniform(); + dydx[i] = uniform(); } Real dx = Real(1)/Real(8); @@ -157,21 +186,21 @@ void CardinalCubicHermite(benchmark::State & state) Real xf = x0 + (y.size()-1)*dx; auto qh = cardinal_cubic_hermite_detail(std::move(y), std::move(dydx), x0, dx); - Real x = 0; + Real x = x0; + Real step = uniform()*(xf-x0)/2048; for (auto _ : state) { benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); - x += xf/128; + x += step; if (x >= xf) { x = x0; + step = uniform()*(xf-x0)/2048; } } state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); - template void CardinalCubicHermiteAOS(benchmark::State & state) { @@ -181,8 +210,8 @@ void CardinalCubicHermiteAOS(benchmark::State & state) boost::random::uniform_real_distribution dis(Real(0), Real(1)); for (size_t i = 0; i < dat.size(); ++i) { - dat[i][0] = dis(rd); - dat[i][1] = dis(rd); + dat[i][0] = uniform(); + dat[i][1] = uniform(); } using boost::math::interpolators::detail::cardinal_cubic_hermite_detail_aos; @@ -191,19 +220,22 @@ void CardinalCubicHermiteAOS(benchmark::State & state) Real xf = x0 + (dat.size()-1)*dx; auto qh = cardinal_cubic_hermite_detail_aos(std::move(dat), x0, dx); Real x = 0; + Real step = uniform()*(xf-x0)/2048; for (auto _ : state) { benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); - x += xf/128; + x += step; if (x >= xf) { x = x0; + step = uniform()*(xf-x0)/2048; } } state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(CardinalCubicHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<21)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(CardinalCubicHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<21)->Complexity(benchmark::o1); template void SineEvaluation(benchmark::State& state) @@ -272,9 +304,9 @@ void CardinalQuinticHermite(benchmark::State & state) boost::random::uniform_real_distribution dis(Real(0), Real(1)); for (size_t i = 0; i < y.size(); ++i) { - y[i] = dis(rd); - dydx[i] = dis(rd); - d2ydx2[i] = dis(rd); + y[i] = uniform(); + dydx[i] = uniform(); + d2ydx2[i] = uniform(); } Real dx = Real(1)/Real(8); @@ -283,20 +315,20 @@ void CardinalQuinticHermite(benchmark::State & state) auto qh = cardinal_quintic_hermite_detail(std::move(y), std::move(dydx), std::move(d2ydx2), x0, dx); Real x = 0; + Real step = uniform()*(xf-x0)/2048; for (auto _ : state) { benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); - x += xf/128; + x += step; if (x >= xf) { x = x0; + step = uniform()*(xf-x0)/2048; } } state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); - template void CardinalQuinticHermiteAOS(benchmark::State & state) { @@ -306,9 +338,9 @@ void CardinalQuinticHermiteAOS(benchmark::State & state) boost::random::uniform_real_distribution dis(Real(0), Real(1)); for (size_t i = 0; i < dat.size(); ++i) { - dat[i][0] = dis(rd); - dat[i][1] = dis(rd); - dat[i][2] = dis(rd); + dat[i][0] = uniform(); + dat[i][1] = uniform(); + dat[i][2] = uniform(); } using boost::math::interpolators::detail::cardinal_quintic_hermite_detail_aos; @@ -316,19 +348,22 @@ void CardinalQuinticHermiteAOS(benchmark::State & state) Real x0 = 0; Real xf = x0 + (dat.size()-1)*dx; auto qh = cardinal_quintic_hermite_detail_aos(std::move(dat), x0, dx); - Real x = 0; + Real x = x0; + Real step = uniform()*(xf-x0)/2048; for (auto _ : state) { benchmark::DoNotOptimize(qh.unchecked_evaluation(x)); - x += xf/128; + x += step; if (x >= xf) { x = x0; + step = uniform()*(xf-x0)/2048; } } state.SetComplexityN(state.range(0)); } -BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(CardinalQuinticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(benchmark::o1); +BENCHMARK_TEMPLATE(CardinalQuinticHermite, double)->RangeMultiplier(2)->Range(1<<8, 1<<22)->Complexity(benchmark::o1); template void SepticHermite(benchmark::State & state) From 83435340420c08e4b74ec4dc48fdaacabe8448bf Mon Sep 17 00:00:00 2001 From: NAThompson Date: Sun, 23 Feb 2020 13:34:47 -0500 Subject: [PATCH 056/104] Everything to array of structs [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 82 +++++++++++++++++-- 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index f078c653d..d9d9eeb95 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -199,6 +199,44 @@ private: RandomAccessContainer dydx_; }; +template +class linear_interpolation_aos { +public: + using Point = typename RandomAccessContainer::value_type; + using Real = typename Point::value_type; + + linear_interpolation_aos(RandomAccessContainer && data, int grid_refinements) : data_{std::move(data)} + { + s_ = (1 << grid_refinements); + } + + inline Real operator()(Real x) const + { + using std::floor; + Real y = x*s_; + Real k = floor(y); + + int64_t kk = static_cast(k); + Real t = y - k; + return (1-t)*data_[kk][0] + t*data_[kk+1][0]; + } + + inline Real prime(Real x) const + { + using std::floor; + Real y = x*s_; + Real k = floor(y); + + int64_t kk = static_cast(k); + Real t = y - k; + return (1-t)*data_[kk][1] + t*data_[kk+1][1]; + } + +private: + Real s_; + RandomAccessContainer data_; +}; + } template @@ -341,22 +379,50 @@ public: } if constexpr (p==3) { - m_lin = std::make_shared>>(std::move(y), std::move(dydx), grid_refinements); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + } + m_lin = std::make_shared>>>(std::move(data), grid_refinements); } if constexpr (p == 4 || p == 5) { Real dx = Real(1)/(1 << grid_refinements); - m_cbh = std::make_shared>>(std::move(y), std::move(dydx), Real(0), dx); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + } + m_cbh = std::make_shared>>>(std::move(data), Real(0), dx); } if constexpr (p >= 6 && p <= 9) { Real dx = Real(1)/(1 << grid_refinements); - m_qh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), Real(0), dx); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + data[i][2] = d2ydx2[i]; + } + + m_qh = std::make_shared>>>(std::move(data), Real(0), dx); } if constexpr (p >= 10) { Real dx = Real(1)/(1 << grid_refinements); - m_sh = std::make_shared>>(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), Real(0), dx); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + data[i][2] = d2ydx2[i]; + data[i][3] = d3ydx3[i]; + } + m_sh = std::make_shared>>>(std::move(data), Real(0), dx); } } @@ -436,13 +502,13 @@ private: // Need this for p = 2: std::shared_ptr>>> m_mh; // Need this for p = 3: - std::shared_ptr>> m_lin; + std::shared_ptr>>> m_lin; // Need this for p = 4,5: - std::shared_ptr>> m_cbh; + std::shared_ptr>>> m_cbh; // Need this for p = 6,7,8,9: - std::shared_ptr>> m_qh; + std::shared_ptr>>> m_qh; // Need this for p >= 10: - std::shared_ptr>> m_sh; + std::shared_ptr>>> m_sh; /* Real single_crank_linear(Real x) const { From 38c2dd376bc45f49100dbdda3812d02683564b40 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Mon, 24 Feb 2020 07:06:21 -0500 Subject: [PATCH 057/104] Second derivative for septic Hermite spline. --- .../detail/septic_hermite_detail.hpp | 108 +++++++++++++++++- .../special_functions/daubechies_scaling.hpp | 4 + test/septic_hermite_test.cpp | 13 ++- 3 files changed, 118 insertions(+), 7 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 7a9f260c6..5e26d8805 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -336,9 +336,57 @@ public: return dydx; } - inline Real double_prime(Real x) const + inline Real double_prime(Real x) constq { - return std::numeric_limits::quiet_NaN(); + Real xf = x0_ + (y_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return d2y_.back()*2*inv_dx_*inv_dx_; + } + + return this->unchecked_double_prime(x); + } + + inline Real unchecked_double_prime(Real x) const + { + using std::floor; + Real s3 = (x-x0_)*inv_dx_; + Real ii = floor(s3); + auto i = static_cast(ii); + Real t = s3 - ii; + + Real y0 = y_[i]; + Real y1 = y_[i+1]; + Real dy0 = dy_[i]; + Real dy1 = dy_[i+1]; + Real a0 = d2y_[i]; + Real a1 = d2y_[i+1]; + Real j0 = d3y_[i]; + Real j1 = d3y_[i+1]; + Real t2 = t*t; + + Real z0 = 420*t2*(1 + t*(-4 + t*(5 - 2*t))); + Real z1 = 60*t2*(-4 + t*(15 + t*(-18 + 7*t))); + Real z2 = 60*t2*(-3 + t*(13 + t*(-17 + 7*t))); + Real z3 = (1 + t2*(-60 + t*(200 + t*(-225 + 84*t)))); + Real z4 = t2*(30 + t*(-140 + t*(195 - 84*t))); + Real z5 = t*(1 + t*(-8 + t*(20 + t*(-20 + 7*t)))); + Real z6 = t2*(-2 + t*(10 + t*(-15 + 7*t))); + + Real d2ydx2 = z0*(y1-y0)*inv_dx_*inv_dx_; + d2ydx2 += (z1*dy0 + z2*dy1)*inv_dx_*inv_dx_; + d2ydx2 += (z3*a0 + z4*a1)*2*inv_dx_*inv_dx_; + d2ydx2 += 6*(z5*j0 + z6*j1)/(inv_dx_*inv_dx_); + + return d2ydx2; } private: @@ -437,7 +485,7 @@ public: } if (x == xf) { - return data_.back()[1]; + return data_.back()[1]*inv_dx_; } return this->unchecked_prime(x); @@ -449,7 +497,7 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; - + Real y0 = data_[i][0]; Real y1 = data_[i+1][0]; Real dy0 = data_[i][1]; @@ -475,9 +523,57 @@ public: return dydx; } - inline Real double_prime(Real x) const + inline Real double_prime(Real x) const { - return std::numeric_limits::quiet_NaN(); + Real xf = x0_ + (data_.size()-1)/inv_dx_; + if (x < x0_ || x > xf) + { + std::ostringstream oss; + oss.precision(std::numeric_limits::digits10+3); + oss << "Requested abscissa x = " << x << ", which is outside of allowed range [" + << x0_ << ", " << xf << "]"; + throw std::domain_error(oss.str()); + } + if (x == xf) + { + return data_.back()[2]*2*inv_dx_*inv_dx_; + }q + + return this->unchecked_double_prime(x); + } + + inline Real unchecked_double_prime(Real x) const + { + using std::floor; + Real s3 = (x-x0_)*inv_dx_; + Real ii = floor(s3); + auto i = static_cast(ii); + Real t = s3 - ii; + + Real y0 = data_[i][0]; + Real y1 = data_[i+1][0]; + Real dy0 = data_[i][1]; + Real dy1 = data_[i+1][1]; + Real a0 = data_[i][2]; + Real a1 = data_[i+1][2]; + Real j0 = data_[i][3]; + Real j1 = data_[i+1][3]; + Real t2 = t*t; + + Real z0 = 420*t2*(1 + t*(-4 + t*(5 - 2*t))); + Real z1 = 60*t2*(-4 + t*(15 + t*(-18 + 7*t))); + Real z2 = 60*t2*(-3 + t*(13 + t*(-17 + 7*t))); + Real z3 = (1 + t2*(-60 + t*(200 + t*(-225 + 84*t)))); + Real z4 = t2*(30 + t*(-140 + t*(195 - 84*t))); + Real z5 = t*(1 + t*(-8 + t*(20 + t*(-20 + 7*t)))); + Real z6 = t2*(-2 + t*(10 + t*(-15 + 7*t))); + + Real d2ydx2 = z0*(y1-y0)*inv_dx_*inv_dx_; + d2ydx2 += (z1*dy0 + z2*dy1)*inv_dx_*inv_dx_; + d2ydx2 += (z3*a0 + z4*a1)*2*inv_dx_*inv_dx_; + d2ydx2 += 6*(z5*j0 + z6*j1)/(inv_dx_*inv_dx_); + + return d2ydx2; } private: diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index d9d9eeb95..d1e4092b8 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -491,6 +491,10 @@ public: { return m_qh->unchecked_double_prime(x); } + if constexpr (p >= 10) + { + return m_sh->unchecked_double_prime(x); + } } std::pair support() const diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index dbe9fc011..180ceff0f 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -51,9 +51,11 @@ void test_constant() d2ydx2.resize(128, 0); d3ydx3.resize(128, 0); auto csh = cardinal_septic_hermite(std::move(y), std::move(dydx), std::move(d2ydx2), std::move(d3ydx3), x0, dx); - for (Real t = x0; t <= 127; t += 0.25) { + for (Real t = x0; t <= 127; t += 0.25) + { CHECK_ULP_CLOSE(Real(7), csh(t), 24); CHECK_ULP_CLOSE(Real(0), csh.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), csh.double_prime(t), 24); } std::vector> data(128); @@ -69,6 +71,7 @@ void test_constant() { CHECK_ULP_CLOSE(Real(7), csh_aos(t), 24); CHECK_ULP_CLOSE(Real(0), csh_aos.prime(t), 24); + CHECK_ULP_CLOSE(Real(0), csh_aos.double_prime(t), 24); } } @@ -130,6 +133,7 @@ void test_linear() { CHECK_ULP_CLOSE(t, csh(t), 15); CHECK_ULP_CLOSE(Real(1), csh.prime(t), 15); + CHECK_ULP_CLOSE(Real(0), csh.double_prime(t), 15); } std::vector> data(10); @@ -145,6 +149,7 @@ void test_linear() { CHECK_ULP_CLOSE(t, csh_aos(t), 15); CHECK_ULP_CLOSE(Real(1), csh_aos.prime(t), 15); + CHECK_ULP_CLOSE(Real(0), csh_aos.double_prime(t), 15); } } @@ -231,6 +236,7 @@ void test_quadratic() { CHECK_ULP_CLOSE(t*t/2, csh(t), 24); CHECK_ULP_CLOSE(t, csh.prime(t), 24); + CHECK_ULP_CLOSE(Real(1), csh.double_prime(t), 24); } std::vector> data(10); @@ -246,6 +252,7 @@ void test_quadratic() { CHECK_ULP_CLOSE(t*t/2, csh_aos(t), 24); CHECK_ULP_CLOSE(t, csh_aos.prime(t), 24); + CHECK_ULP_CLOSE(Real(1), csh_aos.double_prime(t), 24); } } @@ -303,6 +310,7 @@ void test_cubic() { CHECK_ULP_CLOSE(t*t*t, csh(t), 151); CHECK_ULP_CLOSE(3*t*t, csh.prime(t), 151); + CHECK_ULP_CLOSE(6*t, csh.double_prime(t), 151); } std::vector> data(8); @@ -319,6 +327,7 @@ void test_cubic() { CHECK_ULP_CLOSE(t*t*t, csh_aos(t), 151); CHECK_ULP_CLOSE(3*t*t, csh_aos.prime(t), 151); + CHECK_ULP_CLOSE(6*t, csh_aos.double_prime(t), 151); } } @@ -377,6 +386,7 @@ void test_quartic() { CHECK_ULP_CLOSE(t*t*t*t, csh(t), 117); CHECK_ULP_CLOSE(4*t*t*t, csh.prime(t), 117); + CHECK_ULP_CLOSE(12*t*t, csh.double_prime(t), 117); } std::vector> data(10); @@ -393,6 +403,7 @@ void test_quartic() { CHECK_ULP_CLOSE(t*t*t*t, csh_aos(t), 117); CHECK_ULP_CLOSE(4*t*t*t, csh_aos.prime(t), 117); + CHECK_ULP_CLOSE(12*t*t, csh_aos.double_prime(t), 117); } } From efaaa9c81105de2bbee9fdcdb0ff44ca6b5fddba Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Mon, 24 Feb 2020 20:43:08 +0000 Subject: [PATCH 058/104] Update daubechies integer grid with simplified header. Plus revised generator program. --- .../daubechies_scaling_integer_grid.cpp | 171 +- include/boost/math/filters/daubechies.hpp | 5 +- .../daubechies_scaling_integer_grid.hpp | 2465 ++--------------- 3 files changed, 286 insertions(+), 2355 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp index 3c7377a6a..1dc55bfe2 100644 --- a/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp +++ b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp @@ -4,6 +4,9 @@ * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ + +#define BOOST_MATH_GENERATE_DAUBECHIES_GRID + #include #include #include @@ -15,13 +18,21 @@ #include #include #include +#ifdef BOOST_HAS_FLOAT128 #include +#endif #include #include #include #include +typedef boost::multiprecision::number, boost::int32_t, -262142, 262143>, boost::multiprecision::et_off> octuple_type; +#ifdef BOOST_HAS_FLOAT128 +typedef boost::multiprecision::float128 float128_t; +#else +typedef boost::multiprecision::cpp_bin_float_quad float128_t; +#endif template std::list> integer_grid() @@ -55,7 +66,7 @@ std::list> integer_grid() Eigen::EigenSolver es(A); - typename Eigen::EigenSolver::EigenvalueType complex_eigs = es.eigenvalues(); + auto complex_eigs = es.eigenvalues(); std::vector eigs(complex_eigs.size(), std::numeric_limits::quiet_NaN()); @@ -80,8 +91,9 @@ std::list> integer_grid() } size_t idx = std::distance(eigs.begin(), it); std::cout << "Eigenvector for derivative " << j << " is at index " << idx << "\n"; - typename Eigen::EigenSolver::EigenvectorsType complex_eigenvectors = es.eigenvectors(); - auto complex_eigenvec = complex_eigenvectors.col(idx); + auto eigenvector_matrix = es.eigenvectors(); + auto complex_eigenvec = eigenvector_matrix.col(idx); + std::vector eigenvec(complex_eigenvec.size() + 2, std::numeric_limits::quiet_NaN()); eigenvec[0] = 0; eigenvec[eigenvec.size()-1] = 0; @@ -128,101 +140,28 @@ template void write_grid(std::ofstream & fs) { auto grids = integer_grid(); - fs << " if constexpr (p == " << p << ") {\n"; - fs << " if constexpr (std::is_same_v) {\n"; size_t j = 0; - for (auto it = grids.begin(); it != grids.end(); ++it) { - - fs << " if constexpr (order == " << j << ") {\n"; - fs << " return {"; - auto const & grid = *it; - for (size_t i = 0; i < grid.size() -1; ++i) { - fs << static_cast(grid[i]) << "f, "; - } - fs << static_cast(grid[grid.size()-1]) << "f};\n"; - fs << " }\n"; - ++j; + fs << std::setprecision(std::numeric_limits< boost::multiprecision::cpp_bin_float_quad>::max_digits10); + for (auto it = grids.begin(); it != grids.end(); ++it) + { + auto const& grid = *it; + fs << "template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { "; + for (size_t i = 0; i < grid.size() -1; ++i){ + fs << "C_(" << static_cast(grid[i]) << "), "; + } + fs << "C_(" << static_cast(grid[grid.size()-1]) << ") }; };\n"; + ++j; } - fs << " }\n"; - - fs << " if constexpr (std::is_same_v) {\n"; - j = 0; - for (auto it = grids.begin(); it != grids.end(); ++it) { - - fs << " if constexpr (order == " << j << ") {\n"; - fs << " return {"; - auto const & grid = *it; - for (size_t i = 0; i < grid.size() -1; ++i) { - fs << static_cast(grid[i]) << ", "; - } - fs << static_cast(grid[grid.size()-1]) << "};\n"; - fs << " }\n"; - ++j; - } - fs << " }\n"; - - - fs << " if constexpr (std::is_same_v) {\n"; - j = 0; - for (auto it = grids.begin(); it != grids.end(); ++it) { - - fs << " if constexpr (order == " << j << ") {\n"; - fs << " return {"; - auto const & grid = *it; - for (size_t i = 0; i < grid.size() -1; ++i) { - fs << static_cast(grid[i]) << "L, "; - } - fs << static_cast(grid[grid.size()-1]) << "L};\n"; - fs << " }\n"; - ++j; - } - fs << " }\n"; - - fs << " #ifdef BOOST_HAS_FLOAT128\n"; - fs << " if constexpr (std::is_same_v) {\n"; - j = 0; - for (auto it = grids.begin(); it != grids.end(); ++it) { - - fs << " if constexpr (order == " << j << ") {\n"; - fs << " return {"; - auto const & grid = *it; - for (size_t i = 0; i < grid.size() -1; ++i) { - fs << static_cast(grid[i]) << "Q, "; - } - fs << static_cast(grid[grid.size()-1]) << "Q};\n"; - fs << " }\n"; - ++j; - } - fs << " }\n"; - fs << " #endif\n"; - - fs << " if constexpr (std::is_same_v) {\n"; - j = 0; - for (auto it = grids.begin(); it != grids.end(); ++it) { - - fs << std::setprecision(std::numeric_limits::digits10 + 3); - fs << " if constexpr (order == " << j << ") {\n"; - fs << " return {"; - auto const & grid = *it; - for (size_t i = 0; i < grid.size() -1; ++i) { - fs << "boost::lexical_cast(\"" << static_cast(grid[i]) << "\"), "; - } - fs << "boost::lexical_cast(\"" << static_cast(grid[grid.size()-1]) << "\")};\n"; - fs << " }\n"; - ++j; - } - fs << " }\n"; - - fs << " }\n"; - } int main() { - constexpr const size_t p_max = 15; + constexpr const size_t p_max = 18; std::ofstream fs{"daubechies_scaling_integer_grid.hpp"}; fs << "/*\n" - << " * Copyright Nick Thompson, John Maddock, 2020\n" + << " * Copyright Nick Thompson, 2019\n" + << " * Copyright John Maddock, 2020\n" << " * Use, modification and distribution are subject to the\n" << " * Boost Software License, Version 1.0. (See accompanying file\n" << " * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n" @@ -231,32 +170,42 @@ int main() << "#ifndef BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP\n" << "#define BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP\n" << "#include \n" + << "#include \n" + << "#include \n" + << "/*\n" + << "In order to keep the character count as small as possible and speed up\n" + << "compiler parsing times, we define a macro C_ which appends an appropriate\n" + << "suffix to each literal, and then casts it to type Real.\n" + << "The suffix is as follows:\n\n" + << "* Q, when we have __float128 support.\n" + << "* L, when we have either 80 or 128 bit long doubles.\n" + << "* Nothing otherwise.\n" + << "*/\n\n" << "#ifdef BOOST_HAS_FLOAT128\n" - << "#include \n" - << "#endif\n" + << "# define C_(x) static_cast(x##Q)\n" + << "#elif (LDBL_MANT_DIG > DBL_MANT_DIG)\n" + << "# define C_(x) static_cast(x##L)\n" + << "#else\n" + << "# define C_(x) static_cast(x)\n" + << "#endif\n\n" << "namespace boost::math::detail {\n\n" - << "template \n" - << "constexpr std::array daubechies_scaling_integer_grid()\n" + << "template struct daubechies_scaling_integer_grid_imp;\n\n"; + + fs << std::hexfloat << std::setprecision(std::numeric_limits::max_digits10); + + boost::hana::for_each(std::make_index_sequence(), [&](auto idx){ + write_grid(fs); + }); + + fs << "\n\ntemplate \n" + << "constexpr inline std::array daubechies_scaling_integer_grid()\n" << "{\n" << " static_assert(sizeof(Real) <= 16, \"Integer grids only computed up to 128 bits of precision.\");\n" << " static_assert(p <= " << p_max << ", \"Integer grids only implemented up to " << p_max << ".\");\n" - << " static_assert(p > 1, \"Integer grids only implemented for p >= 2.\");\n"; - - - fs << std::hexfloat; - - boost::hana::for_each(std::make_index_sequence(), [&](auto idx){ - write_grid(fs); - }); - - fs << " std::array m{};\n" - << " for (auto & x : m) {\n" - << " x = std::numeric_limits::quiet_NaN();\n" - << " }\n" - << " return m;\n"; - - - fs << "}\n\n"; + << " static_assert(p > 1, \"Integer grids only implemented for p >= 2.\");\n" + << " std::array m{};\n" + << " return daubechies_scaling_integer_grid_imp::value;\n" + << "}\n\n"; fs << "} // namespaces\n"; fs << "#endif\n"; diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp index 24a71150c..9682b54d1 100644 --- a/include/boost/math/filters/daubechies.hpp +++ b/include/boost/math/filters/daubechies.hpp @@ -13,8 +13,11 @@ #include namespace boost::math::filters { -//typedef boost::multiprecision::number, boost::int32_t, -262142, 262143>, boost::multiprecision::et_off> octuple_type; +#ifdef BOOST_MATH_GENERATE_DAUBECHIES_GRID +typedef boost::multiprecision::number, boost::int32_t, -262142, 262143>, boost::multiprecision::et_off> octuple_type; +#else typedef boost::multiprecision::cpp_bin_float_oct octuple_type; +#endif template constexpr std::array daubechies_scaling_filter() diff --git a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp index e75f2a90f..208093342 100644 --- a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +++ b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp @@ -1,5 +1,6 @@ /* * Copyright Nick Thompson, 2019 + * Copyright John Maddock, 2020 * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -8,2258 +9,236 @@ #ifndef BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP #define BOOST_MATH_DAUBECHIES_SCALING_INTEGER_GRID_HPP #include +#include +#include +/* +In order to keep the character count as small as possible and speed up +compiler parsing times, we define a macro C_ which appends an appropriate +suffix to each literal, and then casts it to type Real. +The suffix is as follows: + +* Q, when we have __float128 support. +* L, when we have either 80 or 128 bit long doubles. +* Nothing otherwise. +*/ + #ifdef BOOST_HAS_FLOAT128 -#include +# define C_(x) static_cast(x##Q) +#elif (LDBL_MANT_DIG > DBL_MANT_DIG) +# define C_(x) static_cast(x##L) +#else +# define C_(x) static_cast(x) #endif -#include namespace boost::math::detail { +template struct daubechies_scaling_integer_grid_imp; + +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.5db3d742c265539d92ba16b83c5cp+0), C_(-0x1.76cf5d0b09954e764ae85ae0f17p-2), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1p+0), C_(-0x1p+0), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.494d414ee19a0fc1701f9345a28bp+0), C_(-0x1.8b18d8251ec886399fc357ab26c9p-2), C_(0x1.863743274d78cfe42daf1d262e43p-4), C_(0x1.158087f14084ceb4f650d2c442e1p-8), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a3719cd426dbd5c2283e8b6cd98bp+0), C_(-0x1.1dcb0537f52904105ab1d13c6abfp+1), C_(0x1.19ae7cc6c0211df5e41745563cbbp-1), C_(0x1.69a5e70c6cb46c73632e8c1bb2d3p-5), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.cef9cbb90bf242979b344cdd1e02p-1), C_(-0x1.b676b19591eb63e368ce734bad03p+0), C_(0x1.6ced632b23d6c7c6d19ce6975a06p-1), C_(0x1.8831a237a06deb43265d99170ff1p-4), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.01d5e443d831d2252369827793d3p+0), C_(-0x1.15313c61b3acb474231dab078158p-5), C_(0x1.447d293e37264e578b865081223fp-5), C_(-0x1.817e96e0425ed094fa1a3a5cf10cp-7), C_(-0x1.3a0992ca5111744ed1b4ed1a6607p-10), C_(0x1.3be7b6cb6309fefbda0c9fa167f8p-16), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.c6aca7b3a61af838bb320835a00cp+0), C_(-0x1.6486543c8460b11f1a4b4a357fbcp+1), C_(0x1.314491c6de2d2b798153746ca822p+0), C_(-0x1.0d0e14f1f7dc5a54f21ce3ff424bp-3), C_(-0x1.b6da96c702377f43a25f74c9467p-5), C_(0x1.d0194bee1a1742cd9ebfbba717b8p-10), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.cf8cc69cc42a410e51b272a7a3c6p+0), C_(-0x1.0eaaa0c1e1c354610b35262e9078p+2), C_(0x1.66e46b718b500bb2be3ec05c7ac3p+1), C_(-0x1.26d9a4de19b73d34cbab42cdd8ccp-3), C_(-0x1.0ae7c18dd841d8689ede2f52570cp-2), C_(0x1.3a82a1b96295b447f46661fe5bd8p-6), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.bb2f43bc30b80d947c8a537a20b2p-1), C_(-0x1.2d48b852668c646a630392a2b66dp+1), C_(0x1.c2596fe640cadf6ca968f3b30ff3p+0), C_(0x1.83800be8c4de9681c9e31925ce79p-3), C_(-0x1.233972e07202850d1be1b9fc8392p-1), C_(0x1.bcd16d394575254330d81aed4886p-4), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.646bf1ec64a308c5df07d89c8e9bp-1), C_(0x1.cbd5c1bab5148530b0e77ecbff92p-2), C_(-0x1.754196833f706c7834855fa5579ep-3), C_(0x1.3100cab7c3f5f4fa75b80a67ed4bp-5), C_(0x1.8dd2be8c89c51e7b28b04315346bp-10), C_(-0x1.c4ab558ff2dcebdfdc6142054ddep-10), C_(0x1.3b27d2d798eecea1adaf099c04dp-15), C_(0x1.75f2b16626e9875840e692dcf344p-23), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8eee7927087b240ec5ade1ac81aep+0), C_(-0x1.37cf445237f1b72a99ae1be2616ep+1), C_(0x1.3c64475174b4a0c9b8a3ee3dfc2p+0), C_(-0x1.7841978e876db6599aa4ad10992fp-2), C_(-0x1.64d969ffaac153a6af06dc9cfb72p-6), C_(0x1.08fcfb4783fa7d234eba36053968p-5), C_(-0x1.5e1fef6185af966378a125175a7fp-10), C_(-0x1.984da1089743964ff5ac0959c3bcp-17), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.22c5cb8d3f23b44faf592c365f5dp+1), C_(-0x1.83cca07a3ead78a73330d7cf1a39p+2), C_(0x1.5245172406b77d1d4fdfd2192d87p+2), C_(-0x1.2d10dba463fc1840fd45963c568fp+0), C_(-0x1.549f4c5e04f3991456e630b1555ep-1), C_(0x1.882ac9029ddc72b4c74d388da98p-2), C_(-0x1.3d5d0eda32d8b61e7ff27a395899p-5), C_(-0x1.65cdc06ecf6547344a6a8d527f6ap-11), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.9877ac926fb3bdd992f46d848f57p+1), C_(-0x1.48c27a70b93cdddc043571f47b88p+3), C_(0x1.f7fdf60845cfba22e0c6bd043e1ep+2), C_(0x1.0b1ea0ee5f9ed06f5107d79a1aafp+3), C_(-0x1.15aaf38ada16a6358cd77355f075p+4), C_(0x1.4a45041b91e1bb24fe9a63ad188p+3), C_(-0x1.05013480812df4c7388d78daa7bap+1), C_(-0x1.13ee46114fd8519c5d7f29b7d91dp-4), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.13b9e8c4fdc4ff9d9c7b93fda5d3p-1), C_(-0x1.e1e5e5cfd0a801f531eaef0fe6ap+0), C_(0x1.29ab2ec864d44a65c8f8abfdabb3p+1), C_(-0x1.3d6cc61e0f6a43e21f6553d10792p+0), C_(0x1.0227f72aa277daecfc1fddb3c5aep-1), C_(-0x1.9ada2a6a9a217e8dbe2b55c6bb8bp-2), C_(0x1.2c68da3893cd5c4c84ac50c60f2ap-3), C_(0x1.1a66dc6d2cfbf029033eb2e70439p-7), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.bf65e79817d27ca7c78972c65f3p-2), C_(0x1.aa2466d50e4a4fcbbebe54f94c3cp-1), C_(-0x1.89fd104c6ff149bf7514a7ddf37fp-2), C_(0x1.24737e6f8ebf0ec8bb9fcc85bb71p-3), C_(-0x1.a1e9c758a51a08321aa63e9af1d7p-6), C_(-0x1.cec09a7ccf05b6ee1ea8f3c17f4ep-9), C_(0x1.cd4feb82d24938f30e41e1af2eap-10), C_(0x1.05937b8388af24ac43ec83967a2ep-16), C_(-0x1.5a00cfad970a7cbc309138fd3facp-19), C_(0x1.0fbc42c672231485a0bcbfe7e34bp-28), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2faeacbb8e753b40eb856e00f522p+0), C_(-0x1.8014975295b2136d5a1adb454387p+0), C_(0x1.05033635f5401c9b60636a32526ap-1), C_(-0x1.0ffe44cc8bc7ea4a6ce4734d8d36p-2), C_(0x1.0b11b28c7d67ad63229fbc3aa7dap-4), C_(0x1.721a1d14b8322b2431432e8b800fp-7), C_(-0x1.af662c52c3b7ae55063672df3c7fp-8), C_(-0x1.a69b860b67a33179a8c7a5f6b2acp-15), C_(0x1.45b12643cf8203bdf796367d51eep-16), C_(-0x1.01892163486cb41cb64453f7616fp-24), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1e62ddd540b05b0cc5ce587007d5p+1), C_(-0x1.980b3fe2011f7bc878be7d399794p+2), C_(0x1.a34dea8cd59b4187717c6efb0662p+2), C_(-0x1.45eb5e5e7e3c9e9ae26ca4aa207cp+1), C_(-0x1.0310f5a5d86de60ba877dea685a5p-1), C_(0x1.da7724c65802bc95482213f980a5p-1), C_(-0x1.4137cfe85b9e5b04e10239758a3cp-2), C_(0x1.7eb866ddca6ba425f9e4eb854a4dp-6), C_(0x1.4ebb22d1ac0760e1461881059843p-9), C_(-0x1.0c5bdfb916a449da5acc3ccfdc72p-16), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.422f9f5227e7facaa94dd7d9e31p-2), C_(-0x1.255a76df553cbf84e8a0b0613039p+0), C_(0x1.484b537c56deca3daefc656e3b6ep+3), C_(-0x1.3c98d8a74cd7736b60af4e604261p+5), C_(0x1.10b7f9c607064185ab2dfc58353fp+6), C_(-0x1.d54dd14cd31af65e5343fc875b57p+5), C_(0x1.8049478b6740d0c6b010047a06c3p+4), C_(-0x1.77f8847acd28ad3549099ae2105ep+1), C_(-0x1.d3687a3bc39335bac7f281e76bbep-2), C_(0x1.816ef86832621ebc63e47cd2b70fp-8), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8faeef62b3a7fd26eb98dd7f984ap+0), C_(-0x1.93816e52ba1c8483ff81ea3e324ep+2), C_(0x1.337880b3a9a717e67b9cd7fec812p+3), C_(-0x1.c3f2cd3d53132aa78f87aee07639p+2), C_(0x1.c7801db7678046e8ebdb22cf642bp+1), C_(-0x1.46377db27f624959a2b9b7777bb1p+1), C_(0x1.77a6f5e8321cd39a930db39033fap+0), C_(-0x1.c4188733407f241acae534ed0f5dp-3), C_(-0x1.f8b0a606c7f795229d5947447836p-5), C_(0x1.b965933f534b1af276b67227f89dp-10), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.cb91942378a6b29e2dd51c51bfa9p-2), C_(-0x1.e6b982120ca31c68b89329c09872p+0), C_(0x1.7b2e4714b270342ea6ba899785ecp+1), C_(-0x1.fa645ee8ca231003817fbe32a47bp+0), C_(0x1.29da9349c32a19bed5b810cc4b88p-1), C_(-0x1.8461e6acf9cb2af90934d76c7932p-2), C_(0x1.67c137342024d6c8052e3d876acdp-2), C_(-0x1.c1a09b7773a59d1a65f356773daap-5), C_(-0x1.0c11f4efd5c0b7d44ac1c3a0720ap-5), C_(0x1.0ac90a45b7a47759a7a92738fc7ep-9), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.033291a6c76d6a2177301a6491e8p-2), C_(0x1.027f6bf7952cdbcf397ade5b83ap+0), C_(-0x1.919d92c6034c44a7ed45a578713cp-2), C_(0x1.7a0ca906acc4841a1191b023a485p-3), C_(-0x1.1142c3515ec433047c393c69962fp-4), C_(0x1.50e2d6421ee2654230b309723685p-7), C_(0x1.d0243aab613f83777184da54a80dp-10), C_(-0x1.1d4c6c249bf0ee08cde9105ae0e2p-11), C_(-0x1.17d0b3032ba5c5edbe3115298755p-14), C_(0x1.310ffd8b564011dafec30497e547p-19), C_(-0x1.509d126dab99ceafee21c5b15f2ep-25), C_(-0x1.57f8e6955253718d03dd42dcc06ep-36), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.9ec434341eaed8ccc6e8d7244a33p-1), C_(-0x1.ca0692ca77439e8f752ca148c144p-2), C_(-0x1.2d988a986b0dea756341b6b8b7c2p-1), C_(0x1.145887eacb10f9d392eed69a9335p-2), C_(-0x1.4ab3cf0bae2a5b8432a0a181639cp-6), C_(-0x1.4e8938899ee371e40cd7b7528ae9p-5), C_(0x1.5cb5de436bfadb9e555d33c55719p-6), C_(-0x1.051eebbefaf7bd71954e297a61ffp-8), C_(0x1.0efaec65edbcc11b181ba7073e2cp-14), C_(0x1.6a87a6b931edc5ab5423dbf1babfp-15), C_(-0x1.4e8b2a27fe064ec01f627183042bp-23), C_(-0x1.54fd8f0625f118cd9bcdded88d81p-33), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e0eacca617ebb860573873f7b1a4p+0), C_(-0x1.5362d7fe36c56b6a443e9d6141a8p+2), C_(0x1.70aa17b7adc0e75a9ffe0b5a33b6p+2), C_(-0x1.86bc52429f3a3f79bb4f1cb73763p+1), C_(0x1.5709310e8d1f635f77e733f31613p-2), C_(0x1.9d599937b31fafd3d66db2bf1cbbp-1), C_(-0x1.18b244e50df675a487d76601b0e9p-1), C_(0x1.fe16d1a3cfb3e7ecc6834f2061cfp-4), C_(0x1.eb4cc917dd1cd56dce6a9280b03bp-12), C_(-0x1.4e09cf12f0cdcfd873bae5583582p-9), C_(0x1.c4a78957d279804ccd5115f6146ap-16), C_(0x1.cb0ccbca08e7961d7bc2f676b666p-25), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.4ca9343b3236825367445e2a7e79p-1), C_(-0x1.492e70f2635c16c262e6190afacep+1), C_(0x1.171de5ca88cec2afbea5499914ebp+4), C_(-0x1.1e704d84a10750732762c3f4d8bap+6), C_(0x1.23bcc34d6a529b0b422faf672516p+7), C_(-0x1.415156a34428a6a6c08cde7dee49p+7), C_(0x1.7ff7929036ddd78bf54cfc378272p+6), C_(-0x1.a43b4147c122c6f143d7b591007fp+4), C_(0x1.833e6f5afaca4c566ce598593c06p-4), C_(0x1.13b5aaaf6c71d5b914583e48ae7dp+0), C_(-0x1.6365af2495a86c5f48d9bd1a47dp-6), C_(-0x1.64d19861a833792a3ce80f84d83cp-14), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.525f0cb11c2720485c66b9e19f02p+1), C_(-0x1.7eda4b6a23328f4e2cec098f6666p+3), C_(0x1.578437542fe4f5fbe4cefec73f0cp+4), C_(-0x1.40c582473fa8c93703a1216d1613p+4), C_(0x1.9815cb7223c105bc2b63ed01a5fep+3), C_(-0x1.222479cd96ee9d17f59bff4df592p+3), C_(0x1.8c2cccc6ee34ca0f24458389d35dp+2), C_(-0x1.ffd4fb5b3918044492967474d1cep+0), C_(-0x1.3be427404fe7d12432d600f4382ep-3), C_(0x1.7c490d447fad2e27fa6b12a0d504p-3), C_(-0x1.23f9756392d0ee9915448c1be2b1p-7), C_(-0x1.1f66b1e7815295f48755fd4e3126p-14), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.80a316d21a0eed480c84ea711d9ep+0), C_(-0x1.ce7e6827143677fbd12dabe06e9fp+2), C_(0x1.ac8b3ccd718c41df56b9c167f638p+3), C_(-0x1.74c81d1a27df5c33454de2219e89p+3), C_(0x1.4010d1eedca99cac8148c11888d4p+2), C_(-0x1.34da807d2aaec910bcf3aa770bf1p+1), C_(0x1.2d09c9846b581b01a4323f49de6p+1), C_(-0x1.97de12ea03ca10913f6e6b1c03cap-1), C_(-0x1.9df5b4fe2e271a26f87f7a1f78fbp-2), C_(0x1.16c54a229aae12ed509d340bab6bp-2), C_(-0x1.e323c5b92bd166e33ab5b4f9635p-6), C_(-0x1.c9a573f22c19a9032c5430df4c8ep-12), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a096c8f7fc8ab1575820ee7a8d4ep-3), C_(-0x1.01d8c748e11fa735da05e73f8394p+0), C_(0x1.099a073a7c7b41898468a5bd14cep+1), C_(-0x1.40ce386ca776e06ba6f31ba7dadep+1), C_(0x1.2a57634989c51fb583fc11fc2c8bp+1), C_(-0x1.e6f030cb23fbfde6dfddcd33a7b8p+0), C_(0x1.3544c2755b1d82eac792a5860a61p+0), C_(-0x1.6af581a622d416ac06a3c40b5b79p-1), C_(0x1.256afda077267e050d8164debfb4p-1), C_(-0x1.6569331439297d46e21a065d5029p-2), C_(0x1.4b88409bdd1172b9682df8963184p-4), C_(0x1.24061e2653bdb3c5fd153e823b33p-9), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.184a0c288d22add7ea26104df2f3p-3), C_(0x1.fbaa047a94a613069e6f550b4e09p-1), C_(-0x1.596f5b6b28cb0681bf78a3e54b72p-3), C_(0x1.234875f46000e28dce7c3f342092p-4), C_(-0x1.90a568ef3b94afacf755834bab9ap-5), C_(0x1.82b42ea0f8a1613dc5ff9725c05p-6), C_(-0x1.96b60b10e59567d6b2c6577bad3bp-8), C_(0x1.8430d19335684e7577fd3b699763p-11), C_(-0x1.92df0230079088d5ad0746147153p-14), C_(0x1.da6faa767962723e71f08f2e9083p-16), C_(0x1.b237bc2c3b5257b1d937078b7396p-20), C_(0x1.66eb1a28068ae3ea1bd5d2683257p-25), C_(-0x1.f6ebd7398c4a3aa441e024a5714bp-33), C_(0x1.5690727034a8a4b1353895ae261dp-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.03033f41d994757a2b4934423538p-1), C_(0x1.8347da7a3030b8b37cdc36ec3c9cp-2), C_(-0x1.7d2f17f2a95af6988be8eca125f4p+0), C_(0x1.c3013eaebde946f9eaa42bce8cf9p-1), C_(-0x1.4be40ed86f2cd0c168ad249492a4p-2), C_(0x1.4580356ca34ff1cf3c18408b1d74p-6), C_(0x1.7e9e8eefc30b45959dcb8ab52383p-5), C_(-0x1.594cf912461bb959724fb77ad3bbp-6), C_(0x1.27c56651be6ed873712071c19324p-9), C_(0x1.e972a09b0f4dc8fdb93114f9ed4p-12), C_(-0x1.1649ec5e541409b8483ac00aa989p-14), C_(0x1.c99c42a59648ab096d412a58741fp-23), C_(0x1.81519dee82f001d0cfd286a4bf1ep-26), C_(-0x1.06b5ee4f0711fc96e3337209d4e2p-37), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.666d532df9def8a39e69d4c9dbd1p+0), C_(-0x1.c0374596ee4d8e750b0b0f065b11p+1), C_(0x1.a43eb9f4500c29913bdae70f2e12p+1), C_(-0x1.d627359f84d250c8825852fe20e7p+0), C_(0x1.891e36789053a132cb4397963bd6p-1), C_(0x1.a23c19ecf2deb44f4177f3e9336bp-6), C_(-0x1.d9c16d05d77872764189280b3978p-3), C_(0x1.b6728d569b4c6b3f03c9c20fd79fp-4), C_(-0x1.66849bebd2ebdfafabb131375ec9p-7), C_(-0x1.fc6301aedca903a123de4bceca69p-9), C_(0x1.7e62ae52149bd7e06a18746f5b91p-11), C_(-0x1.2c21c0130a3eaea0bd3721b2b8d6p-17), C_(-0x1.15f344e8ed1b26069acbf2a1a453p-21), C_(0x1.7bbd836b1bf84d53feb61580dc74p-32), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.b44c4e267cbb4d43745305f720c9p+1), C_(-0x1.c1f7df3ad7ab79897dce80d62718p+3), C_(0x1.1601a8a979c78f82e398ce8545b9p+4), C_(0x1.e5bffb29b3c52bb885497a60d3d6p+3), C_(-0x1.38f35bf0e9ee0ae5b1772951f4d5p+6), C_(0x1.d1869b3f8e2b44288688d26e70d1p+6), C_(-0x1.70d2038145a54625eb25d875d7e5p+6), C_(0x1.34930dde67aea02e0a703b76a197p+5), C_(-0x1.4b77b4fb3674956338abd1824db4p+2), C_(-0x1.d27f3b25c1fd6ce83b2a8b0a4ac9p+0), C_(0x1.32a2c5a3dfe8119d379b71453288p-1), C_(-0x1.2fc64ff8d3420e31f2a6dd47d615p-7), C_(-0x1.c48021ad9bc1646021c012f5b071p-11), C_(0x1.364c0a7c4c64aef45189b312edb4p-20), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.afe05c7a6ada1cb6172616d2c6a8p+1), C_(-0x1.0a8c44cdd47bf4e495a5398413fbp+4), C_(0x1.0f6c0325c5e1414a9285f59e5f14p+5), C_(-0x1.306ff1c62c8336aad5c3f9886bcep+5), C_(0x1.da69559cc91130d28dd4b63660e6p+4), C_(-0x1.6a2c1f828fe2d81030f1ad524eb7p+4), C_(0x1.0e28c771588c30581ce7071741b8p+4), C_(-0x1.ee4b3cc46d890789fa8b15b7da8p+2), C_(0x1.050e3e4d4732a1c55c0c971f3557p-1), C_(0x1.0ea6cad7a5a7fae2eab7d74b22a1p+0), C_(-0x1.6566f5ac7d80487971d04a5944efp-2), C_(0x1.0b828ad29e43eb178f6b65b8f31p-6), C_(0x1.3201b5c3bc1c21bf7086981ccb12p-10), C_(-0x1.a6f0242017b1488503cf0ef046e5p-19), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.77885e6e270a744c868654d7cbb5p+1), C_(-0x1.f5abb22b1b6ebb333fd9f11e8f7cp+3), C_(0x1.0a779dee6c7bddbff2f0d8b9981bp+5), C_(-0x1.164d9f148bde4aa13b66fabbc2fp+5), C_(0x1.2333738e736f124a0ec3de563f7bp+4), C_(-0x1.af306993826a689f7543995893acp+2), C_(0x1.6dba5c59397a4426e98586aad789p+2), C_(-0x1.17ffc928dd1d8bf0f209d0c36abep+1), C_(-0x1.9f39e7400cf5d234f22720c7748ap+1), C_(0x1.d0d0a8f3b805dafc2d2b539d9bb4p+1), C_(-0x1.4ac5cadf9fb14bc48382ff0ecfb1p+0), C_(0x1.049faf6ae689948e66d5e5134564p-3), C_(0x1.5ad3792bdac35c5163486d9087edp-7), C_(-0x1.e6e9a51e36639d68c6db7d7495a4p-15), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1912b6ad90d43603284e290418eep+0), C_(-0x1.85c00c80d7a18fcc693e47644de7p+2), C_(0x1.b7d753e3c818997a04ded98f86e3p+3), C_(-0x1.076d50e7f7850b94ae780b4bf285p+4), C_(0x1.92a29d7ac0e1e0002558af869ed1p+3), C_(-0x1.20f516098425bb22664ce4ad84a9p+3), C_(0x1.dcba519c323cedf78dcb7794def8p+2), C_(-0x1.3fe31292805c0462ca96ae20fe5p+2), C_(0x1.5e9b74431b072dba61e526c0393fp+1), C_(-0x1.a6996ae95f76ef890f12b5a6c626p+0), C_(0x1.806826de1640aff2fbfd8d0d7d09p-1), C_(-0x1.ddc83de4acfaf20be5fee513819ep-4), C_(-0x1.e09e81650c6b74fbce41e5378d99p-7), C_(0x1.5c5b71613d71b7692e7e5f0ba23p-13), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.eae80165a34ad1f2080107f7b7a5p-3), C_(-0x1.5a965a7535366541f0a1afe5172fp+0), C_(0x1.851adfd49d1a76d9d23c35315fc3p+1), C_(-0x1.b139c010d5d8ef58fb69c4f0efd8p+1), C_(0x1.ffefb7038043737a18fc832f1fb7p+0), C_(-0x1.0254056f57103b364cf4bcafdd14p+0), C_(0x1.ff103b26e087e22aa6dbe2498954p-1), C_(-0x1.7a4f70cc2f5d7a6d2a4e62aee34dp-1), C_(0x1.09dce627745a61500e9471981ea7p-2), C_(-0x1.c2f7ce5c8a37b8fcabdaf25d6d6bp-4), C_(0x1.41c46b919c33ee1c6941aae7132bp-4), C_(-0x1.03531c096423a7a88f95e3dc08eep-6), C_(-0x1.c24ed1e998c51356546e2437d6p-9), C_(0x1.5d1ed72a09587166cbb2e531d26cp-14), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1d2fbfac23949a1e129ec9f8391bp-4), C_(0x1.b1b6520101e0e6c7ddaa9da59f23p-1), C_(0x1.8b08d5cd4a2ad4b181244736a713p-3), C_(-0x1.4aef16c7e666f719f7698e178af1p-3), C_(0x1.fd1877f1138be38ba53889d724ecp-5), C_(-0x1.7ee87092fa242b1ef789aaf8def8p-8), C_(-0x1.09758849af60512fff4fa06073a6p-7), C_(0x1.3d3ef7388a3ade9f5adf4b3f580dp-8), C_(-0x1.29147421d57112477f4b7b3491f7p-10), C_(0x1.b33acccf47f1bda17f46b8106497p-15), C_(0x1.7e6498cdbddd4dce209effce7062p-16), C_(-0x1.53f9494edf1282277c1de6dc67e4p-19), C_(-0x1.58c1d88e09b30b0364784ebc1f68p-24), C_(0x1.278ba12dc249a4cd49c8d69ab623p-29), C_(-0x1.705a7a4d83450688cb9e189ad73ep-38), C_(-0x1.4fb4ee678fa0e1946f2bc7ed6f9ap-52), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2b90f770700937399f9f525fd17p-2), C_(0x1.af96b810375ae30c4c41bf8dddd3p-1), C_(-0x1.d3c16b16ba8799042d28d9c49845p+0), C_(0x1.1690032de8cfad91fdf041ea0eb6p+0), C_(-0x1.1f4f37268ff73d0393fe0f67790ep-1), C_(0x1.82c9256a70f8e96c68d16f2e3327p-3), C_(-0x1.540e9bea7c732170245209a302fbp-7), C_(-0x1.49841c554fed1d5f2443e15a5a95p-6), C_(0x1.96a364065f27ccd19657d67cdf64p-8), C_(0x1.0c49493de5a6ec95d0bb4c3aca89p-11), C_(-0x1.b592fbb7be41b5e92f003f6109fcp-12), C_(0x1.9d3f09be0cea6d8d6f8ed455255ap-16), C_(0x1.8562af0388b7df01536ccb66a5b4p-23), C_(-0x1.13cc2e0d34f2575dd283b068f4bap-24), C_(0x1.2234e02ed8630c149658a9630026p-34), C_(0x1.08644a120d1ef6f0d4b961ae1879p-47), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e4c00e361fc67a2e12b083b2df48p-1), C_(-0x1.aad6ffd5d77f153c17f1c8823935p+0), C_(0x1.135c57711e67099c1758b9c717c8p-2), C_(0x1.5b41454ff095722d0f803ea68127p-1), C_(-0x1.c92ba77b267a297500d5b5d44785p-4), C_(-0x1.4f00ea2c2d363149504e045fbe84p-2), C_(0x1.61aa479f9dc67b53226c771010fp-2), C_(-0x1.667619426289632c2e8907dc1851p-3), C_(0x1.7235017b58d31cc6ca2ab84f7b8bp-5), C_(-0x1.85c5f4a449272d8bf24d90db58c1p-10), C_(-0x1.2bb318efa4d23587f50785ea34e5p-9), C_(0x1.b3d73e818e5c9557fa6b95207f02p-12), C_(0x1.bca3f26f194cf877e2358ca6efddp-17), C_(-0x1.261d8947cb7277733f476ea3b7dfp-20), C_(0x1.36693a4632268e426c40140353cep-28), C_(0x1.1a9906065291eec094ff6b8172d8p-40), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.27d6df36685a79598b6c86ce474dp+1), C_(-0x1.2ded79e41fdb0c43d1210e12de17p+3), C_(0x1.e79fd7c0b1c0ebd84f460885ecf3p+3), C_(-0x1.304a1a210a5f9ce8bc8b8a0cdf19p+3), C_(-0x1.effd2573aa9aafcb53e588a096b7p+2), C_(0x1.7ce72fdc2cb91189ae6d5e090c6bp+4), C_(-0x1.985f0196c72e53e6d1cfdee84e02p+4), C_(0x1.d3cfac07a9d2a8c51198c074937dp+3), C_(-0x1.e1a24f8472a680b7d24d058147a3p+1), C_(-0x1.9b8563bd7c7d7dc5768ba3df017ep-2), C_(0x1.fe4766e3faf53b0d124828083686p-2), C_(-0x1.73f12d4155f35b3e8452b4ff00abp-4), C_(-0x1.20dddf659ee509c6befdf1c7addep-10), C_(0x1.ffd28fb3400bf45efe5c328fc188p-12), C_(-0x1.fa83788d3f78d19a901b7477bae6p-20), C_(-0x1.cc794a76e5f165fc8108c92b057bp-31), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.c7ced0f66aeaccfcda16588f9d75p+1), C_(-0x1.2ab8c9c81252e46b55777de43246p+4), C_(0x1.4df684dede46d3a014591fcfc934p+5), C_(-0x1.af3bf949d62b9c07b05b4ac4bf21p+5), C_(0x1.8eeb17bed133c367f65a67fc6e9fp+5), C_(-0x1.541e9c27826e49d24f626bb1a338p+5), C_(0x1.12ea47c60dec043f14d3664c7b9cp+5), C_(-0x1.35c8b07214e140ed7f1d446f3113p+4), C_(0x1.d829e1a7628821bc837255b88e76p+1), C_(0x1.69d6e9c20f73cb2d14ff7351adb6p+1), C_(-0x1.0235621854eeef97bfd3d4e3b1cp+1), C_(0x1.b423243b8b46906701ef92e0fa6p-2), C_(-0x1.2e290398a3fe2fc8cc3aebacf78cp-8), C_(-0x1.22b4e2598d44b0dd2f4a293dacc9p-8), C_(0x1.654cdf573874b672ebfe3509d857p-16), C_(0x1.43e711e67867252f78e7e45afce7p-26), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1617a4f9d885755cd3477307254fp+2), C_(-0x1.94d9c534a28d3ee0a8bf210cb612p+4), C_(0x1.dd0eb6aa76ffda42c87706ac442ap+5), C_(-0x1.168c0447c1b6e90c330602b02462p+6), C_(0x1.24c19c047007f67f0d2fc486ec63p+5), C_(-0x1.016a68491e4d871ca5058cc8b9fbp+0), C_(-0x1.c94ed28aba0f51cc92c5b4dc5aacp+2), C_(0x1.669c08c9522f315c7b041fb5fb05p+3), C_(-0x1.88dca456f345655b7cb4359a3262p+4), C_(0x1.b958d77e385a9163a2eb3b4f73aep+4), C_(-0x1.eccebab605f4b2d725512d8939ecp+3), C_(0x1.f4375d664ce342e4e51867996bcdp+1), C_(-0x1.2ade5d60c45811382f7ff19a5bd5p-3), C_(-0x1.491f178ce56460d544cbe167fd8cp-4), C_(0x1.5bccddec65e53c1b0416c330319fp-11), C_(0x1.398367062ce373b6810676d67904p-20), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.3841475e9a3639fcb27c2a85a863p+1), C_(-0x1.dd3c5aa19c52e5c8a273f6da1b5ap+3), C_(0x1.303529a28e46fac3a8f56ea5a2b3p+5), C_(-0x1.a86d9ebb6edc3ca33aa7af7132e4p+5), C_(0x1.7d0e6c4e24170b40a4b9574c4b78p+5), C_(-0x1.25c8439d2df89fa5007905a011dap+5), C_(0x1.f5b3e1ac9966686ed844c7042856p+4), C_(-0x1.815ee05c85e8aa704180612d3a88p+4), C_(0x1.ca4482f4236a5516d7f638f2b575p+3), C_(-0x1.050825dec75a966028608d12e5c4p+3), C_(0x1.1eeca8acc3a791ffedf80be8793bp+2), C_(-0x1.6df69657c972c8ebec75c924bb61p+0), C_(0x1.75a7ac677c4eee273d03fc609c7dp-5), C_(0x1.ebd49f3810c888c69855752e166p-5), C_(-0x1.4344372e1b6fc786ddf90f275fd2p-10), C_(-0x1.20264586c6bb91b0aa0b4d170d57p-18), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.041f759e862aa2196b99e32b0e5p+0), C_(-0x1.96fe795439508b28db4265486c81p+2), C_(0x1.04a7fd5b5e5923f7f627bd6af411p+4), C_(-0x1.5c5ede521aae5e58438f3722aadep+4), C_(0x1.0b593b29c51bbefd0a21a469361ap+4), C_(-0x1.3ddf512850559b028d83098aa4f2p+3), C_(0x1.12f0bcbe3fa44419a6b52304dc22p+3), C_(-0x1.d4ebfbf56d99633e38e5753902fdp+2), C_(0x1.d31827f76dc61557ae5c1ea99bcdp+1), C_(-0x1.6bf237312f18cf3b573ffc6eb123p+0), C_(0x1.d1d5c0ac4dc0c7147f916f90f5c1p-1), C_(-0x1.794e93c6506dcbe26714d9f89e44p-2), C_(-0x1.2e59e90e0a11c8b7ce9f9105aca7p-6), C_(0x1.26fbfe966bb82001d50ae928dc43p-5), C_(-0x1.e662faa96110f417469ce785ece9p-10), C_(-0x1.a81802ebf94f0a8bc8124e2acfbp-17), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.9024e0f887aa33deb80194db4775p-3), C_(-0x1.3caa56e1c68f9f7ad07fd686ffdbp+0), C_(0x1.947e636a9e373f489450f999fe93p+1), C_(-0x1.033a79f260cef0d616212b14afddp+2), C_(0x1.51b6c9e0d0443759a67a3c3505fdp+1), C_(-0x1.0bd62fc1e045579c86e940e51c15p+0), C_(0x1.028bee5b6619ea0406791e99a571p+0), C_(-0x1.1620d9bfc03eb662d8d654bb6c17p+0), C_(0x1.b5ef819dccd9a27cb2716f32a404p-2), C_(-0x1.b7954b06be8aeb961960232f51e9p-6), C_(0x1.054d18d1cc90c79a1ef036069b3dp-4), C_(-0x1.4817258dd284697ebc00b788ccd7p-5), C_(-0x1.8ce86e181d4254ae37719aa28183p-6), C_(0x1.2926b8981e2a739eefaa1e5b0722p-6), C_(-0x1.20ae937e7a9305bbde13268a4994p-9), C_(-0x1.e260b0ee2a092f8355b87bfdf959p-16), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.12cb0a33640b56e423474a1328bap-5), C_(0x1.4e2c27be21e0e479b88ad4851607p-1), C_(0x1.1c4636ef189eccc399682014d9d6p-1), C_(-0x1.85d2edb33e46dde58a5a504a9ab1p-2), C_(0x1.9e3dada7662a9865be6b99b24294p-3), C_(-0x1.494bbf8e53bfc023fe7e0915ab63p-4), C_(0x1.1d23df75685c890f2df5ab229b96p-6), C_(0x1.d4ed15a06848811344377f87f7eap-10), C_(-0x1.2885ec240634157f42540c2ec5a5p-9), C_(0x1.94f202846521b8fb6dee9352c088p-12), C_(0x1.44e94de53f6f632a67cbb5854d1fp-14), C_(-0x1.b37df99b75f08af621654dd8f54ep-16), C_(0x1.403905df41d323c0c33072aaf3cp-24), C_(0x1.c94370d7ecc9194547661e1cf7cp-24), C_(-0x1.58dbb791a7fb6c3e33eb2a850b1bp-28), C_(0x1.db358382953c45bea25d9891f3bcp-37), C_(0x1.afee7cd299cd64600d2193c416f4p-44), C_(-0x1.0988745ca3ec3e945e33c4d42e22p-59), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.43cfcb9d739232114ccf7b42f286p-3), C_(0x1.f5f9c20090df2cd39669639ec7fdp-1), C_(-0x1.94bc27297b9f96d98ca06b8b780fp+0), C_(0x1.61584eb9fe3a67acec590408bca7p-1), C_(-0x1.a2cb67ff996a90130726bb551867p-2), C_(0x1.eef0eaaf4989e29be4ba95e2f12bp-3), C_(-0x1.ac22308c89e820172f07afea77d8p-4), C_(0x1.c84ec23c8cdbe0f0d252ca4a5fdap-6), C_(-0x1.213456d8479d5a0a002e8a35424cp-8), C_(0x1.2c315a17e4063f457d1b74aaa54fp-10), C_(-0x1.f375455c5c9e61be4fa670796c8cp-12), C_(0x1.ce035ff90a79b6418f9714e02027p-15), C_(0x1.06ba9aa22e87c46e9b5b517bf9e8p-17), C_(0x1.2eea964fb1e803735b7cbdec445fp-21), C_(0x1.f125f98e34b07ec90a3117922ea9p-26), C_(-0x1.51db791710be9863d69c55fb8f8fp-33), C_(-0x1.3ced9d37da5d28d7002692ae731fp-40), C_(0x1.85b82452d92694835d294f84ac62p-55), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2d6cb779664d44484073db45447cp-1), C_(-0x1.01b00cc8d5d0650bb7d9e8758312p-2), C_(-0x1.0fd0995df5aa2a4c5f39f93180c2p+1), C_(0x1.8bd77a675e82837408b645325bb2p+1), C_(-0x1.c8684eac579b3e1019c502de8594p+0), C_(0x1.6e6d859b2e72f80278552877464cp-2), C_(0x1.86e851ba85834ec58a127f16fe28p-2), C_(-0x1.9dcbe6db3790670c84be0eec2f7fp-2), C_(0x1.55c762fd5a0df64b9c06acd53195p-3), C_(-0x1.35a481158ac33b4716b6e91c5435p-6), C_(-0x1.51b88ceed7addc9a97168ddbed49p-7), C_(0x1.0767285c8f10645316c4c221fa2p-8), C_(-0x1.67961ae7bb99fbfcc0d26144bc53p-12), C_(-0x1.2b4a0836ed60ae3a1490ad53cc1ep-15), C_(0x1.bb4b6c6c9a6faf8c7dd84be23c4bp-19), C_(0x1.3f418b80d3d44c3e61fe90bb843bp-28), C_(-0x1.0d99c100eff2e6c61779a485054cp-32), C_(0x1.4b9c0643323fb1c0ce2d07b0b092p-46), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a8dadfc02dd0428b41cd0c1bb0afp+0), C_(-0x1.8d688d31d04a4214094b65c4cddp+2), C_(0x1.317cc4a10faf3ff9c44aa07180dp+3), C_(-0x1.00fa12867f49132d26f6109f1a1ep+3), C_(0x1.9e984b48af59218135976f585487p+1), C_(0x1.0dcc3bbac5e0885ef946fb573bd9p+1), C_(-0x1.41a435a1df480f6b501eca7093bep+2), C_(0x1.075a464fd9703954dc501fa9230ap+2), C_(-0x1.9984cb75bad50ddd23b7c6a931c3p+0), C_(0x1.9cf2e7196d1cbd2ef1ba36ca5473p-5), C_(0x1.c915787e3612e2d3277f4d8526a2p-3), C_(-0x1.60b8b0c3b1138df4716646253571p-4), C_(0x1.324229742ef4416185466d935171p-7), C_(0x1.dd5da666efa58ec47474db0b6e86p-11), C_(-0x1.351528a4bd8176153593c8a5a1a8p-13), C_(-0x1.03c4250827b68f69b983f4479114p-22), C_(0x1.77139f17861eb1acd308dc031079p-26), C_(-0x1.cd96fccfe9f0afba4ba09dac3a7dp-39), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a04f8069ea8b4e447d853aa2b3fp+1), C_(-0x1.18f0a34d9f68e4d06a24b5c8413dp+4), C_(0x1.4ce3831796a61ef6af32be9a023fp+5), C_(-0x1.dc75f9b0b9a1041da91933762b9bp+5), C_(0x1.fdbc97313e6ed6865f9096ac8807p+5), C_(-0x1.eefc0cdda4efa281b21fc89e970ap+5), C_(0x1.b92a7c1b6a889c31c867c0ce8c52p+5), C_(-0x1.2299d502734c3c9b7e4c9a6f523fp+5), C_(0x1.6502b707871df45089990b5055fdp+3), C_(0x1.11f33f4ede647d59a412fb3857a3p+2), C_(-0x1.73b0a319e6889e9aa2e82f2679b8p+2), C_(0x1.244d452e7630092d6c490c8cc448p+1), C_(-0x1.35466c5650c61e120220d045b2f3p-2), C_(-0x1.fc20c8dd92f19b8d6ed30b1d9872p-6), C_(0x1.0d9c8b9d476f7d129de2a5d13304p-7), C_(0x1.a4010b80e5495d0ed9331140ed28p-19), C_(-0x1.49b0c99eb9c648511ea730b4e4dp-19), C_(0x1.962a6dd57b7daa6dc5023a314835p-31), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.55886d2f64380baeb961078fa176p+2), C_(-0x1.09d95f1cede31fcd15d2c7fab39ep+5), C_(0x1.505f98e4bf27766f2f4d3b7ea8ddp+6), C_(-0x1.96ec354b303069fd664614786911p+6), C_(0x1.17b23075f8010224c348afb3ebb9p+5), C_(0x1.fc17211fa4d6f3f6a32616561c88p+5), C_(-0x1.b35f4a36b31c3849a4f062a53c98p+6), C_(0x1.d17f22f2480f88bf1a425e0d999bp+6), C_(-0x1.12118c5678b4d442de8a0eef777p+7), C_(0x1.207a74ca5ad8bfc2ee103b7bf96dp+7), C_(-0x1.934735f943481c7f74f56dd5b187p+6), C_(0x1.3fa55ba9206e3812ee32da2442b6p+5), C_(-0x1.959601005ec548729558e21c9eb1p+2), C_(-0x1.9505e84d98e613cfe4ec3f6fdae5p-1), C_(0x1.43d2632e32cd0df0bb4a95d727cp-2), C_(-0x1.38e017336cd0614a6ed2ffd943cap-10), C_(-0x1.968e83ac595b8c6d9c172a00fddap-13), C_(0x1.f5ed4b124df3ad0700a32c86e4bbp-24), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.f3cda2f9b135402362018230e37ap+1), C_(-0x1.9eeda12641b61ebb7d840ecfaa6cp+4), C_(0x1.260fdaadd19eb1efc078d7fded1bp+6), C_(-0x1.d673d80eeade4a070ce0e7052e5ep+6), C_(0x1.f01b2fa154d0352990b16aa70967p+6), C_(-0x1.addb2c4ad791e217324c7aafb066p+6), C_(0x1.7db87bda6fdf8a74bb08213b9495p+6), C_(-0x1.3f9860f6c4905e7132b1781ae693p+6), C_(0x1.ae731643e9198e621648583330d8p+5), C_(-0x1.fb5cc3351ebc176988bf6478c6bp+4), C_(0x1.259afcbb8804d6eae552ab39c09p+4), C_(-0x1.fe186e460309fdcedab5ec38f6a8p+2), C_(0x1.4d0298c21892754606c3d8ebb24fp+0), C_(0x1.a1f0a66406a122ae435ed98406f7p-2), C_(-0x1.40c0addfd85543af466cc7de08d7p-3), C_(0x1.ba72fac37f087c7aee39dd6d7d9ep-9), C_(0x1.c193f16bb678e5af6510cd4d8f9fp-13), C_(-0x1.16b4995bb4f073263c20b5b2b14bp-22), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.3586d9a9e0e3d99d2b93a01af7d5p+1), C_(-0x1.08fa63342ecc1c41a46b365c4c22p+4), C_(0x1.7c41f01d6960cbda171d22b314bap+5), C_(-0x1.276b64d22e134fe39031785d1e73p+6), C_(0x1.14f1cf74869c077b4ddd600b6793p+6), C_(-0x1.83d54ac636b8244258f1e3c9d507p+5), C_(0x1.4053c8a2c8d2fc6aef1621e8f43ep+5), C_(-0x1.209b538b18df262448ee3cebbe29p+5), C_(0x1.65783340b3782c7d703e94b54e85p+4), C_(-0x1.2ddf670e51dfca7d85e8eeab11aep+3), C_(0x1.38744fdae212579791ea9e59ba4ep+2), C_(-0x1.4065c212ba5c0456783637741afcp+1), C_(0x1.6763c5d11b774e2d99bb54d3a752p-4), C_(0x1.181d4d676ea1f03e7d8c57b5965ap-1), C_(-0x1.87564028831fbd4eb29dad95b0cfp-3), C_(0x1.843d22529bb49b17cf15d645bef3p-7), C_(0x1.52be3b0b8c7af55af9d914b56a01p-11), C_(-0x1.a79c626c8654ebdb591ae5793d64p-20), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.7a3cf471120ec198713994eca41fp+0), C_(-0x1.48b25e52d274b1e47c8864a7164p+3), C_(0x1.cbd93276e7d596419b912da6ea19p+4), C_(-0x1.37885d5242030806d66e5cf9cc78p+5), C_(0x1.4db4fb7a5ecdb9227e8824c1b905p+4), C_(0x1.74ac2dca21f55bb24886b2e8488cp+2), C_(-0x1.11ca2f9f0b7d05f1c16189874d5cp+3), C_(0x1.9fa6aaf0c8d980502f82ac3f1ed7p-4), C_(-0x1.8ceb3288570cd32c25919a739d51p+2), C_(0x1.e686e3fbc3fbf35811a68b06fad4p+3), C_(-0x1.7e0b780d60231a4c786ec3f17781p+3), C_(0x1.7e1a3482e160bfcf5bb1945be474p+2), C_(-0x1.247b57131543bcbee8b05ee74f53p+2), C_(0x1.b8a4e1c96768c895a2f3649c4cc8p+1), C_(-0x1.4f17d502240a8e6f55c9dea2c968p+0), C_(0x1.4b408438ac8689521da23d7beaedp-3), C_(0x1.7264788c9473dca575636b8d6c86p-7), C_(-0x1.d74fd6a021547c7f9f7dd044fd0ep-15), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.f6438a3a88460091e0ea8516e904p-4), C_(-0x1.b7ba9255f9c77a442c3315f3c4dep-1), C_(0x1.3f509b3842148b5acdb05dfc7ebdp+1), C_(-0x1.eac616f0d4f869be16ce06d469adp+1), C_(0x1.ae9244fef585d2a56f1cb69c0c8dp+1), C_(-0x1.00d5d03220f3bbc8a51448aa67eep+1), C_(0x1.9413f3bab26fc85ab60692eb482fp+0), C_(-0x1.9bd9847a10dd537f2de875e0ae85p+0), C_(0x1.16aae27d18a67638fdda8c9d9188p+0), C_(-0x1.1587682f48215c21c42b36d23f1dp-1), C_(0x1.8145e3cc3cfcbcc409c895dd9662p-2), C_(-0x1.faf556e68970db4f5325d20bccb9p-3), C_(0x1.8ec972676b06aaf4a1909e5ab3bfp-4), C_(-0x1.49980ed40883cadc7b702f6c3e9fp-5), C_(0x1.5730c48bae56a4ea4426b047bab7p-6), C_(-0x1.0952d6b855c638b977457b4c3a4p-8), C_(-0x1.ce071dd8df1eee9d16331f022e54p-12), C_(0x1.30a4361eb25b38fd9207742aba25p-18), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.f82d860ed311d7772f0a5fc02a6dp-7), C_(0x1.da87adf545dea36f29603c50206cp-2), C_(0x1.a074ea6831a179cbcefe13bdeb26p-1), C_(-0x1.d3dbc22db33632cb9d3eeea93097p-2), C_(0x1.07dc8c4b588098d99d74923fef1p-2), C_(-0x1.17e06a0deb06ffc5a354422c2913p-3), C_(0x1.d85300a8e9a59db3d8e328544719p-5), C_(-0x1.0710616766f9db787dd78480360dp-6), C_(0x1.0182a0c9a44ba81f2b490da87cf1p-9), C_(0x1.d91cd19825f46395eba40bde2534p-14), C_(0x1.f2bfaace30f58a825ed0b3a11e2p-15), C_(-0x1.d7e9ba7b3ac4736029b548526137p-15), C_(0x1.5c274e2e04a6575e26e75abeb4c3p-18), C_(0x1.63562e1b18da7fac5905b88575e8p-20), C_(-0x1.0af5800900ccbea5a647053aa052p-26), C_(0x1.1409cb495cfaa9cc50f1fb279896p-28), C_(-0x1.1601287f207dc804b32b2b372befp-35), C_(-0x1.4f944d6c974a0ba10244cbd7bf57p-42), C_(-0x1.ad914b3b9c6449c459a4d882621ap-53), C_(-0x1.65d8440cb5909e7eb82f547cb81ep-70), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.4988f615d8fc2101372678651696p-4), C_(0x1.cd9786f046dbd06d9795ae5305eep-1), C_(-0x1.f034187a5d75333e9dbb5b1046e1p-1), C_(-0x1.075e3bcf1d71f31524cf997afbe8p-3), C_(0x1.303436308c600230256305532d57p-3), C_(-0x1.71d07ef81053ea5196f6a9c9ea93p-12), C_(-0x1.321c6b5970b994e47d89204a7726p-4), C_(0x1.0f00f0747578208709a35dbb5672p-4), C_(-0x1.fec807d6bcde2f6b9da93df4aa6dp-6), C_(0x1.092c0960e80ebe73a0fb5f592a81p-7), C_(-0x1.1857810566102a80b03f6d57486cp-11), C_(-0x1.693105a2bb706882bf9e39158aa2p-12), C_(0x1.a2acf3b1f9d0749452e4dc44d918p-14), C_(-0x1.c4d81f25bbab666371fdd702fceap-19), C_(-0x1.e0284772a21eeb07c87b76642d8fp-20), C_(0x1.7db784c0b013093ad9874c402637p-25), C_(0x1.739c15dc80c555f970d134b64517p-30), C_(-0x1.d9433a2520a2e30f13e7c351f17bp-36), C_(0x1.651bd505e5aaae5cab5b708f20cp-46), C_(0x1.29782f98b98d8b31230d837a9eccp-62), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.5c07e5083d7090314f404490267fp-2), C_(0x1.307a2a8e783ea1f99bb361a3ce3fp-1), C_(-0x1.a41fd4c6e53047b890408086b518p+1), C_(0x1.08f3303fd9b5f02cbec87edc442ap+2), C_(-0x1.6a2a8758fd08bb3ed6b347424cecp+1), C_(0x1.5f04ae9c9034ab19fcfae00d09b9p+0), C_(-0x1.150c77d31565d35edf80240e5e1cp-2), C_(-0x1.78ed1cb9b0ec1e760990f81b60f9p-3), C_(0x1.4f99902d11603738023acee050bdp-3), C_(-0x1.41156e1c846c464a303629e298b7p-5), C_(-0x1.6c5861062a83616dee9275c18c97p-7), C_(0x1.21e04958552e6f03502dd7935724p-7), C_(-0x1.cd1c35ab2ad92bf156188522c5bfp-10), C_(0x1.af6480e4adc46cb9e0c7649b6f56p-17), C_(0x1.0136c3fb4b19b9b10157d7a834f7p-15), C_(-0x1.6928b0e495d07fb474aad6800549p-19), C_(-0x1.6377af73884bfae0ae8534a7569p-25), C_(0x1.64323c063686a79e3f723a6f6b93p-30), C_(-0x1.6fb51174aa8e375496c635af829fp-40), C_(-0x1.32449da1b960881894abd2226adap-55), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1c297e1a722977a767a1ff227742p+0), C_(-0x1.a72bc3c00615f73ba93716b01e65p+1), C_(0x1.8e98178e99b31d46ae26eec0b1cap+1), C_(-0x1.8f506e2a5e0eb5edc0313f13b62bp-1), C_(0x1.02364935e2222846b9cdda1bc87p-1), C_(-0x1.0fb2290536b31f2a2fbff3404bbdp+1), C_(0x1.80597d49465bf4c4d8869fb534fap+1), C_(-0x1.38ad9781c750136475272cd6e902p+1), C_(0x1.339d144fd9550bb8463b544a6643p+0), C_(-0x1.08b97b33caecc76a026ab8335d28p-2), C_(-0x1.3f8a268debfb77a1cde76d550fe7p-4), C_(0x1.2b8bd1a4fd0eaf4aaa08a96cf3ep-4), C_(-0x1.35b764060a713cc242948b5c4153p-6), C_(0x1.f33a86db42465a05a6ee3ed1f4ffp-12), C_(0x1.1c307da269dee355c5c2d340dfe6p-11), C_(-0x1.950dcb7c8e981d2c1ff88549cb89p-15), C_(-0x1.f904916865d4cb30ef383c46ae0fp-21), C_(0x1.8b6cb6bf7586b0f4f1fcded4430cp-25), C_(-0x1.21dedfd7476c5553241f507ac2d7p-34), C_(-0x1.e2c7778c519a040a7c97727ee351p-49), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.51d8dbccf9206bcc4420e8d9ae07p+1), C_(-0x1.c33b049bfbce5ed995e58045194fp+3), C_(0x1.0e79522ccf3dd0b86ea89a5531bfp+5), C_(-0x1.9aba40cee29c09f71dc38c35a548p+5), C_(0x1.f144c4df7513d73b0fd71dc9df3fp+5), C_(-0x1.17ce56ad9d9026c80fe9053e3b69p+6), C_(0x1.1abf8d1adcc3e5071c7209bb8006p+6), C_(-0x1.aeeda88b7fe87fd16bcf8e054d05p+5), C_(0x1.6d1975fc2f42e1b2096263c969bbp+4), C_(0x1.64c18afe2844c60255dd74d07edbp+1), C_(-0x1.4b3d36d8f9770ee95e2721f907e9p+3), C_(0x1.8e75251a7f5bee7754c2a9513fecp+2), C_(-0x1.9e20d16541319f6d732cb61c018ap+0), C_(0x1.8f713f264dac28b16bf91d504bd5p-5), C_(0x1.002e9aac591974da848a16c844c8p-4), C_(-0x1.22b5d07d79f24f7de83980b5ed9fp-7), C_(-0x1.695b63166e6d63ad77759faf33b7p-13), C_(0x1.ba1b21857af82fb76bf4742957f6p-17), C_(-0x1.df066d7576ffcacbc6c94f3c14p-26), C_(-0x1.8ec06f9de2f7d48618cf3f2e0232p-39), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.553841cb8504c59ec8828722c9cp+2), C_(-0x1.1648a261cfac86a07a577122f4eep+5), C_(0x1.7429c31b8bcdc777e06851df4ff3p+6), C_(-0x1.d2259be1a7818ecd1bf98b71d684p+6), C_(0x1.36cbd86221f4c1c381302622675ep+4), C_(0x1.4a282d1320ed73864b5c73d42965p+7), C_(-0x1.2e04ab290e2e062d6018a7405d3cp+8), C_(0x1.5f18c6755ba04a0fe5846dc7ce5fp+8), C_(-0x1.80bbefefb89592a7731263e58b6ep+8), C_(0x1.90ad4b61c673e71a7b1a638ff4cp+8), C_(-0x1.4159e0e62036c0e7d3a9372888dep+8), C_(0x1.4eba06db33d52e049a499539c59ap+7), C_(-0x1.6db5a82568a43d359e1324f88c7ep+5), C_(0x1.6613709f48645b09020d1137193bp-1), C_(0x1.7dbb7d4fa2b472146ed131c42bb3p+1), C_(-0x1.1851a9519e35d94904835e4c0f44p-1), C_(-0x1.230c93cadc0b78607a6df63dd398p-7), C_(0x1.7e95e283d8ce34ce8180e79a24c3p-10), C_(-0x1.136d2374e371184371f11564efd5p-18), C_(-0x1.ca2f0f4b750065dbf1a91e494693p-31), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.43e579b56aec6db8f44fad1a2ca3p+2), C_(-0x1.2015783789a1305c4b04f4299082p+5), C_(0x1.be9eb07640a6e4dcf71e8edd1986p+6), C_(-0x1.917bfbcd50104121d7cf2e5fb61ap+7), C_(0x1.e7564ac670464ea6f5bb03253324p+7), C_(-0x1.dd46b6e14bd993fb7d27e4be31d5p+7), C_(0x1.c24b2cb18bb303674bf661030f65p+7), C_(-0x1.9299f7098407dc40f69f41f42557p+7), C_(0x1.2da088f392f175bbf1502b058265p+7), C_(-0x1.7f74fc0a8fbbbd2a662926cc0952p+6), C_(0x1.cafceab55c22225d33d140f11ba1p+5), C_(-0x1.cfad0a751fefca13c3b326a88e5bp+4), C_(0x1.f4f5eade96653abb41ce93f1a983p+2), C_(0x1.14b6d949957a5646a550369bc7aap+0), C_(-0x1.5e908a00f74d9f8f6b65d286f0e6p+0), C_(0x1.1ee7d490234e22c547ade0704929p-2), C_(-0x1.1e667fbdaff187310b0173bcb94dp-11), C_(-0x1.81c4231f27f23e6bc64b0c2f2493p-10), C_(0x1.28216d550397d430f8799924705dp-18), C_(0x1.ebdb45ca159a64fa9f199a16a149p-30), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.0e918e0751a5f26d66d326215241p+2), C_(-0x1.f54b1dc71e94b922c8b7d974b91p+4), C_(0x1.8cc935a5962f326b8767e9c68e69p+6), C_(-0x1.5d87f4fd9af883e7ca8f85ba9a3ep+7), C_(0x1.7fbdfc1f5c92ac9439f72d5fc5fbp+7), C_(-0x1.356154b8ce2bfbb26ff26135d3d6p+7), C_(0x1.00a2f00b6f35fbd2365b8c4d7e4cp+7), C_(-0x1.d61ad68084631dc5b1cb350d96d3p+6), C_(0x1.4b192d7116369fcf46bbc7590d76p+6), C_(-0x1.2bd7eeccbbd8b3529c9ec7ea0986p+5), C_(0x1.d23af72a9213134d138ab79fb28fp+3), C_(-0x1.a5a3f6309aca858b5548cc51629cp+2), C_(-0x1.0097ba319005f0b824ee39f7e25p+0), C_(0x1.29abec5ca24e481b150656fa7b24p+2), C_(-0x1.6d63c669ef72a15dead10bbf465bp+1), C_(0x1.521b96f1f011ffd834fe0c4deb25p-1), C_(-0x1.89a1e9b6409a39917b2558fc77d9p-6), C_(-0x1.cc0f8b0b31975b1da167d6d21402p-8), C_(0x1.9e94a90cc2ee8162e5d90cf2df7p-16), C_(0x1.5739a9ee6eb1c850a9597f22010bp-26), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.c2a4ffe9661190c09a7af8b79479p+0), C_(-0x1.a9c9682497d4356cc97c7817608dp+3), C_(0x1.5bbb8c487ae5bb615e8e73227ceep+5), C_(-0x1.452573aebb3bf474bf24d5595fd4p+6), C_(0x1.91c80b52c3671525c3375a1dd5efp+6), C_(-0x1.84d65b83affb5ca97ccaf8b73947p+6), C_(0x1.678e1d36597adc53993fd96dab7ap+6), C_(-0x1.4933025bdb6895888c173cc7b2a5p+6), C_(0x1.14413c8e18075f1444cc540dc34bp+6), C_(-0x1.b51d99f6678421b18139d5beb61cp+5), C_(0x1.483818775e0cb14480b32b95042cp+5), C_(-0x1.a72562d5d8064b092b7bae77a4cbp+4), C_(0x1.e00e48c9f77143cec0c43c67669bp+3), C_(-0x1.1522f77734c2edb19342e41508e1p+3), C_(0x1.152961e6e0f56f5672007e36f948p+2), C_(-0x1.3d9d88a64fae43ec46db73db181ap+0), C_(0x1.3f1c58e4e2a682bc6ff059fa1f8dp-4), C_(0x1.b3efb441a4e1aa6b7bfceb788233p-6), C_(-0x1.baa159e67dd4ea14a46828d67fefp-13), C_(-0x1.6c2d94cde3ae1bef5e760e39de7cp-22), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.480f31520e3f310c306bdafaf042p-1), C_(-0x1.38fe2f09aac57b92aacdaa15d1b7p+2), C_(0x1.f8f411bacc9f961bc5fe5499f875p+3), C_(-0x1.bc60c3b54f90a9241998e0192f5ep+4), C_(0x1.d3d44a6a16adb2540f6bfe5db93ap+4), C_(-0x1.536d6f833b66773a970214ff031cp+4), C_(0x1.0953a7a524aca913282b24103258p+4), C_(-0x1.0c0dca303e8e262fc9682f1cf736p+4), C_(0x1.af56b1534f29dd21b9240915b75ap+3), C_(-0x1.f628948ceff73b6d1ae732743415p+2), C_(0x1.3ef834c3289aa35b262757674e4bp+2), C_(-0x1.c75ab5e1afc75a2d9d28a11fcce2p+1), C_(0x1.cb38bb2c5f4bebadf622e599ec8fp+0), C_(-0x1.624785bf15dbe093496b9f1d5135p-1), C_(0x1.61b17ae5ff0c0c37a77be972ec5ep-2), C_(-0x1.0b62472bd3d7849095f6dced344cp-3), C_(0x1.c9b3ef0688e890b76d9f130077d8p-8), C_(0x1.7c528a3f2156c588899985294901p-8), C_(-0x1.0c4738028aec930d4308df6549ap-13), C_(-0x1.b40e785cb88086ef360909630572p-22), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8a25fe79d1c4ddac335be8819a8ap-4), C_(-0x1.79dddd860d2147a7416541793f71p-1), C_(0x1.2f92842080f0827925b022200689p+1), C_(-0x1.04a53246109b6b6c0d3ef73b505ap+2), C_(0x1.fbc727fc23eefb6381085fb0ea64p+1), C_(-0x1.2e8a4ebac6b5e49a84fad5dff777p+1), C_(0x1.96ff87cfe4cc502ebda973db1ba2p+0), C_(-0x1.db8c7f7bf2c3a242351f9975276ep+0), C_(0x1.8867eccd39d1aef372869101502fp+0), C_(-0x1.7019bc278ffc03b406b2ff135206p-1), C_(0x1.a30d20b4e67c690471d7cbcbb0dfp-2), C_(-0x1.7340e7a399e63a19859bd6b84d4cp-2), C_(0x1.68181929e64c530045ddd9e48ddfp-3), C_(-0x1.50a6f5e8f3b308d50e585f11b7ap-5), C_(0x1.8d3b211eb839ac11193734372a7dp-6), C_(-0x1.b7227d5381373569d6206c572353p-7), C_(-0x1.a3114fdf2fbc06953fcb9931063cp-12), C_(0x1.71e7a3b4d88bf16a9f3c256dd239p-10), C_(-0x1.4eea023db8bd4900ec558c766ab3p-14), C_(-0x1.09aed93888304346e30d148d3c14p-21), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.ba5636194c0939c427c9ec59581bp-8), C_(0x1.3af72853b1890334601f92a1284ap-2), C_(0x1.da1521352f487f1b71f5ba208041p-1), C_(-0x1.5c6f665240adde3380bdc0aea438p-2), C_(0x1.4840a35a3e5076b07b9bb98536cdp-3), C_(-0x1.9d4fdc34ae4edcb2a06a461fd21ap-4), C_(0x1.042a86a360591d6b2ba9327c6214p-4), C_(-0x1.08554bd18ab256f6f2efbe750de9p-5), C_(0x1.86c905bef28a68962be82a3bfae8p-7), C_(-0x1.8785b403c86f6f7548c23ebef922p-9), C_(0x1.f00fc00fce26eee7a53c75fa9287p-12), C_(-0x1.43b7ce1fa4e5b162d9e05ba1624fp-15), C_(-0x1.dafa2eb6c7f5cbd9451ac8b8db32p-18), C_(0x1.2d678c174b94d04aa232fc24fe09p-18), C_(-0x1.f0554b8e5712d06e0273c8cb503bp-22), C_(-0x1.934a0de4da29338aed7c3945f15bp-24), C_(-0x1.3a5d95f1928eec0223d4d93358b6p-29), C_(0x1.0e0d2138861875f5d48c437e1957p-33), C_(-0x1.652333b327609e7169123d062941p-41), C_(0x1.02e74c07e60809b1acff78842ce2p-47), C_(0x1.bb358cf4adf4da69e5fa9c480499p-60), C_(-0x1.f67e04f08f2152aabe6eb786996dp-79), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.3daa1461d0cf47fff25f3df963e7p-5), C_(0x1.716f56bac1b1102dab376b1a3fe7p-1), C_(-0x1.16bee9987071960277d4321df078p-2), C_(-0x1.f51bd9fa1cf2d9e12262aabd1401p-1), C_(0x1.97243be7bf08455883f653e158edp-1), C_(-0x1.b8eef0110c9fa4de8e71d38444bcp-2), C_(0x1.2402bce395301d2ffcfa2c7a4938p-3), C_(0x1.80595820660c8830537a9f5a0e29p-10), C_(-0x1.fa47fa3f4b021cbace01025dd941p-6), C_(0x1.025a88022a413b155a9680077b35p-6), C_(-0x1.3d712aaad77758afb71e5644bf72p-9), C_(-0x1.c5c0d04fc87430265835a2d868c3p-11), C_(0x1.c45b69075cdb62e0f0501d72eab3p-12), C_(-0x1.6a1670435bfdd529f00d82c5e437p-15), C_(-0x1.13c0d643a27dc3e64f7aa5ea1b1dp-17), C_(0x1.b2cff794384635cf6c5bd8331af5p-20), C_(-0x1.9ee90facd3d1333133d7e205e062p-25), C_(-0x1.c87e1185ca55b3b93aa74571695cp-29), C_(0x1.b076e966620448a8ccbae1de5619p-34), C_(0x1.71c42c5b1e646b3eaaa36a5a302fp-44), C_(-0x1.e6d8e5785ac9381d9a7b90929674p-52), C_(0x1.13fd176d0c254d2994cc4f8bbae7p-69), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.77fed2e01693602fb84977597092p-3), C_(0x1.e1d10780fb06110288f8999dc16cp-1), C_(-0x1.9e9c7ce63835ce70bd9f1949b4bp+1), C_(0x1.bc153af50c24b9575bdc1b7eea9p+1), C_(-0x1.240fe3f248860f90966b383ce203p+1), C_(0x1.80cee17390c17dd6afdc8b5e9bd2p+0), C_(-0x1.abf5df7fd7abfb9aaab015caa888p-1), C_(0x1.50c7e71a108baf578aa06cfc537p-2), C_(-0x1.4654ed4660723ccc0f0acc159e52p-4), C_(0x1.091b1dd62c3e5f033d13bd90e92bp-6), C_(-0x1.59c475f85d7f3ec16b121b44eccep-7), C_(0x1.935e464b93aa450281cf24f671a9p-8), C_(-0x1.8fe1513629011cd322fa61848df6p-10), C_(0x1.90feb0894b434ddffdbc8185f2a5p-15), C_(0x1.09bd1f2d4e386644ae469eb863f8p-15), C_(-0x1.da6da6ad5e76b858534775753bfcp-19), C_(0x1.a3886fa6d48c5693a0b3ec42e08ep-21), C_(0x1.0f7850b94c92b737f20b8005c4e4p-26), C_(-0x1.63226d50629bfc487dd5a4e8ef38p-31), C_(-0x1.84d7e34db15d3108fdfa03f5836dp-38), C_(0x1.75cc98099352929e39911fd43962p-48), C_(-0x1.a7d23115de5731da90d3ce0c96c3p-65), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.60087b087d2ef4b82953952d9084p-1), C_(-0x1.1c49e2797e56cac67a206b14e7b4p+0), C_(-0x1.f023b1706ef0dac15d9852fec6b7p+0), C_(0x1.8d30c07e51574352c1f1eb2006b7p+2), C_(-0x1.80e0de445b219fbdea6ef733a307p+2), C_(0x1.c1feac4e70c181d6b4fca6d1ffb9p+0), C_(0x1.3621ab0ea1b052aecf48cff7492ap+1), C_(-0x1.f3ab98611d47a796d9c546361f74p+1), C_(0x1.5e6794d526a24de36780aeb9efa6p+1), C_(-0x1.c702eca93a33cb508d7b1d00211fp-1), C_(-0x1.ee149aa686bb2faa29ff6d4bcf1dp-4), C_(0x1.ffde0ca5fc1a1519c08ba08ef931p-3), C_(-0x1.a2cbb989ecd0a0b85c48b0eeedfp-4), C_(0x1.d58bf4f6c76ea5b68a5554193d1p-7), C_(0x1.206affc103ba0a875625f4581693p-9), C_(-0x1.dfc88961f6b157e54f77890bbc2ap-11), C_(0x1.f86e53415f2a00da542f82562b56p-15), C_(0x1.28c920e4a3f6bb0fc001a36c54d3p-18), C_(-0x1.9c90e430666c8d48daf021826ab7p-23), C_(-0x1.7e8cf0898f3336a3b6d1b959b3ebp-32), C_(0x1.cc8984cca607f1a4cd24395b33dcp-39), C_(-0x1.051a1f819156ba9bc5cb80611a1ep-54), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.efa01fe281c907b167ef08b2a819p+0), C_(-0x1.34df3dac7fcd3f885ed5b13d2111p+3), C_(0x1.5961138d5be957877d8cfd1f8beep+4), C_(-0x1.014d7a672544a1c4d790253c77afp+5), C_(0x1.5a4b6fa251eaf90e3115b0c8a7d1p+5), C_(-0x1.d72d9b409f2b1bb94911072e35d5p+5), C_(0x1.1a6ca7d65632cc9e3b88e527a77dp+6), C_(-0x1.f8d9ef0a2890c5946bb98eca1feap+5), C_(0x1.142ce1c1f06e19e0c6f07b093cf5p+5), C_(-0x1.90f390767ce4703536c74e99b357p+1), C_(-0x1.822b1a96e2d91cc911472934db6dp+3), C_(0x1.52a34d125b1be5508a31d4593a7ep+3), C_(-0x1.0b934a511e088d9de4577e6b9d58p+2), C_(0x1.335fd67def29efb717b66730db11p-1), C_(0x1.17c48a3b6f0b811400fc04e29772p-3), C_(-0x1.0033850ae88073da0780e3e4b1ccp-4), C_(0x1.68d4635bbce683527c347878fb17p-8), C_(0x1.b6ad0e03e206f2cc34c3ad57b135p-12), C_(-0x1.c361dbb11082ba0b86af7e7039cep-16), C_(-0x1.d59d4ba004a567edb22672d12e01p-25), C_(0x1.f6c8c69c71b982736f46aec1c2fcp-31), C_(-0x1.1d186572e3d30ab58425e9b0d124p-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1672f76c48a3b085a419d3d84efep+2), C_(-0x1.d05e83fe81471c548c37702884afp+4), C_(0x1.49fc051fc99a825862e53c41bd9dp+6), C_(-0x1.e442104e65335b30f1932ff3fcdp+6), C_(0x1.09c52f838d2fca1c275b6ba1ca01p+6), C_(0x1.677b64cbf326e55bcfc76402e361p+6), C_(-0x1.fbf39786bea7b138ef97d391fb5cp+7), C_(0x1.628081b6fdd810aa965a5c98d2cp+8), C_(-0x1.a2714ddd5c22b603c83ee77be92bp+8), C_(0x1.cb4de777b4f362d79e6f05e8e906p+8), C_(-0x1.9cacd3aee3a7e296cd71908c1c97p+8), C_(0x1.055f4806a834671e4070618a5f49p+8), C_(-0x1.8ddf94a470b86c5104b74cbf3618p+6), C_(0x1.95561c2d77ea7cb1b418f1ad675dp+3), C_(0x1.8ab9cc38b4948a55522c2ec1bb2ep+2), C_(-0x1.6e4f007cb3f6f6544bd7c8aa8418p+1), C_(0x1.43d7023213a802dd64335ed45bfdp-2), C_(0x1.951cff21de4ac7e4a1f0a692a613p-6), C_(-0x1.5137c147339bc2af2a690f130f2cp-9), C_(-0x1.3e3df8b2da2752dcb7f745d4f5a7p-18), C_(0x1.78040f51a9567ebaa0b6d793cafp-23), C_(-0x1.aa8cd8e6f8971ce4ff33741ce32dp-37), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.6688e31cf50e0564efea7c707539p+2), C_(-0x1.50ba2688bc0430a9ee7461099f42p+5), C_(0x1.18d5fc503a1772d2730b3ea50efdp+7), C_(-0x1.16422099d0e700c2cc83b554b1d3p+8), C_(0x1.7cdc33f38c2d168782ab512e0152p+8), C_(-0x1.a2f3c3b8e6e4ab101396a900d9eap+8), C_(0x1.aa319d6af6ec967e381e232c3d8cp+8), C_(-0x1.958a02a1024489567edfcd9f60c3p+8), C_(0x1.4bb5b15c50a647500af490b1348fp+8), C_(-0x1.caa9291eb011f2ccec525396312bp+7), C_(0x1.1f2d7abf22a7296277eac06229bap+7), C_(-0x1.3b920d0f7e0d09abc1f29bae2433p+6), C_(0x1.bc14b21b62b9334a0ec0723419b6p+4), C_(0x1.8c237a0fa26d7404976151e77cdep-1), C_(-0x1.7f694c35d9d2245677a758a1954ep+2), C_(0x1.3f67e104a689bca4d8d6dcd2113cp+1), C_(-0x1.4cc6c058f371d1d7aadbd425ad1p-2), C_(-0x1.6b557354b8d84aa675e72eefd888p-6), C_(0x1.38d6e371bb0518c7efdfa510e3cep-8), C_(0x1.260d95329ea8e0edce58683df434p-17), C_(-0x1.5c7911e0053bc1a14fff7c706e19p-21), C_(0x1.8b88d3fa551bf844985173c27b89p-34), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.80f665163dff60603105460968d1p+2), C_(-0x1.7dd2228ef04492e49ffcbc26de51p+5), C_(0x1.48b0d88030936751bd070f0b70d7p+7), C_(-0x1.41512ba753d055c75dc8c75f4172p+8), C_(0x1.8f56f07493ef05c30063bd380daep+8), C_(-0x1.675a39773b2485da34f83484320cp+8), C_(0x1.2e9626a21624df1cdd8e35d51165p+8), C_(-0x1.1263590aebe88d200657c008c834p+8), C_(0x1.9699942af2221429cba47418cbf5p+7), C_(-0x1.59e9b6e0b9c21128db1641974871p+6), C_(0x1.09d1a0b7c583242c5ad30248e848p+3), C_(0x1.cc8ab1005087bf119ad7a75bf51cp+3), C_(-0x1.93c8d5094509572acb009457fd8ep+4), C_(0x1.013c24badc62703530bdc2a89abep+5), C_(-0x1.784654bbd73679c9f2def5413da7p+4), C_(0x1.21acdd98ca7e3a8d97a584ca3cd3p+3), C_(-0x1.6fa583815aba1a21d8ba9c3f6b87p+0), C_(-0x1.39156fe5f0a3b45977f7c9849262p-4), C_(0x1.34372727b2154e0f63382ce7b14dp-5), C_(0x1.c53d49d19717546a3333946ded1p-15), C_(-0x1.57bc52155abea4723bbb438d51fep-17), C_(0x1.869c11b6398bbfee9ec137b2aadp-29), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d573db31c98a592a2b6a796753f8p+1), C_(-0x1.ddfb9c5686a4efd2bd1e36073e0cp+4), C_(0x1.a873c238f1ad89ace04b7607dff2p+6), C_(-0x1.b2204de17a53a3315364d57fc2b6p+7), C_(0x1.23910ebcbe60d3ac86902adcdaa4p+8), C_(-0x1.29c6cec6860250c0db3c6f8b8962p+8), C_(0x1.1c64b27b4c107ca71ade24985867p+8), C_(-0x1.156985f5c8bce6de73bf23e5601fp+8), C_(0x1.ef2b60fc7ce315a6b8de2d939461p+7), C_(-0x1.84734ae811782beee80a7af9899ep+7), C_(0x1.20e874beb6697ebef627268d4461p+7), C_(-0x1.93d454c0120c50c5e5f45ca0c342p+6), C_(0x1.e8c645d5034483f58d32c0b8709p+5), C_(-0x1.0a8b2e2c06173020781b6687242cp+5), C_(0x1.14ef6d11452bbb05715fcae8f362p+4), C_(-0x1.bab6f3f4dbb55284f9925c8a3ab9p+2), C_(0x1.4e6aaf12e910db6611cb145f554fp+0), C_(0x1.e57ecc0ee730e09fd58c293b9a01p-4), C_(-0x1.0f174cea8c305d809bddd1a456bfp-4), C_(0x1.a1f2dc12ec55c96d12f54fd03177p-12), C_(0x1.4002914419fbb27ad65f422d91cep-15), C_(-0x1.6c7e600f14b10472b7579cd8544fp-26), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d2f4e044749b4e7a1c71b105042dp+0), C_(-0x1.e196df480fe71bea5cbbf6f938ep+3), C_(0x1.ab061d20276f0750e2a72080d7a9p+5), C_(-0x1.a7b259e6037ebf7c8e2adb89e41bp+6), C_(0x1.04d3977e22f60f45b515e3221088p+7), C_(-0x1.c308c46a51aa08f31731ad9b7844p+6), C_(0x1.759cb70549060301bbf1ea932595p+6), C_(-0x1.73a4db524ebc2efdc465e09da17dp+6), C_(0x1.4d02e405c663ff8abf63f28cd74p+6), C_(-0x1.c4dfc682dd95df4b0a54f646c034p+5), C_(0x1.217c835a844bf319c913aad35977p+5), C_(-0x1.9d3e5e5e092523c01057547d3214p+4), C_(0x1.eced01c912f6c17b1d536b46140dp+3), C_(-0x1.ab15772777a65a90ae2d7ecf56cbp+2), C_(0x1.780b7892927c5280dd5bee9ee8edp+1), C_(-0x1.59e4e79f9d38488dc3c59417b41ap+0), C_(0x1.04013ac7f90eca1ecf033aafa30cp-2), C_(0x1.63e903ad632e7f30307040928615p-4), C_(-0x1.26b339b06c46eff13165e32f7c85p-5), C_(0x1.1fc083a0e2c35a300d5c6fbf948ep-10), C_(0x1.9c18e59aa15ab3ece464b6468819p-15), C_(-0x1.d792baac952f2e4df120dee003e6p-25), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.19eec26520f7247ef7c6a243923bp-1), C_(-0x1.249f95db3c6a85ee06007305aedcp+2), C_(0x1.0297dba66cdd344c6014ab433b38p+4), C_(-0x1.f4e8dc0eb78aa7eff1fa727c9c71p+4), C_(0x1.1efd1b3c60e0b36de4fe266b9d8ap+5), C_(-0x1.a397a05a5f774f4ee2078a58f21cp+4), C_(0x1.239464bf9e82c4fc4fdd79af7e82p+4), C_(-0x1.3946d065739beaad7a01650a25b9p+4), C_(0x1.2898316e66a7f2a70e1a6a12eca5p+4), C_(-0x1.5bb8e2c4642782930886e32d2ea4p+3), C_(0x1.68255c99ba4c6b07d82156e3f9d9p+2), C_(-0x1.21aae7ae7df31c29928804e58d84p+2), C_(0x1.64fab317448fb0474311942daf3fp+1), C_(-0x1.75b64c97e09686a5bb55f9818d82p-1), C_(0x1.22ff2ac4d8b9c4ff1397fddfa477p-3), C_(-0x1.07ed621dcab476dea8f9bcc8470ap-3), C_(-0x1.4a01e6ee0860d89681b645bb0864p-6), C_(0x1.2e7cdbbc900312ead84b8d7e757cp-4), C_(-0x1.b7f6865bae122ce58cd5b4105bcap-6), C_(0x1.17b65cad3d540e056708b80ca432p-9), C_(0x1.910e0462410b5b96ed51c4c46ef3p-14), C_(-0x1.cf434a44d45d4684dfb9a827c309p-23), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a6c51bc471a3098c7c3ba4b2e396p-5), C_(-0x1.b8315371d42a542d22b52e160edap-2), C_(0x1.89e13c889a74c808a95f3ae5db18p+0), C_(-0x1.8aa497719f070f6dc765c7af4f82p+1), C_(0x1.eb2b7ee2bc88d2eef92b780b6136p+1), C_(-0x1.a91739cfcb4374adc78a339981b3p+1), C_(0x1.4e87023b22be1f061884b91ff276p+1), C_(-0x1.31bb74af8ae4dfa54f812e36b5bep+1), C_(0x1.0e1263d4463c809bd8442e6ab9d2p+1), C_(-0x1.9cd0db1b42b96cb6927f614da713p+0), C_(0x1.3cec213a53551ad84004d758bdadp+0), C_(-0x1.daf35f59b2441d717c1690c25188p-1), C_(0x1.329c321d7ff6b77198e76070d6c7p-1), C_(-0x1.8936ae8cb907bb56ce7124a40ebp-2), C_(0x1.00dee0f339229a14bdfc063bfb91p-2), C_(-0x1.07bd180d959690eaf41df5a4ee44p-3), C_(0x1.cec01fe9b05f624125be250b50a9p-5), C_(-0x1.e6ef9d5209f879f2bf7a379cfa32p-6), C_(0x1.8f4f47250e3a4f324676c24519f5p-7), C_(-0x1.e72d4f4950c89aa59da6edc504bdp-10), C_(-0x1.e19176d7ba69146eb048e9181ac9p-14), C_(0x1.1b79fa688c946fc4993e527c8905p-21), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.749078c0867a9a724454443e75a7p-9), C_(0x1.8ae6a79b4938fbd909b199343609p-3), C_(0x1.d008898983913d9bf1d194ac98f7p-1), C_(-0x1.20e16d5539e3f25296b1c6880b53p-4), C_(-0x1.f688bd1280c70194203f744266d5p-5), C_(0x1.2fca4301354a4e285e82fc4b6183p-5), C_(-0x1.505c64431d7a6f1e36954a7c80cp-12), C_(-0x1.0145189baf0142f2a8862b8be415p-6), C_(0x1.c908becee5a6a6fcccc95605355fp-7), C_(-0x1.beac12be1e7de0939dd15f031644p-8), C_(0x1.0006a916adee342c6b2792c6bd7ep-9), C_(-0x1.d4cc286b09e13557f3e87a0f9caep-13), C_(-0x1.a08b65bbb598677114fddb7b661ep-15), C_(0x1.5f413ab3a7eb94dcb396b2657edap-16), C_(-0x1.5c34d16af592037a11107a487b39p-20), C_(-0x1.2dc4454eebde3379c7645c4ba87ep-21), C_(0x1.74f33a2ccbc6518fcdedc7d5aa01p-24), C_(0x1.ddb5df0a412fd407d061c573b81ep-29), C_(-0x1.07969b3a158bd160a5cdad0ece81p-32), C_(0x1.2c5958b74836c10a9059d0bfc767p-38), C_(0x1.52fae6e83091fa686190e11a0d2cp-45), C_(-0x1.d83da475a639c307966abb294b63p-53), C_(0x1.1342e56840ec19da921d2c329c6fp-65), C_(0x1.aa25edf8f64fee132e1b30933b5p-86), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.23923550f457ca7814b0bb3fd653p-6), C_(0x1.0c0767795d12ae5d156ec5cf4423p-1), C_(0x1.3373be839b47c40b1d36ec3e47ecp-2), C_(-0x1.856d7e6b6468c2deff8342e75baep+0), C_(0x1.22d30ac28dd9c9a5de5413538cd2p+0), C_(-0x1.72e38df054a23a8a5ebabc499005p-1), C_(0x1.8e439b194a1c16626ebcbea59c81p-2), C_(-0x1.3bc2524066e83eb2d5b3ff97e1edp-3), C_(0x1.1bc8f6e41059663daa79bf4a8b55p-5), C_(0x1.2884461caa1e3207b6de1334a7c9p-11), C_(-0x1.db22a9804aa1133069d05b96cb0fp-10), C_(-0x1.3482dca87f01c45e946a258c3e06p-11), C_(0x1.3285223dae55992a1d57ada1533cp-11), C_(-0x1.bbf1c4306d1a37f02d18135ce323p-14), C_(-0x1.17497a4dcd44ffdc92c6ebd1a068p-16), C_(0x1.bebec0cbd1f99371a7867cbe3fbap-18), C_(-0x1.bc40d833ef3598561d72cdf89bb4p-22), C_(0x1.6454c6cebdf97f43adbbdee1eeb8p-26), C_(0x1.5fce040bf0fa22a0bb7f52a52e7bp-29), C_(-0x1.1241493325c926f92e656210ed16p-33), C_(-0x1.ce70ab06ee7eb593175a3e65f68ep-41), C_(0x1.8616f674ef405eeabf053da9c72dp-48), C_(-0x1.7b38ad7c07a3a058098173d3a8bcp-60), C_(-0x1.258ba4702de85ac45e001504a52p-79), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.7e9e99d93265e1ecb27f1a82e385p-4), C_(0x1.e81e73bf7d4e6759d9f3db761257p-1), C_(-0x1.368292c7be10e513188a104c5c4ap+1), C_(0x1.a1c192a939b9674ffcca9b2f1e48p+0), C_(-0x1.58e6f9045a40dd2a472104dd0f2ep-2), C_(0x1.2f82100ba4f2879faa0ab7316342p-2), C_(-0x1.f8fd9be6cc910f763e95aa8aafdap-2), C_(0x1.017de77081fc30f9ad09eddaf43dp-1), C_(-0x1.5831ad14642112326c714ae42463p-2), C_(0x1.30d718554c4cabcfafc1434f8a7fp-3), C_(-0x1.30a6075105b3aa4d5336fc1950e8p-5), C_(-0x1.632f9e9eb99fc711faf42ce203b1p-11), C_(0x1.1cbed37ba4dbd96c225d81054e88p-8), C_(-0x1.77d86fa7164bfc8c126a64816ac4p-10), C_(0x1.50ec238da00966f5e3d28fc9265ep-14), C_(0x1.f99c3b6dd2e633388ada35d1bfe8p-15), C_(-0x1.8453f2cbc2d996b7775a123e9384p-17), C_(-0x1.b4056601f4bff8b5e7d36857cb2ap-23), C_(0x1.4c2776a5f116e1d85dd046bd9786p-24), C_(-0x1.287daf168a219aa1132a37934711p-29), C_(-0x1.b00a66e2af603b8210a104b463bdp-36), C_(0x1.401eb1fad689de068ef9a337dfddp-42), C_(-0x1.71528144e6954a34804ddc8b7672p-54), C_(-0x1.1de10823e626bbef4adf3610f4fep-72), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.95e033565cd465e59fc64a849ff5p-2), C_(0x1.e7908dd5753c97550b1b562a02c1p-3), C_(-0x1.293799fcf6c8da1f93fe2d057e3ap+2), C_(0x1.36cc467b08bf7d8a89d5be8f934fp+3), C_(-0x1.4335983e135774c5e5156a45190ap+3), C_(0x1.9c4d14b5414867b3e2c99a21a031p+2), C_(-0x1.ef81d85b23a01ac83af86d64d1abp+0), C_(-0x1.2378e73c6b10a2f7957b04478d3fp+0), C_(0x1.c6e27151761e3e586f5403563b06p+0), C_(-0x1.c857e67243153a965a648f8e6a77p-1), C_(0x1.3531afa42b77f4c754018d3dff11p-8), C_(0x1.05f57c1a6464d742d9d2e202da9bp-2), C_(-0x1.38a2db882124dfc4e44179ad6816p-3), C_(0x1.35c4a5041d9b9456d2520e65bc23p-5), C_(-0x1.fddc3c9f813d6aef1f4f22d0ffb3p-14), C_(-0x1.2653a0321997d1fa4ad992783a03p-9), C_(0x1.ec5d6f7ab50c177dc61e0a189fcdp-12), C_(-0x1.dc01f8633f4c61396f200866480ap-17), C_(-0x1.379717b64ca37d0f86a74f664124p-18), C_(0x1.7e5cfdc9a1b17dce328c7c0b5cf9p-23), C_(0x1.a124166c5786174e1b984a588c59p-29), C_(-0x1.4171311c3a7b2623f4df8ab8200ep-35), C_(0x1.65f402b77f1ab227d7a791609ed8p-46), C_(0x1.15123cc4efb60d3af1736012e615p-63), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.4c5d516dd5340d0879832abfae77p+0), C_(-0x1.5d2571cda5543923016a360261d3p+2), C_(0x1.24b0f03522629e31e5a0ddf9b0acp+3), C_(-0x1.39e0f8d13e8db1f029ce62587cecp+3), C_(0x1.f006cc927be5328f1a33d6aed069p+3), C_(-0x1.0ce2ffa4646117df99ed92fff69cp+5), C_(0x1.b8b8afcf323d00e8ad39d1ccb61dp+5), C_(-0x1.e6925570e3f510211d732b9179c8p+5), C_(0x1.503102590c0b7b7ae2742f43b1bp+5), C_(-0x1.6d86add093f074bc432a452b5189p+3), C_(-0x1.35b5dc1025f2d34a60aa7bf9f93dp+3), C_(0x1.a6237c764b4a28340b8488817371p+3), C_(-0x1.cda455c3ae3929d25c3c5a324857p+2), C_(0x1.d5a02bb93708a320124accef7fd1p+0), C_(0x1.ecd4c4adc075fe2457753c0ae29ap-5), C_(-0x1.660ee59df078b432fb4f889b38bfp-3), C_(0x1.5158e51b27e5dbfe89f577f9dcaep-5), C_(-0x1.73814bfd57b681fa89fa6df52a98p-10), C_(-0x1.23460c48f636fa706d007acb283p-11), C_(0x1.fa353cdebaaaaa09ad0c40e9cfcp-16), C_(0x1.19c5738584246e6431d3352c6ae1p-21), C_(-0x1.4bb4308ed51fff3108f30cb71f7ep-27), C_(0x1.fc9a1f4f09858f536f1a575d9e29p-38), C_(0x1.89a8b7b9d28d1d71597812aa68c7p-54), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a35157d8dba56b3359c55dbb3245p+1), C_(-0x1.5a1bc35a1cc0dbb69c71add31e17p+4), C_(0x1.fa0a0878d9a933860f511fa37af4p+5), C_(-0x1.a68f6523a82701663e04e3ed3779p+6), C_(0x1.98403a971e63162a02dd92c33da9p+6), C_(-0x1.03810e60e02049d57e6cc9d05d6p+5), C_(-0x1.14faaec76846550eede58601f0cdp+6), C_(0x1.3d735b94c105436aa6c6accd08c9p+7), C_(-0x1.cdbd7de801407d716cbc38649987p+7), C_(0x1.20043470ad456af43bde8d7a0984p+8), C_(-0x1.2591e882d85cd18b0dca9775a589p+8), C_(0x1.b621996a63c17e6687cb0aeb2864p+7), C_(-0x1.a875ba068d8449d487f82d8f98a2p+6), C_(0x1.85c7d166f26b7783d793e4b535e5p+4), C_(0x1.1c0e0d6b929f95b9e528987efc33p+2), C_(-0x1.36efc345fd87e7f12a7cd8cf55f7p+2), C_(0x1.3e3f5c2c93c347939cad28d35ff2p+0), C_(-0x1.bffc3922a312894449dea079023bp-5), C_(-0x1.75f52c4bce3944c6d40bd8c68e83p-6), C_(0x1.dea5b49d2b299f2f3407a959506bp-10), C_(0x1.10aa3eff5f8aac0902d8bf4b6addp-15), C_(-0x1.ea6ed6c321e753c1b3e92351b813p-21), C_(0x1.089ab261bfe1c8b7f19aebdff953p-30), C_(0x1.9990a3735f2b8137827c03e7b5fp-46), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.5d159c98a090a206b1f5a487328bp+2), C_(-0x1.54873e7e1b3d210625d277e6898dp+5), C_(0x1.2c245e185ac8b14c7baac4033f4ap+7), C_(-0x1.416f5cc6c22c1fc04eeda9dfb493p+8), C_(0x1.e67e2b7f933044475571e632011ap+8), C_(-0x1.298ee57db6ed5fd4bacad0de9695p+9), C_(0x1.48ee3d90a4e34a8f4d18f98b7344p+9), C_(-0x1.4e6b4521eb7a56c1ef75797e43fdp+9), C_(0x1.2782e95d7bf9f5fc360d37ee013bp+9), C_(-0x1.bb493883e544d446bc2b8bcc693p+8), C_(0x1.25dfd4b9fa45afe8f2d50abdb77ep+8), C_(-0x1.575e0c206b7ee6818931b6231d56p+7), C_(0x1.1c028f2725fce675841ea5e425e4p+6), C_(-0x1.08a1fe0ac6819f96e8258a0368bp+2), C_(-0x1.12ed1d6ca77301d9871c862435c4p+4), C_(0x1.66791e904ad3b41e47b43fe289f8p+3), C_(-0x1.7aa9733036515afd48134b03fe32p+1), C_(0x1.41600caa02955d88aadf08f58823p-3), C_(0x1.275514f436a31e564b7d019a87cbp-4), C_(-0x1.29373f56ac1095884f483f83febcp-7), C_(-0x1.51ea7d9f345040b9bbf67fd2c9c4p-13), C_(0x1.deb156b08b87ef0592d66bd4c9c7p-18), C_(-0x1.6e30fae8c34ed8366ddfb0cc8561p-27), C_(-0x1.1b57abb7d7f1ba81ca336dd9e4d6p-41), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d4fe27a0835ae1a04e0830be24cp+2), C_(-0x1.ecb0f32ca76fb494d571b0a3e338p+5), C_(0x1.c6da62a20cd0a85f32742b3dd231p+7), C_(-0x1.e3622dd5ba05d80a963a5e3e0d7dp+8), C_(0x1.49508717a90e836846bfe76665d8p+9), C_(-0x1.3d934aacf56d0a27027f03a0039p+9), C_(0x1.068600d74e1c90df9e5939a69755p+9), C_(-0x1.bb4eb52dbc23c8aa9dac0b1ae5b9p+8), C_(0x1.2c2d3c048caae8b4e7ebc3a10a9fp+8), C_(-0x1.6a6f07f5d07dd28cc71310327c39p+5), C_(-0x1.48c0f7b3bed9dd4e2bcfc6df9159p+7), C_(0x1.bce28601020e5546efe49f4f2facp+7), C_(-0x1.9e035ea535c3aebdf12735df11cep+7), C_(0x1.737017c34f7deef2722c9d811907p+7), C_(-0x1.15bd065f2789c251ed52867c6e81p+7), C_(0x1.1609d2e86de1f46bc02dc6e0a8fcp+6), C_(-0x1.30b382548235fc08ce2a6ea99e65p+4), C_(0x1.34c266d274d020226722064f6a4ap+0), C_(0x1.56d14dbd1c0ef8dc071f1d5be26fp-1), C_(-0x1.f82518456ddfa0a1ea7fb11fa704p-4), C_(-0x1.1d5d333a03734067f69cdf063e2dp-9), C_(0x1.599f88826e1df7529e25322303e3p-13), C_(-0x1.742b04eba227022dc2784e1aeb19p-22), C_(-0x1.1fd835e2f3ac373e68a1719919f7p-35), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.6f91b1fb16e463903f2417b8bc33p+2), C_(-0x1.8fef11e8059ceda062deb12c9387p+5), C_(0x1.809c444472a8d8415a2c7a9afbefp+7), C_(-0x1.b10bf090c92b5336357cfbd2f863p+8), C_(0x1.45258188f71468e863f92b55998cp+9), C_(-0x1.7231afc08bd276307932b219a0cfp+9), C_(0x1.7af82162ac359965f69e6fcab693p+9), C_(-0x1.823e9f8992b59fc66e1876f1aa68p+9), C_(0x1.6f4bc124eb7dc2e04c11a11579edp+9), C_(-0x1.32f291524b4fc819caccc41f919dp+9), C_(0x1.d856007cb8fa074ef0836c00fb93p+8), C_(-0x1.59b2f057a74e4aae3ebb4a35f68fp+8), C_(0x1.c4898ffe6b603cfd7a5fa627ad77p+7), C_(-0x1.01b04bb5c7e4ece20624945e7d4ap+7), C_(0x1.0ee550f2b46fb0067dbfbe5f34b2p+6), C_(-0x1.f149829700499105abd07323449cp+4), C_(0x1.21413698e7cf1b5b76cf50d81657p+3), C_(-0x1.1e358290df39caefe5b52d405e07p-2), C_(-0x1.54f12799790c9591a372397a1538p-1), C_(0x1.1dedd290f907f8d2a852f01bdfd7p-3), C_(0x1.2b8db385d6eeb017f64738645db6p-10), C_(-0x1.7cd67d6099898e46f355480e2303p-12), C_(0x1.c1758243d6f68f11163695671c33p-21), C_(0x1.5b5402fbe8db7e6e4a3332e846cap-33), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e00f201ca9b47bec13b3bceeec35p+1), C_(-0x1.09aad588fc6e1d2e5e320a1b6965p+5), C_(0x1.0083b1ed3add1dfc189ab7aaac2p+7), C_(-0x1.1b01639f15a47195db844f5df4eap+8), C_(0x1.8e74c5b415b4c982c62a28306ab1p+8), C_(-0x1.907a858da198db5b4a86eef21cd8p+8), C_(0x1.68e4a68143eb6280f78231820634p+8), C_(-0x1.685dfe59eb94f38e35f487b91dc1p+8), C_(0x1.592f39b72049a36e7924f8b1defp+8), C_(-0x1.09589acf597f567d3772f2b218afp+8), C_(0x1.658b66c44d2d9f09118af69ddd27p+7), C_(-0x1.f90c71880a91658c0d9a38574dffp+6), C_(0x1.49a9a7009f2b267b39bab54a8a34p+6), C_(-0x1.441338caa52cfa0e2a27d488fb3dp+5), C_(0x1.0b7b2a297fde14bc6faf3e06bf71p+4), C_(-0x1.d98372b1c68d3f52be82670d6ee1p+2), C_(0x1.f43ec1f2a32806088746ff9dc715p+0), C_(0x1.6165b77555fca80d9c5c14948139p-1), C_(-0x1.4f8a8171bb08fcb9ccd7f4688dddp-1), C_(0x1.267683e93d2b771765dfc5bfe73cp-3), C_(-0x1.8ddc624d415c8d8d9889292068a5p-9), C_(-0x1.979cae945ae1031f8b5a56752269p-11), C_(0x1.95627b187fdb196e7b60fd3122a7p-20), C_(0x1.38bcd286c35de60d5fb4c84a2f35p-31), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.ddc9914b8fce26e89a34c64d6d6p+0), C_(-0x1.0aa6a6fe4749ff9a53419e5cb74fp+4), C_(0x1.ffd30a30f104e3ad2ade2b583021p+5), C_(-0x1.1076bbdb4cf7527cd039bd2ee863p+7), C_(0x1.5b314fd5bd8427278ea0f14850c8p+7), C_(-0x1.15e629a2f07ab3b285fb28d62142p+7), C_(0x1.73ecdaa7dbcd11927e445f4fc04ap+6), C_(-0x1.7ea4991281a803e96d951a02ad23p+6), C_(0x1.92fe5087093b614dba0f2e58af18p+6), C_(-0x1.e50ce86c3eca30ad8c357a5bc172p+5), C_(0x1.23fe36ce5250d05c3006a508171cp+4), C_(-0x1.1183a5ac74636a4f4f8077863f2cp+3), C_(0x1.325da71616787b1a97cd6b487bbp+2), C_(0x1.b5b93d37eb78f2e235cc59568f84p+2), C_(-0x1.6174cc292a977e8769fcc13572c1p+3), C_(0x1.b8e78e1a9ada492b4dd6fe85e7f5p+2), C_(-0x1.ffc6e54f09b8a6376ab9c26e41bp+1), C_(0x1.807b43d233e13293cd8f6f610b94p+1), C_(-0x1.949effe4fd5f10b6f0bb69f9fc41p+0), C_(0x1.99c706ee33d33292c4de755a9043p-2), C_(-0x1.8b4255eb2ab52df50469eaf1f575p-6), C_(-0x1.25fbde4ae0e29153ac78daabb6bap-8), C_(0x1.a2ffd5a58a3e625ad5baf547df1dp-17), C_(0x1.4225e5d67d6a903058f380dcef3ap-27), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.82555f0fca681c9ced300bba3465p-2), C_(-0x1.b108ac4bd9d5de90a612fa91bba4p+1), C_(0x1.a3af9f5e28533d44a218819eab18p+3), C_(-0x1.c92e2a69bebea1255ad98910de81p+4), C_(0x1.336156f19a3eab19184560490c7ep+5), C_(-0x1.154d20c532d37d99d550b554251fp+5), C_(0x1.af95c6a7f034f7267500247c3a39p+4), C_(-0x1.a382ed435f8ed2216764cb0a372p+4), C_(0x1.a5a57db59b67be50825ea51ac179p+4), C_(-0x1.48587bdb4781058d9836884c3b74p+4), C_(0x1.c6519b1cdb292e6d292e4f1f9c11p+3), C_(-0x1.64406dc5dece20ec3c4c58b87407p+3), C_(0x1.05a0da2a87dafe77cb9a54ec8326p+3), C_(-0x1.34062a3bf7c109c05654bbca487fp+2), C_(0x1.65a3327bcf1ac1cee14ebea4c8b6p+1), C_(-0x1.b27cf7ab49be37cde0f46679310bp+0), C_(0x1.a5bdc7192b9c3a20ece9060c1ba9p-1), C_(-0x1.571ac2983f85e3a6dc62f13fd384p-2), C_(0x1.31767817c6adec541d6996364d3fp-3), C_(-0x1.904f3491bf69c7251d1b40c4f69ep-5), C_(0x1.0ee4f3163f55f45905e2ddfb93a4p-8), C_(0x1.2584f1f36b43e7bbd83744e7e8bep-10), C_(-0x1.373cf584c03ee906a072cfcde9b5p-17), C_(-0x1.db60a068c3377c744925f382f6d8p-27), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8dbb03fad2c2ff4e565f682fc387p-5), C_(-0x1.bebdc5d3b23911ed145126163ba8p-2), C_(0x1.aeb7a5ea21052a1c43ba381385e3p+0), C_(-0x1.cb9851522d20abcc6f87f331e722p+1), C_(0x1.240bf59871b997fc41c935dfbef9p+2), C_(-0x1.cab7cf1ed537e0d17c393ba768f6p+1), C_(0x1.1fd4543a5fd8cb1e3fd209bf00ffp+1), C_(-0x1.1ce9744c1c9756de9b809c9cc5acp+1), C_(0x1.3bab08bd76344b447fe47382a836p+1), C_(-0x1.c40e7b4e77556f5ef8447dfa81f7p+0), C_(0x1.feadc8c7ce87a8fc67e2732ba34ap-1), C_(-0x1.a643a47d84b4da70d0fb0b9b5ca8p-1), C_(0x1.543b964e0f03a3a71ec489e8760ap-1), C_(-0x1.577aa576ffa64efb7d0e9a7c6b39p-2), C_(0x1.499f6f7a97a22bd1178c8279f046p-3), C_(-0x1.d5a15151b901635be5a327439552p-4), C_(0x1.d4c5badb46707713b03f6550ccfep-5), C_(-0x1.094f5215690db085443c42ab246bp-6), C_(0x1.cd0926fb9e142792dd84020c8a8bp-8), C_(-0x1.b2091c2c73dd02f84cb3796bc045p-9), C_(0x1.fdc7350edfadd24f5fb7a32829d8p-13), C_(0x1.4af17513fc3a876960b7cf51425ap-13), C_(-0x1.fd199a3cefa31b76bcac261239c5p-19), C_(-0x1.7fa406e41ed65db974ed315201c3p-27), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2e3c0bb3f3ad4d49ee7e86ec562p-10), C_(0x1.d73cdc4f17147d4ff78a1eaebc89p-4), C_(0x1.980f074dbd462038712882b2223p-1), C_(0x1.0b8da7807c2738b0ef8a21bd41d9p-2), C_(-0x1.381b88314120b0755faac9b6a208p-2), C_(0x1.a64053bd4da4144d5c6645aafa5p-3), C_(-0x1.be6cb26620f84322f5bc9ad124p-4), C_(0x1.5369f32b472a8bf80c2615157588p-5), C_(-0x1.e553bfb83c481ee1c85b1021810cp-8), C_(-0x1.5b97376b07916025b5f5ed690f77p-9), C_(0x1.3ad93e070eb79f317793c09c0451p-9), C_(-0x1.6c8658d1b206dd40e11227faae77p-11), C_(0x1.421437e7b839d2e408af08229906p-16), C_(0x1.359cb55b7d335b5bc8ff9070d38p-15), C_(-0x1.16b1cde08937e6520514fc007dd3p-18), C_(-0x1.1e470298289ae452c29404b9c746p-19), C_(0x1.16b7d7c52ecb6bf5c9c270fe3977p-21), C_(-0x1.2a9017a9058ec8631bfea23cf0f2p-27), C_(-0x1.e6603a12c62203e481a6f751bb0fp-29), C_(0x1.ad635a5532ad9d7f9b990f3258b1p-33), C_(-0x1.0b7166f3d598041c11f82d418c5ep-37), C_(-0x1.2dcc8d3c8b0cf63074ab4d9fba6ep-43), C_(0x1.994c7452dcd30c07dade8e0a0b5bp-50), C_(0x1.d3e7db27a70ee63bd0dc60e06dc1p-60), C_(-0x1.ad34c0383fa643c903234154af78p-72), C_(0x1.c6fd0b1a8d6a2b5f9f47659e9cb5p-94), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.ffe6a833f41d1e41c335a1d66225p-8), C_(0x1.6878956519ce3162ba29291a8504p-2), C_(0x1.4f6222726462315c1311b1bd0b69p-1), C_(-0x1.9d7a4f00f9dc035ff30a13b3dd54p+0), C_(0x1.ee1a7236f71e3afe8c9241dc280bp-1), C_(-0x1.3a4c3d150c11dd01e59680a43c1ap-1), C_(0x1.a5124e1ab47a907fdd8a56cf5fd2p-2), C_(-0x1.fd47140509eb33a71307cdb49b3fp-3), C_(0x1.efeb8355fd2f814144fb4db02bdbp-4), C_(-0x1.695e5e5e49cf847101e5144b6fefp-5), C_(0x1.73cae05387f642ba0d652b2dbcabp-7), C_(-0x1.fa774911ba2d3bb25d61e69c8c8ep-10), C_(0x1.13b07ddddb3b836ee57d12843693p-13), C_(0x1.7cb11c0b4280a9d8a95e4eb20e72p-14), C_(-0x1.d2cbfff6e2a582bd1061aa2f380bp-15), C_(0x1.74388c9fd28e69e7d9f0c5af3fddp-17), C_(0x1.21ff895bfb5f2915922793fd222dp-21), C_(-0x1.156307b5c128c175f7e3a71477b9p-22), C_(-0x1.19b91bff8bef4f88f1ed76cce8eap-25), C_(0x1.f7d83e4d41c76f94d46210e4d1f2p-31), C_(0x1.5090626b206a430059df75028168p-34), C_(-0x1.405683426ad010e44f0a98cc929p-40), C_(0x1.6ac079eed130df81302e2b26c482p-46), C_(-0x1.9a49f0637a3b64a9eb35bd52aa23p-55), C_(-0x1.88bc66cc087f1d558950f224d6c9p-67), C_(0x1.a0541eb1bdceab613773d4dc3dd7p-88), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.70e38d13c6dccf6333417be4b4fbp-5), C_(0x1.98429094e12d1953c234a36b137bp-1), C_(-0x1.5a23aee5cfcf330386719e085aa1p+0), C_(-0x1.ca3a85e30ebf60ba5eccc5b7b84bp-2), C_(0x1.f2911f6caea6ac421bc7b6d2ce04p+0), C_(-0x1.902df5acb98563fb6c85941263b7p+0), C_(0x1.6e5d8a32fe3ae7b3c23b4e6e9c7ap-1), C_(-0x1.7cd7499a11b87c3bc4909e0bdb58p-5), C_(-0x1.cb51389df1436d54630b5c4050fbp-3), C_(0x1.8970fdea96db48b13c52294d029p-3), C_(-0x1.2e3ba43116d4ee1d14ccd7ef1eb6p-4), C_(0x1.a437288ed51ab324c667ecc7c439p-9), C_(0x1.5d8afaeb5ec2a57500ea441b58aap-7), C_(-0x1.3f213a25a4c39a4ee9f8ca7fc5f5p-8), C_(0x1.438df66495fed0569b1e6607263bp-11), C_(0x1.92aacb344e1aac45946a6dd95b1dp-13), C_(-0x1.4a2a2b6937dca67c2fb96409eaabp-14), C_(0x1.061494c076ea4c2b5c794f2371b4p-17), C_(0x1.1c61500cd5ff603bf7260846f007p-21), C_(-0x1.fed404b96c72e77fac42699e644dp-24), C_(0x1.9900fa8d5cb81723cdb543a2521ap-29), C_(0x1.4b71c6cbb7be353ab93ac21700e3p-33), C_(-0x1.f4e20f23251aa513b13eb0ad0eafp-40), C_(-0x1.ae764159a5bb5c8d340066c07578p-50), C_(0x1.0753e4c918ed6b59ce15c4a9365bp-59), C_(-0x1.1725d8c4676c38ff70e1cc359512p-79), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.b6406454732d4d440405d44a6a49p-3), C_(0x1.b949541f458cd808c01c6f4442bcp-1), C_(-0x1.49bc84198d8eee0e1769477dd34dp+2), C_(0x1.255157167a5528a3714c438e2bbbp+3), C_(-0x1.254591e8b6e06babda61e0b5bd92p+3), C_(0x1.bfdd01aa9e6916b30d7fb866cb4dp+2), C_(-0x1.258cb0e12f407e788c8d24c043p+2), C_(0x1.244b687910817f75269b9b13d0aap+1), C_(-0x1.76e9c86768fd81ae0140e512f91dp-1), C_(0x1.2db90e1b7e223907d65e1858ad53p-3), C_(-0x1.adc00aab7f786622c376bd60c25fp-4), C_(0x1.077b01cdc29a9bffc55813096431p-3), C_(-0x1.4e1bd3d7c8106ffe51d90e297c64p-4), C_(0x1.a8b1719f76969f8051acdf38ae9p-6), C_(-0x1.1b67a8fdd5d395a5e1003bc2df39p-9), C_(-0x1.5aa2219e8b072017d97056f432f5p-10), C_(0x1.0c296ebe05b6e9c7cf2917908081p-11), C_(-0x1.315112d6e2648d659715640aac77p-14), C_(-0x1.aa34a64782e3fdc563417212e36cp-23), C_(0x1.718ac2125512de66d6a9b5d79809p-20), C_(-0x1.4ed202350e6d4103a23efe811aep-25), C_(-0x1.6a2c3e7b115c942fffc924e2aa83p-29), C_(0x1.03cb1bd946e2daf6230de1902b89p-35), C_(0x1.d2ce73e99c2943d672b79f3df3dfp-46), C_(-0x1.110d7f1b0bfbfc4b48ffe175513cp-54), C_(0x1.2175be08d4af39d29c43830b5338p-73), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.9bd3bc24739608dd1ea0727f797p-1), C_(-0x1.218b20c923a72ab49d783c3c2182p+1), C_(-0x1.8f073ee2485429a822c3456748ddp-2), C_(0x1.10368c3ad14ec0121ffa10beccc4p+3), C_(-0x1.6e5fd027a16b3fa71b0c68881f6dp+3), C_(-0x1.fee6b19288528fc99125553bcb88p-2), C_(0x1.5dae0c64ec100c07cb64acfb530ap+4), C_(-0x1.253938fa65f9cdca9dcd99a2d96bp+5), C_(0x1.0846ca351ee337bf1cde15f6a892p+5), C_(-0x1.d3379cfd6d392ab0067070d38b2ap+3), C_(-0x1.bc1cbd5de053b1b3e6030cd2eb44p+1), C_(0x1.49e86d68d4cf8c86d82167732746p+3), C_(-0x1.e4ade08c4a6c2c8507d0731ef456p+2), C_(0x1.651f390634956dee37faca7ade61p+1), C_(-0x1.14e32e1f9b6bac3d6ef9b665a8dep-2), C_(-0x1.c20b1d287136abbd5724af54edd7p-3), C_(0x1.9dc73570ee73f3a5d7e75adc1efap-4), C_(-0x1.dbb9ebdd9c09deccb1020147719ep-7), C_(-0x1.c7f5c1ec60f696f9a40d5c2f13dep-11), C_(0x1.a5fc856e52fad70c72c88b43b17bp-12), C_(-0x1.07f65daa0049b089e54b5e492044p-16), C_(-0x1.0e378f07aff0a4003d557ea13ebap-20), C_(0x1.69bc58d5ec0ccbef38bec2915824p-26), C_(0x1.872aa1bcf368769fc21e287db36p-36), C_(-0x1.7b84969608016d06bfce8c098437p-44), C_(0x1.92548cc9b5b71c86f11e26fc3a07p-62), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.29b15e8e05f4922e7d4e47048a9cp+1), C_(-0x1.cfd365d6145278198eca9c82d9f8p+3), C_(0x1.440caad9c12360807dafb3bad1d1p+5), C_(-0x1.116de9d813b38a3407c462c9c8afp+6), C_(0x1.3b639c503b3cf7fe4e226236b434p+6), C_(-0x1.0040f57e975e1a258b9875fe1f17p+6), C_(0x1.e6fde6a95ce32902224ee9a0f717p+4), C_(0x1.5c1e9e155aab7b67b6f0684e8054p+3), C_(-0x1.b1e5da7957b3c8fabda1cfa1992fp+5), C_(0x1.7d1f138d16b9d31aa28298c6d585p+6), C_(-0x1.d6f4cad7bdd82bc575e84a0ae447p+6), C_(0x1.9fd808c31038fd9d9f9820868c69p+6), C_(-0x1.ecec6e1a57ab3b47a08d37ee9238p+5), C_(0x1.43fff7220eba3de58880aab6571cp+4), C_(0x1.5e941cd01c024910420637b6b61bp-2), C_(-0x1.d2a0789936f63c584facf37b3e67p+1), C_(0x1.940e89f9fbe3b90fa47d360fd472p+0), C_(-0x1.f62a7689777aabb4ab21abcf7e27p-3), C_(-0x1.2b3b3b35a204159ed02721cadaafp-6), C_(0x1.3de2ba1c1b05528a92ffeeb8fc2ep-7), C_(-0x1.21cbeea2dd955597cbff120c27ccp-11), C_(-0x1.2150f65158193f62d7d7f8ca1f69p-15), C_(0x1.159bf889454c6b38325ea0bd0aa7p-20), C_(0x1.b00f4f96ce85167dd0220db19d66p-30), C_(-0x1.21e8e13c855c01e5c446a0ad86p-37), C_(0x1.33590911079747fc32e0ebbb9924p-54), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.3069c9b572d786eb96d929d90cddp+2), C_(-0x1.2e376983f6cb6b3abd68459b0db9p+5), C_(0x1.1366d92966ea16320047794482afp+7), C_(-0x1.37b9852173f06f1765e1fe9f84p+8), C_(0x1.ff3f2db6a15a3d87e9d7df5b42f3p+8), C_(-0x1.57d9383606e506f39f38563cb6bep+9), C_(0x1.9e8b97533b1eae6eef5ccc2c8b76p+9), C_(-0x1.c556790a27e1d4367bdf86d03f05p+9), C_(0x1.af9eb47abc08e08daae8af537da6p+9), C_(-0x1.5e3047bf51b54c2759154839c7dbp+9), C_(0x1.efd9329bb40ff6440883f8a40f82p+8), C_(-0x1.337ec090261a5db68ef9839a3fcp+8), C_(0x1.1dd7e09a266914bfb2df7819245bp+7), C_(-0x1.34f8d53391e95dda3b7a36e1f269p+4), C_(-0x1.1b6423ffa4134de5e81b13aa374dp+5), C_(0x1.038ecbdebefe39ca7724b2c5d6b5p+5), C_(-0x1.9f2073b507553852ed1a7122dc5cp+3), C_(0x1.0d3b2378aacf1f56c9dbd6033ed8p+1), C_(0x1.b93ffbdcbcfbcafb2828e4f8a1e6p-3), C_(-0x1.00284db90f95b583e4f9723dea4p-3), C_(0x1.5202609236b6be9cf16ae5695042p-7), C_(0x1.4b9320a57f2323116dd63291deebp-11), C_(-0x1.d3b085775602aad7427a1a128489p-16), C_(-0x1.e975304f420640f339ac1f2721b2p-25), C_(0x1.e5cecfa6ab7bb5421ef8c106f4f7p-32), C_(-0x1.0188e4a2f5a9df06f6875fecaac5p-47), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.f579b17074e36836eacdf20b2124p+2), C_(-0x1.13b9cbe766166f25c9dace3616b1p+6), C_(0x1.0d0d0432bec134cd566f5783ca25p+8), C_(-0x1.309a86e68bfe9899fc0e86f2260fp+9), C_(0x1.b8e26231ea03e8ec859843dc6ce9p+9), C_(-0x1.b08b284517ec42e68106ca8a8bc1p+9), C_(0x1.3c7d2b26245024778e76cf716fbfp+9), C_(-0x1.7e7def0dd6c17f062ac5f280847p+8), C_(0x1.9c880448390e60397d83aacda54p+5), C_(0x1.dc1752cc2f2f84356ce375550f21p+8), C_(-0x1.e54a03fbbc2fa46a8399b07d254cp+9), C_(0x1.1a42e1dae56904bbcf3f8f7fa5c7p+10), C_(-0x1.f903f4a18c30e32dc6c260029f14p+9), C_(0x1.9d8db919083864fcc4e1ce713df3p+9), C_(-0x1.34173ffb143e1d9eed0dd73c6925p+9), C_(0x1.64eb3c27db564d469eb11c515c5dp+8), C_(-0x1.0b0c43171fee5929daa55b569994p+7), C_(0x1.5f0a5375d11c72dc55988338ff36p+4), C_(0x1.d8f6b9f1522f2e96a9e46aa5caf8p+1), C_(-0x1.1c75896d6d598c65080bd27d32aap+1), C_(0x1.f38ac1a749daef77915c1d44f9d7p-3), C_(0x1.f82700b4dc7274aa9bd956d7234cp-7), C_(-0x1.1306135d4672f12980f36c25a44ep-10), C_(-0x1.2dc514d6999140dbb2a21c1d56f1p-19), C_(0x1.1d494ae1d331f410d68f7a178351p-25), C_(-0x1.2e8464bcec8d40ffd77ac9bbd77ap-40), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e32cc25ea4da498425dfec2497a6p+2), C_(-0x1.1692ca6458ea9e38b45000f9e974p+6), C_(0x1.1fa09c1316dfb4b439ad2e78bb59p+8), C_(-0x1.615e67f0c1ccc897da6f2d005018p+9), C_(0x1.265c8c1b4b1aa4b3e36b99e4a1a9p+10), C_(-0x1.7569ed1c8210ca209e47f9d0511cp+10), C_(0x1.9e96bde5063d41cf09da3c270b93p+10), C_(-0x1.bbbe167a38d63287ecfeda29fbbep+10), C_(0x1.be080201e737d36f7e79bffa876fp+10), C_(-0x1.8f099bdabb21898e359857d34007p+10), C_(0x1.43b83815e15a62b284f0ee906572p+10), C_(-0x1.ee6ad68b3bda4ee4ba8bf16f4fabp+9), C_(0x1.58d561cb84d267ecaf633fb5a5d5p+9), C_(-0x1.a3b282a8407a310226d833dadcd5p+8), C_(0x1.c79d620ffafc0589079eea90279ap+7), C_(-0x1.bc78cb9447aa124d62b31a0a7f54p+6), C_(0x1.418e35902e32cdd0c2f21fb873ep+5), C_(-0x1.3abf360acc2f742d879127375bb2p+2), C_(-0x1.ad7bb3867b3c2b046f80e1cb0482p+1), C_(0x1.a655024ebf2fd4378622021ee814p+0), C_(-0x1.affdcd4718ba7f1a965455b89c8ep-3), C_(-0x1.8341cd6c6b0a9d48905a1ecfc91fp-7), C_(0x1.b55710d3ebf552b754ea432b16e1p-10), C_(0x1.e321738ab144873b6e4379081333p-19), C_(-0x1.c53c1373c88584f948dc39838bd8p-24), C_(0x1.e0c270acb15c5fb50466c4df9e1p-38), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8d1f8a32797636f661365be0e3e6p+2), C_(-0x1.d4881995a0c1ea2393ff422e453fp+5), C_(0x1.e86d414a78e33b3180b306c7fb52p+7), C_(-0x1.280027c9b087591ad85db337ae83p+9), C_(0x1.d3eb5f0b0594c2750ef02a700404p+9), C_(-0x1.0b82a55c2799ede8dec1e33e1dcdp+10), C_(0x1.07ce9f70ddb2869a658274b505f1p+10), C_(-0x1.0d7822536789d9033e70cbead7bap+10), C_(0x1.0df61d2a506b1f8fcfe72d1ca4cdp+10), C_(-0x1.c6893ac6cda6b55a4941f5e57261p+9), C_(0x1.45ac9e808978822ff4ad1899b3b8p+9), C_(-0x1.c9d686e237043dec7c04f88fd885p+8), C_(0x1.35c4c3819b30f9b6fdd5c67ec132p+8), C_(-0x1.4a58be360f4f421d89e83ecf3267p+7), C_(0x1.017559c35f7610aa1b72e5e5a83p+6), C_(-0x1.5d1ba7f13474232b92fdf4e5cb84p+4), C_(0x1.dadd49a935c8394385d3a3bdf6d5p+1), C_(0x1.87b01fd4326a3668ccbb1eed227dp+2), C_(-0x1.9ab15d247f90f9fe7c9b6b3dd567p+2), C_(0x1.46cd6a0d33a48aafbbc221eb1f48p+1), C_(-0x1.8955d7defe0d5217296739d07f07p-2), C_(-0x1.85244f4e65bbc4ccef7883bc8ba1p-7), C_(0x1.6f86d3c43106164aba39dbfe0b2fp-8), C_(0x1.1b4e3c12a74dff21568f59de83f3p-16), C_(-0x1.7914d82d3193f580c3335f167104p-21), C_(0x1.903b4b44dd8c7c0a4e702124dc3fp-34), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.041a0a897aa28eb3a0ccade17e3cp+1), C_(-0x1.3658b5d77609e7977d3641db3a11p+4), C_(0x1.5194af04e2f848c21930873e900ap+6), C_(-0x1.c3df81f0aaf28bccb5fed61687cfp+7), C_(0x1.ad183e8db3dabe867a1b1e1d7e93p+8), C_(-0x1.3d9c782d7007715e1144e807f092p+9), C_(0x1.852da35362a6d4101e229e2b5077p+9), C_(-0x1.9cca18f6947dd0d5bed4aff692d8p+9), C_(0x1.9a6efa498935e2e3d82e1fd52122p+9), C_(-0x1.a300c2ebdd39d26204b2e2ccd8bdp+9), C_(0x1.a735477cbff1b966c8a20eaae97p+9), C_(-0x1.7a384b1c312fbe2a2f45b3550037p+9), C_(0x1.2afd886ee72d716fc638e75f48b8p+9), C_(-0x1.d0f63946d275b18c0f5c2756f025p+8), C_(0x1.6384c4a13f54dc153d90136891aap+8), C_(-0x1.d6c269ce8bf34e1953164b65a3d5p+7), C_(0x1.08982647617ff8ae60bccefbfe0fp+7), C_(-0x1.1f7e83a0711235a83bc8e025bd62p+6), C_(0x1.2a5701b5bea0dde347ec02073e97p+5), C_(-0x1.c18aa4ec1159b6d22d740e4f35cdp+3), C_(0x1.4dc13861658a8dd406eb1a845d5ap+1), C_(0x1.bd5ac19033244ca1c006b305a421p-5), C_(-0x1.1aa94170fffad7174e8899965ff8p-4), C_(-0x1.97678bd8dc9fa54b7e4c01f3ba2ap-14), C_(0x1.25b3fc23ddcf5fe31ea2281e4301p-16), C_(-0x1.381fef501218e9cc3e0863bb3cadp-28), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.456a1d2a45d0d4e9e18e4013bda3p+0), C_(-0x1.86731e38f2c9e9bd245a6d7f6e86p+3), C_(0x1.99ddae9b5957da8932fc9013b15ep+5), C_(-0x1.ebccc1d5d759a0cf4adc92beb271p+6), C_(0x1.74f85dd906948af50c229b89c98dp+7), C_(-0x1.8426225b26443b4ef3c972f9489bp+7), C_(0x1.4fbcc1bdf3f1963c49a88c06aa08p+7), C_(-0x1.4776c0e99319f61e68a41fbe42b3p+7), C_(0x1.573bef3fda7eadeaaa4191468e3p+7), C_(-0x1.2b0c271bd883e242fdd8d9725e0bp+7), C_(0x1.bb5bca80b624fa5bb278816db9f3p+6), C_(-0x1.5808025c93fa4e6af5a7ad436556p+6), C_(0x1.0c1df40cf5e4c4ea4441c80693a5p+6), C_(-0x1.5dea01151a3e197eb05317c268edp+5), C_(0x1.997fc95198573b5277250e908707p+4), C_(-0x1.f5c4140f2a03e036d15c57dbb36p+3), C_(0x1.1578f4041624b0e3ebbbb44abecfp+3), C_(-0x1.e11a4c47848258b137f885157e3p+1), C_(0x1.8c2f5a8cae553e89ef1e861ef5b3p+0), C_(-0x1.42cdddde9b71e8354b8c2fb7c09ep-1), C_(0x1.1b37523680cd9a16c0e5dc3ebd03p-3), C_(0x1.61bca3fd3effb1c3f5807afcb9adp-7), C_(-0x1.eeca78cc1dd9a8d407a9b1f6577bp-8), C_(0x1.427b3775515b64598a140f609c8fp-14), C_(0x1.1c6c30fb5472c91c3ee2a25808b3p-18), C_(-0x1.2f056506ce5e619914ce605b0524p-29), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.45a484f799a722e4cd950a09d5fbp-2), C_(-0x1.87cf9eab4f40073db99e6a0fb481p+1), C_(0x1.99aecd437634b1af52fbd40a01bcp+3), C_(-0x1.e335dd2c6e9de306d05cc358c6bp+4), C_(0x1.5e3841e2195098fae8b77b691b21p+5), C_(-0x1.48839e048b83d3127ebe74020885p+5), C_(0x1.e11a7f30735e301f0eb2ede8063fp+4), C_(-0x1.bff27724d4103b12e92a64b54c9dp+4), C_(0x1.f68b6fe2ccc3168c1a15db6eeebdp+4), C_(-0x1.a9c89c30bca221a764ae454bfb09p+4), C_(0x1.147ddad811d2b11feabea5bba8adp+4), C_(-0x1.a10ee0eb1ccb64a80033704ddb98p+3), C_(0x1.5d8b9ffe3cdb891325e9bfc9fb55p+3), C_(-0x1.b0eebf69279efaf954dd166c21dep+2), C_(0x1.b180929e1a69b7ef5328a0cfd4a4p+1), C_(-0x1.11a2d370771ca7d9ba7c7444df33p+1), C_(0x1.45b0d998cab377e10ef3a92e12dfp+0), C_(-0x1.d74083eaced416102c8dd2af61fp-2), C_(0x1.27c1113b5bdb7975242772f43479p-3), C_(-0x1.2ee6a8512694e4da2e5b07f1c606p-4), C_(0x1.0ad11030da22955532f0e66e0c83p-6), C_(0x1.b719ad4ae715fb13a424d63fb241p-8), C_(-0x1.7b5726cd7507b577ab874fe8a876p-9), C_(0x1.efe0e7fbce7f41797c67293a0937p-14), C_(0x1.116839f7247ae044e8dfdefe7163p-18), C_(-0x1.24c158fd367df5563093507c0edcp-28), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.439a95b32a47eb5722e3cd7fe3cap-5), C_(-0x1.85e5f8ce20b701780e2029b7ff55p-2), C_(0x1.959ab595a2ea47cca93fdec47d03p+0), C_(-0x1.d591277dff53d8dcf59277336155p+1), C_(0x1.43a6564933b3f0805a5a899c5bb9p+2), C_(-0x1.0a2c05cc597aaccc032de2cc831fp+2), C_(0x1.273950f6ffd17ee92b32456caf9bp+1), C_(-0x1.050c8b9cb84b7c5048bc5cd2f92ep+1), C_(0x1.600ea820111d062fdf2a6acf661cp+1), C_(-0x1.21f61a844a104f06b392bde6725p+1), C_(0x1.19f0e6ef31a0d26707b436c0ada9p+0), C_(-0x1.8e2103144a726110a565e981ea79p-1), C_(0x1.a07f2894f970eb1bd26c4012674ap-1), C_(-0x1.ccce8527cee5c45450edf8973a9cp-2), C_(0x1.e56137866a8254327c313c62b4d6p-4), C_(-0x1.5df48c0c87cd72cb9ba6c6b9ceadp-4), C_(0x1.19d3f039c46cde096e59d4adaef2p-4), C_(-0x1.9e6cd0f61f4caa9b0d4bb0b897fp-9), C_(-0x1.b966bdf45728a5a5bb304f91c5cp-7), C_(0x1.8240771a20727b5953c676de8a9p-9), C_(-0x1.1b05a2f57f924748a24f50e9e6eep-9), C_(0x1.7f8554959f4a532982e2ba397a2fp-9), C_(-0x1.23710df832eb1845bb5316dc1abfp-10), C_(0x1.cc575afdf3f3ce7d0de6ac81f14p-14), C_(0x1.1f238196ae22e33d86876e9e195ep-18), C_(-0x1.3697e9bf43069ef0c328d37a1aebp-27), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d99d611c0465d7fca87092137394p-12), C_(0x1.0d2f985427a1dc1f62afa99d998fp-4), C_(0x1.4a539266aac6de6ff0ee136fe6aap-1), C_(0x1.1fc50d04f7f07a49e55f06b78355p-1), C_(-0x1.d497750272bfa28f3f1990b740bdp-2), C_(0x1.3575a87d9c1633de9f0ee95125a2p-2), C_(-0x1.7e644ab11888684db8a7b8d90489p-3), C_(0x1.a1785765bb948d52e0838b0df196p-4), C_(-0x1.7135a6ada8b52155f89869cf22c7p-5), C_(0x1.d8cfdcbb1618899a1617de65e071p-7), C_(-0x1.57e157b5bcea7fac037e4b9b62aap-9), C_(-0x1.5f633204e959fc32c151ba987165p-15), C_(0x1.10a4589d9f87d6dc51e36837ed0bp-13), C_(-0x1.592264d16e621b5275bdd9d12d3ep-16), C_(0x1.89979784d7185338d2badb26cabcp-18), C_(-0x1.4f841169a1bad189406e2832bc2dp-18), C_(0x1.74953d3967ccd8cc322dbf252946p-20), C_(-0x1.f7cb1acefcf435a3d287cb8094c6p-26), C_(-0x1.c92be21aef0c9ac0fb550ddd5f87p-26), C_(-0x1.3b9a57c4ce7e7a8e7b0e1df188abp-35), C_(-0x1.6a58cec0fa224ca49741d5041713p-35), C_(0x1.4bf1eb8cd4c9c2273508a8b73f46p-37), C_(0x1.697067f1715a141417bb7553b3a7p-44), C_(-0x1.513d790bd242fdd412e02eaf3fd9p-49), C_(-0x1.b3943c02986a6636aaf05d95d84p-57), C_(0x1.54d330be5783db7123cd1333ac9cp-67), C_(-0x1.3f6e1e631364c64c65f6b5a7fe23p-80), C_(-0x1.d0d882f8587b498d8efb759e05fp-104), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.af673717274af370272903c1fa7cp-9), C_(0x1.c7ad45d086ea4c5ed9ed7e340defp-3), C_(0x1.9756cb092ee06f6ac1eb577b96f6p-1), C_(-0x1.51916657c183447d0774789d6344p+0), C_(0x1.6cc6e8f0624052b2c0fdcc8950d3p-2), C_(-0x1.8cf37d6182ca0b170d0a042e4192p-4), C_(0x1.9a3fa2f41d4953051b0c6d4a1b03p-4), C_(-0x1.0a50be22f2b86dd755f1bb101decp-3), C_(0x1.df3f4f6c19d45193b61450be39f8p-4), C_(-0x1.2d4b7e715db6bf84cb93e1a16129p-4), C_(0x1.0681e4c20b9fce41d5b4e56756a7p-5), C_(-0x1.1b50d689cbed8df146901e68b6b4p-7), C_(0x1.49acd134a254ba0136bf2c9ddd8p-11), C_(0x1.16651955943e391787562b852142p-11), C_(-0x1.c26d1f2c70c86f0644644cef75b6p-13), C_(0x1.3002118e762a111c6bcee4aaae9bp-16), C_(0x1.49fbecfd7d9c6cba55cd30ac067dp-17), C_(-0x1.8781a4a6a5f7c8daadd9ede249c3p-19), C_(0x1.5ed0ad164acd249f0f9d827483fep-24), C_(0x1.da4a7558674addd03b35614f7a6dp-25), C_(-0x1.7e23c7237f3f9358779e22d38d23p-29), C_(-0x1.bd8f2cef8c9f03d137232e9e498bp-35), C_(0x1.1c61501fa10480730673344e3608p-37), C_(-0x1.c1b8b33989e0245e7c861b898f54p-44), C_(-0x1.95156f39cb33a3cd95db28e3bb11p-52), C_(0x1.d1f8ddb7d01989509bfbf0327d67p-60), C_(-0x1.34635de67ce8bb9a35ccd2f4bcc3p-74), C_(-0x1.c0c6d283f741e5d8d9e1ced44ca2p-97), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.52aa167437ed3a97a2d16e2e7e71p-6), C_(0x1.2f386450cd3603452775e405daacp-1), C_(-0x1.92da3e0f4795f52ddad307073cb1p-2), C_(-0x1.010e6c23362c2f5a0189ea0fe7f3p+1), C_(0x1.ba5e5707337cefc73943a8303bc5p+1), C_(-0x1.6efa1a351e68942304e8e68b7bacp+1), C_(0x1.e2efff792ca6cd2456dfdb721f76p+0), C_(-0x1.e9e84815ce29a5578b4bc0477acbp-1), C_(0x1.3e7bcfc83dd34f0d929299013451p-2), C_(-0x1.3f21e5e83db9b76a1e6a21ec3442p-6), C_(-0x1.00e091b8310d7c425038e08dacbfp-5), C_(0x1.93252ea5d40edb85ff0ddad301dp-8), C_(0x1.0cb53bda124f4c4d4c0ae3af4779p-7), C_(-0x1.6ecc6596fdeb97786cd08cbbbaedp-8), C_(0x1.1da3c88de4593a0d10cc249b83cep-10), C_(0x1.0f705c9109b88bc792c8e251c3f5p-12), C_(-0x1.687f176415b5a1410c9f394cb959p-13), C_(0x1.03bf749271ea0dc9bfa9a81f4245p-15), C_(-0x1.0a570c997b8f6bb3aa2b6fc454e1p-20), C_(-0x1.b60c856b75c6f8f8db3b0f76f67dp-22), C_(0x1.2f36c8024d47853b1fc5abd2c569p-24), C_(-0x1.ab6b4d2a0c9eb0fb78406697468ap-30), C_(-0x1.b77dbd4d624bb182ce2a8088a4c2p-33), C_(0x1.02e06a0b5252899742121667393ep-39), C_(0x1.f900db818405bc4cfc19c190531fp-46), C_(-0x1.5cc6aba4a366fbfbcb9e7e9b2b91p-54), C_(0x1.79a9be1badaf05e53c8d4ae211e7p-67), C_(0x1.12cb1c6610cf5a5ca8d9bf45819bp-88), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.bde47de89537efcc2943722b907bp-4), C_(0x1.ff6e39e05bc1960ac6a7468afb9ep-1), C_(-0x1.0edf7812c7e6f7d06a00b362ef27p+2), C_(0x1.788eafbfef56fcdc50a685d1f90ep+2), C_(-0x1.0b9e58d049e2b1cb9469b014878dp+2), C_(0x1.57d72a54d9b7d9046e3ca22b5dccp+1), C_(-0x1.5aec59993d64c03ae451f5fb822ap+1), C_(0x1.66be004fbc25830ff3a497ea74efp+1), C_(-0x1.257b730e2148d4f4b3feb863502dp+1), C_(0x1.61e6a248fa765db41939b126fafep+0), C_(-0x1.1d661708485736ce63b6c04b417fp-1), C_(0x1.7634ae9385e7d28433590ede5d72p-4), C_(0x1.aae5eb36cf2339bb1da3727f92c7p-5), C_(-0x1.66a2dd81189a5724bb1062f0dfebp-5), C_(0x1.9ee5c38dff3c5ada29575f743d87p-7), C_(0x1.cee452b55c630166e1f1c650af12p-12), C_(-0x1.7d0e63753adf810a13b7946ecd6fp-10), C_(0x1.95a9bb14ccec080a6175688009ap-12), C_(-0x1.ac68b8496deea7093d3eaa37178ap-17), C_(-0x1.4a3e531dccd5a7c88df667aa9928p-17), C_(0x1.45a5b2adacfee470f99a3f9acab4p-20), C_(-0x1.a0585e72874e51a270db9477829dp-28), C_(-0x1.4a4aaf36fdaec2c3a3e857f50877p-28), C_(0x1.818dc3c36642c77c4040a75f3899p-34), C_(0x1.bc8ec635290e455c58f05f4aae9ap-41), C_(-0x1.1c50f4adb4d48c39b492719c193cp-48), C_(0x1.541ee5efeba27ec1d6332fa4f538p-61), C_(0x1.eef3c669427ba33d298eab6d070cp-82), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.da9efb84cd101b891a55bf085a33p-2), C_(-0x1.0a963523c780f95520ba62e1635dp-2), C_(-0x1.6ead78b2a7f870bae850968c013ap+2), C_(0x1.1fb0b7ee7fe9b42077abdaf556e2p+4), C_(-0x1.a26b20f9bdeeff0cd0b5e878c8cap+4), C_(0x1.5a362701692b5d54a80faabe0329p+4), C_(-0x1.c3b93743ed5e1f4aae7ff96667ep+2), C_(-0x1.0393f54066e2a86d4f5766fcec98p+3), C_(0x1.ce0e335b9b5cfd8737f6de07dc86p+3), C_(-0x1.3371f4378fc25cdcbf584ed9698fp+3), C_(0x1.04744c732a8970957ba707eb759dp-2), C_(0x1.5d5bbaac2d3dd399541ae8c8527cp+2), C_(-0x1.56903abc9d372d08f72cf8f9b7f6p+2), C_(0x1.4f367450bb0294accf5c9a7e742cp+1), C_(-0x1.16f1bf1e47dd7b33b29f107a7717p-1), C_(-0x1.0ca6089fc41ee660907b2bb584cap-3), C_(0x1.fd1e6437298de912355a40f30818p-4), C_(-0x1.127569c6d3d201e096a74c3e92a3p-5), C_(0x1.031ce43d6f2a9b28afac205ca3a5p-9), C_(0x1.dbc5a12350173dc4ceb0edd40202p-11), C_(-0x1.6e57586c99db2a8af6576e5d9fc9p-13), C_(0x1.338c12c9a95b47e57d454a7c66e9p-19), C_(0x1.ec833bdc8d6ab1cf492647696452p-21), C_(-0x1.31ee1e222a82fe6e397b0f1ab0a7p-26), C_(-0x1.068cce25031d061c7d5229b85c51p-32), C_(0x1.ab486d191520d8a9aefca6d39becp-40), C_(-0x1.971ac61147c4bd5f21d58d94dd2bp-52), C_(-0x1.28365b5992261cb91d89a4a61c9dp-71), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8a28bf1f4baf0256370de9e50cdfp+0), C_(-0x1.0b8ecb513e670e46e8b61ff5e5a2p+3), C_(0x1.301d17ac5e1c6daeb2bb903493bbp+4), C_(-0x1.80a5fd5ebbea4cbe232c3d8a57f1p+4), C_(0x1.4a39e3e1048d62539834148e9e34p+4), C_(-0x1.1148278e9d9a1304c4d27a6289e7p+4), C_(0x1.18e244d79a0328c7ff6eaa1380dep+4), C_(-0x1.3908669ba07796469d9944fd1af2p+4), C_(0x1.80446c71adb1488769cf4e603a7ap+4), C_(-0x1.0a40794798e411ebd23986dcd959p+5), C_(0x1.52509dd04c4f6aeb9cbf4fd2a65ep+5), C_(-0x1.4b468531c5b19f58ba9821140c9p+5), C_(0x1.c80f1430e334a07768f1a5bc676fp+4), C_(-0x1.82ded3c89e7e9fa329e76277e5cep+3), C_(0x1.7610a167089f1959ecdad2bfe856p+0), C_(0x1.b0a89a8818c0677d48d7304191d3p+0), C_(-0x1.2b516da5d080fbac57ead9c2cab4p+0), C_(0x1.488189c0e63233e310386fe21bdep-2), C_(-0x1.16dd91fce8d2f3a24746d48a1c72p-6), C_(-0x1.957d5757f4d581e1eb81397c4cedp-7), C_(0x1.613bcf2c2fc6a53ed2c91b207503p-9), C_(-0x1.0adbc024da55152d1e362e31540ap-14), C_(-0x1.44905597a89087a3899ef1de6ff1p-16), C_(0x1.238bd55115863b967f9591633549p-21), C_(0x1.0b863bc593a1d515b8c451bf0e45p-27), C_(-0x1.2dac52b5d35bb8e11505ea96f44p-34), C_(0x1.a8ab5a61388b1db01ad925c31a8cp-46), C_(0x1.34fcf88bcfb3fdd3eace81ef29a8p-64), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e156f58145aba7d0b30fa35cff6p+1), C_(-0x1.d9350b2238c2b904f5fdfc3f59d8p+4), C_(0x1.b03e3957ecd6a002d130922f2289p+6), C_(-0x1.f51dfa789d878832ad001b3c3bbap+7), C_(0x1.b1d9ee3321d942364cb8258ac548p+8), C_(-0x1.3c90b7e3ca1db82e1a61d1d6988cp+9), C_(0x1.a1025f9df5665ef6d6390bf76e1p+9), C_(-0x1.ee82dbab6ab103949b52c0e24238p+9), C_(0x1.fcf169933904c38827bff6f06e1ap+9), C_(-0x1.beee0dc0c8ddb1ba16139309e6dap+9), C_(0x1.545f49e00f495f369a9c2bc574c5p+9), C_(-0x1.c39ca355bd5d296f37962bd729eep+8), C_(0x1.d17e6e268802ca2d8ab4ba84d645p+7), C_(-0x1.8d05e2b81cf726b84ae7be04d2f8p+5), C_(-0x1.a57ddae4deced8b3bcbf57c78c0cp+5), C_(0x1.065bfb9cfed103880a47e8cebd5dp+6), C_(-0x1.1a783beefce87b0115cd7f827bd2p+5), C_(0x1.2e9f2c1581a696ea729509934246p+3), C_(-0x1.3cad9a2427051e071bf1f9b27c09p-2), C_(-0x1.1b4b3a7aa70e82673e69d678de04p-1), C_(0x1.15a31469a9ce01c4f9e606bc0537p-3), C_(-0x1.5c66a63c9347469ce6f66ff5c6a6p-8), C_(-0x1.5db560cc8a8d9420c2df7533732ep-10), C_(0x1.c57be52a95f9a3c03fb08957c434p-15), C_(0x1.c9738067c5909d91761fe08abd47p-21), C_(-0x1.63f652c47225898a139ddd320614p-27), C_(0x1.769767db4423b6439ddbe400214ap-38), C_(0x1.108b386e39e95695575892a5277bp-55), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d870debcc05c458cb431fd983345p+2), C_(-0x1.0c2b8b0b28193dcd228c0a0c405bp+6), C_(0x1.10bd374d63550b983999c56c677ap+8), C_(-0x1.4441daef321d4016bb9b2c10ec43p+9), C_(0x1.eaed48222cc9b9253ebb102b9831p+9), C_(-0x1.dea055aad4ecaefb97c3b4138e1fp+9), C_(0x1.0ea6de87556ea6a2de81d408b23ep+9), C_(0x1.3bb921604519d1ae88e6a7fa3786p+5), C_(-0x1.7c03d4dcf551472cf7483533c9dbp+9), C_(0x1.b77df6c77230b9a06a324d910941p+10), C_(-0x1.59dd45c186fb11c5ad121467058cp+11), C_(0x1.92ad5ee85458cf75ddc7493a06c7p+11), C_(-0x1.7716e9b298971ca51bace1729b0ap+11), C_(0x1.34cd942cd473a5a7100d811101f7p+11), C_(-0x1.d2108687fa36ec88dd6bfb56d5c3p+10), C_(0x1.27e2041912517aaa65b2132e4553p+10), C_(-0x1.0ee0131c1b04ee634d1b07d2c971p+9), C_(0x1.13ffc016f56ca3a3bb78dd1c64f4p+7), C_(0x1.9021a9dd4e12af18897a92604f62p+1), C_(-0x1.cb9505a70965b7f9ec7314ae6da2p+3), C_(0x1.f11cd618c3358a67a8f728986e77p+1), C_(-0x1.a3fefe1a942d41c95d66abeb0178p-3), C_(-0x1.a953da883746e1eb5fc521fbad44p-5), C_(0x1.9718bee3af728b9e4c2d8088bafdp-9), C_(0x1.ad4249f39958d903ac018ed0138fp-15), C_(-0x1.eb70cd1aa40511f5c12a3ada0131p-21), C_(0x1.72006a07a097f617e889edbdb056p-31), C_(0x1.0d30627e6a2ad3489cda0318f0edp-47), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.155158ac6ea984ad1f3ad98465a9p+3), C_(-0x1.4fec3a6a32c1ef2818fdbca7bd5fp+6), C_(0x1.70dec41eaf97d263c2e4504b0b21p+8), C_(-0x1.e94cfecb1efa1478b22094cf32b8p+9), C_(0x1.bf0b100d34d0405ff7a1094810ecp+10), C_(-0x1.39291803fcf47b5c26824c7c465ep+11), C_(0x1.79ccf50afb46dbd4b77400a63149p+11), C_(-0x1.ab6c90991611b280fa6243394583p+11), C_(0x1.c47ed9a17b9cc8042e779917f5f2p+11), C_(-0x1.af1005783c9c08a75d46ca645f35p+11), C_(0x1.72a859cabb471f7e1c8ba7bd2a6cp+11), C_(-0x1.2846e6b9b14f481005e402049827p+11), C_(0x1.b3d87dff6a954876ee30a3fd1e1p+10), C_(-0x1.1ae10527ae49437f7880589e6393p+10), C_(0x1.41e16e9c43532c08707a85b672ep+9), C_(-0x1.460030c5bf206e4d0618004a8fep+8), C_(0x1.0818e6dd9acdc76d8ca94db3b3b3p+7), C_(-0x1.8ef0b66c7662c653e53071c7fb7ep+4), C_(-0x1.6eb8ec2d2fcf0443ad7c1412d0d4p+3), C_(0x1.3aba0303f01c424453fb561d43b2p+3), C_(-0x1.588d6d239648dcf73cdacc19a23ap+1), C_(0x1.5ca063a2897a34772f3d9594be58p-3), C_(0x1.72c884e06d399a8e64ff05cdd7a2p-5), C_(-0x1.2b7b99da7239a8d08435e37194cp-8), C_(-0x1.359ad5ec914c5a48afa1ae580694p-14), C_(0x1.0cff089d4d592f01775a150c05eep-19), C_(-0x1.207535755ab2ee6fe496486e6edap-29), C_(-0x1.a3ad9d559345b904814003502ba2p-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.174fb1d6730638307d1e4b445fc7p+3), C_(-0x1.5cf63b4072a084fdeb886ad661e9p+6), C_(0x1.859702b93091fc7e65868db7a8fbp+8), C_(-0x1.008e38c64d4049e94bd38a5f00e3p+10), C_(0x1.c03c1b8df613f180675faa2c200ap+10), C_(-0x1.1e0d30516cd0d5b6c1126d4bf14cp+11), C_(0x1.33504e2e62ab9029d44ee63bfb62p+11), C_(-0x1.4498a39b45dd2d15e6ecc8905aabp+11), C_(0x1.500c422b7e4d651447cfcdfc454bp+11), C_(-0x1.2d6f916f2f063d6cac6b467c2932p+11), C_(0x1.c5bd8b8beccdb3ef655c28cdfe75p+10), C_(-0x1.3b7208dc1850750db50ab0ef592ep+10), C_(0x1.a4b1819107c720e54775d3b0e2c4p+9), C_(-0x1.c03583e49298125db8e2fdf27d4ep+8), C_(0x1.1254d5dd1a3c865791d5348ec394p+7), C_(0x1.be19509979c252700bdddf4796f4p+2), C_(-0x1.6abf524121ea45d75b1ac598d945p+5), C_(0x1.bdfa9494723d3641f8f4e66eff1ap+5), C_(-0x1.7a9c102bdb495114d11be11a8205p+5), C_(0x1.86920d3d07ed23a9933ffc257d69p+4), C_(-0x1.a9adfb25c4f27469db3fea5dd201p+2), C_(0x1.1337641b89dbbf1427d95e0cc537p-1), C_(0x1.191c64622c1b13245bafd3429ab6p-3), C_(-0x1.88d18423866c243d7190f3f8f03dp-6), C_(-0x1.aee4f466bb96965b6a34b6c35598p-12), C_(0x1.15e5e9747fe1bbdbc08f26b48b4cp-16), C_(-0x1.bc4491eee0fdcc0c5c6a94682339p-26), C_(-0x1.431c03e754cd8a35cd8981f0bf35p-40), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.57dd202e5e84ab856980df8a0abap+2), C_(-0x1.b426b94987908d499f3bffafa19ep+5), C_(0x1.ef50af36bc949ed3fa7cc19e8e96p+7), C_(-0x1.4da8e644667e6ac3b7b19c4c383dp+9), C_(0x1.2d889ab089910f7ad4219226878ep+10), C_(-0x1.9456ec86efc743d502abdf76eae3p+10), C_(0x1.ca1f75d29c1784a6a7a3af88a28cp+10), C_(-0x1.f2eaf24b48be90f886d98564f553p+10), C_(0x1.0a60e2fdcea779a991419059c46dp+11), C_(-0x1.07fe75c2d85392f12125b660934dp+11), C_(0x1.e2b37ed5f446198c3a6ab7d8b74fp+10), C_(-0x1.a28fcff6e684b5cca8e0268f1e92p+10), C_(0x1.5596d2be7c1f83852a4b17681f79p+10), C_(-0x1.02761175eccb4a7f32feddc56feep+10), C_(0x1.70f45a3e9b6c87dda520903f4aafp+9), C_(-0x1.edf5a5b354e128a66fada7d4bcf3p+8), C_(0x1.27b1e13298bb3ef65c7ced26ff2fp+8), C_(-0x1.3be69243ef2c31f0230131660198p+7), C_(0x1.3b71f0120f2a47ab2f14bf7b7d89p+6), C_(-0x1.11985d9404f45378f95059bc551ep+5), C_(0x1.3b5a9762f053ae040918d7979484p+3), C_(-0x1.c32c18767db723614ce78e339586p-1), C_(-0x1.5d8e89b8ba2f46a3386878a383e3p-2), C_(0x1.3b1b46a97c2fa9eb1545e9c9486p-4), C_(0x1.23706d03f6f7466fb42dcd72c19fp-10), C_(-0x1.9c26fc84f3ff5e0f45e88806fbbbp-14), C_(0x1.962939a138e2b376295550104948p-23), C_(0x1.27428a5934f9dbd8cb77b8eb93d8p-36), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.82ba18a2815549dbb583ba20e3a4p+1), C_(-0x1.ee321ac782e8103dfda5e2a50005p+4), C_(0x1.174e5f65a44a587e2370d6742aeep+7), C_(-0x1.6e81d57c4c979417ab1a67acd69dp+8), C_(0x1.368de3361fae4ae909df52a5836ap+9), C_(-0x1.7106731d7c870bc083e5fa51f617p+9), C_(0x1.661d220cefa0ffe013a28a70693fp+9), C_(-0x1.6833b778e773ab42be55fb8d5e31p+9), C_(0x1.833c1b7a24cc4442e638654d7d43p+9), C_(-0x1.704d0cf5b403f737ee51433c941bp+9), C_(0x1.2a287b4a8744be736369f360e45fp+9), C_(-0x1.d795731af32d4e2789960ef06165p+8), C_(0x1.7a6623bbe9af7bf6c822bfb77cd2p+8), C_(-0x1.0ddd9fa1ad021e162c6d71d17f6ap+8), C_(0x1.4f824182bb440977dbde7b407e9p+7), C_(-0x1.9b8d6efd833c3f31fdcf2bc0b9fap+6), C_(0x1.e6b9bfc912a60c385c4952c1112ep+5), C_(-0x1.d872a65489bc6c3914d51095ebc1p+4), C_(0x1.82e4e50171640b22bb8023c09d2ep+3), C_(-0x1.3c81b080d7c589f42c4b3bd2cdd6p+2), C_(0x1.87117e04fd822595de3e0b568ccp+0), C_(-0x1.f2d1dbd395098c995334374fed2ep-6), C_(-0x1.327c0d249413fa2745cbbd687d3ep-3), C_(0x1.13b8c9585145f7834dc70fb2de56p-5), C_(-0x1.094893076dab22e2cc6f5a93ce22p-13), C_(-0x1.784719262e6d99b5739a61a4981ap-14), C_(0x1.31d26875ab45ebb06f0484706cp-23), C_(0x1.bc3aef2e9698a9624f45add91d4dp-36), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.229017de89888d3b45e2c184d9bp+0), C_(-0x1.74b098d7b294230e1965426f3612p+3), C_(0x1.a3d6fe58853c1e5c5b0a3a09e40cp+5), C_(-0x1.0ee9fe2c639a74c7c045b3701c38p+7), C_(0x1.b7ec28edec4542d27f9646062fefp+7), C_(-0x1.dcbffedb3a507fa5c4f4218a69c2p+7), C_(0x1.8f9512e48d1c46e9aca0a2a1ffcap+7), C_(-0x1.7421b1a8804595d4b26746d9ca32p+7), C_(0x1.a17e1d21e73d1b2881053890e718p+7), C_(-0x1.8b13badbca1d886a8838c2c2e2e8p+7), C_(0x1.210062e92f4896d0f00a29c58cfbp+7), C_(-0x1.a9798d44da6c2035da535dfbec27p+6), C_(0x1.62f521d1972a85eb2c6f26f231b9p+6), C_(-0x1.f0d14679f69c06584d1c30d18738p+5), C_(0x1.0b0540b21cf0924f5546e5194d02p+5), C_(-0x1.2e7f81d7237507956599c3ca61c1p+4), C_(0x1.776b19bc1de7ac2a6f830edb0d24p+3), C_(-0x1.390aaca35a348d0447af0cac40bp+2), C_(0x1.0e68e9445701769efc7a68d035e5p+0), C_(-0x1.1d9e671612a45bff7deef6e6cc44p-2), C_(0x1.1e141f6f8381b1b9942811bfdb96p-5), C_(0x1.626281f06a565209b56968645fb1p-3), C_(-0x1.00510e27c6af9fccce7dab2661cp-3), C_(0x1.dda065aa933f3a25232d375fa99bp-6), C_(-0x1.397e42b4cc1c25443933189b9067p-10), C_(-0x1.5e2780fee3a224f5cbc2e8463206p-13), C_(0x1.93d63eaebefb797682d434c6108cp-23), C_(0x1.24c485651202d28a48b67967bbebp-34), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2dba81606cdf44cd9f04d2f8bc14p-3), C_(-0x1.83ba9062dc10a95420ae8251630ap+0), C_(0x1.bc6ce42e9d3a21102e4fdf0d4671p+2), C_(-0x1.2c97bd817af94b6452b764a95107p+4), C_(0x1.0e06914d9315537516f107f294e6p+5), C_(-0x1.5f4706680d4ada71d3fe8928e941p+5), C_(0x1.6ea3fbf492340b1a8746b11d0c42p+5), C_(-0x1.5a777ed4931f215f8e0a373e4b9fp+5), C_(0x1.424978021982d2d37f62990dfb19p+5), C_(-0x1.3090ff3d7fed662537bbff91030bp+5), C_(0x1.23e4419ddb640edbe25a71aaad29p+5), C_(-0x1.07fd356f7673b92c13a9d66edf4fp+5), C_(0x1.a8f488a3b6e4b2eef60c68cd2c1fp+4), C_(-0x1.49932384ed8b4cc7bb541dede413p+4), C_(0x1.0a96d421140fecc2982baba8b026p+4), C_(-0x1.8f60cd9c056028206308e7df4429p+3), C_(0x1.003bcbf26a5db032107ad008618cp+3), C_(-0x1.433ef046d9ed13921cc6b579a83ap+2), C_(0x1.a65b7dff9352096da27547ffc3e7p+1), C_(-0x1.d36032adf2dbd6f014bd3f02cf6dp+0), C_(0x1.a4a1ad470bd0ddc88c1710fd49dcp-1), C_(-0x1.88e9f63513ce060ad42735911b82p-2), C_(0x1.6764f965c95116ec3ca5a4be4d2fp-3), C_(-0x1.91c36b23af1d7e93ac71caa65612p-5), C_(0x1.07d03d7a1adc182d361556de1e4bp-8), C_(0x1.362d3e37ff6cd230a2a77cad24c8p-11), C_(-0x1.92dbfdbfa8197afc834aaea734e3p-20), C_(-0x1.22ff804507dbe78851ce06e1d7fp-30), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8dd6e1684e11d5d1ba3be6ea3c1dp-6), C_(-0x1.ffb4de00653d36e2054de2d9b35cp-3), C_(0x1.1f8df89dea983b6a6839c59e1daap+0), C_(-0x1.6eae32a3a790681f248ae47d8bf4p+1), C_(0x1.200cfdab0a8887ae485a3302d7acp+2), C_(-0x1.1f287662480ab738cbe219de6228p+2), C_(0x1.90990b7ee9dd1f94866d2e2c98f7p+1), C_(-0x1.3d166b62b6085e29fb936a0976f7p+1), C_(0x1.74d60ae1a8ceaa71b4a74664e6fcp+1), C_(-0x1.68026579c2213b7f75e6c5dc86c1p+1), C_(0x1.e76ba8ae988d51e5857ecafcf58dp+0), C_(-0x1.60830949d4c82da954f5df283712p+0), C_(0x1.48f2a8ad7050c9588f35978df03dp+0), C_(-0x1.e7d09d1d5c76d8ae64a80dc22b4p-1), C_(0x1.1252ee85de9250052c51460801d2p-1), C_(-0x1.6e9d007e3ce50ac7539c0411656fp-2), C_(0x1.0a88fbec92db255ff329ff3310a4p-2), C_(-0x1.16ea71f276b00e5a14dad4f88487p-3), C_(0x1.018afa9348367b971e98c4cc0c2cp-4), C_(-0x1.2fa053de7510dd5de40051b25ee8p-5), C_(0x1.2375ee2696f86cd08bc27b41fb5bp-6), C_(-0x1.73b10c938e4b6609ab6cf8acbfb8p-8), C_(0x1.1decc8370b2354d839f55dfbd7ebp-9), C_(-0x1.b8713a4dd74a971b693427cc738fp-11), C_(0x1.732711f764c017456161af308333p-14), C_(0x1.5deb76c540b6c1414e8c8011ad5bp-16), C_(-0x1.9271259f104138f720ca0ebaa72bp-23), C_(-0x1.2099915b9335422a7d16c948a51bp-32), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.674708c20fd278e13cb308fbf6b6p-13), C_(0x1.27cdb30a789a9a4cba57381b80dfp-5), C_(0x1.f3f9a4213a58e15fea805c6fce03p-2), C_(0x1.8a1b0e63e768effc8742d136ac6ep-1), C_(-0x1.d0008134e7b24ce7a0bdb2d5e177p-2), C_(0x1.06c9817f611e98379b152a389fafp-2), C_(-0x1.4ec109006f3ab5eb9ef4b4145d24p-3), C_(0x1.b93c322324f48f0734b615fc9893p-4), C_(-0x1.09f5f4083e296fb6c1df50020f51p-4), C_(0x1.0b6a75dfa25cd5d117e10197333bp-5), C_(-0x1.a17eb803ff745c2b927f4b56bb55p-7), C_(0x1.cda18d3f662aa65f684ad290727fp-9), C_(-0x1.1815693b1e509dbfebb4547eb7c2p-11), C_(-0x1.547c4d557ee7eea60970ca463eb3p-15), C_(0x1.a1d518779619a935a6506c218d6ap-15), C_(-0x1.fb90c559a340a6d74429771a650ap-17), C_(0x1.085bbb58c3dc5e159337591d11c5p-19), C_(0x1.4a16ea18a78a9255137a36b6eeb6p-22), C_(-0x1.3b0f83cef7c9cd6e4992ef7a8e0ap-23), C_(0x1.426950d9b6bca7a253eba2c282ddp-28), C_(0x1.acf5cc83787c76964322f9b1343dp-29), C_(0x1.c7dfc1cbcd560059e1fa3bbb0da4p-37), C_(-0x1.99a4987142751268f68b0c6ed2ep-37), C_(0x1.0c54f6dbbd52aba64c70d9892a56p-42), C_(0x1.60b6215484a1c96af7151c51425dp-49), C_(-0x1.6360709f9f94bbe775bd0ffbeceep-54), C_(0x1.f308a7934d0993ea019328882821p-62), C_(-0x1.dcd83ccd7b40e72afa7a2bb7cfap-74), C_(-0x1.f4c81d09055a8112f9a8f0e29d58p-87), C_(0x1.f541a7bafa4019158f37f50aca47p-112), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.5e2be3ffc02e5cb63d505e4d42d9p-10), C_(0x1.115596e3350ec9cfc7fd8b282c15p-3), C_(0x1.8e066ec21fc6a13efd57c0a1a8d5p-1), C_(-0x1.9a3ae9a2a692b7d6fe0312f42fd2p-1), C_(-0x1.b4e823397cf87b829664fcfb615p-2), C_(0x1.24d79baf908bbde12d97a94a7f11p-1), C_(-0x1.96ff08990aa1ff2b3a6156b3a6f7p-2), C_(0x1.7cff079859d44a97134acb0b3815p-3), C_(-0x1.3b2f6fbc125eff4f9e00971a8041p-5), C_(-0x1.8c439625af31faef37a9ac49e57fp-6), C_(0x1.d82f61038e0e00ad9adf7940901dp-6), C_(-0x1.d308486caa607d54998083598bc8p-7), C_(0x1.b8ca6f1e525d8fc1aecc191249d8p-9), C_(0x1.4ea26d28d30874cd6f1bece4d0cdp-13), C_(-0x1.4455094b3efac9d3c28631c94fc4p-12), C_(0x1.116fb5095b299dc0400b6814e296p-15), C_(0x1.e6f46905743cf29b32a5a94efd0bp-16), C_(-0x1.73244b56511394e5623a6c13b582p-17), C_(0x1.105e30d7ecb45c8d929e54615ad8p-20), C_(0x1.85ee598e5c772af7b4423f5e4908p-23), C_(-0x1.5ac9f1c76ae72306c6963aa9eb6ap-25), C_(0x1.d789f3d703adce6fceeb7470ebe2p-30), C_(0x1.8d5e3e20027e865e92d2141a2b73p-35), C_(-0x1.c8b3833c3b76938050c849f3c902p-37), C_(0x1.38fe40b99904e82fbd88d14cb331p-43), C_(0x1.f524d19d8420a05a730c8d14369dp-49), C_(-0x1.a73b7d5e557e750b97979bfe8e3ep-57), C_(-0x1.c5320460bba019effc9564690ea4p-68), C_(0x1.a5354de9b5e4be0a26cfffd8bdbp-81), C_(-0x1.a59b918cf087f7e28a66eadc80bbp-105), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.295efeac152d79633d42d6d916dap-7), C_(0x1.9d61cc47e5de2628b18136c91ea6p-2), C_(0x1.161d416b67637e8de5329814dbadp-2), C_(-0x1.5b7a45663376a9aa5f95ed877064p+1), C_(0x1.d1174d09edd0e5a9b8dec824cf43p+1), C_(-0x1.64fd520a66219e33ceb19171c931p+1), C_(0x1.05168da96484602e8bf4113ac4e7p+1), C_(-0x1.6575089c4586c8407b43149ab11bp+0), C_(0x1.a38bf0b53f437316576c7b5f77a6p-1), C_(-0x1.889b16ed752f17512574ee20842fp-2), C_(0x1.152c76b8c5aa61f7d1f86545cf96p-3), C_(-0x1.1b4c99876d201e8bbadda8305eebp-5), C_(0x1.907f1e8b42628bd87c6dfaa42428p-8), C_(-0x1.48b152205d27ec7322d3d940da05p-13), C_(-0x1.a3276d4b1b41ee0d43115b5aa81dp-11), C_(0x1.19008ab2bad0e78321ce13187a8p-11), C_(-0x1.4a0f2fc3a3fe6743d3250b9f0687p-13), C_(0x1.b16d8531bcd974ffcfcfb275888ap-17), C_(0x1.3c9bc919e0e49ac8c1ec9b7c72d7p-19), C_(0x1.899254d74191895a0ee7c7e368dfp-24), C_(-0x1.e003adff466a6871b6189e153009p-24), C_(-0x1.b118f867cd64dc8214de14f22a3dp-27), C_(0x1.a8e81cf9b2bf4ed6a7f80b7fee49p-30), C_(0x1.472047d4ce812177c28860710d42p-36), C_(0x1.0bc546f1206b056c51ef6c4e3c73p-41), C_(-0x1.5b78778ec812c1a8126f0f855511p-47), C_(-0x1.75c5773026aebf48665648526e47p-53), C_(-0x1.4450e0ff79233cb66d7ae0406fdfp-64), C_(0x1.74639b34e9729d879c349c60a705p-76), C_(-0x1.74be14820bd545c3f1e6ecce41eap-99), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.ade0c67a6df62bfb0e80195f4993p-5), C_(0x1.c28b430a75f298c1d73bb81e4353p-1), C_(-0x1.5f4ccfba427cea15c66f4a5c12bbp+1), C_(0x1.cdb8f607de72e596ea568a034c8fp+0), C_(0x1.f77743196657a78ad5bf74425543p+0), C_(-0x1.dd879ba809267a9d7904ab437cc5p+1), C_(0x1.37053c10bce28d1022d31ac1246dp+1), C_(-0x1.1bfa76c0a943a24b6df5bb2abebdp-2), C_(-0x1.2b5034c5e7cec27aa44e7ea3a878p+0), C_(0x1.63e2260baa9fdeb5f048ba37a04bp+0), C_(-0x1.a29913a0c0f2ddeebb2bd3c275b3p-1), C_(0x1.852867c8ceb35a88f788b40857cap-3), C_(0x1.9a9664fc9e678ca180654356c297p-4), C_(-0x1.c29f78e2de8f527b7cd8a08d24efp-4), C_(0x1.54d634445fcf6eedbc5dccf04eadp-5), C_(-0x1.41b2a5a54a66286808252915b865p-9), C_(-0x1.225d9fec5c6e8c447caf2b42ced4p-8), C_(0x1.f9019974a7ddb631ebee782869d1p-10), C_(-0x1.2c283714217e754b55528b628588p-12), C_(-0x1.8e8742bbbfb2111f9226dbaea15fp-16), C_(0x1.c9f58c62dd5d38676514b49c9e2ep-17), C_(-0x1.61f6495ed1b8ece209fc78f1d085p-20), C_(-0x1.96b8b0f8a15e32028c8ee0076679p-25), C_(0x1.71f48c99d030adfe377a7056701dp-27), C_(-0x1.b5fc8d66ab6cfd5a83337a0cc9b9p-34), C_(-0x1.c5963ee2273d2d13e0940bb125cdp-38), C_(0x1.6b4e6ce52480a98b4ad64082a237p-45), C_(0x1.e67135f42b49adad00310559fa39p-58), C_(-0x1.6aff40a6dd5b409b62d44964fcf6p-67), C_(0x1.6b5790e714dd812f487575d04214p-89), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.002833198203bf56e8fbb6905c21p-2), C_(0x1.74f145f5180b48bf2521976daf68p-1), C_(-0x1.d40722c67b8b2c63d49b5a9b6cadp+2), C_(0x1.2af6f0f464bc571c8b763a8383eap+4), C_(-0x1.a43135145799a27dfd1fadf6761p+4), C_(0x1.9a15ae0412710439a9b40c2dd4dbp+4), C_(-0x1.38d1bd49e9af291f59c9f34bcde4p+4), C_(0x1.6c6cdb14d7fe107edc16c4953b35p+3), C_(-0x1.13619aaa119f97b37d6d1c2c4585p+2), C_(0x1.d56ce1ec874a0c5dd634fb59d6d1p-1), C_(-0x1.e42907ae7a26468d6ecb1d9e3f24p-1), C_(0x1.e52911f9f656640a2404f83a2b4fp+0), C_(-0x1.ee224ef8eb13d4b961d19b7d1c3bp+0), C_(0x1.1f26d6223d44cb481a2910c6eba2p+0), C_(-0x1.5888435f5783628967f9baa03f79p-2), C_(-0x1.9e45fc4e6f7c960ebee0a7c398e8p-7), C_(0x1.dcd2d2ebfb6e400bbcf752c0bf7fp-5), C_(-0x1.93116bc1ac6b7200b82ddbf8d638p-6), C_(0x1.0e01783e342a4693e98c9edbf33cp-8), C_(0x1.31f3faa90de9ede16d914789626ap-12), C_(-0x1.f6b0df77a54401ad9bab438557ddp-13), C_(0x1.f05077a02c3aba8741da9769ad4ep-16), C_(0x1.2ec5b9d224e6bceb5db9ee6cff1dp-20), C_(-0x1.47f2b0eb68eda8ce48926b156c9bp-22), C_(0x1.bcb021bf883a1f92a78fc9df6525p-29), C_(0x1.1bcefd6cfba520ba047378483637p-32), C_(-0x1.34d97adc52a38a676a55a692601cp-39), C_(-0x1.6f2c8c9ca394fbdec6dda2487026p-53), C_(0x1.34e43d9253e6e8975e6c8e7aefefp-60), C_(-0x1.352f98f0f2e48db2a203fb32a0f2p-81), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e5d8b15d3664d52108fae09a8e52p-1), C_(-0x1.e7e4ae8313c9841f6b4ba59501e9p+1), C_(0x1.643947f56174ee22b35084254df8p+1), C_(0x1.8bf77730624fb34f058dbb215e6ap+3), C_(-0x1.39575fcf961c0f3da45ce2cb7fb1p+5), C_(0x1.f6657cd6c7e299b7cc89d7d3daa3p+5), C_(-0x1.2981aaa66ca36b3a94f8297750dp+6), C_(0x1.0cf300079688d85d6be476057064p+6), C_(-0x1.71528cd9cab137a39829bbec9ca2p+4), C_(-0x1.13658826409b41720bd51a0f2d32p+6), C_(0x1.5ecf135e336b7c201cd13f9f1c7bp+7), C_(-0x1.ca8fbd8754dc1920d78e0ace3c5ep+7), C_(0x1.83a96558c6c07294f0fd718cdf26p+7), C_(-0x1.9d91182e0786a78e2338c8bf2ff2p+6), C_(0x1.818f5ca05f023837d630b257f2ffp+4), C_(0x1.4e782cc994094deb153537dfc8d9p+3), C_(-0x1.7fba734a377970e0ae8d82bc8b81p+3), C_(0x1.361d7d826bb5b3b3a1616de586bdp+2), C_(-0x1.85fee8307d590ead49f8c992534dp-1), C_(-0x1.fcc3205624ce56be678cf9a5a7bcp-4), C_(0x1.30d54b861144b0080c77fb2ef955p-4), C_(-0x1.4236c7ccc62df6904f1792b21926p-7), C_(-0x1.6b6d4bcc089eed67f90762e3bff2p-12), C_(0x1.251cb75a77a65027fa18c49d6fe7p-13), C_(-0x1.7df627db3ed37f55c551bdd12823p-19), C_(-0x1.6d7ba0319a17f9c5347fd4ebc07ap-23), C_(0x1.047350b843565161f3ac671e5f76p-29), C_(0x1.ecabd0f857c5126fafed07e8e831p-41), C_(-0x1.035ef08b1273d485ae68801933a9p-49), C_(0x1.039e900e7fa12bdd9aa0b500dd5fp-69), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.5c435b4994699430de1f0bf0f96ep+1), C_(-0x1.45ad88073e6251792d84638c28d6p+4), C_(0x1.1ac643e9c99f8dff42b4b5f9e976p+6), C_(-0x1.3bcd24e1c22f08a7330d952db5cp+7), C_(0x1.1132bead650e64e0cc6250fd5a4cp+8), C_(-0x1.a3321607e359615c22640184890cp+8), C_(0x1.2bec4ce73b524de840d2af975fb7p+9), C_(-0x1.83ddd4224b9abfb64ecabd8660acp+9), C_(0x1.b1ad4241d86bedd378c0238858cbp+9), C_(-0x1.9d7a3218170b28b67328a4e4a6f8p+9), C_(0x1.5526f87e8214f36e89fc59fbe6b5p+9), C_(-0x1.e996857ebd3fd865f8b8b57715d2p+8), C_(0x1.186a9a24f3387e74b22113290d4ap+8), C_(-0x1.4f804f76b6d5b86a618f6e232bp+6), C_(-0x1.84954fc1821007c0fd22bc06ae8ep+5), C_(0x1.59efa11d2ec6f964630b6fd432d3p+6), C_(-0x1.dac7ad3b33c95d5f07d90297e68ap+5), C_(0x1.62078796373e73b5598b78c1554p+4), C_(-0x1.88bb023e9f2f98b9b7a5caf3d0d1p+1), C_(-0x1.04b9160269b89d57d0a515a32ad5p+0), C_(0x1.18c6982acbd2cd140bf32d2822bbp-1), C_(-0x1.508ddc9d3ccb43c37b8bf661b39ap-4), C_(-0x1.539386e1415cf5772194fa5cb789p-9), C_(0x1.9eab992a4b9ab37998a4782656d7p-10), C_(-0x1.980b92ff814cc556c4aeda05445fp-15), C_(-0x1.761c29381edd29e5680cf5367b41p-19), C_(0x1.64e7e2ec4af2d5325d3b1ebf7038p-25), C_(0x1.1823b743e4c412fe2e1a1caf98aep-35), C_(-0x1.623923d3ddbaeed10b04fa360d62p-44), C_(0x1.6290fa803758e40f0b825bbc6f28p-63), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.891443770e9f5b58ca0bdbd939d6p+2), C_(-0x1.c4b28f7dbecf38e874d3b242d4fbp+5), C_(0x1.d994c46f08417c9c24a3de260d39p+7), C_(-0x1.26defe09eb9e312242e62017ceb2p+9), C_(0x1.ddf577c4250f78c0132ae5d7d1cep+9), C_(-0x1.fd2079b0f3ddb297d557ffac7fap+9), C_(0x1.36152a2e286cfeac434a875affb8p+9), C_(0x1.d8616a51db368c3df9bbb5de82cep+6), C_(-0x1.190b42892374c709dd8c148043fep+10), C_(0x1.36219b396179567cea600ef5a5e7p+11), C_(-0x1.eed74001662f7e761e907ef9b166p+11), C_(0x1.31c149450a5e9832b2fbd7c32f38p+12), C_(-0x1.31807a4d8f7d8b9ec23e94e23c9ap+12), C_(0x1.07e37f0875c28ba98c5df12ea151p+12), C_(-0x1.9ca0e06fa4e40e6ba9a2f070a627p+11), C_(0x1.192392a49659f5be4afa683922a3p+11), C_(-0x1.28f7ef65a911c2242d4a04d3586cp+10), C_(0x1.8ef1182eeb70c3b810afe07ad9aep+8), C_(-0x1.076216da5c43b27292cd22bcb978p+5), C_(-0x1.3734a9c9c5014b6b42b155a6abedp+5), C_(0x1.2e313dce4fbf11c25ec52c766e83p+4), C_(-0x1.913ecda1e3436af7caac068805f8p+1), C_(-0x1.aba4e0591b35ef78388396d8949ap-4), C_(0x1.5578ca229685f75ec4dbb7fb72b6p-4), C_(-0x1.f3ff47839e58d032a1a624c1f604p-9), C_(-0x1.bd3a12076a4f509f06e99bb28599p-13), C_(0x1.29ffe91412a29d368ce7b0895443p-18), C_(0x1.5e7711914b058b73ae8c4ed370dp-28), C_(-0x1.267e3f1ece05182094aa29382cf7p-36), C_(0x1.26c8d9be624c3d09b42c989d403cp-54), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1c06072fbf26f358c9f078f98565p+3), C_(-0x1.65d998749f19f3f52787d2ac7bd1p+6), C_(0x1.9d8978b96f57f154ef9ce52c7bdfp+8), C_(-0x1.24c8d76a7f36d7089e3f4940c827p+10), C_(0x1.21d479bc00697b14d91a6dd4bcabp+11), C_(-0x1.bbc006c9393532c76b5d7283eb2fp+11), C_(0x1.2211c4425df9c2e46c401315e702p+12), C_(-0x1.5c64ff1d8bf677ab09ac8c8005b4p+12), C_(0x1.845a35a3158347c96beac73413ep+12), C_(-0x1.87e6df0fbf8ef42fd538df2c44e6p+12), C_(0x1.6504110de640c4682cba264cf46ap+12), C_(-0x1.2b9aa02be2b35409ccae86a8991fp+12), C_(0x1.cebcfb329a57eadc95a6866f02e1p+11), C_(-0x1.3e375c669dabfd4de916796f2023p+11), C_(0x1.7d70c67fe8973e080c2a8eb7f182p+10), C_(-0x1.8fd6874952e8a903dace07633bccp+9), C_(0x1.57b6f4096f1cf0152662dc88de7ap+8), C_(-0x1.3e2c004c73161017d1fe47d49586p+6), C_(-0x1.f1e0f66437531ffa287a43716481p+4), C_(0x1.39f676c7227564daf7244ac826e7p+5), C_(-0x1.07f7de36ead717df75674d143f33p+4), C_(0x1.6eaf02b444bc4ce4684168c04e9ap+1), C_(0x1.f8896c7b27aea8a0c13b638bec5cp-4), C_(-0x1.b78e4a3636f77d36045fd051d0a7p-4), C_(0x1.faf293c65fc88bb39eaf07f0c833p-8), C_(0x1.a6b604defe6a94f42a0056ad171bp-12), C_(-0x1.9886be2865e4c650159b7d4d95b1p-17), C_(-0x1.7c0bde2d4dd50659d8e873b48d0ap-26), C_(0x1.90aca39ea2e8ac3870ca13b1a564p-34), C_(-0x1.91166efa6d0a92bc7a2e9704d452p-51), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.58e7df6732419db59e9ac42f9ab1p+3), C_(-0x1.c53a29616fa380817d7f5e347aefp+6), C_(0x1.0cc18d57a1a1fb48e108cac3a066p+9), C_(-0x1.7c92fc1b6ca3895680c38212861fp+10), C_(0x1.6a1945d20b68d8baff4381a817e2p+11), C_(-0x1.fab771c0e1baf24e2c8f95c4199fp+11), C_(0x1.254298acbb2d449a7b3bb526f729p+12), C_(-0x1.407f9dc95f9b1203f980178aa4a8p+12), C_(0x1.53233c63dd8a7f18f0a2b3af5ccep+12), C_(-0x1.3b528b34539979362d8c0e80e80ep+12), C_(0x1.e2ea2797d25e54507eb78c335f71p+11), C_(-0x1.3d6169dd11c9bca3212058149b0bp+11), C_(0x1.75fce5d641404560c1229131d8bdp+10), C_(-0x1.2b5b50127f9f56d44ea4f01f61c9p+9), C_(-0x1.18e0518b142ec5c99d05ce213217p+7), C_(0x1.ed1ee257a974ab35fe81e878de48p+8), C_(-0x1.f5a5a8d8a9b3c073ca67ee8615b8p+8), C_(0x1.920c943e9e1a266133bfad52e46dp+8), C_(-0x1.22c1385412c45fef72454e0ef403p+8), C_(0x1.4b1ba13f6628b1dd44be57f24352p+7), C_(-0x1.ec876f34dee07503da6a5d0e4af4p+5), C_(0x1.641261f15a2bc3d54eada0d94bc5p+3), C_(0x1.3bac7fcb6881fd2d747aef7d1cc5p-1), C_(-0x1.3ae0db5ff49e0fda9ef09cfb9b34p-1), C_(0x1.0ba445bef297ba3c0905b698e9c6p-4), C_(0x1.c3804abda5b0efa9daece8d22468p-9), C_(-0x1.3c78fba89f7e4dd2da5d2b0f1ab2p-13), C_(-0x1.6e90a45b17e11834e30d4035587ep-22), C_(0x1.34c398a5dd4857b9fcc2b9b3ec09p-29), C_(-0x1.351bbccd566d5b56e0d110fac029p-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.0cfd9304e9d0e9e89a508d967352p+3), C_(-0x1.68c00ea69764cc01a573447ef7eep+6), C_(0x1.b4a63a85c6a121d6db6758f94115p+8), C_(-0x1.3c4fcf304828edf08897e340df25p+10), C_(0x1.35efe9ab816f6ad2ce3b95243287p+11), C_(-0x1.c3872b5b6dcd2512d759e390543cp+11), C_(0x1.1261ac83f506bff0f38c31198cefp+12), C_(-0x1.39e1fa3f00833a2dd6c432f2edcep+12), C_(0x1.5e4c9d364466ef749b8d0d88979bp+12), C_(-0x1.6b72e41a84905cceda3e7fc6c066p+12), C_(0x1.578fd4c404248dabc968b7c529b9p+12), C_(-0x1.30faf3648505cdf5f671e0ae34fdp+12), C_(0x1.0174ad7c898217c903f8f07741efp+12), C_(-0x1.942bc49f2f52a22fa3eae80252dcp+11), C_(0x1.25cbc7992fd63cf31740b115daf5p+11), C_(-0x1.914caac5676309ecc6f6c550d8ebp+10), C_(0x1.f93f030387c4d019b6838cf24389p+9), C_(-0x1.1b4f5dfc787bbc32262ca3f167bep+9), C_(0x1.1df01b8a36a8b0e740af0c5b60a7p+8), C_(-0x1.048db6f3ab7c1cc8ce49930b812dp+7), C_(0x1.730bcb9c58bfc20d60bef0471523p+5), C_(-0x1.09b56b87c1c7fb7baeed74ce6cdbp+3), C_(-0x1.4fb833b30fa7eeef6a7358348b92p+0), C_(0x1.e38e1048601a60cbceead8c786b8p-1), C_(-0x1.ee07e572041f738c256c5953b0d7p-4), C_(-0x1.913ced3c0164b56d323de7f36c57p-8), C_(0x1.0726b83c4032bf81b9ad0141e709p-11), C_(0x1.2751c6763466bbc5b359801c4ca6p-20), C_(-0x1.00ceb77e39cabc22cbab1770a0b7p-26), C_(0x1.0123085a8910152fac9990b7a672p-41), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.6ddd33f198eb3c96ba1c54f670fdp+2), C_(-0x1.ef9ef6f596ce44132c5dde1777d4p+5), C_(0x1.2bec86422c72fb4a905555a96936p+8), C_(-0x1.ab3138ae63b3c1e29f1c692c8b8ep+9), C_(0x1.90171accf1ae92cfd9c146fd2557p+10), C_(-0x1.0b8279e6381aa2b741cb2d9796cbp+11), C_(0x1.21c7cbc3a51f50320f21aa56334ap+11), C_(-0x1.3291c6bd3630cafeef14937244cfp+11), C_(0x1.52187d4f278255d90661622e17d1p+11), C_(-0x1.5764b21031af003ebeca03a2b0b9p+11), C_(0x1.2d82b77758b7aad296e73eef7d7bp+11), C_(-0x1.efcf6fd97e7509c927b7122c5c13p+10), C_(0x1.96b834131566dc9e06167e63c7d4p+10), C_(-0x1.34d67cf0a39ad9453edbb75a25c5p+10), C_(0x1.9aafba6f0ff85ebebfb694ebd422p+9), C_(-0x1.002f1ef9723b265f846b3c2332f6p+9), C_(0x1.378956144d5be0ceae60b1a0aa28p+8), C_(-0x1.48f6827b3eeb52ea5b3fa287d164p+7), C_(0x1.17de886be7cb3ac887cff35422aap+6), C_(-0x1.abd1c377daaf4123bc47a29397f4p+4), C_(0x1.18836fa0aedf116ff47c167f808p+3), C_(-0x1.72b11631904f6bd3fd5a823e34cp-2), C_(-0x1.93c736e0c44c0da3f45cfa30760fp+0), C_(0x1.74105b4ecfea6c16423bc348f8fp-1), C_(-0x1.a9382883de207a4dbe62c7de34c2p-4), C_(-0x1.8ee02bc822713114de66688f8544p-9), C_(0x1.b89c5ecf7a7b773088c639b3a53ap-11), C_(0x1.5051009d42a4549b60dc1a4ffdc1p-19), C_(-0x1.a9ba33acc416babe2777385baddfp-25), C_(0x1.aa6a7d0ba81031b3c9971794d3cep-39), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.7e688b7526a774b76724ba13a96cp+1), C_(-0x1.044f66dd0bb355e9e82c72d5eaffp+5), C_(0x1.39d2780b0ad2f5c130250e42d893p+7), C_(-0x1.b63bb8898df0968b0e5291c5adf1p+8), C_(0x1.86b367123a2139a59288ccfca3dfp+9), C_(-0x1.d8001c1817ddf23795b1149354dfp+9), C_(0x1.b397f071da3115c284e47fbefa66p+9), C_(-0x1.9ca191acc971e01d76f080b3e85ap+9), C_(0x1.d28d7edb2db091286a502e3d1491p+9), C_(-0x1.daeab5bf793f0a5db198f7c1b01p+9), C_(0x1.738e37d47cc21d48d3f57dfe7cfep+9), C_(-0x1.0785a3e74df59d20286619983999p+9), C_(0x1.a556a97ba734840eab5a765f294cp+8), C_(-0x1.320671c41025d2eac683ee371196p+8), C_(0x1.33661041ead74be914f62376ca64p+7), C_(-0x1.d86506577d5080199e51f7260b6fp+5), C_(0x1.9ebe0657238551a24ab6c6c0e20bp+4), C_(-0x1.ec9ee904293324442bcbed481925p-1), C_(-0x1.1034340999c868fff5238312a8aap+4), C_(0x1.04d7524f6a9fff23ceab9523e19cp+4), C_(-0x1.2fcc89fd04e88d59c75667d7c4bbp+3), C_(0x1.7c24bc012bffc7d1e21de0348c52p+2), C_(-0x1.c84c145900f77b34a4876818624fp+1), C_(0x1.57bccbd9e4fcea0faae4ccf7a2f9p+0), C_(-0x1.d81daf1af068d1091e32e8f2fcc9p-3), C_(-0x1.20f9f72def1de8f22a005f73e8a4p-13), C_(0x1.c2f2ad7e016f5272ff115101365p-9), C_(0x1.baf6705e59cac3284164d29d2adfp-17), C_(-0x1.ae94eeab2dbd4d40eac4360abe26p-22), C_(0x1.af91281d9938911a63573a1c8a3ap-35), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a308ef1d16805759614e47ced45fp-1), C_(-0x1.1df37cb20ef6cd526bae886688ccp+3), C_(0x1.5a47cc2daffcb2cf20f8cbe23f9dp+5), C_(-0x1.e7cc32d4c7f05cc178a92423af38p+6), C_(0x1.ba5aa6f58d154790fde87c08c1abp+7), C_(-0x1.137ebe2556bb5c31390bfbcc3555p+8), C_(0x1.07f96c27b79ba1c76a48900fad0dp+8), C_(-0x1.f176d6c3151d8ca65c2069cc8ba9p+7), C_(0x1.0c09a0e0bcb9ff8d7d5ef1548dd1p+8), C_(-0x1.12bf0f34a9a5500b54ae9f341239p+8), C_(0x1.de16d55d65d2bb62ec7f100c7235p+7), C_(-0x1.8c7b496d3d3fd8274eb146a1b265p+7), C_(0x1.56592506626bc28d37aec7a2a08bp+7), C_(-0x1.13d919c9693b2e85ee4209bf711ep+7), C_(0x1.8b69de5718a09e2e84e51d955579p+6), C_(-0x1.15b78c90e783729339c94d803f63p+6), C_(0x1.8188b8db550fea38899d2489ef66p+5), C_(-0x1.e03c011f666ac66011b7609652a9p+4), C_(0x1.12ed8b36e986458009c8fb08c63dp+4), C_(-0x1.36a5b057bc26ecf6312ef4c8aa89p+3), C_(0x1.3d2641cf67e8fbde6d24a0c08316p+2), C_(-0x1.11ef148707dfa11f55a9bad8158fp+1), C_(0x1.c294da23fe29fd37f9c13ab439f3p-1), C_(-0x1.4f57e7e05e818e7ff02709327119p-2), C_(0x1.1ebd9964081cf6e9a360b8a8d058p-4), C_(0x1.367917f76eee2f0773ffda2dee7cp-14), C_(-0x1.fdd37749c94d91b95e5811e014fcp-10), C_(-0x1.0fc0733cbc7d657bb2812f3ed59dp-22), C_(0x1.f945fb653cfda9182e6054d0438ep-22), C_(-0x1.fb1bcfae6e46d13bafafa99aa27p-34), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.74ef139ad4e11f00f65daa8820cdp-3), C_(-0x1.fd9d32fdef73fc52b4caeb648516p+0), C_(0x1.3320f17be8b7073381e865362afep+3), C_(-0x1.a9e31dbd98dd09635b0d379485c8p+4), C_(0x1.73dbdd38a87f5064433a350c721dp+5), C_(-0x1.aa50f206f25c72a99cb7b1dfa7d2p+5), C_(0x1.5e48ac9c2f1f1eff350b14cb6a0cp+5), C_(-0x1.20d7a78e95ecf57e7add31db3fd2p+5), C_(0x1.4350b94e5aa2da50e61a74e27b2cp+5), C_(-0x1.5499ff05228ddd2807c95d8259cp+5), C_(0x1.0d8c7214ffee0a1235b3874b3a3ap+5), C_(-0x1.8fe88996cfa9a55157f19af30b98p+4), C_(0x1.63da6bffb7322ee61e908c187b83p+4), C_(-0x1.24223f5c1b9d9506d6b401adee8dp+4), C_(0x1.7851e19176715ec2bb3ef2e77d74p+3), C_(-0x1.e4fd178fcd0ef2f7354c8299da37p+2), C_(0x1.610a439acb28979c58f2b0d330cdp+2), C_(-0x1.ae4c3e147b71c294863ea12a0857p+1), C_(0x1.a6fe28ab7ffa991086c47e322a6dp+0), C_(-0x1.ccc920f98175dd5797f1c22d8029p-1), C_(0x1.f9389387bff6b354c93278385205p-2), C_(-0x1.8612de961fd0228a7f5532d1edd2p-3), C_(0x1.fd43fc0e7883ee43ba7f30ad9465p-5), C_(-0x1.aafa1e0c4a86f88db60d4f1fa17bp-6), C_(0x1.b638737fa8e8eebd498a75e7c49cp-8), C_(0x1.071682a1f5057e2143b4d72fc7c5p-11), C_(-0x1.a84c3f530239b63f7da26929d4ffp-12), C_(0x1.a20c2374a0f6700016084886c2a8p-18), C_(0x1.e7f1c0adda0f62adb67917e7d654p-23), C_(-0x1.eb089a4058efe658e6efa5db9e34p-34), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.31c729360063e0149d619e7c5659p-6), C_(-0x1.a21aa8a66a6833da5818bdb00dc4p-3), C_(0x1.f656a46fa2a9169e56e0e1915e67p-1), C_(-0x1.589b4fca92a9f10523379245a6fbp+1), C_(0x1.25049558932c1a7bf94dfb345bd9p+2), C_(-0x1.3b0f087615a26809432e1d6e01c8p+2), C_(0x1.bed87f332745bf792baa46fb22d3p+1), C_(-0x1.37fe75fa2aa3b693bb533ebc90ap+1), C_(0x1.75c34ae38a11fc31440e21813692p+1), C_(-0x1.9f32b219f201f09e83858382dcccp+1), C_(0x1.2a50b5ebe798e437ef2503085768p+1), C_(-0x1.80aff2523d4b3342a833db6031p+0), C_(0x1.71f9af43c19f0952a4e07472578p+0), C_(-0x1.40d21595459cbd897728656ded6bp+0), C_(0x1.6edc3b8de7cbccef39ac5c5b8452p-1), C_(-0x1.abb5cf29e076b1f30f36686df3b2p-2), C_(0x1.5fdcb9c5e1f87c285b04c2fd8053p-2), C_(-0x1.af4e9b9242255620df4c3ab9bf57p-3), C_(0x1.57b33e4d63cb5298c7100384e3b2p-4), C_(-0x1.736294d370dec79efb4014a700a8p-5), C_(0x1.e1a61d7964668ec603cb9aadd499p-6), C_(-0x1.38138139d6cd8275f0059b0302fbp-7), C_(0x1.a99b874715d59140bd445bce9797p-10), C_(-0x1.191ada841d111d8ae1875d5194c5p-10), C_(0x1.44a23a1750afa85a30082caf581dp-12), C_(0x1.4db128e094987961ef4278d6a462p-13), C_(-0x1.2cad37f3dbf9e7a235442f3e067dp-14), C_(0x1.f38c667f694821291da674a42ae8p-19), C_(0x1.c870773604d02f72b6568dfdd8eep-24), C_(-0x1.cdd01a024c710ef11bdc57da89cfp-34), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.086b758f2eb28fd921eab56a11edp-14), C_(0x1.39d1d9b6240962e535ae21b2376ap-6), C_(0x1.6586cdc7bb445ac141a0312b8103p-2), C_(0x1.b9d577601dcdb0dcb740f8b98373p-1), C_(-0x1.29ed86125a029803c293e63e1f67p-2), C_(0x1.35228579cf169af0c995d4c52ae4p-4), C_(-0x1.d940ea5a753eace5078cc210d381p-6), C_(0x1.eb66212482f668b8fcf8d3b919cbp-6), C_(-0x1.11e395c55e411390d39b33c12486p-5), C_(0x1.cac8225b45414be4173b8eab4ac8p-6), C_(-0x1.1c2e36898d63a7284aba1b17de4dp-6), C_(0x1.01459f9607ee130b7061d5eb1498p-7), C_(-0x1.3f705b6c01172b34ae01036bd601p-9), C_(0x1.aa4226008e468554c7236a5aa13dp-12), C_(0x1.a227b89277165ccd7a008b2025e9p-16), C_(-0x1.df4876fdde2706ccc1065c683114p-16), C_(0x1.a3348c487531e3e6d511223fa2f3p-19), C_(0x1.bc3886b839cf7c209eee289f6c48p-20), C_(-0x1.3c3d3ef190e94974e0b46a471d0ep-21), C_(0x1.fe10f39c7db3f74fc941d5c89993p-26), C_(0x1.28b87cd51d74b7827dcb3f76ba15p-26), C_(-0x1.5145c4e025139affe8138cf7767p-29), C_(-0x1.c7ef81e91e695e468ea8a5c582b5p-34), C_(0x1.74462d4702c982a79ea8a83c2f8bp-37), C_(-0x1.2eb21459dd6235173db20b5350d7p-41), C_(-0x1.802cada0cd8903e4e2cc5b09958dp-49), C_(0x1.f4dc3c81c07b2740f80e7509651ap-52), C_(-0x1.790641c0d0b7b530c5f3ea46fd8ap-59), C_(-0x1.7be9575142225928d5569ad8cee9p-68), C_(0x1.70d851342e8d54c091b220a3045ap-78), C_(-0x1.08ea9c21a48ad423ef299cf99255p-94), C_(-0x1.6d7121dda4d1a467dfa9e3b22e7bp-121), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1287f0812571ced1e1d4f218f2e4p-11), C_(0x1.3963c1ea0712ddb1fe38bd9c9b8p-4), C_(0x1.56352993b88d1ab506ab53972cdp-1), C_(-0x1.f6edcab194e1f1b63bcde69f40efp-3), C_(-0x1.17b7ccfaac21f6709bae8571c345p+0), C_(0x1.0e886b0af5f1b1856a755304e662p+0), C_(-0x1.8ecc3f557378e15602e7822e181ep-1), C_(0x1.fc587a34e0e0edbbd49047b2d639p-2), C_(-0x1.0d307d8a24ec475046eaa126ebfbp-2), C_(0x1.aea667b7c25e2cfd5f86bd0180b7p-4), C_(-0x1.9d42bc92105fbc1675af424ec92cp-6), C_(-0x1.84840a8e18b0614ca4eaeb216151p-11), C_(0x1.a3a969f351753a208cd3e5a8f168p-9), C_(-0x1.2b9d22453328eaf6cc00ab2ce255p-10), C_(0x1.95e4d7f634c66f1127081eca4c12p-13), C_(-0x1.348b4478275cac4e09ed00491749p-14), C_(0x1.d3098c771ac4dfa090c0edef58f9p-15), C_(-0x1.49cdbb7d5d852bdcaa3c1cea09bfp-16), C_(0x1.12cb123d22d84321bf94a9d64f4p-19), C_(0x1.ee369d60388e0cdc7a4cb2173367p-22), C_(-0x1.fe1ef00c018375d62e92ff3458b4p-24), C_(0x1.a7341d99c255c94d652d9d8f033dp-28), C_(-0x1.530b27430376f235ffb52485dd26p-31), C_(0x1.baba95d77648bbe90c5142dc80f9p-36), C_(0x1.4f068520e819c6ced35b43d3471ap-37), C_(-0x1.57c84bc8729954adbcf1854852e1p-43), C_(-0x1.4644a16a824bfa62197420e08c45p-48), C_(-0x1.8db806597a9c3e694cd52ef5d34cp-57), C_(0x1.0d894936ca76f0f900d3760154afp-62), C_(-0x1.b4baf18dcac141cf35421e01ae8ap-74), C_(0x1.758520ee5d32f0284861059680c8p-88), C_(0x1.01a0cdf0066867c0900e21808ebp-113), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.f55ef3437afefacc7be18bbe98cep-9), C_(0x1.0777b4e7fcce2c0e40744ca54978p-2), C_(0x1.3f1d6fcf2ecbd47e40d3c1703896p-1), C_(-0x1.504b43d516f52267cd7e5fe7d16dp+1), C_(0x1.4eaade935c6e2740942fa58ebd6dp+1), C_(-0x1.5ad808042149f417dbd58af6b00dp+0), C_(0x1.cab544fbb7d4b4c60e5f5aaacf98p-1), C_(-0x1.9ef87caf9226b19c3d44c512bce3p-1), C_(0x1.71fed5bcb893256d48b5662cb1dbp-1), C_(-0x1.0f0d57adf520b2ff7dc518f39f1bp-1), C_(0x1.30c75d43e61143b20925258c8b83p-2), C_(-0x1.e86b0f7372ef580e2a548027c15bp-4), C_(0x1.b73425fd2a98ccd833576427e8eep-6), C_(0x1.4682acb561a50d1c8642601cd7d1p-9), C_(-0x1.2eacc75c57cd93079a89b775a2e9p-8), C_(0x1.a21a6f510bbe181a8681692c18eap-10), C_(-0x1.147cb459e63791d570da7fd30181p-14), C_(-0x1.28e19a4afa00bfea3a7c1b8c9b43p-13), C_(0x1.931858e53ca4936f19114cad31b8p-15), C_(-0x1.62eadbc9e95863c36c22bbc42279p-19), C_(-0x1.de496f2e6fedcba7342c1d21ed73p-20), C_(0x1.70387d4ff6ccbebda63c71a99d37p-22), C_(-0x1.75a0d535dc76533ec0cb363c4ecp-32), C_(-0x1.a0b3effc1d4a9bf1824673d2a6ap-29), C_(0x1.b9e3fb75297f14c235645de65301p-33), C_(0x1.a8bed9eb35249e37507da13a3226p-41), C_(-0x1.16b3429b615b32018d7a07c98618p-42), C_(0x1.ff8673e3757ca4761f1167047725p-50), C_(0x1.145878dae073bba8c6a0fb3960bap-57), C_(-0x1.9feee550a5c8e58e5b4245c07331p-67), C_(0x1.83b415f1b1f54454e6745eb4b4d9p-82), C_(0x1.0b692b789332c1658c8a24d9733ap-106), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8aac090c80a048b0460ec2d7badbp-6), C_(0x1.5750bdc83f394eb3b8faccf4d05p-1), C_(-0x1.50c8f6f54e2cc9e3e11af9656bf6p+0), C_(-0x1.8a451969aae1b985b829fad06526p+0), C_(0x1.a2b7eb3937eee939c776f8d31095p+2), C_(-0x1.118e064b4695a7f92c4b4501fcb4p+3), C_(0x1.c7bf87fc63cf93f68f74e5e7c825p+2), C_(-0x1.1d8d78044ee8ee6d6d812a1942fep+2), C_(0x1.e73d8bee7689f31a0590abd75fdap+0), C_(-0x1.2add7b6319082ca3c2efcadae5afp-2), C_(-0x1.d3adb45266b9c9f4635ae6e3441ap-3), C_(0x1.033a83600934f9863377b693a726p-3), C_(0x1.b5451b19e5929d480505b5a86b0ep-5), C_(-0x1.7b8dd6246eb29127a889717ed76ep-4), C_(0x1.791fa45e84d145e6dc4c1510b4b6p-5), C_(-0x1.7c0beae24c83b65b5de7467eb78fp-8), C_(-0x1.5782b21d6af61f4f7dba20838e5fp-8), C_(0x1.a840c3e83eb503c78b20b8a28b62p-9), C_(-0x1.986e55de09433017be901893ecf5p-11), C_(0x1.26705b8c8ad65b55b61c41f75588p-15), C_(0x1.d3d83a9fdf1319302a3787bdd6a4p-16), C_(-0x1.d82fd865aa4582e2885f825ad846p-18), C_(0x1.f5b54c9c1896a94bf7ab1ebbd585p-22), C_(0x1.fdc61d80cbe3fa72384c0df210aep-25), C_(-0x1.0fd59d78e582bd5f0e263192f5d2p-27), C_(-0x1.b2380e734b4f9e20f629d35cee8ep-35), C_(0x1.88e8ce1bbad67bfa806d6889ad1bp-37), C_(-0x1.9888eae4a10ce8dbd9f3a51b6ca7p-45), C_(-0x1.466525261ac31d726b6464754be8p-51), C_(0x1.1b33afe3275e0f5266344c60d67dp-60), C_(-0x1.cb1864e2c62c6b93f97126fa2abep-75), C_(-0x1.3ca6dac99711dbeeb8df3656a48ap-98), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.0491b50257a217948037c313c632p-3), C_(0x1.088e085a415b940e86ec5f53c805p+0), C_(-0x1.9cc2273fe20fe221de7ca14dc50ap+2), C_(0x1.b3ef626d8f7b0512e777dbab2038p+3), C_(-0x1.fbdaa71ed3446ae9d3eb57fb2edp+3), C_(0x1.ba80f6fc4d07a16a8240d21d3427p+3), C_(-0x1.97b8947186ea82517ff8170fe92bp+3), C_(0x1.9ec07cc028783871c266a993e177p+3), C_(-0x1.7db26c06ff96156fee69f60a32a6p+3), C_(0x1.1910e3936c71e0698749e0100bd9p+3), C_(-0x1.2af49c29492fb4bebe4ea4c0492ep+2), C_(0x1.4fef94a557c4567b7c45f05c21cdp+0), C_(0x1.8759880e99b2b3b19fcf3cb856f9p-2), C_(-0x1.52e5ecb25ff9114988afe0915415p-1), C_(0x1.5f17262b3d7f451babb3a37c2f6bp-2), C_(-0x1.a7f494de47ba1f8ccefd1a48b767p-5), C_(-0x1.5dc2bf7dbd1d10649dd1efeed2ebp-5), C_(0x1.fa52c9fe27d631a55490bc5d6453p-6), C_(-0x1.0edbce8cbb631c85810ceb7afb83p-7), C_(0x1.51bdedea6ecf9aa291d741d5449p-13), C_(0x1.03e8c53050207786cbf7a98773ebp-11), C_(-0x1.fbae0e996b24eb9e7412c53365a6p-14), C_(0x1.a5405fbd60ce14b0ebcc8751154bp-18), C_(0x1.8401a133e3997a7f15f86f10443dp-20), C_(-0x1.9620d8180585bbc8bcc656387216p-23), C_(0x1.59175b5517be80fcdb2badddc5c9p-32), C_(0x1.a5d4ddd28a790634117b9f52ee98p-32), C_(-0x1.a9e2125d31a3c8bd4449e4b094e8p-39), C_(-0x1.068a399565e004f3cf609f3513f9p-45), C_(0x1.3ca73a6f9a6a05c209544433b8c6p-54), C_(-0x1.740e2252efb089d1ae6c93a1b5fp-68), C_(-0x1.009e0cb9ab19e5360f5dcaede516p-90), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.12eabbc13ae4184543451253a593p-1), C_(-0x1.dcd48a30309a985e66770059ddf6p-1), C_(-0x1.61bd6ca0b74ea8c2e61c8e522049p+2), C_(0x1.4b16a330057a9a464e1afd029265p+4), C_(-0x1.6645126fb9e4a4d9cdaf8add299bp+3), C_(-0x1.746a9ef1dde16ed58e0b432bfa77p+6), C_(0x1.49df58a6d0bb202b69c6e445a50dp+8), C_(-0x1.2844a2ebcc53c8df614ae3957cc5p+9), C_(0x1.2e42267f64054a81e12f7b2ff462p+9), C_(-0x1.0225a1d4c62f4d7b402b42538ffp+7), C_(-0x1.601645627c56a1dba4f1a59caa2dp+9), C_(0x1.58f8de6f258472f30e4dedd3b403p+10), C_(-0x1.693ca7a1da62866e49185596166ep+10), C_(0x1.d8c8ec24a42109f71622d8b3d887p+9), C_(-0x1.46d08ddd7ae2544339cc13f918fp+8), C_(-0x1.3b3b035293fc39a231fe7419868fp+5), C_(0x1.d12d6fce626a721298fd94ab886ap+6), C_(-0x1.06b1d4ca392cd5c4bed1c5482646p+6), C_(0x1.11a1d31e54e9ef311bda0933730cp+4), C_(-0x1.40c7309469440a4e5541e2e4c29cp-4), C_(-0x1.5ca50bfd4e3e4aa86ac8722ac5aep+0), C_(0x1.83af684fffb5b293cdc91cda7503p-2), C_(-0x1.9e6da0de05c76e1cd2d553753824p-6), C_(-0x1.7858ef153620d7c30fc31cf56a03p-8), C_(0x1.dbde29a936a150c27f696a66c4f8p-11), C_(-0x1.7bcec5a7e8c292f303bfbe3660adp-19), C_(-0x1.4f2043d7bc5e1f3a3aca5e8c6039p-19), C_(0x1.c2215a9e7432391b90e0fdc7be76p-26), C_(0x1.2faa97edde49cab9c4399ff18db1p-32), C_(-0x1.023988307e2875f374e798bb263p-40), C_(0x1.b307ce337f9f1788bff0e23a47f6p-54), C_(0x1.2c0d7e12bcbb5186b064f5495d76p-75), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d53d20f76b4eb49c1b6330a595f1p+0), C_(-0x1.86cf243ed21bd08659834822cd59p+3), C_(0x1.17b81677ed649599a4d3595e967cp+5), C_(-0x1.abb0b3868d1ea2ff8d47921a5292p+5), C_(0x1.f121a0540b3049d09ec7e5551764p+4), C_(0x1.17380aa83335c1ea7599d28ad525p+6), C_(-0x1.0c95dd1e4ca7caa2bd6deac65cdcp+8), C_(0x1.0b7efc300b3c27dde71e697ba35dp+9), C_(-0x1.826ec4b2204db57bfd19486982e8p+9), C_(0x1.b8a41eb5a39bd8486cfb324fe223p+9), C_(-0x1.a1f5e828547f7c5b2bcb67af2fb7p+9), C_(0x1.5201c70981a0b03733b9e6dd6e09p+9), C_(-0x1.b80f281da59c5918dfb2c054585bp+8), C_(0x1.5562f5403383fa55297b9a337231p+7), C_(0x1.90f51962a56d70bb1b983c1ee4e5p+5), C_(-0x1.24ca65a640b01ad09d88f66dbd3cp+7), C_(0x1.f2553461b931355eaf34d3576431p+6), C_(-0x1.dd44638d13da936b6e3a63722e62p+5), C_(0x1.c0ad57b9e59f4a68dc33ce587da3p+3), C_(0x1.4256b15254b23391d079094819dbp+0), C_(-0x1.fef8071c6ce2bcb3957ad8d4d2e8p+0), C_(0x1.22e6dade4ecd5ba17bba3803612ep-1), C_(-0x1.5b42b69e978a5317df9091ce52d4p-5), C_(-0x1.642c165a0dc2d5830f0c68cef691p-7), C_(0x1.1410f766f54ec568508253190fd5p-9), C_(-0x1.866a34dd716a310ea2f7f87ada3fp-16), C_(-0x1.0b5a3f31f6ca3105091deb1b111dp-17), C_(0x1.e9e690f2d2cdcc9f8d2e274aa38ap-24), C_(0x1.73aa86e33bd9c22c0a03f2815f8fp-30), C_(-0x1.ab771b8e4149cc3a675cc4898a01p-38), C_(0x1.0db4d80a1d5dee01c7237b2562edp-50), C_(0x1.740bf5a4533bf10d9f87491f9f4bp-71), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.295ff3e65734f855f39c88490c77p+2), C_(-0x1.53451cd19bffc6de5e35716507fdp+5), C_(0x1.6528da0fe333f438d196bece2469p+7), C_(-0x1.cbdb85c1ecbc284c645d00a79bf9p+8), C_(0x1.932ea82ba595876f9e544cf675e8p+9), C_(-0x1.f84307101d81872f84fc73fbdae3p+9), C_(0x1.bf6854697aae94bb46e7b0542bd4p+9), C_(-0x1.bf12de658509da0b644cd695e0b7p+8), C_(-0x1.4368651bd726f170cb68d94b4efp+8), C_(0x1.6e6644c0e40c6d361a9bc94d8ca8p+10), C_(-0x1.63936602c4e494fb5778af823485p+11), C_(0x1.effe4a55a204acd95799b1a3ca8fp+11), C_(-0x1.113fec7086061d5415319b0c5f72p+12), C_(0x1.fcb0d58a8410175cda764e2c75f6p+11), C_(-0x1.a4bb9f060dab410fe3bd526fda39p+11), C_(0x1.329610ee0fa8084fbb618f8b1294p+11), C_(-0x1.6a3f2ab2a8a1738b723263aa7f2ap+10), C_(0x1.28b90043770072e85c55c758b4e2p+9), C_(-0x1.98095b9a0fe58b99d4dbb49d1d1ep+6), C_(-0x1.7e9c13fb873c76fdf7051d8da9ep+5), C_(0x1.38a8e96bcb8fab70b383bca5ab41p+5), C_(-0x1.67764003f2db50e6202ef878e23p+3), C_(0x1.be87d29fcd9eaf1da18ad636de29p-1), C_(0x1.281bdec2a7f8db103e09703f13fp-2), C_(-0x1.0bb48c6ffbbe8bdda51c03bcdddep-4), C_(0x1.77235116b4238df6f725d274e118p-10), C_(0x1.6675983c9f507c163e6782c7703ap-12), C_(-0x1.d3d6efe237ab3413c9e890035877p-18), C_(-0x1.81b8689afa6e0c7916f7a3885678p-24), C_(0x1.2f0e5249c6fc36ea9c04c196c326p-31), C_(-0x1.1cfcb984a013a5a7bc95cb9320e8p-43), C_(-0x1.891f706028ea406f88faa50dd1c9p-63), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.06fc2ba8e79eb72495307bac6ae7p+3), C_(-0x1.5489cef9cc78f65236603d4cf5b6p+6), C_(0x1.9903c6b2ba02d6090a910755f61cp+8), C_(-0x1.312486b078b78cd8f1a70419307dp+10), C_(0x1.4302b86058a5a1292888fa9ca885p+11), C_(-0x1.0b2ccf4526b8c244af343cdb508bp+12), C_(0x1.789932548bf931d92c8e1c8fdaeap+12), C_(-0x1.e12b9567cda5d69eb9d09a4087d7p+12), C_(0x1.1abf23f09fbf8f276f484c29af9dp+13), C_(-0x1.2d5cd803da680fe5c48016ca91a5p+13), C_(0x1.2251ae99e408a20ab182f4722d14p+13), C_(-0x1.003d36dfd5a7feaa6fd4657cd76ep+13), C_(0x1.9f286327797df00b01373e3a21a7p+12), C_(-0x1.2d0f0d917a1ccdeca67d314f4298p+12), C_(0x1.7c4b637f2390259cb36649bf5cadp+11), C_(-0x1.9dc666df2eb31fd9d525e80a61c4p+10), C_(0x1.706ff6209d6f31fbb17a3cac3d1cp+9), C_(-0x1.76b515afa4c5f086db4f0c0e11f9p+7), C_(-0x1.24480d16a6ef2cbf187e850a3c68p+6), C_(0x1.d48700b685d23247b608b5cfdb9bp+6), C_(-0x1.05a23476b2f21c52a72aaf8a7e1cp+6), C_(0x1.24935371deb2ec43e23d888eb93dp+4), C_(-0x1.4ca6dde02f223d08bbf5ac28bf78p+0), C_(-0x1.58615b018cee75761c906455ba3p-1), C_(0x1.608c7993e060e80a3ede46931d7cp-3), C_(-0x1.b69ce98ab84f025bb8e299cdad9p-8), C_(-0x1.4823967168edf829557ae3a04f84p-10), C_(0x1.35d91ac6fb610d89a9ca12ef88e9p-15), C_(0x1.1a7bfc97dc33f6885878a1ae185cp-21), C_(-0x1.2be69d6aba0faabdfc72f4f8d745p-28), C_(0x1.ab2f7726c736fed01e244eeb7278p-40), C_(0x1.26a24576b891cedff10c341592ecp-58), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.7d326037dd59f04b93695dea64a2p+3), C_(-0x1.057b7f9e150cfea8b7f60a37452p+7), C_(0x1.46966635c034e3d077a23a34c32dp+9), C_(-0x1.ebce82ab1e29c2e7e1d24be27a9dp+10), C_(0x1.f63288a008a00b0de93e3b52ce8cp+11), C_(-0x1.7a1dba3b5d1c5c524569d9d8ab6fp+12), C_(0x1.cf6c2665a1ce80b761f29f92f584p+12), C_(-0x1.02e9d9c7c198539a0401a9ab1cc4p+13), C_(0x1.126ddfd818acd4152500102b2dd1p+13), C_(-0x1.fbbfeeed9e84aef44a32d1cdc74ep+12), C_(0x1.6dd45600e62e38c3d8b7dfec1df4p+12), C_(-0x1.70d3cf8b17a54f73f23ea7c9008bp+11), C_(0x1.116e22f7a2135c32a071c68e4c4bp+9), C_(0x1.45e19d7a9f76f8d3600c21c7d961p+10), C_(-0x1.541801f00ec703cee53ee38cf9d1p+11), C_(0x1.9d27adde86cc9d38961105f8f3abp+11), C_(-0x1.718955043c8aaad595f50f39f434p+11), C_(0x1.13d222dd6eb22f7f0b910b51dfcbp+11), C_(-0x1.75dd9fab7780dd812eb2ca0b6548p+10), C_(0x1.b95889cd4ba403f3d771bad22aefp+9), C_(-0x1.880fb1002a98d978d68c5c6d01b8p+8), C_(0x1.a3c6bfae2048432d988090525bccp+6), C_(-0x1.6af0f7c1089720fadea20b94dfd9p+2), C_(-0x1.7dda27580f4d6fe605e5e2098125p+2), C_(0x1.bb56918206273622bbbf209a8389p+0), C_(-0x1.95410e4d3fa90c79d49021063b4ep-4), C_(-0x1.1e3dcf4406fb03d054399893d4cp-6), C_(0x1.863de856b0c02544096765b7d0aap-11), C_(0x1.82e7abd79b3d018087088704fa41p-17), C_(-0x1.21b01c6eb2b87dca0186448dc932p-23), C_(0x1.2f1ce1bb4e63e9b48ca04ddd06b5p-34), C_(0x1.a21b5c9a00d44d929d9e41311f24p-52), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.6636de936afdb6694c4ffaed6a31p+3), C_(-0x1.f93a40edfceae00ae68e29b08ccap+6), C_(0x1.446da371d76c83e79d3a084840a1p+9), C_(-0x1.f81b7969b6241ca8af219aea83e3p+10), C_(0x1.0bf59cc8ab3644f7ca5bdfe6f82cp+12), C_(-0x1.aac9a227eb351b4f5d24fbc72641p+12), C_(0x1.1995306c55b12646bead2c38ad5ep+13), C_(-0x1.558e777f304785d9e9d3bf74bb24p+13), C_(0x1.8e256f3ea2d2e1b7bb373067b872p+13), C_(-0x1.b16f217fc65b857f8f6c9d68eed5p+13), C_(0x1.ae7e2aa7eb75bb88db9f2bedf708p+13), C_(-0x1.8d7f6b89b7d82de8cbcb8a91aep+13), C_(0x1.5bc0c9e9bcdde01e3a5bcbdf7ae2p+13), C_(-0x1.1c9a0c6fad5ae4a6fdea1b4bf6cap+13), C_(0x1.ae2f95c3b0ec2e40af37580cdc26p+12), C_(-0x1.2f129053ebc24ed7fe6fd750dd19p+12), C_(0x1.8d5b23e080443674d13b71f54d14p+11), C_(-0x1.d627dd21f8491dafe966ff60514ap+10), C_(0x1.ed8f9f756f065170266103952acap+9), C_(-0x1.cf7165a4ea829414cafd158d5c4ep+8), C_(0x1.6d33ddb7ad7e8017c0cb0ef30276p+7), C_(-0x1.65b4962a79c56602e9794ee156bdp+5), C_(-0x1.4d3b8e7db26f275e39c95bf13c09p+1), C_(0x1.950dbe3d7aca2e2a683f470bff22p+2), C_(-0x1.dbafbd443f803e2caf8c9757690fp+0), C_(0x1.04861e6b2202e3d3d031b9ec9cb4p-3), C_(0x1.7fe12c9629eace47e413a0b6403dp-6), C_(-0x1.c081b52017ebd837349a62b66ef9p-10), C_(-0x1.adbded066f7794fda23e0774673bp-16), C_(0x1.dd5025fbe71cc3a7e8141de53daap-22), C_(-0x1.642f3973aefae4a4f6422168ecd6p-32), C_(-0x1.eb48617a106cce90559379e40303p-49), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.24754790ab93df0d2355b8c8a1d6p+3), C_(-0x1.a21d6a4e4d9eb295ee53b44586fdp+6), C_(0x1.0d7a54376cc0558116461ff0ad85p+9), C_(-0x1.9dbd2fa0800f2f31e9998fd08c87p+10), C_(0x1.a81b276d71be81d44423e8d7940ap+11), C_(-0x1.3af0559f33f06e14389580e81a29p+12), C_(0x1.79904c76e9a060ec8e465cd0f64ep+12), C_(-0x1.a8514199bacb20e9109b77f293abp+12), C_(0x1.e26f534b2b2fd591e9ff3ecf4696p+12), C_(-0x1.01e02902687a04ca65f96e6a8b68p+13), C_(0x1.e5294c43a413c0653234e7f1aa09p+12), C_(-0x1.a1b883ef12d1d5472469dd56bc1fp+12), C_(0x1.5e76af85cca307f1a26352596c69p+12), C_(-0x1.15aa3e69a2aa9b29daeedbfe44dep+12), C_(0x1.86a5a2358b24b67c01514a96d3ebp+11), C_(-0x1.f3289b5523f3f49f9c93e10ff537p+10), C_(0x1.313866068b105f8069b31bb16bf3p+10), C_(-0x1.4f6a48ce8e3698f8a03194833bbfp+9), C_(0x1.23a63c6ead8e0e6aa15fe6f45702p+8), C_(-0x1.8310a2cf199a480eca2c2b3394c8p+6), C_(0x1.66b7a5ffb79e9dc036820a3ad358p+4), C_(0x1.9e1737848ca25244943790e11b0ap+2), C_(-0x1.b5673299d6c08937871359b74265p+3), C_(0x1.06e8de128ea18c685f5f56cec9c2p+3), C_(-0x1.231b2877825a92418fa8440891fep+1), C_(0x1.8ab9028a51e09357bf81bd620a6dp-3), C_(0x1.fe0af766377cd4e6799421dcabc8p-6), C_(-0x1.2be854453bc6da5ab705ba515333p-8), C_(-0x1.2ae4048d20f92820dcdbdae1afdp-14), C_(0x1.cba1e05e755f67b92b6effedbc08p-20), C_(-0x1.07cc113fc2e535393592fd575de3p-29), C_(-0x1.6bcf254ca2da0ef6aaa6b7f61e81p-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.6734f40a39a9f749d116c99eb0b2p+3), C_(-0x1.02800bdef42eee8e9cbe8c5b799cp+7), C_(0x1.46b9a7fb0659b383f2e6ccc2bfdp+9), C_(-0x1.d4653513846d8b632e3ab00ec6aep+10), C_(0x1.960cff14f27e9f5b5c924a5e31a6p+11), C_(-0x1.978ccec6aa50557b75045abb874cp+11), C_(0x1.65f6a7cb1b6c9a8b6c858f9858eap+10), C_(0x1.c444279391a3fe3940190e9b0d42p+7), C_(-0x1.743641ef137ce3dda68a9d7a6a5ep+7), C_(0x1.b0d221397077b61aaac6990656bfp+8), C_(-0x1.789f01238bd736d3d165c526de34p+11), C_(0x1.78076d93e8b2a21b1e57f1d51e32p+12), C_(-0x1.b80f30dfff7c8968576fe93ef454p+12), C_(0x1.bb7e92e14a551f987f2cb928af9ep+12), C_(-0x1.d7e88c840d9e4cc3ea2da57543cp+12), C_(0x1.d2485f20f81231778ef5c3fde98cp+12), C_(-0x1.8196b31f2aea3e18b21270e4dab8p+12), C_(0x1.2207d34a8263912f9c133abdb819p+12), C_(-0x1.b1c880d8d5a9e0a75d42bdbef999p+11), C_(0x1.2ab917d5ba30fbe55897a0ecf4f1p+11), C_(-0x1.5bfb47d78d5c9aa6b7b3ea1583e5p+10), C_(0x1.6b044d9f20d2a049f5f6d532822ap+9), C_(-0x1.6ef48eab0e23a150ac4817c103f4p+8), C_(0x1.3c86344d962287236a63845979d3p+7), C_(-0x1.62bb42947746334cf9768602ee2bp+5), C_(0x1.302845e71cb15c4d9c86c4ce6c69p+2), C_(0x1.8f631724d133592549dc9efdce6cp-1), C_(-0x1.82b35bd32ad297d37e7e03fdd8d4p-3), C_(-0x1.957cf95e09e20118e411d55e99c2p-9), C_(0x1.f6dae900f0dfcd786a2b2d830063p-14), C_(-0x1.960194a81c1ce1e7d634227c61f3p-23), C_(-0x1.17e5f78c653c49cc8a92fdb4f4c1p-37), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.206cbb79429c2414ff0c64aec8d3p+1), C_(-0x1.a083553e4e5a13a3aa202924b202p+4), C_(0x1.0cf208fc3d0318bce33d11bbf4eep+7), C_(-0x1.98490e95032010181534884dfc77p+8), C_(0x1.94a218c65bbc9e721912af119136p+9), C_(-0x1.17c83af6fa175ec696cff584b399p+10), C_(0x1.2a2038ecd41ce99e3b7c57bb1465p+10), C_(-0x1.2a77ab7e6edd3ce02f308ffb22c9p+10), C_(0x1.48a4ad0a80d290f172a8699dd903p+10), C_(-0x1.63c7a0fcade974b2571bdc4dbe83p+10), C_(0x1.4db14cb7e55e4fa2d6df561d81b8p+10), C_(-0x1.1f7d1042db45f9c24caed3674305p+10), C_(0x1.f7c955767cdfe40b013173464e47p+9), C_(-0x1.aa68a77f455100ba1716b7e81665p+9), C_(0x1.42df44997682f8bbd8705c8237fap+9), C_(-0x1.cc3c8a0b1406c4cb1854f7f475a5p+8), C_(0x1.4691261a687538ac5d74074129f3p+8), C_(-0x1.af8b6d718425edc744dded4be2d2p+7), C_(0x1.fddec0373e9c198b0187bcd05338p+6), C_(-0x1.206dca918e07679e17977c9e643dp+6), C_(0x1.394f1079b1d1bab9757ca4be3df6p+5), C_(-0x1.259c4ffdb02b3840be66495f597dp+4), C_(0x1.dbd0529d14d06481a401f7d28924p+2), C_(-0x1.6f7d774b2017e6812c50c53f3953p+1), C_(0x1.bf296d0152554d98043114f06ab7p-1), C_(-0x1.7c872eb94aac4434f1f1ee90200cp-4), C_(-0x1.14b95c5b19212b4fc03cbfb78471p-5), C_(0x1.194e2e645655459aae5fe3cd821dp-7), C_(0x1.3531940b1823b632efb391ef6f52p-14), C_(-0x1.7166e830bc1e3944c924058c6f08p-17), C_(0x1.2436b817dcb001ed9c4696c6c208p-26), C_(0x1.92b45b9b9529b7ad46fa43bf2077p-40), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.74cc6314dd173590f359217811bfp-1), C_(-0x1.0da07c63bf5b57427067a74fa654p+3), C_(0x1.5af5b4b6a40764cc3bad47672c18p+5), C_(-0x1.03fb3e545cdf8287d11ea7aeca93p+7), C_(0x1.f3ca921092c121957e2f18e268fcp+7), C_(-0x1.44047871dcef9850bbedf1b419e5p+8), C_(0x1.3358182c099a552dc3876c2274b9p+8), C_(-0x1.10bd53f78b9c50f9a6e08d98e9a7p+8), C_(0x1.29eb9e1a3472cf232a6709ddfbd2p+8), C_(-0x1.4a2468b639e365dc0b3fd125eb7cp+8), C_(0x1.26dfa9c8f6c029f4753dc36c664p+8), C_(-0x1.d2f1acef4b4ba3b7e608497ba6a3p+7), C_(0x1.9597a28faf38ab1c2b429a5dd79dp+7), C_(-0x1.5e8348f17beed687dbbf25dfed75p+7), C_(0x1.f9613319a9e146e700ffce02e1bbp+6), C_(-0x1.4ea47fc45e78dfd9cd4f69ce75a7p+6), C_(0x1.dde07d45fce1683ab6993808e07bp+5), C_(-0x1.3e0ca7abd11c2d7cf0bb1fa5493p+5), C_(0x1.599232ab9283f8d2a3c47d198eb2p+4), C_(-0x1.6ac8188fba9f38deb15c420eb1d6p+3), C_(0x1.96eff61828d979e9be81958fbf3p+2), C_(-0x1.7071f5cc1d4694972d2c2c65d04cp+1), C_(0x1.e12484c6688efee796e8769de364p-1), C_(-0x1.4f89eb4be752a44a4402c23fb27ep-2), C_(0x1.c393c8a6167f5e45bd4990217d8dp-4), C_(0x1.7dd147fa057e0b50125bcfcb63a2p-9), C_(-0x1.13f7fd7ac3a280d730a2c002774bp-6), C_(0x1.03548ce92b6649d84ccad32bfb61p-8), C_(-0x1.2341881399bbc4b237f436539e91p-14), C_(-0x1.74f214490ba0ea1723d42cc72a56p-17), C_(0x1.5a01bfbda2f04b0c7709f4c8e447p-27), C_(0x1.dc5f89a7304e8e2e4721be65411cp-40), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.3c25010b60fb3674740b05f24332p-3), C_(-0x1.c9af2c3ccca23c68e09fc2f7dc65p+0), C_(0x1.254de8cf13856aa803ccd66fd125p+3), C_(-0x1.b1e5eadb5abe7e897564be3e19b7p+4), C_(0x1.9450c60bf67cdef9bb4416994ee8p+5), C_(-0x1.e89b5b0fb80bdea3060e89b3c3b1p+5), C_(0x1.8f3eff015290335d6c5ba8db3ba6p+5), C_(-0x1.26718b161a212a6473dfb26ae75ep+5), C_(0x1.4a6ff4d30582a729b53c09473635p+5), C_(-0x1.8a12303f1194f457265cb9c94d2ap+5), C_(0x1.48e1a80801a27ea5d6b8c09eef2ap+5), C_(-0x1.bb6e89adbb91b4400c7c8bacc9f2p+4), C_(0x1.826bb857299c08edd527360dc4c6p+4), C_(-0x1.66d59bbc1beb521a1822adef1e5ap+4), C_(0x1.d762d94bf79addacd550a56af00dp+3), C_(-0x1.017df19c95ab47cf0b3801bfa83ep+3), C_(0x1.7ce4baf9290af712ae0b872e1a1ap+2), C_(-0x1.076985c84651e1c5e5388d3ed212p+2), C_(0x1.a91f1aca1f4d85453f0f9c33299ap+0), C_(-0x1.19588e1d9e17bce2cb6d81a29cf5p-1), C_(0x1.70b50254db487528bd3d29d3be35p-2), C_(-0x1.a1a5a33d385d5b812d62c1b7093dp-4), C_(-0x1.4244fca3bc21ee34636ecc1caae2p-4), C_(0x1.e957c08844afbfd050ce104aed32p-5), C_(-0x1.7d54f6f8e016b5cc4d2c805b197dp-6), C_(0x1.293a2e4267dc81d9d07b602eb6d4p-6), C_(-0x1.5d4d2a8021a073e46a46ee79612ap-7), C_(0x1.5b4fecdba5f9087fe95645ea7106p-9), C_(-0x1.4ed9a3f4a9afdf2f3236e61b6585p-13), C_(-0x1.125ce08dc9b661014740f9362c84p-16), C_(0x1.5ea5b19f4ff29c7baf0a16f9257p-27), C_(0x1.e1d2c8108c65a8cd4dea742f8f7p-39), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.78f50d65c4a16421841e3f303dcap-7), C_(-0x1.10f9973c2a07331ce0ccac35cccap-3), C_(0x1.5ea80ed1cf2f2dbfa0cb00aff04ep-1), C_(-0x1.04e32caec7824fdd8feada2c4721p+1), C_(0x1.ec7b02aa786ba97d52a304f12e4cp+1), C_(-0x1.3174e658f8076784a24459fccb68p+2), C_(0x1.04af0495e940fb1a0934ba937e55p+2), C_(-0x1.82d9ce4c80e7862d53bd54f737b2p+1), C_(0x1.8562e843b948818ab7543f47aa8ep+1), C_(-0x1.b4475da1bb05033056b650854fbcp+1), C_(0x1.773ee8a0b6e167fb7d5268d067eep+1), C_(-0x1.162bbf2e87d9ef969863945cc2b1p+1), C_(0x1.ed70fea486a4beb02761cf722ef7p+0), C_(-0x1.be0a12832787fdeed784930ccda8p+0), C_(0x1.43344776804460a755e69c9fe27dp+0), C_(-0x1.bc193640146ea4b82ef2e3c4b7fp-1), C_(0x1.59f9f9e4cd9a370cf83a45b3405fp-1), C_(-0x1.ea19fd7c2dc2c5db9794b9225413p-2), C_(0x1.24cb1e377b41a9dc8bcbafd5c9e4p-2), C_(-0x1.6d1685ae383191436a11192a6015p-3), C_(0x1.ce23289a0d5c025951ea09936714p-4), C_(-0x1.e968908c7474ea2a6b493052c12ep-5), C_(0x1.e76f4d23e3441d0b7efbafd90df3p-6), C_(-0x1.fe92310a812ac1b17c748db28b34p-7), C_(0x1.bcfa77e534eadd2bde270b26117bp-8), C_(-0x1.3fde2d0e55306e2cc04a5e77181ep-9), C_(0x1.f9933c512b48e3277e9a4bb4b19p-11), C_(-0x1.3cde4b0a8d6703babab6ae1d57aep-12), C_(0x1.055b9666e46160de479c93713a7fp-15), C_(0x1.0afdd4a80e426c9edced22de6763p-18), C_(-0x1.63fa7644baff156719997e19782bp-27), C_(-0x1.e7410ee7b8c80f0f9fbb1245ff4ep-38), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.7a4ce6ed992bb75d1922e250e291p-16), C_(0x1.42671fb0211a4a998d3a999cbba9p-7), C_(0x1.e6ee175fb834c8b714c01feffa11p-3), C_(0x1.b4d3dfe055a7b7209d9d957ea39fp-1), C_(-0x1.7d14720c62ef81c88eaa2934ef9ap-6), C_(-0x1.5a94efaefa077beed21f8e31afdfp-3), C_(0x1.42098eebb591e34e8dce26f5d9fdp-3), C_(-0x1.9b7dc4f9c2feaee194cc6094b673p-4), C_(0x1.80316f876ff22302ae3ab2cc5942p-5), C_(-0x1.8b13757e5a833cb7be38d086bf07p-7), C_(-0x1.9d8e278701564e508cebafcfb133p-9), C_(0x1.712f899035a27c983c908b6bba6cp-8), C_(-0x1.bedf3b9dd86feef8439cad4de336p-9), C_(0x1.4240f2118e493251bd8d9317b7d6p-10), C_(-0x1.0ae82fa70b020b05eaa57d2e86fcp-12), C_(0x1.5d87bb3a4b0411a199a2bbfb04acp-16), C_(-0x1.2d8c3a0a0933f834dfa752e731e6p-19), C_(0x1.e1643353d40db172275bb94c8db6p-19), C_(-0x1.66348482b32035f68245e91af884p-20), C_(0x1.38acac17e89fa0162b376bbd5bb2p-24), C_(0x1.00e7697e09dd627363f277ae5d0cp-24), C_(-0x1.a8f56e9d3a1cc00e461420464983p-27), C_(0x1.5a1ead033f0e454a9963da3438ap-33), C_(0x1.d4875150adea6366dba9b099b588p-34), C_(-0x1.cfdee2a4d421dce1ed3eb1824eb8p-39), C_(0x1.4ba806282cb55638c336fa42513ap-41), C_(-0x1.af632a71f0a85982bb61e8403dafp-51), C_(-0x1.cbdd4d28c6b8d8568783fc7a0356p-51), C_(0x1.4fd0be68bf175912b8e24547698ep-58), C_(0x1.61ffe57672ff2f1dc3af03a0658ep-65), C_(-0x1.3c884f70db98bc38107c463d9e95p-75), C_(-0x1.1f64d25df3ed3d5bb564497f042ep-86), C_(0x1.2bba4936fe9662bf3eb13c8582ep-103), C_(-0x1.1d5cf90ee87504b468831a41ae1ep-131), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a0c37edf06a8f94f636662aa39bbp-13), C_(0x1.5938ebddd04e210d6e15ff1b97b9p-5), C_(0x1.0ce81716630c1f9cc4b07a770d1bp-1), C_(0x1.bad54d5c0a788c931739cae743bdp-3), C_(-0x1.734c9748f4ffbe66b4e75bb9c043p+0), C_(0x1.219848201b9a0b52ec9b8191e5b3p+0), C_(-0x1.967b651c15d3ab20c349ccf7a27fp-1), C_(0x1.1dd39ecf7d040d13482ae3416703p-1), C_(-0x1.7d233595983848fd2834ed2571cap-2), C_(0x1.bdf22d0e95afab2bb96e5bd19c6ep-3), C_(-0x1.ab4ab3ea2f36e1559b9c3420ec0fp-4), C_(0x1.361512fce1c67582139ca256de4fp-5), C_(-0x1.2052c9fd431d75170cd08f266eddp-7), C_(0x1.0fc840c4a9b1a2b7d29c508eb6d3p-12), C_(0x1.b1c90fbb8951feffd58470c9d80ep-11), C_(-0x1.c8b87ff5be380a38841f22318f52p-12), C_(0x1.11b72f5c2ab5d1894363c9e7ab05p-13), C_(-0x1.44fd9e718f23deb8dfb254ca9d3p-16), C_(-0x1.801763632cca8db4265fd9b7171p-19), C_(0x1.09096d92c04b504ace3e77b64297p-19), C_(-0x1.d590c9308d6d05c5021dabbaa32ep-23), C_(-0x1.b408b4e946eb9006560416ae94d7p-25), C_(0x1.26b8d9536f33f7963391a473b488p-27), C_(0x1.21ba41de7becb667214c3ca5d913p-30), C_(-0x1.005e15e86c4a56785a4a0f6ab3f1p-33), C_(-0x1.892c108c5e8de79fc1617882908ap-39), C_(0x1.5e2035f63580023798eda85d3d21p-42), C_(-0x1.d491970f7aaa6c617e7d1c311941p-48), C_(0x1.4a6b89912129028f7fea4136c808p-54), C_(0x1.1d009ad5392248132b10cca6afdep-61), C_(-0x1.a642a25e87ebcab18086a8e2fc06p-69), C_(-0x1.2011c2ce8690d9b9656d986e92cap-81), C_(0x1.9134326520639372add0f822994cp-96), C_(-0x1.7df9e44e24a4ebd5669f58093dafp-123), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.971a55e8255470a8e87397205afep-10), C_(0x1.3dc2c8dbfcf7f93df2e2e770167bp-3), C_(0x1.7546e57d9721df0ee0f4226116f4p-1), C_(-0x1.037adcec0657ef37e8f5501826c9p+1), C_(0x1.f0f2562cfec47ba3b00526650a7ep-1), C_(0x1.6c9838c4962e4af4c25ecbc468b7p-1), C_(-0x1.ebd5569ff73f2f877d55e4233979p-1), C_(0x1.2915d00cfaaa51da1d3b22bc1b91p-1), C_(-0x1.e34c46891f72dbbcd8a73f99bdap-4), C_(-0x1.5072010dc85e733fe3c06054204ap-3), C_(0x1.c67306010de8b6a212c8a67869b3p-3), C_(-0x1.2fa98054a2107feaebe98c8fc435p-3), C_(0x1.df7d703c2f7ab707c9106e495b0fp-5), C_(-0x1.28e5dcad2172c449a1b7dca486f3p-7), C_(-0x1.dc7a4c4cd9eeea5517aa806e57aap-9), C_(0x1.18e996b43138b67ddc3e006638c8p-9), C_(0x1.b32438920580e922f03409f3eb6p-18), C_(-0x1.9037acbcd4ec345580dcc6ddb006p-12), C_(0x1.44eb457dfe491144a6a8147f8c33p-13), C_(-0x1.4321ac67acfe448897274bc08792p-16), C_(-0x1.256fe0790910edb7d614dee4ba24p-18), C_(0x1.ed8efd908e26dfcaf46a03ca2c55p-20), C_(-0x1.a7d2bd14ff6144489ccdef55f7a8p-23), C_(-0x1.037133591bd1adccd684e0184c22p-27), C_(0x1.ab74edd3244b37270e37d649fe31p-29), C_(-0x1.fc9e38e19ebe258bd42cc39b8e13p-33), C_(-0x1.8084026dbca3fcd810e0eb658b42p-38), C_(0x1.368fe30917847fa68db0002b6cdap-41), C_(-0x1.39e30293b3af2c4949eb4a178d03p-51), C_(-0x1.7503d7779e458b1aa1fdddbe3326p-54), C_(0x1.9a1da2379c2a990ef23e5cbc6726p-63), C_(-0x1.f1aa7d24b3e7cf365e425fbf9856p-78), C_(-0x1.86a335fc44a9a2d537ec8158da4p-89), C_(0x1.73ea8d0ad818e245ff5b1e9884a2p-115), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.5a9454bfce16a0a0dcc504f76122p-7), C_(0x1.dac670f07b3810cfe0200e30b836p-2), C_(-0x1.07048222529da273b75a32ca582bp-2), C_(-0x1.b83c3b0926524121fff53826cc44p+1), C_(0x1.0676df488b1e4ed89c22050c7595p+3), C_(-0x1.30179a3f4da7316ca0c075836a81p+3), C_(0x1.05ba4eee5e31141776d12d72864ep+3), C_(-0x1.93e9c8737c9db916fd3aeb9dbbf9p+2), C_(0x1.11f35b97811e1392b7e5f33b18aep+2), C_(-0x1.34f47b568e89b7ecbfe83a3f3f92p+1), C_(0x1.13cb0f11e8118c8728dc07b4f30bp+0), C_(-0x1.7b2819c00008e638df3a1f667154p-2), C_(0x1.a1284251ac1c9a380e6762cf2045p-4), C_(-0x1.9462a198000c99e2d17bdaf7509fp-6), C_(0x1.98cbd04cf38d0b88fffaebdc2248p-10), C_(0x1.790fb9b4e1079fdb7c7f3de53909p-8), C_(-0x1.44467a122c6f0b3c619500e4be8cp-8), C_(0x1.0c81b81e9a914d549de9a5603fbfp-9), C_(-0x1.cac8f340d2aa3b68b219b85c015dp-12), C_(0x1.056344fb5f7fa4c5bdacd495990dp-15), C_(0x1.64dbcddfce7247b526ac9d7e0ccfp-18), C_(-0x1.2ea8218d9b8d1d441244fcd4b66ap-19), C_(0x1.ae941e74a568c6bb01832f906cd8p-21), C_(-0x1.1e524786cf0a95db795410244806p-23), C_(-0x1.2a97ea36eab85a08d496990ea5bdp-28), C_(0x1.91a720541503c3aab6c0537ffaf4p-30), C_(0x1.61eee7e526616835f0ba9666b29dp-35), C_(-0x1.1df0b9e54c56a105bc6728365e2fp-39), C_(-0x1.1ea73fd30a1b3871739285e4eb76p-44), C_(0x1.4cef49ba65ab3a484daa2106a09ap-51), C_(-0x1.042acc29aba7ca20f707f59b4985p-59), C_(0x1.2f927288a9fec8bba637277e07b5p-69), C_(0x1.f64dd565d432a80474f09d7042aap-85), C_(-0x1.de3b2de560b19ad42b01407d7ddfp-110), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.f65b07bf823cec483c39d5a11448p-5), C_(0x1.f0133093951f37f6a896ead34da4p-1), C_(-0x1.2157210d40dee8bdad6501ac0ec8p+2), C_(0x1.a490d9720df43c568fadfc931407p+2), C_(-0x1.0a37608588b0a4119bc76eb25c95p+1), C_(-0x1.166e49a8a0cc2b9e02e97716b213p+2), C_(0x1.47f9043ce81ccaeaa7b51a7192a1p+2), C_(-0x1.51650f8f0f7bc2a8e1c87a310a8ep-2), C_(-0x1.4a651a2d2c8b208523a548f223d3p+2), C_(0x1.daa4090446b0d279d1861aa53d55p+2), C_(-0x1.69495e8e6d87591bdc3892f6f8c5p+2), C_(0x1.0277af1839af3f779c7cdb3ae641p+1), C_(0x1.6b6419616b5982af3302995b743bp-1), C_(-0x1.731cf8395e4c8d5b88b93305475p+0), C_(0x1.d1e75297f2041df9c5f5bf256a3fp-1), C_(-0x1.d49cf0590577e4f277c27934579cp-3), C_(-0x1.397f17a4194e8ce372c9e426fbfbp-4), C_(0x1.7a21cbbedfbe11f0454df42e4775p-4), C_(-0x1.2988578b3adabc4b1512d4cbb6abp-5), C_(0x1.545144ccc581a21bd7cff42729e5p-8), C_(0x1.55e4a8c66e27b9cd3f291e5b6a18p-10), C_(-0x1.82c0f91d9bec49c90d6f1f27054cp-11), C_(0x1.ed2cd19280a89d42a9f703b9d37bp-14), C_(0x1.348863e0c3862c00204ef5c290d7p-19), C_(-0x1.8699ea90dfea228ea4870e9888cp-19), C_(0x1.03f81160244ea4e0561d2796396ap-22), C_(0x1.2dc9e87ced5d3e0075d1b0f48214p-27), C_(-0x1.1e0055531ecb5b5480ebd74d3d13p-30), C_(0x1.78b61664e5a70e15a0ed3d839b88p-39), C_(0x1.5f0c636dbd6bd39cd760ce07545p-42), C_(-0x1.6221e33afdbcbb6531e539a33b88p-50), C_(0x1.408f5ecc984b11ae43df9f32fee6p-64), C_(0x1.516335d80f8b3330068bd15b7661p-74), C_(-0x1.4137e85d31ab926f05f01bb46b99p-98), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2c1ae6823399b2cb435cac91e1b4p-2), C_(0x1.0b5a4c7a50e393bc298a68b8c54ep-1), C_(-0x1.35e6d8721b448f3219c2ebf797cep+3), C_(0x1.08056d18cc3abfd158e32f385712p+5), C_(-0x1.e443d0b2f1917ce5a7864d3c4f97p+5), C_(0x1.26e95184621c1fe6c94f3f1e55c1p+6), C_(-0x1.027c3db720fc8465d08ef051f852p+6), C_(0x1.39b53e5c17e2d98c6d1b6a224a1p+5), C_(-0x1.a2ef9908e5f3063d5f6a67d79ad9p+3), C_(0x1.3c1856843b6ed43e69173ec9beb8p+2), C_(-0x1.50a61279deff7a9f95e9f5b1ffb7p+4), C_(0x1.7005437ea7f364b02fc7783b2745p+5), C_(-0x1.c35972d3e17999223e53468e37e1p+5), C_(0x1.5e3ef093f504f098160dfa010bc8p+5), C_(-0x1.3ec57fe40125d739e37516f7731fp+4), C_(0x1.8f87e8ce4ea1f97c1a2b6959d92ap+0), C_(0x1.3ebb2932b57e51e04c3ab524c19ep+2), C_(-0x1.f8f19a2160e20da38a2d0ba656dp+1), C_(0x1.767cc5a51bc973a84dbcca58047p+0), C_(-0x1.713b4eb249abff794f2872f24925p-3), C_(-0x1.57f96e30ddfd9bc4477fb05a13ecp-4), C_(0x1.6d3c7dfd75dd9d13bacd85402f0bp-5), C_(-0x1.f364307632fcaaf5a516d1734575p-8), C_(-0x1.a69b8516a1ae027062e6cc44b942p-13), C_(0x1.037145bb4087ace803c84d0a5bfcp-12), C_(-0x1.900324bb445222e2af610e0c858ap-16), C_(-0x1.c39b875e9ce90c4599df73f3cdd4p-21), C_(0x1.257ca20db0247e060d265d852efcp-23), C_(-0x1.94fc591b19bf8737ee11ebdb8608p-31), C_(-0x1.f784210bc45a0c13791f8d01e395p-35), C_(0x1.45da31c732197dc55fbe5cc58e5bp-42), C_(0x1.7b22a9fcf8e8894af17ff0c96d4ap-59), C_(-0x1.36334f22553eac1c5efc112842bap-65), C_(0x1.27559bf46283fc4563833952d7p-88), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.1b6522cefc386094703a1b940b9dp+0), C_(-0x1.725aa82bb56b65b988671eeb4df9p+2), C_(0x1.352392d274a5a82ecc23fa33228p+3), C_(0x1.0932fb369d6b1d42ff49967acb97p-1), C_(-0x1.879358a7154c8fe38abb0596bfcdp+3), C_(-0x1.7bc58b3667a9b25269bdd7a77a0cp+5), C_(0x1.0b13ecb8bf57a95468d44bdf0495p+8), C_(-0x1.43c9c4bcfe445dc8af77035b453p+9), C_(0x1.09ee5b9c8e5bb60028ced9f338a6p+10), C_(-0x1.51e18f7652afc8e422b14381c4bfp+10), C_(0x1.644767119a752b7a9c6636fe4ba3p+10), C_(-0x1.410473daba291fd610d9e089e60fp+10), C_(0x1.da130c42857b78f659a1d6303558p+9), C_(-0x1.d701d7e9133134b0f0d4fc7eec0bp+8), C_(0x1.63319398a8ba44714204cc51ebfap+1), C_(0x1.103c991a3daa09809634b6cd54c5p+8), C_(-0x1.27d3d6e7fd9bf2dd1ee7850f5b25p+8), C_(0x1.603f483ab97e5aeba0d81de20a75p+7), C_(-0x1.d0777f2eb89143bc896dcbff61bbp+5), C_(0x1.7a787d5d8610ba8dcf36333d8bcdp+1), C_(0x1.ac67a9959292f75e5874c7846e26p+2), C_(-0x1.90d4180a252c7e521492da4437e6p+1), C_(0x1.1a35f9399ae687cbbdc99928434bp-1), C_(0x1.6227b50ba315edc16940995bb21fp-6), C_(-0x1.88f3b956f9d0dbc770c981dd72f9p-6), C_(0x1.6aef03d1b7b80f64bb2a7833284p-9), C_(0x1.578d75e3a79566687a46c7635dbbp-14), C_(-0x1.6111d8865be635c9573ceef437cap-16), C_(0x1.98ae70f64468f801509511411944p-23), C_(0x1.ab515975e313ab940af4e8bf9f79p-27), C_(-0x1.5c32c92bf479e396733399534bacp-34), C_(-0x1.1971da66bec91c38c535f903a2a2p-47), C_(0x1.4b1b6c4a0c92ce2876a63b480607p-56), C_(-0x1.3b3d574a043e2a3cf8b53ffa3decp-78), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a2b24d1ab719647b6a1c2ecf4af6p+1), C_(-0x1.c90129239b0561ac21474fdc1f01p+4), C_(0x1.cf2e00eaf4f0becc29975ebbb3d9p+6), C_(-0x1.2500bd3d88164480cc94fa086f38p+8), C_(0x1.077598d26b6930fe825f3677222p+9), C_(-0x1.6c0faa52dddafef24a3684f97c95p+9), C_(0x1.958eaac6820db16ee26374b84f58p+9), C_(-0x1.6c2fe2006b51236b8cd28d2a3376p+9), C_(0x1.b8f7517f01d05ad3f5b4ba6c9b6ap+8), C_(0x1.7e41eac4aec61876fb9933392dbp+6), C_(-0x1.a414506f1749a1c58305f0247915p+9), C_(0x1.8a42dc8d7e0c984036d44acf6da6p+10), C_(-0x1.fc70c5eb750631dda8bffa5c2966p+10), C_(0x1.078cc6f7751312b231c8496978c6p+11), C_(-0x1.d83a569460166e52313ff6ef2cdap+10), C_(0x1.72db6cb15cd72ceb44fc1391ca0ap+10), C_(-0x1.e3a6df319fa13f73a1becc99c1bp+9), C_(0x1.cf3b0d7df18f715bb39783adf96p+8), C_(-0x1.d51428e901c215eaaca0f201c961p+6), C_(-0x1.8c56c880ec38034e39c62c6aaf1ep+4), C_(0x1.2c380f5e865da81b223aaf9ba893p+5), C_(-0x1.fc04081d34cedd56a87f6a93c47p+3), C_(0x1.67cfd3a1ef5c6955d5156ad19fdfp+1), C_(0x1.9005cc81fa0dd8ddcb0ef2e368cap-3), C_(-0x1.6895dc001e228c4142a65a949d43p-3), C_(0x1.82652a80425786d395286ed1c874p-6), C_(0x1.2598eb52540c582b66a388a574c1p-11), C_(-0x1.f931a276c55e6702f13f4d2ec79cp-13), C_(0x1.dc668b4d899394715f65f547aa0ap-19), C_(0x1.b4c7dcafec63006d515f9533babdp-23), C_(-0x1.cb6cdde84a22b96a4fc307092c49p-30), C_(-0x1.f612f7790e7dfcfca6facf9edd4ep-42), C_(0x1.b3f84ae9c3a1d3983026d3d5d97bp-51), C_(-0x1.9f1407c19decc2d85cd5ba63de83p-72), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.bc1bbb932352fd4db217186d8038p+2), C_(-0x1.230220e94a6286e3ccf38d4bfcecp+6), C_(0x1.65729881a37a4e3a6ec39c0b03abp+8), C_(-0x1.146d11d32151befbe03f1861632dp+10), C_(0x1.34072da363b055ea4712dedb9e79p+11), C_(-0x1.0fba655ec8815d599296c7fe289ep+12), C_(0x1.9a1825ab277513bb221db58c408ep+12), C_(-0x1.16b4a3d0368f557cee02ea790ba7p+13), C_(0x1.59fb20e260f209444967e6c1a575p+13), C_(-0x1.8532af6245b8a37a5135bb9a8819p+13), C_(0x1.8c055ef648911dec2e20ac309451p+13), C_(-0x1.70169a3124976f7442e92622f30cp+13), C_(0x1.392792bc1a4318354c951213b5c5p+13), C_(-0x1.de2062219056d64d01622237bf5fp+12), C_(0x1.3e37823e9c9169638076f5c7aaebp+12), C_(-0x1.691be2f943c22d4422f81e97a65cp+11), C_(0x1.4b463c6bd400a0ecfedd95ba90c8p+10), C_(-0x1.5fc2af1919c21f21f19a7f30b116p+8), C_(-0x1.286e81ad3c5d4bb15d987b1d1575p+7), C_(0x1.11137fdb9735b4b7b7c77d4bdac5p+8), C_(-0x1.749f8e79c1414c37972b9280e062p+7), C_(0x1.1b06a540d8bf3d4241ae8a187538p+6), C_(-0x1.7a50c04170b90bf05ecb290f9376p+3), C_(-0x1.b0c80bbf87c7b0afb3614e48c05fp+0), C_(0x1.32db8166dd6bf259ffbc02129a89p+0), C_(-0x1.78bbab19bbfce1e222ea4ae4ebc1p-3), C_(-0x1.6be3931ec3a0a0f934055bd32184p-9), C_(0x1.4cb7ceaf89c2bc6ca23b4de198adp-9), C_(-0x1.ec1ff5f12b99a0b5484713b8896bp-15), C_(-0x1.a28eed0313308b4187f5c957721p-19), C_(0x1.1e4d1afc4f213777086c26ac990fp-25), C_(0x1.2e933ece77f3d4f12785b9380e9bp-36), C_(-0x1.0ed8efcca12869c8a8420946c2ebp-45), C_(0x1.01deae8b7334485f38756e42ddc9p-65), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.7d01eebdfe55fe3c6ed21587d92p+3), C_(-0x1.0e862c8ffe7ff18db1f4d0d89561p+7), C_(0x1.6068e5f78cc3a3034b49cf000d6fp+9), C_(-0x1.16e27e80bfe67c3ab640b5e1ecffp+11), C_(0x1.2cfcdcdcf07c3d87dcfc36a512dcp+12), C_(-0x1.de03a2d7212d303b5f3943016437p+12), C_(0x1.2ec8864cafb19603887a2d7c4703p+13), C_(-0x1.500683f99e667a964beb950c1258p+13), C_(0x1.545745c7955e4cdf07cc034c2854p+13), C_(-0x1.1c5400071f26b6f894c12a7b3f37p+13), C_(0x1.16dc653d8bc1d4bb36f214e1e20ep+12), C_(0x1.b4ea0cf6f0a6b2f781cf9163eadfp+10), C_(-0x1.c11dd36c4cf2a48e63345a744925p+12), C_(0x1.5827531f986387c8025c0b0f20cep+13), C_(-0x1.a3de245f7e97f4c57daf304b115p+13), C_(0x1.b4f7e9a0a0606952656f83a68277p+13), C_(-0x1.7f2cf0b4269dd38dde070b5f0cdep+13), C_(0x1.2042e1dec45f6d9e8ecdde4d30dp+13), C_(-0x1.84b7d120c9be3df99a52bbd8cee1p+12), C_(0x1.d5a3bb45a7db2c787108d4dd50f2p+11), C_(-0x1.d06f9035faa5ec088975f115cd7bp+10), C_(0x1.3bba5a0006ab829f47d96569222bp+9), C_(-0x1.633fc40d33ceb334ddc3416213edp+6), C_(-0x1.ea064cf26a80ac52af3e7edffe55p+4), C_(0x1.228bc38d7faa44c44536bc6e393bp+4), C_(-0x1.94763b8fc894319c6a4baa13397fp+1), C_(-0x1.d3df039dfc19a1e9d51d6ee6175fp-6), C_(0x1.e63bf96d77b58d48a45fb3200bfap-5), C_(-0x1.0df6f4a0b44ee3edfa91f00b193cp-9), C_(-0x1.be80af96687fddc94510e8ade719p-14), C_(0x1.a12b7b548061ec0aec1afee7ffb3p-20), C_(0x1.557c0a8693ccc679320f886d948dp-30), C_(-0x1.894221980c4b8d10bc7e6d5fc51ap-39), C_(0x1.766b6e3ec237c8c757492e2c2a6dp-58), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a6f23ff482d2a8534d18ee2bd813p+3), C_(-0x1.37e1afb1392b3f40934da3d558f9p+7), C_(0x1.a686ad1a0ba3db778ce2719b5c95p+9), C_(-0x1.5df1b3980b353a49181f807fa276p+11), C_(0x1.912604b6b386163aa8a2a506984fp+12), C_(-0x1.5b61ddc6ff3217136a743b9c2999p+13), C_(0x1.f0e6d62d6c3adad4499f950bdba8p+13), C_(-0x1.40b6eb16bb3fcf7bbb403448e39fp+14), C_(0x1.87585fcb881fe424c96217849318p+14), C_(-0x1.be1e3f54a4c6e6b54ffcceb8221cp+14), C_(0x1.d1d8cfaa9552876a45180bcc50b2p+14), C_(-0x1.c1cad55e0d499c75b90a8681896dp+14), C_(0x1.98c3ae43fe1125e958f8e677c61fp+14), C_(-0x1.5c4d34f8b772415210663ccb0834p+14), C_(0x1.12a3aa37e5fd016d4163c33ef0a7p+14), C_(-0x1.9192f9cf12c8db367f3be99603f7p+13), C_(0x1.1122d052f1ea79533169d18075p+13), C_(-0x1.52bae1043f73d75aa63286049566p+12), C_(0x1.74a03155cefa742f49e86547448dp+11), C_(-0x1.690be5335ae783047d5d4ded6084p+10), C_(0x1.2aa92592f4ea4eab6ee72559722bp+9), C_(-0x1.54e703590f43bf9834fd6d7c3fcp+7), C_(-0x1.eedaac4f8962ad088ff79f7ab717p-1), C_(0x1.de050411f7cd568eda13f525f9dap+4), C_(-0x1.c148def3b49e232ee4958ee9fafep+3), C_(0x1.48e1be6a547f7c0d38d3ce51af9ep+1), C_(0x1.ccb6f2024dedfd3e23939d6e234ep-6), C_(-0x1.0b11a0ddf9bc2847e1d232a914d5p-4), C_(0x1.f0397fd92ef550872efcf8d934adp-9), C_(0x1.723cd3b01432ce7970852fde484dp-13), C_(-0x1.ed12536f5e4f2788058dfbdeb7b6p-19), C_(-0x1.6aaf317d39b56dc9439410fb90dbp-28), C_(0x1.cd1c2594785771509fd29eba3b57p-37), C_(-0x1.b707d969a42cbded13543076b42ap-55), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.9908fd0ce831f3487747d933d748p+3), C_(-0x1.3339176496abd2cc6f353a6e44a9p+7), C_(0x1.a399ad0400dbc9e71dafc101d1e1p+9), C_(-0x1.58f242d223982437163d99490d3fp+11), C_(0x1.7f8e29aa27ab125f24d2fcb7cf63p+12), C_(-0x1.38a61979e2b2ffe2ae4d4e65fc71p+13), C_(0x1.9add7b4a18f5c8300bd029e80d54p+13), C_(-0x1.ebee387c8e0aff52186a751f53cp+13), C_(0x1.219cbd1b2da3c7319d2594cddc32p+14), C_(-0x1.42ee71a32a848700929a8801a23fp+14), C_(0x1.4162f4284633fd1e7fba1bb3800ep+14), C_(-0x1.21467722a3c16c9f70c4e0f39397p+14), C_(0x1.f02472a8506fd3b8d32f77a4b8f9p+13), C_(-0x1.93ab7dcd5a6c14300ddac86b8dd8p+13), C_(0x1.26e6ca1326b3694ec43b05b1dfbbp+13), C_(-0x1.7e6f2ae54bf7f66077fef1175708p+12), C_(0x1.ca344102205561eaf28babf9b0b3p+11), C_(-0x1.ec7742f47fb3351081ba5a5968b7p+10), C_(0x1.8bd38bdf87a320af9a5418399e9fp+9), C_(-0x1.1acd500cc5943718da806ac7add3p+7), C_(-0x1.4d85442446456020706cd509b723p+6), C_(0x1.ed6ad17e0f78e02531c1a4770ad4p+6), C_(-0x1.b2f4089457d680f06bec3c3dd972p+6), C_(0x1.0c247d783695e3ffa9b901ecf60ap+6), C_(-0x1.9870dc8b45a9f4e303e8e8311b4ap+4), C_(0x1.3338d9a06d3fea3c6e122fc7de4bp+2), C_(0x1.0f6ca08ad5fae6b6177d3fc4323bp-5), C_(-0x1.4c4e08354cb7e3eae0ddb198440bp-3), C_(0x1.02d3a75dac8a719338fdc8517e15p-6), C_(0x1.7509581763d127e7d21fa4b754b1p-11), C_(-0x1.54ad634865cc13ff2aa8e2b2e8acp-16), C_(-0x1.7ef1d65121e030d70caf398558e9p-25), C_(0x1.3b877c4e5003312e2d376dc10e97p-33), C_(-0x1.2c6f23660e48f98694d796524bep-50), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.e6c2b226df78c279af13845051c3p+2), C_(-0x1.70ef0a94afa59b1a6aa8d2343645p+6), C_(0x1.fe115e7fdadc37c38b9e6da89457p+8), C_(-0x1.ab2ae85d8df6a5fa4cff025ed87bp+10), C_(0x1.e9076c74293a400016225b9ca839p+11), C_(-0x1.9fe839f33e758faf5bf246ffdc45p+12), C_(0x1.1ec83a83d597d7f150637077f9b7p+13), C_(-0x1.61f4e1f4fcae3d0d387b625dac79p+13), C_(0x1.a34037eb93edf57ca17d98f692cbp+13), C_(-0x1.df1d808eb7eddd0fc723f047f0e5p+13), C_(0x1.03261bb811b49bff52d5b3bd37b4p+14), C_(-0x1.08bec2cb9bb5325c84c6514f4d44p+14), C_(0x1.000c9dcb7996cb96b43e3d1c9772p+14), C_(-0x1.d42c4b6e482399636855cedb1712p+13), C_(0x1.9723de14cea5319a6860bbd3c799p+13), C_(-0x1.524bda96018d06eb97a9a94efd6ep+13), C_(0x1.08b8d63f8a5e0d7a39871bf89f73p+13), C_(-0x1.81d1060b61d0d3635b17f5b8f829p+12), C_(0x1.09630f3565a574b943c123a6bfa7p+12), C_(-0x1.59ea297354d075bf6b0a4b01f032p+11), C_(0x1.9c7ad6ace2b3cf85fb948aa7bdadp+10), C_(-0x1.b6b7705751739945f7c51d7dcccap+9), C_(0x1.aa6416006d3250b9dcdb9d2790c7p+8), C_(-0x1.7918296878e4f9853df6b6e8ae14p+7), C_(0x1.07145b6ad1daf57366d1625ece2dp+6), C_(-0x1.a108d75d6bbaf0652587e828bd3cp+3), C_(-0x1.33d485acc9655e7d88b74e802f9ap-2), C_(0x1.6d6fa9e91b92d2703b87421f247fp-1), C_(-0x1.78a5b635c316b5bfc318d4eea976p-4), C_(-0x1.16db8d9d41de38829032ed627d9fp-8), C_(0x1.9ed47b91da7177bda1e64cfb1175p-13), C_(0x1.dd448a5da4eed2af5748439dae43p-22), C_(-0x1.7fd3f33da284c2945eb532e858d6p-29), C_(0x1.6d7f73f5c3ea6d60bfb8d1a80ec8p-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.34875227fc78d9ef7ed7ac6e0f82p+2), C_(-0x1.d5cd5efb52a9ef14597d82d198bcp+5), C_(0x1.425dfad9b492e41845300927f3b1p+8), C_(-0x1.06c373fbafad1222f880762e04cp+10), C_(0x1.1b9bff7a51e187819c73161a78e1p+11), C_(-0x1.b244eac1fdcf0d5091a23ea449c8p+11), C_(0x1.01eb21ca101f022e5418621b2a9ep+12), C_(-0x1.166548c799cafbaa88fc763d8453p+12), C_(0x1.3b0ce98f7e34e32ea84135429657p+12), C_(-0x1.6362301a242eb8214208b870faaep+12), C_(0x1.65cf7c0d7f65c5008737a94a5fecp+12), C_(-0x1.4657f8cbcbde3d6a4e18c8e9c05ep+12), C_(0x1.24d7d2cdfa25a491f828221544bcp+12), C_(-0x1.010708097c75d2ac6e322278d08bp+12), C_(0x1.9d020a4459bdeb50b979470ee77dp+11), C_(-0x1.328cca6ef194279a5bb009ec9338p+11), C_(0x1.bc083519c657836208142c7eb836p+10), C_(-0x1.32ef111f54699b431e478036157dp+10), C_(0x1.7f8dca23d339c29569ea2ec801c2p+9), C_(-0x1.bc6a63cb2fc0846b3e6af0f884aep+8), C_(0x1.f09b702a78c4dd679fe395dd6a7dp+7), C_(-0x1.f532dbb546bbac5b183e2380610fp+6), C_(0x1.ab4ca1b61588ca9a0a6f9d915ea4p+5), C_(-0x1.463ffdaa1065322e64ac74f7fa8bp+4), C_(0x1.ba4ea70cee33c38b2b0e8b20a1aap+2), C_(-0x1.3f8f23678b563eb9630f6042805dp+0), C_(-0x1.2f5a76f330866b9d02c88ed42bb5p-2), C_(0x1.a0cbd7080604e3774928fed42dbdp-3), C_(-0x1.d523cae4ae400c2fe3e190e83e84p-6), C_(-0x1.01b8eb0a5cba7579162a23c9063cp-10), C_(0x1.02b9e23339b17453717d89dae4c9p-13), C_(0x1.5122002fcd3e4c50886af50f4453p-22), C_(-0x1.dca9566b2b5e33d63760b950eda2p-29), C_(0x1.c5fa90ac19cdbed6fcc50c677b98p-44), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.095a4630f25b345edb3a033429c7p+1), C_(-0x1.94f72d60a79651db24efb743df14p+4), C_(0x1.14fec0291d4b12e7113f25067be9p+7), C_(-0x1.bdfa0b6be593ce00570a7078fca5p+8), C_(0x1.d39577b7cad7e7c4fd5dbf90540fp+9), C_(-0x1.5193ad0b12f066b4cb0fcaacb204p+10), C_(0x1.6a2e0f056a38f1473da552dd4715p+10), C_(-0x1.5d0e503eeaf62b38a4d6937112eep+10), C_(0x1.7e6b7f3178684900694f3b8c2fp+10), C_(-0x1.b6360679ec82c511bf5718cad79ep+10), C_(0x1.ac545c0c739641a55bb4e4c80843p+10), C_(-0x1.6be3874eef6d1f1a32235a12525ap+10), C_(0x1.3c4c888cb63122525397dd653d36p+10), C_(-0x1.1879194795ebee18032f4a91a091p+10), C_(0x1.b5e083426b3c7c6a910b26a6198p+9), C_(-0x1.2f24fbf8b03f0944b0e6672a17c2p+9), C_(0x1.aab5115e884dc181977e8353a09cp+8), C_(-0x1.2726385d133e4a16d05b604abddfp+8), C_(0x1.59979df7b75e1cc96562d4bd910ep+7), C_(-0x1.65732078d27eb27f5ae5d7879665p+6), C_(0x1.7f6def467b5364cd233fba2c5a55p+5), C_(-0x1.704ee2b3997739837bc58d39a41p+4), C_(0x1.cc5ee35ab0ad93a46168320cb92ep+2), C_(-0x1.50976171160a6dd2e2a17268b2e6p+0), C_(0x1.f9c57fa6a287f2b26fe11e313d13p-4), C_(0x1.64b2a171f9a1261fcd30fc5b5dfep-2), C_(-0x1.998a031a0009070455c3c0080416p-2), C_(0x1.57c1f71aec6cd09bc7ae16b02e75p-3), C_(-0x1.b25ef4a8ceef29ad7df2d5db7234p-6), C_(-0x1.808f4aaa023730c43464ce0d9251p-14), C_(0x1.d605bd7dd6adec51bc920eb90a32p-13), C_(0x1.cf1c89541af51d642527681f35ep-21), C_(-0x1.a94329286bdc4b6164f134153d1ap-27), C_(0x1.952b6e764f688e496b665b4266b4p-41), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(-0x1.42660039f1e4ab1b56c2e8881a0bp-6), C_(0x1.ec93c1aa5b61c9b6d5696151fd09p-3), C_(-0x1.97ce26c5b170acf42f1f93361a05p-2), C_(-0x1.c01099aa543ca8b825e143b557bap+2), C_(0x1.a4014de9af920ed4c9ee54928ddep+5), C_(-0x1.6ded0cd4cc8b853b87bfbfacc025p+7), C_(0x1.8330f0dbb0c28dbf63333311ac1cp+8), C_(-0x1.0c893c9ed1485a74e7f7800e12b6p+9), C_(0x1.052ccc4345d2df5a1dbe6873e028p+9), C_(-0x1.c1974852375e5b099cd67d213452p+8), C_(0x1.fad23c454fb6519a66669891ce2dp+8), C_(-0x1.3ffe274228465c9afdc401f4f0f8p+9), C_(0x1.4635deb84c3cfd97dc985dd6672ep+9), C_(-0x1.19ba20aba1a1dc6b33ade2534e4dp+9), C_(0x1.065bcb209e9694669a116f8f1c4fp+9), C_(-0x1.015ece212696c91b2da16a54aabdp+9), C_(0x1.b4c17c7bd409b3d1eb496cf9d8c2p+8), C_(-0x1.48c8d9ca7f31bb244453a83bed84p+8), C_(0x1.008b40131779b22fe5ee591e5e55p+8), C_(-0x1.8c6185bde00310328e2d72cc1f71p+7), C_(0x1.08d51505255015c001174081c04ap+7), C_(-0x1.42df3db9c4b2e8aa91c152e2460ep+6), C_(0x1.93d8682a099131f2e30d1893505ep+5), C_(-0x1.d72aacc75787dddd2538f4cd11fbp+4), C_(0x1.c56cd8c23773878de5456aa0988fp+3), C_(-0x1.8c843e6f10e078b693975b9ceec3p+2), C_(0x1.620f8bdb46e5d416d1abe187fae9p+1), C_(-0x1.ff5dc9ffbca3cebcb086bd21ec14p-1), C_(0x1.8dbab0e6a8c888a4a8c14551861fp-3), C_(-0x1.14fd9c124f34ee1806a1877b89eep-8), C_(-0x1.8d698e7a70351fb6b69fe98cc8ecp-9), C_(-0x1.922f4b831ef6074ab73b0f88d222p-17), C_(0x1.661caab697dee3a1ab3a4d24609cp-22), C_(-0x1.556f58a6ea91cacbb7f565948433p-35), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.a102d4874492bf0c3f8abe5216a6p-4), C_(-0x1.3ebe78df84aaa4d0f4b794efc132p+0), C_(0x1.b2f7cb5502cda6c9d230fef5216p+2), C_(-0x1.5ac9e38bb117840228ea5f0969e6p+4), C_(0x1.63176aeb8932d6ab994905b6314fp+5), C_(-0x1.e61b7010df60cf6c4ad892eedae1p+5), C_(0x1.d104bdea5563bcce7c191c344f3p+5), C_(-0x1.7544f2a572dd637b67c83e625741p+5), C_(0x1.737d5aa77938e2318fbe4c3f84c8p+5), C_(-0x1.b1c6edf1bb3236287638385af6a1p+5), C_(0x1.9f0c5397c3faff6479945ec39ad4p+5), C_(-0x1.47ca4941183ccf73d74cc2ab091p+5), C_(0x1.1a93e6543e9f9a411108443c7824p+5), C_(-0x1.0927206f45006f2abe266610514dp+5), C_(0x1.a5f0e2f2d0b54c0cfa24d939192fp+4), C_(-0x1.2685107a4162e669c1fad19a69ebp+4), C_(0x1.bed6d3109a358fcb040f5e21b4d9p+3), C_(-0x1.52c12c07acc0e1d274e7d45ba9eap+3), C_(0x1.af31110ee1468e10bf21a15fab4p+2), C_(-0x1.02817ffcabad7fa52399e99ae606p+2), C_(0x1.4e0f916d4e048c57bf43251d9d88p+1), C_(-0x1.864c4e83e1764ac0ffdca7b484d8p+0), C_(0x1.7f1784ea638898f647b4e2787299p-1), C_(-0x1.8002ee89d7986397c24beb3e4ecfp-2), C_(0x1.7fc7499a09e8924504cfc808759p-3), C_(-0x1.2bfa08732bf79ef113f03ba38535p-4), C_(0x1.957da4e89baa41a793f6e28cc5c7p-6), C_(-0x1.2aec3447b7aecf379d17702dfbdp-7), C_(0x1.266385cc4f62510ab31310cb9e9ep-9), C_(-0x1.c0dfb99a8ea4dbba7703d245fd43p-16), C_(-0x1.1928369b116813aa42a010ac694dp-14), C_(0x1.2017f1a37d1405b50e30d1eabd65p-23), C_(0x1.0f4800b7b0a184fe6ec7608004b6p-26), C_(-0x1.03044a0f4ec3952e4f859c26c44fp-38), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.302549bcac16a07480ffb58950a4p-7), C_(-0x1.d1147836a22995451a237d2c571ep-4), C_(0x1.3c7951e94efea5a01e74ac179967p-1), C_(-0x1.f485b5137068e2de7e3ecadb998fp+0), C_(0x1.f6c9c4f20d2e109d726d9bfa2ad3p+1), C_(-0x1.498acbc4ea72d090f910303e1e3ap+2), C_(0x1.1d9755d014c869b79bc13e22f12fp+2), C_(-0x1.81525835d067c01df39c6d7268f2p+1), C_(0x1.6d720e347fb567a21392b49f69f3p+1), C_(-0x1.cedd19de5af2aa41ce8142ac49bdp+1), C_(0x1.b162c910bfde4ce0f673ec48bfa7p+1), C_(-0x1.2aa74c52348af8100314f0e62e0cp+1), C_(0x1.eda3d295893e868bfb35ec305bap+0), C_(-0x1.f7973b0f803ffd6ba7bc4f61d739p+0), C_(0x1.87d55f9f1654529cea30f503f524p+0), C_(-0x1.e3314a61cec2d1ec8852d0dbcec9p-1), C_(0x1.712067be057e009feff90d8198e8p-1), C_(-0x1.2d407bbb0b0ac1aee45b8cabc16p-1), C_(0x1.675f9e5eb7de518e9bb7430a57b9p-2), C_(-0x1.80b747814ba27c7cd05f743f5455p-3), C_(0x1.0a57b0f3cb83001cac6acade9288p-3), C_(-0x1.43510035a93ea4e9f4f0330f9b63p-4), C_(0x1.135c54f340512b998224396e7637p-5), C_(-0x1.042576d3101c9bfa2c3ee11498b6p-6), C_(0x1.28e7b29b5a905feb407256a997a8p-7), C_(-0x1.b45ff7bd1d15c0d666ce33e8722ep-9), C_(0x1.b09f4241d30f170ec83bd736891ep-11), C_(-0x1.7633994bcb363452031c0be60442p-12), C_(0x1.d2f415013436fa877d9f51f3a238p-14), C_(0x1.16fcce8bf9664ffcec318d033322p-17), C_(-0x1.f9a19b157868fe73cb52d3d8f794p-18), C_(0x1.555633d592e52d8c981188aedf8fp-23), C_(0x1.285fe2167b5b4b96d89f7083a8a9p-28), C_(-0x1.1bc8f87104551fb246bfa29e3c89p-39), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(-0x1.bd717b66e1d1d4d95ba3c08947dep-7), C_(-0x1.7b9fec6bb92af42e63e2e68ecca4p+2), C_(-0x1.1ead339bb1d44833388375e63d59p+7), C_(-0x1.012ddbc7bca1e6101aa1cf5d564ep+9), C_(0x1.c0b75070f83e37ada47fd8928c98p+3), C_(0x1.981856bff215b594a8e4e5f86ceep+6), C_(-0x1.7b31c06193f3e30ac8e863c6933ap+6), C_(0x1.e4866be11fb72b736fa85f578e21p+5), C_(-0x1.c461c239dff802f2348bdb864e24p+4), C_(0x1.d13242d9fb5ff5fac5479a566994p+2), C_(0x1.e6f4964d6a03d0f8158833051b6ap+0), C_(-0x1.b2b5fa84ed5bf72597a5eb232c95p+1), C_(0x1.0717ba30154525a4b9eaa944e41bp+1), C_(-0x1.7b72f81fcc526babbc7b68ad5d28p-1), C_(0x1.3a477558616d24c10f1dd99cb0c4p-3), C_(-0x1.9b911968d13ed312bc38bac2906ep-7), C_(0x1.631172e87e301114011b41a3b8a9p-10), C_(-0x1.1b6a6db603dde402c2223c4221d9p-9), C_(0x1.a5c80b0f2bc5bc3b3f1a94740a37p-11), C_(-0x1.702b73dc1bf286d5e095a7a0f5a4p-15), C_(-0x1.2e802f058eb73ef9b14848780ecp-15), C_(0x1.f461fea3bf76e5a0a5716d49933cp-18), C_(-0x1.978d16c26c68ef616764f83e76c8p-24), C_(-0x1.13d7c474d8cbc6770c364afcd753p-24), C_(0x1.1119bb3fe775e15526c923b289ap-29), C_(-0x1.8685450351316156519237add64dp-32), C_(0x1.fbf3d2901e1ab81addb9d152dd5p-42), C_(0x1.0ebded1ffbce50e958913e490b72p-41), C_(-0x1.8b6af637a9f31fc837c7aa02d1f6p-49), C_(-0x1.a0d4564bf2dc66611a174850c89ep-56), C_(0x1.74b661da2714cde7309e3860bc9fp-66), C_(0x1.5266f1077241c8b5ce693870559cp-77), C_(-0x1.60eccf731ce43024be7a209a4a5bp-94), C_(0x1.5002d3b2c3d4cf65f716a68d3eb6p-122), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(-0x1.640d0cbfb34edc433e3c265970b3p-9), C_(-0x1.26ee7a9fef2f3cd66764d9f94d81p-1), C_(-0x1.cb77692ba61f4bed97023b434896p+2), C_(-0x1.7a52a3b4a77c5125cf118ae57d54p+1), C_(0x1.3d35a908c4d29476ad845269a92ap+4), C_(-0x1.eed0bb7ffc728b5021c0dd7f402dp+3), C_(0x1.5b446269f85399ef36e0a8f67578p+3), C_(-0x1.e860777819bbb58c5f71ba40875fp+2), C_(0x1.459d6005ddfc2d02a2fae3fd310dp+2), C_(-0x1.7cfb6d6fe6c7981796f3f294d796p+1), C_(0x1.6d0ba0eba8694d88a64c51b8f50ap+0), C_(-0x1.08e91d938b8389f5f0add295cdbap-1), C_(0x1.eca4948d0008e456bc9d67c81d75p-4), C_(-0x1.d06140d0577a1b263782da58dca4p-9), C_(-0x1.7297d215124a9ff8bc7627391918p-7), C_(0x1.862feda5c0e0ac9dd17f1152635dp-8), C_(-0x1.d3aeeacfe9c70326d1fac582acbcp-10), C_(0x1.15a5ade831e782a4ffc3bed5638p-12), C_(0x1.48236580a81473ae0d83a7ad5bf2p-15), C_(-0x1.c4dab80b872dfd428813332137cfp-16), C_(0x1.912930341a4fc5b6071d5bc9b09dp-19), C_(0x1.74839b9d5596fba97dd8392c7187p-21), C_(-0x1.f7937244a115a288dc7cde59188p-24), C_(-0x1.ef0ac8df8a590687cfdcc193b466p-27), C_(0x1.b60aa56de0f8813393124e0f539p-30), C_(0x1.4fe56c11057c7023ec8d56f2bd84p-35), C_(-0x1.2b1ee6f947a6f09f111f53e08b99p-38), C_(0x1.904f2b23e480ded5004c9a3b2081p-44), C_(-0x1.1a491e89e84c1ae1ad605792ed65p-50), C_(-0x1.e6f7ea660d39c7595d9913c47738p-58), C_(0x1.68bf338efe90278676de17896db9p-65), C_(0x1.ec3578649519ba8d72287ee8e375p-78), C_(-0x1.56c2062f8a091fe577e9571b2417p-92), C_(0x1.4654c88c71974e3c9f8fffc52861p-119), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.07725ffa38e9ced625cca68f3f21p-17), C_(0x1.418c13eff61cbb3a021569097a1cp-8), C_(0x1.3da46890dd9a0a4b666b663d4aa3p-3), C_(0x1.8a2b52a78c79acb029ea1b6db9aep-1), C_(0x1.1a351fcd80743de548c177ab2074p-2), C_(-0x1.854589d6ffe0f67b9ae39f8edb13p-2), C_(0x1.33e4c9737dbaaadf26763db4b5edp-2), C_(-0x1.aa815b6478cdd9f02d23c8d18fc1p-3), C_(0x1.087553137f3f92720c562745af4bp-3), C_(-0x1.1923520d0b86878b50e3a0765033p-4), C_(0x1.dbed9e8e6653062b736fe52ecb07p-6), C_(-0x1.13641cf1379f43fd1c7ac3bc71edp-7), C_(0x1.6875bc1af4453d3d4e0df0f5de38p-11), C_(0x1.a947dfa3688a3625b782cb79509ep-11), C_(-0x1.10b3493092979555022e5756e4f3p-11), C_(0x1.739af28e775c2a9c036cd7599ca6p-13), C_(-0x1.6cbb4a08c7eb5fe8237038a25da7p-15), C_(0x1.409e1bccbf4ef7d2793c14591929p-17), C_(-0x1.b4b5ec00d923dbc2091331f8dd78p-20), C_(-0x1.0bf29985eecde4627b6e6f4c0369p-23), C_(0x1.687a642b13ec01d769b15bc617e8p-23), C_(-0x1.137b64e3f44e9fdac7b535f30d85p-25), C_(-0x1.07f0606fa0dbad766d3197dd19cap-30), C_(0x1.6c85ed37d47e7b904cfd46760581p-31), C_(0x1.e0b71b0ad278ef564d1fcf1e88a3p-37), C_(-0x1.c7f3c451c06bde44cba8b0964cfp-39), C_(-0x1.3e734cfafd184d570a4dc2808fb9p-41), C_(0x1.ce28f04bbb94c603b91b46462315p-47), C_(0x1.70c276923dc2ecdd8f158e1477f7p-51), C_(-0x1.79a58db93f5236bb350459a10815p-57), C_(0x1.1f5027aac86b8e122cbfaf41ee62p-65), C_(-0x1.02276c5db8038c6bd4e95867d18dp-70), C_(0x1.254876c157537023d202fc646803p-80), C_(0x1.01c1badc280ce855150f875fe27fp-94), C_(0x1.81b6379c836e2bab36a7efba81e2p-110), C_(0x1.fb9eccd49ecd0870d19d3ffd447bp-140), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.32ea938ba90f99b6837f5af63be2p-14), C_(0x1.6ee1bf4cf707539d522967930e11p-6), C_(0x1.8a481c471691e9b156b25ff57636p-2), C_(0x1.0b4f5688ae00b19fc1e160cf6648p-1), C_(-0x1.73e1ddbd7901f6383d61c3a6ac0ap+0), C_(0x1.8b33bb402f96e0732af30db90eddp-1), C_(-0x1.9843e3061a5286745b1a22aa34f6p-2), C_(0x1.174b1b1b9671399a52d81cce6671p-2), C_(-0x1.d5ed9bfb0b3eacb0609851530eccp-3), C_(0x1.7f42427dbd66dd7c640694ddac63p-3), C_(-0x1.08eb5567536606f98b744fb38775p-3), C_(0x1.23d363b3776e341b922f685a5527p-4), C_(-0x1.e3311fba2b6786652a72b9017675p-6), C_(0x1.080310d541cbc7b415408ff9e9e9p-7), C_(-0x1.70478a76493e219892885c932ab3p-11), C_(-0x1.0307c808a4ebd5856963c5fffbdfp-11), C_(0x1.dee4ac1d99b73074451ae5f38c64p-13), C_(-0x1.44f6514c266093c947d073730317p-16), C_(-0x1.25e4b5de72eb99eebb1451b05b03p-16), C_(0x1.d4b5838001d90ed04674ba339f05p-18), C_(-0x1.0c63aca94f3b9788d5e3d0094dfdp-21), C_(-0x1.5d75636e21f07d7a3381c79d0362p-22), C_(0x1.731d5b5d003f55b6876fe0044ec6p-24), C_(-0x1.0c3e8c9e77afbdab5c815392ec9ep-29), C_(-0x1.add3791299db3c378e9de40e8a64p-30), C_(0x1.06fadabb3956eae25696a4f51f5cp-33), C_(-0x1.f4ce18079dfc9d6929b9dda1612cp-42), C_(-0x1.2eaa27d46e548153d91731a7ee6ap-41), C_(0x1.ae2bef5a0c85a05297e337e77b0ep-46), C_(0x1.4bfd5bd67de9ea53ad7c40089635p-54), C_(-0x1.1d671c704d7fca69eb029e029b5ap-57), C_(0x1.67963d56e9a972fedce141425dcep-66), C_(0x1.0b2bba52e426ee86c81ee87efd7fp-74), C_(-0x1.835ebfbafcc994f81e5e17cf300cp-86), C_(0x1.613768a516da5440f559a8b7229fp-103), C_(0x1.d0dabcbcf214e8044829d82792bcp-132), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.3f4897070d099352fef182a2ce17p-11), C_(0x1.6d998ddc083bb79599bbcdbf5aabp-4), C_(0x1.5cdfd95e7a29056f595ea6b04d0dp-1), C_(-0x1.3be70bab67dce74ec0a3fcb7068ep+0), C_(-0x1.4f0043bcb070f4a9035f0cb75f46p-1), C_(0x1.3f5cc039811e2b5b41e1339ce191p+1), C_(-0x1.435a201615b7649bde7e6bdcd35cp+1), C_(0x1.edddf036bb21e05065a4314b8003p+0), C_(-0x1.339bd26a01d7b24e4a113345801p+0), C_(0x1.26ea186703fa7b37f25c2df1ffcep-1), C_(-0x1.62a5bd05e71620f3397b8b55cadcp-3), C_(-0x1.8157fc40373b6ffb1b755d5d64ddp-9), C_(0x1.2626bd14128e3600ff5e4ef117ddp-5), C_(-0x1.458d354bc66bca085d03a73908bp-6), C_(0x1.60eb38bd6dcb5883ff977a13b631p-8), C_(-0x1.11a579a9f60ad1f4e34335fca023p-10), C_(0x1.8521f25159bae6c124f05e0aa6c8p-11), C_(-0x1.2e7cbaa1495260ee131d264b7fcbp-11), C_(0x1.d8a73116e5170bf766c62902d5cp-13), C_(-0x1.14baffbb5f3fc7cd4417451de38p-15), C_(-0x1.bc76b1b7765f460d127ed8109cb6p-18), C_(0x1.eb62162b875e74ac3ffbad741aedp-19), C_(-0x1.3ec5df1234a119b292d63f400f4fp-21), C_(0x1.0bd69df0fe817c3f4ec6f9220c7ep-25), C_(0x1.06532665f4ae126a371a91623062p-28), C_(-0x1.7b6b83afc0194421f9c689981f49p-30), C_(0x1.34507b73be114caacaacc09786fp-33), C_(0x1.3e99e3a60acfbc311476e151da98p-38), C_(-0x1.f151e40b836b8f8aaa3a3f0ced37p-42), C_(-0x1.448cc1196d194e9baa30923d08e2p-48), C_(0x1.4daf1830022e2a424c8ef6ce75a5p-53), C_(0x1.5011fa2f598d1104ecc45344c209p-62), C_(-0x1.1686e4fad9ced67d1bdbae1c9b3ep-69), C_(0x1.abb8cbb5d77c3d36c138309edcb2p-81), C_(-0x1.70542f5b2fe975bfb256d1ce4e9dp-97), C_(-0x1.e4be478d2f9719b08915aab446a4p-125), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.2434b5ba872d4c5808e71daa73f5p-8), C_(0x1.3130229eb7f3605b9b1b32cb9f97p-2), C_(0x1.7ae2dc23075619726157a440b0afp-2), C_(-0x1.f582a7e51625005d91ec63b814bap+1), C_(0x1.c7d08bb60552f4ce0a1dfeaea923p+2), C_(-0x1.a91c524d7a54ea689caba9ffde39p+2), C_(0x1.3c2342a582cf3f8debfc54cc85bap+2), C_(-0x1.088cd569576045a61a631e97afdcp+2), C_(0x1.d4e6f8f27b14576971c750ec5e9dp+1), C_(-0x1.7aa23dd152a396e3b62ff372d1d7p+1), C_(0x1.fadab4daf8f0e58f8d9d4ef01e97p+0), C_(-0x1.060b8820123e5eec7823aad8401ap+0), C_(0x1.6f3fb0d6ae2f90f1c572f1f9292fp-2), C_(-0x1.4c612316c2d6c3d361a3a87a8a95p-5), C_(-0x1.59b5936f0b00d23a57c7cb83dad9p-5), C_(0x1.f1cd6ac34748038c9618e97f54p-6), C_(-0x1.0815866d993d299c542a96e619ccp-7), C_(-0x1.33db5d2125a2859a2040c40794b8p-10), C_(0x1.bff774c7101082d480ffa7afad95p-10), C_(-0x1.14d1461893fe65443154fdd9ff78p-11), C_(0x1.60ee19b0b8b54d2e9cf10559c07ap-18), C_(0x1.6481008914d42c490ce92b7a443fp-15), C_(-0x1.79e8548e2225181445126279e5f6p-17), C_(0x1.0000883a713c85d37bfa6cb29923p-21), C_(0x1.0c4a52b19c7af0f6d1d88d405597p-22), C_(-0x1.51bfdb03a0cb4dfbccfaca10a1e4p-25), C_(0x1.2786225b5270b4ae5ce680be0a2p-30), C_(0x1.c2f3c31efae819fc824fc14e81e3p-33), C_(-0x1.e485fc83c20815b41344b0b5ebd8p-37), C_(-0x1.cdcc8478ab5ca320820b2bdaf727p-45), C_(0x1.248fa48f37bd758b38759e29a62cp-47), C_(-0x1.a1ed7efc74f0ddd5c3e7a26568ffp-56), C_(-0x1.257d232551abd9af4093fdff2e93p-63), C_(0x1.8e8d04aa5ac8d2663570e52c4402p-74), C_(-0x1.858c6aec0ddcc911f17d17aad5aap-90), C_(-0x1.0055b5f34554e57cc908df0fdeeep-116), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.cd2d34d1a42efd10b55402f678dcp-6), C_(0x1.84d83b63c2112e72eadf0e175b4dp-1), C_(-0x1.432ceae809a5e8ac576108008797p+1), C_(0x1.a0b9d38c7e490414c924ee603181p-2), C_(0x1.201a5e729e35c6b52d82081c697bp+3), C_(-0x1.2e113a8c2f74baddd86814ec6249p+4), C_(0x1.552ffbcbb449884fbffcd2fa1903p+4), C_(-0x1.094e929e449b6445010b66a63f08p+4), C_(0x1.1c13ef7eb64aa8ee0175687d62ffp+3), C_(-0x1.1af822f546327a2297be45973a7cp+1), C_(-0x1.f9d0cabdd71723c2b35a33ecead9p-1), C_(0x1.ddb0b49cb2203c31df0981557b5ep-1), C_(0x1.5318acd89fe65697aea31294c66ep-2), C_(-0x1.05b05a50c615d71587f066c9936dp+0), C_(0x1.9b5ab34637cfef44bfcb0657ebfap-1), C_(-0x1.1af795bed4913c5d4d0b7000d26bp-2), C_(-0x1.67451e2d12b8b1dce42c001cf264p-5), C_(0x1.99b155175f94ba8d3e0e29b8e60fp-4), C_(-0x1.ac7539c2e19ebed9f65c60048ba4p-5), C_(0x1.9ca72681ec9ea8c760a8f2a71fa1p-7), C_(0x1.34e3b1c23cb7d1aa00f8b981d763p-12), C_(-0x1.3a24c6f5381cdc3e9a0a2312b097p-10), C_(0x1.74fb460ba6a3c91ca053d755b7f7p-12), C_(-0x1.0b246714f1ffd71ceaf84df8a2f5p-15), C_(-0x1.ab7c59cb5e81411290eca69a51b1p-18), C_(0x1.dce3bc922f58f0b17196be55c2d5p-20), C_(-0x1.67697e8054a806243dffdcb105dap-24), C_(-0x1.9e416c1fd1c36255ecb5eed76efap-27), C_(0x1.c8b3d9029a8aec4464e3c0dd17ap-31), C_(0x1.5aaa4a43abfd9a111ae71704a9d5p-37), C_(-0x1.7db632c817eaeaef04d7671c292bp-41), C_(0x1.4a05d041f84f4639b3fa535ffbc5p-49), C_(0x1.e2fed86a51ad69aa2e1cca0d7a0cp-57), C_(-0x1.05d887c98f164a6efe9f254828cp-66), C_(0x1.42293c268faac3b8f9cecd0a784ap-82), C_(0x1.a7fbcc57e37f33cf909b7d2d16cep-108), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.31422db2538bc0a87b308ffa37p-3), C_(0x1.0d01250c1b0d06e5278d6357ef2dp+0), C_(-0x1.24921c6c7a3e4123721458dbf25dp+3), C_(0x1.a227c85b5e55bd2048d352a6c652p+4), C_(-0x1.524f50b139534832a4ee54d2fbecp+5), C_(0x1.8738d759012c36786ab70fb57053p+5), C_(-0x1.9323ab467eb529dc5b829fba165cp+5), C_(0x1.a42ab8b3ebb45f1751552cca4226p+5), C_(-0x1.a0b31f7eb9e57c7f0585d5e9fdbfp+5), C_(0x1.5b572ee0532df8736514c7068d41p+5), C_(-0x1.a65ce687fe55f007c4de98a4572ep+4), C_(0x1.d054e5f3566481470f5818319872p+2), C_(0x1.85d591edfc333f35ee49a560ad36p+2), C_(-0x1.3b9b5d3160df5b3c5b4fd29535fbp+3), C_(0x1.a0e3e2fe3af5aba2fa3cba939e51p+2), C_(-0x1.908502149e3126842af43ab5d7e1p+0), C_(-0x1.2fdcf4d1b74c11a7c8107dbf5a5dp+0), C_(0x1.71a344c5df788a37bb879332042cp+0), C_(-0x1.6f12d9a04f61757636a67705762bp-1), C_(0x1.40e9a8c631ed8f09035310ff998dp-3), C_(0x1.90c3dfa395147a7cc0c7676c3758p-6), C_(-0x1.cb2bc9edd20ef799e67ea0b4ad99p-6), C_(0x1.07343e2ee6832b57b8208a80d9e7p-7), C_(-0x1.49dfe7960ed68e24de4768224cf5p-11), C_(-0x1.b6e121c3001f0f7bec5598cab095p-13), C_(0x1.dcc996a9ecb3b5336d9759d46957p-15), C_(-0x1.a1bb03b6243b89e05627bbe8512bp-19), C_(-0x1.d9f622b803a645f37f52496ad03cp-22), C_(0x1.6819f189a7727ca3a62602f289abp-25), C_(0x1.4ca2954f6ae1a2e73667b4619ccfp-32), C_(-0x1.8c19531172f0aea0af3e91e143eep-35), C_(0x1.ad03ab6b6c0809d426ec9d64de28p-43), C_(0x1.92a5c80316f77784726d71e5f027p-50), C_(-0x1.126aebf2a41485b2605ffe0d6f2ep-59), C_(0x1.0d7f8030d9d60a694722396ad34fp-74), C_(0x1.62acfe05bfb1201e774235c1d27p-99), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.46ba9611fdf6c7a94d4f6d15ae64p-1), C_(-0x1.dc52978d552a4c87a8e0e11df878p+0), C_(-0x1.7fa540f99cfd7a53d485cc23b3dep+2), C_(0x1.5732b50df53b69d2559ff51a1e33p+5), C_(-0x1.b13b1bdb27ab101c396869bcc29bp+6), C_(0x1.33606cf67b649ff0c53d5daba4dp+7), C_(-0x1.bdcf241a98962a37ffef026534aep+6), C_(-0x1.6f03a4675ff5f681cbcdceb803f8p+5), C_(0x1.1808882b291db1c41b8c116f1fb3p+8), C_(-0x1.010ae854c8f06138d8c0149f09bcp+9), C_(0x1.53a4857a4441ea9cc9b274ab65a3p+9), C_(-0x1.6d4a26d83e33b0ac3dc870af21b4p+9), C_(0x1.3d6709439125c739fb2f5edfb5dcp+9), C_(-0x1.889b5e2f1c327048a556374f7da9p+8), C_(0x1.56fd4f6d97a60ae9928f3958a702p+6), C_(0x1.25b06390e20f015674e98cf0aeb5p+7), C_(-0x1.b399a1a2f22fe6161cb0e96be4a5p+7), C_(0x1.3df78e7e4d04373329461fc9ed72p+7), C_(-0x1.0ef9b79a3621238b48ca4f0954ap+6), C_(0x1.5f7982d2ac2abd1246025f08fe6fp+3), C_(0x1.6a625e6b6bab463f678abfc9f5a5p+2), C_(-0x1.198f31ed8cd901a93c9ab1bea14ep+2), C_(0x1.42ee7fc8a94768a05abd24f4f6ap+0), C_(-0x1.7d60037bbed413784256ebd48bcdp-4), C_(-0x1.6ff7a83ef962302af99cd8276389p-5), C_(0x1.ab35b35a042defdd50e378dee2cap-7), C_(-0x1.b332608ca1a847238ace5779c464p-11), C_(-0x1.021ab5a3bdbb30ee9a537ffac573p-13), C_(0x1.eac528756b7f5130df18318c4f94p-17), C_(0x1.0199b85d253f43e310c32a3ee23dp-24), C_(-0x1.6d0abfd965fbe6911b0989caac0cp-26), C_(0x1.0c61bef3e22c19990cf4042ba7e3p-33), C_(0x1.18cf50a4e4b4950ef758930ceb31p-40), C_(-0x1.0160d4507e328ccba58abe0174c2p-49), C_(0x1.7a161fd10bdebbba470322602b5ap-64), C_(0x1.f195998251a554e483f0c71a4471p-88), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.13189db507a58f44b230b3686764p+1), C_(-0x1.0f9b17b47559884eb516506b8576p+4), C_(0x1.e2750024accc2d74cdaf0e777dc5p+5), C_(-0x1.02e9517352f36c7e1cca5cdce0a3p+7), C_(0x1.84ea97af0478dfed161742a65f15p+7), C_(-0x1.cff7ea5e103622b218e35556d5c2p+7), C_(0x1.edfef34bb4dfb6181091bc4e1283p+7), C_(-0x1.f2fc15391d50c27f5075a6c8ff4bp+7), C_(0x1.eb246356ef9387175566a1e68a13p+7), C_(-0x1.02127d08179f9b70803e08887c21p+8), C_(0x1.3a1511b48828ca00655918525c18p+8), C_(-0x1.91c784aea677bcaa4677a1d92317p+8), C_(0x1.d755a30a6335088a6e9e8a634a61p+8), C_(-0x1.e5c19797a7c13f73162c80019235p+8), C_(0x1.be09360d2ab5d983638f05e968dcp+8), C_(-0x1.6e80a047a6bc49df58dac888c978p+8), C_(0x1.017887f1e05fdfd52e459afc793dp+8), C_(-0x1.16d045efd9fc23449024f4ef5b58p+7), C_(0x1.6f3c5a5aa270e946f4f0452290a4p+5), C_(0x1.00a0bb4260f4b86b22991895dfc7p+1), C_(-0x1.883af181a30c4b69a77ebd74a0cbp+3), C_(0x1.ca6f2d6266dac24630d5b0215037p+2), C_(-0x1.fb9354caf7469830d8b743a50504p+0), C_(0x1.c12f9fd42c0cff788f8d8a32aaf7p-4), C_(0x1.aa753c061078e6073623671f0cd1p-4), C_(-0x1.0149c0900041728b5dc19008c617p-5), C_(0x1.320d29d0ed46573ee176d2f36b8fp-9), C_(0x1.7569a3a8ad03ea55263aad4cfdap-12), C_(-0x1.c7142f2922eef32fe70a3d54296ap-15), C_(0x1.46d93383351fcdeef5e2617523b5p-25), C_(0x1.cc32d5d77364e5410b711a5b1237p-24), C_(-0x1.c3faa80be31a417c7ff07c960f74p-31), C_(-0x1.0e8f2f249697649bebd486ba2aa7p-37), C_(0x1.4b97e65c483067d885e78eb825fep-46), C_(-0x1.6f0e0ef20e7a06716a4c8ec9fe8dp-60), C_(-0x1.e310d5b8794443399cdd6ece490ap-83), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.580f506a271ceefdaa3463cf1629p+2), C_(-0x1.bed7dad0110afcce89ace888e88p+5), C_(0x1.122d5f16217b3e9bf4e80fdc4373p+8), C_(-0x1.ad0c5fd2ce7d97e26b1b63596f32p+9), C_(0x1.ebebc475930229b2000cf737b101p+10), C_(-0x1.c66859645ad39ff322d2fa4b454fp+11), C_(0x1.6b3c821d2c08e770e244c3fd9b4bp+12), C_(-0x1.05ed443c98660df7e825b62de19bp+13), C_(0x1.57df9f8d58ae967ab62cd9351becp+13), C_(-0x1.988852a4ddb8e2394c97f0e9d30bp+13), C_(0x1.b718499032f53cfb6791a553f164p+13), C_(-0x1.ae72afe9b5f0ce3d7715181f289ep+13), C_(0x1.817de8fd200b93d2fe94ab51ad77p+13), C_(-0x1.361e5f944923d3d5bdf35a20adffp+13), C_(0x1.b3a6d661a5e954603cd076722514p+12), C_(-0x1.036ff3829f5795f4ec64398489e6p+12), C_(0x1.edf47d39280a4d357e9e1781a39bp+10), C_(-0x1.10c036b4236268a93be68873acb9p+9), C_(-0x1.e0b697df7f002ac2801a14873b67p+7), C_(0x1.ecbda44c262ae523cdc868e322e1p+8), C_(-0x1.86f5d451d505eacfde5511850305p+8), C_(0x1.725c7f3a52e97d8a78a3843dfb9p+7), C_(-0x1.79d4729613fc7b35a032158d6205p+5), C_(0x1.fd7ee793312f8451ca67d9e92df2p-4), C_(0x1.0d01b8a4bb031f49626bbfdc2049p+2), C_(-0x1.47046f0d13d0e9edd2f830615f89p+0), C_(0x1.be74b29e56e9e7adf67a6938c90ep-4), C_(0x1.1bce9460eaf5c685ea35565b6408p-6), C_(-0x1.bea1c36d184dadae8028a6e3e14cp-9), C_(0x1.c87dd9f0e82f03f1f618a5e508a2p-16), C_(0x1.3736896d21eebb32c780ad16f33cp-17), C_(-0x1.9904cb4c4529ea63892483302a3cp-24), C_(-0x1.1964fba513e306ae2fe86b385614p-30), C_(0x1.cd54969392f7573024faf58e36bap-39), C_(-0x1.819d1aa8bbcb7dddef905812ef85p-52), C_(-0x1.fb7d3a090e0ab46eb1271ed833e8p-74), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.58fd39e3ea473b9c365112f9e5fdp+3), C_(-0x1.f5c4ea84a3bdf86fabc78b7ccf87p+6), C_(0x1.5132162ce5f74a25ac418aed5521p+9), C_(-0x1.153d0f08884aedd476baf2e683p+11), C_(0x1.382a3e583a8c4c9f1dbe11c15209p+12), C_(-0x1.01662d4c3e81ce469818c40b609cp+13), C_(0x1.4a1e803e16c3f08b00f992a85132p+13), C_(-0x1.5e4f1aa3047031adaa3ecd9f7d51p+13), C_(0x1.34f8d319cfee8ccaed9905f9568p+13), C_(-0x1.5037b2099231e17c790011360049p+12), C_(-0x1.c9d4325924514ceeece20c92f62cp+11), C_(0x1.ef1c5da047ca3c6636907219e698p+13), C_(-0x1.aa6460f62329021cc0a31061d8ffp+14), C_(0x1.1493ffefe577c924223ee91be135p+15), C_(-0x1.378dc9a8516802b7004a42d17ea6p+15), C_(0x1.3a895ef60ca292cbe80e485690b9p+15), C_(-0x1.17d3cdfce981563e49f923d38dc9p+15), C_(0x1.b32449a2a05e7c53387e3b5eab6ap+14), C_(-0x1.2d005b15e1ac660d6c6de2ac5d77p+14), C_(0x1.762585d24bf9c7735f9898961b24p+13), C_(-0x1.8db35bc09fe7ee5140a582ff984ep+12), C_(0x1.3cd0860a0aa20c2aa3d4d395b99bp+11), C_(-0x1.0eb312cd7109b3879fc433d5f57fp+9), C_(-0x1.439f55d9eae59605a3c39a59b84ep+6), C_(0x1.991df190f9945d0054430f51818fp+6), C_(-0x1.f474551766f4044e9817e92e973ap+4), C_(0x1.7b90022b6c4e7f168ce752888458p+1), C_(0x1.1453a51ab81ae063df6727985433p-1), C_(-0x1.0919f3da668fc601223376349f5bp-3), C_(0x1.2552ca2a72c78998c9ac373b5bbap-9), C_(0x1.0101dfee94cc5d7f60f2678fd0b1p-11), C_(-0x1.dade9b27d08cb19be2ad380c75a3p-18), C_(-0x1.64097fcb6571f6185210c51bbb62p-24), C_(0x1.8e12f1e504e13d786036befb6f25p-32), C_(-0x1.eef1afe29fcfbef2c0d8edeb2fdcp-45), C_(-0x1.45af8bce131ab3ac470aded6347bp-65), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.c2e57f37dba380a65ba9eda2079fp+3), C_(-0x1.59749d8525f12d8082256adb88ffp+7), C_(0x1.ea6ee085cc96e0d288f3be1b9ca2p+9), C_(-0x1.adf6c2874bed2b3f69d173f96a2fp+11), C_(0x1.07b4a22de335b119555a005db318p+13), C_(-0x1.ecd88a76ee3d3e922a5c04819366p+13), C_(0x1.7c29acad357038f41eb8b1dd0fc7p+14), C_(-0x1.052f5556b7e4a1a5c20ecd7e819fp+15), C_(0x1.4e46d551ac93ec5e56006a3de757p+15), C_(-0x1.8e77607cfd5ad57c6663b8875b37p+15), C_(0x1.b47447ef6b859ed13ace58a9a34dp+15), C_(-0x1.b911fbfaa77dec0071a250cc5fefp+15), C_(0x1.a115d6e8e14d04bc0db0286009bep+15), C_(-0x1.7187cfaf46cf0d5ed6f0095f890ep+15), C_(0x1.2fababdbdc3283e40c1d376f77f3p+15), C_(-0x1.cda4daf54c9cb2382843dcbe14cfp+14), C_(0x1.457825a36823f87f660fc5987cb3p+14), C_(-0x1.a46083210b99766804825ce7a718p+13), C_(0x1.e3885ee2753248f8df804c157d1cp+12), C_(-0x1.e49914e71496a8b65b2bc3b0a8d4p+11), C_(0x1.9ae829c152385eae9b1515bb5c36p+10), C_(-0x1.f191137e3badeb9e76f5cbed8cb2p+8), C_(0x1.57e65b068678833f27ed3ab74f4ep+1), C_(0x1.c2acc962d2fde80f4a40165a5fbdp+6), C_(-0x1.1b8eff5b124df721e99f0cb0e796p+6), C_(0x1.4ce0864f5bc843b2b9783951ecc5p+4), C_(-0x1.f98632e1903923d8655f653df191p+0), C_(-0x1.f614ca355bef0d83e7011b692c6bp-2), C_(0x1.105d05e210a04ac76f5004e82666p-3), C_(-0x1.2c35027764d106ecb7dcc0f035dp-8), C_(-0x1.76591805b151661a98c804b730dcp-11), C_(0x1.f83620ba68c2e3da4e964c603cc5p-17), C_(0x1.9ec84cf651d46727ce1b0a44d7ddp-23), C_(-0x1.358d783409c13e2404896fd5c7b4p-30), C_(0x1.257546b697ae8fd8394b22b0ae34p-42), C_(0x1.8233dd1d0686d57c137ec852b5d4p-62), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.ffa03a8700da7856451e869e7b5ap+3), C_(-0x1.91f11c60f20f4732595d765621bcp+7), C_(0x1.215104c7061731e391acb03d0135p+10), C_(-0x1.fa2000694cbffa8b68970bca9b4p+11), C_(0x1.2ea66d9c1c1c36281a4f053280ccp+13), C_(-0x1.0bde0020ff0122097ceed958162p+14), C_(0x1.7dfdf722720076bd662023e14b8fp+14), C_(-0x1.e6475940e8f80e3e0662171bf565p+14), C_(0x1.28fcf546d66430029dc0ae7f105p+15), C_(-0x1.570d2d144c0d85d5f33951d38d4dp+15), C_(0x1.64b992f501b16328e29ed09c3ca4p+15), C_(-0x1.4cdaed031e2e4abf8359db4b1506p+15), C_(0x1.21c4ffd20e63be71df3b6f2245d3p+15), C_(-0x1.db78c1b913f3be9244561a56f2ecp+14), C_(0x1.5e8fb02e9949d4c003e971dc8526p+14), C_(-0x1.bcf51c1ea8f31b04ed5d992397bap+13), C_(0x1.e583e17ea627e00530e2cb6f7d39p+12), C_(-0x1.aa4e81eafaf451b39ea0ddb0f57dp+11), C_(0x1.13f68d6d4da0d49f20c5505cdf9ep+9), C_(0x1.eda1ba36110bbecc88ad9ef4ce8cp+9), C_(-0x1.4fff2b926b6f5e6bcd2243e80004p+10), C_(0x1.12bce3e2f7931f11964e6bc3f549p+10), C_(-0x1.798d627cec26e7e1e4f53d7bdf9cp+9), C_(0x1.be6fc86ae4a8be5d77f2a1e9d57ap+8), C_(-0x1.8da2d6faf8e64c22dc4a043ad99dp+7), C_(0x1.b66a3015a1c5a11c948aaaf7cab3p+5), C_(-0x1.44429d9883de74d9c60a876b939p+2), C_(-0x1.c3e96613b6e5e2ff71adfacfda7fp+0), C_(0x1.1e57998dcfcf5d1648e257f8bf08p-1), C_(-0x1.07010d4834a6e7a67ce43acbf39ep-5), C_(-0x1.1b562f148b2fb64632b98ead9b7fp-8), C_(0x1.0af79c08ad78f06aac625b45eb1p-13), C_(0x1.f410b3bf125a82ae4c43c7624696p-20), C_(-0x1.f9be8616ca648419dbd80373acd5p-27), C_(0x1.6a9909c4a9f6ffff9ad70512f7b1p-38), C_(0x1.dd2f7b7aa9b821698f859b9d1a0fp-57), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.87fb22468465fb8a2934ce18ef16p+3), C_(-0x1.37c2f683aab22684a06e79a101a1p+7), C_(0x1.c5fd83f053f82dac4273a062a48dp+9), C_(-0x1.91b1e12dd60d97ec2e841dbfca05p+11), C_(0x1.e68387666347c07a316a9422b5b6p+12), C_(-0x1.b4dea0e7d579f84f7fb9d6c16bdcp+13), C_(0x1.3c269a772fa78e428d8f5044caa8p+14), C_(-0x1.97127ecaa2ab1915c1aae5c6fc8ap+14), C_(0x1.f6af289cce31c29a6ec330fbe9e1p+14), C_(-0x1.2a9f5b6b03ca5e9eb10038f1c5dbp+15), C_(0x1.4b10d6718988db4dba24714139cp+15), C_(-0x1.55a31577d419bbaf6e8ea53fe90dp+15), C_(0x1.4e7cdd5d8ea4ad7bd94b50975a01p+15), C_(-0x1.38022f772c0b4cce7e7232f4f9bap+15), C_(0x1.12be31f5fe34faa8426124a140c7p+15), C_(-0x1.c90c6d590473b7e23f50a6ff90abp+14), C_(0x1.68be09036d4b8e25079ad44a0fb5p+14), C_(-0x1.0c494e2492cb7350d7dea324e249p+14), C_(0x1.758345ee1ea103707e4fc5726b69p+13), C_(-0x1.e8a773cd517e44f45076f71519e1p+12), C_(0x1.2a474ea41676fa5a62a310e63587p+12), C_(-0x1.4af3fdfe318309e19b15b68fb972p+11), C_(0x1.49733b39a1c4ced0b1d897e0d8ecp+10), C_(-0x1.28058c9d809d32e67b550b8feec3p+9), C_(0x1.c739fb1ca38e254565961e77d1e7p+7), C_(-0x1.e2ee0f774ec3af6a1c1e4f7b17bcp+5), C_(0x1.f584835c1818f23dc08b323d98e5p+1), C_(0x1.dc8e84cc4afe7a2fb01ea8367041p+1), C_(-0x1.3b3a53bf8d0a53e1e10973253b98p+0), C_(0x1.6a83343080c3f8b48adb7f8a0fc4p-4), C_(0x1.952a26a6e4af59b3b26bda8c8609p-7), C_(-0x1.3a135cf1b710ef334411ec10d2fbp-11), C_(-0x1.208be3b61fd62740fba383db12cep-17), C_(0x1.a71d1df2466b06f953d67915b744p-24), C_(-0x1.b3e65dd0b550b982df6eefc5304bp-35), C_(-0x1.1ed120d152ef3b5a4475e78c15bcp-52), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.14760cca8b142294e79588592265p+3), C_(-0x1.ba74df47bf664ee2547385285e06p+6), C_(0x1.41711dcfaf9ae33ef5a42497cdccp+9), C_(-0x1.1818fad342f755601ec00141bb62p+11), C_(0x1.474e1b48df1603e34e0f10a63ce8p+12), C_(-0x1.1344c928a46119ef7f83bdf82b73p+13), C_(0x1.69c3448f5e9dbd2d90d955490598p+13), C_(-0x1.a6933630b28804e5fdf1db79e516p+13), C_(0x1.f096b7533884b484daabf2ec386p+13), C_(-0x1.22623e57fb5283c6330ad006e50dp+14), C_(0x1.3656cdaada5ee9f54e572471e7bep+14), C_(-0x1.2c112510224741f5281f55b6dc46p+14), C_(0x1.1649895fe753bac480e018c717a8p+14), C_(-0x1.f7bb2384208e05c66ecac730535dp+13), C_(0x1.a9475e44156e584ae36a2ec50f02p+13), C_(-0x1.4a8f9de0fe8b863882cf98bdc30ep+13), C_(0x1.eb5875381b21b266553a6296e0a5p+12), C_(-0x1.5ee64eec32c02ba06ecbd76a11b3p+12), C_(0x1.ccfb4d9d3a3fd43202c9da414974p+11), C_(-0x1.14a05b02023d93595fe14dff5f3bp+11), C_(0x1.3a9e21e52de90e0e25e5cf4ca63ap+10), C_(-0x1.4bc3a327f05f291344a38f901a5dp+9), C_(0x1.2adbd2de6a50340d8168b2783c01p+8), C_(-0x1.c3c2f4b5f88c5c0995d28d11b9ebp+6), C_(0x1.277a18d79f69dcf96944e2b0fcf5p+5), C_(-0x1.c9f8833026d5a408341117a30a92p+2), C_(-0x1.454631d4223dc7af67ef97ef1099p+1), C_(0x1.43b3c20fabe24e5d14333b1e0567p+1), C_(-0x1.7e2b7474504f09a810523ca07f92p-1), C_(0x1.0161c2b653dc5e969cd9fbd6d0edp-4), C_(0x1.00c51140e71642a9a41e83368bbdp-7), C_(-0x1.ae184c969f7530c56af21ca3a7a8p-11), C_(-0x1.8063c15ef2a25ff6da3cad34895fp-17), C_(0x1.7fa9f24707d3d7cbfa3e9820acf4p-23), C_(-0x1.2feaa75fa15b4cbbde0dc3686d2fp-33), C_(-0x1.8febd0375e4aae5f4479ef67c215p-50), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.309432a44a63023cd5d74f5bea55p+2), C_(-0x1.e8f069c87232260c91fa71890f2bp+5), C_(0x1.620bb6edc4428b1d5f4fa47a5ecep+8), C_(-0x1.30502125aeb77e95c45d9e43464ep+10), C_(0x1.5897d2f743a96869b1eb0ca13247p+11), C_(-0x1.10925ae24fc57451105c29bc2a9fp+12), C_(0x1.4362e4b63cec61ff21aac6b7ac6ep+12), C_(-0x1.4ffdb02cc70cfe03dbf6d475eb63p+12), C_(0x1.779b03f599f05e82b08d8b48f758p+12), C_(-0x1.baec7e0e55169b8140b39b8fb14bp+12), C_(0x1.ce2ff743f88370d5e72cb7988fbcp+12), C_(-0x1.9f067ce3296956a187e74bb12383p+12), C_(0x1.6abb1f9cef609047d528387a0ad9p+12), C_(-0x1.4450d5aabf62ce501c4c7a9271c2p+12), C_(0x1.08545f0a3187b9a2ec020313e51cp+12), C_(-0x1.7530230cd216d38656dfbf0553dap+11), C_(0x1.f952b436845ca1bafccd87887abfp+10), C_(-0x1.560fff419d2c2e711437c4013006p+10), C_(0x1.8c0d255b6e233d3a2cb91681d042p+9), C_(-0x1.5fdc3ca1d5db02eaba158929c246p+8), C_(0x1.0a97d5984be8315545f375086dccp+7), C_(-0x1.20a6202d36bbe9ea7b9fe18176b3p+5), C_(-0x1.5a7221251a0809c48fe9776bbed6p+4), C_(0x1.3634e4081412bfd6aa7ecc784b01p+5), C_(-0x1.bdda94264568de640cdd8fb6a91bp+4), C_(0x1.feb750a84a74f7d5dc8417586506p+3), C_(-0x1.275477518f18aa31553de78414f5p+3), C_(0x1.12ebd04f5867e9e6cd551be469c5p+2), C_(-0x1.30dbe403419efe34f764090a038fp+0), C_(0x1.058d7af30daa34c20339630ccaeap-3), C_(0x1.916084cd62258d7ea8b1535e2f8ep-7), C_(-0x1.732dce99f11c6f7cee7cd02c7701p-9), C_(-0x1.7126e2b2a55e5160267b465d584cp-15), C_(0x1.f42158d77d0c28962287129d0e59p-21), C_(-0x1.357be619f66df06ada13476a9641p-30), C_(-0x1.9731ccc0ad49712bbc19913bd785p-46), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.8a04267542fb82b6511fb8f206b7p+0), C_(-0x1.3cbc4bff9713202eddfb257134f3p+4), C_(0x1.cbebed769f041b8ff3b3ff336b7ep+6), C_(-0x1.8d408dd48e3feaaa0b268282946dp+8), C_(0x1.c5c362fe59a680f0eae654ab9d42p+9), C_(-0x1.6befff94df0fd5c1ea5963474048p+10), C_(0x1.b68e6a376222daa009bfb53e28dp+10), C_(-0x1.c650372cae06a09b58e507b0871ep+10), C_(0x1.e7dc6f316434651b61d954241667p+10), C_(-0x1.15cc9fcbffbdadb34e9d61d6c6eep+11), C_(0x1.25d8da27ae488c61183e3d71ffbcp+11), C_(-0x1.17ff07a3bf7e3928a0bec71f80dbp+11), C_(0x1.0475b26522c32263166cf14a852ap+11), C_(-0x1.e40da504c90b0dabfc10981e655cp+10), C_(0x1.a69e253ca704fe5504b2c83ebfdbp+10), C_(-0x1.57f0b96fa56496dc384c41ebdb2p+10), C_(0x1.11486c0ca46dc3a169a7bf688364p+10), C_(-0x1.a51b5b4b4c6e9a002c8fc1ca65e6p+9), C_(0x1.2ee508d88648873a9042e781e817p+9), C_(-0x1.9d3a15a142fb235220e5bdb7d581p+8), C_(0x1.11494e2078a35defd9005276ea95p+8), C_(-0x1.535f44eb08e29df270d509de713ep+7), C_(0x1.85e2cd196a74cb82559b30f986fdp+6), C_(-0x1.ab69cc5e56727978f17d430c4129p+5), C_(0x1.b6235da40abe2f3f3eea8ec9a5f6p+4), C_(-0x1.8b55be10b7592b154b2ba9939157p+3), C_(0x1.414892cca85f8967c379d65c1761p+2), C_(-0x1.e63611dc23584e97ec62af26dc25p+0), C_(0x1.1a15ef6adced3df1c6c0346a88a1p-1), C_(-0x1.2481c80f712590a8d277e551e4fep-4), C_(-0x1.27449cc156e8a2b8d79cdb23e19p-7), C_(0x1.70c363a504f9eefb5323d6beb984p-9), C_(0x1.513124306018b235441513a840aep-15), C_(-0x1.d1034c80bf12bfc41e39ee6d8817p-20), C_(0x1.59ccd407dcf5a9a7533ca67a560ap-29), C_(0x1.c6dbd9b6fbf34f8784ef66a9534dp-44), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.d374dc0cd29f78efae1c669adc98p-2), C_(-0x1.780e4d99b7126e1227fd8360470ep+2), C_(0x1.0fdf2439cdc107efd9b577f835a9p+5), C_(-0x1.cfa32c44d17cf6112a211a2ca37ap+6), C_(0x1.015959857901578ca504dacee669p+8), C_(-0x1.85bc6b66153fd1bea9b65cf18fa7p+8), C_(0x1.a64f0f8c995c4aa45de473272a55p+8), C_(-0x1.7a602a5238af6059f76503b7cbc2p+8), C_(0x1.7b654c5560678179ce7606e1eb5bp+8), C_(-0x1.bd48fca1124c5a0c87121a03cfe7p+8), C_(0x1.d04b583d66c5fddbbacf446d9c66p+8), C_(-0x1.9412225fd51522e93e47c93309f2p+8), C_(0x1.601c278c16ffe3bedc9949af1437p+8), C_(-0x1.4b7186886095601966984faa4acep+8), C_(0x1.1d01310f5613f772298e42534595p+8), C_(-0x1.abfcdefee09bf658999362e6f111p+7), C_(0x1.4372d34e52fa3409ae85e2a019f6p+7), C_(-0x1.f6105d4c84d999290c211733ed04p+6), C_(0x1.5bb1d872e66637325ce8f6aa17bep+6), C_(-0x1.b1d6456c69f76f04df5acebda739p+5), C_(0x1.15b4bfdbddb01fb2de3e2b574816p+5), C_(-0x1.5951b3080c61b9307228b6ed10bbp+4), C_(0x1.701e202aeccdeb8ac6b6b30bcacp+3), C_(-0x1.6ddc190753e3ea59a0862615508fp+2), C_(0x1.77099e572e056d9b063dba7e75c1p+1), C_(-0x1.4e4b25c08b76d3f35349a1737dcep+0), C_(0x1.d2b148f357c3f676caf89142fe6p-2), C_(-0x1.3f20a405e77bfa5f0c7b2c20c976p-3), C_(0x1.9e7b676edad2c438a7201cee715ap-5), C_(-0x1.868422c7d3c55e44cf7999291ce8p-8), C_(-0x1.3d8b8d9fd24906b21fe8a1d895d9p-9), C_(0x1.57f23d8a911c1c88e9f1808c31e4p-11), C_(0x1.21e64d9dcd8227de3458f3f5849cp-21), C_(-0x1.d450acc53a98cfc94056c9e9eb52p-21), C_(0x1.0524ac3af31035a21da55dd5b9a3p-30), C_(0x1.575344ae7025305d708f9f17a1a5p-44), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.515b9f63b7c8d9d621c7f83ca202p-4), C_(-0x1.0f7f6c187ccac0b76cfe6b463e44p+0), C_(0x1.8785c563b5897121211402b9f302p+2), C_(-0x1.4b2e4e52216e5851aba80d8bd8e5p+4), C_(0x1.6901cf579638d44ea9478cea01d4p+5), C_(-0x1.06c8002a381179d9f60f753114a4p+6), C_(0x1.05cb21187a0f4fd8449a14491a1ap+6), C_(-0x1.95b91f5bb17e01dfb0ac91c796f8p+5), C_(0x1.7701942190fc5f1e86a9d43b21f6p+5), C_(-0x1.ce78be0577929e543cbd7ad9b93bp+5), C_(0x1.e29898694f90f26ba0d29f50470ep+5), C_(-0x1.7f1203e71656f1392c2a5ed0ed1cp+5), C_(0x1.37e1b965edd32923f1ca90e8ee72p+5), C_(-0x1.32c7bde1b71fddd33a7396827f1p+5), C_(0x1.098dc7ef6c8b51bc5142e5eef069p+5), C_(-0x1.6fe8868cdb497ea274e3965b3923p+4), C_(0x1.0ba553b7e7f0be8b204b950f5ae8p+4), C_(-0x1.b42a38b735b9796714d4ff017726p+3), C_(0x1.28e9aca928974002f9a9710ee004p+3), C_(-0x1.515c3566a134d8fdf2749b107958p+2), C_(0x1.ae8a4319bcbc3c0849df1986eff8p+1), C_(-0x1.1895df589aea592ca4ae051262ecp+1), C_(0x1.14e9f7c12e2c99db92b3020068dbp+0), C_(-0x1.e47340b006f8809308435a5f94dcp-2), C_(0x1.062f736c8ea4db2c5025ce71eba6p-2), C_(-0x1.d4b69f6b077f6afaf5cbb7fe058ap-4), C_(0x1.ca34188e3ee232929967c28b9b2ep-6), C_(-0x1.abe68c068be60d047f0a28b8716cp-8), C_(0x1.690421cc61ef435baf7b95f1a52fp-9), C_(0x1.f0697cb773e3bc4b5c6f8da3552ap-12), C_(-0x1.c195d60892125cb3e4fc26494359p-11), C_(0x1.b812af9cf3a26f639a51b597d61cp-13), C_(-0x1.bff07c97b4e02892210bbfe57ccbp-18), C_(-0x1.52d29bd9004df24ead72772a383cp-21), C_(0x1.032cd4ca8cfc03e1481665c670fdp-32), C_(0x1.5462cc3c1b3950e1af932e243f9p-45), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.19f56cbab95bde76557badc0f4cfp-7), C_(-0x1.c5e9cb7948f398db235b0497713cp-4), C_(0x1.45ccfe221c0e9033121b0a870c75p-1), C_(-0x1.0ff7774a4970235ef0d0d38e3503p+1), C_(0x1.1f8e85bb37dc52e0187eb7a98e68p+2), C_(-0x1.86af502d50caccee8ec1f8fa9cd2p+2), C_(0x1.49bbefd2893ed26dde1f31860f1dp+2), C_(-0x1.6128a473d02d185e7eb02c402e5cp+1), C_(0x1.1828041581a25f5b721c3a717f02p+1), C_(-0x1.d956f1ddda30a36e6132710c578ep+1), C_(0x1.038faca047549c3c3be2f3f91741p+2), C_(-0x1.37b3d4e72913f8a1a7f18bf41b92p+1), C_(0x1.7db8d08d07a3f9e23e72ca58a9d9p+0), C_(-0x1.e8024d590281c76397a14742f7fep+0), C_(0x1.bf0c126480d51b8dd799512a9bbcp+0), C_(-0x1.9a6e24093a6a2e038548f4c21568p-1), C_(0x1.9d414904073073148ca53b09a0c9p-2), C_(-0x1.e94579a438133caa5c0cf94e7bc6p-2), C_(0x1.1fe0d75be11ddab72d3817a1df79p-2), C_(-0x1.138ce466125db8659c96547c9ecbp-7), C_(-0x1.34e623ad04da0418dc894a3d03adp-6), C_(-0x1.2fc16b0c0aa7163aea99c6e062f3p-7), C_(-0x1.d550ce5b878423f79b2e760869bbp-6), C_(0x1.5e3d43af8f8ddb8e3580c4af5d78p-5), C_(-0x1.6c1ef7a1d6e428cbd81df1c34e95p-6), C_(0x1.8a7d31fc8c9aee233f27827d8acap-7), C_(-0x1.52a8406945db2a229ecbdd1d3a6ap-7), C_(0x1.7e48f37194da1a9d35aebc50ef39p-8), C_(-0x1.157ac29aabe3ff0003550e84e639p-9), C_(0x1.ef1519ddac57eba8aaaa2d2f321ap-11), C_(-0x1.e9152bfae3a36641e3acf97f58dcp-12), C_(0x1.063d5981a1db32ae377107926c9ep-13), C_(-0x1.4c0cd023430cc482bd47183c0ef3p-17), C_(-0x1.c41b70da67df95d6233d9591b513p-21), C_(0x1.5615a8cb6d771ab8987aa2645074p-32), C_(0x1.c05941495cbd662c96cb64517d6bp-44), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.94435eb9af5275885daf683a6d65p-11), C_(0x1.ed6b4c3fc563bad856b7ff679708p-2), C_(0x1.e76d4a24be344d37fa2f63572709p+3), C_(0x1.2e6decff81b60c629b716c5e755bp+6), C_(0x1.b10d4368bfb547486b053181a892p+4), C_(-0x1.2aabf32fc96a83423162d2c816bp+5), C_(0x1.d877b83c63dd7e5e4cc6dd5d03a9p+4), C_(-0x1.473d4fc793666a7b844c67c60bd8p+4), C_(0x1.95d0bb71b70ebdc02338882a3446p+3), C_(-0x1.af691b75d1d83460cd380f784013p+2), C_(0x1.6d28dba75e1d6e3724ad5b4f87b2p+1), C_(-0x1.a6978440cef93cfbe48ab54a4883p-1), C_(0x1.1490ceb2bb752e576e6ab7934d2ap-4), C_(0x1.464cc9ffc1d7e4d14789afa29b8ap-4), C_(-0x1.a276802b30603b547d67dda28d1bp-5), C_(0x1.1d1df4fc9211fc9b42905d09c47cp-6), C_(-0x1.17d7d8739a0a8aedb047da85632p-8), C_(0x1.ebfe215a7af3d07469844cb63084p-11), C_(-0x1.4f11d28267254fe725cc5344d47fp-13), C_(-0x1.9b2b7a111f74e448315a5acfceb6p-17), C_(0x1.14946151574b1cc87019ae7e5eccp-16), C_(-0x1.a6bb3de2d570ec48084b02756991p-19), C_(-0x1.9504b8c2dfd49dc16ebf73767df5p-24), C_(0x1.17aee7159c99baf232751bad6bd3p-24), C_(0x1.70d51f32a8d959f82b22d341a23bp-30), C_(-0x1.5dd5370ddab610b2e6c646e6c17ap-32), C_(-0x1.e8aac4dbdf4eaec509688435a8c6p-35), C_(0x1.629884f91c42aa4b289bcdb69f39p-40), C_(0x1.1aef0590aab3b2864498ba08a331p-44), C_(-0x1.21c09a3e7d5c59641f5b485f413p-50), C_(0x1.b8e2ec16d3130e2d4b06e1e5ebcbp-59), C_(-0x1.8c242cff56d3b852843f6ec978c7p-64), C_(0x1.c20c22cff32a0ee7b7221886273ep-74), C_(0x1.8b88202dbba79e3009dedbb574b1p-88), C_(0x1.27f0bb4febe21c10d76a7232b49p-103), C_(0x1.8579c244925048746514bf00ae6dp-133), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(0x1.263966f58e93453d04e057c51a09p-10), C_(0x1.5fb5bf5017c5cbd580114bdb418p-2), C_(0x1.79fa0aa0ef4b1e94ae76e603830ep+2), C_(0x1.0041752577d99920a4756cf6dfd7p+3), C_(-0x1.6480edc11cb316f0df4191286f79p+4), C_(0x1.7adbeb32519375a4e9fc4f3e6a5bp+3), C_(-0x1.8761c804c949b74e319f96893292p+2), C_(0x1.0bbe5cbfe7fbfd16a26214b40cadp+2), C_(-0x1.c27eb52ff5df81afb96ebb8be06ap+1), C_(0x1.6f68e268413d3fe6c3a7fa4919f1p+1), C_(-0x1.fbed86051f0cd090a4eeebb3ba08p+0), C_(0x1.17c1f8ccfdcb9142f7ebab0435b5p+0), C_(-0x1.cf35ce446b0dbe81a8d8224d1015p-2), C_(0x1.fa3032b16e2ec1aa83ca0e93a41cp-4), C_(-0x1.610cbeafdcc29a63e60dfb78086p-7), C_(-0x1.f0a31aba969e59e1d540df6c7f09p-8), C_(0x1.cb16dc9a66c8c832a40588853909p-9), C_(-0x1.378619c057d6f59580d9bc18beb2p-12), C_(-0x1.19bd674de47d6898c22e3b3237e3p-12), C_(0x1.c15384b637285af63775101117b6p-14), C_(-0x1.014a5dd580db7e757daab9ece5fdp-17), C_(-0x1.4f01d7193ba039b859fe936d4da5p-18), C_(0x1.63c48bb9daaef9ef37d87bcf220dp-20), C_(-0x1.0126c6d159333aa9ffefda4ce01fp-25), C_(-0x1.9c0d1ce2d6bcfc30df35efd50ccbp-26), C_(0x1.f835a0a4ec39a7abf277183bd5afp-30), C_(-0x1.e018504ab9e4668fd6a8d7855266p-38), C_(-0x1.2225fdd38424d963076e1b05254fp-37), C_(0x1.9c61eaa91cf12e3330e482deddd5p-42), C_(0x1.3e42beb720a117dd0b00b4bdbe96p-50), C_(-0x1.1199b0b74da5aecc08a2c6ccc14ep-53), C_(0x1.58b777bfe6b1520fc88066b839f4p-62), C_(0x1.001f51ec932dbb77f103a0f7564dp-70), C_(-0x1.7359d9741f8ec2aef5430062a9fap-82), C_(0x1.529c13dec223da6d213dd3aa18cap-99), C_(0x1.bda18c791fe6b89a60c075d9dac4p-128), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(-0x1.55c2dd92705ef29dacf510df5483p-9), C_(-0x1.875690159b946a743f6031d71359p-2), C_(-0x1.756f6cbad17a45f8fdca57537e0cp+1), C_(0x1.522462f959194685a62f604b7373p+2), C_(0x1.6695cecd8b44feab641f1eb716abp+1), C_(-0x1.55d8721e5e38fe7f6b6b27b70f1ap+3), C_(0x1.5a1db9a981431612f8d678081919p+3), C_(-0x1.0851517441a6e04a55b896ef99e1p+3), C_(0x1.4943b00084361d8656967cf91ea6p+2), C_(-0x1.3bad2deaede17c67f605a6915c1cp+1), C_(0x1.7b9d5b96164de0ffe09e1ad56182p-1), C_(0x1.9c78d3c486af6a9c43cd6d82014p-7), C_(-0x1.3adc11c8d3555c352fd89192cfdp-3), C_(0x1.5c787302c6a0e308908c5a566d12p-4), C_(-0x1.79c3b00ffbead0016b7d6948b83ep-6), C_(0x1.24e941b9401cdd0859a58e2c60b8p-8), C_(-0x1.a08712ec476e0f62559aaf166efp-9), C_(0x1.43c84b18b6bc1f9bc1ed4ace622fp-9), C_(-0x1.f9ed905ce1a3fabec727edc27bfdp-11), C_(0x1.28365cf3c20b9931191c65e395d2p-13), C_(0x1.dbc105f0dcd19a43895a2c14219bp-16), C_(-0x1.06fd02a0249f9985362be2e45162p-16), C_(0x1.5536f1beba49f3fa62573cb3aefap-19), C_(-0x1.1eb1b927a2367b6b71d37a3a0b16p-23), C_(-0x1.18cae380af7c0fb2b2883f2e7a9fp-26), C_(0x1.962198a9fb4f49acf27837af9e55p-28), C_(-0x1.4a0510fbc2258e2b740de37281f1p-31), C_(-0x1.5507dda80e4462056671b4ed9443p-36), C_(0x1.0a2a68de8dc560166b8fa1f0e29fp-39), C_(0x1.5b65f0e23da86c0f9732111de5a7p-46), C_(-0x1.652ce69e3233a8cdb2d672d4de9fp-51), C_(-0x1.67baca3a273431e8c1471458d539p-60), C_(0x1.2a22a2a629f6431996d0904b53cbp-67), C_(-0x1.c9d5657e9bda6dc8a405fc5c3a28p-79), C_(0x1.8a4260a0edd15c6744f3a072dd9cp-95), C_(0x1.036f45f65701ff403784f02b67ep-122), C_(0x0p+0) }; }; +template struct daubechies_scaling_integer_grid_imp { static inline constexpr std::array value = { C_(0x0p+0), C_(-0x1.bda79ab9326966a8373d34c403d5p-10), C_(-0x1.d1744a8423410c1cdbc92198fb2ep-4), C_(-0x1.20ed565d8344f24b447d5dad1a94p-3), C_(0x1.7e6fc4bdbfcb347e60be376cd8fcp+0), C_(-0x1.5b972509d68a9e778b59e41da454p+1), C_(0x1.442d2d17d149d7c8adb7128a4a5bp+1), C_(-0x1.e2277288714cc11d45fb77f46c4ap+0), C_(0x1.9379ce87585cf7e36c9df60dab88p+0), C_(-0x1.659214144828aeeba2e8c5e20a63p+0), C_(0x1.20bc0fb1d00715f9a829adb0ea43p+0), C_(-0x1.8283009ebbc1eb153c3ab896b77bp-1), C_(0x1.8fa7bb64ff9ab76d61906bd796f1p-2), C_(-0x1.180d836c3d15c7dc5dd02b639eccp-3), C_(0x1.faecc9e70faee2855b6fee69691fp-7), C_(0x1.07a09dde4a2beade229071da7cf2p-6), C_(-0x1.7b9be86674bb70da10cbd67f2dafp-7), C_(0x1.92c3d8394a5b35c0ac95d90e2cd5p-9), C_(0x1.d5864f4fa99910c57caa7bc9e471p-12), C_(-0x1.559b12ec6e892a72794bb66e37cep-11), C_(0x1.a62f6a612f39a18acf0803b47144p-13), C_(-0x1.0d223ecdbfff75a7fa9690777531p-19), C_(-0x1.0fdbebf048174e10984f842f14c4p-16), C_(0x1.202e4a843fcd49b1f3f621772e1ep-18), C_(-0x1.86705793870af2933b93c10e211p-23), C_(-0x1.992e1c88b7cd13dae9b8e491d4dap-24), C_(0x1.018eb6827a7049feef27c5ca32bcp-26), C_(-0x1.c2b71846e1645f5cc0f2480787d5p-32), C_(-0x1.57e1e9171e5bc5fcf45eafbaecf7p-34), C_(0x1.717b9ae9f68e605d4d193d54fc52p-38), C_(0x1.6027613ce51bde3efec97caba709p-46), C_(-0x1.be324a2f0323f8a5380cb0e8a1d4p-49), C_(0x1.3eb2f19289730e4086f2e07ef711p-57), C_(0x1.bf9c807f8fa727e8ceb75bf12aacp-65), C_(-0x1.2fec3bd7b3920aea071e434958e4p-75), C_(0x1.290ed0b71d4a892449c6c2ced6f5p-91), C_(0x1.86f240571d54c453fa3cc6af74bep-118), C_(0x0p+0) }; }; + + template -constexpr std::array daubechies_scaling_integer_grid() +constexpr inline std::array daubechies_scaling_integer_grid() { - static_assert(p <= 15, "Integer grids only implemented up to 15."); + static_assert(sizeof(Real) <= 16, "Integer grids only computed up to 128 bits of precision."); + static_assert(p <= 18, "Integer grids only implemented up to 18."); static_assert(p > 1, "Integer grids only implemented for p >= 2."); - if constexpr (p == 2) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.5db3d8p+0f, -0x1.76cf5ep-2f, 0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1p+0f, -0x1p+0f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.5db3d742c2655p+0, -0x1.76cf5d0b09955p-2, 0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1p+0, -0x1p+0, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xa.ed9eba16132a9cfp-3L, -0xb.b67ae8584caa73bp-5L, 0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0x8p-3L, -0x8p-3L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.5db3d742c265539d92ba16b83c5cp+0Q, -0x1.76cf5d0b09954e764ae85ae0f17p-2Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1p+0Q, -0x1p+0Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.36602540378443864676372317075293618347140262690519031402790348972596651591"), boost::lexical_cast("-0.366025403784438646763723170752936183471402626905190314027903489725966511383"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.00000000000000000000000000000000000000000000000000000000000000000000000906"), boost::lexical_cast("-1.00000000000000000000000000000000000000000000000000000000000000000000000906"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 3) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.494d42p+0f, -0x1.8b18d8p-2f, 0x1.863744p-4f, 0x1.158088p-8f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.a3719cp+0f, -0x1.1dcb06p+1f, 0x1.19ae7cp-1f, 0x1.69a5e8p-5f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.cef9ccp-1f, -0x1.b676b2p+0f, 0x1.6ced64p-1f, 0x1.8831a2p-4f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.494d414ee19a1p+0, -0x1.8b18d8251ec88p-2, 0x1.863743274d78dp-4, 0x1.158087f14084dp-8, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.a3719cd426dbdp+0, -0x1.1dcb0537f529p+1, 0x1.19ae7cc6c0212p-1, 0x1.69a5e70c6cb47p-5, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.cef9cbb90bf24p-1, -0x1.b676b19591eb6p+0, 0x1.6ced632b23d6cp-1, 0x1.8831a237a06dfp-4, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xa.4a6a0a770cd07e1p-3L, -0xc.58c6c128f64431dp-5L, 0xc.31ba193a6bc67f2p-7L, 0x8.ac043f8a042675ap-11L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xd.1b8ce6a136deae1p-3L, -0x8.ee5829bfa948208p-2L, 0x8.cd73e6360108efbp-4L, 0xb.4d2f386365a363ap-8L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xe.77ce5dc85f9214cp-4L, -0xd.b3b58cac8f5b1f2p-3L, 0xb.676b19591eb63e3p-4L, 0xc.418d11bd036f5a2p-7L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.494d414ee19a0fc1701f9345a28bp+0Q, -0x1.8b18d8251ec886399fc357ab26c9p-2Q, 0x1.863743274d78cfe42daf1d262e43p-4Q, 0x1.158087f14084ceb4f650d2c442e1p-8Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.a3719cd426dbd5c2283e8b6cd98bp+0Q, -0x1.1dcb0537f52904105ab1d13c6abfp+1Q, 0x1.19ae7cc6c0211df5e41745563cbbp-1Q, 0x1.69a5e70c6cb46c73632e8c1bb2d3p-5Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.cef9cbb90bf242979b344cdd1e02p-1Q, -0x1.b676b19591eb63e368ce734bad03p+0Q, 0x1.6ced632b23d6c7c6d19ce6975a06p-1Q, 0x1.8831a237a06deb43265d99170ff1p-4Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.28633506942569674985101130804711703944769149589599367792522563129173884774"), boost::lexical_cast("-0.385836961045875636526124449680167085358759714316248323422384559809411215163"), boost::lexical_cast("0.0952675460037808035264010635719874519288709294849441167080083466112626376337"), boost::lexical_cast("0.00423434561639808314871207806106259398219728893531052878915058190640973293816"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.63845234088408572501497611363560403262776907011369321824757699444308529377"), boost::lexical_cast("-2.23275819046313739501774225255380769832888122180065115110381486246159923436"), boost::lexical_cast("0.550159358274017614990556164200803298774455233260222647464898741593942483269"), boost::lexical_cast("0.0441464913050340550122099747174003669266569184267352853913391264245714335499"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.904249540651993051422557892988008355246955899646975674328615693249103183472"), boost::lexical_cast("-1.71274862195597915426767367896402506574086769894092702298584707974730965003"), boost::lexical_cast("0.712748621955979154267673678964025065740867698940927022985847079747309736056"), boost::lexical_cast("0.0957504593480069485774421070119916447530441003530243256713843067508967355933"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 4) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.01d5e4p+0f, -0x1.15313cp-5f, 0x1.447d2ap-5f, -0x1.817e96p-7f, -0x1.3a0992p-10f, 0x1.3be7b6p-16f, 0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.c6aca8p+0f, -0x1.648654p+1f, 0x1.314492p+0f, -0x1.0d0e14p-3f, -0x1.b6da96p-5f, 0x1.d0194cp-10f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.cf8cc6p+0f, -0x1.0eaaap+2f, 0x1.66e46cp+1f, -0x1.26d9a4p-3f, -0x1.0ae7c2p-2f, 0x1.3a82a2p-6f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.bb2f44p-1f, -0x1.2d48b8p+1f, 0x1.c2597p+0f, 0x1.83800cp-3f, -0x1.233972p-1f, 0x1.bcd16ep-4f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.01d5e443d831dp+0, -0x1.15313c61b3acbp-5, 0x1.447d293e37265p-5, -0x1.817e96e0425edp-7, -0x1.3a0992ca51117p-10, 0x1.3be7b6cb630ap-16, 0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.c6aca7b3a61bp+0, -0x1.6486543c8460bp+1, 0x1.314491c6de2d3p+0, -0x1.0d0e14f1f7dc6p-3, -0x1.b6da96c702378p-5, 0x1.d0194bee1a174p-10, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.cf8cc69cc42a4p+0, -0x1.0eaaa0c1e1c35p+2, 0x1.66e46b718b501p+1, -0x1.26d9a4de19b74p-3, -0x1.0ae7c18dd841ep-2, 0x1.3a82a1b96295bp-6, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.bb2f43bc30b81p-1, -0x1.2d48b852668c6p+1, 0x1.c2596fe640caep+0, 0x1.83800be8c4de9p-3, -0x1.233972e072028p-1, 0x1.bcd16d3945752p-4, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0x8.0eaf221ec18e913p-3L, -0x8.a989e30d9d65a3ap-8L, 0xa.23e949f1b93272cp-8L, -0xc.0bf4b70212f684ap-10L, -0x9.d04c9652888ba27p-13L, 0x9.df3db65b184ff7ep-19L, 0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xe.35653d9d30d7c1cp-3L, -0xb.2432a1e4230589p-2L, 0x9.8a248e36f1695bdp-3L, -0x8.6870a78fbee2d2ap-6L, -0xd.b6d4b63811bbfa2p-8L, 0xe.80ca5f70d0ba167p-13L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xe.7c6634e62152087p-3L, -0x8.7555060f0e1aa31p-1L, 0xb.37235b8c5a805d9p-2L, -0x9.36cd26f0cdb9e9ap-6L, -0x8.573e0c6ec20ec34p-5L, 0x9.d4150dcb14ada24p-9L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xd.d97a1de185c06cap-4L, -0x9.6a45c2933463235p-2L, 0xe.12cb7f320656fb6p-3L, 0xc.1c005f4626f4b41p-6L, -0x9.19cb97039014287p-4L, 0xd.e68b69ca2ba92a2p-7L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.01d5e443d831d2252369827793d3p+0Q, -0x1.15313c61b3acb474231dab078158p-5Q, 0x1.447d293e37264e578b865081223fp-5Q, -0x1.817e96e0425ed094fa1a3a5cf10cp-7Q, -0x1.3a0992ca5111744ed1b4ed1a6607p-10Q, 0x1.3be7b6cb6309fefbda0c9fa167f8p-16Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.c6aca7b3a61af838bb320835a00cp+0Q, -0x1.6486543c8460b11f1a4b4a357fbcp+1Q, 0x1.314491c6de2d2b798153746ca822p+0Q, -0x1.0d0e14f1f7dc5a54f21ce3ff424bp-3Q, -0x1.b6da96c702377f43a25f74c9467p-5Q, 0x1.d0194bee1a1742cd9ebfbba717b8p-10Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.cf8cc69cc42a410e51b272a7a3c6p+0Q, -0x1.0eaaa0c1e1c354610b35262e9078p+2Q, 0x1.66e46b718b500bb2be3ec05c7ac3p+1Q, -0x1.26d9a4de19b73d34cbab42cdd8ccp-3Q, -0x1.0ae7c18dd841d8689ede2f52570cp-2Q, 0x1.3a82a1b96295b447f46661fe5bd8p-6Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.bb2f43bc30b80d947c8a537a20b2p-1Q, -0x1.2d48b852668c646a630392a2b66dp+1Q, 0x1.c2596fe640cadf6ca968f3b30ff3p+0Q, 0x1.83800be8c4de9681c9e31925ce79p-3Q, -0x1.233972e07202850d1be1b9fc8392p-1Q, 0x1.bcd16d394575254330d81aed4886p-4Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.00716997772560226877369133460276614243269615872709037758322022879139279346"), boost::lexical_cast("-0.0338369540528354556415804978382125421803076690774671479970540956429313200871"), boost::lexical_cast("0.0396104627159033280151912944184600514824910295717871419000412898697065939596"), boost::lexical_cast("-0.0117643582057267108368694432974219163588747630020832762453515568184248898506"), boost::lexical_cast("-0.00119795759617697344354027650795474883300903946947182516203285351999723597519"), boost::lexical_cast("0.0000188294132335431331075886223630134570042832501447299211769873202540592685182"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.77607200752218464009377607152250284074663695743190866046592611729429611550"), boost::lexical_cast("-2.78534939722954314249278490573124577055217733739979406318347461197122106723"), boost::lexical_cast("1.19245253663227817434763233908285135923990468684914884672498430320353620291"), boost::lexical_cast("-0.131374515184672958793518896272545745534054969900462421758093746888731275767"), boost::lexical_cast("-0.0535710282202392359535999593909937081760795583068887462544975544197420516562"), boost::lexical_cast("0.00177039647999252279849535078943102427577022132608772400515549278186212987035"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.81074181868840701570186471952563442690666106665351874735735805297770163814"), boost::lexical_cast("-4.22916430410173418303217211054873324461573868001846524669511741276944000468"), boost::lexical_cast("2.80384581607961568534047064875215082573530869410597985718216178513825734509"), boost::lexical_cast("-0.143969810512512114847026478220397278578104668742335564949361408575147520428"), boost::lexical_cast("-0.260649704248921172707994145248897076120067358027001191654083152075225028322"), boost::lexical_cast("0.0191961840951447695448573657402423466719409460283033987590421353038535631199"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.865594975206804045781037550982471109016820894607841596866029151773017425267"), boost::lexical_cast("-2.35378173850503736906839927424067865837551675448364577498051926331538903476"), boost::lexical_cast("1.75917720195210901846322158713800354333385807185616713126178553553138176863"), boost::lexical_cast("0.189209073105856701210355374205350230083317365254957287437467455568014611491"), boost::lexical_cast("-0.568797674081911210441966167774352001750246401183040853068360223333705683711"), boost::lexical_cast("0.108598162322178814055750929689205777691766823947720612483597343776680843464"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 5) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.646bf2p-1f, 0x1.cbd5c2p-2f, -0x1.754196p-3f, 0x1.3100cap-5f, 0x1.8dd2bep-10f, -0x1.c4ab56p-10f, 0x1.3b27d2p-15f, 0x1.75f2b2p-23f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.8eee7ap+0f, -0x1.37cf44p+1f, 0x1.3c6448p+0f, -0x1.784198p-2f, -0x1.64d96ap-6f, 0x1.08fcfcp-5f, -0x1.5e1ffp-10f, -0x1.984da2p-17f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.22c5ccp+1f, -0x1.83ccap+2f, 0x1.524518p+2f, -0x1.2d10dcp+0f, -0x1.549f4cp-1f, 0x1.882acap-2f, -0x1.3d5d0ep-5f, -0x1.65cdcp-11f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.9877acp+1f, -0x1.48c27ap+3f, 0x1.f7fdf6p+2f, 0x1.0b1eap+3f, -0x1.15aaf4p+4f, 0x1.4a4504p+3f, -0x1.050134p+1f, -0x1.13ee46p-4f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.13b9e8p-1f, -0x1.e1e5e6p+0f, 0x1.29ab2ep+1f, -0x1.3d6cc6p+0f, 0x1.0227f8p-1f, -0x1.9ada2ap-2f, 0x1.2c68dap-3f, 0x1.1a66dcp-7f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.646bf1ec64a31p-1, 0x1.cbd5c1bab5148p-2, -0x1.754196833f707p-3, 0x1.3100cab7c3f5fp-5, 0x1.8dd2be8c89c52p-10, -0x1.c4ab558ff2dcfp-10, 0x1.3b27d2d798eedp-15, 0x1.75f2b16626e98p-23, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.8eee7927087b2p+0, -0x1.37cf445237f1bp+1, 0x1.3c64475174b4ap+0, -0x1.7841978e876dbp-2, -0x1.64d969ffaac15p-6, 0x1.08fcfb4783fa8p-5, -0x1.5e1fef6185af9p-10, -0x1.984da10897439p-17, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.22c5cb8d3f23bp+1, -0x1.83cca07a3ead8p+2, 0x1.5245172406b78p+2, -0x1.2d10dba463fc2p+0, -0x1.549f4c5e04f3ap-1, 0x1.882ac9029ddc7p-2, -0x1.3d5d0eda32d8bp-5, -0x1.65cdc06ecf654p-11, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.9877ac926fb3cp+1, -0x1.48c27a70b93cep+3, 0x1.f7fdf60845cfcp+2, 0x1.0b1ea0ee5f9edp+3, -0x1.15aaf38ada16ap+4, 0x1.4a45041b91e1cp+3, -0x1.05013480812dfp+1, -0x1.13ee46114fd85p-4, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.13b9e8c4fdc5p-1, -0x1.e1e5e5cfd0a8p+0, 0x1.29ab2ec864d45p+1, -0x1.3d6cc61e0f6a4p+0, 0x1.0227f72aa277ep-1, -0x1.9ada2a6a9a218p-2, 0x1.2c68da3893cd6p-3, 0x1.1a66dc6d2cfbfp-7, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xb.235f8f632518463p-4L, 0xe.5eae0dd5a8a4298p-5L, -0xb.aa0cb419fb8363cp-6L, 0x9.880655be1fafa7dp-8L, 0xc.6e95f4644e28f3ep-13L, -0xe.255aac7f96e75fp-13L, 0x9.d93e96bcc776751p-18L, 0xb.af958b31374c3acp-26L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xc.7773c93843d9207p-3L, -0x9.be7a2291bf8db95p-2L, 0x9.e3223a8ba5a5065p-3L, -0xb.c20cbc743b6db2dp-5L, -0xb.26cb4ffd560a9d3p-9L, 0x8.47e7da3c1fd3e92p-8L, -0xa.f0ff7b0c2d7cb32p-13L, -0xc.c26d0844ba1cb28p-20L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0x9.162e5c69f91da28p-2L, -0xc.1e6503d1f56bc54p-1L, 0xa.9228b92035bbe8fp-1L, -0x9.6886dd231fe0c2p-3L, -0xa.a4fa62f0279cc8ap-4L, 0xc.41564814eee395ap-5L, -0x9.eae876d196c5b0fp-8L, -0xb.2e6e03767b2a39ap-14L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xc.c3bd64937d9deedp-2L, -0xa.4613d385c9e6eeep+0L, 0xf.bfefb0422e7dd11p-1L, 0x8.58f50772fcf6838p+0L, -0x8.ad579c56d0b531bp+1L, 0xa.522820dc8f0dd92p+0L, -0x8.2809a404096fa64p-2L, -0x8.9f72308a7ec28cep-7L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0x8.9dcf4627ee27fcfp-4L, -0xf.0f2f2e7e85400fbp-3L, 0x9.4d59764326a2533p-2L, -0x9.eb6630f07b521f1p-3L, 0x8.113fb95513bed76p-4L, -0xc.d6d15354d10bf47p-5L, 0x9.6346d1c49e6ae26p-6L, 0x8.d336e36967df815p-10L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.646bf1ec64a308c5df07d89c8e9bp-1Q, 0x1.cbd5c1bab5148530b0e77ecbff92p-2Q, -0x1.754196833f706c7834855fa5579ep-3Q, 0x1.3100cab7c3f5f4fa75b80a67ed4bp-5Q, 0x1.8dd2be8c89c51e7b28b04315346bp-10Q, -0x1.c4ab558ff2dcebdfdc6142054ddep-10Q, 0x1.3b27d2d798eecea1adaf099c04dp-15Q, 0x1.75f2b16626e9875840e692dcf344p-23Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.8eee7927087b240ec5ade1ac81aep+0Q, -0x1.37cf445237f1b72a99ae1be2616ep+1Q, 0x1.3c64475174b4a0c9b8a3ee3dfc2p+0Q, -0x1.7841978e876db6599aa4ad10992fp-2Q, -0x1.64d969ffaac153a6af06dc9cfb72p-6Q, 0x1.08fcfb4783fa7d234eba36053968p-5Q, -0x1.5e1fef6185af966378a125175a7fp-10Q, -0x1.984da1089743964ff5ac0959c3bcp-17Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.22c5cb8d3f23b44faf592c365f5dp+1Q, -0x1.83cca07a3ead78a73330d7cf1a39p+2Q, 0x1.5245172406b77d1d4fdfd2192d87p+2Q, -0x1.2d10dba463fc1840fd45963c568fp+0Q, -0x1.549f4c5e04f3991456e630b1555ep-1Q, 0x1.882ac9029ddc72b4c74d388da98p-2Q, -0x1.3d5d0eda32d8b61e7ff27a395899p-5Q, -0x1.65cdc06ecf6547344a6a8d527f6ap-11Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.9877ac926fb3bdd992f46d848f57p+1Q, -0x1.48c27a70b93cdddc043571f47b88p+3Q, 0x1.f7fdf60845cfba22e0c6bd043e1ep+2Q, 0x1.0b1ea0ee5f9ed06f5107d79a1aafp+3Q, -0x1.15aaf38ada16a6358cd77355f075p+4Q, 0x1.4a45041b91e1bb24fe9a63ad188p+3Q, -0x1.05013480812df4c7388d78daa7bap+1Q, -0x1.13ee46114fd8519c5d7f29b7d91dp-4Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.13b9e8c4fdc4ff9d9c7b93fda5d3p-1Q, -0x1.e1e5e5cfd0a801f531eaef0fe6ap+0Q, 0x1.29ab2ec864d44a65c8f8abfdabb3p+1Q, -0x1.3d6cc61e0f6a43e21f6553d10792p+0Q, 0x1.0227f72aa277daecfc1fddb3c5aep-1Q, -0x1.9ada2a6a9a217e8dbe2b55c6bb8bp-2Q, 0x1.2c68da3893cd5c4c84ac50c60f2ap-3Q, 0x1.1a66dc6d2cfbf029033eb2e70439p-7Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.696136055094319477854858582899623165657477087397982420446214768704637534395"), boost::lexical_cast("0.449057604809486328422544147258783961136679734070279222683095397573769933916"), boost::lexical_cast("-0.182254005318036337838976194133760626404155027995824869298574162909992040160"), boost::lexical_cast("0.0372318229038899280943468571976409825349884675067696944216807399624576154231"), boost::lexical_cast("0.00151757514971408546631660804627799642999930803663956002350203262334698096372"), boost::lexical_cast("-0.00172679624300796683492238574113985690016517858343249085985731373201062373654"), boost::lexical_cast("0.0000375694705183874611122788905987601511712424642186474598567387629170716626883"), boost::lexical_cast("0.000000174133116097374720105581975617394004367103367815124081799014873533525879944"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.55832631304700136656437922101147238270749801987968302608726226056001482368"), boost::lexical_cast("-2.43601278318955192143689593229007692528378574026415581479157815807966800017"), boost::lexical_cast("1.23590512980145429394703890677945755544792211433079804428523927099597048061"), boost::lexical_cast("-0.367437713693886635994756136622838185785128398329531162713235860868138262530"), boost::lexical_cast("-0.0217803511756465465888455643095945877678797679730267716300872503661203118564"), boost::lexical_cast("0.0323471935081436888581585415004509261169517927400595785850252266260883753013"), boost::lexical_cast("-0.00133561991277070103522933081789825027913295746975070671440848910320957810632"), boost::lexical_cast("-0.0000121683847435443138497052509729151564450629140761931082169997649373563390225"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.27166122814949534600896122719444335851364604986118568035816607547755917237"), boost::lexical_cast("-6.05936443269703021458765565610458515567565968210302097303958018874430527787"), boost::lexical_cast("5.28546694296061742660009147793158080678169598815648398102884014016442733462"), boost::lexical_cast("-1.17603848231736696569405849672717768085153722635404167927428726433255541822"), boost::lexical_cast("-0.665277849652262172893211868601932018692793523566973388708885090298621050238"), boost::lexical_cast("0.382975712570864999469720877338520879718972231720745739556192701382764798208"), boost::lexical_cast("-0.0387406625828488850208242053540315894034591845169984253024631712386615226757"), boost::lexical_cast("-0.000682456431469533883023355676818600390864653197380934617983202410607639498017"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.19115216398441064598874856260571078533335587095494743176688738763014884081"), boost::lexical_cast("-10.27374002472233958765271086107000542805707479728145748157559647456760808710"), boost::lexical_cast("7.87487555320626209855129987050336396619016782135024668820907820995265770052"), boost::lexical_cast("8.34748884732558776131996262585236386342026292471024772697407362253973719963"), boost::lexical_cast("-17.35423616637255288734483167824286404110868945013746827031620566538851642130"), boost::lexical_cast("10.32092481026398135762866367591092420975846125781641772354270513968155400150"), boost::lexical_cast("-2.03909927630080258726415694483947450981378728380854211799311168912518310053"), boost::lexical_cast("-0.0673659073845468012269752507200188457226963436043917006078305307227881695785"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.538527750059879292796528780519852438911382070810691516995382579602542914648"), boost::lexical_cast("-1.88241421054468108184078064831664583702656657871925935150851189089967644557"), boost::lexical_cast("2.32553658280235915338790080889465383487576175009269238722259396773724525645"), boost::lexical_cast("-1.23994100793735478720630163791841698087868254804877475832368176128007400006"), boost::lexical_cast("0.504211162523674003883304110865210953390071787279159096400634899652374386912"), boost::lexical_cast("-0.401222861057733743406505260198882985396262380707384195761109616807384220426"), boost::lexical_cast("0.146684365131000298517783121263439809537955817949643689585465029271973791975"), boost::lexical_cast("0.00861821902285686386807072489078876658634008134323161538922679272299835038788"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 6) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.bf65e8p-2f, 0x1.aa2466p-1f, -0x1.89fd1p-2f, 0x1.24737ep-3f, -0x1.a1e9c8p-6f, -0x1.cec09ap-9f, 0x1.cd4fecp-10f, 0x1.05937cp-16f, -0x1.5a00dp-19f, 0x1.0fbc42p-28f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.2faeacp+0f, -0x1.801498p+0f, 0x1.050336p-1f, -0x1.0ffe44p-2f, 0x1.0b11b2p-4f, 0x1.721a1ep-7f, -0x1.af662cp-8f, -0x1.a69b86p-15f, 0x1.45b126p-16f, -0x1.018922p-24f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.1e62dep+1f, -0x1.980b4p+2f, 0x1.a34deap+2f, -0x1.45eb5ep+1f, -0x1.0310f6p-1f, 0x1.da7724p-1f, -0x1.4137dp-2f, 0x1.7eb866p-6f, 0x1.4ebb22p-9f, -0x1.0c5bep-16f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.422fap-2f, -0x1.255a76p+0f, 0x1.484b54p+3f, -0x1.3c98d8p+5f, 0x1.10b7fap+6f, -0x1.d54dd2p+5f, 0x1.804948p+4f, -0x1.77f884p+1f, -0x1.d3687ap-2f, 0x1.816ef8p-8f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.8faefp+0f, -0x1.93816ep+2f, 0x1.33788p+3f, -0x1.c3f2cep+2f, 0x1.c7801ep+1f, -0x1.46377ep+1f, 0x1.77a6f6p+0f, -0x1.c41888p-3f, -0x1.f8b0a6p-5f, 0x1.b96594p-10f, 0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.cb9194p-2f, -0x1.e6b982p+0f, 0x1.7b2e48p+1f, -0x1.fa645ep+0f, 0x1.29da94p-1f, -0x1.8461e6p-2f, 0x1.67c138p-2f, -0x1.c1a09cp-5f, -0x1.0c11f4p-5f, 0x1.0ac90ap-9f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.bf65e79817d28p-2, 0x1.aa2466d50e4a5p-1, -0x1.89fd104c6ff15p-2, 0x1.24737e6f8ebf1p-3, -0x1.a1e9c758a51a1p-6, -0x1.cec09a7ccf05bp-9, 0x1.cd4feb82d2494p-10, 0x1.05937b8388af2p-16, -0x1.5a00cfad970a8p-19, 0x1.0fbc42c672231p-28, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.2faeacbb8e754p+0, -0x1.8014975295b21p+0, 0x1.05033635f5402p-1, -0x1.0ffe44cc8bc7fp-2, 0x1.0b11b28c7d67bp-4, 0x1.721a1d14b8323p-7, -0x1.af662c52c3b7bp-8, -0x1.a69b860b67a33p-15, 0x1.45b12643cf82p-16, -0x1.01892163486cbp-24, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.1e62ddd540b06p+1, -0x1.980b3fe2011f8p+2, 0x1.a34dea8cd59b4p+2, -0x1.45eb5e5e7e3cap+1, -0x1.0310f5a5d86dep-1, 0x1.da7724c65802cp-1, -0x1.4137cfe85b9e6p-2, 0x1.7eb866ddca6bap-6, 0x1.4ebb22d1ac076p-9, -0x1.0c5bdfb916a45p-16, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.422f9f5227e8p-2, -0x1.255a76df553ccp+0, 0x1.484b537c56dedp+3, -0x1.3c98d8a74cd77p+5, 0x1.10b7f9c607064p+6, -0x1.d54dd14cd31afp+5, 0x1.8049478b6740dp+4, -0x1.77f8847acd28bp+1, -0x1.d3687a3bc3933p-2, 0x1.816ef86832622p-8, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.8faeef62b3a8p+0, -0x1.93816e52ba1c8p+2, 0x1.337880b3a9a71p+3, -0x1.c3f2cd3d53133p+2, 0x1.c7801db767804p+1, -0x1.46377db27f625p+1, 0x1.77a6f5e8321cdp+0, -0x1.c4188733407f2p-3, -0x1.f8b0a606c7f79p-5, 0x1.b965933f534b2p-10, 0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.cb91942378a6bp-2, -0x1.e6b982120ca32p+0, 0x1.7b2e4714b2703p+1, -0x1.fa645ee8ca231p+0, 0x1.29da9349c32a2p-1, -0x1.8461e6acf9cb3p-2, 0x1.67c137342024dp-2, -0x1.c1a09b7773a5ap-5, -0x1.0c11f4efd5c0bp-5, 0x1.0ac90a45b7a47p-9, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xd.fb2f3cc0be93e54p-5L, 0xd.512336a872527e6p-4L, -0xc.4fe882637f8a4ep-5L, 0x9.239bf37c75f8764p-6L, -0xd.0f4e3ac528d0419p-9L, -0xe.7604d3e6782db77p-12L, 0xe.6a7f5c169249c7ap-13L, 0x8.2c9bdc1c4579256p-19L, -0xa.d0067d6cb853e5ep-22L, 0x8.7de216339118a43p-31L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0x9.7d7565dc73a9dap-3L, -0xc.00a4ba94ad909b7p-3L, 0x8.2819b1afaa00e4ep-4L, -0x8.7ff226645e3f525p-5L, 0x8.588d9463eb3d6b2p-7L, 0xb.90d0e8a5c191592p-10L, -0xd.7b3162961dbd72bp-11L, -0xd.34dc305b3d198bdp-18L, 0xa.2d89321e7c101dfp-19L, -0x8.0c490b1a4365a0ep-27L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0x8.f316eeaa0582d86p-2L, -0xc.c059ff1008fbde4p-1L, 0xd.1a6f5466acda0c4p-1L, -0xa.2f5af2f3f1e4f4dp-2L, -0x8.1887ad2ec36f306p-4L, 0xe.d3b92632c015e4bp-4L, -0xa.09be7f42dcf2d82p-5L, 0xb.f5c336ee535d213p-9L, 0xa.75d9168d603b071p-12L, -0x8.62defdc8b5224edp-19L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xa.117cfa913f3fd65p-5L, -0x9.2ad3b6faa9e5fc2p-3L, 0xa.425a9be2b6f651fp+0L, -0x9.e4c6c53a66bb9b6p+2L, 0x8.85bfce3038320c3p+3L, -0xe.aa6e8a6698d7b2fp+2L, 0xc.024a3c5b3a06863p+1L, -0xb.bfc423d6694569bp-2L, -0xe.9b43d1de1c99addp-5L, 0xc.0b77c3419310f5ep-11L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xc.7d777b159d3fe93p-3L, -0xc.9c0b7295d0e4242p-1L, 0x9.9bc4059d4d38bf3p+0L, -0xe.1f9669ea9899554p-1L, 0xe.3c00edbb3c02374p-2L, -0xa.31bbed93fb124adp-2L, 0xb.bd37af4190e69cdp-3L, -0xe.20c4399a03f920dp-6L, -0xf.c58530363fbca91p-8L, 0xd.cb2c99fa9a58d79p-13L, 0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xe.5c8ca11bc53594fp-5L, -0xf.35cc10906518e34p-3L, 0xb.d97238a59381a17p-2L, -0xf.d322f7465118802p-3L, 0x9.4ed49a4e1950cdfp-4L, -0xc.230f3567ce5957dp-5L, 0xb.3e09b9a10126b64p-5L, -0xe.0d04dbbb9d2ce8dp-8L, -0x8.608fa77eae05beap-8L, 0x8.5648522dbd23badp-12L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.bf65e79817d27ca7c78972c65f3p-2Q, 0x1.aa2466d50e4a4fcbbebe54f94c3cp-1Q, -0x1.89fd104c6ff149bf7514a7ddf37fp-2Q, 0x1.24737e6f8ebf0ec8bb9fcc85bb71p-3Q, -0x1.a1e9c758a51a08321aa63e9af1d7p-6Q, -0x1.cec09a7ccf05b6ee1ea8f3c17f4ep-9Q, 0x1.cd4feb82d24938f30e41e1af2eap-10Q, 0x1.05937b8388af24ac43ec83967a2ep-16Q, -0x1.5a00cfad970a7cbc309138fd3facp-19Q, 0x1.0fbc42c672231485a0bcbfe7e34bp-28Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.2faeacbb8e753b40eb856e00f522p+0Q, -0x1.8014975295b2136d5a1adb454387p+0Q, 0x1.05033635f5401c9b60636a32526ap-1Q, -0x1.0ffe44cc8bc7ea4a6ce4734d8d36p-2Q, 0x1.0b11b28c7d67ad63229fbc3aa7dap-4Q, 0x1.721a1d14b8322b2431432e8b800fp-7Q, -0x1.af662c52c3b7ae55063672df3c7fp-8Q, -0x1.a69b860b67a33179a8c7a5f6b2acp-15Q, 0x1.45b12643cf8203bdf796367d51eep-16Q, -0x1.01892163486cb41cb64453f7616fp-24Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.1e62ddd540b05b0cc5ce587007d5p+1Q, -0x1.980b3fe2011f7bc878be7d399794p+2Q, 0x1.a34dea8cd59b4187717c6efb0662p+2Q, -0x1.45eb5e5e7e3c9e9ae26ca4aa207cp+1Q, -0x1.0310f5a5d86de60ba877dea685a5p-1Q, 0x1.da7724c65802bc95482213f980a5p-1Q, -0x1.4137cfe85b9e5b04e10239758a3cp-2Q, 0x1.7eb866ddca6ba425f9e4eb854a4dp-6Q, 0x1.4ebb22d1ac0760e1461881059843p-9Q, -0x1.0c5bdfb916a449da5acc3ccfdc72p-16Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.422f9f5227e7facaa94dd7d9e31p-2Q, -0x1.255a76df553cbf84e8a0b0613039p+0Q, 0x1.484b537c56deca3daefc656e3b6ep+3Q, -0x1.3c98d8a74cd7736b60af4e604261p+5Q, 0x1.10b7f9c607064185ab2dfc58353fp+6Q, -0x1.d54dd14cd31af65e5343fc875b57p+5Q, 0x1.8049478b6740d0c6b010047a06c3p+4Q, -0x1.77f8847acd28ad3549099ae2105ep+1Q, -0x1.d3687a3bc39335bac7f281e76bbep-2Q, 0x1.816ef86832621ebc63e47cd2b70fp-8Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.8faeef62b3a7fd26eb98dd7f984ap+0Q, -0x1.93816e52ba1c8483ff81ea3e324ep+2Q, 0x1.337880b3a9a717e67b9cd7fec812p+3Q, -0x1.c3f2cd3d53132aa78f87aee07639p+2Q, 0x1.c7801db7678046e8ebdb22cf642bp+1Q, -0x1.46377db27f624959a2b9b7777bb1p+1Q, 0x1.77a6f5e8321cd39a930db39033fap+0Q, -0x1.c4188733407f241acae534ed0f5dp-3Q, -0x1.f8b0a606c7f795229d5947447836p-5Q, 0x1.b965933f534b1af276b67227f89dp-10Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.cb91942378a6b29e2dd51c51bfa9p-2Q, -0x1.e6b982120ca31c68b89329c09872p+0Q, 0x1.7b2e4714b270342ea6ba899785ecp+1Q, -0x1.fa645ee8ca231003817fbe32a47bp+0Q, 0x1.29da9349c32a19bed5b810cc4b88p-1Q, -0x1.8461e6acf9cb2af90934d76c7932p-2Q, 0x1.67c137342024d6c8052e3d876acdp-2Q, -0x1.c1a09b7773a59d1a65f356773daap-5Q, -0x1.0c11f4efd5c0b7d44ac1c3a0720ap-5Q, 0x1.0ac90a45b7a47759a7a92738fc7ep-9Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.436912172945044907144228485347825621410539534551633490282829655111997130403"), boost::lexical_cast("0.832308972842970561072656780688484969909152422815912990040758264557720345453"), boost::lexical_cast("-0.384754423776017240823727817356603521560970688156341806103424918665893513072"), boost::lexical_cast("0.142798412112682208241683440145206755760599607930024614732186357484695172147"), boost::lexical_cast("-0.0255073973408613836618989912216699702582536490819800245599669619734869162144"), boost::lexical_cast("-0.00353052030405191587644014357031569208954383867587514877878893763115391697093"), boost::lexical_cast("0.00175976633973310294687791686419090228541208847068173308405667330457900123359"), boost::lexical_cast("0.0000155911507261447556301511828782318895561336507906997931765895708973813706967"), boost::lexical_cast("-0.00000257792449680050051904829803613695691516006402149134709283993808809283908364"), boost::lexical_cast("0.00000000395427041670150922621803883961042354855917494285626611817873341124068492943"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.18625907496467146792209724298189804516984008871355130996941892999482122848"), boost::lexical_cast("-1.50031419531087122680662801195848817668641322402194798020924445478349906731"), boost::lexical_cast("0.509790128790541728679843731350866150242721024787663006627811106004296791437"), boost::lexical_cast("-0.265618395790575259239344136932196822481573416259521963554257379369647420831"), boost::lexical_cast("0.0652024244844486127834346214927829793557907226893556085427354685093316589934"), boost::lexical_cast("0.0112946168896442313978324044573675493852036148359725468126097329498236688742"), boost::lexical_cast("-0.00658262807952680441249220488086069578322307368873900509784589482921684655699"), boost::lexical_cast("-0.0000503787415155786809007366413438496538050960506069818027681542836778698200709"), boost::lexical_cast("0.0000194127553776389220829735998255824906496581738755358150095212114606531254267"), boost::lexical_cast("-0.0000000599621948105659258834698507620391902991796020771034688754036929095102873206"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.23739216721276332338878224928813443319380137365001617475449729702460814553"), boost::lexical_cast("-6.37568661757222064818087007988064952244769736524323206091611472179022669583"), boost::lexical_cast("6.55163062814101601777779848466095021703767404055811314444036330143823846521"), boost::lexical_cast("-2.54624538053437717302677939425802942100881803777676322897540130575773519940"), boost::lexical_cast("-0.505988766188433733744368526707172451758173834991466388525773967340764566418"), boost::lexical_cast("0.926690243923081056914375322621819979047483305911073890365009540068892624972"), boost::lexical_cast("-0.313689468914985485830723560991137056324820674194725652065219926423948539134"), boost::lexical_cast("0.0233593945078271825857280125900496031710930273733853151360419856695906224412"), boost::lexical_cast("0.00255379486119272204906336921540559285976842099994098440071430993999358629514"), boost::lexical_cast("-0.0000159954358632619330058765393713737703102562863421786141165128286490666376159"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.314634789838216004347219278851224957182628881138090829610427965680979138191"), boost::lexical_cast("-1.14591162636246490124057063708997784842452557437526442884613276777690297174"), boost::lexical_cast("10.25919508252169379158306431282332110722656695790182072665295187397284234950"), boost::lexical_cast("-39.57463198378803222763091210153395253214575080397200817757429653138129855280"), boost::lexical_cast("68.17966374795793307063651046839796286891828378129757556293454079229695233480"), boost::lexical_cast("-58.66299686450235667243637029946865368099558139408845032747908498579236804890"), boost::lexical_cast("24.01789049581934793489690384929366103321726646566966212731103293708083587360"), boost::lexical_cast("-2.93727165218507960698217968145386367512071654027601850078522746893001474631"), boost::lexical_cast("-0.456453237436011258659809322589189754978378863312423941968681370133465846399"), boost::lexical_cast("0.00588124813675386548614413276946752512020709001701613014446955498244051671873"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.56126304778777576443050160863879708904118592078755406627901576276101093399"), boost::lexical_cast("-6.30477483824547160848980524578141943454970012363516565523116238032800392998"), boost::lexical_cast("9.60845980730411762808214955695432741370084853414448911176063682241066899084"), boost::lexical_cast("-7.06169444073411748688716938924586604983878232115464543856592115083298206081"), boost::lexical_cast("3.55859729247367992138320272198938237654252341074503039432837735029655798290"), boost::lexical_cast("-2.54856845107748801044054274844945341537099829623280578974997775828865307664"), boost::lexical_cast("1.46739136618463144606525570352038426862829638293144420092004098891852838139"), boost::lexical_cast("-0.220749908687195857585648726228092057311307565129699615600606738330860600964"), boost::lexical_cast("-0.0616076700882776753864153489569808343372159974190746897916588825239020343770"), boost::lexical_cast("0.00168379508234587882847186755892064349515005496287341565125598591763515542636"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.448797526040073344800625409665848168336823300039318051519325620983465942323"), boost::lexical_cast("-1.90126812878282830955681810258116249323860290817569491974905637501312440751"), boost::lexical_cast("2.96234978209111122166662326226946007783574110910320150870148188012479737533"), boost::lexical_cast("-1.97809403594341071138805115779455370352957722549769910191794603383219959474"), boost::lexical_cast("0.581745722536272503632230565756890997548927114703803943288685477190719512918"), boost::lexical_cast("-0.379279712970354381573734078512746842789448242321016101227184675836523585288"), boost::lexical_cast("0.351322996670238331331118965555902223077733168124153384152743641838801971515"), boost::lexical_cast("-0.0548861538369364702831870995984759190374434786821402336660504725795046392356"), boost::lexical_cast("-0.0327234062121349553823389676664543405404659969276540517449952095914830314788"), boost::lexical_cast("0.00203541040796942675353120290529183233631315963372752064299614671505036863492"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 7) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.033292p-2f, 0x1.027f6cp+0f, -0x1.919d92p-2f, 0x1.7a0caap-3f, -0x1.1142c4p-4f, 0x1.50e2d6p-7f, 0x1.d0243ap-10f, -0x1.1d4c6cp-11f, -0x1.17d0b4p-14f, 0x1.310ffep-19f, -0x1.509d12p-25f, -0x1.57f8e6p-36f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.9ec434p-1f, -0x1.ca0692p-2f, -0x1.2d988ap-1f, 0x1.145888p-2f, -0x1.4ab3dp-6f, -0x1.4e8938p-5f, 0x1.5cb5dep-6f, -0x1.051eecp-8f, 0x1.0efaecp-14f, 0x1.6a87a6p-15f, -0x1.4e8b2ap-23f, -0x1.54fd9p-33f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.e0eaccp+0f, -0x1.5362d8p+2f, 0x1.70aa18p+2f, -0x1.86bc52p+1f, 0x1.570932p-2f, 0x1.9d599ap-1f, -0x1.18b244p-1f, 0x1.fe16d2p-4f, 0x1.eb4ccap-12f, -0x1.4e09dp-9f, 0x1.c4a78ap-16f, 0x1.cb0cccp-25f, -0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.4ca934p-1f, -0x1.492e7p+1f, 0x1.171de6p+4f, -0x1.1e704ep+6f, 0x1.23bcc4p+7f, -0x1.415156p+7f, 0x1.7ff792p+6f, -0x1.a43b42p+4f, 0x1.833e7p-4f, 0x1.13b5aap+0f, -0x1.6365bp-6f, -0x1.64d198p-14f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.525f0cp+1f, -0x1.7eda4cp+3f, 0x1.578438p+4f, -0x1.40c582p+4f, 0x1.9815ccp+3f, -0x1.22247ap+3f, 0x1.8c2cccp+2f, -0x1.ffd4fcp+0f, -0x1.3be428p-3f, 0x1.7c490ep-3f, -0x1.23f976p-7f, -0x1.1f66b2p-14f, -0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.80a316p+0f, -0x1.ce7e68p+2f, 0x1.ac8b3cp+3f, -0x1.74c81ep+3f, 0x1.4010d2p+2f, -0x1.34da8p+1f, 0x1.2d09cap+1f, -0x1.97de12p-1f, -0x1.9df5b4p-2f, 0x1.16c54ap-2f, -0x1.e323c6p-6f, -0x1.c9a574p-12f, 0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.a096c8p-3f, -0x1.01d8c8p+0f, 0x1.099a08p+1f, -0x1.40ce38p+1f, 0x1.2a5764p+1f, -0x1.e6f03p+0f, 0x1.3544c2p+0f, -0x1.6af582p-1f, 0x1.256afep-1f, -0x1.656934p-2f, 0x1.4b884p-4f, 0x1.24061ep-9f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.033291a6c76d7p-2, 0x1.027f6bf7952cep+0, -0x1.919d92c6034c4p-2, 0x1.7a0ca906acc48p-3, -0x1.1142c3515ec43p-4, 0x1.50e2d6421ee26p-7, 0x1.d0243aab613f8p-10, -0x1.1d4c6c249bf0fp-11, -0x1.17d0b3032ba5cp-14, 0x1.310ffd8b56401p-19, -0x1.509d126dab99dp-25, -0x1.57f8e69552537p-36, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.9ec434341eaeep-1, -0x1.ca0692ca7743ap-2, -0x1.2d988a986b0dfp-1, 0x1.145887eacb11p-2, -0x1.4ab3cf0bae2a6p-6, -0x1.4e8938899ee37p-5, 0x1.5cb5de436bfaep-6, -0x1.051eebbefaf7cp-8, 0x1.0efaec65edbccp-14, 0x1.6a87a6b931edcp-15, -0x1.4e8b2a27fe065p-23, -0x1.54fd8f0625f12p-33, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.e0eacca617ebcp+0, -0x1.5362d7fe36c57p+2, 0x1.70aa17b7adc0ep+2, -0x1.86bc52429f3a4p+1, 0x1.5709310e8d1f6p-2, 0x1.9d599937b31fbp-1, -0x1.18b244e50df67p-1, 0x1.fe16d1a3cfb3ep-4, 0x1.eb4cc917dd1cdp-12, -0x1.4e09cf12f0cddp-9, 0x1.c4a78957d2798p-16, 0x1.cb0ccbca08e79p-25, -0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.4ca9343b32368p-1, -0x1.492e70f2635c1p+1, 0x1.171de5ca88cecp+4, -0x1.1e704d84a1075p+6, 0x1.23bcc34d6a52ap+7, -0x1.415156a34428ap+7, 0x1.7ff7929036dddp+6, -0x1.a43b4147c122cp+4, 0x1.833e6f5afaca5p-4, 0x1.13b5aaaf6c71dp+0, -0x1.6365af2495a87p-6, -0x1.64d19861a8338p-14, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.525f0cb11c272p+1, -0x1.7eda4b6a23329p+3, 0x1.578437542fe4fp+4, -0x1.40c582473fa8dp+4, 0x1.9815cb7223c1p+3, -0x1.222479cd96eeap+3, 0x1.8c2cccc6ee34dp+2, -0x1.ffd4fb5b3918p+0, -0x1.3be427404fe7dp-3, 0x1.7c490d447fad3p-3, -0x1.23f9756392d0fp-7, -0x1.1f66b1e781529p-14, -0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.80a316d21a0efp+0, -0x1.ce7e682714367p+2, 0x1.ac8b3ccd718c4p+3, -0x1.74c81d1a27df6p+3, 0x1.4010d1eedca9ap+2, -0x1.34da807d2aaedp+1, 0x1.2d09c9846b582p+1, -0x1.97de12ea03ca1p-1, -0x1.9df5b4fe2e272p-2, 0x1.16c54a229aae1p-2, -0x1.e323c5b92bd16p-6, -0x1.c9a573f22c19bp-12, 0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.a096c8f7fc8abp-3, -0x1.01d8c748e11fap+0, 0x1.099a073a7c7b4p+1, -0x1.40ce386ca776ep+1, 0x1.2a57634989c52p+1, -0x1.e6f030cb23fcp+0, 0x1.3544c2755b1d8p+0, -0x1.6af581a622d41p-1, 0x1.256afda077268p-1, -0x1.6569331439298p-2, 0x1.4b88409bdd117p-4, 0x1.24061e2653bdbp-9, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0x8.19948d363b6b511p-5L, 0x8.13fb5fbca966de8p-3L, -0xc.8cec96301a62254p-5L, 0xb.d0654835662420dp-6L, -0x8.8a161a8af621982p-7L, 0xa.8716b210f7132a1p-10L, 0xe.8121d55b09fc1bcp-13L, -0x8.ea636124df87704p-14L, -0x8.be8598195d2e2f7p-17L, 0x9.887fec5ab2008edp-22L, -0xa.84e8936d5cce758p-28L, -0xa.bfc734aa929b8c7p-39L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xc.f621a1a0f576c66p-4L, -0xe.50349653ba1cf48p-5L, -0x9.6cc454c3586f53bp-4L, 0x8.a2c43f565887ceap-5L, -0xa.559e785d7152dc2p-9L, -0xa.7449c44cf71b8f2p-8L, 0xa.e5aef21b5fd6dcfp-9L, -0x8.28f75df7d7bdeb9p-11L, 0x8.77d7632f6de608ep-17L, 0xb.543d35c98f6e2d6p-18L, -0xa.7459513ff03276p-26L, -0xa.a7ec78312f88c67p-36L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xf.07566530bf5dc3p-3L, -0xa.9b16bff1b62b5b5p-1L, 0xb.8550bdbd6e073adp-1L, -0xc.35e29214f9d1fbdp-2L, 0xa.b849887468fb1bp-5L, 0xc.eaccc9bd98fd7eap-4L, -0x8.c59227286fb3ad2p-4L, 0xf.f0b68d1e7d9f3f6p-7L, 0xf.5a6648bee8e6ab7p-15L, -0xa.704e7897866e7ecp-12L, 0xe.253c4abe93cc026p-19L, 0xe.58665e50473cb0fp-28L, -0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xa.6549a1d991b412ap-4L, -0xa.497387931ae0b61p-2L, 0x8.b8ef2e544676158p+1L, -0x8.f3826c25083a83ap+3L, 0x9.1de61a6b5294d86p+4L, -0xa.0a8ab51a2145353p+4L, 0xb.ffbc9481b6eebc6p+3L, -0xd.21da0a3e0916379p+1L, 0xc.19f37ad7d65262bp-7L, 0x8.9dad557b638eaddp-3L, -0xb.1b2d7924ad4363p-9L, -0xb.268cc30d419bc95p-17L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xa.92f86588e139024p-2L, -0xb.f6d25b5119947a7p+0L, 0xa.bc21baa17f27afep+1L, -0xa.062c1239fd4649cp+1L, 0xc.c0ae5b911e082dep+0L, -0x9.1123ce6cb774e8cp+0L, 0xc.6166663771a6508p-1L, -0xf.fea7dad9c8c0222p-3L, -0x9.df213a027f3e892p-6L, 0xb.e2486a23fd69714p-6L, -0x9.1fcbab1c968774dp-10L, -0x8.fb358f3c0a94afap-17L, -0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xc.0518b690d0776a4p-3L, -0xe.73f34138a1b3bfep-1L, 0xd.6459e66b8c620fp+0L, -0xb.a640e8d13efae1ap+0L, 0xa.00868f76e54ce56p-1L, -0x9.a6d403e95576488p-2L, 0x9.684e4c235ac0d81p-2L, -0xc.bef097501e50849p-4L, -0xc.efada7f17138d13p-5L, 0x8.b62a5114d570977p-5L, -0xf.191e2dc95e8b372p-9L, -0xe.4d2b9f9160cd482p-15L, 0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xd.04b647bfe4558acp-6L, -0x8.0ec63a4708fd39bp-3L, 0x8.4cd039d3e3da0c5p-2L, -0xa.0671c3653bb7036p-2L, 0x9.52bb1a4c4e28fdbp-2L, -0xf.378186591fdfef3p-3L, 0x9.aa2613aad8ec175p-3L, -0xb.57ac0d3116a0b56p-4L, 0x9.2b57ed03b933f03p-4L, -0xb.2b4998a1c94bea3p-5L, 0xa.5c4204dee88b95dp-7L, 0x9.2030f1329ded9e3p-12L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.033291a6c76d6a2177301a6491e8p-2Q, 0x1.027f6bf7952cdbcf397ade5b83ap+0Q, -0x1.919d92c6034c44a7ed45a578713cp-2Q, 0x1.7a0ca906acc4841a1191b023a485p-3Q, -0x1.1142c3515ec433047c393c69962fp-4Q, 0x1.50e2d6421ee2654230b309723685p-7Q, 0x1.d0243aab613f83777184da54a80dp-10Q, -0x1.1d4c6c249bf0ee08cde9105ae0e2p-11Q, -0x1.17d0b3032ba5c5edbe3115298755p-14Q, 0x1.310ffd8b564011dafec30497e547p-19Q, -0x1.509d126dab99ceafee21c5b15f2ep-25Q, -0x1.57f8e6955253718d03dd42dcc06ep-36Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.9ec434341eaed8ccc6e8d7244a33p-1Q, -0x1.ca0692ca77439e8f752ca148c144p-2Q, -0x1.2d988a986b0dea756341b6b8b7c2p-1Q, 0x1.145887eacb10f9d392eed69a9335p-2Q, -0x1.4ab3cf0bae2a5b8432a0a181639cp-6Q, -0x1.4e8938899ee371e40cd7b7528ae9p-5Q, 0x1.5cb5de436bfadb9e555d33c55719p-6Q, -0x1.051eebbefaf7bd71954e297a61ffp-8Q, 0x1.0efaec65edbcc11b181ba7073e2cp-14Q, 0x1.6a87a6b931edc5ab5423dbf1babfp-15Q, -0x1.4e8b2a27fe064ec01f627183042bp-23Q, -0x1.54fd8f0625f118cd9bcdded88d81p-33Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.e0eacca617ebb860573873f7b1a4p+0Q, -0x1.5362d7fe36c56b6a443e9d6141a8p+2Q, 0x1.70aa17b7adc0e75a9ffe0b5a33b6p+2Q, -0x1.86bc52429f3a3f79bb4f1cb73763p+1Q, 0x1.5709310e8d1f635f77e733f31613p-2Q, 0x1.9d599937b31fafd3d66db2bf1cbbp-1Q, -0x1.18b244e50df675a487d76601b0e9p-1Q, 0x1.fe16d1a3cfb3e7ecc6834f2061cfp-4Q, 0x1.eb4cc917dd1cd56dce6a9280b03bp-12Q, -0x1.4e09cf12f0cdcfd873bae5583582p-9Q, 0x1.c4a78957d279804ccd5115f6146ap-16Q, 0x1.cb0ccbca08e7961d7bc2f676b666p-25Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.4ca9343b3236825367445e2a7e79p-1Q, -0x1.492e70f2635c16c262e6190afacep+1Q, 0x1.171de5ca88cec2afbea5499914ebp+4Q, -0x1.1e704d84a10750732762c3f4d8bap+6Q, 0x1.23bcc34d6a529b0b422faf672516p+7Q, -0x1.415156a34428a6a6c08cde7dee49p+7Q, 0x1.7ff7929036ddd78bf54cfc378272p+6Q, -0x1.a43b4147c122c6f143d7b591007fp+4Q, 0x1.833e6f5afaca4c566ce598593c06p-4Q, 0x1.13b5aaaf6c71d5b914583e48ae7dp+0Q, -0x1.6365af2495a86c5f48d9bd1a47dp-6Q, -0x1.64d19861a833792a3ce80f84d83cp-14Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.525f0cb11c2720485c66b9e19f02p+1Q, -0x1.7eda4b6a23328f4e2cec098f6666p+3Q, 0x1.578437542fe4f5fbe4cefec73f0cp+4Q, -0x1.40c582473fa8c93703a1216d1613p+4Q, 0x1.9815cb7223c105bc2b63ed01a5fep+3Q, -0x1.222479cd96ee9d17f59bff4df592p+3Q, 0x1.8c2cccc6ee34ca0f24458389d35dp+2Q, -0x1.ffd4fb5b3918044492967474d1cep+0Q, -0x1.3be427404fe7d12432d600f4382ep-3Q, 0x1.7c490d447fad2e27fa6b12a0d504p-3Q, -0x1.23f9756392d0ee9915448c1be2b1p-7Q, -0x1.1f66b1e7815295f48755fd4e3126p-14Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.80a316d21a0eed480c84ea711d9ep+0Q, -0x1.ce7e6827143677fbd12dabe06e9fp+2Q, 0x1.ac8b3ccd718c41df56b9c167f638p+3Q, -0x1.74c81d1a27df5c33454de2219e89p+3Q, 0x1.4010d1eedca99cac8148c11888d4p+2Q, -0x1.34da807d2aaec910bcf3aa770bf1p+1Q, 0x1.2d09c9846b581b01a4323f49de6p+1Q, -0x1.97de12ea03ca10913f6e6b1c03cap-1Q, -0x1.9df5b4fe2e271a26f87f7a1f78fbp-2Q, 0x1.16c54a229aae12ed509d340bab6bp-2Q, -0x1.e323c5b92bd166e33ab5b4f9635p-6Q, -0x1.c9a573f22c19a9032c5430df4c8ep-12Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.a096c8f7fc8ab1575820ee7a8d4ep-3Q, -0x1.01d8c748e11fa735da05e73f8394p+0Q, 0x1.099a073a7c7b41898468a5bd14cep+1Q, -0x1.40ce386ca776e06ba6f31ba7dadep+1Q, 0x1.2a57634989c51fb583fc11fc2c8bp+1Q, -0x1.e6f030cb23fbfde6dfddcd33a7b8p+0Q, 0x1.3544c2755b1d82eac792a5860a61p+0Q, -0x1.6af581a622d416ac06a3c40b5b79p-1Q, 0x1.256afda077267e050d8164debfb4p-1Q, -0x1.6569331439297d46e21a065d5029p-2Q, 0x1.4b88409bdd1172b9682df8963184p-4Q, 0x1.24061e2653bdb3c5fd153e823b33p-9Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.253122592739470610621616401361877779229479815458388533109264465986705450631"), boost::lexical_cast("1.00975680155277152973790111993384657471987193942368029780473312379324667581"), boost::lexical_cast("-0.392202657066104148408811882527482753596247632610867974599325631568154086472"), boost::lexical_cast("0.184594460025979019600750648078960441521039122548921838323798916634848032145"), boost::lexical_cast("-0.0667140607455829924370836933031099116268134098764011251351247996652005711545"), boost::lexical_cast("0.0102809473212267076120194571706337484167301394893291398778100853288079049731"), boost::lexical_cast("0.00177055938806458366110052669692669972802589253940700837389391312187949930155"), boost::lexical_cast("-0.000544163751852595970300441890153871700803533167101690775895643543400091558287"), boost::lexical_cast("-0.0000667131499081179164202264668107341250409611901330351905468822246841842144516"), boost::lexical_cast("0.00000227289246416658269412624892928823545347265264470652051954608031771296427329"), boost::lexical_cast("-0.0000000391869762033530665296480229865041718561429039745272396909531056977677153636"), boost::lexical_cast("-0.0000000000195525597303995056555942742975229891249637237818874029912606477521320941521"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.810090667116438906125084608325336635858558427183760467122011143848709217936"), boost::lexical_cast("-0.447290700538193081726926232920918677934473900641168827205793350756780984978"), boost::lexical_cast("-0.589054423433051105713954740965807748202549360662853302324635538959794377897"), boost::lexical_cast("0.269868968682900756914311183719700141732291233181671524008708012629904619787"), boost::lexical_cast("-0.0201844713144249320028138388205587200490715428568451868566842270755978350937"), boost::lexical_cast("-0.0408369163751242597466561287451981528641525226367711639411234490178637813143"), boost::lexical_cast("0.0212835951367080143883784719158797691366262981606201798553446386989113825786"), boost::lexical_cast("-0.00398438697355263021802052679010575079656365873865505148350654941430150902211"), boost::lexical_cast("0.0000646067070125676169190646922848512647427733001662437032209422253843012104636"), boost::lexical_cast("0.0000432169303593002095810035589027522962115335866552588130271810048010912722413"), boost::lexical_cast("-0.000000155784009025835660972833383558489901619201115987867017226055817524579424688"), boost::lexical_cast("-0.000000000155064510010241891136131541951717660675464153823551577127554599571639340405"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.87858275465980185082075059484687011254996371468315226671206152209070678246"), boost::lexical_cast("-5.30290794206219714496696347944500864617861621722571539095236274472680863374"), boost::lexical_cast("5.76038163125396215102934581086456598753529517251498951765403500351566767851"), boost::lexical_cast("-3.05262211087252131812326158576179299340031820314628130064826335395880941778"), boost::lexical_cast("0.334996000779283942861292317865019419501179829373743199871525404727592261010"), boost::lexical_cast("0.807324207352905330783228925068712255942845486187777944329076813046262028898"), boost::lexical_cast("-0.548235085449943077303537436963997364378850297210952683341512369648428848400"), boost::lexical_cast("0.124533480554402033115092620895174942570554514605089596521009703165626365178"), boost::lexical_cast("0.000468540137709608257946988592597297317335345745375177878078879095839559326245"), boost::lexical_cast("-0.00254851010092381349764580405159840052627991728234093528430327277020566808108"), boost::lexical_cast("0.0000269803070687479137062075450477716687058854979150244734967367615928087830171"), boost::lexical_cast("0.0000000534404516891100448405444096173981846862572475827871576787009651989666011194"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.649728424287883593075915713524545924783310332923624324175524503407444525226"), boost::lexical_cast("-2.57172977290494549793891044329117749573728410170896098271259318361359045523"), boost::lexical_cast("17.44479922404291076498745112746722871408945222683998804378328855565199405640"), boost::lexical_cast("-71.60967070801582718948073283130611179366722642889690312945916561433081250530"), boost::lexical_cast("145.86867753909000641239876531969663035434018992110863939875912524044321317900"), boost::lexical_cast("-160.65886411864296450491377746275540090856151126704519657432554150664253629400"), boost::lexical_cast("95.99177003226164787960050084081167617878900086549469777087475435337607996430"), boost::lexical_cast("-26.26446655301167408645778203802638858259056547097299290641658148431177104090"), boost::lexical_cast("0.0945419645137684612631871190010186728744115673914304553269038199852068315336"), boost::lexical_cast("1.07699076445391680627259708274414783686660624009083404578382123547772944786"), boost::lexical_cast("-0.0216917238597838193019899484025795776622827268816981287975371913591323350722"), boost::lexical_cast("-0.0000850722149388195052244794635893235241011583434623169919987280838271411539579"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.64352568290660717383488785687771176736791104693177525854341276422360953032"), boost::lexical_cast("-11.96414728860834656491684620425334470999319544817775050560074926228961346460"), boost::lexical_cast("21.46977932820874234919552398698675631801639393733709025528680976773677869130"), boost::lexical_cast("-20.04821994620810903573440830918637861650658462633252001448356816125828318470"), boost::lexical_cast("12.75266048710730678983761121302121021721233371785195914379176723194342934110"), boost::lexical_cast("-9.06695261148657362033536649492341832971872918291204156753481081587833932402"), boost::lexical_cast("6.19023436953359562968364270001994684253311540563623534733039001879957023961"), boost::lexical_cast("-1.99934359528660371790683912571810391676063304067432355179876753356952054619"), boost::lexical_cast("-0.154243761682653886850234521472448371875938984350115568709864935738395300610"), boost::lexical_cast("0.185686210301318679459789457754099133235266189449860784374121835441650545927"), boost::lexical_cast("-0.00891035301096690191056566243729350984965667867039696309182495485016806697240"), boost::lexical_cast("-0.0000685217743168943571948966687368236602823360897726181069159545607185161189239"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.50248854283750761908546072869048821088132450769069501088052480873059396056"), boost::lexical_cast("-7.22646526161484059523124385500321592540705032637199727092718371044938622631"), boost::lexical_cast("13.39199676633541734287658783725542834810025902906082654104028345517237151680"), boost::lexical_cast("-11.64942793949647239507297332186810695848666694958647083520681009041022780270"), boost::lexical_cast("5.00102661444057065419908749038327665570051567187076973678545304964939038004"), boost::lexical_cast("-2.41291814910561289346200219868321750732375141617088099871044781666393737553"), boost::lexical_cast("2.35186118093287252501820923028537286425715059555956136712165596831136965350"), boost::lexical_cast("-0.796616164270648967111841215195534682870000441132645044906036039054243939416"), boost::lexical_cast("-0.404257610334332808361375570208558025875438251716421264701309289474764401907"), boost::lexical_cast("0.272236975061487095514001649424045723282019885609650402120668262278630947181"), boost::lexical_cast("-0.0294885092632145241422905453679850353376394211407104294790349538471440716050"), boost::lexical_cast("-0.000436445522733053311620229711993666920722883672377214017763644242652824250344"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.203412599628398057633579265447859538789857395107674228547599630740965235246"), boost::lexical_cast("-1.00721402673036540834580779114189574939317230453601344322652356453222562469"), boost::lexical_cast("2.07501306873106199194436015743412574197776374012334226264667067621104388301"), boost::lexical_cast("-2.50629334740999977272680186302494744195967724949010390385922060059896772157"), boost::lexical_cast("2.33079186526041669838674663465091103063086959411404278532872827025632075003"), boost::lexical_cast("-1.90210251769529744977701199943741071402521093061881076298433872730941167746"), boost::lexical_cast("1.20808043828139059668185989249916782761200302655255371273149597921930707587"), boost::lexical_cast("-0.708904315500525840865022566665627479869867191675628771870881198841529204782"), boost::lexical_cast("0.573081899488511389976606360698320302247199472202129763974755593812367045224"), boost::lexical_cast("-0.349034116849261878956804444377809483590457734709780607298538959951976647643"), boost::lexical_cast("0.0809404872687234817933056436803663367147851456539523123991589358626438323968"), boost::lexical_cast("0.00222796552694813425499071023694009086590703727664242361109396513146307543467"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 8) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.184a0cp-3f, 0x1.fbaa04p-1f, -0x1.596f5cp-3f, 0x1.234876p-4f, -0x1.90a568p-5f, 0x1.82b42ep-6f, -0x1.96b60cp-8f, 0x1.8430d2p-11f, -0x1.92df02p-14f, 0x1.da6faap-16f, 0x1.b237bcp-20f, 0x1.66eb1ap-25f, -0x1.f6ebd8p-33f, 0x1.569072p-45f, 0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.03034p-1f, 0x1.8347dap-2f, -0x1.7d2f18p+0f, 0x1.c3013ep-1f, -0x1.4be40ep-2f, 0x1.458036p-6f, 0x1.7e9e8ep-5f, -0x1.594cfap-6f, 0x1.27c566p-9f, 0x1.e972ap-12f, -0x1.1649ecp-14f, 0x1.c99c42p-23f, 0x1.81519ep-26f, -0x1.06b5eep-37f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.666d54p+0f, -0x1.c03746p+1f, 0x1.a43ebap+1f, -0x1.d62736p+0f, 0x1.891e36p-1f, 0x1.a23c1ap-6f, -0x1.d9c16ep-3f, 0x1.b6728ep-4f, -0x1.66849cp-7f, -0x1.fc6302p-9f, 0x1.7e62aep-11f, -0x1.2c21cp-17f, -0x1.15f344p-21f, 0x1.7bbd84p-32f, -0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.b44c4ep+1f, -0x1.c1f7ep+3f, 0x1.1601a8p+4f, 0x1.e5bffcp+3f, -0x1.38f35cp+6f, 0x1.d1869cp+6f, -0x1.70d204p+6f, 0x1.34930ep+5f, -0x1.4b77b4p+2f, -0x1.d27f3cp+0f, 0x1.32a2c6p-1f, -0x1.2fc65p-7f, -0x1.c48022p-11f, 0x1.364c0ap-20f, 0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.afe05cp+1f, -0x1.0a8c44p+4f, 0x1.0f6c04p+5f, -0x1.306ff2p+5f, 0x1.da6956p+4f, -0x1.6a2c2p+4f, 0x1.0e28c8p+4f, -0x1.ee4b3cp+2f, 0x1.050e3ep-1f, 0x1.0ea6cap+0f, -0x1.6566f6p-2f, 0x1.0b828ap-6f, 0x1.3201b6p-10f, -0x1.a6f024p-19f, -0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.77885ep+1f, -0x1.f5abb2p+3f, 0x1.0a779ep+5f, -0x1.164dap+5f, 0x1.233374p+4f, -0x1.af306ap+2f, 0x1.6dba5cp+2f, -0x1.17ffcap+1f, -0x1.9f39e8p+1f, 0x1.d0d0a8p+1f, -0x1.4ac5cap+0f, 0x1.049fbp-3f, 0x1.5ad37ap-7f, -0x1.e6e9a6p-15f, 0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.1912b6p+0f, -0x1.85c00cp+2f, 0x1.b7d754p+3f, -0x1.076d5p+4f, 0x1.92a29ep+3f, -0x1.20f516p+3f, 0x1.dcba52p+2f, -0x1.3fe312p+2f, 0x1.5e9b74p+1f, -0x1.a6996ap+0f, 0x1.806826p-1f, -0x1.ddc83ep-4f, -0x1.e09e82p-7f, 0x1.5c5b72p-13f, 0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.eae802p-3f, -0x1.5a965ap+0f, 0x1.851aep+1f, -0x1.b139cp+1f, 0x1.ffefb8p+0f, -0x1.025406p+0f, 0x1.ff103cp-1f, -0x1.7a4f7p-1f, 0x1.09dce6p-2f, -0x1.c2f7cep-4f, 0x1.41c46cp-4f, -0x1.03531cp-6f, -0x1.c24ed2p-9f, 0x1.5d1ed8p-14f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.184a0c288d22bp-3, 0x1.fbaa047a94a61p-1, -0x1.596f5b6b28cbp-3, 0x1.234875f46000ep-4, -0x1.90a568ef3b94bp-5, 0x1.82b42ea0f8a16p-6, -0x1.96b60b10e5956p-8, 0x1.8430d19335685p-11, -0x1.92df023007909p-14, 0x1.da6faa7679627p-16, 0x1.b237bc2c3b525p-20, 0x1.66eb1a28068aep-25, -0x1.f6ebd7398c4a4p-33, 0x1.5690727034a8ap-45, 0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.03033f41d9947p-1, 0x1.8347da7a3030cp-2, -0x1.7d2f17f2a95afp+0, 0x1.c3013eaebde94p-1, -0x1.4be40ed86f2cdp-2, 0x1.4580356ca34ffp-6, 0x1.7e9e8eefc30b4p-5, -0x1.594cf912461bcp-6, 0x1.27c56651be6eep-9, 0x1.e972a09b0f4ddp-12, -0x1.1649ec5e54141p-14, 0x1.c99c42a59648bp-23, 0x1.81519dee82fp-26, -0x1.06b5ee4f0712p-37, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.666d532df9dfp+0, -0x1.c0374596ee4d9p+1, 0x1.a43eb9f4500c3p+1, -0x1.d627359f84d25p+0, 0x1.891e36789053ap-1, 0x1.a23c19ecf2debp-6, -0x1.d9c16d05d7787p-3, 0x1.b6728d569b4c7p-4, -0x1.66849bebd2ebep-7, -0x1.fc6301aedca9p-9, 0x1.7e62ae52149bdp-11, -0x1.2c21c0130a3ebp-17, -0x1.15f344e8ed1b2p-21, 0x1.7bbd836b1bf85p-32, -0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.b44c4e267cbb5p+1, -0x1.c1f7df3ad7ab8p+3, 0x1.1601a8a979c79p+4, 0x1.e5bffb29b3c53p+3, -0x1.38f35bf0e9ee1p+6, 0x1.d1869b3f8e2b4p+6, -0x1.70d2038145a54p+6, 0x1.34930dde67aeap+5, -0x1.4b77b4fb36749p+2, -0x1.d27f3b25c1fd7p+0, 0x1.32a2c5a3dfe81p-1, -0x1.2fc64ff8d3421p-7, -0x1.c48021ad9bc16p-11, 0x1.364c0a7c4c64bp-20, 0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.afe05c7a6ada2p+1, -0x1.0a8c44cdd47bfp+4, 0x1.0f6c0325c5e14p+5, -0x1.306ff1c62c833p+5, 0x1.da69559cc9113p+4, -0x1.6a2c1f828fe2ep+4, 0x1.0e28c771588c3p+4, -0x1.ee4b3cc46d89p+2, 0x1.050e3e4d4732ap-1, 0x1.0ea6cad7a5a8p+0, -0x1.6566f5ac7d805p-2, 0x1.0b828ad29e43fp-6, 0x1.3201b5c3bc1c2p-10, -0x1.a6f0242017b15p-19, -0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.77885e6e270a7p+1, -0x1.f5abb22b1b6ecp+3, 0x1.0a779dee6c7bep+5, -0x1.164d9f148bde5p+5, 0x1.2333738e736f1p+4, -0x1.af306993826a7p+2, 0x1.6dba5c59397a4p+2, -0x1.17ffc928dd1d9p+1, -0x1.9f39e7400cf5dp+1, 0x1.d0d0a8f3b805ep+1, -0x1.4ac5cadf9fb15p+0, 0x1.049faf6ae6899p-3, 0x1.5ad3792bdac36p-7, -0x1.e6e9a51e3663ap-15, 0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.1912b6ad90d43p+0, -0x1.85c00c80d7a19p+2, 0x1.b7d753e3c818ap+3, -0x1.076d50e7f7851p+4, 0x1.92a29d7ac0e1ep+3, -0x1.20f516098425cp+3, 0x1.dcba519c323cfp+2, -0x1.3fe31292805cp+2, 0x1.5e9b74431b073p+1, -0x1.a6996ae95f76fp+0, 0x1.806826de1640bp-1, -0x1.ddc83de4acfafp-4, -0x1.e09e81650c6b7p-7, 0x1.5c5b71613d71bp-13, 0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.eae80165a34adp-3, -0x1.5a965a7535366p+0, 0x1.851adfd49d1a7p+1, -0x1.b139c010d5d8fp+1, 0x1.ffefb70380437p+0, -0x1.0254056f57104p+0, 0x1.ff103b26e087ep-1, -0x1.7a4f70cc2f5d8p-1, 0x1.09dce627745a6p-2, -0x1.c2f7ce5c8a37cp-4, 0x1.41c46b919c33fp-4, -0x1.03531c096423ap-6, -0x1.c24ed1e998c51p-9, 0x1.5d1ed72a09587p-14, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0x8.c250614469156ecp-6L, 0xf.dd5023d4a530983p-4L, -0xa.cb7adb594658341p-6L, 0x9.1a43afa30007147p-7L, -0xc.852b4779dca57d6p-8L, 0xc.15a17507c50b09fp-9L, -0xc.b5b058872cab3ebp-11L, 0xc.21868c99ab4273bp-14L, -0xc.96f811803c8446bp-17L, 0xe.d37d53b3cb1391fp-19L, 0xd.91bde161da92bd9p-23L, 0xb.3758d14034571f5p-28L, -0xf.b75eb9cc6251d52p-36L, 0xa.b4839381a545259p-48L, 0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0x8.1819fa0ecca3abdp-4L, 0xc.1a3ed3d18185c5ap-5L, -0xb.e978bf954ad7b4cp-3L, 0xe.1809f575ef4a37dp-4L, -0xa.5f2076c37966861p-5L, 0xa.2c01ab651a7f8e8p-9L, 0xb.f4f4777e185a2cbp-8L, -0xa.ca67c89230ddcadp-9L, 0x9.3e2b328df376c3ap-12L, 0xf.4b9504d87a6e47fp-15L, -0x8.b24f62f2a0a04dcp-17L, 0xe.4ce2152cb245585p-26L, 0xc.0a8cef7417800e8p-29L, -0x8.35af7278388fe4bp-40L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xb.336a996fcef7c52p-3L, -0xe.01ba2cb7726c73bp-2L, 0xd.21f5cfa280614c9p-2L, -0xe.b139acfc2692864p-3L, 0xc.48f1b3c4829d099p-4L, 0xd.11e0cf6796f5a28p-9L, -0xe.ce0b682ebbc393bp-6L, 0xd.b3946ab4da635ap-7L, -0xb.3424df5e975efd8p-10L, -0xf.e3180d76e5481d1p-12L, 0xb.f3157290a4debfp-14L, -0x9.610e009851f575p-20L, -0x8.af9a274768d9303p-24L, 0xb.ddec1b58dfc26aap-35L, -0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xd.a2627133e5da6a2p-2L, -0xe.0fbef9d6bd5bcc5p+0L, 0x8.b00d454bce3c7c1p+1L, 0xf.2dffd94d9e295dcp+0L, -0x9.c79adf874f70573p+3L, 0xe.8c34d9fc715a214p+3L, -0xb.86901c0a2d2a313p+3L, 0x9.a4986ef33d75017p+2L, -0xa.5bbda7d9b3a4ab2p-1L, -0xe.93f9d92e0feb674p-3L, 0x9.95162d1eff408cfp-4L, -0x9.7e327fc69a10719p-10L, -0xe.24010d6cde0b23p-14L, 0x9.b26053e2632577ap-23L, 0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xd.7f02e3d356d0e5bp-2L, -0x8.5462266ea3dfa72p+1L, 0x8.7b60192e2f0a0a5p+2L, -0x9.837f8e316419b55p+2L, 0xe.d34aace64889869p+1L, -0xb.5160fc147f16c08p+1L, 0x8.71463b8ac46182cp+1L, -0xf.7259e6236c483c5p-1L, 0x8.2871f26a39950e3p-4L, 0x8.753656bd2d3fd71p-3L, -0xb.2b37ad63ec0243dp-5L, 0x8.5c145694f21f58cp-9L, 0x9.900dae1de0e10ep-13L, -0xd.37812100bd8a443p-22L, -0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xb.bc42f3713853a26p-2L, -0xf.ad5d9158db75d9ap+0L, 0x8.53bcef7363deeep+2L, -0x8.b26cf8a45ef2551p+2L, 0x9.199b9c739b78925p+1L, -0xd.79834c9c135345p-1L, 0xb.6dd2e2c9cbd2213p-1L, -0x8.bffe4946e8ec5f8p-2L, -0xc.f9cf3a0067ae91ap-2L, 0xe.8685479dc02ed7ep-2L, -0xa.562e56fcfd8a5e2p-3L, 0x8.24fd7b57344ca47p-6L, 0xa.d69bc95ed61ae29p-10L, -0xf.374d28f1b31ceb4p-18L, 0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0x8.c895b56c86a1b02p-3L, -0xc.2e006406bd0c7e6p-1L, 0xd.beba9f1e40c4cbdp+0L, -0x8.3b6a873fbc285cap+1L, 0xc.9514ebd6070fp+0L, -0x9.07a8b04c212dd91p+0L, 0xe.e5d28ce191e76fcp-1L, -0x9.ff18949402e0231p-1L, 0xa.f4dba218d8396ddp-2L, -0xd.34cb574afbb77c5p-3L, 0xc.034136f0b2057f9p-4L, -0xe.ee41ef2567d7906p-7L, -0xf.04f40b28635ba7ep-10L, 0xa.e2db8b09eb8dbb5p-16L, 0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0xf.57400b2d1a568f9p-6L, -0xa.d4b2d3a9a9b32a1p-3L, 0xc.28d6fea4e8d3b6dp-2L, -0xd.89ce0086aec77acp-2L, 0xf.ff7db81c021b9bdp-3L, -0x8.12a02b7ab881d9bp-3L, 0xf.f881d937043f115p-4L, -0xb.d27b86617aebd37p-4L, 0x8.4ee7313ba2d30a8p-5L, -0xe.17be72e451bdc7ep-7L, 0xa.0e235c8ce19f70ep-7L, -0x8.1a98e04b211d3d4p-9L, -0xe.12768f4cc6289abp-12L, 0xa.e8f6b9504ac38b3p-17L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.184a0c288d22add7ea26104df2f3p-3Q, 0x1.fbaa047a94a613069e6f550b4e09p-1Q, -0x1.596f5b6b28cb0681bf78a3e54b72p-3Q, 0x1.234875f46000e28dce7c3f342092p-4Q, -0x1.90a568ef3b94afacf755834bab9ap-5Q, 0x1.82b42ea0f8a1613dc5ff9725c05p-6Q, -0x1.96b60b10e59567d6b2c6577bad3bp-8Q, 0x1.8430d19335684e7577fd3b699763p-11Q, -0x1.92df0230079088d5ad0746147153p-14Q, 0x1.da6faa767962723e71f08f2e9083p-16Q, 0x1.b237bc2c3b5257b1d937078b7396p-20Q, 0x1.66eb1a28068ae3ea1bd5d2683257p-25Q, -0x1.f6ebd7398c4a3aa441e024a5714bp-33Q, 0x1.5690727034a8a4b1353895ae261dp-45Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.03033f41d994757a2b4934423538p-1Q, 0x1.8347da7a3030b8b37cdc36ec3c9cp-2Q, -0x1.7d2f17f2a95af6988be8eca125f4p+0Q, 0x1.c3013eaebde946f9eaa42bce8cf9p-1Q, -0x1.4be40ed86f2cd0c168ad249492a4p-2Q, 0x1.4580356ca34ff1cf3c18408b1d74p-6Q, 0x1.7e9e8eefc30b45959dcb8ab52383p-5Q, -0x1.594cf912461bb959724fb77ad3bbp-6Q, 0x1.27c56651be6ed873712071c19324p-9Q, 0x1.e972a09b0f4dc8fdb93114f9ed4p-12Q, -0x1.1649ec5e541409b8483ac00aa989p-14Q, 0x1.c99c42a59648ab096d412a58741fp-23Q, 0x1.81519dee82f001d0cfd286a4bf1ep-26Q, -0x1.06b5ee4f0711fc96e3337209d4e2p-37Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.666d532df9def8a39e69d4c9dbd1p+0Q, -0x1.c0374596ee4d8e750b0b0f065b11p+1Q, 0x1.a43eb9f4500c29913bdae70f2e12p+1Q, -0x1.d627359f84d250c8825852fe20e7p+0Q, 0x1.891e36789053a132cb4397963bd6p-1Q, 0x1.a23c19ecf2deb44f4177f3e9336bp-6Q, -0x1.d9c16d05d77872764189280b3978p-3Q, 0x1.b6728d569b4c6b3f03c9c20fd79fp-4Q, -0x1.66849bebd2ebdfafabb131375ec9p-7Q, -0x1.fc6301aedca903a123de4bceca69p-9Q, 0x1.7e62ae52149bd7e06a18746f5b91p-11Q, -0x1.2c21c0130a3eaea0bd3721b2b8d6p-17Q, -0x1.15f344e8ed1b26069acbf2a1a453p-21Q, 0x1.7bbd836b1bf84d53feb61580dc74p-32Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.b44c4e267cbb4d43745305f720c9p+1Q, -0x1.c1f7df3ad7ab79897dce80d62718p+3Q, 0x1.1601a8a979c78f82e398ce8545b9p+4Q, 0x1.e5bffb29b3c52bb885497a60d3d6p+3Q, -0x1.38f35bf0e9ee0ae5b1772951f4d5p+6Q, 0x1.d1869b3f8e2b44288688d26e70d1p+6Q, -0x1.70d2038145a54625eb25d875d7e5p+6Q, 0x1.34930dde67aea02e0a703b76a197p+5Q, -0x1.4b77b4fb3674956338abd1824db4p+2Q, -0x1.d27f3b25c1fd6ce83b2a8b0a4ac9p+0Q, 0x1.32a2c5a3dfe8119d379b71453288p-1Q, -0x1.2fc64ff8d3420e31f2a6dd47d615p-7Q, -0x1.c48021ad9bc1646021c012f5b071p-11Q, 0x1.364c0a7c4c64aef45189b312edb4p-20Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.afe05c7a6ada1cb6172616d2c6a8p+1Q, -0x1.0a8c44cdd47bf4e495a5398413fbp+4Q, 0x1.0f6c0325c5e1414a9285f59e5f14p+5Q, -0x1.306ff1c62c8336aad5c3f9886bcep+5Q, 0x1.da69559cc91130d28dd4b63660e6p+4Q, -0x1.6a2c1f828fe2d81030f1ad524eb7p+4Q, 0x1.0e28c771588c30581ce7071741b8p+4Q, -0x1.ee4b3cc46d890789fa8b15b7da8p+2Q, 0x1.050e3e4d4732a1c55c0c971f3557p-1Q, 0x1.0ea6cad7a5a7fae2eab7d74b22a1p+0Q, -0x1.6566f5ac7d80487971d04a5944efp-2Q, 0x1.0b828ad29e43eb178f6b65b8f31p-6Q, 0x1.3201b5c3bc1c21bf7086981ccb12p-10Q, -0x1.a6f0242017b1488503cf0ef046e5p-19Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.77885e6e270a744c868654d7cbb5p+1Q, -0x1.f5abb22b1b6ebb333fd9f11e8f7cp+3Q, 0x1.0a779dee6c7bddbff2f0d8b9981bp+5Q, -0x1.164d9f148bde4aa13b66fabbc2fp+5Q, 0x1.2333738e736f124a0ec3de563f7bp+4Q, -0x1.af306993826a689f7543995893acp+2Q, 0x1.6dba5c59397a4426e98586aad789p+2Q, -0x1.17ffc928dd1d8bf0f209d0c36abep+1Q, -0x1.9f39e7400cf5d234f22720c7748ap+1Q, 0x1.d0d0a8f3b805dafc2d2b539d9bb4p+1Q, -0x1.4ac5cadf9fb14bc48382ff0ecfb1p+0Q, 0x1.049faf6ae689948e66d5e5134564p-3Q, 0x1.5ad3792bdac35c5163486d9087edp-7Q, -0x1.e6e9a51e36639d68c6db7d7495a4p-15Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.1912b6ad90d43603284e290418eep+0Q, -0x1.85c00c80d7a18fcc693e47644de7p+2Q, 0x1.b7d753e3c818997a04ded98f86e3p+3Q, -0x1.076d50e7f7850b94ae780b4bf285p+4Q, 0x1.92a29d7ac0e1e0002558af869ed1p+3Q, -0x1.20f516098425bb22664ce4ad84a9p+3Q, 0x1.dcba519c323cedf78dcb7794def8p+2Q, -0x1.3fe31292805c0462ca96ae20fe5p+2Q, 0x1.5e9b74431b072dba61e526c0393fp+1Q, -0x1.a6996ae95f76ef890f12b5a6c626p+0Q, 0x1.806826de1640aff2fbfd8d0d7d09p-1Q, -0x1.ddc83de4acfaf20be5fee513819ep-4Q, -0x1.e09e81650c6b74fbce41e5378d99p-7Q, 0x1.5c5b71613d71b7692e7e5f0ba23p-13Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.eae80165a34ad1f2080107f7b7a5p-3Q, -0x1.5a965a7535366541f0a1afe5172fp+0Q, 0x1.851adfd49d1a76d9d23c35315fc3p+1Q, -0x1.b139c010d5d8ef58fb69c4f0efd8p+1Q, 0x1.ffefb7038043737a18fc832f1fb7p+0Q, -0x1.0254056f57103b364cf4bcafdd14p+0Q, 0x1.ff103b26e087e22aa6dbe2498954p-1Q, -0x1.7a4f70cc2f5d7a6d2a4e62aee34dp-1Q, 0x1.09dce627745a61500e9471981ea7p-2Q, -0x1.c2f7ce5c8a37b8fcabdaf25d6d6bp-4Q, 0x1.41c46b919c33ee1c6941aae7132bp-4Q, -0x1.03531c096423a7a88f95e3dc08eep-6Q, -0x1.c24ed1e998c51356546e2437d6p-9Q, 0x1.5d1ed72a09587166cbb2e531d26cp-14Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.136859984385993751077424284238513346105771881700946032539857608801714375260"), boost::lexical_cast("0.991531505549868928852223941202783180250573415879960614939273149473543513232"), boost::lexical_cast("-0.168669428069824001344876924759083221703325404050382978741893461845460708901"), boost::lexical_cast("0.0711140258408706504803069010910216723551333508784818550165049090931508664852"), boost::lexical_cast("-0.0489069985868462937786964568361717206243738587558741902200175649925966650129"), boost::lexical_cast("0.0236025290831865730472503982004363583525603770422866170365985291322094732559"), boost::lexical_cast("-0.00620591898122876136661677884645407645696587502826527734998815703979020082209"), boost::lexical_cast("0.000740414996836150617193096345381128615000342497991762689010201911138137676340"), boost::lexical_cast("-0.0000960519616914659362067678923772724229000913224382096876651732324410060847142"), boost::lexical_cast("0.0000282786008599848003825512309131168222310934819976005479856002545492804079821"), boost::lexical_cast("0.00000161758704125419265856051792339632788510763962613299088995170275735382724250"), boost::lexical_cast("0.0000000417835973045118991124105253366830871810097251894035223474643902978862222950"), boost::lexical_cast("-0.000000000228702107424295259422097052204574273567576074367490930756782831109751583002"), boost::lexical_cast("0.0000000000000380322713533425186858078998967525935209252034129900336181242610764710254761"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.505884148395843984672030852174399268078679938448445514258859914326001574753"), boost::lexical_cast("0.378203786571291475028258491549280264525735502487840319727030236183752240877"), boost::lexical_cast("-1.48899984049181086925690641126028244033585659708567195002624452117766769554"), boost::lexical_cast("0.880868872481146917953730102204425044160476030745496386305050091936160661825"), boost::lexical_cast("-0.324112159690952253266958291790923377370339558783455268279088511692627257578"), boost::lexical_cast("0.0198669931146939729198708935598776106105509170321806377166373111519790413827"), boost::lexical_cast("0.0467064658861046390974330766795109450179003887204378435053237799594305015134"), boost::lexical_cast("-0.0210754806840627153541931469194838393690032791036447674196194339971613456374"), boost::lexical_cast("0.00225655435576476469044726339752369362143954369726725569747472926858253332600"), boost::lexical_cast("0.000466773760937245507236716054902477793363154761728440462716816755417726884839"), boost::lexical_cast("-0.0000663492114416674035500361661641750124659642249106990423787115653008871078300"), boost::lexical_cast("0.000000213091444200759381405507720298082584145763408653037309536239955733283926150"), boost::lexical_cast("0.0000000224285069909106554636357422248869419407906728286220715022858657729340987674"), boost::lexical_cast("-0.00000000000746668625743637862652799469000616324979519456514273967438860456366173662892"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.40010566589796415558533052990817027536043759916356873335248645843912898740"), boost::lexical_cast("-3.50168676252051764999916760393084370145312284526707841278933240785874906921"), boost::lexical_cast("3.28316425732927656875646999404076171324929322898132788895606205661772082296"), boost::lexical_cast("-1.83653578896048342826761860954879682887285337195163994610183024428204639287"), boost::lexical_cast("0.767808630196817229463066449452964216764497348541592935264231141751164293885"), boost::lexical_cast("0.0255270245723248470256698009778319785355159721020640100259648381281108673206"), boost::lexical_cast("-0.231325961819433188856073677854062275419611129702243186823190488135500579221"), boost::lexical_cast("0.107042839148294803604040015338906449890317311518114018506422501396601728023"), boost::lexical_cast("-0.0109411012014314322153349861016506274246639791285954533561420989314806280893"), boost::lexical_cast("-0.00387868304772471399323142237494169480427070296801463441213707814207225784013"), boost::lexical_cast("0.000729342408030845829165840735507514556696710333640548011394236862236236627590"), boost::lexical_cast("-0.00000894462576724212069044572229637929785464056704288394767005400917958125948440"), boost::lexical_cast("-0.000000517722722573465466291304746138565114462435290270180299612937282299347886509"), boost::lexical_cast("0.000000000345371778653840406383195497480732961379596653494040751101347866321743412771"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.40857865218409942407989160777729397499591054071894723659795747026734950142"), boost::lexical_cast("-14.06150781147640244495854524439441851419403709392481084157811217258651128990"), boost::lexical_cast("17.37540498925634213895582494025326018301205036554108994541098300558519647810"), boost::lexical_cast("15.17968519349066044652294389136578861409554749815814367110760723871662294450"), boost::lexical_cast("-78.23765541484636800472354977154947501042898222086099559309649353911488323440"), boost::lexical_cast("116.38145160012465254189247417655014226350307393144895240522480865461502034100"), boost::lexical_cast("-92.20509149539549844487080427780966241435914366770315955416451996663294302680"), boost::lexical_cast("38.57180379632866626053856571576184925471707552931311103550752525165681257540"), boost::lexical_cast("-5.17918133289806211714176217075064499841836717085374825348683628481547935326"), boost::lexical_cast("-1.82225389167614588863332031779801692711824638887982150713863406444245730454"), boost::lexical_cast("0.598898102049091230023937146931083606151277363169821330990542437169742650605"), boost::lexical_cast("-0.00927046685105820265775499853351620625448959411497441318196481292209014223253"), boost::lexical_cast("-0.000863076236511053557380361955795006038651362072706195875505623255065432401013"), boost::lexical_cast("0.00000115594653411452947966415211118033698227006015073368264240575869273988254730"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.37403446175967838025740792692632707948046376845678760985954780113353683376"), boost::lexical_cast("-16.65924530413007895577513111721655133926983876119072500556865649764333729280"), boost::lexical_cast("33.92774037847644365730660167931354863708439882380578545057682183184098002560"), boost::lexical_cast("-38.05466036628095179642463777855898685849735591879960715894900954660986556330"), boost::lexical_cast("29.65071641201309323109850787750541018979228147381363769083014882995571890840"), boost::lexical_cast("-22.63577223778536585979611105411422747200617599445293663779795581166422612690"), boost::lexical_cast("16.88495582843530592324987980427308263482658385028179904289230174596074103340"), boost::lexical_cast("-7.72334212477120771395018502358287787646097333914773539504366245154006903261"), boost::lexical_cast("0.509874293263782320049624992542430344831541029125914053863318565845626947501"), boost::lexical_cast("1.05723254933187142521325305757260448706303752772475115221502588084489406121"), boost::lexical_cast("-0.349025572445839567506362486618125787775522478731013526918275825979025450341"), boost::lexical_cast("0.0163275104227731348198876869545919769123313328974523116723206927638520899008"), boost::lexical_cast("0.00116732284453401104147360959063823502788555856702680595647112386117318401134"), boost::lexical_cast("-0.00000315113403818958420917458786425100865687235113639358839633877000023951513838"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.93384914759197424624436413594969058529365344664724959523125492071614427193"), boost::lexical_cast("-15.67720898074499960019790246277632013145587519414207657764003345532838952320"), boost::lexical_cast("33.30840669888082927743188422912680268770468382312738501151598773669709347950"), boost::lexical_cast("-34.78790107776493317973127999160157672445840757713194594151710343461996258490"), boost::lexical_cast("18.20006137509239303213521792722566030277335694542561819775614995273543845150"), boost::lexical_cast("-6.73732985882967353579625955002147560794702457823837345027768515384207199939"), boost::lexical_cast("5.71449955666858878400309088707607704396756738056282405829209011954772445391"), boost::lexical_cast("-2.18749346251773279906619495975374371998852897264751318856692473518486342256"), boost::lexical_cast("-3.24395456912490815512051132069746602372138882030028342425172470032100812037"), boost::lexical_cast("3.63136779690107300247637411793680556583470203778956077148746730514900636140"), boost::lexical_cast("-1.29208057365003020310933608766753056310407043934855358170062066567610977189"), boost::lexical_cast("0.127257700395436748185441509800570330756269721379701882712722971090011220542"), boost::lexical_cast("0.0105842916161319289430031608631456823275553548600640429274763034124609001209"), boost::lexical_cast("-0.0000580445141495463978915954606394279824931279836573959690571643754738437622999"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.09794179665989663514011010318171289068252802140768727878686619226775014160"), boost::lexical_cast("-6.08984673101670014308433503745446328651407196395191858667048642230680054117"), boost::lexical_cast("13.74503511894797041799485471293715399778854034159024012586185790377350928050"), boost::lexical_cast("-16.46418848621425725226856339943522600141255984607131407751367512429535974550"), boost::lexical_cast("12.58235048270494971240583540160205978818573268955250712351866824920394664630"), boost::lexical_cast("-9.02991773470528559623876404322857159498730180401367525828524406240302233897"), boost::lexical_cast("7.44887199643649366803718019597024027263652518924024613405692486678267833539"), boost::lexical_cast("-4.99823440844323865139296784342762981029643191844299226701928041463556839082"), boost::lexical_cast("2.73911908413543286133929491391344713268901997126890391713796517771077981005"), boost::lexical_cast("-1.65077846715527320386166297579946870069085350586686894303798561070712527613"), boost::lexical_cast("0.750794615373821527451164487493324083501669271576479206468805894209869122774"), boost::lexical_cast("-0.116646043558658917381544271189706037325524764351951616559858241342309095929"), boost::lexical_cast("-0.0146673328218612635522669061509315192382547144459217750205470993012158491409"), boost::lexical_cast("0.000166109656710205411664661588058784980983032508578738275988691042867685712989"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.239700327791444154401358637312026610528216518839726598253382285687854145301"), boost::lexical_cast("-1.35385671006698656362279837678985930962433090919777408910621735397808426685"), boost::lexical_cast("3.03988263970878210970161760103694626417746895886680293765920336110790081944"), boost::lexical_cast("-3.38457489797628550541836623944752232253491103859138520958725493309901917502"), boost::lexical_cast("1.99975150905107828365392055663475104753346795604213386830360205861062068058"), boost::lexical_cast("-1.00909456222785902673888196781880614953849677554209360029881025329921208452"), boost::lexical_cast("0.998170708175407887564948885340732566778229747407421235714432832971547496176"), boost::lexical_cast("-0.738887333798341000751416724474791664378133946712220233024499707378818126349"), boost::lexical_cast("0.259631725462066480616682675264655170327179020240911896080856531165333156446"), boost::lexical_cast("-0.110099607562586792620753110120489954588564472503733678183395115619093852339"), boost::lexical_cast("0.0785564615159843726834898160756405679414386387007067812431829633899248651308"), boost::lexical_cast("-0.0158279203220123929016663292094093420473159442069900632195102000109139919945"), boost::lexical_cast("-0.00343557655723850854612182385732716766125518666298517555524787852985964150285"), boost::lexical_cast("0.0000832368065465019779864000534536830870074333194787317202754089818199746452757"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 9) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.1d2fcp-4f, 0x1.b1b652p-1f, 0x1.8b08d6p-3f, -0x1.4aef16p-3f, 0x1.fd1878p-5f, -0x1.7ee87p-8f, -0x1.097588p-7f, 0x1.3d3ef8p-8f, -0x1.291474p-10f, 0x1.b33accp-15f, 0x1.7e6498p-16f, -0x1.53f94ap-19f, -0x1.58c1d8p-24f, 0x1.278ba2p-29f, -0x1.705a7ap-38f, -0x1.4fb4eep-52f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.2b90f8p-2f, 0x1.af96b8p-1f, -0x1.d3c16cp+0f, 0x1.169004p+0f, -0x1.1f4f38p-1f, 0x1.82c926p-3f, -0x1.540e9cp-7f, -0x1.49841cp-6f, 0x1.96a364p-8f, 0x1.0c494ap-11f, -0x1.b592fcp-12f, 0x1.9d3f0ap-16f, 0x1.8562bp-23f, -0x1.13cc2ep-24f, 0x1.2234ep-34f, 0x1.08644ap-47f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.e4c00ep-1f, -0x1.aad7p+0f, 0x1.135c58p-2f, 0x1.5b4146p-1f, -0x1.c92ba8p-4f, -0x1.4f00eap-2f, 0x1.61aa48p-2f, -0x1.66761ap-3f, 0x1.723502p-5f, -0x1.85c5f4p-10f, -0x1.2bb318p-9f, 0x1.b3d73ep-12f, 0x1.bca3f2p-17f, -0x1.261d8ap-20f, 0x1.36693ap-28f, 0x1.1a9906p-40f, -0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.27d6ep+1f, -0x1.2ded7ap+3f, 0x1.e79fd8p+3f, -0x1.304a1ap+3f, -0x1.effd26p+2f, 0x1.7ce73p+4f, -0x1.985f02p+4f, 0x1.d3cfacp+3f, -0x1.e1a25p+1f, -0x1.9b8564p-2f, 0x1.fe4766p-2f, -0x1.73f12ep-4f, -0x1.20ddep-10f, 0x1.ffd29p-12f, -0x1.fa8378p-20f, -0x1.cc794ap-31f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.c7cedp+1f, -0x1.2ab8cap+4f, 0x1.4df684p+5f, -0x1.af3bfap+5f, 0x1.8eeb18p+5f, -0x1.541e9cp+5f, 0x1.12ea48p+5f, -0x1.35c8bp+4f, 0x1.d829e2p+1f, 0x1.69d6eap+1f, -0x1.023562p+1f, 0x1.b42324p-2f, -0x1.2e2904p-8f, -0x1.22b4e2p-8f, 0x1.654cep-16f, 0x1.43e712p-26f, 0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.1617a4p+2f, -0x1.94d9c6p+4f, 0x1.dd0eb6p+5f, -0x1.168c04p+6f, 0x1.24c19cp+5f, -0x1.016a68p+0f, -0x1.c94ed2p+2f, 0x1.669c08p+3f, -0x1.88dca4p+4f, 0x1.b958d8p+4f, -0x1.eccebap+3f, 0x1.f4375ep+1f, -0x1.2ade5ep-3f, -0x1.491f18p-4f, 0x1.5bccdep-11f, 0x1.398368p-20f, 0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.384148p+1f, -0x1.dd3c5ap+3f, 0x1.30352ap+5f, -0x1.a86d9ep+5f, 0x1.7d0e6cp+5f, -0x1.25c844p+5f, 0x1.f5b3e2p+4f, -0x1.815eep+4f, 0x1.ca4482p+3f, -0x1.050826p+3f, 0x1.1eeca8p+2f, -0x1.6df696p+0f, 0x1.75a7acp-5f, 0x1.ebd4ap-5f, -0x1.434438p-10f, -0x1.202646p-18f, 0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.041f76p+0f, -0x1.96fe7ap+2f, 0x1.04a7fep+4f, -0x1.5c5edep+4f, 0x1.0b593cp+4f, -0x1.3ddf52p+3f, 0x1.12f0bcp+3f, -0x1.d4ebfcp+2f, 0x1.d31828p+1f, -0x1.6bf238p+0f, 0x1.d1d5cp-1f, -0x1.794e94p-2f, -0x1.2e59eap-6f, 0x1.26fbfep-5f, -0x1.e662fap-10f, -0x1.a81802p-17f, -0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.9024ep-3f, -0x1.3caa56p+0f, 0x1.947e64p+1f, -0x1.033a7ap+2f, 0x1.51b6cap+1f, -0x1.0bd63p+0f, 0x1.028beep+0f, -0x1.1620dap+0f, 0x1.b5ef82p-2f, -0x1.b7954cp-6f, 0x1.054d18p-4f, -0x1.481726p-5f, -0x1.8ce86ep-6f, 0x1.2926b8p-6f, -0x1.20ae94p-9f, -0x1.e260bp-16f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.1d2fbfac2394ap-4, 0x1.b1b6520101e0ep-1, 0x1.8b08d5cd4a2adp-3, -0x1.4aef16c7e666fp-3, 0x1.fd1877f1138bep-5, -0x1.7ee87092fa243p-8, -0x1.09758849af605p-7, 0x1.3d3ef7388a3aep-8, -0x1.29147421d5711p-10, 0x1.b33acccf47f1cp-15, 0x1.7e6498cdbddd5p-16, -0x1.53f9494edf128p-19, -0x1.58c1d88e09b31p-24, 0x1.278ba12dc249ap-29, -0x1.705a7a4d8345p-38, -0x1.4fb4ee678fa0ep-52, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.2b90f77070093p-2, 0x1.af96b810375aep-1, -0x1.d3c16b16ba87ap+0, 0x1.1690032de8cfbp+0, -0x1.1f4f37268ff74p-1, 0x1.82c9256a70f8fp-3, -0x1.540e9bea7c732p-7, -0x1.49841c554fed2p-6, 0x1.96a364065f27dp-8, 0x1.0c49493de5a6fp-11, -0x1.b592fbb7be41bp-12, 0x1.9d3f09be0cea7p-16, 0x1.8562af0388b7ep-23, -0x1.13cc2e0d34f25p-24, 0x1.2234e02ed8631p-34, 0x1.08644a120d1efp-47, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.e4c00e361fc68p-1, -0x1.aad6ffd5d77f1p+0, 0x1.135c57711e671p-2, 0x1.5b41454ff0957p-1, -0x1.c92ba77b267a3p-4, -0x1.4f00ea2c2d363p-2, 0x1.61aa479f9dc68p-2, -0x1.6676194262896p-3, 0x1.7235017b58d32p-5, -0x1.85c5f4a449273p-10, -0x1.2bb318efa4d23p-9, 0x1.b3d73e818e5c9p-12, 0x1.bca3f26f194dp-17, -0x1.261d8947cb727p-20, 0x1.36693a4632269p-28, 0x1.1a9906065291fp-40, -0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.27d6df36685a8p+1, -0x1.2ded79e41fdb1p+3, 0x1.e79fd7c0b1c0fp+3, -0x1.304a1a210a5fap+3, -0x1.effd2573aa9abp+2, 0x1.7ce72fdc2cb91p+4, -0x1.985f0196c72e5p+4, 0x1.d3cfac07a9d2bp+3, -0x1.e1a24f8472a68p+1, -0x1.9b8563bd7c7d8p-2, 0x1.fe4766e3faf54p-2, -0x1.73f12d4155f36p-4, -0x1.20dddf659ee51p-10, 0x1.ffd28fb3400bfp-12, -0x1.fa83788d3f78dp-20, -0x1.cc794a76e5f16p-31, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.c7ced0f66aeadp+1, -0x1.2ab8c9c81252ep+4, 0x1.4df684dede46dp+5, -0x1.af3bf949d62bap+5, 0x1.8eeb17bed133cp+5, -0x1.541e9c27826e5p+5, 0x1.12ea47c60decp+5, -0x1.35c8b07214e14p+4, 0x1.d829e1a762882p+1, 0x1.69d6e9c20f73dp+1, -0x1.0235621854eefp+1, 0x1.b423243b8b469p-2, -0x1.2e290398a3fe3p-8, -0x1.22b4e2598d44bp-8, 0x1.654cdf573874bp-16, 0x1.43e711e678672p-26, 0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.1617a4f9d8857p+2, -0x1.94d9c534a28d4p+4, 0x1.dd0eb6aa76ffep+5, -0x1.168c0447c1b6fp+6, 0x1.24c19c047007fp+5, -0x1.016a68491e4d8p+0, -0x1.c94ed28aba0f5p+2, 0x1.669c08c9522f3p+3, -0x1.88dca456f3456p+4, 0x1.b958d77e385a9p+4, -0x1.eccebab605f4bp+3, 0x1.f4375d664ce34p+1, -0x1.2ade5d60c4581p-3, -0x1.491f178ce5646p-4, 0x1.5bccddec65e54p-11, 0x1.398367062ce37p-20, 0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.3841475e9a364p+1, -0x1.dd3c5aa19c52ep+3, 0x1.303529a28e47p+5, -0x1.a86d9ebb6edc4p+5, 0x1.7d0e6c4e24171p+5, -0x1.25c8439d2df8ap+5, 0x1.f5b3e1ac99667p+4, -0x1.815ee05c85e8bp+4, 0x1.ca4482f4236a5p+3, -0x1.050825dec75a9p+3, 0x1.1eeca8acc3a79p+2, -0x1.6df69657c972dp+0, 0x1.75a7ac677c4efp-5, 0x1.ebd49f3810c89p-5, -0x1.4344372e1b6fcp-10, -0x1.20264586c6bb9p-18, 0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.041f759e862aap+0, -0x1.96fe795439509p+2, 0x1.04a7fd5b5e592p+4, -0x1.5c5ede521aae6p+4, 0x1.0b593b29c51bcp+4, -0x1.3ddf51285055ap+3, 0x1.12f0bcbe3fa44p+3, -0x1.d4ebfbf56d996p+2, 0x1.d31827f76dc61p+1, -0x1.6bf237312f18dp+0, 0x1.d1d5c0ac4dc0cp-1, -0x1.794e93c6506ddp-2, -0x1.2e59e90e0a11dp-6, 0x1.26fbfe966bb82p-5, -0x1.e662faa96110fp-10, -0x1.a81802ebf94f1p-17, -0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.9024e0f887aa3p-3, -0x1.3caa56e1c68fap+0, 0x1.947e636a9e374p+1, -0x1.033a79f260cefp+2, 0x1.51b6c9e0d0443p+1, -0x1.0bd62fc1e0455p+0, 0x1.028bee5b6619fp+0, -0x1.1620d9bfc03ebp+0, 0x1.b5ef819dccd9ap-2, -0x1.b7954b06be8afp-6, 0x1.054d18d1cc90cp-4, -0x1.4817258dd2847p-5, -0x1.8ce86e181d425p-6, 0x1.2926b8981e2a7p-6, -0x1.20ae937e7a93p-9, -0x1.e260b0ee2a093p-16, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0x8.e97dfd611ca4d0fp-7L, 0xd.8db290080f07364p-4L, 0xc.5846ae6a5156a59p-6L, -0xa.5778b63f3337b8dp-6L, 0xf.e8c3bf889c5f1c6p-8L, -0xb.f7438497d12158fp-11L, -0x8.4bac424d7b02898p-10L, 0x9.e9f7b9c451d6f5p-11L, -0x9.48a3a10eab88924p-13L, 0xd.99d6667a3f8ded1p-18L, 0xb.f324c66deeea6e7p-19L, -0xa.9fca4a76f894114p-22L, -0xa.c60ec4704d98582p-27L, 0x9.3c5d096e124d267p-32L, -0xb.82d3d26c1a28344p-41L, -0xa.7da7733c7d070cap-55L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0x9.5c87bb838049b9dp-5L, 0xd.7cb5c081bad7186p-4L, -0xe.9e0b58b5d43cc82p-3L, 0x8.b480196f467d6c9p-3L, -0x8.fa79b9347fb9e82p-4L, 0xc.16492b5387c74b6p-6L, -0xa.a074df53e3990b8p-10L, -0xa.4c20e2aa7f68ebp-9L, 0xc.b51b2032f93e669p-11L, 0x8.624a49ef2d3764bp-14L, -0xd.ac97ddbdf20daf5p-15L, 0xc.e9f84df067536c7p-19L, 0xc.2b15781c45bef81p-26L, -0x8.9e617069a792bafp-27L, 0x9.11a70176c31860ap-37L, 0x8.4322509068f7b78p-50L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xf.260071b0fe33d17p-4L, -0xd.56b7feaebbf8a9ep-3L, 0x8.9ae2bb88f3384cep-5L, 0xa.da0a2a7f84ab917p-4L, -0xe.495d3bd933d14bbp-7L, -0xa.7807516169b18a5p-5L, 0xb.0d523cfcee33daap-5L, -0xb.33b0ca13144b196p-6L, 0xb.91a80bdac698e63p-8L, -0xc.2e2fa52249396c6p-13L, -0x9.5d98c77d2691ac4p-12L, 0xd.9eb9f40c72e4aacp-15L, 0xd.e51f9378ca67c3cp-20L, -0x9.30ec4a3e5b93bbap-23L, 0x9.b349d2319134721p-31L, 0x8.d4c83032948f76p-43L, -0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0x9.3eb6f9b342d3cadp-2L, -0x9.6f6bcf20fed8622p+0L, 0xf.3cfebe058e075ecp+0L, -0x9.8250d10852fce74p+0L, -0xf.7fe92b9d54d57e6p-1L, 0xb.e7397ee165c88c5p+1L, -0xc.c2f80cb639729f3p+1L, 0xe.9e7d603d4e95463p+0L, -0xf.0d127c23953405cp-2L, -0xc.dc2b1debe3ebee3p-5L, 0xf.f23b371fd7a9d87p-5L, -0xb.9f896a0aaf9ad9fp-7L, -0x9.06eefb2cf7284e3p-13L, 0xf.fe947d9a005fa2fp-15L, -0xf.d41bc469fbc68cdp-23L, -0xe.63ca53b72f8b2fep-34L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xe.3e7687b3575667ep-2L, -0x9.55c64e409297236p+1L, 0xa.6fb426f6f2369dp+2L, -0xd.79dfca4eb15ce04p+2L, 0xc.7758bdf6899e1b4p+2L, -0xa.a0f4e13c13724e9p+2L, 0x8.97523e306f6022p+2L, -0x9.ae458390a70a077p+1L, 0xe.c14f0d3b14410dep-2L, 0xb.4eb74e107b9e597p-2L, -0x8.11ab10c2a7777ccp-2L, 0xd.a11921dc5a34834p-5L, -0x9.71481cc51ff17e4p-11L, -0x9.15a712cc6a2586fp-11L, 0xb.2a66fab9c3a5b39p-19L, 0xa.1f388f33c339298p-29L, 0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0x8.b0bd27cec42baaep-1L, -0xc.a6ce29a51469f7p+1L, 0xe.e875b553b7fed21p+2L, -0x8.b460223e0db7486p+3L, 0x9.260ce023803fb4p+2L, -0x8.0b534248f26c38ep-3L, -0xe.4a769455d07a8e6p-1L, 0xb.34e0464a91798aep+0L, -0xc.46e522b79a2b2aep+1L, 0xd.cac6bbf1c2d48b2p+1L, -0xf.6675d5b02fa596cp+0L, 0xf.a1baeb32671a172p-2L, -0x9.56f2eb0622c089cp-6L, -0xa.48f8bc672b2306bp-7L, 0xa.de66ef632f29e0ep-14L, 0x9.cc1b3831671b9dbp-23L, 0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0x9.c20a3af4d1b1cfep-2L, -0xe.e9e2d50ce2972e4p+0L, 0x9.81a94d147237d62p+2L, -0xd.436cf5db76e1e52p+2L, 0xb.e873627120b85ap+2L, -0x9.2e421ce96fc4fd3p+2L, 0xf.ad9f0d64cb33437p+1L, -0xc.0af702e42f45538p+1L, 0xe.522417a11b52a8bp+0L, -0x8.28412ef63ad4b3p+0L, 0x8.f76545661d3c9p-1L, -0xb.6fb4b2be4b96476p-3L, 0xb.ad3d633be277714p-8L, 0xf.5ea4f9c08644463p-8L, -0xa.1a21b970db7e3c3p-13L, -0x9.01322c3635dc8d8p-21L, 0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0x8.20fbacf4315510dp-3L, -0xc.b7f3caa1ca84594p-1L, 0x8.253feadaf2c91fcp+1L, -0xa.e2f6f290d572f2cp+1L, 0x8.5ac9d94e28ddf7fp+1L, -0x9.eefa894282acd81p+0L, 0x8.9785e5f1fd2220dp+0L, -0xe.a75fdfab6ccb19fp-1L, 0xe.98c13fbb6e30aacp-2L, -0xb.5f91b98978c679ep-3L, 0xe.8eae05626e0638ap-4L, -0xb.ca749e32836e5f1p-5L, -0x9.72cf4870508e45cp-9L, 0x9.37dff4b35dc1001p-8L, -0xf.3317d54b0887a0cp-13L, -0xd.40c0175fca78546p-20L, -0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0xc.812707c43d519efp-6L, -0x9.e552b70e347cfbdp-3L, 0xc.a3f31b54f1b9fa4p-2L, -0x8.19d3cf93067786bp-1L, 0xa.8db64f068221badp-2L, -0x8.5eb17e0f022abcep-3L, 0x8.145f72db30cf502p-3L, -0x8.b106cdfe01f5b31p-3L, 0xd.af7c0cee66cd13ep-5L, -0xd.bcaa5835f4575cbp-9L, 0x8.2a68c68e64863cdp-7L, -0xa.40b92c6e94234bfp-8L, -0xc.674370c0ea12a57p-9L, 0x9.4935c4c0f1539cfp-9L, -0x9.05749bf3d4982dep-12L, -0xf.1305877150497c2p-19L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.1d2fbfac23949a1e129ec9f8391bp-4Q, 0x1.b1b6520101e0e6c7ddaa9da59f23p-1Q, 0x1.8b08d5cd4a2ad4b181244736a713p-3Q, -0x1.4aef16c7e666f719f7698e178af1p-3Q, 0x1.fd1877f1138be38ba53889d724ecp-5Q, -0x1.7ee87092fa242b1ef789aaf8def8p-8Q, -0x1.09758849af60512fff4fa06073a6p-7Q, 0x1.3d3ef7388a3ade9f5adf4b3f580dp-8Q, -0x1.29147421d57112477f4b7b3491f7p-10Q, 0x1.b33acccf47f1bda17f46b8106497p-15Q, 0x1.7e6498cdbddd4dce209effce7062p-16Q, -0x1.53f9494edf1282277c1de6dc67e4p-19Q, -0x1.58c1d88e09b30b0364784ebc1f68p-24Q, 0x1.278ba12dc249a4cd49c8d69ab623p-29Q, -0x1.705a7a4d83450688cb9e189ad73ep-38Q, -0x1.4fb4ee678fa0e1946f2bc7ed6f9ap-52Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.2b90f770700937399f9f525fd17p-2Q, 0x1.af96b810375ae30c4c41bf8dddd3p-1Q, -0x1.d3c16b16ba8799042d28d9c49845p+0Q, 0x1.1690032de8cfad91fdf041ea0eb6p+0Q, -0x1.1f4f37268ff73d0393fe0f67790ep-1Q, 0x1.82c9256a70f8e96c68d16f2e3327p-3Q, -0x1.540e9bea7c732170245209a302fbp-7Q, -0x1.49841c554fed1d5f2443e15a5a95p-6Q, 0x1.96a364065f27ccd19657d67cdf64p-8Q, 0x1.0c49493de5a6ec95d0bb4c3aca89p-11Q, -0x1.b592fbb7be41b5e92f003f6109fcp-12Q, 0x1.9d3f09be0cea6d8d6f8ed455255ap-16Q, 0x1.8562af0388b7df01536ccb66a5b4p-23Q, -0x1.13cc2e0d34f2575dd283b068f4bap-24Q, 0x1.2234e02ed8630c149658a9630026p-34Q, 0x1.08644a120d1ef6f0d4b961ae1879p-47Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.e4c00e361fc67a2e12b083b2df48p-1Q, -0x1.aad6ffd5d77f153c17f1c8823935p+0Q, 0x1.135c57711e67099c1758b9c717c8p-2Q, 0x1.5b41454ff095722d0f803ea68127p-1Q, -0x1.c92ba77b267a297500d5b5d44785p-4Q, -0x1.4f00ea2c2d363149504e045fbe84p-2Q, 0x1.61aa479f9dc67b53226c771010fp-2Q, -0x1.667619426289632c2e8907dc1851p-3Q, 0x1.7235017b58d31cc6ca2ab84f7b8bp-5Q, -0x1.85c5f4a449272d8bf24d90db58c1p-10Q, -0x1.2bb318efa4d23587f50785ea34e5p-9Q, 0x1.b3d73e818e5c9557fa6b95207f02p-12Q, 0x1.bca3f26f194cf877e2358ca6efddp-17Q, -0x1.261d8947cb7277733f476ea3b7dfp-20Q, 0x1.36693a4632268e426c40140353cep-28Q, 0x1.1a9906065291eec094ff6b8172d8p-40Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.27d6df36685a79598b6c86ce474dp+1Q, -0x1.2ded79e41fdb0c43d1210e12de17p+3Q, 0x1.e79fd7c0b1c0ebd84f460885ecf3p+3Q, -0x1.304a1a210a5f9ce8bc8b8a0cdf19p+3Q, -0x1.effd2573aa9aafcb53e588a096b7p+2Q, 0x1.7ce72fdc2cb91189ae6d5e090c6bp+4Q, -0x1.985f0196c72e53e6d1cfdee84e02p+4Q, 0x1.d3cfac07a9d2a8c51198c074937dp+3Q, -0x1.e1a24f8472a680b7d24d058147a3p+1Q, -0x1.9b8563bd7c7d7dc5768ba3df017ep-2Q, 0x1.fe4766e3faf53b0d124828083686p-2Q, -0x1.73f12d4155f35b3e8452b4ff00abp-4Q, -0x1.20dddf659ee509c6befdf1c7addep-10Q, 0x1.ffd28fb3400bf45efe5c328fc188p-12Q, -0x1.fa83788d3f78d19a901b7477bae6p-20Q, -0x1.cc794a76e5f165fc8108c92b057bp-31Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.c7ced0f66aeaccfcda16588f9d75p+1Q, -0x1.2ab8c9c81252e46b55777de43246p+4Q, 0x1.4df684dede46d3a014591fcfc934p+5Q, -0x1.af3bf949d62b9c07b05b4ac4bf21p+5Q, 0x1.8eeb17bed133c367f65a67fc6e9fp+5Q, -0x1.541e9c27826e49d24f626bb1a338p+5Q, 0x1.12ea47c60dec043f14d3664c7b9cp+5Q, -0x1.35c8b07214e140ed7f1d446f3113p+4Q, 0x1.d829e1a7628821bc837255b88e76p+1Q, 0x1.69d6e9c20f73cb2d14ff7351adb6p+1Q, -0x1.0235621854eeef97bfd3d4e3b1cp+1Q, 0x1.b423243b8b46906701ef92e0fa6p-2Q, -0x1.2e290398a3fe2fc8cc3aebacf78cp-8Q, -0x1.22b4e2598d44b0dd2f4a293dacc9p-8Q, 0x1.654cdf573874b672ebfe3509d857p-16Q, 0x1.43e711e67867252f78e7e45afce7p-26Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.1617a4f9d885755cd3477307254fp+2Q, -0x1.94d9c534a28d3ee0a8bf210cb612p+4Q, 0x1.dd0eb6aa76ffda42c87706ac442ap+5Q, -0x1.168c0447c1b6e90c330602b02462p+6Q, 0x1.24c19c047007f67f0d2fc486ec63p+5Q, -0x1.016a68491e4d871ca5058cc8b9fbp+0Q, -0x1.c94ed28aba0f51cc92c5b4dc5aacp+2Q, 0x1.669c08c9522f315c7b041fb5fb05p+3Q, -0x1.88dca456f345655b7cb4359a3262p+4Q, 0x1.b958d77e385a9163a2eb3b4f73aep+4Q, -0x1.eccebab605f4b2d725512d8939ecp+3Q, 0x1.f4375d664ce342e4e51867996bcdp+1Q, -0x1.2ade5d60c45811382f7ff19a5bd5p-3Q, -0x1.491f178ce56460d544cbe167fd8cp-4Q, 0x1.5bccddec65e53c1b0416c330319fp-11Q, 0x1.398367062ce373b6810676d67904p-20Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.3841475e9a3639fcb27c2a85a863p+1Q, -0x1.dd3c5aa19c52e5c8a273f6da1b5ap+3Q, 0x1.303529a28e46fac3a8f56ea5a2b3p+5Q, -0x1.a86d9ebb6edc3ca33aa7af7132e4p+5Q, 0x1.7d0e6c4e24170b40a4b9574c4b78p+5Q, -0x1.25c8439d2df89fa5007905a011dap+5Q, 0x1.f5b3e1ac9966686ed844c7042856p+4Q, -0x1.815ee05c85e8aa704180612d3a88p+4Q, 0x1.ca4482f4236a5516d7f638f2b575p+3Q, -0x1.050825dec75a966028608d12e5c4p+3Q, 0x1.1eeca8acc3a791ffedf80be8793bp+2Q, -0x1.6df69657c972c8ebec75c924bb61p+0Q, 0x1.75a7ac677c4eee273d03fc609c7dp-5Q, 0x1.ebd49f3810c888c69855752e166p-5Q, -0x1.4344372e1b6fc786ddf90f275fd2p-10Q, -0x1.20264586c6bb91b0aa0b4d170d57p-18Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.041f759e862aa2196b99e32b0e5p+0Q, -0x1.96fe795439508b28db4265486c81p+2Q, 0x1.04a7fd5b5e5923f7f627bd6af411p+4Q, -0x1.5c5ede521aae5e58438f3722aadep+4Q, 0x1.0b593b29c51bbefd0a21a469361ap+4Q, -0x1.3ddf512850559b028d83098aa4f2p+3Q, 0x1.12f0bcbe3fa44419a6b52304dc22p+3Q, -0x1.d4ebfbf56d99633e38e5753902fdp+2Q, 0x1.d31827f76dc61557ae5c1ea99bcdp+1Q, -0x1.6bf237312f18cf3b573ffc6eb123p+0Q, 0x1.d1d5c0ac4dc0c7147f916f90f5c1p-1Q, -0x1.794e93c6506dcbe26714d9f89e44p-2Q, -0x1.2e59e90e0a11c8b7ce9f9105aca7p-6Q, 0x1.26fbfe966bb82001d50ae928dc43p-5Q, -0x1.e662faa96110f417469ce785ece9p-10Q, -0x1.a81802ebf94f0a8bc8124e2acfbp-17Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.9024e0f887aa33deb80194db4775p-3Q, -0x1.3caa56e1c68f9f7ad07fd686ffdbp+0Q, 0x1.947e636a9e373f489450f999fe93p+1Q, -0x1.033a79f260cef0d616212b14afddp+2Q, 0x1.51b6c9e0d0443759a67a3c3505fdp+1Q, -0x1.0bd62fc1e045579c86e940e51c15p+0Q, 0x1.028bee5b6619ea0406791e99a571p+0Q, -0x1.1620d9bfc03eb662d8d654bb6c17p+0Q, 0x1.b5ef819dccd9a27cb2716f32a404p-2Q, -0x1.b7954b06be8aeb961960232f51e9p-6Q, 0x1.054d18d1cc90c79a1ef036069b3dp-4Q, -0x1.4817258dd284697ebc00b788ccd7p-5Q, -0x1.8ce86e181d4254ae37719aa28183p-6Q, 0x1.2926b8981e2a739eefaa1e5b0722p-6Q, -0x1.20ae937e7a9305bbde13268a4994p-9Q, -0x1.e260b0ee2a092f8355b87bfdf959p-16Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0696256148532700351919396744932899458901475071882009455460949442257725090643"), boost::lexical_cast("0.847094118712392865488445491666448260772283771603129862851579519790390191884"), boost::lexical_cast("0.192887945487446735108207067592716438385147148387205741175709003694874991303"), boost::lexical_cast("-0.161588838553871279142256267689733836106164148233593303014435155929549184904"), boost::lexical_cast("0.0621454565631309617634380881808335928424960159357894362352948406059776368030"), boost::lexical_cast("-0.00584271191016988667489934317676681761380261859736020254107802203440485911830"), boost::lexical_cast("-0.00810116915396986484284110901604422633398896546175619238854935214695602535306"), boost::lexical_cast("0.00484078918138035149158848553294039923334976019542221808517285604431896830998"), boost::lexical_cast("-0.00113326987089607350360311514735367410308696721786347944018825854440169314785"), boost::lexical_cast("0.0000518834218559123344579363088412935129165280069792765898378420125485731010746"), boost::lexical_cast("0.0000227923963427004781576572210149586228991148638291199976434901264070906009219"), boost::lexical_cast("-0.00000253300201030598522589097875316626630820822335580422623437912828366256338066"), boost::lexical_cast("-0.0000000802700432516996219234776794962786936078351284525549608976066927226092457516"), boost::lexical_cast("0.00000000215037600823040848531416812145312700229132524083435563752554400656355171355"), boost::lexical_cast("-0.00000000000523461705899403093230911172363595454183744690618924167900623489664585671892"), boost::lexical_cast("-0.000000000000000291179201205891612682286686378360986960244052826956539582335356631085936448"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.292545191037796939535389393392524159619768256766940538370253353709461193032"), boost::lexical_cast("0.842946769694824537045009424862247504440189060559035409366548153562971046333"), boost::lexical_cast("-1.82717007927797538158634749745144900658761906951781067368239430170496580026"), boost::lexical_cast("1.08813495512805388191036942833223671123809253137161269595551241180555412336"), boost::lexical_cast("-0.561151240784950357351319288602199217315277177939018273801699428225616351849"), boost::lexical_cast("0.188860218344526891969457899968714396869941678733540325124502082703253093959"), boost::lexical_cast("-0.0103777180965810325757147992456275086095651002024262019464570618682172893560"), boost::lexical_cast("-0.0201120640460875141204975265352055179708974180844365324656095077183481665071"), boost::lexical_cast("0.00620480720533278240593000416203558121866225849233783767746501903652779797358"), boost::lexical_cast("0.000511715457593831878348526994379850228214262314833874209020963369744116177094"), boost::lexical_cast("-0.000417303231628420130847533411474569395038335447444917096887081609399824377911"), boost::lexical_cast("0.0000246313954834336786578230076000285162282668339295707375389296462305068325569"), boost::lexical_cast("0.000000181321745272135394237503981158619963539109967763295911042193620477541392180"), boost::lexical_cast("-0.0000000642141275320865350440248672780732024814675393949502653848285464530637503456"), boost::lexical_cast("0.0000000000659853289473506178162438806415358166040221310868614460485355680895239971041"), boost::lexical_cast("0.00000000000000733834535433323085982655900391187245584811969936387919615025045530814656992"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.946777767283390540714404221584615079023092608593179874933591611929424472485"), boost::lexical_cast("-1.66734312983271267309321411121395907583555820122567011112376971940996707956"), boost::lexical_cast("0.268906942633839773948889603119308083663479474183417680672346331112533372730"), boost::lexical_cast("0.678232351310991258941508584688642891898119286261551673777759411644213054589"), boost::lexical_cast("-0.111613897536158060295536493503011833000297341597327636552216220361799209380"), boost::lexical_cast("-0.327151926943136388570224093819464516869683572537433435414357010300674438746"), boost::lexical_cast("0.345376128308493052665256776473446621249215438981458413871842565755981610451"), boost::lexical_cast("-0.175029942835241930595606890611047181166656164868469200496810519729335464519"), boost::lexical_cast("0.0451912907544972500160407679210623907538006067792182784497573909710514110903"), boost::lexical_cast("-0.00148686700510683159736033420530033526602254575192174933907208287640696148334"), boost::lexical_cast("-0.00228652648349626930958233420749265339034884848058225128735489316309216194635"), boost::lexical_cast("0.000415650174634043890487751208209411279937212554767153184423913890865016834975"), boost::lexical_cast("0.0000132513170838045914618299238086704647297885466647476958534437752575150892279"), boost::lexical_cast("-0.00000109566515677943851419827253312757926681754226925567626886322889119467587352"), boost::lexical_cast("0.00000000451707521924643308252924541765504862848358919185132320746715765398014639333"), boost::lexical_cast("0.00000000000100398888555583838447015712041044761982662545295143252368229865482374008093"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.31124487072584709340072024375652751167903029344934811013210724247867834712"), boost::lexical_cast("-9.43523878627351700486667408986119165102766488328680852307793395602884092368"), boost::lexical_cast("15.23826205859770997419029499536885930324282552790731045653500894195106217230"), boost::lexical_cast("-9.50904566243388026482185821161121048927181414560909106839809459077939567212"), boost::lexical_cast("-7.74982582374142746596539847819058427772645564907288598203930173309437241112"), boost::lexical_cast("23.80644212728254095208630893797731947546863789816665646941416033108845852560"), boost::lexical_cast("-25.52319487474132573315598925827481047528889709949317322024171789375930496050"), boost::lexical_cast("14.61910058495285111510583787914644598320193823700758034804561275077288093820"), boost::lexical_cast("-3.76276582686596230192956587364009471111423882274083500758285711718430914481"), boost::lexical_cast("-0.401876028480840022977724595683369746855848802187118863206831503976422808900"), boost::lexical_cast("0.498319251694501402266194337927777390492533960487059487842842210706425452006"), boost::lexical_cast("-0.0908061759740775534638772529734415696617219068242862250162791584120467567508"), boost::lexical_cast("-0.00110193897253809208118839003583409411342268641822896346372378981763645701667"), boost::lexical_cast("0.000488111977759341608153274160279547453053433093120482116238865902413969365260"), boost::lexical_cast("-0.00000188691004449025030399350421194685076340345889651763665155607041691780427844"), boost::lexical_cast("-0.000000000837596949144929524562460249627191951019750983422579043777172865056887183216"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.56099903137313447653308073719069094628298405133690563906561861936445946007"), boost::lexical_cast("-18.67011430886230370235720362402145866382565255864894062875836808783810172070"), boost::lexical_cast("41.74537061801752618764215796492553160234168704484092726499577820178240950150"), boost::lexical_cast("-53.90428407368513143095733499969054312179860229999410756267069469773697487590"), boost::lexical_cast("49.86479138446745347495028288278129648962436375452866744453087449252422749480"), boost::lexical_cast("-42.51494627825539832489623511405198662612329830348598981334872895902788851530"), boost::lexical_cast("34.36439470987306965384334763928109227423995285653319098010560258917408804280"), boost::lexical_cast("-19.36149639666662401531934915671584710840660950619246136186169380992926261930"), boost::lexical_cast("3.68877812073793714221449969323656655140811213570309303147472950766460448556"), boost::lexical_cast("2.82687112784961267420163066364729873031830257798046834667883219375131634861"), boost::lexical_cast("-2.01725412548136472359247020220053150679272256461259072142878792076970321518"), boost::lexical_cast("0.425915304312019461782564152045098653193242220169129362972564850123877163104"), boost::lexical_cast("-0.00461059892462853652486233333670046935605106056900099120735719921725474826272"), boost::lexical_cast("-0.00443583036535695045092535332549546407656776796969226954011005583519642324338"), boost::lexical_cast("0.0000212967564409202157603357608120205592853860427112088867632348335621428459043"), boost::lexical_cast("0.0000000188536136927150567144741756924115740343376900701049770411358310019917707856"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.34519314192774371644605664344260685807624755151402674229796990772442490669"), boost::lexical_cast("-25.30316658554586670195060554724977775864649185540159313706154605487824252430"), boost::lexical_cast("59.63218434501321241686227040141305669678309492280566274270121970853125985750"), boost::lexical_cast("-69.63673507804717481631012221036570369169261940901946481187737315982813252500"), boost::lexical_cast("36.59453586069957542305839900792960952397807013166550399544566076698109838520"), boost::lexical_cast("-1.00552989754787890241812019217185423330772733818008108791628359534655241737"), boost::lexical_cast("-7.14543593928850838676384113079945586921929171803713962006454488900252833519"), boost::lexical_cast("11.20654715843691044532849119891603196174261061865084786297107780266854541590"), boost::lexical_cast("-24.55386766400291639497667909532438173366128839958254164111061988488776479890"), boost::lexical_cast("27.58418988518466039332570510309944494563540512877954948263846939300864839690"), boost::lexical_cast("-15.40023551513117748173055818458330381918522055139888794492596135452925084020"), boost::lexical_cast("3.90793960089811251141014062726261819004190764494555441923947299947294357551"), boost::lexical_cast("-0.145931939616769342677381879905952490456893639361103035834837241907687647570"), boost::lexical_cast("-0.0803519172607930217143096597939609700610595254316391845465369362291239673402"), boost::lexical_cast("0.000663376352849585270549158082005899457474231838909594090590164906243989945765"), boost::lexical_cast("0.00000116792802055684000576004901649051578220621239562395324237331611330461969728"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.43949215049035378308490877112616480587247519253349272700089974373761727070"), boost::lexical_cast("-14.91361743511751278653863337775082100851257612848163914659667962039370407430"), boost::lexical_cast("38.02595831867881537937530443404440268525161384656893310351288920599098373240"), boost::lexical_cast("-53.05352541381901538280530176799613503869273806435001792774565773108485860860"), boost::lexical_cast("47.63204251334798800088842822439490203451348559647805617494608965893769108390"), boost::lexical_cast("-36.72278521343748975726593618407350035873027478333718779024037203624257707460"), boost::lexical_cast("31.35641639157838698914459960374580961178260675889546093721185892770212198730"), boost::lexical_cast("-24.08566318647221270199387206585348313707566820901513697285058134722858155000"), boost::lexical_cast("14.32086322482366348310210031894559072891597107117636756749550089821175221100"), boost::lexical_cast("-8.15724462043256685901583341088487623405631051772335513386812463292410806832"), boost::lexical_cast("4.48319451209555908109543430241568887648627099692558144854507468628906508116"), boost::lexical_cast("-1.42954387324557353924315901131597022588839567829311825849808138225813793539"), boost::lexical_cast("0.0456121794958422788519835738614979042067103492896491552781823773644117194263"), boost::lexical_cast("0.0600379094835484277448500775653734021516869903849852917021361921275127990832"), boost::lexical_cast("-0.00123316370766296458175735033761430852810590026894516671661974149487692611779"), boost::lexical_cast("-0.00000429376212343184311613788702973769675152078312600917651519873431746001425928"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.01610503311364167160627137764879687271588589977337586555528700566771231261"), boost::lexical_cast("-6.35928185677517694205349753594529349921775157958594734217344676184083432133"), boost::lexical_cast("16.29101310435141502366280370334959338566491174925988910204852058573624530770"), boost::lexical_cast("-21.77316124031030816094586803202252059552525483663335766522914705661431629930"), boost::lexical_cast("16.70928493801487468593777022092645595574965917216718445219727297028380055500"), boost::lexical_cast("-9.93351037858763008636351351386408163754727545153280350373395004801729390569"), boost::lexical_cast("8.59188687475137459206298080378293728057617745867309534594204113820751716392"), boost::lexical_cast("-7.32690333335485473282043083732510305617086761800316899520505182249948309741"), boost::lexical_cast("3.64917468625530775745714112854788870052100478150662596792140805409798695237"), boost::lexical_cast("-1.42166466666012357755455417666976389843036696424169510073074551625991444526"), boost::lexical_cast("0.909833928139848029659705433844716551575919061966592740387936617767990646124"), boost::lexical_cast("-0.368463810900818519321280729699948238382245337243194077152888098658300603538"), boost::lexical_cast("-0.0184540534902747235287786613095163827842721391935005620122745696525182529649"), boost::lexical_cast("0.0360088322080320960591978261837204402906245566453303385097283622763009148578"), boost::lexical_cast("-0.00185541777531833871298150644744023226659198738569918082665820219229654776018"), boost::lexical_cast("-0.0000126389799887751449655010004416467695567661727273854980326583025983179615470"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.195382840714008222445649562861088516286064981461948780814133345930973823658"), boost::lexical_cast("-1.23697417270756070794757091967677027603167042250757849222269393098384194621"), boost::lexical_cast("3.16010706621130486269935853293254242082033173364580217315573625619258790152"), boost::lexical_cast("-4.05044411344282111665932979112008908801732860080823387948554260440261464757"), boost::lexical_cast("2.63839076497291256523926291558126191854618618017387332992219855643874357679"), boost::lexical_cast("-1.04623697741796683485007131051068458751031503463108641697374490811821670148"), boost::lexical_cast("1.00994767886559314051425312348881627025613387213269219272738325207774312849"), boost::lexical_cast("-1.08643876010341497975910071082821695937290873893825930817786907767606917664"), boost::lexical_cast("0.427671456581458673009899734932815948658546455375010876404838027129297913818"), boost::lexical_cast("-0.0268300278357648758353382533868083591820649404851508751125983578913516081871"), boost::lexical_cast("0.0637942285073089320624911876442649124426662264770688199203469027353144526797"), boost::lexical_cast("-0.0400500997044024766957707475186007575121602332713762255038636186221048809222"), boost::lexical_cast("-0.0242253375185620584577236293255475747352363289859909376495538304199524801451"), boost::lexical_cast("0.0181366732290110494820691728220505559010664322036613445274186399424581173253"), boost::lexical_cast("-0.00220246839966366946271442320741368580934032927301220467330879016842440794250"), boost::lexical_cast("-0.0000287519514407257853644446887092547399712525693691776728798621645433043384651"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 10) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.12cb0ap-5f, 0x1.4e2c28p-1f, 0x1.1c4636p-1f, -0x1.85d2eep-2f, 0x1.9e3daep-3f, -0x1.494bcp-4f, 0x1.1d23ep-6f, 0x1.d4ed16p-10f, -0x1.2885ecp-9f, 0x1.94f202p-12f, 0x1.44e94ep-14f, -0x1.b37dfap-16f, 0x1.403906p-24f, 0x1.c9437p-24f, -0x1.58dbb8p-28f, 0x1.db3584p-37f, 0x1.afee7cp-44f, -0x1.098874p-59f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.43cfccp-3f, 0x1.f5f9c2p-1f, -0x1.94bc28p+0f, 0x1.61584ep-1f, -0x1.a2cb68p-2f, 0x1.eef0eap-3f, -0x1.ac223p-4f, 0x1.c84ec2p-6f, -0x1.213456p-8f, 0x1.2c315ap-10f, -0x1.f37546p-12f, 0x1.ce036p-15f, 0x1.06ba9ap-17f, 0x1.2eea96p-21f, 0x1.f125fap-26f, -0x1.51db7ap-33f, -0x1.3ced9ep-40f, 0x1.85b824p-55f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.2d6cb8p-1f, -0x1.01b00cp-2f, -0x1.0fd09ap+1f, 0x1.8bd77ap+1f, -0x1.c8684ep+0f, 0x1.6e6d86p-2f, 0x1.86e852p-2f, -0x1.9dcbe6p-2f, 0x1.55c762p-3f, -0x1.35a482p-6f, -0x1.51b88cp-7f, 0x1.076728p-8f, -0x1.67961ap-12f, -0x1.2b4a08p-15f, 0x1.bb4b6cp-19f, 0x1.3f418cp-28f, -0x1.0d99c2p-32f, 0x1.4b9c06p-46f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.a8daep+0f, -0x1.8d688ep+2f, 0x1.317cc4p+3f, -0x1.00fa12p+3f, 0x1.9e984cp+1f, 0x1.0dcc3cp+1f, -0x1.41a436p+2f, 0x1.075a46p+2f, -0x1.9984ccp+0f, 0x1.9cf2e8p-5f, 0x1.c91578p-3f, -0x1.60b8bp-4f, 0x1.32422ap-7f, 0x1.dd5da6p-11f, -0x1.351528p-13f, -0x1.03c426p-22f, 0x1.7713ap-26f, -0x1.cd96fcp-39f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.a04f8p+1f, -0x1.18f0a4p+4f, 0x1.4ce384p+5f, -0x1.dc75fap+5f, 0x1.fdbc98p+5f, -0x1.eefc0cp+5f, 0x1.b92a7cp+5f, -0x1.2299d6p+5f, 0x1.6502b8p+3f, 0x1.11f34p+2f, -0x1.73b0a4p+2f, 0x1.244d46p+1f, -0x1.35466cp-2f, -0x1.fc20c8p-6f, 0x1.0d9c8cp-7f, 0x1.a4010cp-19f, -0x1.49b0cap-19f, 0x1.962a6ep-31f, -0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.55886ep+2f, -0x1.09d96p+5f, 0x1.505f98p+6f, -0x1.96ec36p+6f, 0x1.17b23p+5f, 0x1.fc1722p+5f, -0x1.b35f4ap+6f, 0x1.d17f22p+6f, -0x1.12118cp+7f, 0x1.207a74p+7f, -0x1.934736p+6f, 0x1.3fa55cp+5f, -0x1.959602p+2f, -0x1.9505e8p-1f, 0x1.43d264p-2f, -0x1.38e018p-10f, -0x1.968e84p-13f, 0x1.f5ed4cp-24f, -0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.f3cda2p+1f, -0x1.9eeda2p+4f, 0x1.260fdap+6f, -0x1.d673d8p+6f, 0x1.f01b3p+6f, -0x1.addb2cp+6f, 0x1.7db87cp+6f, -0x1.3f986p+6f, 0x1.ae7316p+5f, -0x1.fb5cc4p+4f, 0x1.259afcp+4f, -0x1.fe186ep+2f, 0x1.4d0298p+0f, 0x1.a1f0a6p-2f, -0x1.40c0aep-3f, 0x1.ba72fap-9f, 0x1.c193f2p-13f, -0x1.16b49ap-22f, 0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.3586dap+1f, -0x1.08fa64p+4f, 0x1.7c41fp+5f, -0x1.276b64p+6f, 0x1.14f1dp+6f, -0x1.83d54ap+5f, 0x1.4053c8p+5f, -0x1.209b54p+5f, 0x1.657834p+4f, -0x1.2ddf68p+3f, 0x1.38745p+2f, -0x1.4065c2p+1f, 0x1.6763c6p-4f, 0x1.181d4ep-1f, -0x1.87564p-3f, 0x1.843d22p-7f, 0x1.52be3cp-11f, -0x1.a79c62p-20f, 0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.7a3cf4p+0f, -0x1.48b25ep+3f, 0x1.cbd932p+4f, -0x1.37885ep+5f, 0x1.4db4fcp+4f, 0x1.74ac2ep+2f, -0x1.11ca3p+3f, 0x1.9fa6aap-4f, -0x1.8ceb32p+2f, 0x1.e686e4p+3f, -0x1.7e0b78p+3f, 0x1.7e1a34p+2f, -0x1.247b58p+2f, 0x1.b8a4e2p+1f, -0x1.4f17d6p+0f, 0x1.4b4084p-3f, 0x1.726478p-7f, -0x1.d74fd6p-15f, 0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.f6438ap-4f, -0x1.b7ba92p-1f, 0x1.3f509cp+1f, -0x1.eac616p+1f, 0x1.ae9244p+1f, -0x1.00d5dp+1f, 0x1.9413f4p+0f, -0x1.9bd984p+0f, 0x1.16aae2p+0f, -0x1.158768p-1f, 0x1.8145e4p-2f, -0x1.faf556p-3f, 0x1.8ec972p-4f, -0x1.49980ep-5f, 0x1.5730c4p-6f, -0x1.0952d6p-8f, -0x1.ce071ep-12f, 0x1.30a436p-18f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.12cb0a33640b5p-5, 0x1.4e2c27be21e0ep-1, 0x1.1c4636ef189edp-1, -0x1.85d2edb33e46ep-2, 0x1.9e3dada7662aap-3, -0x1.494bbf8e53bfcp-4, 0x1.1d23df75685c9p-6, 0x1.d4ed15a068488p-10, -0x1.2885ec2406341p-9, 0x1.94f202846521cp-12, 0x1.44e94de53f6f6p-14, -0x1.b37df99b75f09p-16, 0x1.403905df41d32p-24, 0x1.c94370d7ecc92p-24, -0x1.58dbb791a7fb7p-28, 0x1.db358382953c4p-37, 0x1.afee7cd299cd6p-44, -0x1.0988745ca3ec4p-59, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.43cfcb9d73923p-3, 0x1.f5f9c20090df3p-1, -0x1.94bc27297b9f9p+0, 0x1.61584eb9fe3a6p-1, -0x1.a2cb67ff996a9p-2, 0x1.eef0eaaf4989ep-3, -0x1.ac22308c89e82p-4, 0x1.c84ec23c8cdbep-6, -0x1.213456d8479d6p-8, 0x1.2c315a17e4064p-10, -0x1.f375455c5c9e6p-12, 0x1.ce035ff90a79bp-15, 0x1.06ba9aa22e87cp-17, 0x1.2eea964fb1e8p-21, 0x1.f125f98e34b08p-26, -0x1.51db791710beap-33, -0x1.3ced9d37da5d3p-40, 0x1.85b82452d9269p-55, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.2d6cb779664d4p-1, -0x1.01b00cc8d5d06p-2, -0x1.0fd0995df5aa3p+1, 0x1.8bd77a675e828p+1, -0x1.c8684eac579b4p+0, 0x1.6e6d859b2e73p-2, 0x1.86e851ba85835p-2, -0x1.9dcbe6db37906p-2, 0x1.55c762fd5a0dfp-3, -0x1.35a481158ac34p-6, -0x1.51b88ceed7adep-7, 0x1.0767285c8f106p-8, -0x1.67961ae7bb9ap-12, -0x1.2b4a0836ed60bp-15, 0x1.bb4b6c6c9a6fbp-19, 0x1.3f418b80d3d45p-28, -0x1.0d99c100eff2ep-32, 0x1.4b9c0643323fbp-46, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.a8dadfc02dd04p+0, -0x1.8d688d31d04a4p+2, 0x1.317cc4a10faf4p+3, -0x1.00fa12867f491p+3, 0x1.9e984b48af592p+1, 0x1.0dcc3bbac5e09p+1, -0x1.41a435a1df481p+2, 0x1.075a464fd9704p+2, -0x1.9984cb75bad51p+0, 0x1.9cf2e7196d1ccp-5, 0x1.c915787e3612ep-3, -0x1.60b8b0c3b1139p-4, 0x1.324229742ef44p-7, 0x1.dd5da666efa59p-11, -0x1.351528a4bd817p-13, -0x1.03c4250827b69p-22, 0x1.77139f17861ebp-26, -0x1.cd96fccfe9f0bp-39, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.a04f8069ea8b5p+1, -0x1.18f0a34d9f68ep+4, 0x1.4ce3831796a62p+5, -0x1.dc75f9b0b9a1p+5, 0x1.fdbc97313e6edp+5, -0x1.eefc0cdda4efap+5, 0x1.b92a7c1b6a88ap+5, -0x1.2299d502734c4p+5, 0x1.6502b707871dfp+3, 0x1.11f33f4ede648p+2, -0x1.73b0a319e688ap+2, 0x1.244d452e76301p+1, -0x1.35466c5650c62p-2, -0x1.fc20c8dd92f1ap-6, 0x1.0d9c8b9d476f8p-7, 0x1.a4010b80e5496p-19, -0x1.49b0c99eb9c65p-19, 0x1.962a6dd57b7dbp-31, -0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.55886d2f64381p+2, -0x1.09d95f1cede32p+5, 0x1.505f98e4bf277p+6, -0x1.96ec354b30307p+6, 0x1.17b23075f801p+5, 0x1.fc17211fa4d6fp+5, -0x1.b35f4a36b31c4p+6, 0x1.d17f22f2480f9p+6, -0x1.12118c5678b4dp+7, 0x1.207a74ca5ad8cp+7, -0x1.934735f943482p+6, 0x1.3fa55ba9206e4p+5, -0x1.959601005ec55p+2, -0x1.9505e84d98e61p-1, 0x1.43d2632e32cd1p-2, -0x1.38e017336cd06p-10, -0x1.968e83ac595b9p-13, 0x1.f5ed4b124df3bp-24, -0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.f3cda2f9b1354p+1, -0x1.9eeda12641b62p+4, 0x1.260fdaadd19ebp+6, -0x1.d673d80eeade5p+6, 0x1.f01b2fa154d03p+6, -0x1.addb2c4ad791ep+6, 0x1.7db87bda6fdf9p+6, -0x1.3f9860f6c4906p+6, 0x1.ae731643e9199p+5, -0x1.fb5cc3351ebc1p+4, 0x1.259afcbb8804dp+4, -0x1.fe186e46030ap+2, 0x1.4d0298c218927p+0, 0x1.a1f0a66406a12p-2, -0x1.40c0addfd8554p-3, 0x1.ba72fac37f088p-9, 0x1.c193f16bb678ep-13, -0x1.16b4995bb4f07p-22, 0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.3586d9a9e0e3ep+1, -0x1.08fa63342ecc2p+4, 0x1.7c41f01d6960dp+5, -0x1.276b64d22e135p+6, 0x1.14f1cf74869cp+6, -0x1.83d54ac636b82p+5, 0x1.4053c8a2c8d3p+5, -0x1.209b538b18df2p+5, 0x1.65783340b3783p+4, -0x1.2ddf670e51dfdp+3, 0x1.38744fdae2125p+2, -0x1.4065c212ba5cp+1, 0x1.6763c5d11b775p-4, 0x1.181d4d676ea1fp-1, -0x1.87564028831fcp-3, 0x1.843d22529bb4ap-7, 0x1.52be3b0b8c7afp-11, -0x1.a79c626c8654fp-20, 0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.7a3cf471120ecp+0, -0x1.48b25e52d274bp+3, 0x1.cbd93276e7d59p+4, -0x1.37885d5242031p+5, 0x1.4db4fb7a5ecdcp+4, 0x1.74ac2dca21f56p+2, -0x1.11ca2f9f0b7dp+3, 0x1.9fa6aaf0c8d98p-4, -0x1.8ceb3288570cdp+2, 0x1.e686e3fbc3fbfp+3, -0x1.7e0b780d60232p+3, 0x1.7e1a3482e160cp+2, -0x1.247b57131543cp+2, 0x1.b8a4e1c96768dp+1, -0x1.4f17d502240a9p+0, 0x1.4b408438ac869p-3, 0x1.7264788c9473ep-7, -0x1.d74fd6a021548p-15, 0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.f6438a3a8846p-4, -0x1.b7ba9255f9c78p-1, 0x1.3f509b3842149p+1, -0x1.eac616f0d4f87p+1, 0x1.ae9244fef585dp+1, -0x1.00d5d03220f3cp+1, 0x1.9413f3bab26fdp+0, -0x1.9bd9847a10dd5p+0, 0x1.16aae27d18a67p+0, -0x1.1587682f48216p-1, 0x1.8145e3cc3cfccp-2, -0x1.faf556e68970ep-3, 0x1.8ec972676b06bp-4, -0x1.49980ed40883dp-5, 0x1.5730c48bae56ap-6, -0x1.0952d6b855c64p-8, -0x1.ce071dd8df1efp-12, 0x1.30a4361eb25b4p-18, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0x8.9658519b205ab72p-8L, 0xa.71613df10f0723dp-4L, 0x8.e231b778c4f6662p-4L, -0xc.2e976d99f236ef3p-5L, 0xc.f1ed6d3b3154c33p-6L, -0xa.4a5dfc729dfe012p-7L, 0x8.e91efbab42e4488p-9L, 0xe.a768ad03424408ap-13L, -0x9.442f612031a0acp-12L, 0xc.a7901423290dc7ep-15L, 0xa.274a6f29fb7b195p-17L, -0xd.9befccdbaf8457bp-19L, 0xa.01c82efa0e991ep-27L, 0xe.4a1b86bf6648ca3p-27L, -0xa.c6ddbc8d3fdb61fp-31L, 0xe.d9ac1c14a9e22dfp-40L, 0xd.7f73e694ce6b23p-47L, -0x8.4c43a2e51f61f4ap-62L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xa.1e7e5ceb9c91909p-6L, 0xf.afce100486f966ap-4L, -0xc.a5e1394bdcfcb6dp-3L, 0xb.0ac275cff1d33d6p-4L, -0xd.165b3ffccb5480ap-5L, 0xf.7787557a4c4f14ep-6L, -0xd.611184644f4100cp-7L, 0xe.427611e466df078p-9L, -0x9.09a2b6c23cead05p-11L, 0x9.618ad0bf2031fa3p-13L, -0xf.9baa2ae2e4f30dfp-15L, 0xe.701affc853cdb21p-18L, 0x8.35d4d511743e237p-20L, 0x9.7754b27d8f401bap-24L, 0xf.892fcc71a583f65p-29L, -0xa.8edbc8b885f4c32p-36L, -0x9.e76ce9bed2e946cp-43L, 0xc.2dc12296c934a42p-58L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0x9.6b65bbcb326a224p-4L, -0x8.0d806646ae83286p-5L, -0x8.7e84caefad51526p-2L, 0xc.5ebbd33af4141bap-2L, -0xe.43427562bcd9f08p-3L, 0xb.736c2cd97397c01p-5L, 0xc.37428dd42c1a763p-5L, -0xc.ee5f36d9bc83386p-5L, 0xa.ae3b17ead06fb26p-6L, -0x9.ad2408ac5619da4p-9L, -0xa.8dc46776bd6ee4dp-10L, 0x8.3b3942e4788322ap-11L, -0xb.3cb0d73ddccfdfep-15L, -0x9.5a5041b76b0571dp-18L, 0xd.da5b6364d37d7c6p-22L, 0x9.fa0c5c069ea261fp-31L, -0x8.6cce08077f97363p-35L, 0xa.5ce0321991fd8ep-49L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xd.46d6fe016e82146p-3L, -0xc.6b44698e825210ap-1L, 0x9.8be625087d79ffdp+0L, -0x8.07d09433fa48997p+0L, 0xc.f4c25a457ac90c1p-2L, 0x8.6e61ddd62f0442fp-2L, -0xa.0d21ad0efa407b6p-1L, 0x8.3ad2327ecb81caap-1L, -0xc.cc265badd6a86efp-3L, 0xc.e79738cb68e5e97p-8L, 0xe.48abc3f1b09716ap-6L, -0xb.05c5861d889c6fap-7L, 0x9.92114ba177a20b1p-10L, 0xe.eaed33377d2c762p-14L, -0x9.a8a94525ec0bb0bp-16L, -0x8.1e2128413db47b5p-25L, 0xb.b89cf8bc30f58d6p-29L, -0xe.6cb7e67f4f857ddp-42L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xd.027c034f545a722p-2L, -0x8.c7851a6cfb47268p+1L, 0xa.671c18bcb530f7bp+2L, -0xe.e3afcd85cd0820fp+2L, 0xf.ede4b989f376b43p+2L, -0xf.77e066ed277d141p+2L, 0xd.c953e0db5444e19p+2L, -0x9.14cea8139a61e4ep+2L, 0xb.2815b83c38efa28p+0L, 0x8.8f99fa76f323eadp-1L, -0xb.9d8518cf3444f4dp-1L, 0x9.226a2973b180497p-2L, -0x9.aa3362b28630f09p-5L, -0xf.e10646ec978cdc7p-9L, 0x8.6ce45cea3b7be89p-10L, 0xd.20085c072a4ae87p-22L, -0xa.4d864cf5ce32429p-22L, 0xc.b1536eabdbed537p-34L, -0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xa.ac43697b21c05d7p-1L, -0x8.4ecaf8e76f18fe7p+2L, 0xa.82fcc725f93bb38p+3L, -0xc.b761aa5981834ffp+3L, 0x8.bd9183afc008112p+2L, 0xf.e0b908fd26b79fbp+2L, -0xd.9afa51b598e1c25p+3L, 0xe.8bf91792407c46p+3L, -0x8.908c62b3c5a6a21p+4L, 0x9.03d3a652d6c5fe1p+4L, -0xc.9a39afca1a40e4p+3L, 0x9.fd2add490371c09p+2L, -0xc.acb00802f62a439p-1L, -0xc.a82f426cc7309e8p-4L, 0xa.1e93197196686f8p-5L, -0x9.c700b99b66830a5p-13L, -0xc.b4741d62cadc637p-16L, 0xf.af6a58926f9d684p-27L, -0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xf.9e6d17cd89aa012p-2L, -0xc.f76d09320db0f5ep+1L, 0x9.307ed56e8cf58f8p+3L, -0xe.b39ec07756f2504p+3L, 0xf.80d97d0aa681a95p+3L, -0xd.6ed96256bc8f10cp+3L, 0xb.edc3ded37efc53ap+3L, -0x9.fcc307b62482f39p+3L, 0xd.7398b21f48cc731p+2L, -0xf.dae619a8f5e0bb5p+1L, 0x9.2cd7e5dc4026b75p+1L, -0xf.f0c37230184fee7p-1L, 0xa.6814c610c493aa3p-3L, 0xd.0f8533203509157p-5L, -0xa.06056efec2aa1d8p-6L, 0xd.d397d61bf843e3dp-12L, 0xe.0c9f8b5db3c72d8p-16L, -0x8.b5a4cadda783993p-25L, 0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0x9.ac36cd4f071eccfp-2L, -0x8.47d319a17660e21p+1L, 0xb.e20f80eb4b065edp+2L, -0x9.3b5b2691709a7f2p+3L, 0x8.a78e7ba434e03bep+3L, -0xc.1eaa5631b5c1221p+2L, 0xa.029e45164697e35p+2L, -0x9.04da9c58c6f9312p+2L, 0xb.2bc19a059bc163fp+1L, -0x9.6efb38728efe53fp+0L, 0x9.c3a27ed71092bccp-1L, -0xa.032e1095d2e022bp-2L, 0xb.3b1e2e88dbba717p-7L, 0x8.c0ea6b3b750f81fp-4L, -0xc.3ab2014418fdea7p-6L, 0xc.21e91294dda4d8cp-10L, 0xa.95f1d85c63d7aadp-14L, -0xd.3ce3136432a75eep-23L, 0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0xb.d1e7a38890760ccp-3L, -0xa.4592f29693a58f2p+0L, 0xe.5ec993b73eacb21p+1L, -0x9.bc42ea921018403p+2L, 0xa.6da7dbd2f66dc91p+1L, 0xb.a5616e510faadd9p-1L, -0x8.8e517cf85be82f9p+0L, 0xc.fd35578646cc028p-7L, -0xc.67599442b866996p-1L, 0xf.34371fde1fdf9acp+0L, -0xb.f05bc06b0118d26p+0L, 0xb.f0d1a4170b05fe8p-1L, -0x9.23dab898aa1de5fp-1L, 0xd.c5270e4b3b4644bp-2L, -0xa.78bea8112054738p-3L, 0xa.5a0421c564344a9p-6L, 0xb.9323c464a39ee53p-10L, -0xe.ba7eb5010aa3e4p-18L, 0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0xf.b21c51d44230049p-7L, -0xd.bdd492afce3bd22p-4L, 0x9.fa84d9c210a45adp-2L, -0xf.5630b786a7c34dfp-2L, 0xd.749227f7ac2e953p-2L, -0x8.06ae8191079dde4p-2L, 0xc.a09f9dd5937e42dp-3L, -0xc.decc23d086ea9cp-3L, 0x8.b55713e8c533b1cp-3L, -0x8.ac3b417a410ae11p-4L, 0xc.0a2f1e61e7e5e62p-5L, -0xf.d7aab7344b86da8p-6L, 0xc.764b933b583557ap-7L, -0xa.4cc076a0441e56ep-8L, 0xa.b986245d72b5275p-9L, -0x8.4a96b5c2ae31c5dp-11L, -0xe.7038eec6f8f774fp-15L, 0x9.8521b0f592d9c7fp-21L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.12cb0a33640b56e423474a1328bap-5Q, 0x1.4e2c27be21e0e479b88ad4851607p-1Q, 0x1.1c4636ef189eccc399682014d9d6p-1Q, -0x1.85d2edb33e46dde58a5a504a9ab1p-2Q, 0x1.9e3dada7662a9865be6b99b24294p-3Q, -0x1.494bbf8e53bfc023fe7e0915ab63p-4Q, 0x1.1d23df75685c890f2df5ab229b96p-6Q, 0x1.d4ed15a06848811344377f87f7eap-10Q, -0x1.2885ec240634157f42540c2ec5a5p-9Q, 0x1.94f202846521b8fb6dee9352c088p-12Q, 0x1.44e94de53f6f632a67cbb5854d1fp-14Q, -0x1.b37df99b75f08af621654dd8f54ep-16Q, 0x1.403905df41d323c0c33072aaf3cp-24Q, 0x1.c94370d7ecc9194547661e1cf7cp-24Q, -0x1.58dbb791a7fb6c3e33eb2a850b1bp-28Q, 0x1.db358382953c45bea25d9891f3bcp-37Q, 0x1.afee7cd299cd64600d2193c416f4p-44Q, -0x1.0988745ca3ec3e945e33c4d42e22p-59Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.43cfcb9d739232114ccf7b42f286p-3Q, 0x1.f5f9c20090df2cd39669639ec7fdp-1Q, -0x1.94bc27297b9f96d98ca06b8b780fp+0Q, 0x1.61584eb9fe3a67acec590408bca7p-1Q, -0x1.a2cb67ff996a90130726bb551867p-2Q, 0x1.eef0eaaf4989e29be4ba95e2f12bp-3Q, -0x1.ac22308c89e820172f07afea77d8p-4Q, 0x1.c84ec23c8cdbe0f0d252ca4a5fdap-6Q, -0x1.213456d8479d5a0a002e8a35424cp-8Q, 0x1.2c315a17e4063f457d1b74aaa54fp-10Q, -0x1.f375455c5c9e61be4fa670796c8cp-12Q, 0x1.ce035ff90a79b6418f9714e02027p-15Q, 0x1.06ba9aa22e87c46e9b5b517bf9e8p-17Q, 0x1.2eea964fb1e803735b7cbdec445fp-21Q, 0x1.f125f98e34b07ec90a3117922ea9p-26Q, -0x1.51db791710be9863d69c55fb8f8fp-33Q, -0x1.3ced9d37da5d28d7002692ae731fp-40Q, 0x1.85b82452d92694835d294f84ac62p-55Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.2d6cb779664d44484073db45447cp-1Q, -0x1.01b00cc8d5d0650bb7d9e8758312p-2Q, -0x1.0fd0995df5aa2a4c5f39f93180c2p+1Q, 0x1.8bd77a675e82837408b645325bb2p+1Q, -0x1.c8684eac579b3e1019c502de8594p+0Q, 0x1.6e6d859b2e72f80278552877464cp-2Q, 0x1.86e851ba85834ec58a127f16fe28p-2Q, -0x1.9dcbe6db3790670c84be0eec2f7fp-2Q, 0x1.55c762fd5a0df64b9c06acd53195p-3Q, -0x1.35a481158ac33b4716b6e91c5435p-6Q, -0x1.51b88ceed7addc9a97168ddbed49p-7Q, 0x1.0767285c8f10645316c4c221fa2p-8Q, -0x1.67961ae7bb99fbfcc0d26144bc53p-12Q, -0x1.2b4a0836ed60ae3a1490ad53cc1ep-15Q, 0x1.bb4b6c6c9a6faf8c7dd84be23c4bp-19Q, 0x1.3f418b80d3d44c3e61fe90bb843bp-28Q, -0x1.0d99c100eff2e6c61779a485054cp-32Q, 0x1.4b9c0643323fb1c0ce2d07b0b092p-46Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.a8dadfc02dd0428b41cd0c1bb0afp+0Q, -0x1.8d688d31d04a4214094b65c4cddp+2Q, 0x1.317cc4a10faf3ff9c44aa07180dp+3Q, -0x1.00fa12867f49132d26f6109f1a1ep+3Q, 0x1.9e984b48af59218135976f585487p+1Q, 0x1.0dcc3bbac5e0885ef946fb573bd9p+1Q, -0x1.41a435a1df480f6b501eca7093bep+2Q, 0x1.075a464fd9703954dc501fa9230ap+2Q, -0x1.9984cb75bad50ddd23b7c6a931c3p+0Q, 0x1.9cf2e7196d1cbd2ef1ba36ca5473p-5Q, 0x1.c915787e3612e2d3277f4d8526a2p-3Q, -0x1.60b8b0c3b1138df4716646253571p-4Q, 0x1.324229742ef4416185466d935171p-7Q, 0x1.dd5da666efa58ec47474db0b6e86p-11Q, -0x1.351528a4bd8176153593c8a5a1a8p-13Q, -0x1.03c4250827b68f69b983f4479114p-22Q, 0x1.77139f17861eb1acd308dc031079p-26Q, -0x1.cd96fccfe9f0afba4ba09dac3a7dp-39Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.a04f8069ea8b4e447d853aa2b3fp+1Q, -0x1.18f0a34d9f68e4d06a24b5c8413dp+4Q, 0x1.4ce3831796a61ef6af32be9a023fp+5Q, -0x1.dc75f9b0b9a1041da91933762b9bp+5Q, 0x1.fdbc97313e6ed6865f9096ac8807p+5Q, -0x1.eefc0cdda4efa281b21fc89e970ap+5Q, 0x1.b92a7c1b6a889c31c867c0ce8c52p+5Q, -0x1.2299d502734c3c9b7e4c9a6f523fp+5Q, 0x1.6502b707871df45089990b5055fdp+3Q, 0x1.11f33f4ede647d59a412fb3857a3p+2Q, -0x1.73b0a319e6889e9aa2e82f2679b8p+2Q, 0x1.244d452e7630092d6c490c8cc448p+1Q, -0x1.35466c5650c61e120220d045b2f3p-2Q, -0x1.fc20c8dd92f19b8d6ed30b1d9872p-6Q, 0x1.0d9c8b9d476f7d129de2a5d13304p-7Q, 0x1.a4010b80e5495d0ed9331140ed28p-19Q, -0x1.49b0c99eb9c648511ea730b4e4dp-19Q, 0x1.962a6dd57b7daa6dc5023a314835p-31Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.55886d2f64380baeb961078fa176p+2Q, -0x1.09d95f1cede31fcd15d2c7fab39ep+5Q, 0x1.505f98e4bf27766f2f4d3b7ea8ddp+6Q, -0x1.96ec354b303069fd664614786911p+6Q, 0x1.17b23075f8010224c348afb3ebb9p+5Q, 0x1.fc17211fa4d6f3f6a32616561c88p+5Q, -0x1.b35f4a36b31c3849a4f062a53c98p+6Q, 0x1.d17f22f2480f88bf1a425e0d999bp+6Q, -0x1.12118c5678b4d442de8a0eef777p+7Q, 0x1.207a74ca5ad8bfc2ee103b7bf96dp+7Q, -0x1.934735f943481c7f74f56dd5b187p+6Q, 0x1.3fa55ba9206e3812ee32da2442b6p+5Q, -0x1.959601005ec548729558e21c9eb1p+2Q, -0x1.9505e84d98e613cfe4ec3f6fdae5p-1Q, 0x1.43d2632e32cd0df0bb4a95d727cp-2Q, -0x1.38e017336cd0614a6ed2ffd943cap-10Q, -0x1.968e83ac595b8c6d9c172a00fddap-13Q, 0x1.f5ed4b124df3ad0700a32c86e4bbp-24Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.f3cda2f9b135402362018230e37ap+1Q, -0x1.9eeda12641b61ebb7d840ecfaa6cp+4Q, 0x1.260fdaadd19eb1efc078d7fded1bp+6Q, -0x1.d673d80eeade4a070ce0e7052e5ep+6Q, 0x1.f01b2fa154d0352990b16aa70967p+6Q, -0x1.addb2c4ad791e217324c7aafb066p+6Q, 0x1.7db87bda6fdf8a74bb08213b9495p+6Q, -0x1.3f9860f6c4905e7132b1781ae693p+6Q, 0x1.ae731643e9198e621648583330d8p+5Q, -0x1.fb5cc3351ebc176988bf6478c6bp+4Q, 0x1.259afcbb8804d6eae552ab39c09p+4Q, -0x1.fe186e460309fdcedab5ec38f6a8p+2Q, 0x1.4d0298c21892754606c3d8ebb24fp+0Q, 0x1.a1f0a66406a122ae435ed98406f7p-2Q, -0x1.40c0addfd85543af466cc7de08d7p-3Q, 0x1.ba72fac37f087c7aee39dd6d7d9ep-9Q, 0x1.c193f16bb678e5af6510cd4d8f9fp-13Q, -0x1.16b4995bb4f073263c20b5b2b14bp-22Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.3586d9a9e0e3d99d2b93a01af7d5p+1Q, -0x1.08fa63342ecc1c41a46b365c4c22p+4Q, 0x1.7c41f01d6960cbda171d22b314bap+5Q, -0x1.276b64d22e134fe39031785d1e73p+6Q, 0x1.14f1cf74869c077b4ddd600b6793p+6Q, -0x1.83d54ac636b8244258f1e3c9d507p+5Q, 0x1.4053c8a2c8d2fc6aef1621e8f43ep+5Q, -0x1.209b538b18df262448ee3cebbe29p+5Q, 0x1.65783340b3782c7d703e94b54e85p+4Q, -0x1.2ddf670e51dfca7d85e8eeab11aep+3Q, 0x1.38744fdae212579791ea9e59ba4ep+2Q, -0x1.4065c212ba5c0456783637741afcp+1Q, 0x1.6763c5d11b774e2d99bb54d3a752p-4Q, 0x1.181d4d676ea1f03e7d8c57b5965ap-1Q, -0x1.87564028831fbd4eb29dad95b0cfp-3Q, 0x1.843d22529bb49b17cf15d645bef3p-7Q, 0x1.52be3b0b8c7af55af9d914b56a01p-11Q, -0x1.a79c626c8654ebdb591ae5793d64p-20Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.7a3cf471120ec198713994eca41fp+0Q, -0x1.48b25e52d274b1e47c8864a7164p+3Q, 0x1.cbd93276e7d596419b912da6ea19p+4Q, -0x1.37885d5242030806d66e5cf9cc78p+5Q, 0x1.4db4fb7a5ecdb9227e8824c1b905p+4Q, 0x1.74ac2dca21f55bb24886b2e8488cp+2Q, -0x1.11ca2f9f0b7d05f1c16189874d5cp+3Q, 0x1.9fa6aaf0c8d980502f82ac3f1ed7p-4Q, -0x1.8ceb3288570cd32c25919a739d51p+2Q, 0x1.e686e3fbc3fbf35811a68b06fad4p+3Q, -0x1.7e0b780d60231a4c786ec3f17781p+3Q, 0x1.7e1a3482e160bfcf5bb1945be474p+2Q, -0x1.247b57131543bcbee8b05ee74f53p+2Q, 0x1.b8a4e1c96768c895a2f3649c4cc8p+1Q, -0x1.4f17d502240a8e6f55c9dea2c968p+0Q, 0x1.4b408438ac8689521da23d7beaedp-3Q, 0x1.7264788c9473dca575636b8d6c86p-7Q, -0x1.d74fd6a021547c7f9f7dd044fd0ep-15Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.f6438a3a88460091e0ea8516e904p-4Q, -0x1.b7ba9255f9c77a442c3315f3c4dep-1Q, 0x1.3f509b3842148b5acdb05dfc7ebdp+1Q, -0x1.eac616f0d4f869be16ce06d469adp+1Q, 0x1.ae9244fef585d2a56f1cb69c0c8dp+1Q, -0x1.00d5d03220f3bbc8a51448aa67eep+1Q, 0x1.9413f3bab26fc85ab60692eb482fp+0Q, -0x1.9bd9847a10dd537f2de875e0ae85p+0Q, 0x1.16aae27d18a67638fdda8c9d9188p+0Q, -0x1.1587682f48215c21c42b36d23f1dp-1Q, 0x1.8145e3cc3cfcbcc409c895dd9662p-2Q, -0x1.faf556e68970db4f5325d20bccb9p-3Q, 0x1.8ec972676b06aaf4a1909e5ab3bfp-4Q, -0x1.49980ed40883cadc7b702f6c3e9fp-5Q, 0x1.5730c48bae56a4ea4426b047bab7p-6Q, -0x1.0952d6b855c638b977457b4c3a4p-8Q, -0x1.ce071dd8df1eee9d16331f022e54p-12Q, 0x1.30a4361eb25b38fd9207742aba25p-18Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0335440825684839948793277327924747568510463779411613283372021012357431575059"), boost::lexical_cast("0.652680627784265419113142057333635414566267596751552407275899976614433273408"), boost::lexical_cast("0.555223194777054373822280591005165065401335016712961625016624878528310159958"), boost::lexical_cast("-0.380687440934315605630685976089872177922250050019644347240793726150606940490"), boost::lexical_cast("0.202266079588999490158624019679885616441296798707691052740675369027212472886"), boost::lexical_cast("-0.0803945048003100183440731245374493948673697586172116467447133542711531568094"), boost::lexical_cast("0.0174035722935792800052307718387330639108356719924467120729654378442135160469"), boost::lexical_cast("0.00178881115434873125338924661801614887567351864768204987056083791004957995212"), boost::lexical_cast("-0.00226229198052543881129104523760341714639547377902691081445602585210846978660"), boost::lexical_cast("0.000386185980709970284342158222549749494513229103697618385419333145519237034528"), boost::lexical_cast("0.0000774649011709668881496648249850476879409117195200119403647384684895836766101"), boost::lexical_cast("-0.0000259573513242397582776373019880695158304702582936408634679549746356085340132"), boost::lexical_cast("0.0000000745576680291227809274057476509086014746503865109391843602515609932547121007"), boost::lexical_cast("0.000000106464941195329780882604847827673302070700009500583209887829095516683638178"), boost::lexical_cast("-0.00000000501834830778801282792550812083381505585505471229236043478318562698652685805"), boost::lexical_cast("0.0000000000135062531948823786839892471345144438080086754634405014216461179793889825011"), boost::lexical_cast("0.0000000000000959080797319498233498089822590215572105542150066963291076320566868073767765"), boost::lexical_cast("-0.00000000000000000179932176974095821764192532376309678888476262257369144430177595683951871280"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.158111181967293654960328230847092693305440177339999811917967936973151313355"), boost::lexical_cast("0.980421125954704520039885776450944209566177277494416607887119684421179635098"), boost::lexical_cast("-1.58099598658338745329757283125170548053142020106794975614544654842234384868"), boost::lexical_cast("0.690126857952340353432328506701225025969125769614438292589462072221185931021"), boost::lexical_cast("-0.408979058242361193356322994890219659071489088001030862797057568700712362129"), boost::lexical_cast("0.241670449709265382583487638664445391528015677818112147483084620599084662014"), boost::lexical_cast("-0.104524793285799361209632642244708987679189849915701108699068681818917564551"), boost::lexical_cast("0.0278508087960298510818238707785628134395285936655886239677755698286759739558"), boost::lexical_cast("-0.00441290970073145649314875669419603850447965477890520778958402484404147639768"), boost::lexical_cast("0.00114514458070760163627849002336721074914074332813124777635502337309185298656"), boost::lexical_cast("-0.000476320352183949564427659987582685532476347626608140569626323600699056358450"), boost::lexical_cast("0.0000550762633298583614076910773634660669710897469085737707319033728420478570991"), boost::lexical_cast("0.00000782993203462069534876818079465953823275658231409824729752214530888590769654"), boost::lexical_cast("0.000000564225681253798960172481439960184780230811335282184378643150395063068263762"), boost::lexical_cast("0.0000000289378419497867484795216809169017976802236817565143538038072466488637113467"), boost::lexical_cast("-0.000000000153639719627918579146261156316178551809778008841322577156822834207719956705"), boost::lexical_cast("-0.00000000000112595508102579374409860880942659257916932286941747525905040942526094106116"), boost::lexical_cast("0.0000000000000000422534516332318562691954502891542159653729964199104256783213585659998814557"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.588720067567147372371526765126987879260828303213441099181011258065293838823"), boost::lexical_cast("-0.251648139722832193419015447722954301991031036011339851370084962733394109781"), boost::lexical_cast("-2.12355343902466248968497032471987734676880165704138770035306028826542891153"), boost::lexical_cast("3.09251337096522514606028271458193605813373662086854974692504786991417857735"), boost::lexical_cast("-1.78284160335134075990444774847436162057665816817791661854926507977727367295"), boost::lexical_cast("0.357839667889140650192283355318684454497311597945586330625492942067228204170"), boost::lexical_cast("0.381745602616663955066044160729358156963202088205543100952077537266538669109"), boost::lexical_cast("-0.404098136072108007374807965965387527326886804962161879932178818721047921461"), boost::lexical_cast("0.166884206158335307397781592107767268454429823998572636766639189741929233271"), boost::lexical_cast("-0.0188990841472042720746425899409966903574694812598737388685812356111081899839"), boost::lexical_cast("-0.0103064239644345373917949401165831844344098684529684357486222879841537834787"), boost::lexical_cast("0.00401921019925688949154858061937053477498137877920046442886584156606534084249"), boost::lexical_cast("-0.000342928264656894632727306414284757691655791891837113873553433397950197101263"), boost::lexical_cast("-0.0000356780514531412256820962066690466067686003465101389318017916782416810226771"), boost::lexical_cast("0.00000330280231812952371277947997446653320231513317893333913004154901503115837079"), boost::lexical_cast("0.00000000464578675601507083497879025900090054285176183414686202576470053896196299532"), boost::lexical_cast("-0.000000000245200318433632222808523321270596754329839152827213527385919720073276676756"), boost::lexical_cast("0.0000000000000184080234698594267687194056854914780004840892347196195690310992947531302848"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.65958975259656064316045033596993048467429622079353821151358867499251161075"), boost::lexical_cast("-6.20950631966221433967561122684352242112063005605168776576756309774482106803"), boost::lexical_cast("9.54648047883299710477127639275362041903799096912957707845486310997696495456"), boost::lexical_cast("-8.03052641171442118399334548739326535650325998152511708583844969601543761720"), boost::lexical_cast("3.23902264641828545334922817695052684001345135087620194561871043446356995572"), boost::lexical_cast("2.10779520625851924861524548164634620055706242533707832091963204841153067836"), boost::lexical_cast("-5.02564755256492020736254702209642014378150710638030519002386215046738254771"), boost::lexical_cast("4.11488492772855670340163610415102162843178733646856522713137539498415480726"), boost::lexical_cast("-1.59968253731024764674220980278277254440169367686954378688784341823851608835"), boost::lexical_cast("0.0504087937983147259532537423739742886863984467015801660848052389726325500063"), boost::lexical_cast("0.223185483314190807228908891936935259922851508598249374402763295219052714061"), boost::lexical_cast("-0.0861136345730003759404777393964487407579363696963873730188751207394119447949"), boost::lexical_cast("0.00934626602280953109864448532020887389100677899387380615852902674015035997924"), boost::lexical_cast("0.000910503044785414199372507175857531751525973570169329713422142851011424682355"), boost::lexical_cast("-0.000147382093153403749058592147931285087775427181451628598455432923070303889508"), boost::lexical_cast("-0.000000241926116925923995065157477973608855097571667752414338710574539981741722171"), boost::lexical_cast("0.0000000218323342443673749019739306955935203514484527679190271850231323531268999740"), boost::lexical_cast("-0.00000000000327979275814608443451375729823364664112564536732892493153334268909293059412"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.25242619678200601450569178504152903597725657049565655085262375577982506117"), boost::lexical_cast("-17.55874948808064424413002851561896280971775515196247347065085833327306525400"), boost::lexical_cast("41.61108988216871250092535059298125378237547100055437239071279933451179063850"), boost::lexical_cast("-59.55760515276426941427234116300582408502217490993753777144564940817935347700"), boost::lexical_cast("63.71708525153904224542587147408403757425616414887722633161387789077111052980"), boost::lexical_cast("-61.87307141456217718672414958346485055314933560158412396861503932253498736910"), boost::lexical_cast("55.14574452799668166956345770934872005949138270244629696837163230917721607990"), boost::lexical_cast("-36.32511331476555787362944164622076573330244267979702165040726341593266853690"), boost::lexical_cast("11.15658141584657284834931359434221143120836125797249180327843359491348695220"), boost::lexical_cast("4.28047163679145355742238347915798843532207155521710854723594509752209225135"), boost::lexical_cast("-5.80765607385013452624013336376953412945571932293068559021989957795643635688"), boost::lexical_cast("2.28360810059200528491878271707995815797831304800926041232425607683843416684"), boost::lexical_cast("-0.302026455658227381795097923260643523970261991178933634395431417034448470906"), boost::lexical_cast("-0.0310136758401276861689035927512442214284016615846020419389667737950748466936"), boost::lexical_cast("0.00822789017780277377915096056720947770842970725628234020125069515364007927548"), boost::lexical_cast("0.00000312927426233484715125263582207480054643048737935356187231133866983070151733"), boost::lexical_cast("-0.00000245638621209106924354868430183266291735309073506794320584780059772790603828"), boost::lexical_cast("0.000000000738811174292185771537396859591012250750038497463623030500365543957753750629"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.33645181301187741432313412712493568835001053518710618642541285756306594416"), boost::lexical_cast("-33.23113844490980275430758088851544736605354677526393945582470182124522064770"), boost::lexical_cast("84.09335668007576319588337953784445541016978233438165893518194780234028567170"), boost::lexical_cast("-101.73067204934714346173214456537684449912757976518610846040850239073972369700"), boost::lexical_cast("34.96200649417016943214733096150713509877346551398259618284714231991020061170"), boost::lexical_cast("63.51129364702034683684093287782391919624178836066372576355119905503761408080"), boost::lexical_cast("-108.84305654018594847769298493805318318251251741351696570225381155341619480700"), boost::lexical_cast("116.37415674748252380731944050807221204678284438681143398715321798634302210300"), boost::lexical_cast("-137.03427381728617053583750633954098792534222952199781843278889570421284187500"), boost::lexical_cast("144.23917229041069234342319895061976936945281511182737320554482546805542945500"), boost::lexical_cast("-100.81954183076052489010123579947837751941991209023328659869027417281390550900"), boost::lexical_cast("39.95574123506755984622668035085486713223409393558081588798575371234724932450"), boost::lexical_cast("-6.33728051220085266945721599456441606967791241256713928442461588780452001216"), boost::lexical_cast("-0.791060695144960272868253882225791392596201909418283798181953112710974525037"), boost::lexical_cast("0.316232251829842651651001625374458886955182867924728786582655341982774267939"), boost::lexical_cast("-0.00119352475745132656518440055173377628211628909314005476964858223466155435340"), boost::lexical_cast("-0.000193861339890561713729524049136083535893829812899666113387041059603669685004"), boost::lexical_cast("0.000000116863969422460737393134164985587926960730142518183635722657982921293457991"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.90471303169253225846019875869878232941425899681461754740621573916446143761"), boost::lexical_cast("-25.93301501220719956383930380071028369762143981546072887565823996886685997670"), boost::lexical_cast("73.51548263160627699666584109197660506203055036418454184583288480107014110040"), boost::lexical_cast("-117.61312888439676707323068134216244043903457141447537621870038005469616937700"), boost::lexical_cast("124.02654888229522104336063612980866173817516040264350607815625581466646707700"), boost::lexical_cast("-107.46403614941343293286313096080305756514307808353723016233188762409520778900"), boost::lexical_cast("95.43015996272868979842030346234072214178139856671622915250008488106829700140"), boost::lexical_cast("-79.89880738806468091633285361243244391895034565047088681170638032528297365230"), boost::lexical_cast("53.80619481139291976708016981476722176165180845983829174460954831948835152660"), boost::lexical_cast("-31.71014710187933425539049751952485208474696175383649880962539170183854068730"), boost::lexical_cast("18.35033868078635575339634170405333269133930342251123760246335182701029470230"), boost::lexical_cast("-7.97024113499733731824785417964081280548267589070768527759215633952607230552"), boost::lexical_cast("1.30082087267562392476267682719773219132371557892324193430079039159705712061"), boost::lexical_cast("0.408144569258781629158811991673214502189211048077371093404699476576485396497"), boost::lexical_cast("-0.156617506402691681618770997346051897652378607238940971239829191058955327399"), boost::lexical_cast("0.00337561904029654362598669467426491389034476058577086402678410124009083217286"), boost::lexical_cast("0.000214375449437306492796677584389309705675972756233814822259639128039297348952"), boost::lexical_cast("-0.000000259564691279900670740154984232869976357323694550668609785644902896773881579"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.41817780299041267294396998193961046347327141146988493872539852596711350295"), boost::lexical_cast("-16.56112976440341017090653469524313042536360691585560344322351312533906133220"), boost::lexical_cast("47.53219626405561897360527224265560846366729359202579844173188227203518751290"), boost::lexical_cast("-73.85487678915235666547453188442988561374382065439419612818538759549597329740"), boost::lexical_cast("69.23614294120398636214807885595774013168922546655228773985936065429561982080"), boost::lexical_cast("-48.47914652685632764102838407583295199095537856449557350864923480580193915190"), boost::lexical_cast("40.04091002631537162491011984473323161600703606500352069042313463467126512660"), boost::lexical_cast("-36.07584294004108744401985515812914016258613167282034953810412938444038731500"), boost::lexical_cast("22.34184575342033973521659639667387757078302661414876303661404399664838457520"), boost::lexical_cast("-9.43352082058754010000229426238016353381474440642161800237732829686092053067"), boost::lexical_cast("4.88209911704351415773607596292274800953074722271529021833265067681298168566"), boost::lexical_cast("-2.50310541071368687187558805389288406933454963984067437672488275554205269365"), boost::lexical_cast("0.0877416350574245619016863517598542577849142110266067469164372019839766916222"), boost::lexical_cast("0.547098559261318119790346121315142638857555987993333621751899257669110708054"), boost::lexical_cast("-0.191082478748640367297398639370371440145977214048380506662573645656883504693"), boost::lexical_cast("0.0118481080619098512694011114462548921140026922405000410819306003041457844881"), boost::lexical_cast("0.000646101166642978477805807904877768082627916394154211614618243579374822809981"), boost::lexical_cast("-0.00000157807348977739476590803041857604549211169374418312430645482994306750965210"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.47749259720336125750014371203719086097786832720840532470036067098638253523"), boost::lexical_cast("-10.27177349258604109799866360824488274075683477990758858915270374562166449850"), boost::lexical_cast("28.74052664229870896057228781991603797498521883108842274414172929446095718590"), boost::lexical_cast("-38.94158424629165794548655688785303773037259534960785249196589991715016053910"), boost::lexical_cast("20.85668514061840842160738201097767741109998318160033587807688366848349176030"), boost::lexical_cast("5.82300896396175969285220261284580137016897500185004121370253254225136801433"), boost::lexical_cast("-8.55593091071560318198818805962130429594383016756683899572054041178087930423"), boost::lexical_cast("0.101477306114750809578847194446606040053812700094709979272704369647063439327"), boost::lexical_cast("-6.20185530962426163472935046915706308507730310357888975841274200007312909611"), boost::lexical_cast("15.20396613285981716679133037338797692219039323378619093572799537510744196150"), boost::lexical_cast("-11.93890001881036092553774539348916251166242755327073413099256167724690461900"), boost::lexical_cast("5.97034943372046810250402450844362776436235733145492694521396093842408492893"), boost::lexical_cast("-4.57002808440762091333964553954350217107396457686094642109241343475428396977"), boost::lexical_cast("3.44253179868866811498600236601873984282170067759034407929086464636198130738"), boost::lexical_cast("-1.30895739843621525859283487914176592704598294675665286288796005768903002325"), boost::lexical_cast("0.161744149188567181778191988919947821701240436608528275036716134129128761337"), boost::lexical_cast("0.0113034809702728906127738052967788898940898905277042251467481852979437112396"), boost::lexical_cast("-0.0000561847530216411102015552396664363227011342601063500856745808337968464467556"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.122623004871017738321088521115551923728453212438673116414730214921771194277"), boost::lexical_cast("-0.858845303530769892579734223666985146082985618311703745596404006498390381931"), boost::lexical_cast("2.49464740988711173737826976177194717462144209023170132334409744337915240875"), boost::lexical_cast("-3.83417021521921990552626761956575317113472949702731301040473923476385032353"), boost::lexical_cast("3.36383879136250970160534021305681940065986265718051079957468541575949019427"), boost::lexical_cast("-2.00652506301585541969492468858387268920435010187618742310379136054539969490"), boost::lexical_cast("1.57842944438965482815057083449552137133719188861387633419907705130357334305"), boost::lexical_cast("-1.60878780346034960103676974039938661510477020676670448343954517210254723407"), boost::lexical_cast("1.08854499391659395899666779285135586272604126336277091423079442916910197364"), boost::lexical_cast("-0.542048698207568264511438036052150370606170830150755922595824458471088767735"), boost::lexical_cast("0.376243171063148851166518405338884659341124829071866802537194156141907541144"), boost::lexical_cast("-0.247538260374476618199302147981680094201399126055983684863712115608203062926"), boost::lexical_cast("0.0973600834756226757960627772745367010811794086758884192671361295078507106292"), boost::lexical_cast("-0.0402336396803239840143974298780932703826464388081245776201258480950581117641"), boost::lexical_cast("0.0209466857329280522592506599477472523467188466718239083632463774864022218054"), boost::lexical_cast("-0.00404851667584358062529338732537862677888179504486154526998284790202549786179"), boost::lexical_cast("-0.000440624045545039606176483920239238500963155780055689316463121243179544715288"), boost::lexical_cast("0.00000453951136476212053479152117487615488257357457846427962694756049282806704493"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 11) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.f82d86p-7f, 0x1.da87aep-2f, 0x1.a074eap-1f, -0x1.d3dbc2p-2f, 0x1.07dc8cp-2f, -0x1.17e06ap-3f, 0x1.d853p-5f, -0x1.071062p-6f, 0x1.0182ap-9f, 0x1.d91cd2p-14f, 0x1.f2bfaap-15f, -0x1.d7e9bap-15f, 0x1.5c274ep-18f, 0x1.63562ep-20f, -0x1.0af58p-26f, 0x1.1409ccp-28f, -0x1.160128p-35f, -0x1.4f944ep-42f, -0x1.ad914cp-53f, -0x1.65d844p-70f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.4988f6p-4f, 0x1.cd9786p-1f, -0x1.f03418p-1f, -0x1.075e3cp-3f, 0x1.303436p-3f, -0x1.71d07ep-12f, -0x1.321c6cp-4f, 0x1.0f00fp-4f, -0x1.fec808p-6f, 0x1.092c0ap-7f, -0x1.185782p-11f, -0x1.693106p-12f, 0x1.a2acf4p-14f, -0x1.c4d82p-19f, -0x1.e02848p-20f, 0x1.7db784p-25f, 0x1.739c16p-30f, -0x1.d9433ap-36f, 0x1.651bd6p-46f, 0x1.29783p-62f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.5c07e6p-2f, 0x1.307a2ap-1f, -0x1.a41fd4p+1f, 0x1.08f33p+2f, -0x1.6a2a88p+1f, 0x1.5f04aep+0f, -0x1.150c78p-2f, -0x1.78ed1cp-3f, 0x1.4f999p-3f, -0x1.41156ep-5f, -0x1.6c5862p-7f, 0x1.21e04ap-7f, -0x1.cd1c36p-10f, 0x1.af648p-17f, 0x1.0136c4p-15f, -0x1.6928bp-19f, -0x1.6377bp-25f, 0x1.64323cp-30f, -0x1.6fb512p-40f, -0x1.32449ep-55f, -0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.1c297ep+0f, -0x1.a72bc4p+1f, 0x1.8e9818p+1f, -0x1.8f506ep-1f, 0x1.02364ap-1f, -0x1.0fb22ap+1f, 0x1.80597ep+1f, -0x1.38ad98p+1f, 0x1.339d14p+0f, -0x1.08b97cp-2f, -0x1.3f8a26p-4f, 0x1.2b8bd2p-4f, -0x1.35b764p-6f, 0x1.f33a86p-12f, 0x1.1c307ep-11f, -0x1.950dccp-15f, -0x1.f90492p-21f, 0x1.8b6cb6p-25f, -0x1.21deep-34f, -0x1.e2c778p-49f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.51d8dcp+1f, -0x1.c33b04p+3f, 0x1.0e7952p+5f, -0x1.9aba4p+5f, 0x1.f144c4p+5f, -0x1.17ce56p+6f, 0x1.1abf8ep+6f, -0x1.aeeda8p+5f, 0x1.6d1976p+4f, 0x1.64c18ap+1f, -0x1.4b3d36p+3f, 0x1.8e7526p+2f, -0x1.9e20d2p+0f, 0x1.8f714p-5f, 0x1.002e9ap-4f, -0x1.22b5dp-7f, -0x1.695b64p-13f, 0x1.ba1b22p-17f, -0x1.df066ep-26f, -0x1.8ec07p-39f, -0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.553842p+2f, -0x1.1648a2p+5f, 0x1.7429c4p+6f, -0x1.d2259cp+6f, 0x1.36cbd8p+4f, 0x1.4a282ep+7f, -0x1.2e04acp+8f, 0x1.5f18c6p+8f, -0x1.80bbfp+8f, 0x1.90ad4cp+8f, -0x1.4159ep+8f, 0x1.4eba06p+7f, -0x1.6db5a8p+5f, 0x1.66137p-1f, 0x1.7dbb7ep+1f, -0x1.1851aap-1f, -0x1.230c94p-7f, 0x1.7e95e2p-10f, -0x1.136d24p-18f, -0x1.ca2f1p-31f, -0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.43e57ap+2f, -0x1.201578p+5f, 0x1.be9ebp+6f, -0x1.917bfcp+7f, 0x1.e7564ap+7f, -0x1.dd46b6p+7f, 0x1.c24b2cp+7f, -0x1.9299f8p+7f, 0x1.2da088p+7f, -0x1.7f74fcp+6f, 0x1.cafceap+5f, -0x1.cfad0ap+4f, 0x1.f4f5eap+2f, 0x1.14b6dap+0f, -0x1.5e908ap+0f, 0x1.1ee7d4p-2f, -0x1.1e668p-11f, -0x1.81c424p-10f, 0x1.28216ep-18f, 0x1.ebdb46p-30f, -0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.0e918ep+2f, -0x1.f54b1ep+4f, 0x1.8cc936p+6f, -0x1.5d87f4p+7f, 0x1.7fbdfcp+7f, -0x1.356154p+7f, 0x1.00a2fp+7f, -0x1.d61ad6p+6f, 0x1.4b192ep+6f, -0x1.2bd7eep+5f, 0x1.d23af8p+3f, -0x1.a5a3f6p+2f, -0x1.0097bap+0f, 0x1.29abecp+2f, -0x1.6d63c6p+1f, 0x1.521b96p-1f, -0x1.89a1eap-6f, -0x1.cc0f8cp-8f, 0x1.9e94aap-16f, 0x1.5739aap-26f, 0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.c2a5p+0f, -0x1.a9c968p+3f, 0x1.5bbb8cp+5f, -0x1.452574p+6f, 0x1.91c80cp+6f, -0x1.84d65cp+6f, 0x1.678e1ep+6f, -0x1.493302p+6f, 0x1.14413cp+6f, -0x1.b51d9ap+5f, 0x1.483818p+5f, -0x1.a72562p+4f, 0x1.e00e48p+3f, -0x1.1522f8p+3f, 0x1.152962p+2f, -0x1.3d9d88p+0f, 0x1.3f1c58p-4f, 0x1.b3efb4p-6f, -0x1.baa15ap-13f, -0x1.6c2d94p-22f, -0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.480f32p-1f, -0x1.38fe3p+2f, 0x1.f8f412p+3f, -0x1.bc60c4p+4f, 0x1.d3d44ap+4f, -0x1.536d7p+4f, 0x1.0953a8p+4f, -0x1.0c0dcap+4f, 0x1.af56b2p+3f, -0x1.f62894p+2f, 0x1.3ef834p+2f, -0x1.c75ab6p+1f, 0x1.cb38bcp+0f, -0x1.624786p-1f, 0x1.61b17ap-2f, -0x1.0b6248p-3f, 0x1.c9b3fp-8f, 0x1.7c528ap-8f, -0x1.0c4738p-13f, -0x1.b40e78p-22f, -0x0p+0f}; - } - if constexpr (order == 10) { - return {0x0p+0f, 0x1.8a25fep-4f, -0x1.79dddep-1f, 0x1.2f9284p+1f, -0x1.04a532p+2f, 0x1.fbc728p+1f, -0x1.2e8a4ep+1f, 0x1.96ff88p+0f, -0x1.db8c8p+0f, 0x1.8867ecp+0f, -0x1.7019bcp-1f, 0x1.a30d2p-2f, -0x1.7340e8p-2f, 0x1.68181ap-3f, -0x1.50a6f6p-5f, 0x1.8d3b22p-6f, -0x1.b7227ep-7f, -0x1.a3115p-12f, 0x1.71e7a4p-10f, -0x1.4eea02p-14f, -0x1.09aedap-21f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.f82d860ed311dp-7, 0x1.da87adf545deap-2, 0x1.a074ea6831a18p-1, -0x1.d3dbc22db3363p-2, 0x1.07dc8c4b5880ap-2, -0x1.17e06a0deb07p-3, 0x1.d85300a8e9a5ap-5, -0x1.0710616766f9ep-6, 0x1.0182a0c9a44bbp-9, 0x1.d91cd19825f46p-14, 0x1.f2bfaace30f59p-15, -0x1.d7e9ba7b3ac47p-15, 0x1.5c274e2e04a65p-18, 0x1.63562e1b18da8p-20, -0x1.0af5800900cccp-26, 0x1.1409cb495cfabp-28, -0x1.1601287f207ddp-35, -0x1.4f944d6c974a1p-42, -0x1.ad914b3b9c645p-53, -0x1.65d8440cb590ap-70, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.4988f615d8fc2p-4, 0x1.cd9786f046dbdp-1, -0x1.f034187a5d753p-1, -0x1.075e3bcf1d71fp-3, 0x1.303436308c6p-3, -0x1.71d07ef81053fp-12, -0x1.321c6b5970b99p-4, 0x1.0f00f07475782p-4, -0x1.fec807d6bcde3p-6, 0x1.092c0960e80ecp-7, -0x1.1857810566103p-11, -0x1.693105a2bb707p-12, 0x1.a2acf3b1f9d07p-14, -0x1.c4d81f25bbab6p-19, -0x1.e0284772a21efp-20, 0x1.7db784c0b0131p-25, 0x1.739c15dc80c55p-30, -0x1.d9433a2520a2ep-36, 0x1.651bd505e5aabp-46, 0x1.29782f98b98d9p-62, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.5c07e5083d709p-2, 0x1.307a2a8e783eap-1, -0x1.a41fd4c6e5304p+1, 0x1.08f3303fd9b5fp+2, -0x1.6a2a8758fd08cp+1, 0x1.5f04ae9c9034bp+0, -0x1.150c77d31565dp-2, -0x1.78ed1cb9b0ec2p-3, 0x1.4f99902d11603p-3, -0x1.41156e1c846c4p-5, -0x1.6c5861062a836p-7, 0x1.21e04958552e7p-7, -0x1.cd1c35ab2ad93p-10, 0x1.af6480e4adc47p-17, 0x1.0136c3fb4b19cp-15, -0x1.6928b0e495d08p-19, -0x1.6377af73884cp-25, 0x1.64323c063686ap-30, -0x1.6fb51174aa8e3p-40, -0x1.32449da1b9609p-55, -0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.1c297e1a72297p+0, -0x1.a72bc3c00615fp+1, 0x1.8e98178e99b32p+1, -0x1.8f506e2a5e0ebp-1, 0x1.02364935e2223p-1, -0x1.0fb2290536b32p+1, 0x1.80597d49465bfp+1, -0x1.38ad9781c7501p+1, 0x1.339d144fd9551p+0, -0x1.08b97b33caeccp-2, -0x1.3f8a268debfb7p-4, 0x1.2b8bd1a4fd0ebp-4, -0x1.35b764060a714p-6, 0x1.f33a86db42466p-12, 0x1.1c307da269deep-11, -0x1.950dcb7c8e982p-15, -0x1.f904916865d4dp-21, 0x1.8b6cb6bf7586bp-25, -0x1.21dedfd7476c5p-34, -0x1.e2c7778c519ap-49, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.51d8dbccf9207p+1, -0x1.c33b049bfbce6p+3, 0x1.0e79522ccf3ddp+5, -0x1.9aba40cee29c1p+5, 0x1.f144c4df7513dp+5, -0x1.17ce56ad9d902p+6, 0x1.1abf8d1adcc3ep+6, -0x1.aeeda88b7fe88p+5, 0x1.6d1975fc2f42ep+4, 0x1.64c18afe2844cp+1, -0x1.4b3d36d8f9771p+3, 0x1.8e75251a7f5bfp+2, -0x1.9e20d1654131ap+0, 0x1.8f713f264dac3p-5, 0x1.002e9aac59197p-4, -0x1.22b5d07d79f25p-7, -0x1.695b63166e6d6p-13, 0x1.ba1b21857af83p-17, -0x1.df066d7576ffdp-26, -0x1.8ec06f9de2f7dp-39, -0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.553841cb8504cp+2, -0x1.1648a261cfac8p+5, 0x1.7429c31b8bcdcp+6, -0x1.d2259be1a7819p+6, 0x1.36cbd86221f4cp+4, 0x1.4a282d1320ed7p+7, -0x1.2e04ab290e2ep+8, 0x1.5f18c6755ba05p+8, -0x1.80bbefefb8959p+8, 0x1.90ad4b61c673ep+8, -0x1.4159e0e62036cp+8, 0x1.4eba06db33d53p+7, -0x1.6db5a82568a44p+5, 0x1.6613709f48646p-1, 0x1.7dbb7d4fa2b47p+1, -0x1.1851a9519e35ep-1, -0x1.230c93cadc0b8p-7, 0x1.7e95e283d8ce3p-10, -0x1.136d2374e3712p-18, -0x1.ca2f0f4b75006p-31, -0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.43e579b56aec7p+2, -0x1.2015783789a13p+5, 0x1.be9eb07640a6ep+6, -0x1.917bfbcd50104p+7, 0x1.e7564ac670465p+7, -0x1.dd46b6e14bd99p+7, 0x1.c24b2cb18bb3p+7, -0x1.9299f7098407ep+7, 0x1.2da088f392f17p+7, -0x1.7f74fc0a8fbbcp+6, 0x1.cafceab55c222p+5, -0x1.cfad0a751fefdp+4, 0x1.f4f5eade96654p+2, 0x1.14b6d949957a5p+0, -0x1.5e908a00f74dap+0, 0x1.1ee7d490234e2p-2, -0x1.1e667fbdaff18p-11, -0x1.81c4231f27f24p-10, 0x1.28216d550397dp-18, 0x1.ebdb45ca159a6p-30, -0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.0e918e0751a5fp+2, -0x1.f54b1dc71e94cp+4, 0x1.8cc935a5962f3p+6, -0x1.5d87f4fd9af88p+7, 0x1.7fbdfc1f5c92bp+7, -0x1.356154b8ce2cp+7, 0x1.00a2f00b6f36p+7, -0x1.d61ad68084632p+6, 0x1.4b192d711636ap+6, -0x1.2bd7eeccbbd8bp+5, 0x1.d23af72a92131p+3, -0x1.a5a3f6309aca8p+2, -0x1.0097ba319005fp+0, 0x1.29abec5ca24e5p+2, -0x1.6d63c669ef72ap+1, 0x1.521b96f1f012p-1, -0x1.89a1e9b6409a4p-6, -0x1.cc0f8b0b31976p-8, 0x1.9e94a90cc2ee8p-16, 0x1.5739a9ee6eb1dp-26, 0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.c2a4ffe966119p+0, -0x1.a9c9682497d43p+3, 0x1.5bbb8c487ae5cp+5, -0x1.452573aebb3bfp+6, 0x1.91c80b52c3671p+6, -0x1.84d65b83affb6p+6, 0x1.678e1d36597aep+6, -0x1.4933025bdb689p+6, 0x1.14413c8e18076p+6, -0x1.b51d99f667842p+5, 0x1.483818775e0cbp+5, -0x1.a72562d5d8065p+4, 0x1.e00e48c9f7714p+3, -0x1.1522f77734c2fp+3, 0x1.152961e6e0f57p+2, -0x1.3d9d88a64fae4p+0, 0x1.3f1c58e4e2a68p-4, 0x1.b3efb441a4e1bp-6, -0x1.baa159e67dd4fp-13, -0x1.6c2d94cde3ae2p-22, -0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.480f31520e3f3p-1, -0x1.38fe2f09aac58p+2, 0x1.f8f411bacc9f9p+3, -0x1.bc60c3b54f90bp+4, 0x1.d3d44a6a16adbp+4, -0x1.536d6f833b667p+4, 0x1.0953a7a524acbp+4, -0x1.0c0dca303e8e2p+4, 0x1.af56b1534f29ep+3, -0x1.f628948ceff74p+2, 0x1.3ef834c3289aap+2, -0x1.c75ab5e1afc76p+1, 0x1.cb38bb2c5f4bfp+0, -0x1.624785bf15dbep-1, 0x1.61b17ae5ff0c1p-2, -0x1.0b62472bd3d78p-3, 0x1.c9b3ef0688e89p-8, 0x1.7c528a3f2156cp-8, -0x1.0c4738028aec9p-13, -0x1.b40e785cb8808p-22, -0x0p+0}; - } - if constexpr (order == 10) { - return {0x0p+0, 0x1.8a25fe79d1c4ep-4, -0x1.79dddd860d214p-1, 0x1.2f92842080f08p+1, -0x1.04a53246109b7p+2, 0x1.fbc727fc23efp+1, -0x1.2e8a4ebac6b5ep+1, 0x1.96ff87cfe4cc5p+0, -0x1.db8c7f7bf2c3ap+0, 0x1.8867eccd39d1bp+0, -0x1.7019bc278ffcp-1, 0x1.a30d20b4e67c7p-2, -0x1.7340e7a399e64p-2, 0x1.68181929e64c5p-3, -0x1.50a6f5e8f3b31p-5, 0x1.8d3b211eb839bp-6, -0x1.b7227d5381373p-7, -0x1.a3114fdf2fbcp-12, 0x1.71e7a3b4d88bfp-10, -0x1.4eea023db8bd5p-14, -0x1.09aed93888304p-21, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xf.c16c3076988ebbcp-10L, 0xe.d43d6faa2ef51b8p-5L, 0xd.03a753418d0bce6p-4L, -0xe.9ede116d99b1966p-5L, 0x8.3ee4625ac404c6dp-5L, -0x8.bf03506f5837fe3p-6L, 0xe.c29805474d2cedap-8L, -0x8.38830b3b37cedbcp-9L, 0x8.0c15064d225d41p-12L, 0xe.c8e68cc12fa31cbp-17L, 0xf.95fd567187ac541p-18L, -0xe.bf4dd3d9d6239bp-18L, 0xa.e13a71702532bafp-21L, 0xb.1ab170d8c6d3fd6p-23L, -0x8.57ac00480665f53p-29L, 0x8.a04e5a4ae7d54e6p-31L, -0x8.b00943f903ee402p-38L, -0xa.7ca26b64ba505d1p-45L, -0xd.6c8a59dce3224e2p-56L, -0xb.2ec22065ac84f3fp-73L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xa.4c47b0aec7e1081p-7L, 0xe.6cbc378236de837p-4L, -0xf.81a0c3d2eba999fp-4L, -0x8.3af1de78eb8f98bp-6L, 0x9.81a1b1846300118p-6L, -0xb.8e83f7c0829f529p-15L, -0x9.90e35acb85cca72p-7L, 0x8.780783a3abc1044p-7L, -0xf.f6403eb5e6f17b6p-9L, 0x8.49604b074075f3ap-10L, -0x8.c2bc082b308154p-14L, -0xb.49882d15db83441p-15L, 0xd.15679d8fce83a4ap-17L, -0xe.26c0f92ddd5b332p-22L, -0xf.01423b9510f7584p-23L, 0xb.edbc2605809849dp-28L, 0xb.9ce0aee4062aafdp-33L, -0xe.ca19d1290517188p-39L, 0xb.28dea82f2d5572ep-49L, 0x9.4bc17cc5cc6c599p-65L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xa.e03f2841eb84819p-5L, 0x9.83d15473c1f50fdp-4L, -0xd.20fea63729823dcp-2L, 0x8.479981fecdaf816p-1L, -0xb.51543ac7e845d9fp-2L, 0xa.f82574e481a558dp-3L, -0x8.a863be98ab2e9afp-5L, -0xb.c768e5cd8760f3bp-6L, 0xa.7ccc81688b01b9cp-6L, -0xa.08ab70e42362325p-8L, -0xb.62c30831541b0b7p-10L, 0x9.0f024ac2a973782p-10L, -0xe.68e1ad5956c95f9p-13L, 0xd.7b2407256e2365dp-20L, 0x8.09b61fda58cdcd9p-18L, -0xb.49458724ae83fdap-22L, -0xb.1bbd7b9c425fd7p-28L, 0xb.2191e031b4353cfp-33L, -0xb.7da88ba55471baap-43L, -0x9.9224ed0dcb0440cp-58L, -0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0x8.e14bf0d3914bbd4p-3L, -0xd.395e1e0030afb9ep-2L, 0xc.74c0bc74cd98ea3p-2L, -0xc.7a837152f075af7p-4L, 0x8.11b249af1111423p-4L, -0x8.7d914829b598f95p-2L, 0xc.02cbea4a32dfa62p-2L, -0x9.c56cbc0e3a809b2p-2L, 0x9.9ce8a27ecaa85dcp-3L, -0x8.45cbd99e57663b5p-5L, -0x9.fc51346f5fdbbd1p-7L, 0x9.5c5e8d27e8757a5p-7L, -0x9.adbb20305389e61p-9L, 0xf.99d436da1232d03p-15L, 0x8.e183ed134ef71abp-14L, -0xc.a86e5be474c0e96p-18L, -0xf.c8248b432ea6598p-24L, 0xc.5b65b5fbac3587ap-28L, -0x9.0ef6feba3b62aaap-37L, -0xf.163bbc628cd0205p-52L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xa.8ec6de67c9035e6p-2L, -0xe.19d824dfde72f6dp+0L, 0x8.73ca916679ee85cp+2L, -0xc.d5d2067714e04fcp+2L, 0xf.8a2626fba89eb9ep+2L, -0x8.be72b56cec81364p+3L, 0x8.d5fc68d6e61f284p+3L, -0xd.776d445bff43fe9p+2L, 0xb.68cbafe17a170d9p+1L, 0xb.260c57f14226301p-2L, -0xa.59e9b6c7cbb8775p+0L, 0xc.73a928d3fadf73cp-1L, -0xc.f1068b2a098cfb7p-3L, 0xc.7b89f9326d61459p-8L, 0x8.0174d562c8cba6dp-7L, -0x9.15ae83ebcf927bfp-10L, -0xb.4adb18b3736b1d7p-16L, 0xd.d0d90c2bd7c17dcp-20L, -0xe.f8336babb7fe566p-29L, -0xc.76037cef17bea43p-42L, -0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xa.a9c20e5c28262cfp-1L, -0x8.b245130e7d6435p+2L, 0xb.a14e18dc5e6e3bcp+3L, -0xe.912cdf0d3c0c767p+3L, 0x9.b65ec3110fa60e2p+1L, 0xa.51416899076b9c3p+4L, -0x9.702559487170317p+5L, 0xa.f8c633aadd02508p+5L, -0xc.05df7f7dc4ac954p+5L, 0xc.856a5b0e339f38dp+5L, -0xa.0acf073101b6074p+5L, 0xa.75d036d99ea9702p+4L, -0xb.6dad412b4521e9bp+2L, 0xb.309b84fa4322d85p-4L, 0xb.eddbea7d15a390ap-2L, -0x8.c28d4a8cf1aeca5p-4L, -0x9.18649e56e05bc3p-10L, 0xb.f4af141ec671a67p-13L, -0x8.9b691ba71b88c22p-21L, -0xe.51787a5ba8032eep-34L, -0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xa.1f2bcdab57636dcp-1L, -0x9.00abc1bc4d0982ep+2L, 0xd.f4f583b2053726ep+3L, -0xc.8bdfde6a8082091p+4L, 0xf.3ab256338232753p+4L, -0xe.ea35b70a5ecc9fep+4L, 0xe.1259658c5d981b4p+4L, -0xc.94cfb84c203ee2p+4L, 0x9.6d04479c978badep+4L, -0xb.fba7e0547ddde95p+3L, 0xe.57e755aae11112fp+2L, -0xe.7d6853a8ff7e50ap+1L, 0xf.a7af56f4b329d5ep-1L, 0x8.a5b6ca4cabd2b23p-3L, -0xa.f4845007ba6cfc8p-3L, 0x8.f73ea4811a71163p-5L, -0x8.f333fded7f8c399p-14L, -0xc.0e2118f93f91f36p-13L, 0x9.410b6aa81cbea18p-21L, 0xf.5eda2e50acd327dp-33L, -0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0x8.748c703a8d2f937p-1L, -0xf.aa58ee38f4a5c91p+1L, 0xc.6649ad2cb179936p+3L, -0xa.ec3fa7ecd7c41f4p+4L, 0xb.fdefe0fae49564ap+4L, -0x9.ab0aa5c6715fdd9p+4L, 0x8.0517805b79afde9p+4L, -0xe.b0d6b4042318ee3p+3L, 0xa.58c96b88b1b4fe8p+3L, -0x9.5ebf7665dec59a9p+2L, 0xe.91d7b95490989a7p+0L, -0xd.2d1fb184d6542c6p-1L, -0x8.04bdd18c802f85cp-3L, 0x9.4d5f62e5127240ep-1L, -0xb.6b1e334f7b950afp-2L, 0xa.90dcb78f808ffecp-4L, -0xc.4d0f4db204d1cc9p-9L, -0xe.607c58598cbad8fp-11L, 0xc.f4a5486617740b1p-19L, 0xa.b9cd4f73758e428p-29L, 0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0xe.1527ff4b308c86p-3L, -0xd.4e4b4124bea1ab6p+0L, 0xa.dddc6243d72ddb1p+2L, -0xa.292b9d75d9dfa3ap+3L, 0xc.8e405a961b38a93p+3L, -0xc.26b2dc1d7fdae55p+3L, 0xb.3c70e9b2cbd6e2ap+3L, -0xa.499812dedb44ac4p+3L, 0x8.a209e470c03af8ap+3L, -0xd.a8eccfb33c210d9p+2L, 0xa.41c0c3baf0658a2p+2L, -0xd.392b16aec032585p+1L, 0xf.0072464fbb8a1e7p+0L, -0x8.a917bbb9a6176d9p+0L, 0x8.a94b0f3707ab7abp-1L, -0x9.ecec45327d721f6p-3L, 0x9.f8e2c727153415ep-7L, 0xd.9f7da20d270d536p-9L, -0xd.d50acf33eea750ap-16L, -0xb.616ca66f1d70df8p-25L, -0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0xa.40798a9071f9886p-4L, -0x9.c7f1784d562bdc9p-1L, 0xf.c7a08dd664fcb0ep+0L, -0xd.e3061daa7c85492p+1L, 0xe.9ea25350b56d92ap+1L, -0xa.9b6b7c19db33b9dp+1L, 0x8.4a9d3d29256548ap+1L, -0x8.606e5181f471318p+1L, 0xd.7ab58a9a794ee91p+0L, -0xf.b144a4677fb9db7p-1L, 0x9.f7c1a61944d51aep-1L, -0xe.3ad5af0d7e3ad17p-2L, 0xe.59c5d962fa5f5d7p-3L, -0xb.123c2df8aedf04ap-4L, 0xb.0d8bd72ff86061cp-5L, -0x8.5b12395e9ebc248p-6L, 0xe.4d9f7834474485cp-11L, 0xb.e29451f90ab62c4p-11L, -0x8.6239c0145764987p-16L, -0xd.a073c2e5c404378p-25L, -0x0p+0L}; - } - if constexpr (order == 10) { - return {0x0p+0L, 0xc.512ff3ce8e26ed6p-7L, -0xb.ceeeec30690a3d4p-4L, 0x9.7c942104078413dp-2L, -0x8.2529923084db5b6p-1L, 0xf.de393fe11f77db2p-2L, -0x9.745275d635af24dp-2L, 0xc.b7fc3e7f2662817p-3L, -0xe.dc63fbdf961d121p-3L, 0xc.433f6669ce8d77ap-3L, -0xb.80cde13c7fe01dap-4L, 0xd.186905a733e3482p-5L, -0xb.9a073d1ccf31d0dp-5L, 0xb.40c0c94f326298p-6L, -0xa.8537af479d9846bp-8L, 0xc.69d908f5c1cd609p-9L, -0xd.b913ea9c09b9ab5p-10L, -0xd.188a7ef97de034bp-15L, 0xb.8f3d1da6c45f8b5p-13L, -0xa.775011edc5ea48p-17L, -0x8.4d76c9c441821a3p-24L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.f82d860ed311d7772f0a5fc02a6dp-7Q, 0x1.da87adf545dea36f29603c50206cp-2Q, 0x1.a074ea6831a179cbcefe13bdeb26p-1Q, -0x1.d3dbc22db33632cb9d3eeea93097p-2Q, 0x1.07dc8c4b588098d99d74923fef1p-2Q, -0x1.17e06a0deb06ffc5a354422c2913p-3Q, 0x1.d85300a8e9a59db3d8e328544719p-5Q, -0x1.0710616766f9db787dd78480360dp-6Q, 0x1.0182a0c9a44ba81f2b490da87cf1p-9Q, 0x1.d91cd19825f46395eba40bde2534p-14Q, 0x1.f2bfaace30f58a825ed0b3a11e2p-15Q, -0x1.d7e9ba7b3ac4736029b548526137p-15Q, 0x1.5c274e2e04a6575e26e75abeb4c3p-18Q, 0x1.63562e1b18da7fac5905b88575e8p-20Q, -0x1.0af5800900ccbea5a647053aa052p-26Q, 0x1.1409cb495cfaa9cc50f1fb279896p-28Q, -0x1.1601287f207dc804b32b2b372befp-35Q, -0x1.4f944d6c974a0ba10244cbd7bf57p-42Q, -0x1.ad914b3b9c6449c459a4d882621ap-53Q, -0x1.65d8440cb5909e7eb82f547cb81ep-70Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.4988f615d8fc2101372678651696p-4Q, 0x1.cd9786f046dbd06d9795ae5305eep-1Q, -0x1.f034187a5d75333e9dbb5b1046e1p-1Q, -0x1.075e3bcf1d71f31524cf997afbe8p-3Q, 0x1.303436308c600230256305532d57p-3Q, -0x1.71d07ef81053ea5196f6a9c9ea93p-12Q, -0x1.321c6b5970b994e47d89204a7726p-4Q, 0x1.0f00f0747578208709a35dbb5672p-4Q, -0x1.fec807d6bcde2f6b9da93df4aa6dp-6Q, 0x1.092c0960e80ebe73a0fb5f592a81p-7Q, -0x1.1857810566102a80b03f6d57486cp-11Q, -0x1.693105a2bb706882bf9e39158aa2p-12Q, 0x1.a2acf3b1f9d0749452e4dc44d918p-14Q, -0x1.c4d81f25bbab666371fdd702fceap-19Q, -0x1.e0284772a21eeb07c87b76642d8fp-20Q, 0x1.7db784c0b013093ad9874c402637p-25Q, 0x1.739c15dc80c555f970d134b64517p-30Q, -0x1.d9433a2520a2e30f13e7c351f17bp-36Q, 0x1.651bd505e5aaae5cab5b708f20cp-46Q, 0x1.29782f98b98d8b31230d837a9eccp-62Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.5c07e5083d7090314f404490267fp-2Q, 0x1.307a2a8e783ea1f99bb361a3ce3fp-1Q, -0x1.a41fd4c6e53047b890408086b518p+1Q, 0x1.08f3303fd9b5f02cbec87edc442ap+2Q, -0x1.6a2a8758fd08bb3ed6b347424cecp+1Q, 0x1.5f04ae9c9034ab19fcfae00d09b9p+0Q, -0x1.150c77d31565d35edf80240e5e1cp-2Q, -0x1.78ed1cb9b0ec1e760990f81b60f9p-3Q, 0x1.4f99902d11603738023acee050bdp-3Q, -0x1.41156e1c846c464a303629e298b7p-5Q, -0x1.6c5861062a83616dee9275c18c97p-7Q, 0x1.21e04958552e6f03502dd7935724p-7Q, -0x1.cd1c35ab2ad92bf156188522c5bfp-10Q, 0x1.af6480e4adc46cb9e0c7649b6f56p-17Q, 0x1.0136c3fb4b19b9b10157d7a834f7p-15Q, -0x1.6928b0e495d07fb474aad6800549p-19Q, -0x1.6377af73884bfae0ae8534a7569p-25Q, 0x1.64323c063686a79e3f723a6f6b93p-30Q, -0x1.6fb51174aa8e375496c635af829fp-40Q, -0x1.32449da1b960881894abd2226adap-55Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.1c297e1a722977a767a1ff227742p+0Q, -0x1.a72bc3c00615f73ba93716b01e65p+1Q, 0x1.8e98178e99b31d46ae26eec0b1cap+1Q, -0x1.8f506e2a5e0eb5edc0313f13b62bp-1Q, 0x1.02364935e2222846b9cdda1bc87p-1Q, -0x1.0fb2290536b31f2a2fbff3404bbdp+1Q, 0x1.80597d49465bf4c4d8869fb534fap+1Q, -0x1.38ad9781c750136475272cd6e902p+1Q, 0x1.339d144fd9550bb8463b544a6643p+0Q, -0x1.08b97b33caecc76a026ab8335d28p-2Q, -0x1.3f8a268debfb77a1cde76d550fe7p-4Q, 0x1.2b8bd1a4fd0eaf4aaa08a96cf3ep-4Q, -0x1.35b764060a713cc242948b5c4153p-6Q, 0x1.f33a86db42465a05a6ee3ed1f4ffp-12Q, 0x1.1c307da269dee355c5c2d340dfe6p-11Q, -0x1.950dcb7c8e981d2c1ff88549cb89p-15Q, -0x1.f904916865d4cb30ef383c46ae0fp-21Q, 0x1.8b6cb6bf7586b0f4f1fcded4430cp-25Q, -0x1.21dedfd7476c5553241f507ac2d7p-34Q, -0x1.e2c7778c519a040a7c97727ee351p-49Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.51d8dbccf9206bcc4420e8d9ae07p+1Q, -0x1.c33b049bfbce5ed995e58045194fp+3Q, 0x1.0e79522ccf3dd0b86ea89a5531bfp+5Q, -0x1.9aba40cee29c09f71dc38c35a548p+5Q, 0x1.f144c4df7513d73b0fd71dc9df3fp+5Q, -0x1.17ce56ad9d9026c80fe9053e3b69p+6Q, 0x1.1abf8d1adcc3e5071c7209bb8006p+6Q, -0x1.aeeda88b7fe87fd16bcf8e054d05p+5Q, 0x1.6d1975fc2f42e1b2096263c969bbp+4Q, 0x1.64c18afe2844c60255dd74d07edbp+1Q, -0x1.4b3d36d8f9770ee95e2721f907e9p+3Q, 0x1.8e75251a7f5bee7754c2a9513fecp+2Q, -0x1.9e20d16541319f6d732cb61c018ap+0Q, 0x1.8f713f264dac28b16bf91d504bd5p-5Q, 0x1.002e9aac591974da848a16c844c8p-4Q, -0x1.22b5d07d79f24f7de83980b5ed9fp-7Q, -0x1.695b63166e6d63ad77759faf33b7p-13Q, 0x1.ba1b21857af82fb76bf4742957f6p-17Q, -0x1.df066d7576ffcacbc6c94f3c14p-26Q, -0x1.8ec06f9de2f7d48618cf3f2e0232p-39Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.553841cb8504c59ec8828722c9cp+2Q, -0x1.1648a261cfac86a07a577122f4eep+5Q, 0x1.7429c31b8bcdc777e06851df4ff3p+6Q, -0x1.d2259be1a7818ecd1bf98b71d684p+6Q, 0x1.36cbd86221f4c1c381302622675ep+4Q, 0x1.4a282d1320ed73864b5c73d42965p+7Q, -0x1.2e04ab290e2e062d6018a7405d3cp+8Q, 0x1.5f18c6755ba04a0fe5846dc7ce5fp+8Q, -0x1.80bbefefb89592a7731263e58b6ep+8Q, 0x1.90ad4b61c673e71a7b1a638ff4cp+8Q, -0x1.4159e0e62036c0e7d3a9372888dep+8Q, 0x1.4eba06db33d52e049a499539c59ap+7Q, -0x1.6db5a82568a43d359e1324f88c7ep+5Q, 0x1.6613709f48645b09020d1137193bp-1Q, 0x1.7dbb7d4fa2b472146ed131c42bb3p+1Q, -0x1.1851a9519e35d94904835e4c0f44p-1Q, -0x1.230c93cadc0b78607a6df63dd398p-7Q, 0x1.7e95e283d8ce34ce8180e79a24c3p-10Q, -0x1.136d2374e371184371f11564efd5p-18Q, -0x1.ca2f0f4b750065dbf1a91e494693p-31Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.43e579b56aec6db8f44fad1a2ca3p+2Q, -0x1.2015783789a1305c4b04f4299082p+5Q, 0x1.be9eb07640a6e4dcf71e8edd1986p+6Q, -0x1.917bfbcd50104121d7cf2e5fb61ap+7Q, 0x1.e7564ac670464ea6f5bb03253324p+7Q, -0x1.dd46b6e14bd993fb7d27e4be31d5p+7Q, 0x1.c24b2cb18bb303674bf661030f65p+7Q, -0x1.9299f7098407dc40f69f41f42557p+7Q, 0x1.2da088f392f175bbf1502b058265p+7Q, -0x1.7f74fc0a8fbbbd2a662926cc0952p+6Q, 0x1.cafceab55c22225d33d140f11ba1p+5Q, -0x1.cfad0a751fefca13c3b326a88e5bp+4Q, 0x1.f4f5eade96653abb41ce93f1a983p+2Q, 0x1.14b6d949957a5646a550369bc7aap+0Q, -0x1.5e908a00f74d9f8f6b65d286f0e6p+0Q, 0x1.1ee7d490234e22c547ade0704929p-2Q, -0x1.1e667fbdaff187310b0173bcb94dp-11Q, -0x1.81c4231f27f23e6bc64b0c2f2493p-10Q, 0x1.28216d550397d430f8799924705dp-18Q, 0x1.ebdb45ca159a64fa9f199a16a149p-30Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.0e918e0751a5f26d66d326215241p+2Q, -0x1.f54b1dc71e94b922c8b7d974b91p+4Q, 0x1.8cc935a5962f326b8767e9c68e69p+6Q, -0x1.5d87f4fd9af883e7ca8f85ba9a3ep+7Q, 0x1.7fbdfc1f5c92ac9439f72d5fc5fbp+7Q, -0x1.356154b8ce2bfbb26ff26135d3d6p+7Q, 0x1.00a2f00b6f35fbd2365b8c4d7e4cp+7Q, -0x1.d61ad68084631dc5b1cb350d96d3p+6Q, 0x1.4b192d7116369fcf46bbc7590d76p+6Q, -0x1.2bd7eeccbbd8b3529c9ec7ea0986p+5Q, 0x1.d23af72a9213134d138ab79fb28fp+3Q, -0x1.a5a3f6309aca858b5548cc51629cp+2Q, -0x1.0097ba319005f0b824ee39f7e25p+0Q, 0x1.29abec5ca24e481b150656fa7b24p+2Q, -0x1.6d63c669ef72a15dead10bbf465bp+1Q, 0x1.521b96f1f011ffd834fe0c4deb25p-1Q, -0x1.89a1e9b6409a39917b2558fc77d9p-6Q, -0x1.cc0f8b0b31975b1da167d6d21402p-8Q, 0x1.9e94a90cc2ee8162e5d90cf2df7p-16Q, 0x1.5739a9ee6eb1c850a9597f22010bp-26Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.c2a4ffe9661190c09a7af8b79479p+0Q, -0x1.a9c9682497d4356cc97c7817608dp+3Q, 0x1.5bbb8c487ae5bb615e8e73227ceep+5Q, -0x1.452573aebb3bf474bf24d5595fd4p+6Q, 0x1.91c80b52c3671525c3375a1dd5efp+6Q, -0x1.84d65b83affb5ca97ccaf8b73947p+6Q, 0x1.678e1d36597adc53993fd96dab7ap+6Q, -0x1.4933025bdb6895888c173cc7b2a5p+6Q, 0x1.14413c8e18075f1444cc540dc34bp+6Q, -0x1.b51d99f6678421b18139d5beb61cp+5Q, 0x1.483818775e0cb14480b32b95042cp+5Q, -0x1.a72562d5d8064b092b7bae77a4cbp+4Q, 0x1.e00e48c9f77143cec0c43c67669bp+3Q, -0x1.1522f77734c2edb19342e41508e1p+3Q, 0x1.152961e6e0f56f5672007e36f948p+2Q, -0x1.3d9d88a64fae43ec46db73db181ap+0Q, 0x1.3f1c58e4e2a682bc6ff059fa1f8dp-4Q, 0x1.b3efb441a4e1aa6b7bfceb788233p-6Q, -0x1.baa159e67dd4ea14a46828d67fefp-13Q, -0x1.6c2d94cde3ae1bef5e760e39de7cp-22Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.480f31520e3f310c306bdafaf042p-1Q, -0x1.38fe2f09aac57b92aacdaa15d1b7p+2Q, 0x1.f8f411bacc9f961bc5fe5499f875p+3Q, -0x1.bc60c3b54f90a9241998e0192f5ep+4Q, 0x1.d3d44a6a16adb2540f6bfe5db93ap+4Q, -0x1.536d6f833b66773a970214ff031cp+4Q, 0x1.0953a7a524aca913282b24103258p+4Q, -0x1.0c0dca303e8e262fc9682f1cf736p+4Q, 0x1.af56b1534f29dd21b9240915b75ap+3Q, -0x1.f628948ceff73b6d1ae732743415p+2Q, 0x1.3ef834c3289aa35b262757674e4bp+2Q, -0x1.c75ab5e1afc75a2d9d28a11fcce2p+1Q, 0x1.cb38bb2c5f4bebadf622e599ec8fp+0Q, -0x1.624785bf15dbe093496b9f1d5135p-1Q, 0x1.61b17ae5ff0c0c37a77be972ec5ep-2Q, -0x1.0b62472bd3d7849095f6dced344cp-3Q, 0x1.c9b3ef0688e890b76d9f130077d8p-8Q, 0x1.7c528a3f2156c588899985294901p-8Q, -0x1.0c4738028aec930d4308df6549ap-13Q, -0x1.b40e785cb88086ef360909630572p-22Q, 0x0p+0Q}; - } - if constexpr (order == 10) { - return {0x0p+0Q, 0x1.8a25fe79d1c4ddac335be8819a8ap-4Q, -0x1.79dddd860d2147a7416541793f71p-1Q, 0x1.2f92842080f0827925b022200689p+1Q, -0x1.04a53246109b6b6c0d3ef73b505ap+2Q, 0x1.fbc727fc23eefb6381085fb0ea64p+1Q, -0x1.2e8a4ebac6b5e49a84fad5dff777p+1Q, 0x1.96ff87cfe4cc502ebda973db1ba2p+0Q, -0x1.db8c7f7bf2c3a242351f9975276ep+0Q, 0x1.8867eccd39d1aef372869101502fp+0Q, -0x1.7019bc278ffc03b406b2ff135206p-1Q, 0x1.a30d20b4e67c690471d7cbcbb0dfp-2Q, -0x1.7340e7a399e63a19859bd6b84d4cp-2Q, 0x1.68181929e64c530045ddd9e48ddfp-3Q, -0x1.50a6f5e8f3b308d50e585f11b7ap-5Q, 0x1.8d3b211eb839ac11193734372a7dp-6Q, -0x1.b7227d5381373569d6206c572353p-7Q, -0x1.a3114fdf2fbc06953fcb9931063cp-12Q, 0x1.71e7a3b4d88bf16a9f3c256dd239p-10Q, -0x1.4eea023db8bd4900ec558c766ab3p-14Q, -0x1.09aed93888304346e30d148d3c14p-21Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0153862862186078764210148054384665436987968299086163110916049774302302509757"), boost::lexical_cast("0.463408201308509360685176566158665903411342347448682788607059620387445077532"), boost::lexical_cast("0.813391995638826649479330465641602870909776013569395886947250616963915046071"), boost::lexical_cast("-0.456892999686536248322183305850398976442122564743086558409415878925543062613"), boost::lexical_cast("0.257677261446702307763827286244642468068192138990732487426320016042544286916"), boost::lexical_cast("-0.136658505010362584956891849494062948225995486599841370839711839313046305597"), boost::lexical_cast("0.0576567662131323839275754677629378113124645271947858794185772706476552313105"), boost::lexical_cast("-0.0160561515054805568795851215654406366459996109297291243447819308339625896857"), boost::lexical_cast("0.00196464741458920772402831404575169651260998923501842539475704095236022681377"), boost::lexical_cast("0.000112798827446855800791029803530656734991774835196287349403803335501621270655"), boost::lexical_cast("0.0000594554781954403684033785931588011770054264082896496671103792500235464433295"), boost::lexical_cast("-0.0000562564136659884191230679156227868258475904572875936016422586126656291941418"), boost::lexical_cast("0.00000518789197025363361471577911859966580654417969569942459663451570764021770902"), boost::lexical_cast("0.00000132373214147764795577030206527013960188029793451345023965588627064041150704"), boost::lexical_cast("-0.0000000155390580715395054554173944015565071767006531414831642901826878560185386309"), boost::lexical_cast("0.00000000401688533248623065067198103021582298234469777511892684855878156604369527873"), boost::lexical_cast("-0.0000000000316054552262036582439139330382598424252005270997818496711644728508686815474"), boost::lexical_cast("-0.000000000000298054298041780380540322339753186187258299530548878985631631068130187725404"), boost::lexical_cast("-0.000000000000000186295230202489625442020988651081124044989063537598156376169532878324451123"), boost::lexical_cast("-0.00000000000000000000118400908492220475093634528886504359773639984757721702393945884924044020060"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0804528820713690537679942952538307927448324275292783996775043561168764668792"), boost::lexical_cast("0.901546685057318722606544198126464222660980499114959450975631195995562075653"), boost::lexical_cast("-0.969147458016531260537001332368135743279288495176200726279321756564798820440"), boost::lexical_cast("-0.128597705133580020105456519744387638532533583968712163469421630736054713073"), boost::lexical_cast("0.148537085873201139450805597667488365500301018520176104569141326668098237996"), boost::lexical_cast("-0.000352682530778098478434438198206217867661443912512135381010073899276667394708"), boost::lexical_cast("-0.0747341340384494360574688474082559001763945248197182213228281231111410765743"), boost::lexical_cast("0.0661630051393711509223363180529539046273421054851354002096935895895589322378"), boost::lexical_cast("-0.0311756207037897739706621005131524864825329454001744116473141441231765143715"), boost::lexical_cast("0.00809240777908867125888958717233316990861675515056387491671985358196801653703"), boost::lexical_cast("-0.000534709572707320623292468935686184597428178805593585443411787185724270841266"), boost::lexical_cast("-0.000344459049457110720806003651240962720647979860629593805430817794517683005097"), boost::lexical_cast("0.0000998200401053258733952321911032602231933728074550949033897739987254062819085"), boost::lexical_cast("-0.00000337395239823704966830913455725328211227310458904067484070296753117772464426"), boost::lexical_cast("-0.00000178872548120729485900416417576878299998863692536435591416599550573501317289"), boost::lexical_cast("0.0000000444376921974173227032345936619919762366059115958040870563226908761301278160"), boost::lexical_cast("0.00000000135190824431474161018642835112040642148891160635198350421744055168342457059"), boost::lexical_cast("-0.0000000000269018645424657851835556324494989262226498212843590290606946175171968874237"), boost::lexical_cast("0.0000000000000198235161188202162103176056710579230402924914509457090754670397189279898276"), boost::lexical_cast("0.000000000000000000251966447199947741787778445282273243764250629238425265938759750960070288565"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.339873865726403823874694504886230871354288247669120680859586352931910650802"), boost::lexical_cast("0.594682054416009422785849668697082787755660519264449722390570694692122196031"), boost::lexical_cast("-3.28222140990908627713882079321726861540709199811588816762195376180866676151"), boost::lexical_cast("4.13984304652589597399637402140982673032568889063380246443975686333143709866"), boost::lexical_cast("-2.82942287297379899817138989243274273519930408716847888511551935958914702440"), boost::lexical_cast("1.37116519281717568064954984833983547962197792842040302587532179757516934771"), boost::lexical_cast("-0.270555374392051307156490696193132354552391022825927018192372907103041586105"), boost::lexical_cast("-0.184046005646555652197008303457890114279643877305115529070305316012624288888"), boost::lexical_cast("0.163867117286074044679000700383983800581641338738039398170630891049204540480"), boost::lexical_cast("-0.0391947889912791807642293867045881185152396327816360187024476982368191084445"), boost::lexical_cast("-0.0111189340353413485147270893150106933823953700659393824844796952100999217654"), boost::lexical_cast("0.00884631711293466609492290342912398272864238580654395596445675814230221634902"), boost::lexical_cast("-0.00175899579589153660809115004201226274173551391561283661338278039734836261348"), boost::lexical_cast("0.0000128565010951553987674529189490213861196316851900637195447923613618392713735"), boost::lexical_cast("0.0000306622896125458146897677483454122489183614226371943713405943027958351707517"), boost::lexical_cast("-0.00000269084385910343679257051203982323513897525615083571592326449237527728689054"), boost::lexical_cast("-0.0000000413818658474313744350785912858525849906772047679216774507165554252423741218"), boost::lexical_cast("0.00000000129583433007671170780305889377624130848179796328575186687487583063726979193"), boost::lexical_cast("-0.00000000000130635874598988057004789486171609848753519703338247439616746352104966358265"), boost::lexical_cast("-0.0000000000000000332056463780931130817519370455224958306055159032983343572060292369140142184"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.11000812669423065201408736025211163644399899284324684887960095471364939561"), boost::lexical_cast("-3.30602309108887457792110755842802529228225817003803592467879858392073911911"), boost::lexical_cast("3.11401648009214052848211556518765632906037687404471414836791183188060792139"), boost::lexical_cast("-0.779910509750178545578760075470210269561158846741323352073939231867070856952"), boost::lexical_cast("0.504320419147067435491020898845963984718363947233445348465286515163831830149"), boost::lexical_cast("-2.12262451891492618285514915625369193255653192234826741230297804628732384508"), boost::lexical_cast("3.00273099973557546696148253375588381632944425785087065216350459031139544566"), boost::lexical_cast("-2.44279760205120109440892243572637061929619282682731780365162404438278331658"), boost::lexical_cast("1.20161559056699135006082217921675647820154446695817183171496635761222714468"), boost::lexical_cast("-0.258520054851697959251777889637477507802570871015640968136924573283611103029"), boost::lexical_cast("-0.0780126100569294916448477016495706044874014105663040020611150095580660962657"), boost::lexical_cast("0.0731313885915515903797324164189780989405177158479326795726386610419770126352"), boost::lexical_cast("-0.0189035870354593148101137495477572951021716699214895023786902900987211265014"), boost::lexical_cast("0.000476101513144094836944099173568934880809112562865614785758014193018660882339"), boost::lexical_cast("0.000542048296030493162492883395621428687561762136240537247628992820097566715272"), boost::lexical_cast("-0.0000482861860046811029771577073119595197181588063401982223039270103384434060022"), boost::lexical_cast("-0.000000940669036930439153511860275388566814505399165175554813865283382967471512611"), boost::lexical_cast("0.0000000460334894609940486697079115005770453881482490309436808499379292148676402667"), boost::lexical_cast("-0.0000000000659089444165122287064782258267187195472691487712170997364379779451246094661"), boost::lexical_cast("-0.00000000000000334995342514096728311283812541641458320430857209624625943650939806191456233"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.63943049915747295902408884381492456615013102835825837278218094298381059975"), boost::lexical_cast("-14.10095434632826170706015754809187240473647390058020018665331529642229273560"), boost::lexical_cast("33.80923876769495738178795299271336231298081520211817127483146415279224333890"), boost::lexical_cast("-51.34094392422730822169625783218914621608905661019301981247127969679259656370"), boost::lexical_cast("62.15857863021890815900436678476312302754891486816333143898291218703682880770"), boost::lexical_cast("-69.95150252603710930320770250549877801440701750703949252096860337732317006130"), boost::lexical_cast("70.68706171009487085024307021653246851862364809264251626425285523034249218320"), boost::lexical_cast("-53.86604413017363404938611622171529791896555966533772428275471051281075597180"), boost::lexical_cast("22.81871603498091653948869197203037193649186992806348920181610865185092457340"), boost::lexical_cast("2.78715646181129822503760020954122490057506409714944714939146997166220972189"), boost::lexical_cast("-10.35122244241549248750998798029030033554857264769764070098905656424283124680"), boost::lexical_cast("6.22589995944639343162447192606753092490081390725441582060459808007413775955"), boost::lexical_cast("-1.61768826219594651676851154369360491801137647456640794313175997512654068683"), boost::lexical_cast("0.0487600549117153291242267435006532626983384560499959793316799708161496794985"), boost::lexical_cast("0.0625444452212547866619276559961974061899918807020408330419298222926353018189"), boost::lexical_cast("-0.00887177162344660903733729314681709539971921946704977985564110911846620363922"), boost::lexical_cast("-0.000172308435777249447063922911208598540360539757913378670543697270097011078916"), boost::lexical_cast("0.0000131757849528219664204655654758892673480971917353333971564471583795581462196"), boost::lexical_cast("-0.0000000278829310385893278753467667297067592695172655495747023195258681155064789066"), boost::lexical_cast("-0.00000000000283330126035508764154051402203972353668751336274290837719220178109180982040"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.33155865550004324339411698075437576125001114031131680543558258637926722542"), boost::lexical_cast("-34.78546596922894035358221752013471418576656119892560802306039573901884498850"), boost::lexical_cast("93.04078333893580274273554726200086898992117829963170573289656818645421417950"), boost::lexical_cast("-116.53672745308757790035524178072195510211938340870303002375366241537010190400"), boost::lexical_cast("19.42476690609991902018771707602390047697990808120145803963343105970827114300"), boost::lexical_cast("165.07846889283130224972392556901964656573551315330125176803668977902167923900"), boost::lexical_cast("-302.01823670002161100444326963103590042074566858643871979378909432822312022500"), boost::lexical_cast("351.09677823531118456691013587333441077552991458958521920799116438915277804300"), boost::lexical_cast("-384.73412988907291298126127857698299454483222915340925177050408733410565143700"), boost::lexical_cast("400.67693148703611109141641562065904066331648411152048236040109020183777077600"), boost::lexical_cast("-321.35108793531867698893279523881710779471319811290683986733942416578230536600"), boost::lexical_cast("167.36333355910991474853808717960164594081543936479125456031564843552211416400"), boost::lexical_cast("-45.71369961953726477752159230409155711113565175365517527967211543525719318890"), boost::lexical_cast("0.699367064899157418988908846748802289435069698849047603720655697336454274985"), boost::lexical_cast("2.98228422535376897161740571847584616697653819004075212716090431169277576972"), boost::lexical_cast("-0.547498027051101574561205976576588259175101412173034924756008962903023025120"), boost::lexical_cast("-0.00888211456705821551022409285786342463315511465858554494859435135093539710800"), boost::lexical_cast("0.00145944781339651318786975450416647682444162007080853467985950420011002879779"), boost::lexical_cast("-0.00000410417202524410779263314775667707070690036033233187273470129649919772492533"), boost::lexical_cast("-0.000000000833431526424512126756266586592842608072719180575476717997770913071706154856"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.06088106838769290054968439394567345106326651755752600922150619200981904649"), boost::lexical_cast("-36.01048320187342016064122793694682929039037974207289646083751798817843620580"), boost::lexical_cast("111.65497002381900847391604108056132695425373640954404816320887269328425438600"), boost::lexical_cast("-200.74215547182405062933561376177594578645448343871864023725391767591774835600"), boost::lexical_cast("243.66853923912563333720102697769935941130760592520157588467019833307464642300"), boost::lexical_cast("-238.63811401415731691311790369583173568877153676175659117260463100444743159100"), boost::lexical_cast("225.14682535963357317765848454921569290528275448357783818162730153311551574600"), boost::lexical_cast("-201.30071286904051720114799658023138705341732545954845691270252578520003833200"), boost::lexical_cast("150.81354485672703044612123433476281157995253230519198222354112466751203726500"), boost::lexical_cast("-95.86424271108893183923291774912315316192315495940385275849744648479129371610"), boost::lexical_cast("57.37349454581659918342847281164914782841679698416807207317817480336962650140"), boost::lexical_cast("-28.97974630119186880188417545488990640756883378387320588356588113332720316360"), boost::lexical_cast("7.82750961052950670790289612831387996295164858527519664270838963476345026334"), boost::lexical_cast("1.08091505094987758545055341443439247053069659406365117057429783552826238760"), boost::lexical_cast("-1.36939299129089996854048024593726735159933395218523578300840349681327697303"), boost::lexical_cast("0.280181237504463119434520254208320451998395772453319918592970421102919439139"), boost::lexical_cast("-0.000546265385956676161209750070768621430280614491537142208248905211721125879926"), boost::lexical_cast("-0.00147158111921181446121734700653833523667079723972927387216993834057729665501"), boost::lexical_cast("0.00000441268942542730566701346669932877725269376519910764607900294893415486917856"), boost::lexical_cast("0.00000000178936364555416156355622735225731323849173624958182729551826746278581656345"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.22763395991077497600708800752870112512802019777846803123422609253523444499"), boost::lexical_cast("-31.33083894520795656643557338514370343692021933760780167709842547864854441400"), boost::lexical_cast("99.19649370888855559161612539040862291452743358994450794072159006509952447180"), boost::lexical_cast("-174.76554100529416030240273725663066184549978635556382128606302159015804699400"), boost::lexical_cast("191.87106416707077830176594781673733058344977599226321690051187655465260417000"), boost::lexical_cast("-154.69009950176950187209831807333662376535557038525297678672923277217118961000"), boost::lexical_cast("128.31823764545969592124295974645679685264644800112728210780946540963513417100"), boost::lexical_cast("-117.52620888526942424001135357455119389132936854292759496512541610625978723100"), boost::lexical_cast("82.77458740900115668785824293717372920888452561941133683536618899571268039270"), boost::lexical_cast("-37.48043594311010343509519734340882271874817171143915172303616751347250271800"), boost::lexical_cast("14.56969793619700440657543207683336718496887543376426838538228469975643333100"), boost::lexical_cast("-6.58813242670581930805873617097473570421450364523198050554153666935990605860"), boost::lexical_cast("-1.00231517515205560297111170032367032830624266948757853925257748047437485705"), boost::lexical_cast("4.65111836477555984946605574234122313918908034655085234744720545935378656185"), boost::lexical_cast("-2.85460739300369418699655129485713788069696498710719979317225671767847465746"), boost::lexical_cast("0.660366742165965802145434489749517292319612368608367169686199145406925272970"), boost::lexical_cast("-0.0240254194586754357618804390248717384819465676000390734107846903076164025556"), boost::lexical_cast("-0.00701996941206172392237021839195076817058449392415590849322406637448645715144"), boost::lexical_cast("0.0000247109356222148754647438533593506924053068870724972211566904008498782300086"), boost::lexical_cast("0.0000000199783389222010785055607244259171818398069280425424499723517627544611259097"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.76033019493303856051687449323434388609090202601383913064385190376448183312"), boost::lexical_cast("-13.30583579203687943081629136293267795607309397777682235599140484923954366500"), boost::lexical_cast("43.46657616257718154366654543277971738319342135931706703195817811035185093990"), boost::lexical_cast("-81.28657410638605936274247923055646375830285098524867924682488987143954182420"), boost::lexical_cast("100.44535569493907191996663384307406316811627445344739700254788195526559558500"), boost::lexical_cast("-97.20933347474678202187842214477633354845397460973373353664056650468754174360"), boost::lexical_cast("89.88878331109182469176945890436872342814210396602291754411932369668940781030"), boost::lexical_cast("-82.29981368567145730476008183188924859214306594631403889804786963467235197800"), boost::lexical_cast("69.06370756169948695128970734742378882589833357909995593129091002885751309170"), boost::lexical_cast("-54.63945381644636331825019271777000447410834252910294578185697306015613918450"), boost::lexical_cast("41.02739041572348156154461856933135418845380309772196428740672678193620244590"), boost::lexical_cast("-26.44662745983841279602705174819159511393608583819553179666861965546358182250"), boost::lexical_cast("15.00174369284244633245038836591523658570351126534715276565083434487614618120"), boost::lexical_cast("-8.66051839144173892722259100499075549842639519928721133973595893424223456610"), boost::lexical_cast("4.33065078303101010579895420947640558162604044791599818852754301702712403354"), boost::lexical_cast("-1.24068502483685799590790437877354796560395991582308092016594732485261421186"), boost::lexical_cast("0.0779078934121258971785160919472512639431601470709999391983348576222593616764"), boost::lexical_cast("0.0266074428860304338208309476152802616336853971424135540169564254497724564119"), boost::lexical_cast("-0.000211062563905998390099917614137909944233433155336638390553050174056557131393"), boost::lexical_cast("-0.000000339167240842007413867671399755809233304462324861037758236912743626130786250"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.640740910784300850608448747428708985857357012208138478640701473826119071995"), boost::lexical_cast("-4.89051414436388374023627360586462653542345290441410991274311164920600966594"), boost::lexical_cast("15.77979361042251828056602777327009987727897110266960291592731419702813423270"), boost::lexical_cast("-27.77362414192706755256336444082924835831112932806579979321237948678315003340"), boost::lexical_cast("29.23932877961020134280019505838077863032589219652057187629061788645605764150"), boost::lexical_cast("-21.21421767485153769358479119905782957335265962757154762905239908876532045980"), boost::lexical_cast("16.58292355069242264838528754441677563862319454861075967735395941314979352800"), boost::lexical_cast("-16.75336665006114737745223674059225270255439659949203892423230795535668534770"), boost::lexical_cast("13.47933260222753983145552435052316707867495382773984724176882313942650009280"), boost::lexical_cast("-7.84622682345785779224288430587701090510900802969451706536957930436008165844"), boost::lexical_cast("4.98389929827173202326056782961135292617104624089540476377857847941525260633"), boost::lexical_cast("-3.55745576400618796425954497528896729856448578899557932766030185253705183005"), boost::lexical_cast("1.79383439858729303972208191272224953494584793148950860052667722677927056863"), boost::lexical_cast("-0.691951922965863057242007607869971708166614493007258083206682103112632034601"), boost::lexical_cast("0.345403595245226611364778279349176734775513013282472618970398880792800137706"), boost::lexical_cast("-0.130558544182786348133975182480093367398008959930808967410065238652717910680"), boost::lexical_cast("0.00698399148544449295954023501742964713288497821639870432194548542030467210561"), boost::lexical_cast("0.00580325961266701622640949560827629673155869792665828211986634190720023351417"), boost::lexical_cast("-0.000127925013729926386622233224468569958480332535234461953049381468504991463929"), boost::lexical_cast("-0.000000406109284685247160935243546331678983485852468994859006463959277286676783577"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 10) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0962276401961485707634176189196513057375091608921918899965672697435379944132"), boost::lexical_cast("-0.738020823110277888005487147166448075761525987078292691760810832596632987072"), boost::lexical_cast("2.37165881716817146455198793581381209035513677222207786580044965069857187102"), boost::lexical_cast("-4.07258278696320160772598824632813109064068582481103097502282770918877166041"), boost::lexical_cast("3.96701526462117458029198549268700257108768896990631205803877021434675874630"), boost::lexical_cast("-2.36359581108028672945508028330384282919707503803425311590987150576557002759"), boost::lexical_cast("1.58983658624201607243694322053302702142722584179817682236311853130843295497"), boost::lexical_cast("-1.85761257911759839282249544686803595350328330563233456669214217961095916255"), boost::lexical_cast("1.53283576975247258432308684518667039820955312493092996957652314465829192761"), boost::lexical_cast("-0.718946342305564226765801789587960150187823928357554861829190310338862006619"), boost::lexical_cast("0.409229765931396736377286349516677311112729496444160501691912630223706015387"), boost::lexical_cast("-0.362552279816077162656936242116884276626981924474959700030697184703184497473"), boost::lexical_cast("0.175827213851141339261603124481542122845079828131432589861342337234868002619"), boost::lexical_cast("-0.0410952380112717990391343459878268460433238007822432915185287645982519381943"), boost::lexical_cast("0.0242450545728193174252974797154291458408637398260602402141534552772736201039"), boost::lexical_cast("-0.0134013282722748930010976896226591764148191213826882368913426650595356115231"), boost::lexical_cast("-0.000399654030797277232222848286358951433908666645251171779800808018550167077414"), boost::lexical_cast("0.00141107498821972634714801414163161931174746710841213074592354066961171560834"), boost::lexical_cast("-0.0000798497430554567452885354694999821103608152142620563483234681315502038086578"), boost::lexical_cast("-0.000000494873154958329223506257796254007745988846883400505225346149184283368961203"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 12) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.ba5636p-8f, 0x1.3af728p-2f, 0x1.da1522p-1f, -0x1.5c6f66p-2f, 0x1.4840a4p-3f, -0x1.9d4fdcp-4f, 0x1.042a86p-4f, -0x1.08554cp-5f, 0x1.86c906p-7f, -0x1.8785b4p-9f, 0x1.f00fcp-12f, -0x1.43b7cep-15f, -0x1.dafa2ep-18f, 0x1.2d678cp-18f, -0x1.f0554cp-22f, -0x1.934a0ep-24f, -0x1.3a5d96p-29f, 0x1.0e0d22p-33f, -0x1.652334p-41f, 0x1.02e74cp-47f, 0x1.bb358cp-60f, -0x1.f67e04p-79f, 0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.3daa14p-5f, 0x1.716f56p-1f, -0x1.16beeap-2f, -0x1.f51bdap-1f, 0x1.97243cp-1f, -0x1.b8eefp-2f, 0x1.2402bcp-3f, 0x1.805958p-10f, -0x1.fa47fap-6f, 0x1.025a88p-6f, -0x1.3d712ap-9f, -0x1.c5c0dp-11f, 0x1.c45b6ap-12f, -0x1.6a167p-15f, -0x1.13c0d6p-17f, 0x1.b2cff8p-20f, -0x1.9ee91p-25f, -0x1.c87e12p-29f, 0x1.b076eap-34f, 0x1.71c42cp-44f, -0x1.e6d8e6p-52f, 0x1.13fd18p-69f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.77fed2p-3f, 0x1.e1d108p-1f, -0x1.9e9c7cp+1f, 0x1.bc153ap+1f, -0x1.240fe4p+1f, 0x1.80cee2p+0f, -0x1.abf5ep-1f, 0x1.50c7e8p-2f, -0x1.4654eep-4f, 0x1.091b1ep-6f, -0x1.59c476p-7f, 0x1.935e46p-8f, -0x1.8fe152p-10f, 0x1.90febp-15f, 0x1.09bd2p-15f, -0x1.da6da6p-19f, 0x1.a3887p-21f, 0x1.0f785p-26f, -0x1.63226ep-31f, -0x1.84d7e4p-38f, 0x1.75cc98p-48f, -0x1.a7d232p-65f, -0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.60087cp-1f, -0x1.1c49e2p+0f, -0x1.f023b2p+0f, 0x1.8d30cp+2f, -0x1.80e0dep+2f, 0x1.c1feacp+0f, 0x1.3621acp+1f, -0x1.f3ab98p+1f, 0x1.5e6794p+1f, -0x1.c702ecp-1f, -0x1.ee149ap-4f, 0x1.ffde0cp-3f, -0x1.a2cbbap-4f, 0x1.d58bf4p-7f, 0x1.206bp-9f, -0x1.dfc88ap-11f, 0x1.f86e54p-15f, 0x1.28c92p-18f, -0x1.9c90e4p-23f, -0x1.7e8cfp-32f, 0x1.cc8984p-39f, -0x1.051a2p-54f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.efa02p+0f, -0x1.34df3ep+3f, 0x1.596114p+4f, -0x1.014d7ap+5f, 0x1.5a4b7p+5f, -0x1.d72d9cp+5f, 0x1.1a6ca8p+6f, -0x1.f8d9fp+5f, 0x1.142ce2p+5f, -0x1.90f39p+1f, -0x1.822b1ap+3f, 0x1.52a34ep+3f, -0x1.0b934ap+2f, 0x1.335fd6p-1f, 0x1.17c48ap-3f, -0x1.003386p-4f, 0x1.68d464p-8f, 0x1.b6ad0ep-12f, -0x1.c361dcp-16f, -0x1.d59d4cp-25f, 0x1.f6c8c6p-31f, -0x1.1d1866p-45f, 0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.1672f8p+2f, -0x1.d05e84p+4f, 0x1.49fc06p+6f, -0x1.e4421p+6f, 0x1.09c53p+6f, 0x1.677b64p+6f, -0x1.fbf398p+7f, 0x1.628082p+8f, -0x1.a2714ep+8f, 0x1.cb4de8p+8f, -0x1.9cacd4p+8f, 0x1.055f48p+8f, -0x1.8ddf94p+6f, 0x1.95561cp+3f, 0x1.8ab9ccp+2f, -0x1.6e4fp+1f, 0x1.43d702p-2f, 0x1.951dp-6f, -0x1.5137c2p-9f, -0x1.3e3df8p-18f, 0x1.78041p-23f, -0x1.aa8cd8p-37f, 0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.6688e4p+2f, -0x1.50ba26p+5f, 0x1.18d5fcp+7f, -0x1.16422p+8f, 0x1.7cdc34p+8f, -0x1.a2f3c4p+8f, 0x1.aa319ep+8f, -0x1.958a02p+8f, 0x1.4bb5b2p+8f, -0x1.caa92ap+7f, 0x1.1f2d7ap+7f, -0x1.3b920ep+6f, 0x1.bc14b2p+4f, 0x1.8c237ap-1f, -0x1.7f694cp+2f, 0x1.3f67e2p+1f, -0x1.4cc6cp-2f, -0x1.6b5574p-6f, 0x1.38d6e4p-8f, 0x1.260d96p-17f, -0x1.5c7912p-21f, 0x1.8b88d4p-34f, 0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.80f666p+2f, -0x1.7dd222p+5f, 0x1.48b0d8p+7f, -0x1.41512cp+8f, 0x1.8f56fp+8f, -0x1.675a3ap+8f, 0x1.2e9626p+8f, -0x1.12635ap+8f, 0x1.969994p+7f, -0x1.59e9b6p+6f, 0x1.09d1ap+3f, 0x1.cc8ab2p+3f, -0x1.93c8d6p+4f, 0x1.013c24p+5f, -0x1.784654p+4f, 0x1.21acdep+3f, -0x1.6fa584p+0f, -0x1.39157p-4f, 0x1.343728p-5f, 0x1.c53d4ap-15f, -0x1.57bc52p-17f, 0x1.869c12p-29f, 0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.d573dcp+1f, -0x1.ddfb9cp+4f, 0x1.a873c2p+6f, -0x1.b2204ep+7f, 0x1.23910ep+8f, -0x1.29c6cep+8f, 0x1.1c64b2p+8f, -0x1.156986p+8f, 0x1.ef2b6p+7f, -0x1.84734ap+7f, 0x1.20e874p+7f, -0x1.93d454p+6f, 0x1.e8c646p+5f, -0x1.0a8b2ep+5f, 0x1.14ef6ep+4f, -0x1.bab6f4p+2f, 0x1.4e6abp+0f, 0x1.e57eccp-4f, -0x1.0f174cp-4f, 0x1.a1f2dcp-12f, 0x1.400292p-15f, -0x1.6c7e6p-26f, 0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.d2f4ep+0f, -0x1.e196ep+3f, 0x1.ab061ep+5f, -0x1.a7b25ap+6f, 0x1.04d398p+7f, -0x1.c308c4p+6f, 0x1.759cb8p+6f, -0x1.73a4dcp+6f, 0x1.4d02e4p+6f, -0x1.c4dfc6p+5f, 0x1.217c84p+5f, -0x1.9d3e5ep+4f, 0x1.eced02p+3f, -0x1.ab1578p+2f, 0x1.780b78p+1f, -0x1.59e4e8p+0f, 0x1.04013ap-2f, 0x1.63e904p-4f, -0x1.26b33ap-5f, 0x1.1fc084p-10f, 0x1.9c18e6p-15f, -0x1.d792bap-25f, 0x0p+0f}; - } - if constexpr (order == 10) { - return {0x0p+0f, 0x1.19eec2p-1f, -0x1.249f96p+2f, 0x1.0297dcp+4f, -0x1.f4e8dcp+4f, 0x1.1efd1cp+5f, -0x1.a397ap+4f, 0x1.239464p+4f, -0x1.3946dp+4f, 0x1.289832p+4f, -0x1.5bb8e2p+3f, 0x1.68255cp+2f, -0x1.21aae8p+2f, 0x1.64fab4p+1f, -0x1.75b64cp-1f, 0x1.22ff2ap-3f, -0x1.07ed62p-3f, -0x1.4a01e6p-6f, 0x1.2e7cdcp-4f, -0x1.b7f686p-6f, 0x1.17b65cp-9f, 0x1.910e04p-14f, -0x1.cf434ap-23f, 0x0p+0f}; - } - if constexpr (order == 11) { - return {0x0p+0f, 0x1.a6c51cp-5f, -0x1.b83154p-2f, 0x1.89e13cp+0f, -0x1.8aa498p+1f, 0x1.eb2b7ep+1f, -0x1.a9173ap+1f, 0x1.4e8702p+1f, -0x1.31bb74p+1f, 0x1.0e1264p+1f, -0x1.9cd0dcp+0f, 0x1.3cec22p+0f, -0x1.daf36p-1f, 0x1.329c32p-1f, -0x1.8936aep-2f, 0x1.00deep-2f, -0x1.07bd18p-3f, 0x1.cec02p-5f, -0x1.e6ef9ep-6f, 0x1.8f4f48p-7f, -0x1.e72d5p-10f, -0x1.e19176p-14f, 0x1.1b79fap-21f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.ba5636194c094p-8, 0x1.3af72853b189p-2, 0x1.da1521352f488p-1, -0x1.5c6f665240adep-2, 0x1.4840a35a3e507p-3, -0x1.9d4fdc34ae4eep-4, 0x1.042a86a360592p-4, -0x1.08554bd18ab25p-5, 0x1.86c905bef28a7p-7, -0x1.8785b403c86f7p-9, 0x1.f00fc00fce26fp-12, -0x1.43b7ce1fa4e5bp-15, -0x1.dafa2eb6c7f5dp-18, 0x1.2d678c174b94dp-18, -0x1.f0554b8e5712dp-22, -0x1.934a0de4da293p-24, -0x1.3a5d95f1928efp-29, 0x1.0e0d213886187p-33, -0x1.652333b32760ap-41, 0x1.02e74c07e6081p-47, 0x1.bb358cf4adf4ep-60, -0x1.f67e04f08f215p-79, 0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.3daa1461d0cf4p-5, 0x1.716f56bac1b11p-1, -0x1.16bee99870719p-2, -0x1.f51bd9fa1cf2ep-1, 0x1.97243be7bf084p-1, -0x1.b8eef0110c9fap-2, 0x1.2402bce395302p-3, 0x1.80595820660c9p-10, -0x1.fa47fa3f4b022p-6, 0x1.025a88022a414p-6, -0x1.3d712aaad7776p-9, -0x1.c5c0d04fc8743p-11, 0x1.c45b69075cdb6p-12, -0x1.6a1670435bfddp-15, -0x1.13c0d643a27dcp-17, 0x1.b2cff79438463p-20, -0x1.9ee90facd3d13p-25, -0x1.c87e1185ca55bp-29, 0x1.b076e96662045p-34, 0x1.71c42c5b1e647p-44, -0x1.e6d8e5785ac94p-52, 0x1.13fd176d0c255p-69, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.77fed2e016936p-3, 0x1.e1d10780fb061p-1, -0x1.9e9c7ce63835dp+1, 0x1.bc153af50c24cp+1, -0x1.240fe3f248861p+1, 0x1.80cee17390c18p+0, -0x1.abf5df7fd7acp-1, 0x1.50c7e71a108bbp-2, -0x1.4654ed4660724p-4, 0x1.091b1dd62c3e6p-6, -0x1.59c475f85d7f4p-7, 0x1.935e464b93aa4p-8, -0x1.8fe1513629012p-10, 0x1.90feb0894b435p-15, 0x1.09bd1f2d4e386p-15, -0x1.da6da6ad5e76cp-19, 0x1.a3886fa6d48c5p-21, 0x1.0f7850b94c92bp-26, -0x1.63226d50629cp-31, -0x1.84d7e34db15d3p-38, 0x1.75cc980993529p-48, -0x1.a7d23115de573p-65, -0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.60087b087d2efp-1, -0x1.1c49e2797e56dp+0, -0x1.f023b1706ef0ep+0, 0x1.8d30c07e51574p+2, -0x1.80e0de445b21ap+2, 0x1.c1feac4e70c18p+0, 0x1.3621ab0ea1b05p+1, -0x1.f3ab98611d47ap+1, 0x1.5e6794d526a25p+1, -0x1.c702eca93a33dp-1, -0x1.ee149aa686bb3p-4, 0x1.ffde0ca5fc1a1p-3, -0x1.a2cbb989ecd0ap-4, 0x1.d58bf4f6c76eap-7, 0x1.206affc103ba1p-9, -0x1.dfc88961f6b15p-11, 0x1.f86e53415f2ap-15, 0x1.28c920e4a3f6cp-18, -0x1.9c90e430666c9p-23, -0x1.7e8cf0898f333p-32, 0x1.cc8984cca607fp-39, -0x1.051a1f819156cp-54, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.efa01fe281c9p+0, -0x1.34df3dac7fcd4p+3, 0x1.5961138d5be95p+4, -0x1.014d7a672544ap+5, 0x1.5a4b6fa251ebp+5, -0x1.d72d9b409f2b2p+5, 0x1.1a6ca7d65632dp+6, -0x1.f8d9ef0a2890cp+5, 0x1.142ce1c1f06e2p+5, -0x1.90f390767ce47p+1, -0x1.822b1a96e2d92p+3, 0x1.52a34d125b1bep+3, -0x1.0b934a511e089p+2, 0x1.335fd67def29fp-1, 0x1.17c48a3b6f0b8p-3, -0x1.0033850ae8807p-4, 0x1.68d4635bbce68p-8, 0x1.b6ad0e03e206fp-12, -0x1.c361dbb11082cp-16, -0x1.d59d4ba004a56p-25, 0x1.f6c8c69c71b98p-31, -0x1.1d186572e3d31p-45, 0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.1672f76c48a3bp+2, -0x1.d05e83fe81472p+4, 0x1.49fc051fc99a8p+6, -0x1.e442104e65336p+6, 0x1.09c52f838d2fdp+6, 0x1.677b64cbf326ep+6, -0x1.fbf39786bea7bp+7, 0x1.628081b6fdd81p+8, -0x1.a2714ddd5c22bp+8, 0x1.cb4de777b4f36p+8, -0x1.9cacd3aee3a7ep+8, 0x1.055f4806a8346p+8, -0x1.8ddf94a470b87p+6, 0x1.95561c2d77ea8p+3, 0x1.8ab9cc38b4949p+2, -0x1.6e4f007cb3f6fp+1, 0x1.43d7023213a8p-2, 0x1.951cff21de4acp-6, -0x1.5137c147339bcp-9, -0x1.3e3df8b2da275p-18, 0x1.78040f51a9568p-23, -0x1.aa8cd8e6f8972p-37, 0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.6688e31cf50ep+2, -0x1.50ba2688bc043p+5, 0x1.18d5fc503a177p+7, -0x1.16422099d0e7p+8, 0x1.7cdc33f38c2d1p+8, -0x1.a2f3c3b8e6e4bp+8, 0x1.aa319d6af6ec9p+8, -0x1.958a02a102449p+8, 0x1.4bb5b15c50a64p+8, -0x1.caa9291eb011fp+7, 0x1.1f2d7abf22a73p+7, -0x1.3b920d0f7e0d1p+6, 0x1.bc14b21b62b93p+4, 0x1.8c237a0fa26d7p-1, -0x1.7f694c35d9d22p+2, 0x1.3f67e104a689cp+1, -0x1.4cc6c058f371dp-2, -0x1.6b557354b8d85p-6, 0x1.38d6e371bb052p-8, 0x1.260d95329ea8ep-17, -0x1.5c7911e0053bcp-21, 0x1.8b88d3fa551cp-34, 0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.80f665163dff6p+2, -0x1.7dd2228ef0449p+5, 0x1.48b0d88030936p+7, -0x1.41512ba753d05p+8, 0x1.8f56f07493efp+8, -0x1.675a39773b248p+8, 0x1.2e9626a21624ep+8, -0x1.1263590aebe89p+8, 0x1.9699942af2221p+7, -0x1.59e9b6e0b9c21p+6, 0x1.09d1a0b7c5832p+3, 0x1.cc8ab1005087cp+3, -0x1.93c8d50945095p+4, 0x1.013c24badc627p+5, -0x1.784654bbd7368p+4, 0x1.21acdd98ca7e4p+3, -0x1.6fa583815aba2p+0, -0x1.39156fe5f0a3bp-4, 0x1.34372727b2155p-5, 0x1.c53d49d197175p-15, -0x1.57bc52155abeap-17, 0x1.869c11b6398bcp-29, 0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.d573db31c98a6p+1, -0x1.ddfb9c5686a4fp+4, 0x1.a873c238f1ad9p+6, -0x1.b2204de17a53ap+7, 0x1.23910ebcbe60dp+8, -0x1.29c6cec686025p+8, 0x1.1c64b27b4c108p+8, -0x1.156985f5c8bcep+8, 0x1.ef2b60fc7ce31p+7, -0x1.84734ae811783p+7, 0x1.20e874beb6698p+7, -0x1.93d454c0120c5p+6, 0x1.e8c645d503448p+5, -0x1.0a8b2e2c06173p+5, 0x1.14ef6d11452bcp+4, -0x1.bab6f3f4dbb55p+2, 0x1.4e6aaf12e910ep+0, 0x1.e57ecc0ee730ep-4, -0x1.0f174cea8c306p-4, 0x1.a1f2dc12ec55dp-12, 0x1.4002914419fbbp-15, -0x1.6c7e600f14b1p-26, 0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.d2f4e044749b5p+0, -0x1.e196df480fe72p+3, 0x1.ab061d20276fp+5, -0x1.a7b259e6037ecp+6, 0x1.04d3977e22f61p+7, -0x1.c308c46a51aa1p+6, 0x1.759cb7054906p+6, -0x1.73a4db524ebc3p+6, 0x1.4d02e405c664p+6, -0x1.c4dfc682dd95ep+5, 0x1.217c835a844bfp+5, -0x1.9d3e5e5e09252p+4, 0x1.eced01c912f6cp+3, -0x1.ab15772777a66p+2, 0x1.780b7892927c5p+1, -0x1.59e4e79f9d385p+0, 0x1.04013ac7f90edp-2, 0x1.63e903ad632e8p-4, -0x1.26b339b06c46fp-5, 0x1.1fc083a0e2c36p-10, 0x1.9c18e59aa15abp-15, -0x1.d792baac952f3p-25, 0x0p+0}; - } - if constexpr (order == 10) { - return {0x0p+0, 0x1.19eec26520f72p-1, -0x1.249f95db3c6a8p+2, 0x1.0297dba66cdd3p+4, -0x1.f4e8dc0eb78aap+4, 0x1.1efd1b3c60e0bp+5, -0x1.a397a05a5f775p+4, 0x1.239464bf9e82cp+4, -0x1.3946d065739bfp+4, 0x1.2898316e66a7fp+4, -0x1.5bb8e2c464278p+3, 0x1.68255c99ba4c7p+2, -0x1.21aae7ae7df32p+2, 0x1.64fab317448fbp+1, -0x1.75b64c97e0968p-1, 0x1.22ff2ac4d8b9cp-3, -0x1.07ed621dcab47p-3, -0x1.4a01e6ee0860ep-6, 0x1.2e7cdbbc90031p-4, -0x1.b7f6865bae123p-6, 0x1.17b65cad3d541p-9, 0x1.910e0462410b6p-14, -0x1.cf434a44d45d4p-23, 0x0p+0}; - } - if constexpr (order == 11) { - return {0x0p+0, 0x1.a6c51bc471a31p-5, -0x1.b8315371d42a5p-2, 0x1.89e13c889a74dp+0, -0x1.8aa497719f071p+1, 0x1.eb2b7ee2bc88dp+1, -0x1.a91739cfcb437p+1, 0x1.4e87023b22be2p+1, -0x1.31bb74af8ae4ep+1, 0x1.0e1263d4463c8p+1, -0x1.9cd0db1b42b97p+0, 0x1.3cec213a53552p+0, -0x1.daf35f59b2442p-1, 0x1.329c321d7ff6bp-1, -0x1.8936ae8cb907cp-2, 0x1.00dee0f33922ap-2, -0x1.07bd180d95969p-3, 0x1.cec01fe9b05f6p-5, -0x1.e6ef9d5209f88p-6, 0x1.8f4f47250e3a5p-7, -0x1.e72d4f4950c8ap-10, -0x1.e19176d7ba691p-14, 0x1.1b79fa688c947p-21, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xd.d2b1b0ca6049ce2p-11L, 0x9.d7b9429d8c4819ap-5L, 0xe.d0a909a97a43f8ep-4L, -0xa.e37b3292056ef1ap-5L, 0xa.42051ad1f283b58p-6L, -0xc.ea7ee1a57276e59p-7L, 0x8.2154351b02c8eb6p-7L, -0x8.42aa5e8c5592b7bp-8L, 0xc.36482df7945344bp-10L, -0xc.3c2da01e437b7bbp-12L, 0xf.807e007e7137774p-15L, -0xa.1dbe70fd272d8b1p-18L, -0xe.d7d175b63fae5edp-21L, 0x9.6b3c60ba5ca6825p-21L, -0xf.82aa5c72b896837p-25L, -0xc.9a506f26d1499c5p-27L, -0x9.d2ecaf8c9477601p-32L, 0x8.706909c430c3afbp-36L, -0xb.29199d993b04f39p-44L, 0x8.173a603f30404d9p-50L, 0xd.d9ac67a56fa6d35p-63L, -0xf.b3f02784790a955p-82L, 0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0x9.ed50a30e867a4p-8L, 0xb.8b7ab5d60d88817p-4L, -0x8.b5f74cc3838cb01p-5L, -0xf.a8decfd0e796cf1p-4L, 0xc.b921df3df8422acp-4L, -0xd.c777808864fd26fp-5L, 0x9.2015e71ca980e98p-6L, 0xc.02cac1033064418p-13L, -0xf.d23fd1fa5810e5dp-9L, 0x8.12d440115209d8bp-9L, -0x9.eb895556bbbac58p-12L, -0xe.2e06827e43a1813p-14L, 0xe.22db483ae6db17p-15L, -0xb.50b3821adfeea95p-18L, -0x8.9e06b21d13ee1f3p-20L, 0xd.967fbca1c231ae8p-23L, -0xc.f7487d669e89999p-28L, -0xe.43f08c2e52ad9ddp-32L, 0xd.83b74b331022454p-37L, 0xb.8e2162d8f32359fp-47L, -0xf.36c72bc2d649c0fp-55L, 0x8.9fe8bb68612a695p-72L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xb.bff69700b49b018p-6L, 0xf.0e883c07d830881p-4L, -0xc.f4e3e731c1ae738p-2L, 0xd.e0a9d7a86125cacp-2L, -0x9.207f1f9244307c8p-2L, 0xc.06770b9c860beebp-3L, -0xd.5faefbfebd5fdcdp-4L, 0xa.863f38d0845d7acp-5L, -0xa.32a76a330391e66p-7L, 0x8.48d8eeb161f2f82p-9L, -0xa.ce23afc2ebf9f61p-10L, 0xc.9af2325c9d52281p-11L, -0xc.7f0a89b14808e6ap-13L, 0xc.87f5844a5a1a6fp-18L, 0x8.4de8f96a71c3322p-18L, -0xe.d36d356af3b5c2cp-22L, 0xd.1c437d36a462b4ap-24L, 0x8.7bc285ca6495b9cp-29L, -0xb.19136a8314dfe24p-34L, -0xc.26bf1a6d8ae9884p-41L, 0xb.ae64c04c9a9494fp-51L, -0xd.3e9188aef2b98edp-68L, -0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xb.0043d843e977a5cp-4L, -0x8.e24f13cbf2b6563p-3L, -0xf.811d8b837786d61p-3L, 0xc.698603f28aba1a9p-1L, -0xc.0706f222d90cfdfp-1L, 0xe.0ff56273860c0ebp-3L, 0x9.b10d58750d82957p-2L, -0xf.9d5cc308ea3d3cbp-2L, 0xa.f33ca6a935126f2p-2L, -0xe.38176549d19e5a8p-4L, -0xf.70a4d53435d97d5p-7L, 0xf.fef0652fe0d0a8dp-6L, -0xd.165dcc4f668505cp-7L, 0xe.ac5fa7b63b752dbp-10L, 0x9.0357fe081dd0544p-12L, -0xe.fe444b0fb58abf3p-14L, 0xf.c3729a0af95006dp-18L, 0x9.464907251fb5d88p-21L, -0xc.e487218333646a4p-26L, -0xb.f467844c7999b52p-35L, 0xe.644c2665303f8d2p-42L, -0x8.28d0fc0c8ab5d4ep-57L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xf.7d00ff140e483d9p-3L, -0x9.a6f9ed63fe69fc4p+0L, 0xa.cb089c6adf4abc4p+1L, -0x8.0a6bd3392a250e2p+2L, 0xa.d25b7d128f57c87p+2L, -0xe.b96cda04f958dddp+2L, 0x8.d3653eb2b19664fp+3L, -0xf.c6cf785144862cap+2L, 0x8.a1670e0f8370cfp+2L, -0xc.879c83b3e72381bp-2L, -0xc.1158d4b716c8e65p+0L, 0xa.951a6892d8df2a8p+0L, -0x8.5c9a5288f0446cfp-1L, 0x9.9afeb3ef794f7dcp-4L, 0x8.be2451db785c08ap-6L, -0x8.019c285744039edp-7L, 0xb.46a31adde7341a9p-11L, 0xd.b568701f1037966p-15L, -0xe.1b0edd888415d06p-19L, -0xe.acea5d00252b3f7p-28L, 0xf.b64634e38dcc13ap-34L, -0x8.e8c32b971e9855bp-48L, 0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0x8.b397bb62451d843p-1L, -0xe.82f41ff40a38e2ap+1L, 0xa.4fe028fe4cd412cp+3L, -0xf.22108273299ad98p+3L, 0x8.4e297c1c697e50ep+3L, 0xb.3bdb265f99372aep+3L, -0xf.df9cbc35f53d89cp+4L, 0xb.14040db7eec0855p+5L, -0xd.138a6eeae115b02p+5L, 0xe.5a6f3bbda79b16cp+5L, -0xc.e5669d771d3f14bp+5L, 0x8.2afa403541a338fp+5L, -0xc.6efca52385c3629p+3L, 0xc.aab0e16bbf53e59p+0L, 0xc.55ce61c5a4a452bp-1L, -0xb.727803e59fb7b2ap-2L, 0xa.1eb811909d4016fp-5L, 0xc.a8e7f90ef2563f2p-9L, -0xa.89be0a399cde158p-12L, -0x9.f1efc596d13a96ep-21L, 0xb.c0207a8d4ab3f5dp-26L, -0xd.5466c737c4b8e72p-40L, 0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xb.344718e7a8702b2p-1L, -0xa.85d13445e021855p+2L, 0x8.c6afe281d0bb969p+4L, -0x8.b21104ce8738061p+5L, 0xb.e6e19f9c6168b44p+5L, -0xd.179e1dc73725588p+5L, 0xd.518ceb57b764b3fp+5L, -0xc.ac50150812244abp+5L, 0xa.5dad8ae285323a8p+5L, -0xe.554948f5808f966p+4L, 0x8.f96bd5f915394b1p+4L, -0x9.dc90687bf0684d6p+3L, 0xd.e0a590db15c99a5p+1L, 0xc.611bd07d136ba02p-4L, -0xb.fb4a61aece9122bp-1L, 0x9.fb3f0825344de52p-2L, -0xa.663602c79b8e8ecp-5L, -0xb.5aab9aa5c6c2553p-9L, 0x9.c6b71b8dd828c64p-11L, 0x9.306ca994f547077p-20L, -0xa.e3c88f0029de0d1p-24L, 0xc.5c469fd2a8dfc22p-37L, 0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0xc.07b328b1effb03p-1L, -0xb.ee9114778224972p+2L, 0xa.4586c401849b3a9p+4L, -0xa.0a895d3a9e82ae4p+5L, 0xc.7ab783a49f782e2p+5L, -0xb.3ad1cbb9d9242edp+5L, 0x9.74b13510b126f8ep+5L, -0x8.931ac8575f4469p+5L, 0xc.b4cca1579110a15p+4L, -0xa.cf4db705ce10894p+3L, 0x8.4e8d05be2c19216p+0L, 0xe.64558802843df89p+0L, -0xc.9e46a84a284ab95p+1L, 0x8.09e125d6e31381bp+2L, -0xb.c232a5deb9b3ce5p+1L, 0x9.0d66ecc653f1d47p+0L, -0xb.7d2c1c0ad5d0d11p-3L, -0x9.c8ab7f2f851da2dp-7L, 0x9.a1b9393d90aa708p-8L, 0xe.29ea4e8cb8baa35p-18L, -0xa.bde290aad5f5239p-20L, 0xc.34e08db1cc5dff7p-32L, 0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0xe.ab9ed98e4c52c95p-2L, -0xe.efdce2b435277e9p+1L, 0xd.439e11c78d6c4d6p+3L, -0xd.91026f0bd29d199p+4L, 0x9.1c8875e5f3069d6p+5L, -0x9.4e367634301286p+5L, 0x8.e32593da6083e54p+5L, -0x8.ab4c2fae45e736fp+5L, 0xf.795b07e3e718ad3p+4L, -0xc.239a57408bc15f7p+4L, 0x9.0743a5f5b34bf5fp+4L, -0xc.9ea2a6009062863p+3L, 0xf.46322ea81a241fbp+2L, -0x8.5459716030b981p+2L, 0x8.a77b688a295dd83p+1L, -0xd.d5b79fa6ddaa942p-1L, 0xa.735578974886db3p-3L, 0xf.2bf66077398705p-7L, -0x8.78ba67546182ecp-7L, 0xd.0f96e09762ae4b7p-15L, 0xa.00148a20cfdd93dp-18L, -0xb.63f30078a588239p-29L, 0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0xe.97a70223a4da73dp-3L, -0xf.0cb6fa407f38df5p+0L, 0xd.5830e9013b783a8p+2L, -0xd.3d92cf301bf5fbep+3L, 0x8.269cbbf117b07a3p+4L, -0xe.184623528d5047ap+3L, 0xb.ace5b82a4830181p+3L, -0xb.9d26da9275e177fp+3L, 0xa.6817202e331ffc5p+3L, -0xe.26fe3416ecaefa6p+2L, 0x9.0be41ad4225f98dp+2L, -0xc.e9f2f2f049291ep+1L, 0xf.67680e4897b60bep+0L, -0xd.58abb93bbd32d48p-1L, 0xb.c05bc49493e294p-2L, -0xa.cf273cfce9c2447p-3L, 0x8.2009d63fc87650fp-5L, 0xb.1f481d6b1973f98p-7L, -0x9.3599cd8362377f9p-8L, 0x8.fe041d07161ad18p-13L, 0xc.e0c72cd50ad59f6p-18L, -0xe.bc95d564a979727p-28L, 0x0p+0L}; - } - if constexpr (order == 10) { - return {0x0p+0L, 0x8.cf76132907b923fp-4L, -0x9.24fcaed9e3542f7p-1L, 0x8.14bedd3366e9a26p+1L, -0xf.a746e075bc553f8p+1L, 0x8.f7e8d9e307059b7p+2L, -0xd.1cbd02d2fbba7a7p+1L, 0x9.1ca325fcf41627ep+1L, -0x9.ca36832b9cdf557p+1L, 0x9.44c18b73353f954p+1L, -0xa.ddc71623213c14ap+0L, 0xb.412ae4cdd263584p-1L, -0x9.0d573d73ef98e15p-1L, 0xb.27d598ba247d824p-2L, -0xb.adb264bf04b4353p-4L, 0x9.17f95626c5ce28p-6L, -0x8.3f6b10ee55a3b6fp-6L, -0xa.500f37704306c4bp-9L, 0x9.73e6dde48018975p-7L, -0xd.bfb432dd7091673p-9L, 0x8.bdb2e569eaa0703p-12L, 0xc.88702312085adcbp-17L, -0xe.7a1a5226a2ea342p-26L, 0x0p+0L}; - } - if constexpr (order == 11) { - return {0x0p+0L, 0xd.3628de238d184c6p-8L, -0xd.c18a9b8ea152a17p-5L, 0xc.4f09e444d3a6404p-3L, -0xc.5524bb8cf8387b7p-2L, 0xf.595bf715e446977p-2L, -0xd.48b9ce7e5a1ba57p-2L, 0xa.743811d915f0f83p-2L, -0x9.8ddba57c5726fd3p-2L, 0x8.70931ea231e404ep-2L, -0xc.e686d8da15cb65bp-3L, 0x9.e76109d29aa8d6cp-3L, -0xe.d79afacd9220eb9p-4L, 0x9.94e190ebffb5bb9p-4L, -0xc.49b57465c83ddabp-5L, 0x8.06f70799c914d0ap-5L, -0x8.3de8c06cacb4875p-6L, 0xe.7600ff4d82fb121p-8L, -0xf.377cea904fc3cf9p-9L, 0xc.7a7a392871d2799p-10L, -0xf.396a7a4a8644d53p-13L, -0xf.0c8bb6bdd348a37p-17L, 0x8.dbcfd34464a37e2p-24L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.ba5636194c0939c427c9ec59581bp-8Q, 0x1.3af72853b1890334601f92a1284ap-2Q, 0x1.da1521352f487f1b71f5ba208041p-1Q, -0x1.5c6f665240adde3380bdc0aea438p-2Q, 0x1.4840a35a3e5076b07b9bb98536cdp-3Q, -0x1.9d4fdc34ae4edcb2a06a461fd21ap-4Q, 0x1.042a86a360591d6b2ba9327c6214p-4Q, -0x1.08554bd18ab256f6f2efbe750de9p-5Q, 0x1.86c905bef28a68962be82a3bfae8p-7Q, -0x1.8785b403c86f6f7548c23ebef922p-9Q, 0x1.f00fc00fce26eee7a53c75fa9287p-12Q, -0x1.43b7ce1fa4e5b162d9e05ba1624fp-15Q, -0x1.dafa2eb6c7f5cbd9451ac8b8db32p-18Q, 0x1.2d678c174b94d04aa232fc24fe09p-18Q, -0x1.f0554b8e5712d06e0273c8cb503bp-22Q, -0x1.934a0de4da29338aed7c3945f15bp-24Q, -0x1.3a5d95f1928eec0223d4d93358b6p-29Q, 0x1.0e0d2138861875f5d48c437e1957p-33Q, -0x1.652333b327609e7169123d062941p-41Q, 0x1.02e74c07e60809b1acff78842ce2p-47Q, 0x1.bb358cf4adf4da69e5fa9c480499p-60Q, -0x1.f67e04f08f2152aabe6eb786996dp-79Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.3daa1461d0cf47fff25f3df963e7p-5Q, 0x1.716f56bac1b1102dab376b1a3fe7p-1Q, -0x1.16bee9987071960277d4321df078p-2Q, -0x1.f51bd9fa1cf2d9e12262aabd1401p-1Q, 0x1.97243be7bf08455883f653e158edp-1Q, -0x1.b8eef0110c9fa4de8e71d38444bcp-2Q, 0x1.2402bce395301d2ffcfa2c7a4938p-3Q, 0x1.80595820660c8830537a9f5a0e29p-10Q, -0x1.fa47fa3f4b021cbace01025dd941p-6Q, 0x1.025a88022a413b155a9680077b35p-6Q, -0x1.3d712aaad77758afb71e5644bf72p-9Q, -0x1.c5c0d04fc87430265835a2d868c3p-11Q, 0x1.c45b69075cdb62e0f0501d72eab3p-12Q, -0x1.6a1670435bfdd529f00d82c5e437p-15Q, -0x1.13c0d643a27dc3e64f7aa5ea1b1dp-17Q, 0x1.b2cff794384635cf6c5bd8331af5p-20Q, -0x1.9ee90facd3d1333133d7e205e062p-25Q, -0x1.c87e1185ca55b3b93aa74571695cp-29Q, 0x1.b076e966620448a8ccbae1de5619p-34Q, 0x1.71c42c5b1e646b3eaaa36a5a302fp-44Q, -0x1.e6d8e5785ac9381d9a7b90929674p-52Q, 0x1.13fd176d0c254d2994cc4f8bbae7p-69Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.77fed2e01693602fb84977597092p-3Q, 0x1.e1d10780fb06110288f8999dc16cp-1Q, -0x1.9e9c7ce63835ce70bd9f1949b4bp+1Q, 0x1.bc153af50c24b9575bdc1b7eea9p+1Q, -0x1.240fe3f248860f90966b383ce203p+1Q, 0x1.80cee17390c17dd6afdc8b5e9bd2p+0Q, -0x1.abf5df7fd7abfb9aaab015caa888p-1Q, 0x1.50c7e71a108baf578aa06cfc537p-2Q, -0x1.4654ed4660723ccc0f0acc159e52p-4Q, 0x1.091b1dd62c3e5f033d13bd90e92bp-6Q, -0x1.59c475f85d7f3ec16b121b44eccep-7Q, 0x1.935e464b93aa450281cf24f671a9p-8Q, -0x1.8fe1513629011cd322fa61848df6p-10Q, 0x1.90feb0894b434ddffdbc8185f2a5p-15Q, 0x1.09bd1f2d4e386644ae469eb863f8p-15Q, -0x1.da6da6ad5e76b858534775753bfcp-19Q, 0x1.a3886fa6d48c5693a0b3ec42e08ep-21Q, 0x1.0f7850b94c92b737f20b8005c4e4p-26Q, -0x1.63226d50629bfc487dd5a4e8ef38p-31Q, -0x1.84d7e34db15d3108fdfa03f5836dp-38Q, 0x1.75cc98099352929e39911fd43962p-48Q, -0x1.a7d23115de5731da90d3ce0c96c3p-65Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.60087b087d2ef4b82953952d9084p-1Q, -0x1.1c49e2797e56cac67a206b14e7b4p+0Q, -0x1.f023b1706ef0dac15d9852fec6b7p+0Q, 0x1.8d30c07e51574352c1f1eb2006b7p+2Q, -0x1.80e0de445b219fbdea6ef733a307p+2Q, 0x1.c1feac4e70c181d6b4fca6d1ffb9p+0Q, 0x1.3621ab0ea1b052aecf48cff7492ap+1Q, -0x1.f3ab98611d47a796d9c546361f74p+1Q, 0x1.5e6794d526a24de36780aeb9efa6p+1Q, -0x1.c702eca93a33cb508d7b1d00211fp-1Q, -0x1.ee149aa686bb2faa29ff6d4bcf1dp-4Q, 0x1.ffde0ca5fc1a1519c08ba08ef931p-3Q, -0x1.a2cbb989ecd0a0b85c48b0eeedfp-4Q, 0x1.d58bf4f6c76ea5b68a5554193d1p-7Q, 0x1.206affc103ba0a875625f4581693p-9Q, -0x1.dfc88961f6b157e54f77890bbc2ap-11Q, 0x1.f86e53415f2a00da542f82562b56p-15Q, 0x1.28c920e4a3f6bb0fc001a36c54d3p-18Q, -0x1.9c90e430666c8d48daf021826ab7p-23Q, -0x1.7e8cf0898f3336a3b6d1b959b3ebp-32Q, 0x1.cc8984cca607f1a4cd24395b33dcp-39Q, -0x1.051a1f819156ba9bc5cb80611a1ep-54Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.efa01fe281c907b167ef08b2a819p+0Q, -0x1.34df3dac7fcd3f885ed5b13d2111p+3Q, 0x1.5961138d5be957877d8cfd1f8beep+4Q, -0x1.014d7a672544a1c4d790253c77afp+5Q, 0x1.5a4b6fa251eaf90e3115b0c8a7d1p+5Q, -0x1.d72d9b409f2b1bb94911072e35d5p+5Q, 0x1.1a6ca7d65632cc9e3b88e527a77dp+6Q, -0x1.f8d9ef0a2890c5946bb98eca1feap+5Q, 0x1.142ce1c1f06e19e0c6f07b093cf5p+5Q, -0x1.90f390767ce4703536c74e99b357p+1Q, -0x1.822b1a96e2d91cc911472934db6dp+3Q, 0x1.52a34d125b1be5508a31d4593a7ep+3Q, -0x1.0b934a511e088d9de4577e6b9d58p+2Q, 0x1.335fd67def29efb717b66730db11p-1Q, 0x1.17c48a3b6f0b811400fc04e29772p-3Q, -0x1.0033850ae88073da0780e3e4b1ccp-4Q, 0x1.68d4635bbce683527c347878fb17p-8Q, 0x1.b6ad0e03e206f2cc34c3ad57b135p-12Q, -0x1.c361dbb11082ba0b86af7e7039cep-16Q, -0x1.d59d4ba004a567edb22672d12e01p-25Q, 0x1.f6c8c69c71b982736f46aec1c2fcp-31Q, -0x1.1d186572e3d30ab58425e9b0d124p-45Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.1672f76c48a3b085a419d3d84efep+2Q, -0x1.d05e83fe81471c548c37702884afp+4Q, 0x1.49fc051fc99a825862e53c41bd9dp+6Q, -0x1.e442104e65335b30f1932ff3fcdp+6Q, 0x1.09c52f838d2fca1c275b6ba1ca01p+6Q, 0x1.677b64cbf326e55bcfc76402e361p+6Q, -0x1.fbf39786bea7b138ef97d391fb5cp+7Q, 0x1.628081b6fdd810aa965a5c98d2cp+8Q, -0x1.a2714ddd5c22b603c83ee77be92bp+8Q, 0x1.cb4de777b4f362d79e6f05e8e906p+8Q, -0x1.9cacd3aee3a7e296cd71908c1c97p+8Q, 0x1.055f4806a834671e4070618a5f49p+8Q, -0x1.8ddf94a470b86c5104b74cbf3618p+6Q, 0x1.95561c2d77ea7cb1b418f1ad675dp+3Q, 0x1.8ab9cc38b4948a55522c2ec1bb2ep+2Q, -0x1.6e4f007cb3f6f6544bd7c8aa8418p+1Q, 0x1.43d7023213a802dd64335ed45bfdp-2Q, 0x1.951cff21de4ac7e4a1f0a692a613p-6Q, -0x1.5137c147339bc2af2a690f130f2cp-9Q, -0x1.3e3df8b2da2752dcb7f745d4f5a7p-18Q, 0x1.78040f51a9567ebaa0b6d793cafp-23Q, -0x1.aa8cd8e6f8971ce4ff33741ce32dp-37Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.6688e31cf50e0564efea7c707539p+2Q, -0x1.50ba2688bc0430a9ee7461099f42p+5Q, 0x1.18d5fc503a1772d2730b3ea50efdp+7Q, -0x1.16422099d0e700c2cc83b554b1d3p+8Q, 0x1.7cdc33f38c2d168782ab512e0152p+8Q, -0x1.a2f3c3b8e6e4ab101396a900d9eap+8Q, 0x1.aa319d6af6ec967e381e232c3d8cp+8Q, -0x1.958a02a1024489567edfcd9f60c3p+8Q, 0x1.4bb5b15c50a647500af490b1348fp+8Q, -0x1.caa9291eb011f2ccec525396312bp+7Q, 0x1.1f2d7abf22a7296277eac06229bap+7Q, -0x1.3b920d0f7e0d09abc1f29bae2433p+6Q, 0x1.bc14b21b62b9334a0ec0723419b6p+4Q, 0x1.8c237a0fa26d7404976151e77cdep-1Q, -0x1.7f694c35d9d2245677a758a1954ep+2Q, 0x1.3f67e104a689bca4d8d6dcd2113cp+1Q, -0x1.4cc6c058f371d1d7aadbd425ad1p-2Q, -0x1.6b557354b8d84aa675e72eefd888p-6Q, 0x1.38d6e371bb0518c7efdfa510e3cep-8Q, 0x1.260d95329ea8e0edce58683df434p-17Q, -0x1.5c7911e0053bc1a14fff7c706e19p-21Q, 0x1.8b88d3fa551bf844985173c27b89p-34Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.80f665163dff60603105460968d1p+2Q, -0x1.7dd2228ef04492e49ffcbc26de51p+5Q, 0x1.48b0d88030936751bd070f0b70d7p+7Q, -0x1.41512ba753d055c75dc8c75f4172p+8Q, 0x1.8f56f07493ef05c30063bd380daep+8Q, -0x1.675a39773b2485da34f83484320cp+8Q, 0x1.2e9626a21624df1cdd8e35d51165p+8Q, -0x1.1263590aebe88d200657c008c834p+8Q, 0x1.9699942af2221429cba47418cbf5p+7Q, -0x1.59e9b6e0b9c21128db1641974871p+6Q, 0x1.09d1a0b7c583242c5ad30248e848p+3Q, 0x1.cc8ab1005087bf119ad7a75bf51cp+3Q, -0x1.93c8d5094509572acb009457fd8ep+4Q, 0x1.013c24badc62703530bdc2a89abep+5Q, -0x1.784654bbd73679c9f2def5413da7p+4Q, 0x1.21acdd98ca7e3a8d97a584ca3cd3p+3Q, -0x1.6fa583815aba1a21d8ba9c3f6b87p+0Q, -0x1.39156fe5f0a3b45977f7c9849262p-4Q, 0x1.34372727b2154e0f63382ce7b14dp-5Q, 0x1.c53d49d19717546a3333946ded1p-15Q, -0x1.57bc52155abea4723bbb438d51fep-17Q, 0x1.869c11b6398bbfee9ec137b2aadp-29Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.d573db31c98a592a2b6a796753f8p+1Q, -0x1.ddfb9c5686a4efd2bd1e36073e0cp+4Q, 0x1.a873c238f1ad89ace04b7607dff2p+6Q, -0x1.b2204de17a53a3315364d57fc2b6p+7Q, 0x1.23910ebcbe60d3ac86902adcdaa4p+8Q, -0x1.29c6cec6860250c0db3c6f8b8962p+8Q, 0x1.1c64b27b4c107ca71ade24985867p+8Q, -0x1.156985f5c8bce6de73bf23e5601fp+8Q, 0x1.ef2b60fc7ce315a6b8de2d939461p+7Q, -0x1.84734ae811782beee80a7af9899ep+7Q, 0x1.20e874beb6697ebef627268d4461p+7Q, -0x1.93d454c0120c50c5e5f45ca0c342p+6Q, 0x1.e8c645d5034483f58d32c0b8709p+5Q, -0x1.0a8b2e2c06173020781b6687242cp+5Q, 0x1.14ef6d11452bbb05715fcae8f362p+4Q, -0x1.bab6f3f4dbb55284f9925c8a3ab9p+2Q, 0x1.4e6aaf12e910db6611cb145f554fp+0Q, 0x1.e57ecc0ee730e09fd58c293b9a01p-4Q, -0x1.0f174cea8c305d809bddd1a456bfp-4Q, 0x1.a1f2dc12ec55c96d12f54fd03177p-12Q, 0x1.4002914419fbb27ad65f422d91cep-15Q, -0x1.6c7e600f14b10472b7579cd8544fp-26Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.d2f4e044749b4e7a1c71b105042dp+0Q, -0x1.e196df480fe71bea5cbbf6f938ep+3Q, 0x1.ab061d20276f0750e2a72080d7a9p+5Q, -0x1.a7b259e6037ebf7c8e2adb89e41bp+6Q, 0x1.04d3977e22f60f45b515e3221088p+7Q, -0x1.c308c46a51aa08f31731ad9b7844p+6Q, 0x1.759cb70549060301bbf1ea932595p+6Q, -0x1.73a4db524ebc2efdc465e09da17dp+6Q, 0x1.4d02e405c663ff8abf63f28cd74p+6Q, -0x1.c4dfc682dd95df4b0a54f646c034p+5Q, 0x1.217c835a844bf319c913aad35977p+5Q, -0x1.9d3e5e5e092523c01057547d3214p+4Q, 0x1.eced01c912f6c17b1d536b46140dp+3Q, -0x1.ab15772777a65a90ae2d7ecf56cbp+2Q, 0x1.780b7892927c5280dd5bee9ee8edp+1Q, -0x1.59e4e79f9d38488dc3c59417b41ap+0Q, 0x1.04013ac7f90eca1ecf033aafa30cp-2Q, 0x1.63e903ad632e7f30307040928615p-4Q, -0x1.26b339b06c46eff13165e32f7c85p-5Q, 0x1.1fc083a0e2c35a300d5c6fbf948ep-10Q, 0x1.9c18e59aa15ab3ece464b6468819p-15Q, -0x1.d792baac952f2e4df120dee003e6p-25Q, 0x0p+0Q}; - } - if constexpr (order == 10) { - return {0x0p+0Q, 0x1.19eec26520f7247ef7c6a243923bp-1Q, -0x1.249f95db3c6a85ee06007305aedcp+2Q, 0x1.0297dba66cdd344c6014ab433b38p+4Q, -0x1.f4e8dc0eb78aa7eff1fa727c9c71p+4Q, 0x1.1efd1b3c60e0b36de4fe266b9d8ap+5Q, -0x1.a397a05a5f774f4ee2078a58f21cp+4Q, 0x1.239464bf9e82c4fc4fdd79af7e82p+4Q, -0x1.3946d065739beaad7a01650a25b9p+4Q, 0x1.2898316e66a7f2a70e1a6a12eca5p+4Q, -0x1.5bb8e2c4642782930886e32d2ea4p+3Q, 0x1.68255c99ba4c6b07d82156e3f9d9p+2Q, -0x1.21aae7ae7df31c29928804e58d84p+2Q, 0x1.64fab317448fb0474311942daf3fp+1Q, -0x1.75b64c97e09686a5bb55f9818d82p-1Q, 0x1.22ff2ac4d8b9c4ff1397fddfa477p-3Q, -0x1.07ed621dcab476dea8f9bcc8470ap-3Q, -0x1.4a01e6ee0860d89681b645bb0864p-6Q, 0x1.2e7cdbbc900312ead84b8d7e757cp-4Q, -0x1.b7f6865bae122ce58cd5b4105bcap-6Q, 0x1.17b65cad3d540e056708b80ca432p-9Q, 0x1.910e0462410b5b96ed51c4c46ef3p-14Q, -0x1.cf434a44d45d4684dfb9a827c309p-23Q, 0x0p+0Q}; - } - if constexpr (order == 11) { - return {0x0p+0Q, 0x1.a6c51bc471a3098c7c3ba4b2e396p-5Q, -0x1.b8315371d42a542d22b52e160edap-2Q, 0x1.89e13c889a74c808a95f3ae5db18p+0Q, -0x1.8aa497719f070f6dc765c7af4f82p+1Q, 0x1.eb2b7ee2bc88d2eef92b780b6136p+1Q, -0x1.a91739cfcb4374adc78a339981b3p+1Q, 0x1.4e87023b22be1f061884b91ff276p+1Q, -0x1.31bb74af8ae4dfa54f812e36b5bep+1Q, 0x1.0e1263d4463c809bd8442e6ab9d2p+1Q, -0x1.9cd0db1b42b96cb6927f614da713p+0Q, 0x1.3cec213a53551ad84004d758bdadp+0Q, -0x1.daf35f59b2441d717c1690c25188p-1Q, 0x1.329c321d7ff6b77198e76070d6c7p-1Q, -0x1.8936ae8cb907bb56ce7124a40ebp-2Q, 0x1.00dee0f339229a14bdfc063bfb91p-2Q, -0x1.07bd180d959690eaf41df5a4ee44p-3Q, 0x1.cec01fe9b05f624125be250b50a9p-5Q, -0x1.e6ef9d5209f879f2bf7a379cfa32p-6Q, 0x1.8f4f47250e3a4f324676c24519f5p-7Q, -0x1.e72d4f4950c89aa59da6edc504bdp-10Q, -0x1.e19176d7ba69146eb048e9181ac9p-14Q, 0x1.1b79fa688c946fc4993e527c8905p-21Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00674952336093794271822599377832733300651146336500105281821757702580261898435"), boost::lexical_cast("0.307583456142659816839156786245335727208310576612803762616887840930925575209"), boost::lexical_cast("0.925942456953309005940386530995126436012681380158402535652037264183889758483"), boost::lexical_cast("-0.340268706102660683375457588221232998838593649367854881779057620364907425914"), boost::lexical_cast("0.160279537383566356658810338492196248229219596027949666407555183251410683353"), boost::lexical_cast("-0.100906238726469613031927683469694828929687407601613980745393598371134911780"), boost::lexical_cast("0.0635171183876279943173554673370722041156121244338995400601119969400460909180"), boost::lexical_cast("-0.0322672348814505948972500008092114355665944734834499482855568997884208147214"), boost::lexical_cast("0.0119258192115874852729361214670894284737320324933075482785998337722648377488"), boost::lexical_cast("-0.00298707792707452898367085553746573188496510147112607446979462542972907046198"), boost::lexical_cast("0.000473081135158127015860372446974828573937912728115760868405824469327509104714"), boost::lexical_cast("-0.0000385901914771418563229090512720344539916565749843499561465030991408855304182"), boost::lexical_cast("-0.00000707771294264344979265706380621665838995140738494138127767693643047473151938"), boost::lexical_cast("0.00000449127676142712270206334163110940969109789276623971797893643048336659640461"), boost::lexical_cast("-0.000000462246298923448308370189842110923874064368375158153708369750363490273849968"), boost::lexical_cast("-0.0000000938981013616806301299448140440205677496034062712612222476591887975663431153"), boost::lexical_cast("-0.00000000228731055691905904721631337725631066731945798378875548099322801540390353792"), boost::lexical_cast("0.000000000122805107893837304401775672037887127425598683650631632643112458670137760454"), boost::lexical_cast("-0.000000000000634403654278944400941924520388860558080403502147439478702947659558312462441"), boost::lexical_cast("0.00000000000000718601577933574214479296340908692396681088130844931493227840962495346368987"), boost::lexical_cast("0.00000000000000000150165111893706003972718474555253050830994970128831551959442684938639721914"), boost::lexical_cast("-0.00000000000000000000000324728013911670481356185860811593862377837926387577826017803860651455895063"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0387773893440001328479990972130631692265393392276997953903865925128067141024"), boost::lexical_cast("0.721552572534024717748570063882033395155483583566407967882626836656429636782"), boost::lexical_cast("-0.272212648324158111612511789206460700674191556065031727190617093210427966623"), boost::lexical_cast("-0.978728114873296652638727035042942428237594510811351020620221815511037142320"), boost::lexical_cast("0.795198318518956652102305679705853563026415740789264534365825373566593070233"), boost::lexical_cast("-0.430598975220305785445999132638246196763260311865173495540662078177969568735"), boost::lexical_cast("0.142583347029948066092993254964771828684926120817867402181283862012299624787"), boost::lexical_cast("0.00146617508298700811859640317636078157631882791634139195335692402607076083994"), boost::lexical_cast("-0.0309009498425184610096113389760986103366023818447589327535142129940010076705"), boost::lexical_cast("0.0157686546523657228788031242284047791698300666554508584962947405558611056219"), boost::lexical_cast("-0.00242189069596937080496858729150225100112203583636152350242227674378819932850"), boost::lexical_cast("-0.000865465504805686451786867765475930422411519327219197611864322484446933101993"), boost::lexical_cast("0.000431401320802406335612460169440586915965773678151860581031150029061360265549"), boost::lexical_cast("-0.0000431642115711336908332394044162700208606587787562050592203268643657811936924"), boost::lexical_cast("-0.00000821808783448349005091749141022578622146590089593391035863483128421998476881"), boost::lexical_cast("0.00000161980230922061292865855432080723373115493373219912556484058486745620714179"), boost::lexical_cast("-0.0000000483019272136912181673157244957934770912195515285570255684870776439319393894"), boost::lexical_cast("-0.00000000332141975285733899509799336405046588503487344884194087554458021104822328255"), boost::lexical_cast("0.0000000000983310426136874022596843421343020282473719270746503069720570388756166209575"), boost::lexical_cast("0.0000000000000821046124017272115015180345888003894425103661180504475350314828549798634201"), boost::lexical_cast("-0.000000000000000422272678140744917094064065340806009116153886552991342868695393427346681857"), boost::lexical_cast("0.00000000000000000000182633960975279599217132126825168232459508047673969824620606842686892878014"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.183591506446484309712795488849571274418364537569049882649969406786991566703"), boost::lexical_cast("0.941047892088601518958291499087971794201051709610594834344832432863937253481"), boost::lexical_cast("-3.23915063134374610177549908438346173797911023760267160983136498244943289731"), boost::lexical_cast("3.46939789738852314818899400606908382011384059438420298035329651589159205087"), boost::lexical_cast("-2.28173493700255435214772096048237572437923445360570917382808581102768910125"), boost::lexical_cast("1.50315674849912814024262183106436302156615435178890932358182035213351917617"), boost::lexical_cast("-0.835860237460870761390156685965058693698796219956190288728965409249874516389"), boost::lexical_cast("0.328887568441256381505801657142525299671290097708556863386573335636703368303"), boost::lexical_cast("-0.0796708363104952604879937077745989748584956873438833081361877117810017197093"), boost::lexical_cast("0.0161807814953966106554332142048099058586667875986593188231761928160044535103"), boost::lexical_cast("-0.0105519844080212767161949305951351809551205888170657290798324464298016783059"), boost::lexical_cast("0.00615491119567815699833303054263633346002498173776612335382778423057115661320"), boost::lexical_cast("-0.00152542169738812236275366430470857831307147305605930001884982398335206187746"), boost::lexical_cast("0.0000478023149049562031406199523580878829069008124571083991909044064992027938837"), boost::lexical_cast("0.0000316785284248449847258104755742578560748429902748877549315826250898391153165"), boost::lexical_cast("-0.00000353476646946804208268171454249821202212174971459821936484698256572687164013"), boost::lexical_cast("0.000000781441021094927012007376595229335452531962058185139941865056284143318220825"), boost::lexical_cast("0.0000000158016326457618764551834550084612976065250040667862420828605844454348687428"), boost::lexical_cast("-0.000000000645985856862059637165608932066447500409737957145914496500299017194796733184"), boost::lexical_cast("-0.00000000000552579581560011400180824517243503538265777971769292220658774318761637323198"), boost::lexical_cast("0.00000000000000518750590964679052304303794785902282315144982464294500494857713908195654535"), boost::lexical_cast("-0.0000000000000000000448738003521685102283394837866669813173686476421773647750785777214873187545"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.687564701830153090496154601673244324665424792477734591515424354722524099152"), boost::lexical_cast("-1.11050239053869430027184090551059176229770565635462126988333316421136630257"), boost::lexical_cast("-1.93804463381724493769207024757917870971550445481996014592183410296094056051"), boost::lexical_cast("6.20610058150974826647727021504587596509253169984522564051121763364081781688"), boost::lexical_cast("-6.01372486758602951783294736130451247536207984026936617147556597467502065146"), boost::lexical_cast("1.75779225268411745440182343883946325363307126912452705923359087032746232261"), boost::lexical_cast("2.42290247168000634999802692912700654401659291644918891841812220270431988663"), boost::lexical_cast("-3.90367417089379141718231735172375182130729195288100071937663900099707066494"), boost::lexical_cast("2.73753605277785755057468262545518793812656205923506367770591971382787612864"), boost::lexical_cast("-0.888694186837802736174804686545601676095716084997773896570154037914318457788"), boost::lexical_cast("-0.120625118354310597854672205082409827213145048325433221107814663185540763499"), boost::lexical_cast("0.249935244384244229475998157073285972261843545061283350728568950695406300807"), boost::lexical_cast("-0.102245068322009442021851053260660268979014010537069811214828519334188485107"), boost::lexical_cast("0.0143294283021151060785346153371703965226713038712447807825810853955454985909"), boost::lexical_cast("0.00220045444485302028275444219293273448787231072694521760298002658782637616979"), boost::lexical_cast("-0.000915114109598521684422240708952522787741064024256659542685847796787098864471"), boost::lexical_cast("0.0000601328561158122075623159592639344585246740920247215146685740357533130502579"), boost::lexical_cast("0.00000442245093225367075171042726134823952641438570521711248051460748670218278934"), boost::lexical_cast("-0.000000192116006225709175804133650291101682367016689175710099736613621136724772233"), boost::lexical_cast("-0.000000000347927694118473204634336179637016248843344378650467345924085824175805403758"), boost::lexical_cast("0.00000000000327231349649651474450860748750987614694465218515883129352235985103556742393"), boost::lexical_cast("-0.0000000000000000566174805053915554844952341333463723778572903642256009402911739536460840202"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.93603705673175252162377048005080828323485510199286167343778412900683630357"), boost::lexical_cast("-9.65225108805899617933044689930629862606922722189344796627981892221806322756"), boost::lexical_cast("21.58620028704043203965568014489070671164252883102441474199007795986172799450"), boost::lexical_cast("-32.16283112127764887984781311792208840193362133426782486134064927600419439680"), boost::lexical_cast("43.28683401882642247901443678261444427228477284299009228485788317422296188030"), boost::lexical_cast("-58.89726877675765402909531534108742114308361932607118347118552732380096882110"), boost::lexical_cast("70.60610899830926411810587962905898518983841308375904913755422678352922515570"), boost::lexical_cast("-63.10641296325966002268292888588592628930166199721781262159830072450491171720"), boost::lexical_cast("34.52191497340187437272066528301740399000435097032593635597215974196048894900"), boost::lexical_cast("-3.13243299279728005268439173331599785511338054577595843510586618380676315959"), boost::lexical_cast("-12.06776170225092279346900025349356398262454275196967160026720095858830643800"), boost::lexical_cast("10.58243421158919931486338350084744671448957975219955115739863127269480650610"), boost::lexical_cast("-4.18086488648999297183891759837512319517601794026273877877208860579097625582"), boost::lexical_cast("0.600340559838134056014385774162185206812240239620564149846506062110388511249"), boost::lexical_cast("0.136605338991903970318857223904627046152412648176017176159147490879517687577"), boost::lexical_cast("-0.0625491330124817618386886003919664398460060491417974176815677679696581035123"), boost::lexical_cast("0.00550582338086123158873116800515458266240754229253267111261799485380454805945"), boost::lexical_cast("0.000418354029755102972365185158832406860086075763566175597817465795414186469647"), boost::lexical_cast("-0.0000269044791745347379635890876857658847394460147615410319076105357130452956021"), boost::lexical_cast("-0.0000000546703156080335157447390001850562112157399818528369118783700921788207959856"), boost::lexical_cast("0.000000000914559278617230197902988750581388857118162901722874330587746501390541480138"), boost::lexical_cast("-0.0000000000000316519364036060085112704740081169075698795498871539132664715584413313149738"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.35076699804863678677975429556027903354422790699226157645072577251818273676"), boost::lexical_cast("-29.02307509819042426585700918686326160072354736867411698539343692983196503080"), boost::lexical_cast("82.49611329715719629374872640906345290805764600780220272968616846701709806240"), boost::lexical_cast("-121.06451532833747392386859794636510608764397274079815027628644009969274065900"), boost::lexical_cast("66.44256406354174703030638747248670204230247493582940326331823060083408390470"), boost::lexical_cast("89.87050169631559036410735425620807796485093895246621283952389526730602524440"), boost::lexical_cast("-253.97576542928058746612034494797807584834351582667944315344135960784812946200"), boost::lexical_cast("354.50197929093707453189915787851278530317676402818444334154635759143504945200"), boost::lexical_cast("-418.44259437083629654372265774871306291337038882950576397483748815661296325300"), boost::lexical_cast("459.30431316535703999996533810953606750433852009745459279981845049292111412100"), boost::lexical_cast("-412.67510502870562514868993537829892602977991674444809590835277417435828403200"), boost::lexical_cast("261.37219277960357686002183516875187598846311513198317551376196154507578273300"), boost::lexical_cast("-99.46834046304693927396397394893633319797299579647467410477722973021902030540"), boost::lexical_cast("12.66676148300696488281972471730213802977983006010030132112775191282004845920"), boost::lexical_cast("6.16759019410739796803106483846236267155563560221580308118480616704388032488"), boost::lexical_cast("-2.86178594674122850153536653793135766872481629722817248177002057968004742610"), boost::lexical_cast("0.316249880129284132115920875971521368522150973034344085606632817974345846565"), boost::lexical_cast("0.0247261516119336322479197612328703090652313932265109203114345439280129606257"), boost::lexical_cast("-0.00257276758529842275783708309373614341047704871305149895482328025045858909260"), boost::lexical_cast("-0.00000474217647448341719828623182459779084961108353234750865989641444296059914091"), boost::lexical_cast("0.000000175096028833295782031678343625079307038593522030930622175736643377626514407"), boost::lexical_cast("-0.0000000000121232854060447503547926609753618642777727719448048997021870449891245778235"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.60210492923599220306739726849524365911272995023030149275362729443627767241"), boost::lexical_cast("-42.09089381049900454092361924595905199878007886101579238359551872779773615180"), boost::lexical_cast("140.41794062337041783562329118755195628284508671409730808010312709127392837500"), boost::lexical_cast("-278.25830994939952049425764143319165780543667702177067080512763370773979265600"), boost::lexical_cast("380.86016771480816533332928441348450481125889613649326541505558838372953629000"), boost::lexical_cast("-418.95220523488084674141481769302959290485836739389011115886709000649475649100"), boost::lexical_cast("426.19380825546667243857182155918014103510325386970185000695176160112816290200"), boost::lexical_cast("-405.53910261445392868706053637913300495637853779363319766514135762481123453200"), boost::lexical_cast("331.70973755806906280222948564333114303709973974217107892064712971483217388700"), boost::lexical_cast("-229.33039184474271152765997296747693653644896311902985970449951777370036797400"), boost::lexical_cast("143.58882710741052581341088543723084000514106642516308650843963725396056822300"), boost::lexical_cast("-78.89262794691900075510218647088275987362866657725786329632823854347189893030"), boost::lexical_cast("27.75505266854777348435048128311171422045966573330871472192405309949017306920"), boost::lexical_cast("0.773708166512018375007390099318270025246521769336781853387329991690258896716"), boost::lexical_cast("-5.99080186137078587115052777435201929542834691356814368299406374154030652526"), boost::lexical_cast("2.49535763480259999546977692911560881994873486413261121783762393577404777245"), boost::lexical_cast("-0.324976926259170024466514821976486541713103347782139429815301297092702931869"), boost::lexical_cast("-0.0221761347082867372516860357201809209573177307919227810107850272426097081037"), boost::lexical_cast("0.00477355053747537251275230025941686821306294456709786754720729109346187074810"), boost::lexical_cast("0.00000876346402844021878197271431695817559174109670993605807770140477893316270959"), boost::lexical_cast("-0.000000649081410844014945450377643724451703185492681208039429612859077055126594639"), boost::lexical_cast("0.0000000000899341295111001783061788354774120539335760947137727039371354507713388157031"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("6.01503874942863172446672032045385310660658346430556969311090280204002893574"), boost::lexical_cast("-47.72760497732867563639045888687408111648670461954967176817630689615594571920"), boost::lexical_cast("164.34540176957098246520164840268114912785108333764805325670104505015878591400"), boost::lexical_cast("-321.31707235141978805890085173651076956857219432352414927630174955007268214000"), boost::lexical_cast("399.33960655795728826591320240810290804342839867119935493449864048725021503700"), boost::lexical_cast("-359.35243935769951609547501622393948495038359128149158218493239094084479572300"), boost::lexical_cast("302.58652699509263723866918658763896223023494881995643828072737018416182521000"), boost::lexical_cast("-274.38807743319971566043869533026106988492438939463128607709797721020443215100"), boost::lexical_cast("203.29995855527617039240266616022588964442318448807463904291472490500587668800"), boost::lexical_cast("-86.47823668607499417468265201809837107760314991031737704773103407132324816810"), boost::lexical_cast("8.30683933155896571923336370342680329284352699673810942748030941466774153040"), boost::lexical_cast("14.39193010388793670592743695120274923548898641004312440323358299497206491280"), boost::lexical_cast("-25.23653129216162031393190650488947069144769574727062315317496697755106409830"), boost::lexical_cast("32.15436693177280611867229541693914656357710375952844770094246636458373021770"), boost::lexical_cast("-23.51717065215362229865507044104445167369445267308462930568665799256423840570"), boost::lexical_cast("9.05235175935735664788319630251805269364581033096340273166670658279003426872"), boost::lexical_cast("-1.43611928852144679808218829087774768973983520937512890405722409904760001331"), boost::lexical_cast("-0.0764364596389350180439110342110306497850920144422968183705432261288688167041"), boost::lexical_cast("0.0376239552256857684356168042424620283930027011606313367853621428915639193111"), boost::lexical_cast("0.0000540303477804840762648923255410865058939043280088368514023926300961486967782"), boost::lexical_cast("-0.0000102441199866988900731723735456649881175505194362439761979226773134926915151"), boost::lexical_cast("0.00000000284205922260922568932250591462669984026040113459253556541826475617240410416"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.66759815150278959307930599333163597096097529742853199217978181562630696487"), boost::lexical_cast("-29.87392839240265725546623883959127802560925486188325916048865579469303024630"), boost::lexical_cast("106.11304558730206231169420989915879780867394552444174433037983757043874961100"), boost::lexical_cast("-217.06309418314214666288595563832635346239588058289858882887597087103632217200"), boost::lexical_cast("291.56663112304597857590334364976771943737359513217961682974016748268384769300"), boost::lexical_cast("-297.77659264346795265988020082120368913354431735040919787932537200810228046400"), boost::lexical_cast("284.39334841353455606151257223937124519201920224538084896597007768405172110500"), boost::lexical_cast("-277.41220031882121641670001674749778842464959328498538149541517303833838711500"), boost::lexical_cast("247.58472432159900771477076380876163976925347752971933279268071613868274753900"), boost::lexical_cast("-194.22518086636781463956709313343541688316198595925041840328872392823935647700"), boost::lexical_cast("144.45401569344244085247818472795589947662462099880946347817047437422725404900"), boost::lexical_cast("-100.95735454664379984016882278587502046931372757809433648524452327992007684600"), boost::lexical_cast("61.09681288162443200526120017869481568171612243827222222068632320726899857500"), boost::lexical_cast("-33.31795915978991479226353783917641730723993856565006267406505994034763561210"), boost::lexical_cast("17.30845362421199129993292294948350854310287513028370737357127567143752171420"), boost::lexical_cast("-6.91741656219422399006952830174054308724719397866962278438510860750311408940"), boost::lexical_cast("1.30631536685638443282971027232061480593991545082436137033699622406166968595"), boost::lexical_cast("0.118529126264956569656056269771626755793811242386616315248341528538090571096"), boost::lexical_cast("-0.0661843304194570081752469739423793402949926380986891972951348623664335067648"), boost::lexical_cast("0.000398586912690642748373175830858033776325071495068959972844940429117973233494"), boost::lexical_cast("0.0000381481682161783683986425780978390997526951366596105346738987927781141638894"), boost::lexical_cast("-0.0000000212163229730584007262375731808777339564186173310877882056921511132532981858"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.82404901191021660107611405457755744720508147280838668944561685140253424274"), boost::lexical_cast("-15.04966701578743791983566870544026493163762629417625697617466370992453373950"), boost::lexical_cast("53.37798524017660253980042023139266987459040956232067348967572826444722400500"), boost::lexical_cast("-105.92417106052715735002349944451589608377479192425044614348746722708067035900"), boost::lexical_cast("130.41326517273685551908783147004280111867640298350958460298534492271024128600"), boost::lexical_cast("-112.75856176494063105548507692533259561359149505796793856695544860362794488700"), boost::lexical_cast("93.40304191835594150352589694310821255241952082139322576408183818507525504810"), boost::lexical_cast("-92.91099289517937530938067160839545056753425221872875127682184392703877307920"), boost::lexical_cast("83.25282296203022229084823461764842101991248796776481529458179231322413184940"), boost::lexical_cast("-56.60926534880375950692439436083700078084789164896951269302972237793898650350"), boost::lexical_cast("36.18579741207349225217113136176821974406219093273833973652666883038907214880"), boost::lexical_cast("-25.82772671444610862462306541969742751815537984691055996627268281393630328240"), boost::lexical_cast("15.40393151542931365681934641697554669810260411956534200123239544102606890360"), boost::lexical_cast("-6.67318514684902700324396712833889530416584439958498307300658341368976434355"), boost::lexical_cast("2.93785006672712485651870672930552135674962040419489700124033209653118603360"), boost::lexical_cast("-1.35114905974225608322981232543443993841639703478986459747319143071556838636"), boost::lexical_cast("0.253910940604568570873136388508332898207860540665090852083889016211691603112"), boost::lexical_cast("0.0868921416897127089804662233761880201802165848173331041475381130845773690378"), boost::lexical_cast("-0.0359741331807378258738142078527195789630247593913553671912092170295325403548"), boost::lexical_cast("0.00109768679996836757242664134813447276225315118775952708555290702903991203965"), boost::lexical_cast("0.0000491258208131049675088973621242027668877049383351261231455773092411325252306"), boost::lexical_cast("-0.0000000548983412936212498495690390885488330611341145287970297974581737627796036856"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 10) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.550649714321919146020391652705270850624984467632444477892208411090670503460"), boost::lexical_cast("-4.57224031839147248722382996328027080443894364680263533387085228867737306467"), boost::lexical_cast("16.16207470903266336622407533376180083841264103186821602341901646085415441920"), boost::lexical_cast("-31.30685048817455572162905452355438357246801343486549641376884657698487166490"), boost::lexical_cast("35.87358710451743501103090247260098261068172630229012387217368794457391845240"), boost::lexical_cast("-26.22451815893096578505537492191089420871702814982563223312943309074511861080"), boost::lexical_cast("18.22372889376872362134777045706885197255097592668156061200711581268831340790"), boost::lexical_cast("-19.57978858594446573474343717866513610480907608812601678912962077898856742910"), boost::lexical_cast("18.53715651631727882099530623547490387621972342657149537210734087006118103230"), boost::lexical_cast("-10.86631906850492186026855947795210696729727028226200184897211758632056293120"), boost::lexical_cast("5.62728037846063128438976106546508945987259369732013042706443820658486730438"), boost::lexical_cast("-4.52605621376260259593982907405174555293727464118730144996047399577463796319"), boost::lexical_cast("2.78890074382900144618255657410026967999905288228433605937465464511446641771"), boost::lexical_cast("-0.729906457462033355139337021126261461176772010479428021961867397970803230476"), boost::lexical_cast("0.142088255054741883006545627449011553786767246338704050666922604912111664368"), boost::lexical_cast("-0.128870741399931027764146528868524281495256321870369794112882474231057823379"), boost::lexical_cast("-0.0201420550512292820836440674996269788542898415412561416178222180575252813086"), boost::lexical_cast("0.0738495429477559359501157209854724157351709061729224786516577653892388373974"), boost::lexical_cast("-0.0268532096949637519510499296268755420094167792885280535232350328010652171480"), boost::lexical_cast("0.00213403588588315134257033560239887601573172007420308747358527142593502213305"), boost::lexical_cast("0.0000956189046839608573100519969536118832653435986603979875808632067612204306782"), boost::lexical_cast("-0.000000215723576025549042840675180271579291754584130778771057415350031447174455663"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 11) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0516076605159024911828475147837820854392015861025284155408704376160614689184"), boost::lexical_cast("-0.429875663588101212310123466761246228949954693513674780077411570894231140593"), boost::lexical_cast("1.53859308562319363525064968437125695806116775999527119873257232627957881183"), boost::lexical_cast("-3.08314793632421711513446659317655276412171796583863723768853134524872575829"), boost::lexical_cast("3.83726488181225153055424552179561105009983872787369445162123171315532794535"), boost::lexical_cast("-3.32102129598800001827402190941442844711537496612480829720954545917202711427"), boost::lexical_cast("2.61349513900266658472136887684620241910754262198058846835967186330136663863"), boost::lexical_cast("-2.38853319713033495202260098319806213683185517673058274190000445657860915347"), boost::lexical_cast("2.10993621697386759008454349852482017386377263965160538055677721963192891999"), boost::lexical_cast("-1.61256188788931860024729141933908754524860783254583010122183874119617986655"), boost::lexical_cast("1.23797805475199533327033756060882156229697699608086470174399374479195617901"), boost::lexical_cast("-0.927638034533750248678688510655383608919790412752058469862157655885568742788"), boost::lexical_cast("0.598847929097229887988452897323944295134119484352549354946451834874406807448"), boost::lexical_cast("-0.383997657145535004546586640993163439996459447874095195026713580064418880820"), boost::lexical_cast("0.250850214810528805990052825784903155854458963606740947659194110817761051247"), boost::lexical_cast("-0.128778636850891888203699386683982406407371540708648125836387080670890476774"), boost::lexical_cast("0.0564880965516855608539804536808433961937777036332691539099534383291528671575"), boost::lexical_cast("-0.0297202144940054411503976781292207507569011942232371230104009758591434089695"), boost::lexical_cast("0.0121859643351046128923156738600080443388598031417307165875316044362239226179"), boost::lexical_cast("-0.00185843273568833887463557296801124598677123828961682233747031997277499314044"), boost::lexical_cast("-0.000114814810668351667156857713897954085126369615497231973190312538067210861730"), boost::lexical_cast("0.000000528016085138320874511452843388030214551797843336485403204846872234194616278"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 13) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.749078p-9f, 0x1.8ae6a8p-3f, 0x1.d0088ap-1f, -0x1.20e16ep-4f, -0x1.f688bep-5f, 0x1.2fca44p-5f, -0x1.505c64p-12f, -0x1.014518p-6f, 0x1.c908bep-7f, -0x1.beac12p-8f, 0x1.0006aap-9f, -0x1.d4cc28p-13f, -0x1.a08b66p-15f, 0x1.5f413ap-16f, -0x1.5c34d2p-20f, -0x1.2dc446p-21f, 0x1.74f33ap-24f, 0x1.ddb5ep-29f, -0x1.07969cp-32f, 0x1.2c5958p-38f, 0x1.52fae6p-45f, -0x1.d83da4p-53f, 0x1.1342e6p-65f, 0x1.aa25eep-86f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.239236p-6f, 0x1.0c0768p-1f, 0x1.3373bep-2f, -0x1.856d7ep+0f, 0x1.22d30ap+0f, -0x1.72e38ep-1f, 0x1.8e439cp-2f, -0x1.3bc252p-3f, 0x1.1bc8f6p-5f, 0x1.288446p-11f, -0x1.db22aap-10f, -0x1.3482dcp-11f, 0x1.328522p-11f, -0x1.bbf1c4p-14f, -0x1.17497ap-16f, 0x1.bebecp-18f, -0x1.bc40d8p-22f, 0x1.6454c6p-26f, 0x1.5fce04p-29f, -0x1.12414ap-33f, -0x1.ce70acp-41f, 0x1.8616f6p-48f, -0x1.7b38aep-60f, -0x1.258ba4p-79f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.7e9e9ap-4f, 0x1.e81e74p-1f, -0x1.368292p+1f, 0x1.a1c192p+0f, -0x1.58e6fap-2f, 0x1.2f821p-2f, -0x1.f8fd9cp-2f, 0x1.017de8p-1f, -0x1.5831aep-2f, 0x1.30d718p-3f, -0x1.30a608p-5f, -0x1.632f9ep-11f, 0x1.1cbed4p-8f, -0x1.77d87p-10f, 0x1.50ec24p-14f, 0x1.f99c3cp-15f, -0x1.8453f2p-17f, -0x1.b40566p-23f, 0x1.4c2776p-24f, -0x1.287dbp-29f, -0x1.b00a66p-36f, 0x1.401eb2p-42f, -0x1.715282p-54f, -0x1.1de108p-72f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.95e034p-2f, 0x1.e7908ep-3f, -0x1.29379ap+2f, 0x1.36cc46p+3f, -0x1.433598p+3f, 0x1.9c4d14p+2f, -0x1.ef81d8p+0f, -0x1.2378e8p+0f, 0x1.c6e272p+0f, -0x1.c857e6p-1f, 0x1.3531bp-8f, 0x1.05f57cp-2f, -0x1.38a2dcp-3f, 0x1.35c4a6p-5f, -0x1.fddc3cp-14f, -0x1.2653ap-9f, 0x1.ec5d7p-12f, -0x1.dc01f8p-17f, -0x1.379718p-18f, 0x1.7e5cfep-23f, 0x1.a12416p-29f, -0x1.417132p-35f, 0x1.65f402p-46f, 0x1.15123cp-63f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.4c5d52p+0f, -0x1.5d2572p+2f, 0x1.24b0fp+3f, -0x1.39e0f8p+3f, 0x1.f006ccp+3f, -0x1.0ce3p+5f, 0x1.b8b8bp+5f, -0x1.e69256p+5f, 0x1.503102p+5f, -0x1.6d86aep+3f, -0x1.35b5dcp+3f, 0x1.a6237cp+3f, -0x1.cda456p+2f, 0x1.d5a02cp+0f, 0x1.ecd4c4p-5f, -0x1.660ee6p-3f, 0x1.5158e6p-5f, -0x1.73814cp-10f, -0x1.23460cp-11f, 0x1.fa353cp-16f, 0x1.19c574p-21f, -0x1.4bb43p-27f, 0x1.fc9a2p-38f, 0x1.89a8b8p-54f, 0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.a35158p+1f, -0x1.5a1bc4p+4f, 0x1.fa0a08p+5f, -0x1.a68f66p+6f, 0x1.98403ap+6f, -0x1.03810ep+5f, -0x1.14faaep+6f, 0x1.3d735cp+7f, -0x1.cdbd7ep+7f, 0x1.200434p+8f, -0x1.2591e8p+8f, 0x1.b6219ap+7f, -0x1.a875bap+6f, 0x1.85c7d2p+4f, 0x1.1c0e0ep+2f, -0x1.36efc4p+2f, 0x1.3e3f5cp+0f, -0x1.bffc3ap-5f, -0x1.75f52cp-6f, 0x1.dea5b4p-10f, 0x1.10aa3ep-15f, -0x1.ea6ed6p-21f, 0x1.089ab2p-30f, 0x1.9990a4p-46f, -0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.5d159cp+2f, -0x1.54873ep+5f, 0x1.2c245ep+7f, -0x1.416f5cp+8f, 0x1.e67e2cp+8f, -0x1.298ee6p+9f, 0x1.48ee3ep+9f, -0x1.4e6b46p+9f, 0x1.2782eap+9f, -0x1.bb4938p+8f, 0x1.25dfd4p+8f, -0x1.575e0cp+7f, 0x1.1c029p+6f, -0x1.08a1fep+2f, -0x1.12ed1ep+4f, 0x1.66791ep+3f, -0x1.7aa974p+1f, 0x1.41600cp-3f, 0x1.275514p-4f, -0x1.29374p-7f, -0x1.51ea7ep-13f, 0x1.deb156p-18f, -0x1.6e30fap-27f, -0x1.1b57acp-41f, 0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.d4fe28p+2f, -0x1.ecb0f4p+5f, 0x1.c6da62p+7f, -0x1.e3622ep+8f, 0x1.495088p+9f, -0x1.3d934ap+9f, 0x1.0686p+9f, -0x1.bb4eb6p+8f, 0x1.2c2d3cp+8f, -0x1.6a6f08p+5f, -0x1.48c0f8p+7f, 0x1.bce286p+7f, -0x1.9e035ep+7f, 0x1.737018p+7f, -0x1.15bd06p+7f, 0x1.1609d2p+6f, -0x1.30b382p+4f, 0x1.34c266p+0f, 0x1.56d14ep-1f, -0x1.f82518p-4f, -0x1.1d5d34p-9f, 0x1.599f88p-13f, -0x1.742b04p-22f, -0x1.1fd836p-35f, -0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.6f91b2p+2f, -0x1.8fef12p+5f, 0x1.809c44p+7f, -0x1.b10bfp+8f, 0x1.452582p+9f, -0x1.7231bp+9f, 0x1.7af822p+9f, -0x1.823eap+9f, 0x1.6f4bc2p+9f, -0x1.32f292p+9f, 0x1.d856p+8f, -0x1.59b2fp+8f, 0x1.c4899p+7f, -0x1.01b04cp+7f, 0x1.0ee55p+6f, -0x1.f14982p+4f, 0x1.214136p+3f, -0x1.1e3582p-2f, -0x1.54f128p-1f, 0x1.1dedd2p-3f, 0x1.2b8db4p-10f, -0x1.7cd67ep-12f, 0x1.c17582p-21f, 0x1.5b5402p-33f, -0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.e00f2p+1f, -0x1.09aad6p+5f, 0x1.0083b2p+7f, -0x1.1b0164p+8f, 0x1.8e74c6p+8f, -0x1.907a86p+8f, 0x1.68e4a6p+8f, -0x1.685dfep+8f, 0x1.592f3ap+8f, -0x1.09589ap+8f, 0x1.658b66p+7f, -0x1.f90c72p+6f, 0x1.49a9a8p+6f, -0x1.441338p+5f, 0x1.0b7b2ap+4f, -0x1.d98372p+2f, 0x1.f43ec2p+0f, 0x1.6165b8p-1f, -0x1.4f8a82p-1f, 0x1.267684p-3f, -0x1.8ddc62p-9f, -0x1.979caep-11f, 0x1.95627cp-20f, 0x1.38bcd2p-31f, 0x0p+0f}; - } - if constexpr (order == 10) { - return {0x0p+0f, 0x1.ddc992p+0f, -0x1.0aa6a6p+4f, 0x1.ffd30ap+5f, -0x1.1076bcp+7f, 0x1.5b315p+7f, -0x1.15e62ap+7f, 0x1.73ecdap+6f, -0x1.7ea49ap+6f, 0x1.92fe5p+6f, -0x1.e50ce8p+5f, 0x1.23fe36p+4f, -0x1.1183a6p+3f, 0x1.325da8p+2f, 0x1.b5b93ep+2f, -0x1.6174ccp+3f, 0x1.b8e78ep+2f, -0x1.ffc6e6p+1f, 0x1.807b44p+1f, -0x1.949fp+0f, 0x1.99c706p-2f, -0x1.8b4256p-6f, -0x1.25fbdep-8f, 0x1.a2ffd6p-17f, 0x1.4225e6p-27f, 0x0p+0f}; - } - if constexpr (order == 11) { - return {0x0p+0f, 0x1.82556p-2f, -0x1.b108acp+1f, 0x1.a3afap+3f, -0x1.c92e2ap+4f, 0x1.336156p+5f, -0x1.154d2p+5f, 0x1.af95c6p+4f, -0x1.a382eep+4f, 0x1.a5a57ep+4f, -0x1.48587cp+4f, 0x1.c6519cp+3f, -0x1.64406ep+3f, 0x1.05a0dap+3f, -0x1.34062ap+2f, 0x1.65a332p+1f, -0x1.b27cf8p+0f, 0x1.a5bdc8p-1f, -0x1.571ac2p-2f, 0x1.317678p-3f, -0x1.904f34p-5f, 0x1.0ee4f4p-8f, 0x1.2584f2p-10f, -0x1.373cf6p-17f, -0x1.db60ap-27f, -0x0p+0f}; - } - if constexpr (order == 12) { - return {0x0p+0f, 0x1.8dbb04p-5f, -0x1.bebdc6p-2f, 0x1.aeb7a6p+0f, -0x1.cb9852p+1f, 0x1.240bf6p+2f, -0x1.cab7dp+1f, 0x1.1fd454p+1f, -0x1.1ce974p+1f, 0x1.3bab08p+1f, -0x1.c40e7cp+0f, 0x1.feadc8p-1f, -0x1.a643a4p-1f, 0x1.543b96p-1f, -0x1.577aa6p-2f, 0x1.499f7p-3f, -0x1.d5a152p-4f, 0x1.d4c5bap-5f, -0x1.094f52p-6f, 0x1.cd0926p-8f, -0x1.b2091cp-9f, 0x1.fdc736p-13f, 0x1.4af176p-13f, -0x1.fd199ap-19f, -0x1.7fa406p-27f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.749078c0867aap-9, 0x1.8ae6a79b4939p-3, 0x1.d008898983914p-1, -0x1.20e16d5539e3fp-4, -0x1.f688bd1280c7p-5, 0x1.2fca4301354a5p-5, -0x1.505c64431d7a7p-12, -0x1.0145189baf014p-6, 0x1.c908becee5a6ap-7, -0x1.beac12be1e7dep-8, 0x1.0006a916adee3p-9, -0x1.d4cc286b09e13p-13, -0x1.a08b65bbb5986p-15, 0x1.5f413ab3a7eb9p-16, -0x1.5c34d16af592p-20, -0x1.2dc4454eebde3p-21, 0x1.74f33a2ccbc65p-24, 0x1.ddb5df0a412fdp-29, -0x1.07969b3a158bdp-32, 0x1.2c5958b74836cp-38, 0x1.52fae6e83092p-45, -0x1.d83da475a639cp-53, 0x1.1342e56840ec2p-65, 0x1.aa25edf8f64ffp-86, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.23923550f457dp-6, 0x1.0c0767795d12bp-1, 0x1.3373be839b47cp-2, -0x1.856d7e6b6468cp+0, 0x1.22d30ac28dd9dp+0, -0x1.72e38df054a24p-1, 0x1.8e439b194a1c1p-2, -0x1.3bc2524066e84p-3, 0x1.1bc8f6e410596p-5, 0x1.2884461caa1e3p-11, -0x1.db22a9804aa11p-10, -0x1.3482dca87f01cp-11, 0x1.3285223dae55ap-11, -0x1.bbf1c4306d1a3p-14, -0x1.17497a4dcd45p-16, 0x1.bebec0cbd1f99p-18, -0x1.bc40d833ef35ap-22, 0x1.6454c6cebdf98p-26, 0x1.5fce040bf0fa2p-29, -0x1.1241493325c92p-33, -0x1.ce70ab06ee7ebp-41, 0x1.8616f674ef406p-48, -0x1.7b38ad7c07a3ap-60, -0x1.258ba4702de86p-79, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.7e9e99d93265ep-4, 0x1.e81e73bf7d4e6p-1, -0x1.368292c7be10ep+1, 0x1.a1c192a939b96p+0, -0x1.58e6f9045a40ep-2, 0x1.2f82100ba4f28p-2, -0x1.f8fd9be6cc911p-2, 0x1.017de77081fc3p-1, -0x1.5831ad1464211p-2, 0x1.30d718554c4cbp-3, -0x1.30a6075105b3bp-5, -0x1.632f9e9eb99fcp-11, 0x1.1cbed37ba4dbep-8, -0x1.77d86fa7164cp-10, 0x1.50ec238da0096p-14, 0x1.f99c3b6dd2e63p-15, -0x1.8453f2cbc2d99p-17, -0x1.b4056601f4cp-23, 0x1.4c2776a5f116ep-24, -0x1.287daf168a21ap-29, -0x1.b00a66e2af604p-36, 0x1.401eb1fad689ep-42, -0x1.71528144e6955p-54, -0x1.1de10823e626cp-72, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.95e033565cd46p-2, 0x1.e7908dd5753c9p-3, -0x1.293799fcf6c8ep+2, 0x1.36cc467b08bf8p+3, -0x1.4335983e13577p+3, 0x1.9c4d14b541486p+2, -0x1.ef81d85b23a02p+0, -0x1.2378e73c6b10ap+0, 0x1.c6e27151761e4p+0, -0x1.c857e67243154p-1, 0x1.3531afa42b77fp-8, 0x1.05f57c1a6464dp-2, -0x1.38a2db882124ep-3, 0x1.35c4a5041d9b9p-5, -0x1.fddc3c9f813d7p-14, -0x1.2653a0321997dp-9, 0x1.ec5d6f7ab50c1p-12, -0x1.dc01f8633f4c6p-17, -0x1.379717b64ca38p-18, 0x1.7e5cfdc9a1b18p-23, 0x1.a124166c57861p-29, -0x1.4171311c3a7b2p-35, 0x1.65f402b77f1abp-46, 0x1.15123cc4efb61p-63, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.4c5d516dd5341p+0, -0x1.5d2571cda5544p+2, 0x1.24b0f0352262ap+3, -0x1.39e0f8d13e8dbp+3, 0x1.f006cc927be53p+3, -0x1.0ce2ffa464611p+5, 0x1.b8b8afcf323dp+5, -0x1.e6925570e3f51p+5, 0x1.503102590c0b8p+5, -0x1.6d86add093f07p+3, -0x1.35b5dc1025f2dp+3, 0x1.a6237c764b4a3p+3, -0x1.cda455c3ae393p+2, 0x1.d5a02bb93708ap+0, 0x1.ecd4c4adc076p-5, -0x1.660ee59df078bp-3, 0x1.5158e51b27e5ep-5, -0x1.73814bfd57b68p-10, -0x1.23460c48f637p-11, 0x1.fa353cdebaaabp-16, 0x1.19c5738584247p-21, -0x1.4bb4308ed52p-27, 0x1.fc9a1f4f09859p-38, 0x1.89a8b7b9d28d2p-54, 0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.a35157d8dba57p+1, -0x1.5a1bc35a1cc0ep+4, 0x1.fa0a0878d9a93p+5, -0x1.a68f6523a827p+6, 0x1.98403a971e631p+6, -0x1.03810e60e0205p+5, -0x1.14faaec768465p+6, 0x1.3d735b94c1054p+7, -0x1.cdbd7de801408p+7, 0x1.20043470ad457p+8, -0x1.2591e882d85cdp+8, 0x1.b621996a63c18p+7, -0x1.a875ba068d845p+6, 0x1.85c7d166f26b7p+4, 0x1.1c0e0d6b929f9p+2, -0x1.36efc345fd87ep+2, 0x1.3e3f5c2c93c34p+0, -0x1.bffc3922a3129p-5, -0x1.75f52c4bce394p-6, 0x1.dea5b49d2b29ap-10, 0x1.10aa3eff5f8abp-15, -0x1.ea6ed6c321e75p-21, 0x1.089ab261bfe1dp-30, 0x1.9990a3735f2b8p-46, -0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.5d159c98a090ap+2, -0x1.54873e7e1b3d2p+5, 0x1.2c245e185ac8bp+7, -0x1.416f5cc6c22c2p+8, 0x1.e67e2b7f93304p+8, -0x1.298ee57db6ed6p+9, 0x1.48ee3d90a4e35p+9, -0x1.4e6b4521eb7a5p+9, 0x1.2782e95d7bf9fp+9, -0x1.bb493883e544dp+8, 0x1.25dfd4b9fa45bp+8, -0x1.575e0c206b7eep+7, 0x1.1c028f2725fcep+6, -0x1.08a1fe0ac681ap+2, -0x1.12ed1d6ca773p+4, 0x1.66791e904ad3bp+3, -0x1.7aa9733036516p+1, 0x1.41600caa02956p-3, 0x1.275514f436a32p-4, -0x1.29373f56ac109p-7, -0x1.51ea7d9f34504p-13, 0x1.deb156b08b87fp-18, -0x1.6e30fae8c34eep-27, -0x1.1b57abb7d7f1cp-41, 0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.d4fe27a0835aep+2, -0x1.ecb0f32ca76fbp+5, 0x1.c6da62a20cd0bp+7, -0x1.e3622dd5ba05ep+8, 0x1.49508717a90e8p+9, -0x1.3d934aacf56d1p+9, 0x1.068600d74e1c9p+9, -0x1.bb4eb52dbc23dp+8, 0x1.2c2d3c048caafp+8, -0x1.6a6f07f5d07ddp+5, -0x1.48c0f7b3bed9ep+7, 0x1.bce28601020e5p+7, -0x1.9e035ea535c3bp+7, 0x1.737017c34f7dfp+7, -0x1.15bd065f2789cp+7, 0x1.1609d2e86de1fp+6, -0x1.30b382548236p+4, 0x1.34c266d274d02p+0, 0x1.56d14dbd1c0fp-1, -0x1.f82518456ddfap-4, -0x1.1d5d333a03734p-9, 0x1.599f88826e1dfp-13, -0x1.742b04eba227p-22, -0x1.1fd835e2f3ac3p-35, -0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.6f91b1fb16e46p+2, -0x1.8fef11e8059cfp+5, 0x1.809c444472a8ep+7, -0x1.b10bf090c92b5p+8, 0x1.45258188f7147p+9, -0x1.7231afc08bd27p+9, 0x1.7af82162ac35ap+9, -0x1.823e9f8992b5ap+9, 0x1.6f4bc124eb7dcp+9, -0x1.32f291524b4fdp+9, 0x1.d856007cb8fap+8, -0x1.59b2f057a74e5p+8, 0x1.c4898ffe6b604p+7, -0x1.01b04bb5c7e4fp+7, 0x1.0ee550f2b46fbp+6, -0x1.f149829700499p+4, 0x1.21413698e7cf2p+3, -0x1.1e358290df39dp-2, -0x1.54f12799790c9p-1, 0x1.1dedd290f908p-3, 0x1.2b8db385d6eebp-10, -0x1.7cd67d6099899p-12, 0x1.c1758243d6f69p-21, 0x1.5b5402fbe8db8p-33, -0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.e00f201ca9b48p+1, -0x1.09aad588fc6e2p+5, 0x1.0083b1ed3add2p+7, -0x1.1b01639f15a47p+8, 0x1.8e74c5b415b4dp+8, -0x1.907a858da198ep+8, 0x1.68e4a68143eb6p+8, -0x1.685dfe59eb94fp+8, 0x1.592f39b72049ap+8, -0x1.09589acf597f5p+8, 0x1.658b66c44d2dap+7, -0x1.f90c71880a916p+6, 0x1.49a9a7009f2b2p+6, -0x1.441338caa52dp+5, 0x1.0b7b2a297fde1p+4, -0x1.d98372b1c68d4p+2, 0x1.f43ec1f2a328p+0, 0x1.6165b77555fcbp-1, -0x1.4f8a8171bb09p-1, 0x1.267683e93d2b7p-3, -0x1.8ddc624d415c9p-9, -0x1.979cae945ae1p-11, 0x1.95627b187fdb2p-20, 0x1.38bcd286c35dep-31, 0x0p+0}; - } - if constexpr (order == 10) { - return {0x0p+0, 0x1.ddc9914b8fce2p+0, -0x1.0aa6a6fe474ap+4, 0x1.ffd30a30f104ep+5, -0x1.1076bbdb4cf75p+7, 0x1.5b314fd5bd842p+7, -0x1.15e629a2f07abp+7, 0x1.73ecdaa7dbcd1p+6, -0x1.7ea4991281a8p+6, 0x1.92fe5087093b6p+6, -0x1.e50ce86c3eca3p+5, 0x1.23fe36ce5250dp+4, -0x1.1183a5ac74637p+3, 0x1.325da71616788p+2, 0x1.b5b93d37eb78fp+2, -0x1.6174cc292a978p+3, 0x1.b8e78e1a9ada5p+2, -0x1.ffc6e54f09b8ap+1, 0x1.807b43d233e13p+1, -0x1.949effe4fd5f1p+0, 0x1.99c706ee33d33p-2, -0x1.8b4255eb2ab53p-6, -0x1.25fbde4ae0e29p-8, 0x1.a2ffd5a58a3e6p-17, 0x1.4225e5d67d6a9p-27, 0x0p+0}; - } - if constexpr (order == 11) { - return {0x0p+0, 0x1.82555f0fca682p-2, -0x1.b108ac4bd9d5ep+1, 0x1.a3af9f5e28534p+3, -0x1.c92e2a69bebeap+4, 0x1.336156f19a3ebp+5, -0x1.154d20c532d38p+5, 0x1.af95c6a7f034fp+4, -0x1.a382ed435f8edp+4, 0x1.a5a57db59b67cp+4, -0x1.48587bdb4781p+4, 0x1.c6519b1cdb293p+3, -0x1.64406dc5dece2p+3, 0x1.05a0da2a87dbp+3, -0x1.34062a3bf7c11p+2, 0x1.65a3327bcf1acp+1, -0x1.b27cf7ab49be3p+0, 0x1.a5bdc7192b9c4p-1, -0x1.571ac2983f85ep-2, 0x1.31767817c6adfp-3, -0x1.904f3491bf69cp-5, 0x1.0ee4f3163f55fp-8, 0x1.2584f1f36b43ep-10, -0x1.373cf584c03efp-17, -0x1.db60a068c3378p-27, -0x0p+0}; - } - if constexpr (order == 12) { - return {0x0p+0, 0x1.8dbb03fad2c3p-5, -0x1.bebdc5d3b2391p-2, 0x1.aeb7a5ea21053p+0, -0x1.cb9851522d20bp+1, 0x1.240bf59871b99p+2, -0x1.cab7cf1ed537ep+1, 0x1.1fd4543a5fd8dp+1, -0x1.1ce9744c1c975p+1, 0x1.3bab08bd76345p+1, -0x1.c40e7b4e77557p+0, 0x1.feadc8c7ce87bp-1, -0x1.a643a47d84b4ep-1, 0x1.543b964e0f03ap-1, -0x1.577aa576ffa65p-2, 0x1.499f6f7a97a23p-3, -0x1.d5a15151b9016p-4, 0x1.d4c5badb46707p-5, -0x1.094f5215690dbp-6, 0x1.cd0926fb9e142p-8, -0x1.b2091c2c73ddp-9, 0x1.fdc7350edfaddp-13, 0x1.4af17513fc3a8p-13, -0x1.fd199a3cefa32p-19, -0x1.7fa406e41ed66p-27, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xb.a483c60433d4d39p-12L, 0xc.57353cda49c7dedp-6L, 0xe.80444c4c1c89ecep-4L, -0x9.070b6aa9cf1f929p-7L, -0xf.b445e89406380cap-8L, 0x9.7e521809aa52714p-8L, -0xa.82e32218ebd378fp-15L, -0x8.0a28c4dd780a179p-9L, 0xe.4845f6772d3537ep-10L, -0xd.f56095f0f3ef04ap-11L, 0x8.003548b56f71a16p-12L, -0xe.a66143584f09aacp-16L, -0xd.045b2dddacc33b9p-18L, 0xa.fa09d59d3f5ca6ep-19L, -0xa.e1a68b57ac901bdp-23L, -0x9.6e222a775ef19bdp-24L, 0xb.a799d1665e328c8p-27L, 0xe.edaef852097ea04p-32L, -0x8.3cb4d9d0ac5e8bp-35L, 0x9.62cac5ba41b6085p-41L, 0xa.97d73741848fd34p-48L, -0xe.c1ed23ad31ce184p-56L, 0x8.9a172b420760cedp-68L, 0xd.512f6fc7b27f70ap-89L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0x9.1c91aa87a2be53cp-9L, 0x8.603b3bcae89572fp-4L, 0x9.9b9df41cda3e206p-5L, -0xc.2b6bf35b234616fp-3L, 0x9.169856146ece4d3p-3L, -0xb.971c6f82a511d45p-4L, 0xc.721cd8ca50e0b31p-5L, -0x9.de1292033741f59p-6L, 0x8.de47b72082cb31fp-8L, 0x9.442230e550f1904p-14L, -0xe.d9154c025508998p-13L, -0x9.a416e543f80e22fp-14L, 0x9.942911ed72acc95p-14L, -0xd.df8e218368d1bf8p-17L, -0x8.ba4bd26e6a27feep-19L, 0xd.f5f6065e8fcc9b9p-21L, -0xd.e206c19f79acc2bp-25L, 0xb.22a63675efcbfa2p-29L, 0xa.fe70205f87d115p-32L, -0x8.920a49992e4937dp-36L, -0xe.7385583773f5acap-44L, 0xc.30b7b3a77a02f75p-51L, -0xb.d9c56be03d1d02cp-63L, -0x9.2c5d23816f42d62p-82L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xb.f4f4cec9932f0f6p-7L, 0xf.40f39dfbea733adp-4L, -0x9.b414963df08728ap-2L, 0xd.0e0c9549cdcb3a8p-3L, -0xa.c737c822d206e95p-5L, 0x9.7c10805d27943dp-5L, -0xf.c7ecdf3664887bbp-5L, 0x8.0bef3b840fe187dp-4L, -0xa.c18d68a32108919p-5L, 0x9.86b8c2aa62655e8p-6L, -0x9.85303a882d9d527p-8L, -0xb.197cf4f5ccfe389p-14L, 0x8.e5f69bdd26decb6p-11L, -0xb.bec37d38b25fe46p-13L, 0xa.87611c6d004b37bp-17L, 0xf.cce1db6e973199cp-18L, -0xc.229f965e16ccb5cp-20L, -0xd.a02b300fa5ffc5bp-26L, 0xa.613bb52f88b70ecp-27L, -0x9.43ed78b4510cd51p-32L, -0xd.805337157b01dc1p-39L, 0xa.00f58fd6b44ef03p-45L, -0xb.8a940a2734aa51ap-57L, -0x8.ef08411f3135df8p-75L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xc.af019ab2e6a32f3p-5L, 0xf.3c846eaba9e4babp-6L, -0x9.49bccfe7b646d1p-1L, 0x9.b66233d845fbec5p+0L, -0xa.19acc1f09abba63p+0L, 0xc.e268a5aa0a433dap-1L, -0xf.7c0ec2d91d00d64p-3L, -0x9.1bc739e3588517cp-3L, 0xe.37138a8bb0f1f2cp-3L, -0xe.42bf339218a9d4bp-4L, 0x9.a98d7d215bbfa64p-11L, 0x8.2fabe0d32326ba1p-5L, -0x9.c516dc410926fe2p-6L, 0x9.ae252820ecdca2bp-8L, -0xf.eee1e4fc09eb578p-17L, -0x9.329d0190ccbe8fdp-12L, 0xf.62eb7bd5a860bbfp-15L, -0xe.e00fc319fa6309dp-20L, -0x9.bcb8bdb2651be88p-21L, 0xb.f2e7ee4d0d8bee7p-26L, 0xd.0920b362bc30ba7p-32L, -0xa.0b8988e1d3d9312p-38L, 0xb.2fa015bbf8d5914p-49L, 0x8.a891e6277db069dp-66L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xa.62ea8b6ea9a0684p-3L, -0xa.e92b8e6d2aa1c92p-1L, 0x9.258781a91314f19p+0L, -0x9.cf07c689f46d8f8p+0L, 0xf.80366493df29948p+0L, -0x8.6717fd232308bfp+2L, 0xd.c5c57e7991e8074p+2L, -0xf.3492ab871fa8811p+2L, 0xa.818812c8605bdbdp+2L, -0xb.6c356e849f83a5ep+0L, -0x9.adaee0812f969a5p+0L, 0xd.311be3b25a5141ap+0L, -0xe.6d22ae1d71c94e9p-1L, 0xe.ad015dc9b84519p-3L, 0xf.66a6256e03aff12p-8L, -0xb.30772cef83c5a19p-6L, 0xa.8ac728d93f2edffp-8L, -0xb.9c0a5feabdb40fdp-13L, -0x9.1a306247b1b7d38p-14L, 0xf.d1a9e6f5d555505p-19L, 0x8.ce2b9c2c2123732p-24L, -0xa.5da18476a8fff99p-30L, 0xf.e4d0fa784c2c7aap-41L, 0xc.4d45bdce9468eb9p-57L, 0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xd.1a8abec6dd2b59ap-2L, -0xa.d0de1ad0e606ddbp+1L, 0xf.d05043c6cd499c3p+2L, -0xd.347b291d41380b3p+3L, 0xc.c201d4b8f318b15p+3L, -0x8.1c08730701024ebp+2L, -0x8.a7d5763b4232a87p+3L, 0x9.eb9adca6082a1b5p+4L, -0xe.6debef400a03eb9p+4L, 0x9.0021a3856a2b57ap+5L, -0x9.2c8f4416c2e68c6p+5L, 0xd.b10ccb531e0bf33p+4L, -0xd.43add0346c224eap+3L, 0xc.2e3e8b37935bbc2p+1L, 0x8.e0706b5c94fcaddp-1L, -0x9.b77e1a2fec3f3f9p-1L, 0x9.f1fae1649e1a3cap-3L, -0xd.ffe1c91518944a2p-8L, -0xb.afa9625e71ca263p-9L, 0xe.f52da4e9594cf98p-13L, 0x8.8551f7fafc55605p-18L, -0xf.5376b6190f3a9e1p-24L, 0x8.44d5930dff0e45cp-33L, 0xc.cc851b9af95c09cp-49L, -0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xa.e8ace4c50485103p-1L, -0xa.a439f3f0d9e9083p+2L, 0x9.6122f0c2d6458a6p+4L, -0xa.0b7ae6361160fep+5L, 0xf.33f15bfc9982224p+5L, -0x9.4c772bedb76afeap+6L, 0xa.4771ec85271a548p+6L, -0xa.735a290f5bd2b61p+6L, 0x9.3c174aebdfcfafep+6L, -0xd.da49c41f2a26a23p+5L, 0x9.2efea5cfd22d7f4p+5L, -0xa.baf061035bf7341p+4L, 0x8.e01479392fe733bp+3L, -0x8.450ff056340cfcbp-1L, -0x8.9768eb653b980edp+1L, 0xb.33c8f482569da0fp+0L, -0xb.d54b9981b28ad7fp-2L, 0xa.0b00655014aaec4p-6L, 0x9.3aa8a7a1b518f2bp-7L, -0x9.49b9fab56084ac4p-10L, -0xa.8f53ecf9a28205dp-16L, 0xe.f58ab5845c3f783p-21L, -0xb.7187d7461a76c1bp-30L, -0x8.dabd5dbebf8dd41p-44L, 0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0xe.a7f13d041ad70dp-1L, -0xf.658799653b7da4ap+2L, 0xe.36d31510668543p+4L, -0xf.1b116eadd02ec05p+5L, 0xa.4a8438bd48741b4p+6L, -0x9.ec9a5567ab68514p+6L, 0x8.343006ba70e487p+6L, -0xd.da75a96de11e455p+5L, 0x9.6169e024655745ap+5L, -0xb.53783fae83ee946p+2L, -0xa.4607bd9df6ceea7p+4L, 0xd.e71430081072aa3p+4L, -0xc.f01af529ae1d75fp+4L, 0xb.9b80be1a7bef779p+4L, -0x8.ade832f93c4e129p+4L, 0x8.b04e97436f0fa36p+3L, -0x9.859c12a411afe04p+1L, 0x9.a6133693a681011p-3L, 0xa.b68a6de8e077c6ep-4L, -0xf.c128c22b6efd051p-7L, -0x8.eae999d01b9a034p-12L, 0xa.ccfc441370efba9p-16L, -0xb.a158275d1138117p-25L, -0x8.fec1af179d61b9fp-38L, -0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0xb.7c8d8fd8b7231c8p-1L, -0xc.7f788f402ce76dp+2L, 0xc.04e222239546c21p+4L, -0xd.885f8486495a99bp+5L, 0xa.292c0c47b8a3474p+6L, -0xb.918d7e045e93b18p+6L, 0xb.d7c10b1561accb3p+6L, -0xc.11f4fc4c95acfe3p+6L, 0xb.7a5e09275bee17p+6L, -0x9.97948a925a7e40dp+6L, 0xe.c2b003e5c7d03a7p+5L, -0xa.cd9782bd3a72557p+5L, 0xe.244c7ff35b01e7fp+4L, -0x8.0d825dae3f27671p+4L, 0x8.772a8795a37d803p+3L, -0xf.8a4c14b8024c883p+1L, 0x9.0a09b4c73e78daep+0L, -0x8.f1ac1486f9ce578p-5L, -0xa.a7893ccbc864ac9p-4L, 0x8.ef6e9487c83fc69p-6L, 0x9.5c6d9c2eb77580cp-13L, -0xb.e6b3eb04cc4c723p-15L, 0xe.0bac121eb7b4789p-24L, 0xa.daa017df46dbf37p-36L, -0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0xf.007900e54da3df6p-2L, -0x8.4d56ac47e370e97p+2L, 0x8.041d8f69d6e8efep+4L, -0x8.d80b1cf8ad238cbp+5L, 0xc.73a62da0ada64c1p+5L, -0xc.83d42c6d0cc6daep+5L, 0xb.4725340a1f5b14p+5L, -0xb.42eff2cf5ca79c7p+5L, 0xa.c979cdb9024d1b7p+5L, -0x8.4ac4d67acbfab3fp+5L, 0xb.2c5b3622696cf85p+4L, -0xf.c8638c40548b2c6p+3L, 0xa.4d4d3804f95933ep+3L, -0xa.2099c6552967d07p+2L, 0x8.5bd9514bfef0a5ep+1L, -0xe.cc1b958e3469fa9p-1L, 0xf.a1f60f951940304p-3L, 0xb.0b2dbbaaafe5407p-4L, -0xa.7c540b8dd847e5dp-4L, 0x9.33b41f49e95bb8cp-6L, -0xc.6ee3126a0ae46c7p-12L, -0xc.bce574a2d70819p-14L, 0xc.ab13d8c3fed8cb7p-23L, 0x9.c5e694361aef307p-34L, 0x0p+0L}; - } - if constexpr (order == 10) { - return {0x0p+0L, 0xe.ee4c8a5c7e71374p-3L, -0x8.553537f23a4ffcdp+1L, 0xf.fe98518788271d7p+2L, -0x8.83b5deda67ba93ep+4L, 0xa.d98a7eadec21394p+4L, -0x8.af314d1783d59d9p+4L, 0xb.9f66d53ede688c9p+3L, -0xb.f524c8940d401f5p+3L, 0xc.97f2843849db0a7p+3L, -0xf.28674361f651857p+2L, 0x9.1ff1b672928682ep+1L, -0x8.8c1d2d63a31b528p+0L, 0x9.92ed38b0b3c3d8dp-1L, 0xd.adc9e9bf5bc7971p-1L, -0xb.0ba6614954bbf44p+0L, 0xd.c73c70d4d6d2496p-1L, -0xf.fe372a784dc531cp-2L, 0xc.03da1e919f0994ap-2L, -0xc.a4f7ff27eaf885bp-3L, 0xc.ce3837719e99949p-5L, -0xc.5a12af5955a96fbp-9L, -0x9.2fdef25707148aap-11L, 0xd.17fead2c51f312dp-20L, 0xa.112f2eb3eb54818p-30L, 0x0p+0L}; - } - if constexpr (order == 11) { - return {0x0p+0L, 0xc.12aaf87e5340e4ep-5L, -0xd.8845625eceaef48p-2L, 0xd.1d7cfaf14299ea2p+0L, -0xe.4971534df5f5093p+1L, 0x9.9b0ab78cd1f558dp+2L, -0x8.aa690629969becdp+2L, 0xd.7cae353f81a7b93p+1L, -0xd.1c176a1afc76911p+1L, 0xd.2d2bedacdb3df28p+1L, -0xa.42c3deda3c082c7p+1L, 0xe.328cd8e6d949737p+0L, -0xb.22036e2ef671076p+0L, 0x8.2d06d1543ed7f3cp+0L, -0x9.a03151dfbe084ep-1L, 0xb.2d1993de78d60e7p-2L, -0xd.93e7bd5a4df1be7p-3L, 0xd.2dee38c95ce1d1p-4L, -0xa.b8d614c1fc2f1d3p-5L, 0x9.8bb3c0be356f62ap-6L, -0xc.8279a48dfb4e393p-8L, 0x8.772798b1faafa2dp-11L, 0x9.2c278f9b5a1f3dep-13L, -0x9.b9e7ac2601f7483p-20L, -0xe.db05034619bbe3ap-30L, -0x0p+0L}; - } - if constexpr (order == 12) { - return {0x0p+0L, 0xc.6dd81fd69617fa7p-8L, -0xd.f5ee2e9d91c88f7p-5L, 0xd.75bd2f51082950ep-3L, -0xe.5cc28a9169055e6p-2L, 0x9.205facc38dccbfep-1L, -0xe.55be78f6a9bf069p-2L, 0x8.fea2a1d2fec658fp-2L, -0x8.e74ba260e4bab6fp-2L, 0x9.dd5845ebb1a25a2p-2L, -0xe.2073da73baab7afp-3L, 0xf.f56e463e743d47ep-4L, -0xd.321d23ec25a6d38p-4L, 0xa.a1dcb270781d1d4p-4L, -0xa.bbd52bb7fd3277ep-5L, 0xa.4cfb7bd4bd115e9p-6L, -0xe.ad0a8a8dc80b1aep-7L, 0xe.a62dd6da3383b8ap-8L, -0x8.4a7a90ab486d843p-9L, 0xe.684937dcf0a13c9p-11L, -0xd.9048e1639ee817cp-12L, 0xf.ee39a876fd6e928p-16L, 0xa.578ba89fe1d43b5p-16L, -0xf.e8ccd1e77d18dbbp-22L, -0xb.fd203720f6b2eddp-30L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.749078c0867a9a724454443e75a7p-9Q, 0x1.8ae6a79b4938fbd909b199343609p-3Q, 0x1.d008898983913d9bf1d194ac98f7p-1Q, -0x1.20e16d5539e3f25296b1c6880b53p-4Q, -0x1.f688bd1280c70194203f744266d5p-5Q, 0x1.2fca4301354a4e285e82fc4b6183p-5Q, -0x1.505c64431d7a6f1e36954a7c80cp-12Q, -0x1.0145189baf0142f2a8862b8be415p-6Q, 0x1.c908becee5a6a6fcccc95605355fp-7Q, -0x1.beac12be1e7de0939dd15f031644p-8Q, 0x1.0006a916adee342c6b2792c6bd7ep-9Q, -0x1.d4cc286b09e13557f3e87a0f9caep-13Q, -0x1.a08b65bbb598677114fddb7b661ep-15Q, 0x1.5f413ab3a7eb94dcb396b2657edap-16Q, -0x1.5c34d16af592037a11107a487b39p-20Q, -0x1.2dc4454eebde3379c7645c4ba87ep-21Q, 0x1.74f33a2ccbc6518fcdedc7d5aa01p-24Q, 0x1.ddb5df0a412fd407d061c573b81ep-29Q, -0x1.07969b3a158bd160a5cdad0ece81p-32Q, 0x1.2c5958b74836c10a9059d0bfc767p-38Q, 0x1.52fae6e83091fa686190e11a0d2cp-45Q, -0x1.d83da475a639c307966abb294b63p-53Q, 0x1.1342e56840ec19da921d2c329c6fp-65Q, 0x1.aa25edf8f64fee132e1b30933b5p-86Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.23923550f457ca7814b0bb3fd653p-6Q, 0x1.0c0767795d12ae5d156ec5cf4423p-1Q, 0x1.3373be839b47c40b1d36ec3e47ecp-2Q, -0x1.856d7e6b6468c2deff8342e75baep+0Q, 0x1.22d30ac28dd9c9a5de5413538cd2p+0Q, -0x1.72e38df054a23a8a5ebabc499005p-1Q, 0x1.8e439b194a1c16626ebcbea59c81p-2Q, -0x1.3bc2524066e83eb2d5b3ff97e1edp-3Q, 0x1.1bc8f6e41059663daa79bf4a8b55p-5Q, 0x1.2884461caa1e3207b6de1334a7c9p-11Q, -0x1.db22a9804aa1133069d05b96cb0fp-10Q, -0x1.3482dca87f01c45e946a258c3e06p-11Q, 0x1.3285223dae55992a1d57ada1533cp-11Q, -0x1.bbf1c4306d1a37f02d18135ce323p-14Q, -0x1.17497a4dcd44ffdc92c6ebd1a068p-16Q, 0x1.bebec0cbd1f99371a7867cbe3fbap-18Q, -0x1.bc40d833ef3598561d72cdf89bb4p-22Q, 0x1.6454c6cebdf97f43adbbdee1eeb8p-26Q, 0x1.5fce040bf0fa22a0bb7f52a52e7bp-29Q, -0x1.1241493325c926f92e656210ed16p-33Q, -0x1.ce70ab06ee7eb593175a3e65f68ep-41Q, 0x1.8616f674ef405eeabf053da9c72dp-48Q, -0x1.7b38ad7c07a3a058098173d3a8bcp-60Q, -0x1.258ba4702de85ac45e001504a52p-79Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.7e9e99d93265e1ecb27f1a82e385p-4Q, 0x1.e81e73bf7d4e6759d9f3db761257p-1Q, -0x1.368292c7be10e513188a104c5c4ap+1Q, 0x1.a1c192a939b9674ffcca9b2f1e48p+0Q, -0x1.58e6f9045a40dd2a472104dd0f2ep-2Q, 0x1.2f82100ba4f2879faa0ab7316342p-2Q, -0x1.f8fd9be6cc910f763e95aa8aafdap-2Q, 0x1.017de77081fc30f9ad09eddaf43dp-1Q, -0x1.5831ad14642112326c714ae42463p-2Q, 0x1.30d718554c4cabcfafc1434f8a7fp-3Q, -0x1.30a6075105b3aa4d5336fc1950e8p-5Q, -0x1.632f9e9eb99fc711faf42ce203b1p-11Q, 0x1.1cbed37ba4dbd96c225d81054e88p-8Q, -0x1.77d86fa7164bfc8c126a64816ac4p-10Q, 0x1.50ec238da00966f5e3d28fc9265ep-14Q, 0x1.f99c3b6dd2e633388ada35d1bfe8p-15Q, -0x1.8453f2cbc2d996b7775a123e9384p-17Q, -0x1.b4056601f4bff8b5e7d36857cb2ap-23Q, 0x1.4c2776a5f116e1d85dd046bd9786p-24Q, -0x1.287daf168a219aa1132a37934711p-29Q, -0x1.b00a66e2af603b8210a104b463bdp-36Q, 0x1.401eb1fad689de068ef9a337dfddp-42Q, -0x1.71528144e6954a34804ddc8b7672p-54Q, -0x1.1de10823e626bbef4adf3610f4fep-72Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.95e033565cd465e59fc64a849ff5p-2Q, 0x1.e7908dd5753c97550b1b562a02c1p-3Q, -0x1.293799fcf6c8da1f93fe2d057e3ap+2Q, 0x1.36cc467b08bf7d8a89d5be8f934fp+3Q, -0x1.4335983e135774c5e5156a45190ap+3Q, 0x1.9c4d14b5414867b3e2c99a21a031p+2Q, -0x1.ef81d85b23a01ac83af86d64d1abp+0Q, -0x1.2378e73c6b10a2f7957b04478d3fp+0Q, 0x1.c6e27151761e3e586f5403563b06p+0Q, -0x1.c857e67243153a965a648f8e6a77p-1Q, 0x1.3531afa42b77f4c754018d3dff11p-8Q, 0x1.05f57c1a6464d742d9d2e202da9bp-2Q, -0x1.38a2db882124dfc4e44179ad6816p-3Q, 0x1.35c4a5041d9b9456d2520e65bc23p-5Q, -0x1.fddc3c9f813d6aef1f4f22d0ffb3p-14Q, -0x1.2653a0321997d1fa4ad992783a03p-9Q, 0x1.ec5d6f7ab50c177dc61e0a189fcdp-12Q, -0x1.dc01f8633f4c61396f200866480ap-17Q, -0x1.379717b64ca37d0f86a74f664124p-18Q, 0x1.7e5cfdc9a1b17dce328c7c0b5cf9p-23Q, 0x1.a124166c5786174e1b984a588c59p-29Q, -0x1.4171311c3a7b2623f4df8ab8200ep-35Q, 0x1.65f402b77f1ab227d7a791609ed8p-46Q, 0x1.15123cc4efb60d3af1736012e615p-63Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.4c5d516dd5340d0879832abfae77p+0Q, -0x1.5d2571cda5543923016a360261d3p+2Q, 0x1.24b0f03522629e31e5a0ddf9b0acp+3Q, -0x1.39e0f8d13e8db1f029ce62587cecp+3Q, 0x1.f006cc927be5328f1a33d6aed069p+3Q, -0x1.0ce2ffa4646117df99ed92fff69cp+5Q, 0x1.b8b8afcf323d00e8ad39d1ccb61dp+5Q, -0x1.e6925570e3f510211d732b9179c8p+5Q, 0x1.503102590c0b7b7ae2742f43b1bp+5Q, -0x1.6d86add093f074bc432a452b5189p+3Q, -0x1.35b5dc1025f2d34a60aa7bf9f93dp+3Q, 0x1.a6237c764b4a28340b8488817371p+3Q, -0x1.cda455c3ae3929d25c3c5a324857p+2Q, 0x1.d5a02bb93708a320124accef7fd1p+0Q, 0x1.ecd4c4adc075fe2457753c0ae29ap-5Q, -0x1.660ee59df078b432fb4f889b38bfp-3Q, 0x1.5158e51b27e5dbfe89f577f9dcaep-5Q, -0x1.73814bfd57b681fa89fa6df52a98p-10Q, -0x1.23460c48f636fa706d007acb283p-11Q, 0x1.fa353cdebaaaaa09ad0c40e9cfcp-16Q, 0x1.19c5738584246e6431d3352c6ae1p-21Q, -0x1.4bb4308ed51fff3108f30cb71f7ep-27Q, 0x1.fc9a1f4f09858f536f1a575d9e29p-38Q, 0x1.89a8b7b9d28d1d71597812aa68c7p-54Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.a35157d8dba56b3359c55dbb3245p+1Q, -0x1.5a1bc35a1cc0dbb69c71add31e17p+4Q, 0x1.fa0a0878d9a933860f511fa37af4p+5Q, -0x1.a68f6523a82701663e04e3ed3779p+6Q, 0x1.98403a971e63162a02dd92c33da9p+6Q, -0x1.03810e60e02049d57e6cc9d05d6p+5Q, -0x1.14faaec76846550eede58601f0cdp+6Q, 0x1.3d735b94c105436aa6c6accd08c9p+7Q, -0x1.cdbd7de801407d716cbc38649987p+7Q, 0x1.20043470ad456af43bde8d7a0984p+8Q, -0x1.2591e882d85cd18b0dca9775a589p+8Q, 0x1.b621996a63c17e6687cb0aeb2864p+7Q, -0x1.a875ba068d8449d487f82d8f98a2p+6Q, 0x1.85c7d166f26b7783d793e4b535e5p+4Q, 0x1.1c0e0d6b929f95b9e528987efc33p+2Q, -0x1.36efc345fd87e7f12a7cd8cf55f7p+2Q, 0x1.3e3f5c2c93c347939cad28d35ff2p+0Q, -0x1.bffc3922a312894449dea079023bp-5Q, -0x1.75f52c4bce3944c6d40bd8c68e83p-6Q, 0x1.dea5b49d2b299f2f3407a959506bp-10Q, 0x1.10aa3eff5f8aac0902d8bf4b6addp-15Q, -0x1.ea6ed6c321e753c1b3e92351b813p-21Q, 0x1.089ab261bfe1c8b7f19aebdff953p-30Q, 0x1.9990a3735f2b8137827c03e7b5fp-46Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.5d159c98a090a206b1f5a487328bp+2Q, -0x1.54873e7e1b3d210625d277e6898dp+5Q, 0x1.2c245e185ac8b14c7baac4033f4ap+7Q, -0x1.416f5cc6c22c1fc04eeda9dfb493p+8Q, 0x1.e67e2b7f933044475571e632011ap+8Q, -0x1.298ee57db6ed5fd4bacad0de9695p+9Q, 0x1.48ee3d90a4e34a8f4d18f98b7344p+9Q, -0x1.4e6b4521eb7a56c1ef75797e43fdp+9Q, 0x1.2782e95d7bf9f5fc360d37ee013bp+9Q, -0x1.bb493883e544d446bc2b8bcc693p+8Q, 0x1.25dfd4b9fa45afe8f2d50abdb77ep+8Q, -0x1.575e0c206b7ee6818931b6231d56p+7Q, 0x1.1c028f2725fce675841ea5e425e4p+6Q, -0x1.08a1fe0ac6819f96e8258a0368bp+2Q, -0x1.12ed1d6ca77301d9871c862435c4p+4Q, 0x1.66791e904ad3b41e47b43fe289f8p+3Q, -0x1.7aa9733036515afd48134b03fe32p+1Q, 0x1.41600caa02955d88aadf08f58823p-3Q, 0x1.275514f436a31e564b7d019a87cbp-4Q, -0x1.29373f56ac1095884f483f83febcp-7Q, -0x1.51ea7d9f345040b9bbf67fd2c9c4p-13Q, 0x1.deb156b08b87ef0592d66bd4c9c7p-18Q, -0x1.6e30fae8c34ed8366ddfb0cc8561p-27Q, -0x1.1b57abb7d7f1ba81ca336dd9e4d6p-41Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.d4fe27a0835ae1a04e0830be24cp+2Q, -0x1.ecb0f32ca76fb494d571b0a3e338p+5Q, 0x1.c6da62a20cd0a85f32742b3dd231p+7Q, -0x1.e3622dd5ba05d80a963a5e3e0d7dp+8Q, 0x1.49508717a90e836846bfe76665d8p+9Q, -0x1.3d934aacf56d0a27027f03a0039p+9Q, 0x1.068600d74e1c90df9e5939a69755p+9Q, -0x1.bb4eb52dbc23c8aa9dac0b1ae5b9p+8Q, 0x1.2c2d3c048caae8b4e7ebc3a10a9fp+8Q, -0x1.6a6f07f5d07dd28cc71310327c39p+5Q, -0x1.48c0f7b3bed9dd4e2bcfc6df9159p+7Q, 0x1.bce28601020e5546efe49f4f2facp+7Q, -0x1.9e035ea535c3aebdf12735df11cep+7Q, 0x1.737017c34f7deef2722c9d811907p+7Q, -0x1.15bd065f2789c251ed52867c6e81p+7Q, 0x1.1609d2e86de1f46bc02dc6e0a8fcp+6Q, -0x1.30b382548235fc08ce2a6ea99e65p+4Q, 0x1.34c266d274d020226722064f6a4ap+0Q, 0x1.56d14dbd1c0ef8dc071f1d5be26fp-1Q, -0x1.f82518456ddfa0a1ea7fb11fa704p-4Q, -0x1.1d5d333a03734067f69cdf063e2dp-9Q, 0x1.599f88826e1df7529e25322303e3p-13Q, -0x1.742b04eba227022dc2784e1aeb19p-22Q, -0x1.1fd835e2f3ac373e68a1719919f7p-35Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.6f91b1fb16e463903f2417b8bc33p+2Q, -0x1.8fef11e8059ceda062deb12c9387p+5Q, 0x1.809c444472a8d8415a2c7a9afbefp+7Q, -0x1.b10bf090c92b5336357cfbd2f863p+8Q, 0x1.45258188f71468e863f92b55998cp+9Q, -0x1.7231afc08bd276307932b219a0cfp+9Q, 0x1.7af82162ac359965f69e6fcab693p+9Q, -0x1.823e9f8992b59fc66e1876f1aa68p+9Q, 0x1.6f4bc124eb7dc2e04c11a11579edp+9Q, -0x1.32f291524b4fc819caccc41f919dp+9Q, 0x1.d856007cb8fa074ef0836c00fb93p+8Q, -0x1.59b2f057a74e4aae3ebb4a35f68fp+8Q, 0x1.c4898ffe6b603cfd7a5fa627ad77p+7Q, -0x1.01b04bb5c7e4ece20624945e7d4ap+7Q, 0x1.0ee550f2b46fb0067dbfbe5f34b2p+6Q, -0x1.f149829700499105abd07323449cp+4Q, 0x1.21413698e7cf1b5b76cf50d81657p+3Q, -0x1.1e358290df39caefe5b52d405e07p-2Q, -0x1.54f12799790c9591a372397a1538p-1Q, 0x1.1dedd290f907f8d2a852f01bdfd7p-3Q, 0x1.2b8db385d6eeb017f64738645db6p-10Q, -0x1.7cd67d6099898e46f355480e2303p-12Q, 0x1.c1758243d6f68f11163695671c33p-21Q, 0x1.5b5402fbe8db7e6e4a3332e846cap-33Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.e00f201ca9b47bec13b3bceeec35p+1Q, -0x1.09aad588fc6e1d2e5e320a1b6965p+5Q, 0x1.0083b1ed3add1dfc189ab7aaac2p+7Q, -0x1.1b01639f15a47195db844f5df4eap+8Q, 0x1.8e74c5b415b4c982c62a28306ab1p+8Q, -0x1.907a858da198db5b4a86eef21cd8p+8Q, 0x1.68e4a68143eb6280f78231820634p+8Q, -0x1.685dfe59eb94f38e35f487b91dc1p+8Q, 0x1.592f39b72049a36e7924f8b1defp+8Q, -0x1.09589acf597f567d3772f2b218afp+8Q, 0x1.658b66c44d2d9f09118af69ddd27p+7Q, -0x1.f90c71880a91658c0d9a38574dffp+6Q, 0x1.49a9a7009f2b267b39bab54a8a34p+6Q, -0x1.441338caa52cfa0e2a27d488fb3dp+5Q, 0x1.0b7b2a297fde14bc6faf3e06bf71p+4Q, -0x1.d98372b1c68d3f52be82670d6ee1p+2Q, 0x1.f43ec1f2a32806088746ff9dc715p+0Q, 0x1.6165b77555fca80d9c5c14948139p-1Q, -0x1.4f8a8171bb08fcb9ccd7f4688dddp-1Q, 0x1.267683e93d2b771765dfc5bfe73cp-3Q, -0x1.8ddc624d415c8d8d9889292068a5p-9Q, -0x1.979cae945ae1031f8b5a56752269p-11Q, 0x1.95627b187fdb196e7b60fd3122a7p-20Q, 0x1.38bcd286c35de60d5fb4c84a2f35p-31Q, 0x0p+0Q}; - } - if constexpr (order == 10) { - return {0x0p+0Q, 0x1.ddc9914b8fce26e89a34c64d6d6p+0Q, -0x1.0aa6a6fe4749ff9a53419e5cb74fp+4Q, 0x1.ffd30a30f104e3ad2ade2b583021p+5Q, -0x1.1076bbdb4cf7527cd039bd2ee863p+7Q, 0x1.5b314fd5bd8427278ea0f14850c8p+7Q, -0x1.15e629a2f07ab3b285fb28d62142p+7Q, 0x1.73ecdaa7dbcd11927e445f4fc04ap+6Q, -0x1.7ea4991281a803e96d951a02ad23p+6Q, 0x1.92fe5087093b614dba0f2e58af18p+6Q, -0x1.e50ce86c3eca30ad8c357a5bc172p+5Q, 0x1.23fe36ce5250d05c3006a508171cp+4Q, -0x1.1183a5ac74636a4f4f8077863f2cp+3Q, 0x1.325da71616787b1a97cd6b487bbp+2Q, 0x1.b5b93d37eb78f2e235cc59568f84p+2Q, -0x1.6174cc292a977e8769fcc13572c1p+3Q, 0x1.b8e78e1a9ada492b4dd6fe85e7f5p+2Q, -0x1.ffc6e54f09b8a6376ab9c26e41bp+1Q, 0x1.807b43d233e13293cd8f6f610b94p+1Q, -0x1.949effe4fd5f10b6f0bb69f9fc41p+0Q, 0x1.99c706ee33d33292c4de755a9043p-2Q, -0x1.8b4255eb2ab52df50469eaf1f575p-6Q, -0x1.25fbde4ae0e29153ac78daabb6bap-8Q, 0x1.a2ffd5a58a3e625ad5baf547df1dp-17Q, 0x1.4225e5d67d6a903058f380dcef3ap-27Q, 0x0p+0Q}; - } - if constexpr (order == 11) { - return {0x0p+0Q, 0x1.82555f0fca681c9ced300bba3465p-2Q, -0x1.b108ac4bd9d5de90a612fa91bba4p+1Q, 0x1.a3af9f5e28533d44a218819eab18p+3Q, -0x1.c92e2a69bebea1255ad98910de81p+4Q, 0x1.336156f19a3eab19184560490c7ep+5Q, -0x1.154d20c532d37d99d550b554251fp+5Q, 0x1.af95c6a7f034f7267500247c3a39p+4Q, -0x1.a382ed435f8ed2216764cb0a372p+4Q, 0x1.a5a57db59b67be50825ea51ac179p+4Q, -0x1.48587bdb4781058d9836884c3b74p+4Q, 0x1.c6519b1cdb292e6d292e4f1f9c11p+3Q, -0x1.64406dc5dece20ec3c4c58b87407p+3Q, 0x1.05a0da2a87dafe77cb9a54ec8326p+3Q, -0x1.34062a3bf7c109c05654bbca487fp+2Q, 0x1.65a3327bcf1ac1cee14ebea4c8b6p+1Q, -0x1.b27cf7ab49be37cde0f46679310bp+0Q, 0x1.a5bdc7192b9c3a20ece9060c1ba9p-1Q, -0x1.571ac2983f85e3a6dc62f13fd384p-2Q, 0x1.31767817c6adec541d6996364d3fp-3Q, -0x1.904f3491bf69c7251d1b40c4f69ep-5Q, 0x1.0ee4f3163f55f45905e2ddfb93a4p-8Q, 0x1.2584f1f36b43e7bbd83744e7e8bep-10Q, -0x1.373cf584c03ee906a072cfcde9b5p-17Q, -0x1.db60a068c3377c744925f382f6d8p-27Q, 0x0p+0Q}; - } - if constexpr (order == 12) { - return {0x0p+0Q, 0x1.8dbb03fad2c2ff4e565f682fc387p-5Q, -0x1.bebdc5d3b23911ed145126163ba8p-2Q, 0x1.aeb7a5ea21052a1c43ba381385e3p+0Q, -0x1.cb9851522d20abcc6f87f331e722p+1Q, 0x1.240bf59871b997fc41c935dfbef9p+2Q, -0x1.cab7cf1ed537e0d17c393ba768f6p+1Q, 0x1.1fd4543a5fd8cb1e3fd209bf00ffp+1Q, -0x1.1ce9744c1c9756de9b809c9cc5acp+1Q, 0x1.3bab08bd76344b447fe47382a836p+1Q, -0x1.c40e7b4e77556f5ef8447dfa81f7p+0Q, 0x1.feadc8c7ce87a8fc67e2732ba34ap-1Q, -0x1.a643a47d84b4da70d0fb0b9b5ca8p-1Q, 0x1.543b964e0f03a3a71ec489e8760ap-1Q, -0x1.577aa576ffa64efb7d0e9a7c6b39p-2Q, 0x1.499f6f7a97a22bd1178c8279f046p-3Q, -0x1.d5a15151b901635be5a327439552p-4Q, 0x1.d4c5badb46707713b03f6550ccfep-5Q, -0x1.094f5215690db085443c42ab246bp-6Q, 0x1.cd0926fb9e142792dd84020c8a8bp-8Q, -0x1.b2091c2c73dd02f84cb3796bc045p-9Q, 0x1.fdc7350edfadd24f5fb7a32829d8p-13Q, 0x1.4af17513fc3a876960b7cf51425ap-13Q, -0x1.fd199a3cefa31b76bcac261239c5p-19Q, -0x1.7fa406e41ed65db974ed315201c3p-27Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00284244035743782127519159930736463030042947946254131969213976354467510363053"), boost::lexical_cast("0.192822751451924727108748766614170490721105824748184344362119332875866730512"), boost::lexical_cast("0.906315134083146106755137020807385959064705834685756457995503249677950870358"), boost::lexical_cast("-0.0705274840180374221915610791607848006698261142719333764196180010698909604538"), boost::lexical_cast("-0.0613444989030761396360783459458969916614040841601149181265363506895700420160"), boost::lexical_cast("0.0370837505994725874839940012509568535053053490011258542752097489994846693329"), boost::lexical_cast("-0.000320778756026535884610425312070842577961491118876729788288874469672772619704"), boost::lexical_cast("-0.0157025089563234832865197139394763898086519833544367931492178049759198251601"), boost::lexical_cast("0.0139475757294295802461692476281352659400468390363122309411246460077043752333"), boost::lexical_cast("-0.00681567628464027460217301387139126877075375129883170970027298157286875244869"), boost::lexical_cast("0.00195332349843711924749204998394665745432087229507798519434292885120009605048"), boost::lexical_cast("-0.000223540063730029960909841256853682353169363587803368909770156156719394426611"), boost::lexical_cast("-0.0000496559764237457326284532141943574549239549099813150646655995671938880681752"), boost::lexical_cast("0.0000209364176969584236982171560586653840498356590078330878290505590378499323774"), boost::lexical_cast("-0.00000129716962748088954003609480965237922709827072460629845757510745626169673818"), boost::lexical_cast("-0.000000562084247470879735315853190082825344794087023602714253342730484399850968357"), boost::lexical_cast("0.0000000868342133308330051357320365697488900304098597969798168765758761035694322405"), boost::lexical_cast("0.00000000347580087379308589607631387726211870849365444198721499394707227756978102834"), boost::lexical_cast("-0.000000000239732167823959290773335551055992800328912309750161986581372592222346479756"), boost::lexical_cast("0.00000000000426821614422438385039700233078195697508737137615415589129724808488001094500"), boost::lexical_cast("0.0000000000000376343496212373063319630027526057051194699346126249374743316989439186929308"), boost::lexical_cast("-0.000000000000000204801796486955545541962476062112026383522552669629082548790846826338899265"), boost::lexical_cast("0.0000000000000000000291444251494672161342962713547400277611484048996443216117012112680095659149"), boost::lexical_cast("0.0000000000000000000000000215149840106709278896741979798565795657829474738608046886706233060495029891"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0177960892359059092368449533300753498910562300524119222277224610665566639113"), boost::lexical_cast("0.523493989529503311622429023285005765138192489253997848188274804607937449633"), boost::lexical_cast("0.300246216566683946242644511406502867819201371939240893015974691913454885808"), boost::lexical_cast("-1.52120199319725472696227412667597446499425167961832165707021344230176033177"), boost::lexical_cast("1.13603274583679261300233776596233947213325327220186577281646114405893643737"), boost::lexical_cast("-0.724392352664214606992237586133777377079256948325029997000977246245080002233"), boost::lexical_cast("0.388929770868824042863797693850769570596574559986024775356266372411178699540"), boost::lexical_cast("-0.154179232206718916893840432717207071358278896682953359728214136553325799462"), boost::lexical_cast("0.0346417257392303445249711911680413626748314405808671270003420334115731156886"), boost::lexical_cast("0.000565560712478204919273167124606530729984714749201859574061136268417222555091"), boost::lexical_cast("-0.00181249770691727469711609530963691466508142540232948702137344478023631552627"), boost::lexical_cast("-0.000588438376382341711328138138085170076834520467501917923206789175862767064823"), boost::lexical_cast("0.000584640605402568510997586714696849845579997815266362073215706625936265422267"), boost::lexical_cast("-0.000105844593014498134844692670509893952845656642504556116202764900311740548871"), boost::lexical_cast("-0.0000166468037640819733915865521995838990879669585457089450510966868180317991073"), boost::lexical_cast("0.00000665702118480401459239243655589860277773366781809294087365522507093749610972"), boost::lexical_cast("-0.000000413743126200483787623193128609853366545681088788845827525800995343215361362"), boost::lexical_cast("0.0000000207412032505394370932864660704575774018021101403985444914301425651830396364"), boost::lexical_cast("0.00000000255971644398897619761224049169452964847520797773015352526231064476414713088"), boost::lexical_cast("-0.000000000124716745263065662018732610753074049301860833130953760676639739633614703632"), boost::lexical_cast("-0.000000000000821458651618354613000975781089942016395222632214628948691994907081952543308"), boost::lexical_cast("0.00000000000000541358205668964250840058676695497274874562173948269314129706627580306868477"), boost::lexical_cast("-0.00000000000000000128485207080436687070726868370112172350592202319644076709933531091773318283"), boost::lexical_cast("-0.00000000000000000000000189699318908704988950069910826502347264570849344128849517108385649026224807"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0934129724220382501349487645300486875234170850245453862186068741324556453346"), boost::lexical_cast("0.953357331395321245741266856874997302595970338569125873978673981100995300480"), boost::lexical_cast("-2.42585978272484861991123956040990946486002448323913218605736734622206571009"), boost::lexical_cast("1.63185993796807836831512574118361080962022886222644234566139901231163277968"), boost::lexical_cast("-0.336818591013582903249775631450042574391476183298908473845002503554184531336"), boost::lexical_cast("0.296394587240899314100091240103956940350255747570510417673706841960334677926"), boost::lexical_cast("-0.493154941522463250789713957033016154711226757009451483204608291769388507365"), boost::lexical_cast("0.502913696750504242256156558554921880910106950582744728599445382698153029596"), boost::lexical_cast("-0.336126999253822119479465098323173579081837929647816976396920165650335393282"), boost::lexical_cast("0.148847761252488850986084377184215361968924151368645407707467187349749910163"), boost::lexical_cast("-0.0371885435962923855115909993991585519975037535904089717996103864650078357255"), boost::lexical_cast("-0.000677463558386659117669706791423999203996673498642825896754202338872153037212"), boost::lexical_cast("0.00434487021597667956865695331283701301527190336995514718937519883519367138275"), boost::lexical_cast("-0.00143373662446881484405894523139422896093101823093949963457103829230616147393"), boost::lexical_cast("0.0000803285640476068389549772156164639298617305382091989859099979787377361685082"), boost::lexical_cast("0.0000602734424846845589803909611025184831851284747892368902634252735886854145822"), boost::lexical_cast("-0.0000115730739689488129340585879564187751711875533780907209280476231204851229122"), boost::lexical_cast("-0.000000203038141021073932718677763769332933580122614824827600175511631933693809212"), boost::lexical_cast("0.0000000773356655095724294210645023078737522223042928980510110980740523592990465707"), boost::lexical_cast("-0.00000000215725560615500809261906811761440663890609571489717139261391990455696409353"), boost::lexical_cast("-0.0000000000245586666328544526882182912641255771532047054465213672340341827137743325608"), boost::lexical_cast("0.000000000000284323589789160638880699636876075821856225650053527097527498265089761368022"), boost::lexical_cast("-0.0000000000000000800840047468220328165149036500044542829087947759522330193325204357891480071"), boost::lexical_cast("-0.000000000000000000000236473591532019199312763596068830970062833585321537190947073847639519351315"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.396363069673686750280548809109341383558142899908658154252076031883543304792"), boost::lexical_cast("0.238068683697433321429585844607770037608153029841989185082601544289511822219"), boost::lexical_cast("-4.64401864722743840792906444860573491613583063303684257865448916759790826776"), boost::lexical_cast("9.71243595152007771944165862124698599498887535318579000953262482665972313795"), boost::lexical_cast("-10.10029232143527497511956582518178878569923447373646682398486184139257232320"), boost::lexical_cast("6.44220464420971559730717830018078624764249539854892668261076269712038115208"), boost::lexical_cast("-1.93557502961232367730478899897300379802437925385537992860963683485606932435"), boost::lexical_cast("-1.13856358742765677259829229431312665523374959898394470745436500766939742620"), boost::lexical_cast("1.77689274061969457654054279018031039397931349538073366568800222943389068691"), boost::lexical_cast("-0.891295625160220390726639633941018793327361578783273631114698203724211097982"), boost::lexical_cast("0.00471792734258069607298372270654369571845851651159485076238538324057163995930"), boost::lexical_cast("0.255819262610292278082913762588973634598620071368606343876500343872602998914"), boost::lexical_cast("-0.152654376117555334468035681501318647194034115973737844538041071367284215030"), boost::lexical_cast("0.0378134940119027684268573286080453159469956130130132923110965287904780282715"), boost::lexical_cast("-0.000121560168274539299345351509032174588648879441157601156968982724381225846230"), boost::lexical_cast("-0.00224553423418000095025260272886136860879275402678218779366170715107150220625"), boost::lexical_cast("0.000469555837907319969170862177815720438165344404592060255271066086544874124922"), boost::lexical_cast("-0.0000141861348255063632226432936826347114087322044233208751170570608200310593872"), boost::lexical_cast("-0.00000464305587959345590293188512531458238827872871125055638342646962690953713219"), boost::lexical_cast("0.000000178051762046205612595554830606976294440430913830610989139140135095046368211"), boost::lexical_cast("0.00000000303509999613044224553224713019229664330430223919168680848333863544196628625"), boost::lexical_cast("-0.0000000000365437421820854861941025978557451175694493997756433473102664593668311395766"), boost::lexical_cast("0.0000000000000198703923567812240879432784797155185222750333260578388946834495314448320449"), boost::lexical_cast("0.000000000000000000117344234409057581035282894922526685306543990483992437311052020528871227897"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.29829892093148675837199950753098632139723149606803915083396902574449208029"), boost::lexical_cast("-5.45541043360327965942803915313674612029372057019831640585125509023549800118"), boost::lexical_cast("9.14659891488834710881029600683563338140354944919573004532523982762027640408"), boost::lexical_cast("-9.80871239536320715248084576368333258092782945770772294846327434563862485047"), boost::lexical_cast("15.50082996950292219639972661063373929889290553615318208787250496285617222300"), boost::lexical_cast("-33.61083916121800635387839817511480720783882205113114838947334986844676545110"), boost::lexical_cast("55.09017907974305257429979612931043233074315377510785068179493707419179306920"), boost::lexical_cast("-60.82145202823324586976188912900763870195276458683421125895492211837656456610"), boost::lexical_cast("42.02393025939949010806003192165586117752687379191173227214491131963706674670"), boost::lexical_cast("-11.42269030320996012044519422789839184208965590204144693325418569461244686450"), boost::lexical_cast("-9.67844966081573901856421942081827739733622487304317595154977214567794509597"), boost::lexical_cast("13.19183180908504928777755197127911432617214990231201200609805185851541078220"), boost::lexical_cast("-7.21315521344594633555535356089362070473231847012846502887625287740895386140"), boost::lexical_cast("1.83447526237344731188770747629269995995501816031751673943697214639743502746"), boost::lexical_cast("0.0601600495701990470578423349111841174877115258558613797357532347067021952039"), boost::lexical_cast("-0.174833101160455896617892939926978927097853960488370421237681663434954331091"), boost::lexical_cast("0.0411800837257458706544783101171615610022000261127525347354930832776549516518"), boost::lexical_cast("-0.00141717935851889446824809565837085540248614139243332507385210260947445968142"), boost::lexical_cast("-0.000555560350330981282462146005342011895702037823413086938195491412869816876266"), boost::lexical_cast("0.0000301723456414363746673611598443020881465023496175523444306498854376889270505"), boost::lexical_cast("0.000000524839933903751376247987543350808530106039891755176189436028565699403867555"), boost::lexical_cast("-0.00000000965385307602574426453743325201391730573869326245570681673188712440757277785"), boost::lexical_cast("0.00000000000722766970161280855990093183542473161153221858414301624738661674579313333974"), boost::lexical_cast("0.0000000000000000853612001904068385422684003534916785880458525794775900690850226714475517744"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.27591989601868802674501785402136946331923506081722246623851782517724077956"), boost::lexical_cast("-21.63177809906124242929618059834623299778169240498310197475751118910416098620"), boost::lexical_cast("63.25489897169350129665198120436585141171650857792468724984618895395156006760"), boost::lexical_cast("-105.64003425325222575937530358981100910346806778811817416031589048365312600500"), boost::lexical_cast("102.06272350428550602794983637219493818640733053272677960258573782601532526300"), boost::lexical_cast("-32.43801570590952546966804957405761294619856192253725299530721532824239057130"), boost::lexical_cast("-69.24480735372488476492726199088539370961841664995584500291147279197929753280"), boost::lexical_cast("158.72530808311660773421056969103812590229014617453891622003568916003770686900"), boost::lexical_cast("-230.87010121360094217924337915444738753118945778386926981134464016079483998200"), boost::lexical_cast("288.01642517309430130736747957321792288095742327983295887677253620052397656300"), boost::lexical_cast("-293.56995408804215778949920569290304953535440565901256602829643467801366406600"), boost::lexical_cast("219.06562359302256197770038214491012243075469145162322027206744692760130121800"), boost::lexical_cast("-106.11496744383573250143347007263440927813125065546390553880842822781245458600"), boost::lexical_cast("24.36128368581441161811089841236294040076426774635200083960668663240035562270"), boost::lexical_cast("4.43835769181395654737492708557265278640240993742380862767423932221744414072"), boost::lexical_cast("-4.85838395915027243210674082732708450718320033028158945864987295932465128532"), boost::lexical_cast("1.24315429771719465036074806222840734622901883367521779356833558313975863034"), boost::lexical_cast("-0.0546856990741580491153518017356023641138609910294467327282571902327595261764"), boost::lexical_cast("-0.0228245670871021915459486249711370338635367656247831656423034604880900103448"), boost::lexical_cast("0.00182589449768070240872485623697617929375041493178863912492773120527334148740"), boost::lexical_cast("0.0000325042037685336262383912582434415986434896476262522511852445563487664732443"), boost::lexical_cast("-0.000000913502582370599560963475117189669272497546395420968001321763477890154121574"), boost::lexical_cast("0.000000000962624778879324987625830559274321622346182423692550529429764127390602244922"), boost::lexical_cast("0.0000000000000227354243242555606552075639763265819210262659858551528763926512978121086153"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.45444407372475315177467720169187517161433417770438745922665664020599409502"), boost::lexical_cast("-42.56603716393114257244373103682838987393735085098528587723704965223943476520"), boost::lexical_cast("150.07103038891031818515743886532262871921427569033077113142523203102180848600"), boost::lexical_cast("-321.43500940552269096601048445735807968772615638828686952229875945373392190300"), boost::lexical_cast("486.49285123198957691189838212046510878680843665543661626780343427251983580200"), boost::lexical_cast("-595.11637851173395454633822179663347444510793729870901103899277136014019421800"), boost::lexical_cast("657.86125381518521180460485717096228323663875621461938629474339145210131286700"), boost::lexical_cast("-668.83804725645011584987360192202731704144101270640504252184585661445041302700"), boost::lexical_cast("591.02274673989806775295905433087707064430763321360170996127414186474186931000"), boost::lexical_cast("-443.28601860377678276957435305705753468882955594761345736716889808456981116800"), boost::lexical_cast("293.87433969841157445285988545192520160702855258407453598402313481311389546900"), boost::lexical_cast("-171.68368626892283846885275113484356845529681519766755047035289228531315837000"), boost::lexical_cast("71.00249921006545724382096278062170090483913301428833620161533416167027278460"), boost::lexical_cast("-4.13488722851072940608795217399184622797681725247617241549338591142041688274"), boost::lexical_cast("-17.18288938944823526216285329531580736984384768713968863197342708566449903360"), boost::lexical_cast("11.20228508169258542429354205503684083900272758550359041700286637526422591800"), boost::lexical_cast("-2.95829620222196862348532178007222612141499084521609887716323655493346037655"), boost::lexical_cast("0.156921481073662045953756041913257566237101060794292502890322509860387034380"), boost::lexical_cast("0.0721026247514735804121100566415299137462648885789052981712326861934660517398"), boost::lexical_cast("-0.00907030670836707586832589336774695366594420064978445308615112498525335789807"), boost::lexical_cast("-0.000161130895298934705154661229234656725370077261357478991394608849613865795613"), boost::lexical_cast("0.00000713307751758044877495311912009992056522552469630503342586343211736962847133"), boost::lexical_cast("-0.0000000106575703414569404305476724036545431177067024911660193372639981084780691080"), boost::lexical_cast("-0.000000000000503317323749389303719563737438740340206677439330596561000596089805746652424"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.32801237750156362483703729919996280695475478786922672432521671311254119834"), boost::lexical_cast("-61.58640131841635882165326632994086164711314616056846772845360126537901397590"), boost::lexical_cast("227.42653376013215970605972000104796817858966318899264414158978818559392102100"), boost::lexical_cast("-483.38351188460896438440811583095448851197970686725910387330605686657179355400"), boost::lexical_cast("658.62912269358369177986072599065937010545029800076900991882439695455748769400"), boost::lexical_cast("-635.15071641906441010676927456327130280863307826701934274951357911827708743700"), boost::lexical_cast("525.04690066637079491947273558679727444098945204462362426522679969863610748800"), boost::lexical_cast("-443.30745206683403362457477380798545670712488884939473921356975458618458544000"), boost::lexical_cast("300.17669704851406005255339306856972566391684656404302637816237332586479717400"), boost::lexical_cast("-45.30421440165057702649803918277564533841222868064389570465229669564862985660"), boost::lexical_cast("-164.37688981728291058700366348503001862732516744094730683945089617887328966600"), boost::lexical_cast("222.44242861890885847681782922975570961504898766298360812690379798202763289600"), boost::lexical_cast("-207.00658146172812966405444130677690797169650424372338218260727893033315417800"), boost::lexical_cast("185.71893129678116264900939787686677271662237302432116418506696464581702586100"), boost::lexical_cast("-138.86918923719065745108647629486188361516972571236690249317122893128955088000"), boost::lexical_cast("69.50959361239118942856866391172010145985276234165251426115174332096603971880"), boost::lexical_cast("-19.04382546435533552706594655647836079674785133821952687854508408638604970290"), boost::lexical_cast("1.20609133375256805296141503631395543465839083951690638291124156720969407294"), boost::lexical_cast("0.669565610251110449459869170701094766316947883669190548464587151565621618122"), boost::lexical_cast("-0.123082251367001933022447492166384546932097984915934829679103087789786980169"), boost::lexical_cast("-0.00217715502095119397820112791869347023513174444446995719621661268281187784180"), boost::lexical_cast("0.000164805973396089051063484507442794045079988504541072855801781243508086304395"), boost::lexical_cast("-0.000000346608500769363543505373359383397071519912407954254984582912708688659199768"), boost::lexical_cast("-0.0000000000327241391736611726060145576789575175299756010826303842659100203467561600702"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.74326753158999834056116812204650118954465060264390982835886577518486268101"), boost::lexical_cast("-49.99173337237481612516482468092913196192930769585684115716367234203820792960"), boost::lexical_cast("192.30520833873417575305032330542133296821671316133381127103148089884031604300"), boost::lexical_cast("-433.04663948928221093038951547041129446069313459043483444888804096093780007800"), boost::lexical_cast("650.29301559509696707391037593955338600499735080495817462222469008365651103900"), boost::lexical_cast("-740.38817602946521524635652991694109244663464176809245792160120459662518415100"), boost::lexical_cast("757.93851884277973879231890685884938562543997902765972920915606890170773334500"), boost::lexical_cast("-772.48924369491146375649339718563050251773647675318553766020712796863655952900"), boost::lexical_cast("734.59183179377170969929067292253934666701158992568437326815741556001094017400"), boost::lexical_cast("-613.89505985905958667637158329225855337819338706324599738575255299428681055200"), boost::lexical_cast("472.33594493404419022069420012879298507928450919272191339092869436457326478600"), boost::lexical_cast("-345.69897983393301885486688813740413735467129595468365631508601814464484933100"), boost::lexical_cast("226.26867671070805874604396626788385147483759975756729744364317414185036983100"), boost::lexical_cast("-128.84432762208094815098432847559414298872221422065057311509033200520302342600"), boost::lexical_cast("67.72394160486503269545391021144817969495298865649547918029615797016751111400"), boost::lexical_cast("-31.08044680580914965121251458755066430643179670788681275067771141961765865330"), boost::lexical_cast("9.03921060432773819185233100601819798021655369701494303621450373894984472793"), boost::lexical_cast("-0.279500999538692156607881707491630467331656124884020994194580849950834108907"), boost::lexical_cast("-0.665902364239195393220279168618682723908283324628346793634526901627751383162"), boost::lexical_cast("0.139613766717165065129603804344872559693994963696840183393921810240833710156"), boost::lexical_cast("0.00114270599575310816085071769400504056542580942289008729114676011902537797522"), boost::lexical_cast("-0.000363195276838709741268790813501267488184675434306229955898556486054877483452"), boost::lexical_cast("0.000000837182661399504778282565545392303504120991217340679683017724471409789826587"), boost::lexical_cast("0.000000000157946565437923846485744196675519158792805910875863717029040068663366791699"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.75046159171634829527163330112510862850171517204527775957907811808615973114"), boost::lexical_cast("-33.20841509838443403040955493092978227279440605831429576553858852822290831770"), boost::lexical_cast("128.25721684783507822791369935094396779663623788672457406601793500565400821300"), boost::lexical_cast("-283.00542635229471097126751678584291828797372875915935845892698482535006432800"), boost::lexical_cast("398.45614171533524054366727180364229849289710682645378118885424811008467298600"), boost::lexical_cast("-400.47860036082498196423508946011183381211802981566841571520311399197149103900"), boost::lexical_cast("360.89316566379728536083135647493301259091592313871719238427499436437024359700"), boost::lexical_cast("-360.36716234208593176728211543795346738863581300534318197607331333071816329900"), boost::lexical_cast("345.18447441614411073209118238319574005939847247957730049229326256329205638300"), boost::lexical_cast("-265.34611221251483388928468384525918631697582076506472432506352501057803541200"), boost::lexical_cast("178.77226842348210140340813061313731570411151037624108176819522656335485861200"), boost::lexical_cast("-126.26215183796407397228250290324344411107479423589079138412164102720512263500"), boost::lexical_cast("82.41567612620818870658967871867767992001718408506613309043264486867844619890"), boost::lexical_cast("-40.50938566509796337170834199812377119587502364115881243103048938109185750340"), boost::lexical_cast("16.71756950579390837676267330467410166297326502202781368693672667419429720820"), boost::lexical_cast("-7.39864795075319033452851083640208460723103521341161070032778771352463446094"), boost::lexical_cast("1.95408260511172224329226832456435155937649818121300834001919283900042220991"), boost::lexical_cast("0.690229161332348184845535892744845183908860830917068365378586781073665858011"), boost::lexical_cast("-0.655353589184885598246818014752831975001293106883587971496754554959033929107"), boost::lexical_cast("0.143780737452876767968123736205746816488614800208120534936850150005468283836"), boost::lexical_cast("-0.00303543758366473343622443033949066654294389600319219464305397559642637833680"), boost::lexical_cast("-0.000777458265060317434483464181432621410549249758909909318620156609272380996932"), boost::lexical_cast("0.00000151017565574994282254648106028992857730337718860666328360706404021863696656"), boost::lexical_cast("0.000000000568866357531465656815014550479471644088340548161842850968659319933134867646"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 10) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.86635692686814334701754512957417350216062515159895162052764097113842043881"), boost::lexical_cast("-16.66568660094765155284710426501256914017192557788488990117955606509357986260"), boost::lexical_cast("63.97804678187877577341574018618490150437681519853311500630408017375912199010"), boost::lexical_cast("-136.23190198244598023711707959187969385344039691028406627990988068537298511000"), boost::lexical_cast("173.59631221712522935710881272085756101498061308640801488113337865649201321400"), boost::lexical_cast("-138.94953641114748367854206140337482846024919723682523303085604297244337196500"), boost::lexical_cast("92.98130285529193057335744641381945290112275119999668355136002874352650176220"), boost::lexical_cast("-95.66074017444953262397108875695549785804937842210406658962204154607043381990"), boost::lexical_cast("100.74835406297538158748165104775636864067153061989180522203699894495867559400"), boost::lexical_cast("-60.63130268637294081465002015983185171976527925057524138307520452453647480510"), boost::lexical_cast("18.24956398577073820812706593292482832715236920720613106450102860436965089250"), boost::lexical_cast("-8.54732021029040581858802778196927000562449466895889987096814021723737609364"), boost::lexical_cast("4.78696610600480427243790366050970458256425167093884818282352698386437907349"), boost::lexical_cast("6.83943109951896060414630018445272105375896265663133246875005081887041646399"), boost::lexical_cast("-11.04550750770862050142551027487003756867181933391324257411989886446115036200"), boost::lexical_cast("6.88913300130972012620159069598928481029978149700887106696332707309836414794"), boost::lexical_cast("-3.99825731620098174291722686239189690428111675971623793296035204832239878614"), boost::lexical_cast("3.00376174701501382150890393381234413552775178257039864145400674669724791199"), boost::lexical_cast("-1.58055114117211937700150897909355450299408918929453114571326586270053152435"), boost::lexical_cast("0.400173290528033474046780700771547590750735363709672842945384353539651951125"), boost::lexical_cast("-0.0241247023629214784889949418794949849850588027303632529305620350773009871100"), boost::lexical_cast("-0.00448583771765557425940953481033336026071599781591537346531375096056306017530"), boost::lexical_cast("0.0000124871538203663846064127929077357912223820600720172540637500972263270210398"), boost::lexical_cast("0.00000000937574188857368553262323255933606233354879076874674275186450020536917162031"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 11) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.377278790797028406495802049657083663562322361271624572079656683482814478381"), boost::lexical_cast("-3.38307717994363961647269729038870588758939994602123056911758390829221597548"), boost::lexical_cast("13.11518829717770243316037165549177793856194221161693344499682894614897577190"), boost::lexical_cast("-28.57377091700247032555582008243751850926614781859679891489888632231161474300"), boost::lexical_cast("38.42252911331146019070574663175356660452387955730227078383681460893481557030"), boost::lexical_cast("-34.66266016064986281759949034365429955214971534877540614552601700849583120980"), boost::lexical_cast("26.97406640625859867160203071971832599019438490014915496366645506277688896980"), boost::lexical_cast("-26.21946455304798864871161101760021771880775045074096541060302606518533350730"), boost::lexical_cast("26.35290308895353879370155511099855779382824241176826323168027129587570497550"), boost::lexical_cast("-20.52160249382001334719301784362115987987417964675011905409270410893726823490"), boost::lexical_cast("14.19746165882069082480150485765422363795342078508016178125626500064575627140"), boost::lexical_cast("-11.13286484381245965677943198830588460860332272909854856957249726091446789600"), boost::lexical_cast("8.17588527972006301113855143068583531281419193834728913969920542381362453688"), boost::lexical_cast("-4.81287628036717816955676920569706546198654894542238231746562519451899699153"), boost::lexical_cast("2.79404288335191180481579867581197397188129392455615189049532559340029697375"), boost::lexical_cast("-1.69721935207211848956351510550979925531938115005327856369556578995039602531"), boost::lexical_cast("0.823713514158776098143914270378737144802711120108114847337079673523569107449"), boost::lexical_cast("-0.335063019316185774400946900047809387504331444599538017269859124873837022194"), boost::lexical_cast("0.149151743150318837631159229932006915696347222177619661105078433909566955498"), boost::lexical_cast("-0.0488658930534999511496940888639373453545430453545029982576926747686967632991"), boost::lexical_cast("0.00413351950396409421167019759007987626638864156006830612512440429134389517261"), boost::lexical_cast("0.00111968733549906685340740936899343820107158321331505760751334075276362206400"), boost::lexical_cast("-0.00000927561883079690107640228293463474861573105973385043495546011950474050815337"), boost::lexical_cast("-0.0000000138353046393774419706318300470822604006784632689512055491879584523531143047"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 12) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0485510900239990436421204389454387673417811678462962540757143566128579592770"), boost::lexical_cast("-0.436270800634297968322345080087680826208441319415670872030224777690078461556"), boost::lexical_cast("1.68248974767722772758483160675785114053064764804002514623394170463789590172"), boost::lexical_cast("-3.59058586609376583771926574429375533672584236400562126859511283907434445711"), boost::lexical_cast("4.56322994124539027457225861351587674553390566017608457671928325936265991655"), boost::lexical_cast("-3.58373440747749241237223725147688884192263700323730018471801896054684688057"), boost::lexical_cast("2.24866726732552133278146064153483046293389221299882995399864011134597001733"), boost::lexical_cast("-2.22587445942297775995811432335154708339509627741904345621048251573818545409"), boost::lexical_cast("2.46615704775868702834863652085534769700638634288067530551348825246469149621"), boost::lexical_cast("-1.76584597268750597380515213373501064800094868705200411926589180388549588359"), boost::lexical_cast("0.997419618978951767654107468235932428974722705691044731477454908009925099723"), boost::lexical_cast("-0.824734821626728470682970936709275659502024225512330108668711202634188766674"), boost::lexical_cast("0.664517113712924681701113756939420311843390054559860571221578562221833419569"), boost::lexical_cast("-0.335428796184635221533296732070577988586954631509663722390327691441647623334"), boost::lexical_cast("0.160948630264969492724365334557199225341872449473537373932195593392097150334"), boost::lexical_cast("-0.114655797627677055876779744868793614912947551394818530771503539697052078243"), boost::lexical_cast("0.0572231912176004958885591389510844893402088690448910703952553137622920787942"), boost::lexical_cast("-0.0161932279203405965225240954258609535698781894809026667589644820730338725774"), boost::lexical_cast("0.00703484727602471596997669396790315101109040223481142577918954913506000676361"), boost::lexical_cast("-0.00331142872730769846357537103134640651616087940178035673586298619579639917832"), boost::lexical_cast("0.000243081165958578425715014946837734369665794705531210842489368910237101227750"), boost::lexical_cast("0.000157806011543052252390221263353602504629816751263280846430328831365578539218"), boost::lexical_cast("-0.00000379309065442971274677051284817497527219849546159473806845519248661436372460"), boost::lexical_cast("-0.0000000111654147665765272669074902224159897974782540201524920545177291846727682138"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 14) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.2e3c0cp-10f, 0x1.d73cdcp-4f, 0x1.980f08p-1f, 0x1.0b8da8p-2f, -0x1.381b88p-2f, 0x1.a64054p-3f, -0x1.be6cb2p-4f, 0x1.5369f4p-5f, -0x1.e553cp-8f, -0x1.5b9738p-9f, 0x1.3ad93ep-9f, -0x1.6c8658p-11f, 0x1.421438p-16f, 0x1.359cb6p-15f, -0x1.16b1cep-18f, -0x1.1e4702p-19f, 0x1.16b7d8p-21f, -0x1.2a9018p-27f, -0x1.e6603ap-29f, 0x1.ad635ap-33f, -0x1.0b7166p-37f, -0x1.2dcc8ep-43f, 0x1.994c74p-50f, 0x1.d3e7dcp-60f, -0x1.ad34cp-72f, 0x1.c6fd0cp-94f, 0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.ffe6a8p-8f, 0x1.687896p-2f, 0x1.4f6222p-1f, -0x1.9d7a5p+0f, 0x1.ee1a72p-1f, -0x1.3a4c3ep-1f, 0x1.a5124ep-2f, -0x1.fd4714p-3f, 0x1.efeb84p-4f, -0x1.695e5ep-5f, 0x1.73caep-7f, -0x1.fa774ap-10f, 0x1.13b07ep-13f, 0x1.7cb11cp-14f, -0x1.d2ccp-15f, 0x1.74388cp-17f, 0x1.21ff8ap-21f, -0x1.156308p-22f, -0x1.19b91cp-25f, 0x1.f7d83ep-31f, 0x1.509062p-34f, -0x1.405684p-40f, 0x1.6ac07ap-46f, -0x1.9a49fp-55f, -0x1.88bc66p-67f, 0x1.a0541ep-88f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.70e38ep-5f, 0x1.98429p-1f, -0x1.5a23aep+0f, -0x1.ca3a86p-2f, 0x1.f2912p+0f, -0x1.902df6p+0f, 0x1.6e5d8ap-1f, -0x1.7cd74ap-5f, -0x1.cb5138p-3f, 0x1.8970fep-3f, -0x1.2e3ba4p-4f, 0x1.a43728p-9f, 0x1.5d8afap-7f, -0x1.3f213ap-8f, 0x1.438df6p-11f, 0x1.92aaccp-13f, -0x1.4a2a2cp-14f, 0x1.061494p-17f, 0x1.1c615p-21f, -0x1.fed404p-24f, 0x1.9900fap-29f, 0x1.4b71c6p-33f, -0x1.f4e21p-40f, -0x1.ae7642p-50f, 0x1.0753e4p-59f, -0x1.1725d8p-79f, -0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.b64064p-3f, 0x1.b94954p-1f, -0x1.49bc84p+2f, 0x1.255158p+3f, -0x1.254592p+3f, 0x1.bfdd02p+2f, -0x1.258cbp+2f, 0x1.244b68p+1f, -0x1.76e9c8p-1f, 0x1.2db90ep-3f, -0x1.adc00ap-4f, 0x1.077b02p-3f, -0x1.4e1bd4p-4f, 0x1.a8b172p-6f, -0x1.1b67a8p-9f, -0x1.5aa222p-10f, 0x1.0c296ep-11f, -0x1.315112p-14f, -0x1.aa34a6p-23f, 0x1.718ac2p-20f, -0x1.4ed202p-25f, -0x1.6a2c3ep-29f, 0x1.03cb1cp-35f, 0x1.d2ce74p-46f, -0x1.110d8p-54f, 0x1.2175bep-73f, 0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.9bd3bcp-1f, -0x1.218b2p+1f, -0x1.8f073ep-2f, 0x1.10368cp+3f, -0x1.6e5fdp+3f, -0x1.fee6b2p-2f, 0x1.5dae0cp+4f, -0x1.253938p+5f, 0x1.0846cap+5f, -0x1.d3379cp+3f, -0x1.bc1cbep+1f, 0x1.49e86ep+3f, -0x1.e4adep+2f, 0x1.651f3ap+1f, -0x1.14e32ep-2f, -0x1.c20b1ep-3f, 0x1.9dc736p-4f, -0x1.dbb9ecp-7f, -0x1.c7f5c2p-11f, 0x1.a5fc86p-12f, -0x1.07f65ep-16f, -0x1.0e379p-20f, 0x1.69bc58p-26f, 0x1.872aa2p-36f, -0x1.7b8496p-44f, 0x1.92548cp-62f, -0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.29b15ep+1f, -0x1.cfd366p+3f, 0x1.440caap+5f, -0x1.116deap+6f, 0x1.3b639cp+6f, -0x1.0040f6p+6f, 0x1.e6fde6p+4f, 0x1.5c1e9ep+3f, -0x1.b1e5dap+5f, 0x1.7d1f14p+6f, -0x1.d6f4cap+6f, 0x1.9fd808p+6f, -0x1.ecec6ep+5f, 0x1.43fff8p+4f, 0x1.5e941cp-2f, -0x1.d2a078p+1f, 0x1.940e8ap+0f, -0x1.f62a76p-3f, -0x1.2b3b3cp-6f, 0x1.3de2bap-7f, -0x1.21cbeep-11f, -0x1.2150f6p-15f, 0x1.159bf8p-20f, 0x1.b00f5p-30f, -0x1.21e8e2p-37f, 0x1.33590ap-54f, 0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.3069cap+2f, -0x1.2e376ap+5f, 0x1.1366dap+7f, -0x1.37b986p+8f, 0x1.ff3f2ep+8f, -0x1.57d938p+9f, 0x1.9e8b98p+9f, -0x1.c5567ap+9f, 0x1.af9eb4p+9f, -0x1.5e3048p+9f, 0x1.efd932p+8f, -0x1.337ecp+8f, 0x1.1dd7ep+7f, -0x1.34f8d6p+4f, -0x1.1b6424p+5f, 0x1.038eccp+5f, -0x1.9f2074p+3f, 0x1.0d3b24p+1f, 0x1.b93ffcp-3f, -0x1.00284ep-3f, 0x1.52026p-7f, 0x1.4b932p-11f, -0x1.d3b086p-16f, -0x1.e9753p-25f, 0x1.e5cedp-32f, -0x1.0188e4p-47f, -0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.f579b2p+2f, -0x1.13b9ccp+6f, 0x1.0d0d04p+8f, -0x1.309a86p+9f, 0x1.b8e262p+9f, -0x1.b08b28p+9f, 0x1.3c7d2cp+9f, -0x1.7e7dfp+8f, 0x1.9c8804p+5f, 0x1.dc1752p+8f, -0x1.e54a04p+9f, 0x1.1a42e2p+10f, -0x1.f903f4p+9f, 0x1.9d8dbap+9f, -0x1.34174p+9f, 0x1.64eb3cp+8f, -0x1.0b0c44p+7f, 0x1.5f0a54p+4f, 0x1.d8f6bap+1f, -0x1.1c758ap+1f, 0x1.f38ac2p-3f, 0x1.f827p-7f, -0x1.130614p-10f, -0x1.2dc514p-19f, 0x1.1d494ap-25f, -0x1.2e8464p-40f, 0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.e32cc2p+2f, -0x1.1692cap+6f, 0x1.1fa09cp+8f, -0x1.615e68p+9f, 0x1.265c8cp+10f, -0x1.7569eep+10f, 0x1.9e96bep+10f, -0x1.bbbe16p+10f, 0x1.be0802p+10f, -0x1.8f099cp+10f, 0x1.43b838p+10f, -0x1.ee6ad6p+9f, 0x1.58d562p+9f, -0x1.a3b282p+8f, 0x1.c79d62p+7f, -0x1.bc78ccp+6f, 0x1.418e36p+5f, -0x1.3abf36p+2f, -0x1.ad7bb4p+1f, 0x1.a65502p+0f, -0x1.affdcep-3f, -0x1.8341cep-7f, 0x1.b5571p-10f, 0x1.e32174p-19f, -0x1.c53c14p-24f, 0x1.e0c27p-38f, -0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.8d1f8ap+2f, -0x1.d4881ap+5f, 0x1.e86d42p+7f, -0x1.280028p+9f, 0x1.d3eb6p+9f, -0x1.0b82a6p+10f, 0x1.07ceap+10f, -0x1.0d7822p+10f, 0x1.0df61ep+10f, -0x1.c6893ap+9f, 0x1.45ac9ep+9f, -0x1.c9d686p+8f, 0x1.35c4c4p+8f, -0x1.4a58bep+7f, 0x1.01755ap+6f, -0x1.5d1ba8p+4f, 0x1.dadd4ap+1f, 0x1.87b02p+2f, -0x1.9ab15ep+2f, 0x1.46cd6ap+1f, -0x1.8955d8p-2f, -0x1.85245p-7f, 0x1.6f86d4p-8f, 0x1.1b4e3cp-16f, -0x1.7914d8p-21f, 0x1.903b4cp-34f, -0x0p+0f}; - } - if constexpr (order == 10) { - return {0x0p+0f, 0x1.041a0ap+1f, -0x1.3658b6p+4f, 0x1.5194bp+6f, -0x1.c3df82p+7f, 0x1.ad183ep+8f, -0x1.3d9c78p+9f, 0x1.852da4p+9f, -0x1.9cca18p+9f, 0x1.9a6efap+9f, -0x1.a300c2p+9f, 0x1.a73548p+9f, -0x1.7a384cp+9f, 0x1.2afd88p+9f, -0x1.d0f63ap+8f, 0x1.6384c4p+8f, -0x1.d6c26ap+7f, 0x1.089826p+7f, -0x1.1f7e84p+6f, 0x1.2a5702p+5f, -0x1.c18aa4p+3f, 0x1.4dc138p+1f, 0x1.bd5ac2p-5f, -0x1.1aa942p-4f, -0x1.97678cp-14f, 0x1.25b3fcp-16f, -0x1.381ffp-28f, 0x0p+0f}; - } - if constexpr (order == 11) { - return {0x0p+0f, 0x1.456a1ep+0f, -0x1.86731ep+3f, 0x1.99ddaep+5f, -0x1.ebccc2p+6f, 0x1.74f85ep+7f, -0x1.842622p+7f, 0x1.4fbcc2p+7f, -0x1.4776cp+7f, 0x1.573bfp+7f, -0x1.2b0c28p+7f, 0x1.bb5bcap+6f, -0x1.580802p+6f, 0x1.0c1df4p+6f, -0x1.5dea02p+5f, 0x1.997fcap+4f, -0x1.f5c414p+3f, 0x1.1578f4p+3f, -0x1.e11a4cp+1f, 0x1.8c2f5ap+0f, -0x1.42cddep-1f, 0x1.1b3752p-3f, 0x1.61bca4p-7f, -0x1.eeca78p-8f, 0x1.427b38p-14f, 0x1.1c6c3p-18f, -0x1.2f0566p-29f, 0x0p+0f}; - } - if constexpr (order == 12) { - return {0x0p+0f, 0x1.45a484p-2f, -0x1.87cf9ep+1f, 0x1.99aecep+3f, -0x1.e335dep+4f, 0x1.5e3842p+5f, -0x1.48839ep+5f, 0x1.e11a8p+4f, -0x1.bff278p+4f, 0x1.f68b7p+4f, -0x1.a9c89cp+4f, 0x1.147ddap+4f, -0x1.a10eep+3f, 0x1.5d8bap+3f, -0x1.b0eecp+2f, 0x1.b18092p+1f, -0x1.11a2d4p+1f, 0x1.45b0dap+0f, -0x1.d74084p-2f, 0x1.27c112p-3f, -0x1.2ee6a8p-4f, 0x1.0ad11p-6f, 0x1.b719aep-8f, -0x1.7b5726p-9f, 0x1.efe0e8p-14f, 0x1.11683ap-18f, -0x1.24c158p-28f, -0x0p+0f}; - } - if constexpr (order == 13) { - return {0x0p+0f, 0x1.439a96p-5f, -0x1.85e5f8p-2f, 0x1.959ab6p+0f, -0x1.d59128p+1f, 0x1.43a656p+2f, -0x1.0a2c06p+2f, 0x1.27395p+1f, -0x1.050c8cp+1f, 0x1.600ea8p+1f, -0x1.21f61ap+1f, 0x1.19f0e6p+0f, -0x1.8e2104p-1f, 0x1.a07f28p-1f, -0x1.ccce86p-2f, 0x1.e56138p-4f, -0x1.5df48cp-4f, 0x1.19d3fp-4f, -0x1.9e6cdp-9f, -0x1.b966bep-7f, 0x1.824078p-9f, -0x1.1b05a2p-9f, 0x1.7f8554p-9f, -0x1.23710ep-10f, 0x1.cc575ap-14f, 0x1.1f2382p-18f, -0x1.3697eap-27f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.2e3c0bb3f3ad5p-10, 0x1.d73cdc4f17148p-4, 0x1.980f074dbd462p-1, 0x1.0b8da7807c274p-2, -0x1.381b88314120bp-2, 0x1.a64053bd4da41p-3, -0x1.be6cb26620f84p-4, 0x1.5369f32b472a9p-5, -0x1.e553bfb83c482p-8, -0x1.5b97376b07916p-9, 0x1.3ad93e070eb7ap-9, -0x1.6c8658d1b206ep-11, 0x1.421437e7b839dp-16, 0x1.359cb55b7d336p-15, -0x1.16b1cde08937ep-18, -0x1.1e470298289aep-19, 0x1.16b7d7c52ecb7p-21, -0x1.2a9017a9058edp-27, -0x1.e6603a12c622p-29, 0x1.ad635a5532adap-33, -0x1.0b7166f3d598p-37, -0x1.2dcc8d3c8b0cfp-43, 0x1.994c7452dcd31p-50, 0x1.d3e7db27a70eep-60, -0x1.ad34c0383fa64p-72, 0x1.c6fd0b1a8d6a3p-94, 0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.ffe6a833f41d2p-8, 0x1.6878956519ce3p-2, 0x1.4f62227264623p-1, -0x1.9d7a4f00f9dcp+0, 0x1.ee1a7236f71e4p-1, -0x1.3a4c3d150c11ep-1, 0x1.a5124e1ab47a9p-2, -0x1.fd47140509eb3p-3, 0x1.efeb8355fd2f8p-4, -0x1.695e5e5e49cf8p-5, 0x1.73cae05387f64p-7, -0x1.fa774911ba2d4p-10, 0x1.13b07ddddb3b8p-13, 0x1.7cb11c0b4280bp-14, -0x1.d2cbfff6e2a58p-15, 0x1.74388c9fd28e7p-17, 0x1.21ff895bfb5f3p-21, -0x1.156307b5c128cp-22, -0x1.19b91bff8bef5p-25, 0x1.f7d83e4d41c77p-31, 0x1.5090626b206a4p-34, -0x1.405683426ad01p-40, 0x1.6ac079eed130ep-46, -0x1.9a49f0637a3b6p-55, -0x1.88bc66cc087f2p-67, 0x1.a0541eb1bdcebp-88, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.70e38d13c6dcdp-5, 0x1.98429094e12d2p-1, -0x1.5a23aee5cfcf3p+0, -0x1.ca3a85e30ebf6p-2, 0x1.f2911f6caea6bp+0, -0x1.902df5acb9856p+0, 0x1.6e5d8a32fe3aep-1, -0x1.7cd7499a11b88p-5, -0x1.cb51389df1437p-3, 0x1.8970fdea96db5p-3, -0x1.2e3ba43116d4fp-4, 0x1.a437288ed51abp-9, 0x1.5d8afaeb5ec2ap-7, -0x1.3f213a25a4c3ap-8, 0x1.438df66495fedp-11, 0x1.92aacb344e1abp-13, -0x1.4a2a2b6937dcap-14, 0x1.061494c076ea5p-17, 0x1.1c61500cd5ff6p-21, -0x1.fed404b96c72ep-24, 0x1.9900fa8d5cb81p-29, 0x1.4b71c6cbb7be3p-33, -0x1.f4e20f23251aap-40, -0x1.ae764159a5bb6p-50, 0x1.0753e4c918ed7p-59, -0x1.1725d8c4676c4p-79, -0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.b6406454732d5p-3, 0x1.b949541f458cep-1, -0x1.49bc84198d8efp+2, 0x1.255157167a553p+3, -0x1.254591e8b6e07p+3, 0x1.bfdd01aa9e691p+2, -0x1.258cb0e12f408p+2, 0x1.244b687910818p+1, -0x1.76e9c86768fd8p-1, 0x1.2db90e1b7e224p-3, -0x1.adc00aab7f786p-4, 0x1.077b01cdc29aap-3, -0x1.4e1bd3d7c8107p-4, 0x1.a8b1719f7696ap-6, -0x1.1b67a8fdd5d39p-9, -0x1.5aa2219e8b072p-10, 0x1.0c296ebe05b6fp-11, -0x1.315112d6e2649p-14, -0x1.aa34a64782e4p-23, 0x1.718ac2125512ep-20, -0x1.4ed202350e6d4p-25, -0x1.6a2c3e7b115c9p-29, 0x1.03cb1bd946e2ep-35, 0x1.d2ce73e99c294p-46, -0x1.110d7f1b0bfcp-54, 0x1.2175be08d4af4p-73, 0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.9bd3bc2473961p-1, -0x1.218b20c923a73p+1, -0x1.8f073ee248543p-2, 0x1.10368c3ad14ecp+3, -0x1.6e5fd027a16b4p+3, -0x1.fee6b19288529p-2, 0x1.5dae0c64ec101p+4, -0x1.253938fa65f9dp+5, 0x1.0846ca351ee33p+5, -0x1.d3379cfd6d393p+3, -0x1.bc1cbd5de053bp+1, 0x1.49e86d68d4cf9p+3, -0x1.e4ade08c4a6c3p+2, 0x1.651f390634957p+1, -0x1.14e32e1f9b6bbp-2, -0x1.c20b1d287136bp-3, 0x1.9dc73570ee73fp-4, -0x1.dbb9ebdd9c09ep-7, -0x1.c7f5c1ec60f69p-11, 0x1.a5fc856e52fadp-12, -0x1.07f65daa0049bp-16, -0x1.0e378f07aff0ap-20, 0x1.69bc58d5ec0cdp-26, 0x1.872aa1bcf3687p-36, -0x1.7b84969608017p-44, 0x1.92548cc9b5b72p-62, -0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.29b15e8e05f49p+1, -0x1.cfd365d614528p+3, 0x1.440caad9c1236p+5, -0x1.116de9d813b39p+6, 0x1.3b639c503b3cfp+6, -0x1.0040f57e975e2p+6, 0x1.e6fde6a95ce33p+4, 0x1.5c1e9e155aab8p+3, -0x1.b1e5da7957b3dp+5, 0x1.7d1f138d16b9dp+6, -0x1.d6f4cad7bdd83p+6, 0x1.9fd808c31039p+6, -0x1.ecec6e1a57ab4p+5, 0x1.43fff7220eba4p+4, 0x1.5e941cd01c025p-2, -0x1.d2a0789936f64p+1, 0x1.940e89f9fbe3cp+0, -0x1.f62a7689777abp-3, -0x1.2b3b3b35a2041p-6, 0x1.3de2ba1c1b055p-7, -0x1.21cbeea2dd955p-11, -0x1.2150f65158194p-15, 0x1.159bf889454c7p-20, 0x1.b00f4f96ce851p-30, -0x1.21e8e13c855cp-37, 0x1.3359091107974p-54, 0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.3069c9b572d78p+2, -0x1.2e376983f6cb7p+5, 0x1.1366d92966ea1p+7, -0x1.37b9852173f07p+8, 0x1.ff3f2db6a15a4p+8, -0x1.57d9383606e5p+9, 0x1.9e8b97533b1ebp+9, -0x1.c556790a27e1dp+9, 0x1.af9eb47abc08ep+9, -0x1.5e3047bf51b55p+9, 0x1.efd9329bb40ffp+8, -0x1.337ec090261a6p+8, 0x1.1dd7e09a26691p+7, -0x1.34f8d53391e96p+4, -0x1.1b6423ffa4135p+5, 0x1.038ecbdebefe4p+5, -0x1.9f2073b507554p+3, 0x1.0d3b2378aacf2p+1, 0x1.b93ffbdcbcfbdp-3, -0x1.00284db90f95bp-3, 0x1.5202609236b6cp-7, 0x1.4b9320a57f232p-11, -0x1.d3b085775602bp-16, -0x1.e975304f42064p-25, 0x1.e5cecfa6ab7bbp-32, -0x1.0188e4a2f5a9ep-47, -0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.f579b17074e37p+2, -0x1.13b9cbe766167p+6, 0x1.0d0d0432bec13p+8, -0x1.309a86e68bfeap+9, 0x1.b8e26231ea03fp+9, -0x1.b08b284517ec4p+9, 0x1.3c7d2b2624502p+9, -0x1.7e7def0dd6c18p+8, 0x1.9c880448390e6p+5, 0x1.dc1752cc2f2f8p+8, -0x1.e54a03fbbc2fap+9, 0x1.1a42e1dae569p+10, -0x1.f903f4a18c30ep+9, 0x1.9d8db91908386p+9, -0x1.34173ffb143e2p+9, 0x1.64eb3c27db565p+8, -0x1.0b0c43171fee6p+7, 0x1.5f0a5375d11c7p+4, 0x1.d8f6b9f1522f3p+1, -0x1.1c75896d6d599p+1, 0x1.f38ac1a749dafp-3, 0x1.f82700b4dc727p-7, -0x1.1306135d4672fp-10, -0x1.2dc514d699914p-19, 0x1.1d494ae1d331fp-25, -0x1.2e8464bcec8d4p-40, 0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.e32cc25ea4da5p+2, -0x1.1692ca6458eaap+6, 0x1.1fa09c1316dfbp+8, -0x1.615e67f0c1ccdp+9, 0x1.265c8c1b4b1aap+10, -0x1.7569ed1c8210dp+10, 0x1.9e96bde5063d4p+10, -0x1.bbbe167a38d63p+10, 0x1.be080201e737dp+10, -0x1.8f099bdabb219p+10, 0x1.43b83815e15a6p+10, -0x1.ee6ad68b3bda5p+9, 0x1.58d561cb84d26p+9, -0x1.a3b282a8407a3p+8, 0x1.c79d620ffafcp+7, -0x1.bc78cb9447aa1p+6, 0x1.418e35902e32dp+5, -0x1.3abf360acc2f7p+2, -0x1.ad7bb3867b3c3p+1, 0x1.a655024ebf2fdp+0, -0x1.affdcd4718ba8p-3, -0x1.8341cd6c6b0aap-7, 0x1.b55710d3ebf55p-10, 0x1.e321738ab1448p-19, -0x1.c53c1373c8858p-24, 0x1.e0c270acb15c6p-38, -0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.8d1f8a3279763p+2, -0x1.d4881995a0c1fp+5, 0x1.e86d414a78e34p+7, -0x1.280027c9b0876p+9, 0x1.d3eb5f0b0594cp+9, -0x1.0b82a55c2799fp+10, 0x1.07ce9f70ddb28p+10, -0x1.0d7822536789ep+10, 0x1.0df61d2a506b2p+10, -0x1.c6893ac6cda6bp+9, 0x1.45ac9e8089788p+9, -0x1.c9d686e237044p+8, 0x1.35c4c3819b31p+8, -0x1.4a58be360f4f4p+7, 0x1.017559c35f761p+6, -0x1.5d1ba7f134742p+4, 0x1.dadd49a935c84p+1, 0x1.87b01fd4326a3p+2, -0x1.9ab15d247f91p+2, 0x1.46cd6a0d33a49p+1, -0x1.8955d7defe0d5p-2, -0x1.85244f4e65bbcp-7, 0x1.6f86d3c431061p-8, 0x1.1b4e3c12a74ep-16, -0x1.7914d82d3193fp-21, 0x1.903b4b44dd8c8p-34, -0x0p+0}; - } - if constexpr (order == 10) { - return {0x0p+0, 0x1.041a0a897aa29p+1, -0x1.3658b5d77609ep+4, 0x1.5194af04e2f85p+6, -0x1.c3df81f0aaf29p+7, 0x1.ad183e8db3dacp+8, -0x1.3d9c782d70077p+9, 0x1.852da35362a6dp+9, -0x1.9cca18f6947ddp+9, 0x1.9a6efa498935ep+9, -0x1.a300c2ebdd39dp+9, 0x1.a735477cbff1cp+9, -0x1.7a384b1c312fcp+9, 0x1.2afd886ee72d7p+9, -0x1.d0f63946d275bp+8, 0x1.6384c4a13f54ep+8, -0x1.d6c269ce8bf35p+7, 0x1.08982647618p+7, -0x1.1f7e83a071123p+6, 0x1.2a5701b5bea0ep+5, -0x1.c18aa4ec1159bp+3, 0x1.4dc13861658a9p+1, 0x1.bd5ac19033245p-5, -0x1.1aa94170fffadp-4, -0x1.97678bd8dc9fap-14, 0x1.25b3fc23ddcf6p-16, -0x1.381fef501218fp-28, 0x0p+0}; - } - if constexpr (order == 11) { - return {0x0p+0, 0x1.456a1d2a45d0dp+0, -0x1.86731e38f2c9fp+3, 0x1.99ddae9b5957ep+5, -0x1.ebccc1d5d759ap+6, 0x1.74f85dd906949p+7, -0x1.8426225b26444p+7, 0x1.4fbcc1bdf3f19p+7, -0x1.4776c0e99319fp+7, 0x1.573bef3fda7ebp+7, -0x1.2b0c271bd883ep+7, 0x1.bb5bca80b625p+6, -0x1.5808025c93fa5p+6, 0x1.0c1df40cf5e4cp+6, -0x1.5dea01151a3e2p+5, 0x1.997fc95198574p+4, -0x1.f5c4140f2a03ep+3, 0x1.1578f4041624bp+3, -0x1.e11a4c4784826p+1, 0x1.8c2f5a8cae554p+0, -0x1.42cdddde9b71fp-1, 0x1.1b37523680cdap-3, 0x1.61bca3fd3effbp-7, -0x1.eeca78cc1dd9bp-8, 0x1.427b3775515b6p-14, 0x1.1c6c30fb5472dp-18, -0x1.2f056506ce5e6p-29, 0x0p+0}; - } - if constexpr (order == 12) { - return {0x0p+0, 0x1.45a484f799a72p-2, -0x1.87cf9eab4f4p+1, 0x1.99aecd437634bp+3, -0x1.e335dd2c6e9dep+4, 0x1.5e3841e21950ap+5, -0x1.48839e048b83dp+5, 0x1.e11a7f30735e3p+4, -0x1.bff27724d4104p+4, 0x1.f68b6fe2ccc31p+4, -0x1.a9c89c30bca22p+4, 0x1.147ddad811d2bp+4, -0x1.a10ee0eb1ccb6p+3, 0x1.5d8b9ffe3cdb9p+3, -0x1.b0eebf69279fp+2, 0x1.b180929e1a69bp+1, -0x1.11a2d370771cap+1, 0x1.45b0d998cab37p+0, -0x1.d74083eaced41p-2, 0x1.27c1113b5bdb8p-3, -0x1.2ee6a8512694ep-4, 0x1.0ad11030da229p-6, 0x1.b719ad4ae716p-8, -0x1.7b5726cd7507bp-9, 0x1.efe0e7fbce7f4p-14, 0x1.116839f7247aep-18, -0x1.24c158fd367dfp-28, -0x0p+0}; - } - if constexpr (order == 13) { - return {0x0p+0, 0x1.439a95b32a47fp-5, -0x1.85e5f8ce20b7p-2, 0x1.959ab595a2ea4p+0, -0x1.d591277dff53ep+1, 0x1.43a6564933b3fp+2, -0x1.0a2c05cc597abp+2, 0x1.273950f6ffd18p+1, -0x1.050c8b9cb84b8p+1, 0x1.600ea820111dp+1, -0x1.21f61a844a105p+1, 0x1.19f0e6ef31a0dp+0, -0x1.8e2103144a726p-1, 0x1.a07f2894f970fp-1, -0x1.ccce8527cee5cp-2, 0x1.e56137866a825p-4, -0x1.5df48c0c87cd7p-4, 0x1.19d3f039c46cep-4, -0x1.9e6cd0f61f4cbp-9, -0x1.b966bdf45728ap-7, 0x1.8240771a20728p-9, -0x1.1b05a2f57f924p-9, 0x1.7f8554959f4a5p-9, -0x1.23710df832eb2p-10, 0x1.cc575afdf3f3dp-14, 0x1.1f238196ae22ep-18, -0x1.3697e9bf4306ap-27, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0x9.71e05d9f9d6a6a5p-13L, 0xe.b9e6e278b8a3ea8p-7L, 0xc.c0783a6dea3101cp-4L, 0x8.5c6d3c03e139c58p-5L, -0x9.c0dc418a090583bp-5L, 0xd.32029dea6d20a27p-6L, -0xd.f365933107c2191p-7L, 0xa.9b4f995a39545fcp-8L, -0xf.2a9dfdc1e240f71p-11L, -0xa.dcb9bb583c8b013p-12L, 0x9.d6c9f03875bcf99p-12L, -0xb.6432c68d9036eap-14L, 0xa.10a1bf3dc1ce972p-19L, 0x9.ace5aadbe99adaep-18L, -0x8.b58e6f0449bf329p-21L, -0x8.f23814c144d7229p-22L, 0x8.b5bebe29765b5fbp-24L, -0x9.5480bd482c76432p-30L, -0xf.3301d09631101f2p-32L, 0xd.6b1ad2a9956cecp-36L, -0x8.5b8b379eacc020ep-40L, -0x9.6e6469e45867b18p-46L, 0xc.ca63a296e698604p-53L, 0xe.9f3ed93d387731ep-63L, -0xd.69a601c1fd321e5p-75L, 0xe.37e858d46b515bp-97L, 0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xf.ff35419fa0e8f21p-11L, 0xb.43c4ab28ce718b1p-5L, 0xa.7b11139323118aep-4L, -0xc.ebd27807cee01bp-3L, 0xf.70d391b7b8f1d7fp-4L, -0x9.d261e8a8608ee81p-4L, 0xd.289270d5a3d484p-5L, -0xf.ea38a0284f599d4p-6L, 0xf.7f5c1aafe97c0a1p-7L, -0xb.4af2f2f24e7c239p-8L, 0xb.9e57029c3fb215dp-10L, -0xf.d3ba488dd169dd9p-13L, 0x8.9d83eeeed9dc1b7p-16L, 0xb.e588e05a14054ecp-17L, -0xe.965fffb7152c15fp-18L, 0xb.a1c464fe94734f4p-20L, 0x9.0ffc4adfdaf948bp-24L, -0x8.ab183dae09460bbp-25L, -0x8.cdc8dffc5f7a7c4p-28L, 0xf.bec1f26a0e3b7cap-34L, 0xa.84831359035218p-37L, -0xa.02b41a135680872p-43L, 0xb.5603cf768986fc1p-49L, -0xc.d24f831bd1db255p-58L, -0xc.45e3366043f8eabp-70L, 0xd.02a0f58dee755b1p-91L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xb.871c689e36e67b2p-8L, 0xc.c21484a70968caap-4L, -0xa.d11d772e7e79982p-3L, -0xe.51d42f1875fb05dp-5L, 0xf.9488fb657535621p-3L, -0xc.816fad65cc2b1fep-3L, 0xb.72ec5197f1d73dap-4L, -0xb.e6ba4cd08dc3e1ep-8L, -0xe.5a89c4ef8a1b6aap-6L, 0xc.4b87ef54b6da459p-6L, -0x9.71dd2188b6a770fp-7L, 0xd.21b94476a8d5992p-12L, 0xa.ec57d75af6152bbp-10L, -0x9.f909d12d261cd27p-11L, 0xa.1c6fb324aff682bp-14L, 0xc.955659a270d5623p-16L, -0xa.51515b49bee533ep-17L, 0x8.30a4a603b752616p-20L, 0x8.e30a8066affb01ep-24L, -0xf.f6a025cb63973cp-27L, 0xc.c807d46ae5c0b92p-32L, 0xa.5b8e365dbdf1a9dp-36L, -0xf.a710791928d528ap-43L, -0xd.73b20acd2ddae47p-53L, 0x8.3a9f2648c76b5adp-62L, -0x8.b92ec6233b61c8p-82L, -0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xd.b20322a3996a6a2p-6L, 0xd.ca4aa0fa2c66c04p-4L, -0xa.4de420cc6c77707p-1L, 0x9.2a8ab8b3d2a9452p+0L, -0x9.2a2c8f45b7035d6p+0L, 0xd.fee80d54f348b5ap-1L, -0x9.2c6587097a03f3cp-1L, 0x9.225b43c8840bfbbp-2L, -0xb.b74e433b47ec0d7p-4L, 0x9.6dc870dbf111c84p-6L, -0xd.6e00555bfbc3311p-7L, 0x8.3bd80e6e14d4ep-6L, -0xa.70de9ebe40837ffp-7L, 0xd.458b8cfbb4b4fcp-9L, -0x8.db3d47eeae9cad3p-12L, -0xa.d5110cf4583900cp-13L, 0x8.614b75f02db74e4p-14L, -0x9.8a8896b713246b3p-17L, -0xd.51a5323c171fee3p-26L, 0xb.8c561092a896f33p-23L, -0xa.769011a8736a082p-28L, -0xb.5161f3d88ae4a18p-32L, 0x8.1e58deca3716d7bp-38L, 0xe.96739f4ce14a1ebp-49L, -0x8.886bf8d85fdfe26p-57L, 0x9.0badf046a579ce9p-76L, 0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xc.de9de1239cb046fp-4L, -0x9.0c5906491d3955ap-2L, -0xc.7839f71242a14d4p-5L, 0x8.81b461d68a76009p+0L, -0xb.72fe813d0b59fd4p+0L, -0xf.f7358c9442947e5p-5L, 0xa.ed7063276080604p+1L, -0x9.29c9c7d32fce6e5p+2L, 0x8.423651a8f719bep+2L, -0xe.99bce7eb69c9558p+0L, -0xd.e0e5eaef029d8dap-2L, 0xa.4f436b46a67c643p+0L, -0xf.256f04625361643p-1L, 0xb.28f9c831a4ab6f7p-2L, -0x8.a71970fcdb5d61fp-5L, -0xe.1058e94389b55dfp-6L, 0xc.ee39ab87739f9d3p-7L, -0xe.ddcf5eece04ef66p-10L, -0xe.3fae0f6307b4b7dp-14L, 0xd.2fe42b7297d6b86p-15L, -0x8.3fb2ed50024d845p-19L, -0x8.71bc783d7f852p-23L, 0xb.4de2c6af60665f8p-29L, 0xc.39550de79b43b5p-39L, -0xb.dc24b4b0400b683p-47L, 0xc.92a4664dadb8e43p-65L, -0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0x9.4d8af4702fa4917p-2L, -0xe.7e9b2eb0a293c0dp+0L, 0xa.206556ce091b04p+2L, -0x8.8b6f4ec09d9c51ap+3L, 0x9.db1ce281d9e7bffp+3L, -0x8.0207abf4baf0d13p+3L, 0xf.37ef354ae719481p+1L, 0xa.e0f4f0aad55bdb4p+0L, -0xd.8f2ed3cabd9e47dp+2L, 0xb.e8f89c68b5ce98dp+3L, -0xe.b7a656bdeec15e3p+3L, 0xc.fec0461881c7ecfp+3L, -0xf.676370d2bd59da4p+2L, 0xa.1fffb91075d1ef3p+1L, 0xa.f4a0e680e012488p-5L, -0xe.9503c4c9b7b1e2cp-2L, 0xc.a0744fcfdf1dc88p-3L, -0xf.b153b44bbbd55dap-6L, -0x9.59d9d9ad1020acfp-9L, 0x9.ef15d0e0d82a945p-10L, -0x9.0e5f7516ecaaaccp-14L, -0x9.0a87b28ac0c9fb1p-18L, 0x8.acdfc44a2a6359cp-23L, 0xd.807a7cb67428b3fp-33L, -0x9.0f4709e42ae00f3p-40L, 0x9.9ac848883cba3fep-57L, 0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0x9.834e4dab96bc376p-1L, -0x9.71bb4c1fb65b59dp+2L, 0x8.9b36c94b3750b19p+4L, -0x9.bdcc290b9f8378cp+5L, 0xf.f9f96db50ad1ec4p+5L, -0xa.bec9c1b0372837ap+6L, 0xc.f45cba99d8f5737p+6L, -0xe.2ab3c8513f0ea1bp+6L, 0xd.7cf5a3d5e047047p+6L, -0xa.f1823dfa8daa614p+6L, 0xf.7ec994dda07fb22p+5L, -0x9.9bf6048130d2edbp+5L, 0x8.eebf04d13348a6p+4L, -0x9.a7c6a99c8f4aeedp+1L, -0x8.db211ffd209a6f3p+2L, 0x8.1c765ef5f7f1ce5p+2L, -0xc.f9039da83aa9c29p+0L, 0x8.69d91bc55678fabp-2L, 0xd.c9ffdee5e7de57ep-6L, -0x8.01426dc87cadac2p-6L, 0xa.90130491b5b5f4ep-10L, 0xa.5c99052bf919189p-14L, -0xe.9d842bbab01556cp-19L, -0xf.4ba9827a103207ap-28L, 0xf.2e767d355bddaa1p-35L, -0x8.0c472517ad4ef83p-50L, -0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0xf.abcd8b83a71b41bp-1L, -0x8.9dce5f3b30b3793p+3L, 0x8.68682195f609a67p+5L, -0x9.84d437345ff4c4dp+6L, 0xd.c713118f501f476p+6L, -0xd.84594228bf62173p+6L, 0x9.e3e95931228123cp+6L, -0xb.f3ef786eb60bf83p+5L, 0xc.e4402241c87301dp+2L, 0xe.e0ba9661797c21bp+5L, -0xf.2a501fdde17d235p+6L, 0x8.d2170ed72b4825ep+7L, -0xf.c81fa50c6187197p+6L, 0xc.ec6dc8c841c327ep+6L, -0x9.a0b9ffd8a1f0ecfp+6L, 0xb.2759e13edab26a3p+5L, -0x8.586218b8ff72c95p+4L, 0xa.f8529bae88e396ep+1L, 0xe.c7b5cf8a917974bp-2L, -0x8.e3ac4b6b6acc633p-2L, 0xf.9c560d3a4ed77bcp-6L, 0xf.c13805a6e393a55p-10L, -0x8.98309aea3397895p-13L, -0x9.6e28a6b4cc8a06ep-22L, 0x8.ea4a570e998fa08p-28L, -0x9.742325e7646a08p-43L, 0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0xf.196612f526d24c2p-1L, -0x8.b4965322c754f1cp+3L, 0x8.fd04e098b6fda5ap+5L, -0xb.0af33f860e6644cp+6L, 0x9.32e460da58d525ap+7L, -0xb.ab4f68e4108651p+7L, 0xc.f4b5ef2831ea0e8p+7L, -0xd.ddf0b3d1c6b1944p+7L, 0xd.f040100f39be9b8p+7L, -0xc.784cded5d90c4c7p+7L, 0xa.1dc1c0af0ad3159p+7L, -0xf.7356b459ded2772p+6L, 0xa.c6ab0e5c26933f6p+6L, -0xd.1d94154203d1881p+5L, 0xe.3ceb107fd7e02c5p+4L, -0xd.e3c65ca23d50927p+3L, 0xa.0c71ac8171966e8p+2L, -0x9.d5f9b056617ba17p-1L, -0xd.6bdd9c33d9e1582p-2L, 0xd.32a81275f97ea1cp-3L, -0xd.7fee6a38c5d3f8dp-6L, -0xc.1a0e6b635854ea4p-10L, 0xd.aab8869f5faa95cp-13L, 0xf.190b9c558a2439ep-22L, -0xe.29e09b9e442c27dp-27L, 0xf.061385658ae2fdbp-41L, -0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0xc.68fc5193cbb1b7bp-1L, -0xe.a440ccad060f512p+2L, 0xf.436a0a53c719d99p+4L, -0x9.40013e4d843ac8dp+6L, 0xe.9f5af8582ca613bp+6L, -0x8.5c152ae13ccf6f4p+7L, 0x8.3e74fb86ed9434dp+7L, -0x8.6bc1129b3c4ec82p+7L, 0x8.6fb0e9528358fc8p+7L, -0xe.3449d6366d35aadp+6L, 0xa.2d64f4044bc4118p+6L, -0xe.4eb43711b821ef6p+5L, 0x9.ae261c0cd987cdbp+5L, -0xa.52c5f1b07a7a10fp+4L, 0x8.0baace1afbb0855p+3L, -0xa.e8dd3f89a3a1196p+1L, 0xe.d6ea4d49ae41ca2p-2L, 0xc.3d80fea19351b34p-1L, -0xc.d58ae923fc87cffp-1L, 0xa.366b50699d24558p-2L, -0xc.4aaebef7f06a90cp-5L, -0xc.29227a732dde266p-10L, 0xb.7c369e218830b25p-11L, 0x8.da71e0953a6ff91p-19L, -0xb.c8a6c1698c9facp-24L, 0xc.81da5a26ec63e05p-37L, -0x0p+0L}; - } - if constexpr (order == 10) { - return {0x0p+0L, 0x8.20d0544bd51475ap-2L, -0x9.b2c5aebbb04f3ccp+1L, 0xa.8ca5782717c2461p+3L, -0xe.1efc0f8557945e6p+4L, 0xd.68c1f46d9ed5f43p+5L, -0x9.ece3c16b803b8afp+6L, 0xc.296d1a9b1536a08p+6L, -0xc.e650c7b4a3ee86bp+6L, 0xc.d377d24c49af172p+6L, -0xd.1806175ee9ce931p+6L, 0xd.39aa3be5ff8dcb3p+6L, -0xb.d1c258e1897df15p+6L, 0x9.57ec4377396b8b8p+6L, -0xe.87b1ca3693ad8c6p+5L, 0xb.1c262509faa6e0bp+5L, -0xe.b6134e745f9a70dp+4L, 0x8.44c1323b0bffc57p+4L, -0x8.fbf41d038891ad4p+3L, 0x9.52b80dadf506ef2p+2L, -0xe.0c5527608acdb69p+0L, 0xa.6e09c30b2c546eap-2L, 0xd.ead60c819922651p-8L, -0x8.d54a0b87ffd6b8cp-7L, -0xc.bb3c5ec6e4fd2a6p-17L, 0x9.2d9fe11eee7aff2p-19L, -0x9.c0ff7a8090c74e6p-31L, 0x0p+0L}; - } - if constexpr (order == 11) { - return {0x0p+0L, 0xa.2b50e9522e86a75p-3L, -0xc.3398f1c7964f4dfp+0L, 0xc.ceed74dacabed45p+2L, -0xf.5e660eaebacd068p+3L, 0xb.a7c2eec834a457bp+4L, -0xc.213112d93221da7p+4L, 0xa.7de60def9f8cb1ep+4L, -0xa.3bb6074c98cfb0fp+4L, 0xa.b9df79fed3f56f5p+4L, -0x9.586138dec41f121p+4L, 0xd.dade5405b127d2ep+3L, -0xa.c04012e49fd2735p+3L, 0x8.60efa067af26275p+3L, -0xa.ef5008a8d1f0cbfp+2L, 0xc.cbfe4a8cc2b9da9p+1L, -0xf.ae20a079501f01bp+0L, 0x8.abc7a020b125872p+0L, -0xf.08d2623c2412c59p-2L, 0xc.617ad46572a9f45p-3L, -0xa.166eeef4db8f41bp-4L, 0x8.d9ba91b4066cd0bp-6L, 0xb.0de51fe9f7fd8e2p-10L, -0xf.7653c660eecd46ap-11L, 0xa.13d9bbaa8adb22dp-17L, 0x8.e36187daa39648ep-21L, -0x9.782b283672f30cdp-32L, 0x0p+0L}; - } - if constexpr (order == 12) { - return {0x0p+0L, 0xa.2d2427bccd39172p-5L, -0xc.3e7cf55a7a0039fp-2L, 0xc.cd766a1bb1a58d8p+0L, -0xf.19aee96374ef183p+1L, 0xa.f1c20f10ca84c7dp+2L, -0xa.441cf0245c1e989p+2L, 0xf.08d3f9839af181p+1L, -0xd.ff93b926a081d89p+1L, 0xf.b45b7f166618b46p+1L, -0xd.4e44e185e5110d4p+1L, 0x8.a3eed6c08e9589p+1L, -0xd.08770758e65b254p+0L, 0xa.ec5cfff1e6dc48ap+0L, -0xd.8775fb493cf7d7dp-1L, 0xd.8c0494f0d34dbf8p-2L, -0x8.8d169b83b8e53edp-2L, 0xa.2d86ccc6559bbf1p-3L, -0xe.ba041f5676a0b08p-5L, 0x9.3e0889dadedbcbbp-6L, -0x9.7735428934a726dp-7L, 0x8.56888186d114aabp-9L, 0xd.b8cd6a5738afd8ap-11L, -0xb.dab9366ba83dabcp-12L, 0xf.7f073fde73fa0bdp-17L, 0x8.8b41cfb923d7022p-21L, -0x9.260ac7e9b3efaabp-31L, -0x0p+0L}; - } - if constexpr (order == 13) { - return {0x0p+0L, 0xa.1cd4ad99523f5acp-8L, -0xc.2f2fc67105b80bcp-5L, 0xc.acd5acad17523e6p-3L, -0xe.ac893beffa9ec6ep-2L, 0xa.1d32b2499d9f84p-1L, -0x8.51602e62cbd5666p-1L, 0x9.39ca87b7fe8bf75p-2L, -0x8.28645ce5c25be28p-2L, 0xb.0075410088e8318p-2L, -0x9.0fb0d4225082783p-2L, 0x8.cf8737798d06934p-3L, -0xc.710818a25393088p-4L, 0xd.03f944a7cb8758ep-4L, -0xe.6674293e772e22ap-5L, 0xf.2b09bc335412a19p-7L, -0xa.efa460643e6b966p-7L, 0x8.ce9f81ce2366f05p-7L, -0xc.f36687b0fa6554ep-12L, -0xd.cb35efa2b9452d3p-10L, 0xc.1203b8d10393dadp-12L, -0x8.d82d17abfc923a4p-12L, 0xb.fc2aa4acfa52995p-12L, -0x9.1b886fc19758c23p-13L, 0xe.62bad7ef9f9e73fp-17L, 0x8.f91c0cb5711719fp-21L, -0x9.b4bf4dfa1834f78p-30L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.2e3c0bb3f3ad4d49ee7e86ec562p-10Q, 0x1.d73cdc4f17147d4ff78a1eaebc89p-4Q, 0x1.980f074dbd462038712882b2223p-1Q, 0x1.0b8da7807c2738b0ef8a21bd41d9p-2Q, -0x1.381b88314120b0755faac9b6a208p-2Q, 0x1.a64053bd4da4144d5c6645aafa5p-3Q, -0x1.be6cb26620f84322f5bc9ad124p-4Q, 0x1.5369f32b472a8bf80c2615157588p-5Q, -0x1.e553bfb83c481ee1c85b1021810cp-8Q, -0x1.5b97376b07916025b5f5ed690f77p-9Q, 0x1.3ad93e070eb79f317793c09c0451p-9Q, -0x1.6c8658d1b206dd40e11227faae77p-11Q, 0x1.421437e7b839d2e408af08229906p-16Q, 0x1.359cb55b7d335b5bc8ff9070d38p-15Q, -0x1.16b1cde08937e6520514fc007dd3p-18Q, -0x1.1e470298289ae452c29404b9c746p-19Q, 0x1.16b7d7c52ecb6bf5c9c270fe3977p-21Q, -0x1.2a9017a9058ec8631bfea23cf0f2p-27Q, -0x1.e6603a12c62203e481a6f751bb0fp-29Q, 0x1.ad635a5532ad9d7f9b990f3258b1p-33Q, -0x1.0b7166f3d598041c11f82d418c5ep-37Q, -0x1.2dcc8d3c8b0cf63074ab4d9fba6ep-43Q, 0x1.994c7452dcd30c07dade8e0a0b5bp-50Q, 0x1.d3e7db27a70ee63bd0dc60e06dc1p-60Q, -0x1.ad34c0383fa643c903234154af78p-72Q, 0x1.c6fd0b1a8d6a2b5f9f47659e9cb5p-94Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.ffe6a833f41d1e41c335a1d66225p-8Q, 0x1.6878956519ce3162ba29291a8504p-2Q, 0x1.4f6222726462315c1311b1bd0b69p-1Q, -0x1.9d7a4f00f9dc035ff30a13b3dd54p+0Q, 0x1.ee1a7236f71e3afe8c9241dc280bp-1Q, -0x1.3a4c3d150c11dd01e59680a43c1ap-1Q, 0x1.a5124e1ab47a907fdd8a56cf5fd2p-2Q, -0x1.fd47140509eb33a71307cdb49b3fp-3Q, 0x1.efeb8355fd2f814144fb4db02bdbp-4Q, -0x1.695e5e5e49cf847101e5144b6fefp-5Q, 0x1.73cae05387f642ba0d652b2dbcabp-7Q, -0x1.fa774911ba2d3bb25d61e69c8c8ep-10Q, 0x1.13b07ddddb3b836ee57d12843693p-13Q, 0x1.7cb11c0b4280a9d8a95e4eb20e72p-14Q, -0x1.d2cbfff6e2a582bd1061aa2f380bp-15Q, 0x1.74388c9fd28e69e7d9f0c5af3fddp-17Q, 0x1.21ff895bfb5f2915922793fd222dp-21Q, -0x1.156307b5c128c175f7e3a71477b9p-22Q, -0x1.19b91bff8bef4f88f1ed76cce8eap-25Q, 0x1.f7d83e4d41c76f94d46210e4d1f2p-31Q, 0x1.5090626b206a430059df75028168p-34Q, -0x1.405683426ad010e44f0a98cc929p-40Q, 0x1.6ac079eed130df81302e2b26c482p-46Q, -0x1.9a49f0637a3b64a9eb35bd52aa23p-55Q, -0x1.88bc66cc087f1d558950f224d6c9p-67Q, 0x1.a0541eb1bdceab613773d4dc3dd7p-88Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.70e38d13c6dccf6333417be4b4fbp-5Q, 0x1.98429094e12d1953c234a36b137bp-1Q, -0x1.5a23aee5cfcf330386719e085aa1p+0Q, -0x1.ca3a85e30ebf60ba5eccc5b7b84bp-2Q, 0x1.f2911f6caea6ac421bc7b6d2ce04p+0Q, -0x1.902df5acb98563fb6c85941263b7p+0Q, 0x1.6e5d8a32fe3ae7b3c23b4e6e9c7ap-1Q, -0x1.7cd7499a11b87c3bc4909e0bdb58p-5Q, -0x1.cb51389df1436d54630b5c4050fbp-3Q, 0x1.8970fdea96db48b13c52294d029p-3Q, -0x1.2e3ba43116d4ee1d14ccd7ef1eb6p-4Q, 0x1.a437288ed51ab324c667ecc7c439p-9Q, 0x1.5d8afaeb5ec2a57500ea441b58aap-7Q, -0x1.3f213a25a4c39a4ee9f8ca7fc5f5p-8Q, 0x1.438df66495fed0569b1e6607263bp-11Q, 0x1.92aacb344e1aac45946a6dd95b1dp-13Q, -0x1.4a2a2b6937dca67c2fb96409eaabp-14Q, 0x1.061494c076ea4c2b5c794f2371b4p-17Q, 0x1.1c61500cd5ff603bf7260846f007p-21Q, -0x1.fed404b96c72e77fac42699e644dp-24Q, 0x1.9900fa8d5cb81723cdb543a2521ap-29Q, 0x1.4b71c6cbb7be353ab93ac21700e3p-33Q, -0x1.f4e20f23251aa513b13eb0ad0eafp-40Q, -0x1.ae764159a5bb5c8d340066c07578p-50Q, 0x1.0753e4c918ed6b59ce15c4a9365bp-59Q, -0x1.1725d8c4676c38ff70e1cc359512p-79Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.b6406454732d4d440405d44a6a49p-3Q, 0x1.b949541f458cd808c01c6f4442bcp-1Q, -0x1.49bc84198d8eee0e1769477dd34dp+2Q, 0x1.255157167a5528a3714c438e2bbbp+3Q, -0x1.254591e8b6e06babda61e0b5bd92p+3Q, 0x1.bfdd01aa9e6916b30d7fb866cb4dp+2Q, -0x1.258cb0e12f407e788c8d24c043p+2Q, 0x1.244b687910817f75269b9b13d0aap+1Q, -0x1.76e9c86768fd81ae0140e512f91dp-1Q, 0x1.2db90e1b7e223907d65e1858ad53p-3Q, -0x1.adc00aab7f786622c376bd60c25fp-4Q, 0x1.077b01cdc29a9bffc55813096431p-3Q, -0x1.4e1bd3d7c8106ffe51d90e297c64p-4Q, 0x1.a8b1719f76969f8051acdf38ae9p-6Q, -0x1.1b67a8fdd5d395a5e1003bc2df39p-9Q, -0x1.5aa2219e8b072017d97056f432f5p-10Q, 0x1.0c296ebe05b6e9c7cf2917908081p-11Q, -0x1.315112d6e2648d659715640aac77p-14Q, -0x1.aa34a64782e3fdc563417212e36cp-23Q, 0x1.718ac2125512de66d6a9b5d79809p-20Q, -0x1.4ed202350e6d4103a23efe811aep-25Q, -0x1.6a2c3e7b115c942fffc924e2aa83p-29Q, 0x1.03cb1bd946e2daf6230de1902b89p-35Q, 0x1.d2ce73e99c2943d672b79f3df3dfp-46Q, -0x1.110d7f1b0bfbfc4b48ffe175513cp-54Q, 0x1.2175be08d4af39d29c43830b5338p-73Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.9bd3bc24739608dd1ea0727f797p-1Q, -0x1.218b20c923a72ab49d783c3c2182p+1Q, -0x1.8f073ee2485429a822c3456748ddp-2Q, 0x1.10368c3ad14ec0121ffa10beccc4p+3Q, -0x1.6e5fd027a16b3fa71b0c68881f6dp+3Q, -0x1.fee6b19288528fc99125553bcb88p-2Q, 0x1.5dae0c64ec100c07cb64acfb530ap+4Q, -0x1.253938fa65f9cdca9dcd99a2d96bp+5Q, 0x1.0846ca351ee337bf1cde15f6a892p+5Q, -0x1.d3379cfd6d392ab0067070d38b2ap+3Q, -0x1.bc1cbd5de053b1b3e6030cd2eb44p+1Q, 0x1.49e86d68d4cf8c86d82167732746p+3Q, -0x1.e4ade08c4a6c2c8507d0731ef456p+2Q, 0x1.651f390634956dee37faca7ade61p+1Q, -0x1.14e32e1f9b6bac3d6ef9b665a8dep-2Q, -0x1.c20b1d287136abbd5724af54edd7p-3Q, 0x1.9dc73570ee73f3a5d7e75adc1efap-4Q, -0x1.dbb9ebdd9c09deccb1020147719ep-7Q, -0x1.c7f5c1ec60f696f9a40d5c2f13dep-11Q, 0x1.a5fc856e52fad70c72c88b43b17bp-12Q, -0x1.07f65daa0049b089e54b5e492044p-16Q, -0x1.0e378f07aff0a4003d557ea13ebap-20Q, 0x1.69bc58d5ec0ccbef38bec2915824p-26Q, 0x1.872aa1bcf368769fc21e287db36p-36Q, -0x1.7b84969608016d06bfce8c098437p-44Q, 0x1.92548cc9b5b71c86f11e26fc3a07p-62Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.29b15e8e05f4922e7d4e47048a9cp+1Q, -0x1.cfd365d6145278198eca9c82d9f8p+3Q, 0x1.440caad9c12360807dafb3bad1d1p+5Q, -0x1.116de9d813b38a3407c462c9c8afp+6Q, 0x1.3b639c503b3cf7fe4e226236b434p+6Q, -0x1.0040f57e975e1a258b9875fe1f17p+6Q, 0x1.e6fde6a95ce32902224ee9a0f717p+4Q, 0x1.5c1e9e155aab7b67b6f0684e8054p+3Q, -0x1.b1e5da7957b3c8fabda1cfa1992fp+5Q, 0x1.7d1f138d16b9d31aa28298c6d585p+6Q, -0x1.d6f4cad7bdd82bc575e84a0ae447p+6Q, 0x1.9fd808c31038fd9d9f9820868c69p+6Q, -0x1.ecec6e1a57ab3b47a08d37ee9238p+5Q, 0x1.43fff7220eba3de58880aab6571cp+4Q, 0x1.5e941cd01c024910420637b6b61bp-2Q, -0x1.d2a0789936f63c584facf37b3e67p+1Q, 0x1.940e89f9fbe3b90fa47d360fd472p+0Q, -0x1.f62a7689777aabb4ab21abcf7e27p-3Q, -0x1.2b3b3b35a204159ed02721cadaafp-6Q, 0x1.3de2ba1c1b05528a92ffeeb8fc2ep-7Q, -0x1.21cbeea2dd955597cbff120c27ccp-11Q, -0x1.2150f65158193f62d7d7f8ca1f69p-15Q, 0x1.159bf889454c6b38325ea0bd0aa7p-20Q, 0x1.b00f4f96ce85167dd0220db19d66p-30Q, -0x1.21e8e13c855c01e5c446a0ad86p-37Q, 0x1.33590911079747fc32e0ebbb9924p-54Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.3069c9b572d786eb96d929d90cddp+2Q, -0x1.2e376983f6cb6b3abd68459b0db9p+5Q, 0x1.1366d92966ea16320047794482afp+7Q, -0x1.37b9852173f06f1765e1fe9f84p+8Q, 0x1.ff3f2db6a15a3d87e9d7df5b42f3p+8Q, -0x1.57d9383606e506f39f38563cb6bep+9Q, 0x1.9e8b97533b1eae6eef5ccc2c8b76p+9Q, -0x1.c556790a27e1d4367bdf86d03f05p+9Q, 0x1.af9eb47abc08e08daae8af537da6p+9Q, -0x1.5e3047bf51b54c2759154839c7dbp+9Q, 0x1.efd9329bb40ff6440883f8a40f82p+8Q, -0x1.337ec090261a5db68ef9839a3fcp+8Q, 0x1.1dd7e09a266914bfb2df7819245bp+7Q, -0x1.34f8d53391e95dda3b7a36e1f269p+4Q, -0x1.1b6423ffa4134de5e81b13aa374dp+5Q, 0x1.038ecbdebefe39ca7724b2c5d6b5p+5Q, -0x1.9f2073b507553852ed1a7122dc5cp+3Q, 0x1.0d3b2378aacf1f56c9dbd6033ed8p+1Q, 0x1.b93ffbdcbcfbcafb2828e4f8a1e6p-3Q, -0x1.00284db90f95b583e4f9723dea4p-3Q, 0x1.5202609236b6be9cf16ae5695042p-7Q, 0x1.4b9320a57f2323116dd63291deebp-11Q, -0x1.d3b085775602aad7427a1a128489p-16Q, -0x1.e975304f420640f339ac1f2721b2p-25Q, 0x1.e5cecfa6ab7bb5421ef8c106f4f7p-32Q, -0x1.0188e4a2f5a9df06f6875fecaac5p-47Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.f579b17074e36836eacdf20b2124p+2Q, -0x1.13b9cbe766166f25c9dace3616b1p+6Q, 0x1.0d0d0432bec134cd566f5783ca25p+8Q, -0x1.309a86e68bfe9899fc0e86f2260fp+9Q, 0x1.b8e26231ea03e8ec859843dc6ce9p+9Q, -0x1.b08b284517ec42e68106ca8a8bc1p+9Q, 0x1.3c7d2b26245024778e76cf716fbfp+9Q, -0x1.7e7def0dd6c17f062ac5f280847p+8Q, 0x1.9c880448390e60397d83aacda54p+5Q, 0x1.dc1752cc2f2f84356ce375550f21p+8Q, -0x1.e54a03fbbc2fa46a8399b07d254cp+9Q, 0x1.1a42e1dae56904bbcf3f8f7fa5c7p+10Q, -0x1.f903f4a18c30e32dc6c260029f14p+9Q, 0x1.9d8db919083864fcc4e1ce713df3p+9Q, -0x1.34173ffb143e1d9eed0dd73c6925p+9Q, 0x1.64eb3c27db564d469eb11c515c5dp+8Q, -0x1.0b0c43171fee5929daa55b569994p+7Q, 0x1.5f0a5375d11c72dc55988338ff36p+4Q, 0x1.d8f6b9f1522f2e96a9e46aa5caf8p+1Q, -0x1.1c75896d6d598c65080bd27d32aap+1Q, 0x1.f38ac1a749daef77915c1d44f9d7p-3Q, 0x1.f82700b4dc7274aa9bd956d7234cp-7Q, -0x1.1306135d4672f12980f36c25a44ep-10Q, -0x1.2dc514d6999140dbb2a21c1d56f1p-19Q, 0x1.1d494ae1d331f410d68f7a178351p-25Q, -0x1.2e8464bcec8d40ffd77ac9bbd77ap-40Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.e32cc25ea4da498425dfec2497a6p+2Q, -0x1.1692ca6458ea9e38b45000f9e974p+6Q, 0x1.1fa09c1316dfb4b439ad2e78bb59p+8Q, -0x1.615e67f0c1ccc897da6f2d005018p+9Q, 0x1.265c8c1b4b1aa4b3e36b99e4a1a9p+10Q, -0x1.7569ed1c8210ca209e47f9d0511cp+10Q, 0x1.9e96bde5063d41cf09da3c270b93p+10Q, -0x1.bbbe167a38d63287ecfeda29fbbep+10Q, 0x1.be080201e737d36f7e79bffa876fp+10Q, -0x1.8f099bdabb21898e359857d34007p+10Q, 0x1.43b83815e15a62b284f0ee906572p+10Q, -0x1.ee6ad68b3bda4ee4ba8bf16f4fabp+9Q, 0x1.58d561cb84d267ecaf633fb5a5d5p+9Q, -0x1.a3b282a8407a310226d833dadcd5p+8Q, 0x1.c79d620ffafc0589079eea90279ap+7Q, -0x1.bc78cb9447aa124d62b31a0a7f54p+6Q, 0x1.418e35902e32cdd0c2f21fb873ep+5Q, -0x1.3abf360acc2f742d879127375bb2p+2Q, -0x1.ad7bb3867b3c2b046f80e1cb0482p+1Q, 0x1.a655024ebf2fd4378622021ee814p+0Q, -0x1.affdcd4718ba7f1a965455b89c8ep-3Q, -0x1.8341cd6c6b0a9d48905a1ecfc91fp-7Q, 0x1.b55710d3ebf552b754ea432b16e1p-10Q, 0x1.e321738ab144873b6e4379081333p-19Q, -0x1.c53c1373c88584f948dc39838bd8p-24Q, 0x1.e0c270acb15c5fb50466c4df9e1p-38Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.8d1f8a32797636f661365be0e3e6p+2Q, -0x1.d4881995a0c1ea2393ff422e453fp+5Q, 0x1.e86d414a78e33b3180b306c7fb52p+7Q, -0x1.280027c9b087591ad85db337ae83p+9Q, 0x1.d3eb5f0b0594c2750ef02a700404p+9Q, -0x1.0b82a55c2799ede8dec1e33e1dcdp+10Q, 0x1.07ce9f70ddb2869a658274b505f1p+10Q, -0x1.0d7822536789d9033e70cbead7bap+10Q, 0x1.0df61d2a506b1f8fcfe72d1ca4cdp+10Q, -0x1.c6893ac6cda6b55a4941f5e57261p+9Q, 0x1.45ac9e808978822ff4ad1899b3b8p+9Q, -0x1.c9d686e237043dec7c04f88fd885p+8Q, 0x1.35c4c3819b30f9b6fdd5c67ec132p+8Q, -0x1.4a58be360f4f421d89e83ecf3267p+7Q, 0x1.017559c35f7610aa1b72e5e5a83p+6Q, -0x1.5d1ba7f13474232b92fdf4e5cb84p+4Q, 0x1.dadd49a935c8394385d3a3bdf6d5p+1Q, 0x1.87b01fd4326a3668ccbb1eed227dp+2Q, -0x1.9ab15d247f90f9fe7c9b6b3dd567p+2Q, 0x1.46cd6a0d33a48aafbbc221eb1f48p+1Q, -0x1.8955d7defe0d5217296739d07f07p-2Q, -0x1.85244f4e65bbc4ccef7883bc8ba1p-7Q, 0x1.6f86d3c43106164aba39dbfe0b2fp-8Q, 0x1.1b4e3c12a74dff21568f59de83f3p-16Q, -0x1.7914d82d3193f580c3335f167104p-21Q, 0x1.903b4b44dd8c7c0a4e702124dc3fp-34Q, 0x0p+0Q}; - } - if constexpr (order == 10) { - return {0x0p+0Q, 0x1.041a0a897aa28eb3a0ccade17e3cp+1Q, -0x1.3658b5d77609e7977d3641db3a11p+4Q, 0x1.5194af04e2f848c21930873e900ap+6Q, -0x1.c3df81f0aaf28bccb5fed61687cfp+7Q, 0x1.ad183e8db3dabe867a1b1e1d7e93p+8Q, -0x1.3d9c782d7007715e1144e807f092p+9Q, 0x1.852da35362a6d4101e229e2b5077p+9Q, -0x1.9cca18f6947dd0d5bed4aff692d8p+9Q, 0x1.9a6efa498935e2e3d82e1fd52122p+9Q, -0x1.a300c2ebdd39d26204b2e2ccd8bdp+9Q, 0x1.a735477cbff1b966c8a20eaae97p+9Q, -0x1.7a384b1c312fbe2a2f45b3550037p+9Q, 0x1.2afd886ee72d716fc638e75f48b8p+9Q, -0x1.d0f63946d275b18c0f5c2756f025p+8Q, 0x1.6384c4a13f54dc153d90136891aap+8Q, -0x1.d6c269ce8bf34e1953164b65a3d5p+7Q, 0x1.08982647617ff8ae60bccefbfe0fp+7Q, -0x1.1f7e83a0711235a83bc8e025bd62p+6Q, 0x1.2a5701b5bea0dde347ec02073e97p+5Q, -0x1.c18aa4ec1159b6d22d740e4f35cdp+3Q, 0x1.4dc13861658a8dd406eb1a845d5ap+1Q, 0x1.bd5ac19033244ca1c006b305a421p-5Q, -0x1.1aa94170fffad7174e8899965ff8p-4Q, -0x1.97678bd8dc9fa54b7e4c01f3ba2ap-14Q, 0x1.25b3fc23ddcf5fe31ea2281e4301p-16Q, -0x1.381fef501218e9cc3e0863bb3cadp-28Q, 0x0p+0Q}; - } - if constexpr (order == 11) { - return {0x0p+0Q, 0x1.456a1d2a45d0d4e9e18e4013bda3p+0Q, -0x1.86731e38f2c9e9bd245a6d7f6e86p+3Q, 0x1.99ddae9b5957da8932fc9013b15ep+5Q, -0x1.ebccc1d5d759a0cf4adc92beb271p+6Q, 0x1.74f85dd906948af50c229b89c98dp+7Q, -0x1.8426225b26443b4ef3c972f9489bp+7Q, 0x1.4fbcc1bdf3f1963c49a88c06aa08p+7Q, -0x1.4776c0e99319f61e68a41fbe42b3p+7Q, 0x1.573bef3fda7eadeaaa4191468e3p+7Q, -0x1.2b0c271bd883e242fdd8d9725e0bp+7Q, 0x1.bb5bca80b624fa5bb278816db9f3p+6Q, -0x1.5808025c93fa4e6af5a7ad436556p+6Q, 0x1.0c1df40cf5e4c4ea4441c80693a5p+6Q, -0x1.5dea01151a3e197eb05317c268edp+5Q, 0x1.997fc95198573b5277250e908707p+4Q, -0x1.f5c4140f2a03e036d15c57dbb36p+3Q, 0x1.1578f4041624b0e3ebbbb44abecfp+3Q, -0x1.e11a4c47848258b137f885157e3p+1Q, 0x1.8c2f5a8cae553e89ef1e861ef5b3p+0Q, -0x1.42cdddde9b71e8354b8c2fb7c09ep-1Q, 0x1.1b37523680cd9a16c0e5dc3ebd03p-3Q, 0x1.61bca3fd3effb1c3f5807afcb9adp-7Q, -0x1.eeca78cc1dd9a8d407a9b1f6577bp-8Q, 0x1.427b3775515b64598a140f609c8fp-14Q, 0x1.1c6c30fb5472c91c3ee2a25808b3p-18Q, -0x1.2f056506ce5e619914ce605b0524p-29Q, 0x0p+0Q}; - } - if constexpr (order == 12) { - return {0x0p+0Q, 0x1.45a484f799a722e4cd950a09d5fbp-2Q, -0x1.87cf9eab4f40073db99e6a0fb481p+1Q, 0x1.99aecd437634b1af52fbd40a01bcp+3Q, -0x1.e335dd2c6e9de306d05cc358c6bp+4Q, 0x1.5e3841e2195098fae8b77b691b21p+5Q, -0x1.48839e048b83d3127ebe74020885p+5Q, 0x1.e11a7f30735e301f0eb2ede8063fp+4Q, -0x1.bff27724d4103b12e92a64b54c9dp+4Q, 0x1.f68b6fe2ccc3168c1a15db6eeebdp+4Q, -0x1.a9c89c30bca221a764ae454bfb09p+4Q, 0x1.147ddad811d2b11feabea5bba8adp+4Q, -0x1.a10ee0eb1ccb64a80033704ddb98p+3Q, 0x1.5d8b9ffe3cdb891325e9bfc9fb55p+3Q, -0x1.b0eebf69279efaf954dd166c21dep+2Q, 0x1.b180929e1a69b7ef5328a0cfd4a4p+1Q, -0x1.11a2d370771ca7d9ba7c7444df33p+1Q, 0x1.45b0d998cab377e10ef3a92e12dfp+0Q, -0x1.d74083eaced416102c8dd2af61fp-2Q, 0x1.27c1113b5bdb7975242772f43479p-3Q, -0x1.2ee6a8512694e4da2e5b07f1c606p-4Q, 0x1.0ad11030da22955532f0e66e0c83p-6Q, 0x1.b719ad4ae715fb13a424d63fb241p-8Q, -0x1.7b5726cd7507b577ab874fe8a876p-9Q, 0x1.efe0e7fbce7f41797c67293a0937p-14Q, 0x1.116839f7247ae044e8dfdefe7163p-18Q, -0x1.24c158fd367df5563093507c0edcp-28Q, 0x0p+0Q}; - } - if constexpr (order == 13) { - return {0x0p+0Q, 0x1.439a95b32a47eb5722e3cd7fe3cap-5Q, -0x1.85e5f8ce20b701780e2029b7ff55p-2Q, 0x1.959ab595a2ea47cca93fdec47d03p+0Q, -0x1.d591277dff53d8dcf59277336155p+1Q, 0x1.43a6564933b3f0805a5a899c5bb9p+2Q, -0x1.0a2c05cc597aaccc032de2cc831fp+2Q, 0x1.273950f6ffd17ee92b32456caf9bp+1Q, -0x1.050c8b9cb84b7c5048bc5cd2f92ep+1Q, 0x1.600ea820111d062fdf2a6acf661cp+1Q, -0x1.21f61a844a104f06b392bde6725p+1Q, 0x1.19f0e6ef31a0d26707b436c0ada9p+0Q, -0x1.8e2103144a726110a565e981ea79p-1Q, 0x1.a07f2894f970eb1bd26c4012674ap-1Q, -0x1.ccce8527cee5c45450edf8973a9cp-2Q, 0x1.e56137866a8254327c313c62b4d6p-4Q, -0x1.5df48c0c87cd72cb9ba6c6b9ceadp-4Q, 0x1.19d3f039c46cde096e59d4adaef2p-4Q, -0x1.9e6cd0f61f4caa9b0d4bb0b897fp-9Q, -0x1.b966bdf45728a5a5bb304f91c5cp-7Q, 0x1.8240771a20727b5953c676de8a9p-9Q, -0x1.1b05a2f57f924748a24f50e9e6eep-9Q, 0x1.7f8554959f4a532982e2ba397a2fp-9Q, -0x1.23710df832eb1845bb5316dc1abfp-10Q, 0x1.cc575afdf3f3ce7d0de6ac81f14p-14Q, 0x1.1f238196ae22e33d86876e9e195ep-18Q, -0x1.3697e9bf43069ef0c328d37a1aebp-27Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00115293332509096742962333483892313856362688845269995659187394173081837979723"), boost::lexical_cast("0.115048275548763287879127945985463599972775459285064004095554421826950893087"), boost::lexical_cast("0.796989658584277062411937010559864103043001629105734220965026462739268209643"), boost::lexical_cast("0.261282555787182265882706163765054116695305731989757725047913151702289063990"), boost::lexical_cast("-0.304792526251077945867767239314414983616168566481167348823874432025337651187"), boost::lexical_cast("0.206177381720140253354071811928730787659997169191432596424777801677056654936"), boost::lexical_cast("-0.108990380164014469211374498205641904963307679906212370075411833415284835295"), boost::lexical_cast("0.0414323567767714336655575435550014435859114005804252743467739002617028032556"), boost::lexical_cast("-0.00740550451904298413275770194104519624796412659431510963194058424609244583855"), boost::lexical_cast("-0.00265190650453840226202382246051294213464963751920614087594043518495040017701"), boost::lexical_cast("0.00240210420772995773725343184085600070474699593300395536783639652419272638655"), boost::lexical_cast("-0.000695275865120426856318173618858975815994589786388847596433982307511410977064"), boost::lexical_cast("0.0000191974030759909635472313378575369891683691026590204627382371876560571031362"), boost::lexical_cast("0.0000369086435191623599908102272586735250422568493003535062380722233574951016029"), boost::lexical_cast("-0.00000415287237890283585845050020110906559871983453862988696226792814210793873275"), boost::lexical_cast("-0.00000213293271762831680444514966056532349654366183092419194511477231701438124426"), boost::lexical_cast("0.000000519152984288816673375386899946665294276591318147000925448293729776300076533"), boost::lexical_cast("-0.00000000868932288799631112269973020748320326319607540201446697303589532523058640376"), boost::lexical_cast("-0.00000000353885033203391238239173859710183402146968653187882395070568528196527541446"), boost::lexical_cast("0.000000000195263099667140461506853591672068520568701722861147310552025237678358948376"), boost::lexical_cast("-0.00000000000760118658661622931484977499946668576063487666390672568814742992660278581129"), boost::lexical_cast("-0.000000000000134025692809696893389568339892947369168469910164958708207111959469432500771"), boost::lexical_cast("0.00000000000000142003995353734011507760517926628916988777854097085265899981211240745997152"), boost::lexical_cast("0.00000000000000000158532613505743630429831947577865370489228544853275053068484397376569424042"), boost::lexical_cast("-0.000000000000000000000355030930001146155860382376996084936412851909339999461687756186476889838277"), boost::lexical_cast("0.0000000000000000000000000000897306502669997242383001671446525458224541863620223787779391644190926610050"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00781098944203546971796976286517434035884009688773248606224515220005414202600"), boost::lexical_cast("0.352022489829734113542431984005808736473724699510524912312303517596181907952"), boost::lexical_cast("0.655045582260019530471586793705288409958328082576128477269067038800474460343"), boost::lexical_cast("-1.61514753125980808044495957120916454545964651551944410129115969858552545691"), boost::lexical_cast("0.965045518121368371649657414431609409876079256511530108438864454295064039152"), boost::lexical_cast("-0.613862904376251107603567359503339925389993434358836078881583881755180373456"), boost::lexical_cast("0.411202640895789674547585554456016331268606109870526886150894523201400069359"), boost::lexical_cast("-0.248670727161188410367077352077023110486766838261792327161508712754116165892"), boost::lexical_cast("0.121074212103689294850946226679458285881379881523239286723535403732539992908"), boost::lexical_cast("-0.0441123812800529610355488980147434896876334272618270449617517207697232204447"), boost::lexical_cast("0.0113462062209348030398079804396363956598508998796900777431886698352753187169"), boost::lexical_cast("-0.00193201430777827515696813853521806116958501580116959470619810785172817252196"), boost::lexical_cast("0.000131458959852363274552068404289595280980320518543359612758830152196452510244"), boost::lexical_cast("0.0000907640061777183255547701282076901148256668421380966288924343020509113784790"), boost::lexical_cast("-0.0000556465237685112725274835827463099540776609744280841662958102231266930097713"), boost::lexical_cast("0.0000110930471347758540199575897934132437541479940508074917148850579912551630419"), boost::lexical_cast("0.000000540163721305599951324898771320582892046233366679859045334581706862592762034"), boost::lexical_cast("-0.000000258336622635775732966000369446951153794507695432350051229799820914271331972"), boost::lexical_cast("-0.0000000327968834281282285800082226655395639101026250341990601757011633171502265437"), boost::lexical_cast("0.000000000916488171514711030622268872903433690707685750686927346624592740598447942041"), boost::lexical_cast("0.0000000000765257940990005274758907789178871368045869308567592594682817218494349636475"), boost::lexical_cast("-0.00000000000113806898255625919280795529887274235588918418565838791672065942227585229403"), boost::lexical_cast("0.0000000000000201367733903050668198447517300557877789704362876084808722846353524567227922"), boost::lexical_cast("-0.0000000000000000444836034640325638288709395930623143471945459846091722425723736229604149591"), boost::lexical_cast("-0.0000000000000000000103956338676397028751708008201484812724312022305577756338111796159549805791"), boost::lexical_cast("0.00000000000000000000000000525480561641109164137864688009776045386815264957861417756490150159142136333"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0450303798117733589231798330957691280417239896756051304263138384820087822720"), boost::lexical_cast("0.797382848905352224261209402370274675556632019052816074828369432733398437194"), boost::lexical_cast("-1.35210698233259733766168097865537427607660034980120464334236932299708410774"), boost::lexical_cast("-0.447488872512337268222446766248936491151740076284709909184963796609707232255"), boost::lexical_cast("1.94752689746260427086971810378552771942897218308070519347370198965733742471"), boost::lexical_cast("-1.56320128886138359744668398388042143870937778524339089182916328446012293685"), boost::lexical_cast("0.715557402348272306878574425353637462359702067943253760692428908902502127827"), boost::lexical_cast("-0.0464893758331106893607592418969309234589119778040679971376996748085292908751"), boost::lexical_cast("-0.224276010818501093466222589488380871765384010383119945740817975057642024404"), boost::lexical_cast("0.192110046121212755900487444382509639513398567516218319022991979288220691964"), boost::lexical_cast("-0.0737873471966185978956886225677444795250476204861205019199449953274778830157"), boost::lexical_cast("0.00320598955242186941919016686957021369970437347319710965669749910809644144859"), boost::lexical_cast("0.0106672024910406572727634384630232126394512616065206839400078471641232182677"), boost::lexical_cast("-0.00486953420262908335767503491652246905399023769268129286510776073032697296330"), boost::lexical_cast("0.000617131311240191212204138459081818690294990133002525462438346490707490327298"), boost::lexical_cast("0.000192006665779021389446223341431010819375175205853618100042995321802178648239"), boost::lexical_cast("-0.0000787174045799788843691997530421226394107444626942089306529661594079889645065"), boost::lexical_cast("0.00000781060441650629506094363225086284470818832491361256882121071831394044465309"), boost::lexical_cast("0.000000529699265431996299782049699978331676802370855121232208197190378200993391878"), boost::lexical_cast("-0.000000118936457924373854837977028298636171996098002951110364373678539575607515220"), boost::lexical_cast("0.00000000297589448108271162186173745281562110809351136810307857224663251378623404416"), boost::lexical_cast("0.000000000150723480889045397495951808812346145543547998873595419531555416151101740824"), boost::lexical_cast("-0.00000000000177949404003867596126708357294529070318811557365468246834172229163385065083"), boost::lexical_cast("-0.00000000000000149346484715446421742389146635163953260098009858086983961700451264624854098"), boost::lexical_cast("0.00000000000000000178437796860002852739466568338831019080176013249284982357396229767567234102"), boost::lexical_cast("-0.00000000000000000000000180395062763246722611480959764856761895616090783365686732209021823579303995"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.213990005328375555135472755123681140600857383942097187754813778508021364188"), boost::lexical_cast("0.861887577836364549248175536802065478416096122297736989669377523212045471882"), boost::lexical_cast("-5.15213110442549193951604232130937181308428404117234799001678258735956565095"), boost::lexical_cast("9.16617922201354414096203125317498717808490325566889445742435609535893499012"), boost::lexical_cast("-9.16474242641471677731657141502679363538951319294421818226908853664694404748"), boost::lexical_cast("6.99786416685096083753063339505540880226836092318161102091793537672115020197"), boost::lexical_cast("-4.58671209326440268266270834820616632025849613943982416213412034046663096202"), boost::lexical_cast("2.28355127250052801373193408526992202651493499277936659476824160108001663527"), boost::lexical_cast("-0.732252371428780979843072193742624736624407830994183828051335649974997274856"), boost::lexical_cast("0.147325620855341831283808507199341730144107370475895883352377534229959735834"), boost::lexical_cast("-0.104919473342276336806466603437472988232748900776758986519994396324472688826"), boost::lexical_cast("0.128652586070825684925857427195986593237515170617045438297383145109698161719"), boost::lexical_cast("-0.0815695071328300519374023680966951688787126896982976686941014234357114383306"), boost::lexical_cast("0.0259212121580757805545526931754301057596596343151488765977950290614602386512"), boost::lexical_cast("-0.00216220796475466148613393323709898748149018273039190022024143151723111058925"), boost::lexical_cast("-0.00132230119892098570617802910816943973223564708652310398004809061573967486877"), boost::lexical_cast("0.000511478130422611034647765921441315956001733118732698933562593619541749240757"), boost::lexical_cast("-0.0000727931722918291769533207689510068034174609274026487647576221227404443932148"), boost::lexical_cast("-0.000000198467477327859725151632668232927044265781371367599997004215442660984250173"), boost::lexical_cast("0.00000137665131612781247758064430980951835019601684631521207530971741938647123521"), boost::lexical_cast("-0.0000000389782183547484796734257149006560609838069041845630777046077009454055077516"), boost::lexical_cast("-0.00000000263515414830424927128095026380033778748765668296184726183106775537323610237"), boost::lexical_cast("0.0000000000295350893893575030830965321544192503213832003549056472742964277263629493577"), boost::lexical_cast("0.0000000000000259129637850121514112507960811641537965052175737748298700466697875155415894"), boost::lexical_cast("-0.0000000000000000592088706033458993194518219229976516091225801153372985679944483340194107510"), boost::lexical_cast("0.000000000000000000000119717821494849869283848954977146397574755733129894249448827837729810076385"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.804349784326216682870867698785172886444134341030013379480923806872389210182"), boost::lexical_cast("-2.26205835171941179466492112439570917665682264923715171509917130991657754821"), boost::lexical_cast("-0.389676077424230416143478970454295496570705374947551134412624558903693957362"), boost::lexical_cast("8.50665866363348045173791462058611393187799649561744511666615181266556525337"), boost::lexical_cast("-11.44919593563404443567549116907041423485892301739312537780680544607026227450"), boost::lexical_cast("-0.498926901405939703754748719529238307648084150878656788578621629619041266705"), boost::lexical_cast("21.85499228880599088108367065599633778080830640336126353491139487377126291490"), boost::lexical_cast("-36.65294070838647301945129468867112933197613656831189540767306372008014438400"), boost::lexical_cast("33.03456536770354634426204817939353419169101297781817748568812540141141197080"), boost::lexical_cast("-14.60053872582810659959110019246117175095717916824767895489330950154153858660"), boost::lexical_cast("-3.46962706645777312638247039900137791860967206654796163174026576977480987387"), boost::lexical_cast("10.30962248301374157030523165146821356632153345092258177258520559837126810210"), boost::lexical_cast("-7.57311261844887687153807165858652718807055835283576547683012694195056627525"), boost::lexical_cast("2.79001534274099632722381474645350538532531181171959960822639426785711952433"), boost::lexical_cast("-0.270397873572487832671740890029058330815124109161518604674414533906621857406"), boost::lexical_cast("-0.219747760578822357960973156509623996708163827579313466373374504890703266884"), boost::lexical_cast("0.101020058397719647957772939429342398138576500365346222370704275039765224265"), boost::lexical_cast("-0.0145180131614497906575545887380941805879110435808753820055197950564548997542"), boost::lexical_cast("-0.000869674664088366018964976112111393474585517897253819178025469801026621804875"), boost::lexical_cast("0.000402437602038170326475359064730289991317678692634355675507889665235031988698"), boost::lexical_cast("-0.0000157333831012391713035661069783027485529501501626599828474665210765476845830"), boost::lexical_cast("-0.00000100663686623808993005735914014214151634495397934295300560534689374601506521"), boost::lexical_cast("0.0000000210557907426372698693118218926654314316158359635987623691480747866029773332"), boost::lexical_cast("0.0000000000222352429334128564487183275318880826175118330587151288587139165085782937502"), boost::lexical_cast("-0.0000000000000842699072214170360011169657801291451532530473218904368132644156798098455154"), boost::lexical_cast("0.000000000000000000340786997123380217994206097107633742986612720155415914905510810501076907780"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.32572538313607829978389746978270909190734307023984404422047073276572977495"), boost::lexical_cast("-14.49455539524440351726698168751780539459260987086240364854595675556041720440"), boost::lexical_cast("40.50618524666462883040099875675325706520261707900172515348692425641658202350"), boost::lexical_cast("-68.35733735676047669049239366744249712419067159860042852213104995281820518830"), boost::lexical_cast("78.84727597581444768460178005038706262576538764836845319136066260811952559290"), boost::lexical_cast("-64.06343648718714169613025171834477509469983151692691172469095627688021698080"), boost::lexical_cast("30.43698755414352264033439663090217787767167087477933221604545854702245623810"), boost::lexical_cast("10.87873748942125422591144834448867784613801192203670182793848556854050145490"), boost::lexical_cast("-54.23723311232467779927904053473561262938773179018943014024452055789441234110"), boost::lexical_cast("95.28034801913459537562741275266568339264065502105845420716508412412075458290"), boost::lexical_cast("-117.73905503364771243053821144754953234513956039081472901778742388505172072700"), boost::lexical_cast("103.96097092424883855673952920630316920634437408985849519918571970360275096700"), boost::lexical_cast("-61.61544437961620491952244794812274205481917695799114432128072738554509227570"), boost::lexical_cast("20.24999154380533592436955158213111619257037463818713373838162040877187311740"), boost::lexical_cast("0.342361879541387890494808824835330981498119520599852480120579318951753686930"), boost::lexical_cast("-3.64552218896089808966481252208088406516442739396640944123173605413113182773"), boost::lexical_cast("1.57834684708713170271798329721972342166058039720943334141687011992206759580"), boost::lexical_cast("-0.245198179311896545018681810103528580634841093773233002156532192404195001186"), boost::lexical_cast("-0.0182636335580641564732299080907269542961766381772624145912713306330825337847"), boost::lexical_cast("0.00970110022918661336696551804862567263721137672239282216195334493673897459845"), boost::lexical_cast("-0.000552743167971307219807849744125242795042626138923339525966494069954293592860"), boost::lexical_cast("-0.0000344891856325385166416658583064189966564335311286470958633679458661913797931"), boost::lexical_cast("0.00000103417508718244228943518424219273200822254101350515749540962507511656921374"), boost::lexical_cast("0.00000000157182442556628960702195041921845074276654103625948693489495451100463539491"), boost::lexical_cast("-0.00000000000823972888028003765394181795355019473340350975899036984527963838403818247760"), boost::lexical_cast("0.0000000000000000666454293215207517366834719023360349661401835450888130511999977594605272998"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("4.75645678252782782681587560651169118663509412050066394815052936021223979271"), boost::lexical_cast("-37.77705672356517184937835295164453556498913303252724271691215564780459719470"), boost::lexical_cast("137.70087556248931227876532575144504191693108683924786902505674311871685140800"), boost::lexical_cast("-311.72468766289278751244167873028725267412977680278312051859849993755349858000"), boost::lexical_cast("511.24679128112096837423875276735646357386086403224153118196081493355880796200"), boost::lexical_cast("-687.69702792488720143387763101613920716950152836894659515467184955111870724700"), boost::lexical_cast("829.09055557619773277153201541424732791228391594101613180539356376460906530000"), boost::lexical_cast("-906.67556883761759119144339734345872385406981601833110610680243945196617211400"), boost::lexical_cast("863.23988279515629467219009455554599609695564774955725375711337575467810032600"), boost::lexical_cast("-700.37718955506952165779246925908091030508123412802813106187016751364785945600"), boost::lexical_cast("495.84842847009709837548618485022243329167561710295186722949226664054303361100"), boost::lexical_cast("-307.49512577944039191322332358612022792251918670092304811543750183524451060300"), boost::lexical_cast("142.92163545340421526365861071542027659143554694673554929974877824733260473200"), boost::lexical_cast("-19.31075019974249281695001314578305393389661976831560477729541043029968645530"), boost::lexical_cast("-35.42389678687542349159085429311033037061651261095746807090649315454659711020"), boost::lexical_cast("32.44472478885998336245698827148819308075084642463701991417768428456321519910"), boost::lexical_cast("-12.97271142346531917199152873167390275988083231450677228087810958984424846790"), boost::lexical_cast("2.10336726562456364617075321297939313157799116307693031879047994718725361533"), boost::lexical_cast("0.215454070733924659861657674199075159272461496572943747038111133916807431180"), boost::lexical_cast("-0.125076873025998884367293275645192665826157547026398718789437845293697450218"), boost::lexical_cast("0.0103152247942739012815455329995931706018816781048478764075881481121070428934"), boost::lexical_cast("0.000632428582946048424882721006475234390308064466530095906161174694249322311105"), boost::lexical_cast("-0.0000278764686901524008550509337752045901232947877228985594423383689960428632537"), boost::lexical_cast("-0.0000000569803836285153459122322631284557498343961131423876580418354981637882246635"), boost::lexical_cast("0.000000000441839671114970335190048321139738477044887864798246264801711442171137680421"), boost::lexical_cast("-0.00000000000000714802491411250263311395432961462470250092517743540216477594292648036570408"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.83555255872811652420708194699227564812880321923155066263002675188551650312"), boost::lexical_cast("-68.93144189415544000675178575437258773566065477015007536299582400232146657330"), boost::lexical_cast("269.05084530980203113195209976663957867395958982717325865408524125280832289600"), boost::lexical_cast("-609.20724183879537322285337615082333580989660439474364859024353018035946645100"), boost::lexical_cast("881.76862167288329121045005828312390919337410341070563414959329437576051276200"), boost::lexical_cast("-865.08716643970594546719815251896043456283005565377418337268781988922266917400"), boost::lexical_cast("632.97787930272196253879414267424608924729579537423891361585357298689149584500"), boost::lexical_cast("-382.49192892544806107967107677420182336459450422233847738473211880415489419400"), boost::lexical_cast("51.56641441749688691257145061609223937968957957563897087215371356736309599200"), boost::lexical_cast("476.09110714103691538203391357221546832760511254226534748414313636902906572500"), boost::lexical_cast("-970.57824656189703500836118600041943699389979172697558754304893359616826066000"), boost::lexical_cast("1129.04503509906141877125815880497121965193711448633760242286838210579239440000"), boost::lexical_cast("-1010.03090304703962359279554938202749376391098032905326508754718040588237804000"), boost::lexical_cast("827.10721123601323503307854258132213389426514427539892445355740294501216301600"), boost::lexical_cast("-616.18164003837976580374414923629580236503935294323766247871764385789725455200"), boost::lexical_cast("356.91888665299329828378541153901250128644618483543100772119117850286192670900"), boost::lexical_cast("-133.52394935860427189931791156205717267825075964749332862787915826632532923900"), boost::lexical_cast("21.94002100012019404144527346489003480219358689823929896317683112311592863680"), boost::lexical_cast("3.69502949031117951496444168472697082874515564937581244488642154254744997400"), boost::lexical_cast("-2.22233693926927989833058976676101529298211935367881160327330611362977023218"), boost::lexical_cast("0.243917000692119383583915678923379880754017506303821621558764650571551691750"), boost::lexical_cast("0.0153855088662769439102973996146208075188236200845719957232671533824048761790"), boost::lexical_cast("-0.00104913228216791853272658326910500670179817471111989137537944784605454771898"), boost::lexical_cast("-0.00000224836058331229111229619069684984372824683936236614925216433027243221835066"), boost::lexical_cast("0.0000000332116962946728334773864559940531738563382607925542513873526692874990639648"), boost::lexical_cast("-0.00000000000107475686000546477797319235583561376745354532533798623668423772676988174585"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.54960688822339828863999378130211115107233454769934866095750950044066864110"), boost::lexical_cast("-69.64335018913939576412750532175053097593146282468237041838535209525011079500"), boost::lexical_cast("287.62738150890773420089300813672822503003764015402682017757435224935102339200"), boost::lexical_cast("-706.73754701102149477646316177625311732909677089373586648513230095487019075900"), boost::lexical_cast("1177.44605142912275685331605707810452401861714128214534938401017832783574948000"), boost::lexical_cast("-1493.65509712888447960800673919759696151644981533694814393500245372102843458000"), boost::lexical_cast("1658.35534024819665161123917470538298740518906057958085498478561548336905470000"), boost::lexical_cast("-1774.97012191343746012194081052068265568964145567960224351414437241219278396000"), boost::lexical_cast("1784.12512252406968735163579655137194210741621555135274224751877746894409525000"), boost::lexical_cast("-1596.15013759874832367565454908792624435013153344056104405167995042995605546000"), boost::lexical_cast("1294.87842318541656108750744374471145185200499138414568918290153915550984978000"), boost::lexical_cast("-988.83467235968111377155392478265729751920701705649958745436470131875538876000"), boost::lexical_cast("689.66704696641391993630921163080325378181926796016541012035635061452929732200"), boost::lexical_cast("-419.69730617117074092592055713546879516237193681933824681435866539141247425900"), boost::lexical_cast("227.80738878191733493720600320172052818250161128836771941990375971535089686000"), boost::lexical_cast("-111.11796409308819226983125949342564517414825732596608930700760656952936161100"), boost::lexical_cast("40.19443810120569696285858753433708415600177908834568747073574318608759474100"), boost::lexical_cast("-4.91792059950306926651430119033353633622113732985840244036194782614229968982"), boost::lexical_cast("-3.35533756319498030532906284051383779124200364840191901231906261851413833649"), boost::lexical_cast("1.64973463461427566646558893739921141496585938147076501993510767086243184026"), boost::lexical_cast("-0.210933307392307199501252966945895447408339149689342782956931741370150254267"), boost::lexical_cast("-0.0118181469959711297864759189693192594897107267351263521987717128479636953271"), boost::lexical_cast("0.00166832008560998294423971440046143918265510526709216268614254492975841760358"), boost::lexical_cast("0.00000359960399029744056248273888253230981459983176116053582730091303462716930960"), boost::lexical_cast("-0.000000105526920365685108260660462141084882369839069051686223049397689800183455322"), boost::lexical_cast("0.00000000000683200385904099418363562130595167945821162769743662314310034240089917492841"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("6.20505003861567011394067231344647893637847564329550367887681186357597624603"), boost::lexical_cast("-58.56645504853098766550134905340317870243260579145639275208040178526932370050"), boost::lexical_cast("244.21338875508955935588425811438812427457999296948170249669130252684915021700"), boost::lexical_cast("-592.00121422881665797081029294298226556332889632312076428918776482044056419900"), boost::lexical_cast("935.83883798382295862878655187263488883257992095069940720162185886844636534300"), boost::lexical_cast("-1070.04134277217209941069608841768441159120482934420543356273845894230382557000"), boost::lexical_cast("1055.22848149919637141794358785954857337162302556268749973962161361211731374000"), boost::lexical_cast("-1077.87709508048227764719965364717319012422679016684137197779877347065587919000"), boost::lexical_cast("1079.84553010800709048689467568224979315449213490504319509214561846839561023000"), boost::lexical_cast("-909.07210621873438578205880244568413575768717508893273593436054423066636844000"), boost::lexical_cast("651.34858710014761262618216521874193874281211026897562234536865793145322519700"), boost::lexical_cast("-457.83799566119363761546660688550395418970241445277522092347549225353673827100"), boost::lexical_cast("309.76860818899965620264934656056185819660289753982144311142670396948220345500"), boost::lexical_cast("-165.17332619606861874818823388561165833646372925969907046409236334588737006800"), boost::lexical_cast("64.36460023183964610680737173822860851394300430996239129559691640194035450280"), boost::lexical_cast("-21.81925195904410301088997452499452793344229781102822411802597853821595862070"), boost::lexical_cast("3.70987816583834887528727762977327608794555354259030464603411322315458032491"), boost::lexical_cast("6.12012477609974627820032790014942916130826215990800053191225592823023213870"), boost::lexical_cast("-6.41707542957580268050903646486240388008805175493051843593484495999979780697"), boost::lexical_cast("2.55314374584785171680308731725982270158371281797680529285657013298327299254"), boost::lexical_cast("-0.384116528497100269726445252348690123705919404254920353538891869983784142695"), boost::lexical_cast("-0.0118756663548945587058921085727494958398593550092544335470975725373361134933"), boost::lexical_cast("0.00560801191403834230317024708819810653630256118877488149992512868367446594358"), boost::lexical_cast("0.0000168863298975933200683541006085210976919654788572176120083523172920160215908"), boost::lexical_cast("-0.000000702368884519096062247768700675740067863675318587848764509402888807377333644"), boost::lexical_cast("0.0000000000910021338458770684182677723795514188197183013650198912703110713825929499885"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 10) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.03204471314281361620436172860993718348048098798259830037497869722564324408"), boost::lexical_cast("-19.39665779270637271197815390366866221017887466456155522938642838644377623170"), boost::lexical_cast("84.39519889483751381060448991759860643934416288701819870293485348031111678600"), boost::lexical_cast("-225.93653823935280620043647247700590736347878865997028224628700438872489124900"), boost::lexical_cast("429.09470449105242027094920090767356206181107874783293562031855795674540336000"), boost::lexical_cast("-635.22241752596063241363571132920423111589738106514102338073077249645227164900"), boost::lexical_cast("778.35654680554367290994709844961509436329929173664221414820797079265534104900"), boost::lexical_cast("-825.57888681650695755069404722936648404036390595346071684154667140205899581400"), boost::lexical_cast("820.86701316070300215711624263370329545679945220152016165604116497162621943800"), boost::lexical_cast("-838.00594852735561618490718834843576332267897766955677203329263194173445408300"), boost::lexical_cast("846.41624411937977897579029601634249128805349858445717455832716294555864902500"), boost::lexical_cast("-756.43979217912372920397826846127055236422213608124884373684460009804242802200"), boost::lexical_cast("597.98072611129726849283643705505721881864863625292975587189812590758721018400"), boost::lexical_cast("-464.96181147230317359880791138494390058432679338003629816618633802082886197700"), boost::lexical_cast("355.51862533374956883481354353388092712174852473789983192068789421486091538400"), boost::lexical_cast("-235.37971349199656518700162583910157649836837484774547798711824684202151115700"), boost::lexical_cast("132.29716704430755790362823208197819789457340031860010362902088456007781211600"), boost::lexical_cast("-71.87354899110919395713836059516566325587269396430109303014403933780264172090"), boost::lexical_cast("37.29248373020173707451272057860274355374999201121543162524309965457643352150"), boost::lexical_cast("-14.04817434412944163979531519740059165943726494501644870873410209073124183660"), boost::lexical_cast("2.60745911365218712785836635558941735911206189533873236470344886669699910838"), boost::lexical_cast("0.0543645649464435164847209914399195207149789580566453105860414107221369165038"), boost::lexical_cast("-0.0690090709977073313739788485731020686097132104467534026187427787191497374569"), boost::lexical_cast("-0.0000971327966803672069290270496714838209254089051099247834705750725429421474607"), boost::lexical_cast("0.0000175060669244915542274214040537534422700016855593378309967441792972141821778"), boost::lexical_cast("-0.00000000454201283534597503030935884752199947078896835850213184419062952049362978252"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 11) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.27115042001770757342790580276725599737973526276595894891693693144453081333"), boost::lexical_cast("-12.20155249712689490713523680284407229529835475760492745017650272595157073840"), boost::lexical_cast("51.23324319235233061317480157420850343391523283977889617744950185481521928880"), boost::lexical_cast("-122.94995817305462609579795659014989927849571013175696402717688054750353836700"), boost::lexical_cast("186.48509100156140575637738663903588922180843570634354620282154495701806571100"), boost::lexical_cast("-194.07448086588021018245234658153261441759722529638841725717115567921577062400"), boost::lexical_cast("167.86866563418224671177891910686936996723856918707191383980497089062492466500"), boost::lexical_cast("-163.73194055481597452012500435897749151331279668776584781713972098055426014000"), boost::lexical_cast("171.61705970327542643733736274773439348119447474649912026659814882053948896400"), boost::lexical_cast("-149.52373587625510655685072490035410183051561878699286314353687011498822254500"), boost::lexical_cast("110.83963967429849116381035147455824238567048771273770112763575455632533722600"), boost::lexical_cast("-86.00782150891480030613225128365285559176275614273843802468963964882341220180"), boost::lexical_cast("67.02925129175963984371834894406440307377952153327523895227597589690079234370"), boost::lexical_cast("-43.73925987707458484571443317553902969922556666607444419305258116854809584890"), boost::lexical_cast("25.59369785187796149597672205308510544347264131510511482728670598446185457330"), boost::lexical_cast("-15.68018534623854167865753994586968580089803038651229171712344769674882728010"), boost::lexical_cast("8.67101479337829604724549631142381262698058260107053126173973190165021528756"), boost::lexical_cast("-3.75861505024024002675376566574475255211823912083547822262099741013249261042"), boost::lexical_cast("1.54759756025881232336945003625817637725576271772356562382087334473774930037"), boost::lexical_cast("-0.630476888107043555221797973970574912788012829526634744673511131029200828552"), boost::lexical_cast("0.138289110458663700735511423590028378928536403452989070482014794553004832387"), boost::lexical_cast("0.0107951927880023305749242734468149776729151693312718188651043715681726172060"), boost::lexical_cast("-0.00754991006043983586111967321038913970058172016189708501693056751092430574556"), boost::lexical_cast("0.0000768855369034014413090954158857823182271817483052059631674255096393926162955"), boost::lexical_cast("0.00000423822734359358265360311498568469600739757885517978000979834786982597738573"), boost::lexical_cast("-0.00000000220476848184896613372739980059823724812480482106220385749059723040813819200"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 12) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.318010404217068952718034999205043880576086312876319450942332822179758832029"), boost::lexical_cast("-3.06102355351185926427319739531099202637190548705353100594409222193573135420"), boost::lexical_cast("12.80258811164971729344541416108618061243147012390344502415152454109791488170"), boost::lexical_cast("-30.20065038067138441549116683827153320363339703988815649029826192469828800770"), boost::lexical_cast("43.77746941222910636253894420655558692365422509195889774642773187854112783890"), boost::lexical_cast("-41.06426623869672590682998039683326333327190758069356155782396545157455445810"), boost::lexical_cast("30.06896895338094213763603114520529005887555601480166742767460715185260403040"), boost::lexical_cast("-27.99669565569003172852864940058873702820215437394869573794696284139245305100"), boost::lexical_cast("31.40904224961940872590760582915710475701943523191305275220782176766892814960"), boost::lexical_cast("-26.61147707975226987062278644044150684817213866306112594162111544688454753810"), boost::lexical_cast("17.28072628404804003669507530790723055238159750081532699647611742207459371760"), boost::lexical_cast("-13.03306623382955516457538291782723729027040840647527902140735049489731225810"), boost::lexical_cast("10.92329406410031923111395110524973244956738959185047643214517216152345088230"), boost::lexical_cast("-6.76457200306911915343728115159545396428972131599592522482710193109520612768"), boost::lexical_cast("3.38673622817880270826803177141868102896290888908534559567608966529440899137"), boost::lexical_cast("-2.13778155318707274308581153289738935049994670784897895468735053193538091817"), boost::lexical_cast("1.27222976665752962431763512471169495246258962134804638636049901609786075729"), boost::lexical_cast("-0.460207043844736395307656318205719088747297298981176544972613522761762760908"), boost::lexical_cast("0.144411215423571925617311283427170089385196189708352755544769370328688396733"), boost::lexical_cast("-0.0739504408724418236152196080232313887266756275356214749508197882784413005326"), boost::lexical_cast("0.0162851961244162892390054615243955015081698723875469655847838117885736756969"), boost::lexical_cast("0.00670013886238182672051081804470702049361779245043541997098482037556851799328"), boost::lexical_cast("-0.00289413784660480308858813839825464801550958078392680116427992804058429400263"), boost::lexical_cast("0.000118226656863479167736819869491754498449905525596694943882369054828973203042"), boost::lexical_cast("0.00000407408378246154606805470217575324383090557556739356701916389328686441606510"), boost::lexical_cast("-0.00000000426014978607563594967116716485946096193409828602942187827734146599194530321"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 13) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0395024226975886260436015280169399958114854435612876899457087608537691328646"), boost::lexical_cast("-0.380760085660020846754522453148461762110774614299327773117958074184114684427"), boost::lexical_cast("1.58439192679626572323538988717033413533100806730431629991619477048720282652"), boost::lexical_cast("-3.66849225666251646147181612467387048084530225694986405715851065686876160983"), boost::lexical_cast("5.05702740810994469396903380618346647120804579341221278933287204214673197742"), boost::lexical_cast("-4.15893692928322415963268762106489569036113711224820559316556226723553567830"), boost::lexical_cast("2.30643665371429659490852199582838744397805404586749517662546347864184908967"), boost::lexical_cast("-2.03944535400713878630113040918470478717641098007862715614235550735403115717"), boost::lexical_cast("2.75044728818668477407502449063310312583442217870494512078004809643451540717"), boost::lexical_cast("-2.26532298526228934105124417738592200001859007857791140112570041681664957967"), boost::lexical_cast("1.10133212413495876761478507881985817641573463205155919865756735554719635510"), boost::lexical_cast("-0.777595611788659331793825514823424823892310615830315312836845770694620189298"), boost::lexical_cast("0.813470142541264561929778203493572597954340880125476192701684325142924496713"), boost::lexical_cast("-0.450006561808299358517226504782492541004402170854054357437291488004013112805"), boost::lexical_cast("0.118500916380668803483753735483540194370353148612714533622232357622587131639"), boost::lexical_cast("-0.0854382963811873726676785990040937155967645307765440929619971688798210204625"), boost::lexical_cast("0.0688056358160580011265953288213120273922091465442762386643516670175176351229"), boost::lexical_cast("-0.00316181231306575845649567960204080415859090715018690879061132888462092674318"), boost::lexical_cast("-0.0134704997550951956780703608930294861647935543468679644642083630288728953920"), boost::lexical_cast("0.00294686750299967882443641101664969682445375118992583309612547894575220278859"), boost::lexical_cast("-0.00215928663487753773644923527389606027569391521127003378892960294361464727064"), boost::lexical_cast("0.00292603166127365869089828154580427557123447155142574321458389044685037686218"), boost::lexical_cast("-0.00111176154864526774012502920031740858426807693116963525197176827996288733339"), boost::lexical_cast("0.000109753902477691254708467520181547449682815029110458229838831733837259897127"), boost::lexical_cast("0.00000427869999580130042052373770473160246635622398207650727324687442110256565531"), boost::lexical_cast("-0.00000000903945795865567602923370485955445191692438306505200188872053733298346930198"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 15) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.d99d62p-12f, 0x1.0d2f98p-4f, 0x1.4a5392p-1f, 0x1.1fc50ep-1f, -0x1.d49776p-2f, 0x1.3575a8p-2f, -0x1.7e644ap-3f, 0x1.a17858p-4f, -0x1.7135a6p-5f, 0x1.d8cfdcp-7f, -0x1.57e158p-9f, -0x1.5f6332p-15f, 0x1.10a458p-13f, -0x1.592264p-16f, 0x1.899798p-18f, -0x1.4f8412p-18f, 0x1.74953ep-20f, -0x1.f7cb1ap-26f, -0x1.c92be2p-26f, -0x1.3b9a58p-35f, -0x1.6a58cep-35f, 0x1.4bf1ecp-37f, 0x1.697068p-44f, -0x1.513d7ap-49f, -0x1.b3943cp-57f, 0x1.54d33p-67f, -0x1.3f6e1ep-80f, -0x1.d0d882p-104f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.af6738p-9f, 0x1.c7ad46p-3f, 0x1.9756ccp-1f, -0x1.519166p+0f, 0x1.6cc6e8p-2f, -0x1.8cf37ep-4f, 0x1.9a3fa2p-4f, -0x1.0a50bep-3f, 0x1.df3f5p-4f, -0x1.2d4b7ep-4f, 0x1.0681e4p-5f, -0x1.1b50d6p-7f, 0x1.49acd2p-11f, 0x1.16651ap-11f, -0x1.c26d2p-13f, 0x1.300212p-16f, 0x1.49fbecp-17f, -0x1.8781a4p-19f, 0x1.5ed0aep-24f, 0x1.da4a76p-25f, -0x1.7e23c8p-29f, -0x1.bd8f2cp-35f, 0x1.1c615p-37f, -0x1.c1b8b4p-44f, -0x1.95157p-52f, 0x1.d1f8dep-60f, -0x1.34635ep-74f, -0x1.c0c6d2p-97f, 0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.52aa16p-6f, 0x1.2f3864p-1f, -0x1.92da3ep-2f, -0x1.010e6cp+1f, 0x1.ba5e58p+1f, -0x1.6efa1ap+1f, 0x1.e2fp+0f, -0x1.e9e848p-1f, 0x1.3e7bdp-2f, -0x1.3f21e6p-6f, -0x1.00e092p-5f, 0x1.93252ep-8f, 0x1.0cb53cp-7f, -0x1.6ecc66p-8f, 0x1.1da3c8p-10f, 0x1.0f705cp-12f, -0x1.687f18p-13f, 0x1.03bf74p-15f, -0x1.0a570cp-20f, -0x1.b60c86p-22f, 0x1.2f36c8p-24f, -0x1.ab6b4ep-30f, -0x1.b77dbep-33f, 0x1.02e06ap-39f, 0x1.f900dcp-46f, -0x1.5cc6acp-54f, 0x1.79a9bep-67f, 0x1.12cb1cp-88f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.bde47ep-4f, 0x1.ff6e3ap-1f, -0x1.0edf78p+2f, 0x1.788ebp+2f, -0x1.0b9e58p+2f, 0x1.57d72ap+1f, -0x1.5aec5ap+1f, 0x1.66bep+1f, -0x1.257b74p+1f, 0x1.61e6a2p+0f, -0x1.1d6618p-1f, 0x1.7634aep-4f, 0x1.aae5ecp-5f, -0x1.66a2dep-5f, 0x1.9ee5c4p-7f, 0x1.cee452p-12f, -0x1.7d0e64p-10f, 0x1.95a9bcp-12f, -0x1.ac68b8p-17f, -0x1.4a3e54p-17f, 0x1.45a5b2p-20f, -0x1.a0585ep-28f, -0x1.4a4abp-28f, 0x1.818dc4p-34f, 0x1.bc8ec6p-41f, -0x1.1c50f4p-48f, 0x1.541ee6p-61f, 0x1.eef3c6p-82f, -0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.da9efcp-2f, -0x1.0a9636p-2f, -0x1.6ead78p+2f, 0x1.1fb0b8p+4f, -0x1.a26b2p+4f, 0x1.5a3628p+4f, -0x1.c3b938p+2f, -0x1.0393f6p+3f, 0x1.ce0e34p+3f, -0x1.3371f4p+3f, 0x1.04744cp-2f, 0x1.5d5bbap+2f, -0x1.56903ap+2f, 0x1.4f3674p+1f, -0x1.16f1cp-1f, -0x1.0ca608p-3f, 0x1.fd1e64p-4f, -0x1.12756ap-5f, 0x1.031ce4p-9f, 0x1.dbc5a2p-11f, -0x1.6e5758p-13f, 0x1.338c12p-19f, 0x1.ec833cp-21f, -0x1.31ee1ep-26f, -0x1.068ccep-32f, 0x1.ab486ep-40f, -0x1.971ac6p-52f, -0x1.28365cp-71f, 0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.8a28cp+0f, -0x1.0b8eccp+3f, 0x1.301d18p+4f, -0x1.80a5fep+4f, 0x1.4a39e4p+4f, -0x1.114828p+4f, 0x1.18e244p+4f, -0x1.390866p+4f, 0x1.80446cp+4f, -0x1.0a407ap+5f, 0x1.52509ep+5f, -0x1.4b4686p+5f, 0x1.c80f14p+4f, -0x1.82ded4p+3f, 0x1.7610a2p+0f, 0x1.b0a89ap+0f, -0x1.2b516ep+0f, 0x1.48818ap-2f, -0x1.16dd92p-6f, -0x1.957d58p-7f, 0x1.613bdp-9f, -0x1.0adbcp-14f, -0x1.449056p-16f, 0x1.238bd6p-21f, 0x1.0b863cp-27f, -0x1.2dac52p-34f, 0x1.a8ab5ap-46f, 0x1.34fcf8p-64f, -0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.e156f6p+1f, -0x1.d9350cp+4f, 0x1.b03e3ap+6f, -0x1.f51dfap+7f, 0x1.b1d9eep+8f, -0x1.3c90b8p+9f, 0x1.a1026p+9f, -0x1.ee82dcp+9f, 0x1.fcf16ap+9f, -0x1.beee0ep+9f, 0x1.545f4ap+9f, -0x1.c39ca4p+8f, 0x1.d17e6ep+7f, -0x1.8d05e2p+5f, -0x1.a57ddap+5f, 0x1.065bfcp+6f, -0x1.1a783cp+5f, 0x1.2e9f2cp+3f, -0x1.3cad9ap-2f, -0x1.1b4b3ap-1f, 0x1.15a314p-3f, -0x1.5c66a6p-8f, -0x1.5db56p-10f, 0x1.c57be6p-15f, 0x1.c9738p-21f, -0x1.63f652p-27f, 0x1.769768p-38f, 0x1.108b38p-55f, -0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.d870dep+2f, -0x1.0c2b8cp+6f, 0x1.10bd38p+8f, -0x1.4441dap+9f, 0x1.eaed48p+9f, -0x1.dea056p+9f, 0x1.0ea6dep+9f, 0x1.3bb922p+5f, -0x1.7c03d4p+9f, 0x1.b77df6p+10f, -0x1.59dd46p+11f, 0x1.92ad5ep+11f, -0x1.7716eap+11f, 0x1.34cd94p+11f, -0x1.d21086p+10f, 0x1.27e204p+10f, -0x1.0ee014p+9f, 0x1.13ffcp+7f, 0x1.9021aap+1f, -0x1.cb9506p+3f, 0x1.f11cd6p+1f, -0x1.a3fefep-3f, -0x1.a953dap-5f, 0x1.9718bep-9f, 0x1.ad424ap-15f, -0x1.eb70cep-21f, 0x1.72006ap-31f, 0x1.0d3062p-47f, 0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.155158p+3f, -0x1.4fec3ap+6f, 0x1.70dec4p+8f, -0x1.e94cfep+9f, 0x1.bf0b1p+10f, -0x1.392918p+11f, 0x1.79ccf6p+11f, -0x1.ab6c9p+11f, 0x1.c47edap+11f, -0x1.af1006p+11f, 0x1.72a85ap+11f, -0x1.2846e6p+11f, 0x1.b3d87ep+10f, -0x1.1ae106p+10f, 0x1.41e16ep+9f, -0x1.46003p+8f, 0x1.0818e6p+7f, -0x1.8ef0b6p+4f, -0x1.6eb8ecp+3f, 0x1.3aba04p+3f, -0x1.588d6ep+1f, 0x1.5ca064p-3f, 0x1.72c884p-5f, -0x1.2b7b9ap-8f, -0x1.359ad6p-14f, 0x1.0cff08p-19f, -0x1.207536p-29f, -0x1.a3ad9ep-45f, -0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.174fb2p+3f, -0x1.5cf63cp+6f, 0x1.859702p+8f, -0x1.008e38p+10f, 0x1.c03c1cp+10f, -0x1.1e0d3p+11f, 0x1.33504ep+11f, -0x1.4498a4p+11f, 0x1.500c42p+11f, -0x1.2d6f92p+11f, 0x1.c5bd8cp+10f, -0x1.3b7208p+10f, 0x1.a4b182p+9f, -0x1.c03584p+8f, 0x1.1254d6p+7f, 0x1.be195p+2f, -0x1.6abf52p+5f, 0x1.bdfa94p+5f, -0x1.7a9c1p+5f, 0x1.86920ep+4f, -0x1.a9adfcp+2f, 0x1.133764p-1f, 0x1.191c64p-3f, -0x1.88d184p-6f, -0x1.aee4f4p-12f, 0x1.15e5eap-16f, -0x1.bc4492p-26f, -0x1.431c04p-40f, -0x0p+0f}; - } - if constexpr (order == 10) { - return {0x0p+0f, 0x1.57dd2p+2f, -0x1.b426bap+5f, 0x1.ef50bp+7f, -0x1.4da8e6p+9f, 0x1.2d889ap+10f, -0x1.9456ecp+10f, 0x1.ca1f76p+10f, -0x1.f2eaf2p+10f, 0x1.0a60e2p+11f, -0x1.07fe76p+11f, 0x1.e2b37ep+10f, -0x1.a28fdp+10f, 0x1.5596d2p+10f, -0x1.027612p+10f, 0x1.70f45ap+9f, -0x1.edf5a6p+8f, 0x1.27b1e2p+8f, -0x1.3be692p+7f, 0x1.3b71fp+6f, -0x1.11985ep+5f, 0x1.3b5a98p+3f, -0x1.c32c18p-1f, -0x1.5d8e8ap-2f, 0x1.3b1b46p-4f, 0x1.23706ep-10f, -0x1.9c26fcp-14f, 0x1.96293ap-23f, 0x1.27428ap-36f, 0x0p+0f}; - } - if constexpr (order == 11) { - return {0x0p+0f, 0x1.82ba18p+1f, -0x1.ee321ap+4f, 0x1.174e6p+7f, -0x1.6e81d6p+8f, 0x1.368de4p+9f, -0x1.710674p+9f, 0x1.661d22p+9f, -0x1.6833b8p+9f, 0x1.833c1cp+9f, -0x1.704d0cp+9f, 0x1.2a287cp+9f, -0x1.d79574p+8f, 0x1.7a6624p+8f, -0x1.0dddap+8f, 0x1.4f8242p+7f, -0x1.9b8d6ep+6f, 0x1.e6b9cp+5f, -0x1.d872a6p+4f, 0x1.82e4e6p+3f, -0x1.3c81bp+2f, 0x1.87117ep+0f, -0x1.f2d1dcp-6f, -0x1.327c0ep-3f, 0x1.13b8cap-5f, -0x1.094894p-13f, -0x1.78471ap-14f, 0x1.31d268p-23f, 0x1.bc3afp-36f, 0x0p+0f}; - } - if constexpr (order == 12) { - return {0x0p+0f, 0x1.229018p+0f, -0x1.74b098p+3f, 0x1.a3d6fep+5f, -0x1.0ee9fep+7f, 0x1.b7ec28p+7f, -0x1.dcbffep+7f, 0x1.8f9512p+7f, -0x1.7421b2p+7f, 0x1.a17e1ep+7f, -0x1.8b13bap+7f, 0x1.210062p+7f, -0x1.a9798ep+6f, 0x1.62f522p+6f, -0x1.f0d146p+5f, 0x1.0b054p+5f, -0x1.2e7f82p+4f, 0x1.776b1ap+3f, -0x1.390aacp+2f, 0x1.0e68eap+0f, -0x1.1d9e68p-2f, 0x1.1e142p-5f, 0x1.626282p-3f, -0x1.00510ep-3f, 0x1.dda066p-6f, -0x1.397e42p-10f, -0x1.5e278p-13f, 0x1.93d63ep-23f, 0x1.24c486p-34f, -0x0p+0f}; - } - if constexpr (order == 13) { - return {0x0p+0f, 0x1.2dba82p-3f, -0x1.83ba9p+0f, 0x1.bc6ce4p+2f, -0x1.2c97bep+4f, 0x1.0e0692p+5f, -0x1.5f4706p+5f, 0x1.6ea3fcp+5f, -0x1.5a777ep+5f, 0x1.424978p+5f, -0x1.3091p+5f, 0x1.23e442p+5f, -0x1.07fd36p+5f, 0x1.a8f488p+4f, -0x1.499324p+4f, 0x1.0a96d4p+4f, -0x1.8f60cep+3f, 0x1.003bccp+3f, -0x1.433efp+2f, 0x1.a65b7ep+1f, -0x1.d36032p+0f, 0x1.a4a1aep-1f, -0x1.88e9f6p-2f, 0x1.6764fap-3f, -0x1.91c36cp-5f, 0x1.07d03ep-8f, 0x1.362d3ep-11f, -0x1.92dbfep-20f, -0x1.22ff8p-30f, 0x0p+0f}; - } - if constexpr (order == 14) { - return {0x0p+0f, 0x1.8dd6e2p-6f, -0x1.ffb4dep-3f, 0x1.1f8df8p+0f, -0x1.6eae32p+1f, 0x1.200cfep+2f, -0x1.1f2876p+2f, 0x1.90990cp+1f, -0x1.3d166cp+1f, 0x1.74d60ap+1f, -0x1.680266p+1f, 0x1.e76ba8p+0f, -0x1.60830ap+0f, 0x1.48f2a8p+0f, -0x1.e7d09ep-1f, 0x1.1252eep-1f, -0x1.6e9dp-2f, 0x1.0a88fcp-2f, -0x1.16ea72p-3f, 0x1.018afap-4f, -0x1.2fa054p-5f, 0x1.2375eep-6f, -0x1.73b10cp-8f, 0x1.1decc8p-9f, -0x1.b8713ap-11f, 0x1.732712p-14f, 0x1.5deb76p-16f, -0x1.927126p-23f, -0x1.209992p-32f, 0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.d99d611c0465dp-12, 0x1.0d2f985427a1ep-4, 0x1.4a539266aac6ep-1, 0x1.1fc50d04f7f08p-1, -0x1.d497750272bfap-2, 0x1.3575a87d9c163p-2, -0x1.7e644ab118887p-3, 0x1.a1785765bb949p-4, -0x1.7135a6ada8b52p-5, 0x1.d8cfdcbb16189p-7, -0x1.57e157b5bcea8p-9, -0x1.5f633204e95ap-15, 0x1.10a4589d9f87dp-13, -0x1.592264d16e622p-16, 0x1.89979784d7185p-18, -0x1.4f841169a1badp-18, 0x1.74953d3967ccep-20, -0x1.f7cb1acefcf43p-26, -0x1.c92be21aef0cap-26, -0x1.3b9a57c4ce7e8p-35, -0x1.6a58cec0fa225p-35, 0x1.4bf1eb8cd4c9cp-37, 0x1.697067f1715a1p-44, -0x1.513d790bd243p-49, -0x1.b3943c02986a6p-57, 0x1.54d330be5783ep-67, -0x1.3f6e1e631364cp-80, -0x1.d0d882f8587b5p-104, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.af673717274afp-9, 0x1.c7ad45d086ea5p-3, 0x1.9756cb092ee07p-1, -0x1.51916657c1834p+0, 0x1.6cc6e8f062405p-2, -0x1.8cf37d6182ca1p-4, 0x1.9a3fa2f41d495p-4, -0x1.0a50be22f2b87p-3, 0x1.df3f4f6c19d45p-4, -0x1.2d4b7e715db6cp-4, 0x1.0681e4c20b9fdp-5, -0x1.1b50d689cbed9p-7, 0x1.49acd134a254cp-11, 0x1.16651955943e4p-11, -0x1.c26d1f2c70c87p-13, 0x1.3002118e762a1p-16, 0x1.49fbecfd7d9c7p-17, -0x1.8781a4a6a5f7dp-19, 0x1.5ed0ad164acd2p-24, 0x1.da4a7558674aep-25, -0x1.7e23c7237f3f9p-29, -0x1.bd8f2cef8c9fp-35, 0x1.1c61501fa1048p-37, -0x1.c1b8b33989e02p-44, -0x1.95156f39cb33ap-52, 0x1.d1f8ddb7d0199p-60, -0x1.34635de67ce8cp-74, -0x1.c0c6d283f741ep-97, 0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.52aa167437ed4p-6, 0x1.2f386450cd36p-1, -0x1.92da3e0f4795fp-2, -0x1.010e6c23362c3p+1, 0x1.ba5e5707337cfp+1, -0x1.6efa1a351e689p+1, 0x1.e2efff792ca6dp+0, -0x1.e9e84815ce29ap-1, 0x1.3e7bcfc83dd35p-2, -0x1.3f21e5e83db9bp-6, -0x1.00e091b8310d8p-5, 0x1.93252ea5d40eep-8, 0x1.0cb53bda124f5p-7, -0x1.6ecc6596fdeb9p-8, 0x1.1da3c88de4594p-10, 0x1.0f705c9109b89p-12, -0x1.687f176415b5ap-13, 0x1.03bf749271ea1p-15, -0x1.0a570c997b8f7p-20, -0x1.b60c856b75c7p-22, 0x1.2f36c8024d478p-24, -0x1.ab6b4d2a0c9ebp-30, -0x1.b77dbd4d624bbp-33, 0x1.02e06a0b52529p-39, 0x1.f900db818405cp-46, -0x1.5cc6aba4a367p-54, 0x1.79a9be1badafp-67, 0x1.12cb1c6610cf6p-88, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.bde47de89537fp-4, 0x1.ff6e39e05bc19p-1, -0x1.0edf7812c7e6fp+2, 0x1.788eafbfef57p+2, -0x1.0b9e58d049e2bp+2, 0x1.57d72a54d9b7ep+1, -0x1.5aec59993d64cp+1, 0x1.66be004fbc258p+1, -0x1.257b730e2148dp+1, 0x1.61e6a248fa766p+0, -0x1.1d66170848573p-1, 0x1.7634ae9385e7dp-4, 0x1.aae5eb36cf234p-5, -0x1.66a2dd81189a5p-5, 0x1.9ee5c38dff3c6p-7, 0x1.cee452b55c63p-12, -0x1.7d0e63753adf8p-10, 0x1.95a9bb14ccec1p-12, -0x1.ac68b8496deeap-17, -0x1.4a3e531dccd5ap-17, 0x1.45a5b2adacfeep-20, -0x1.a0585e72874e5p-28, -0x1.4a4aaf36fdaecp-28, 0x1.818dc3c36642cp-34, 0x1.bc8ec635290e4p-41, -0x1.1c50f4adb4d49p-48, 0x1.541ee5efeba28p-61, 0x1.eef3c669427bap-82, -0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.da9efb84cd102p-2, -0x1.0a963523c781p-2, -0x1.6ead78b2a7f87p+2, 0x1.1fb0b7ee7fe9bp+4, -0x1.a26b20f9bdefp+4, 0x1.5a362701692b6p+4, -0x1.c3b93743ed5e2p+2, -0x1.0393f54066e2bp+3, 0x1.ce0e335b9b5dp+3, -0x1.3371f4378fc26p+3, 0x1.04744c732a897p-2, 0x1.5d5bbaac2d3ddp+2, -0x1.56903abc9d373p+2, 0x1.4f367450bb029p+1, -0x1.16f1bf1e47dd8p-1, -0x1.0ca6089fc41eep-3, 0x1.fd1e6437298dfp-4, -0x1.127569c6d3d2p-5, 0x1.031ce43d6f2aap-9, 0x1.dbc5a12350174p-11, -0x1.6e57586c99db3p-13, 0x1.338c12c9a95b4p-19, 0x1.ec833bdc8d6abp-21, -0x1.31ee1e222a83p-26, -0x1.068cce25031dp-32, 0x1.ab486d191520ep-40, -0x1.971ac61147c4cp-52, -0x1.28365b5992262p-71, 0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.8a28bf1f4bafp+0, -0x1.0b8ecb513e671p+3, 0x1.301d17ac5e1c7p+4, -0x1.80a5fd5ebbea5p+4, 0x1.4a39e3e1048d6p+4, -0x1.1148278e9d9a1p+4, 0x1.18e244d79a033p+4, -0x1.3908669ba0779p+4, 0x1.80446c71adb15p+4, -0x1.0a40794798e41p+5, 0x1.52509dd04c4f7p+5, -0x1.4b468531c5b1ap+5, 0x1.c80f1430e334ap+4, -0x1.82ded3c89e7eap+3, 0x1.7610a167089f2p+0, 0x1.b0a89a8818c06p+0, -0x1.2b516da5d081p+0, 0x1.488189c0e6323p-2, -0x1.16dd91fce8d2fp-6, -0x1.957d5757f4d58p-7, 0x1.613bcf2c2fc6ap-9, -0x1.0adbc024da551p-14, -0x1.44905597a8908p-16, 0x1.238bd55115864p-21, 0x1.0b863bc593a1dp-27, -0x1.2dac52b5d35bcp-34, 0x1.a8ab5a61388b2p-46, 0x1.34fcf88bcfb4p-64, -0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.e156f58145abap+1, -0x1.d9350b2238c2cp+4, 0x1.b03e3957ecd6ap+6, -0x1.f51dfa789d879p+7, 0x1.b1d9ee3321d94p+8, -0x1.3c90b7e3ca1dcp+9, 0x1.a1025f9df5666p+9, -0x1.ee82dbab6ab1p+9, 0x1.fcf169933904cp+9, -0x1.beee0dc0c8ddbp+9, 0x1.545f49e00f496p+9, -0x1.c39ca355bd5d3p+8, 0x1.d17e6e268802dp+7, -0x1.8d05e2b81cf72p+5, -0x1.a57ddae4deceep+5, 0x1.065bfb9cfed1p+6, -0x1.1a783beefce88p+5, 0x1.2e9f2c1581a69p+3, -0x1.3cad9a2427052p-2, -0x1.1b4b3a7aa70e8p-1, 0x1.15a31469a9cep-3, -0x1.5c66a63c93474p-8, -0x1.5db560cc8a8d9p-10, 0x1.c57be52a95f9ap-15, 0x1.c9738067c590ap-21, -0x1.63f652c472259p-27, 0x1.769767db4423bp-38, 0x1.108b386e39e95p-55, -0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.d870debcc05c4p+2, -0x1.0c2b8b0b28194p+6, 0x1.10bd374d63551p+8, -0x1.4441daef321d4p+9, 0x1.eaed48222cc9cp+9, -0x1.dea055aad4ecbp+9, 0x1.0ea6de87556eap+9, 0x1.3bb921604519dp+5, -0x1.7c03d4dcf5514p+9, 0x1.b77df6c77230cp+10, -0x1.59dd45c186fb1p+11, 0x1.92ad5ee85458dp+11, -0x1.7716e9b298972p+11, 0x1.34cd942cd473ap+11, -0x1.d2108687fa36fp+10, 0x1.27e2041912518p+10, -0x1.0ee0131c1b04fp+9, 0x1.13ffc016f56cap+7, 0x1.9021a9dd4e12bp+1, -0x1.cb9505a70965bp+3, 0x1.f11cd618c3359p+1, -0x1.a3fefe1a942d4p-3, -0x1.a953da883746ep-5, 0x1.9718bee3af729p-9, 0x1.ad4249f39958ep-15, -0x1.eb70cd1aa4051p-21, 0x1.72006a07a097fp-31, 0x1.0d30627e6a2adp-47, 0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.155158ac6ea98p+3, -0x1.4fec3a6a32c1fp+6, 0x1.70dec41eaf97dp+8, -0x1.e94cfecb1efa1p+9, 0x1.bf0b100d34d04p+10, -0x1.39291803fcf48p+11, 0x1.79ccf50afb46ep+11, -0x1.ab6c90991611bp+11, 0x1.c47ed9a17b9cdp+11, -0x1.af1005783c9c1p+11, 0x1.72a859cabb472p+11, -0x1.2846e6b9b14f5p+11, 0x1.b3d87dff6a955p+10, -0x1.1ae10527ae494p+10, 0x1.41e16e9c43533p+9, -0x1.460030c5bf207p+8, 0x1.0818e6dd9acdcp+7, -0x1.8ef0b66c7662cp+4, -0x1.6eb8ec2d2fcfp+3, 0x1.3aba0303f01c4p+3, -0x1.588d6d239648ep+1, 0x1.5ca063a2897a3p-3, 0x1.72c884e06d39ap-5, -0x1.2b7b99da7239bp-8, -0x1.359ad5ec914c6p-14, 0x1.0cff089d4d593p-19, -0x1.207535755ab2fp-29, -0x1.a3ad9d559345cp-45, -0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.174fb1d673064p+3, -0x1.5cf63b4072a08p+6, 0x1.859702b93092p+8, -0x1.008e38c64d405p+10, 0x1.c03c1b8df613fp+10, -0x1.1e0d30516cd0dp+11, 0x1.33504e2e62ab9p+11, -0x1.4498a39b45dd3p+11, 0x1.500c422b7e4d6p+11, -0x1.2d6f916f2f064p+11, 0x1.c5bd8b8beccdbp+10, -0x1.3b7208dc18507p+10, 0x1.a4b1819107c72p+9, -0x1.c03583e492981p+8, 0x1.1254d5dd1a3c8p+7, 0x1.be19509979c25p+2, -0x1.6abf524121ea4p+5, 0x1.bdfa9494723d3p+5, -0x1.7a9c102bdb495p+5, 0x1.86920d3d07ed2p+4, -0x1.a9adfb25c4f27p+2, 0x1.1337641b89dbcp-1, 0x1.191c64622c1b1p-3, -0x1.88d18423866c2p-6, -0x1.aee4f466bb969p-12, 0x1.15e5e9747fe1cp-16, -0x1.bc4491eee0fddp-26, -0x1.431c03e754cd9p-40, -0x0p+0}; - } - if constexpr (order == 10) { - return {0x0p+0, 0x1.57dd202e5e84bp+2, -0x1.b426b94987909p+5, 0x1.ef50af36bc94ap+7, -0x1.4da8e644667e7p+9, 0x1.2d889ab089911p+10, -0x1.9456ec86efc74p+10, 0x1.ca1f75d29c178p+10, -0x1.f2eaf24b48be9p+10, 0x1.0a60e2fdcea78p+11, -0x1.07fe75c2d8539p+11, 0x1.e2b37ed5f4462p+10, -0x1.a28fcff6e684bp+10, 0x1.5596d2be7c1f8p+10, -0x1.02761175eccb5p+10, 0x1.70f45a3e9b6c8p+9, -0x1.edf5a5b354e13p+8, 0x1.27b1e13298bb4p+8, -0x1.3be69243ef2c3p+7, 0x1.3b71f0120f2a4p+6, -0x1.11985d9404f45p+5, 0x1.3b5a9762f053bp+3, -0x1.c32c18767db72p-1, -0x1.5d8e89b8ba2f4p-2, 0x1.3b1b46a97c2fbp-4, 0x1.23706d03f6f74p-10, -0x1.9c26fc84f3ff6p-14, 0x1.962939a138e2bp-23, 0x1.27428a5934f9ep-36, 0x0p+0}; - } - if constexpr (order == 11) { - return {0x0p+0, 0x1.82ba18a281555p+1, -0x1.ee321ac782e81p+4, 0x1.174e5f65a44a6p+7, -0x1.6e81d57c4c979p+8, 0x1.368de3361fae5p+9, -0x1.7106731d7c871p+9, 0x1.661d220cefa1p+9, -0x1.6833b778e773bp+9, 0x1.833c1b7a24cc4p+9, -0x1.704d0cf5b403fp+9, 0x1.2a287b4a8744cp+9, -0x1.d795731af32d5p+8, 0x1.7a6623bbe9af8p+8, -0x1.0ddd9fa1ad022p+8, 0x1.4f824182bb441p+7, -0x1.9b8d6efd833c4p+6, 0x1.e6b9bfc912a61p+5, -0x1.d872a65489bc7p+4, 0x1.82e4e50171641p+3, -0x1.3c81b080d7c59p+2, 0x1.87117e04fd822p+0, -0x1.f2d1dbd395099p-6, -0x1.327c0d249414p-3, 0x1.13b8c9585145fp-5, -0x1.094893076dab2p-13, -0x1.784719262e6dap-14, 0x1.31d26875ab45fp-23, 0x1.bc3aef2e9698bp-36, 0x0p+0}; - } - if constexpr (order == 12) { - return {0x0p+0, 0x1.229017de89889p+0, -0x1.74b098d7b2942p+3, 0x1.a3d6fe58853c2p+5, -0x1.0ee9fe2c639a7p+7, 0x1.b7ec28edec454p+7, -0x1.dcbffedb3a508p+7, 0x1.8f9512e48d1c4p+7, -0x1.7421b1a880459p+7, 0x1.a17e1d21e73d2p+7, -0x1.8b13badbca1d9p+7, 0x1.210062e92f489p+7, -0x1.a9798d44da6c2p+6, 0x1.62f521d1972a8p+6, -0x1.f0d14679f69cp+5, 0x1.0b0540b21cf09p+5, -0x1.2e7f81d72375p+4, 0x1.776b19bc1de7bp+3, -0x1.390aaca35a349p+2, 0x1.0e68e94457017p+0, -0x1.1d9e671612a46p-2, 0x1.1e141f6f8381bp-5, 0x1.626281f06a565p-3, -0x1.00510e27c6afap-3, 0x1.dda065aa933f4p-6, -0x1.397e42b4cc1c2p-10, -0x1.5e2780fee3a22p-13, 0x1.93d63eaebefb8p-23, 0x1.24c485651202dp-34, -0x0p+0}; - } - if constexpr (order == 13) { - return {0x0p+0, 0x1.2dba81606cdf4p-3, -0x1.83ba9062dc10bp+0, 0x1.bc6ce42e9d3a2p+2, -0x1.2c97bd817af95p+4, 0x1.0e06914d93155p+5, -0x1.5f4706680d4aep+5, 0x1.6ea3fbf492341p+5, -0x1.5a777ed4931f2p+5, 0x1.424978021982dp+5, -0x1.3090ff3d7fed6p+5, 0x1.23e4419ddb641p+5, -0x1.07fd356f7673cp+5, 0x1.a8f488a3b6e4bp+4, -0x1.49932384ed8b5p+4, 0x1.0a96d421140ffp+4, -0x1.8f60cd9c05603p+3, 0x1.003bcbf26a5dbp+3, -0x1.433ef046d9ed1p+2, 0x1.a65b7dff93521p+1, -0x1.d36032adf2dbdp+0, 0x1.a4a1ad470bd0ep-1, -0x1.88e9f63513cep-2, 0x1.6764f965c9511p-3, -0x1.91c36b23af1d8p-5, 0x1.07d03d7a1adc2p-8, 0x1.362d3e37ff6cdp-11, -0x1.92dbfdbfa8198p-20, -0x1.22ff804507dbep-30, 0x0p+0}; - } - if constexpr (order == 14) { - return {0x0p+0, 0x1.8dd6e1684e11dp-6, -0x1.ffb4de00653d3p-3, 0x1.1f8df89dea984p+0, -0x1.6eae32a3a7907p+1, 0x1.200cfdab0a888p+2, -0x1.1f287662480abp+2, 0x1.90990b7ee9dd2p+1, -0x1.3d166b62b6086p+1, 0x1.74d60ae1a8cebp+1, -0x1.68026579c2214p+1, 0x1.e76ba8ae988d5p+0, -0x1.60830949d4c83p+0, 0x1.48f2a8ad7050dp+0, -0x1.e7d09d1d5c76ep-1, 0x1.1252ee85de925p-1, -0x1.6e9d007e3ce51p-2, 0x1.0a88fbec92db2p-2, -0x1.16ea71f276b01p-3, 0x1.018afa9348368p-4, -0x1.2fa053de7510ep-5, 0x1.2375ee2696f87p-6, -0x1.73b10c938e4b6p-8, 0x1.1decc8370b235p-9, -0x1.b8713a4dd74a9p-11, 0x1.732711f764c01p-14, 0x1.5deb76c540b6cp-16, -0x1.9271259f10414p-23, -0x1.2099915b93354p-32, 0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xe.cceb08e0232ebfep-15L, 0x8.697cc2a13d0ee1p-7L, 0xa.529c93355636f38p-4L, 0x8.fe286827bf83d25p-4L, -0xe.a4bba81395fd148p-5L, 0x9.abad43ece0b19efp-5L, -0xb.f3225588c443427p-6L, 0xd.0bc2bb2ddca46a9p-7L, -0xb.89ad356d45a90abp-8L, 0xe.c67ee5d8b0c44cdp-10L, -0xa.bf0abdade753fd6p-12L, -0xa.fb1990274acfe19p-18L, 0x8.8522c4ecfc3eb6ep-16L, -0xa.c913268b7310da9p-19L, 0xc.4cbcbc26b8c299cp-21L, -0xa.7c208b4d0dd68c5p-21L, 0xb.a4a9e9cb3e66c66p-23L, -0xf.be58d677e7a1ad2p-29L, -0xe.495f10d77864d6p-29L, -0x9.dcd2be2673f3d47p-38L, -0xb.52c67607d112652p-38L, 0xa.5f8f5c66a64e114p-40L, 0xb.4b833f8b8ad0a0ap-47L, -0xa.89ebc85e9217eeap-52L, -0xd.9ca1e014c35331bp-60L, 0xa.a69985f2bc1edb9p-70L, -0x9.fb70f3189b26326p-83L, -0xe.86c417c2c3da4c7p-107L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xd.7b39b8b93a579b8p-12L, 0xe.3d6a2e84375262fp-6L, 0xc.bab6584977037b5p-4L, -0xa.8c8b32be0c1a23fp-3L, 0xb.663747831202959p-5L, -0xc.679beb0c165058cp-7L, 0xc.d1fd17a0ea4a983p-7L, -0x8.5285f11795c36ecp-6L, 0xe.f9fa7b60cea28cap-7L, -0x9.6a5bf38aedb5fc2p-7L, 0x8.340f26105cfe721p-8L, -0x8.da86b44e5f6c6f9p-10L, 0xa.4d6689a512a5d01p-14L, 0x8.b328caaca1f1c8cp-14L, -0xe.1368f9638643783p-16L, 0x9.80108c73b15088ep-19L, 0xa.4fdf67ebece365dp-20L, -0xc.3c0d25352fbe46dp-22L, 0xa.f68568b2566925p-27L, 0xe.d253aac33a56ee8p-28L, -0xb.f11e391bf9fc9acp-32L, -0xd.ec79677c64f81e9p-38L, 0x8.e30a80fd082403ap-40L, -0xe.0dc599cc4f0122fp-47L, -0xc.a8ab79ce599d1e7p-55L, 0xe.8fc6edbe80cc4a8p-63L, -0x9.a31aef33e745dcdp-77L, -0xe.0636941fba0f2ecp-100L, 0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0xa.9550b3a1bf69d4cp-9L, 0x9.79c3228669b01a3p-4L, -0xc.96d1f07a3cafa97p-5L, -0x8.08736119b1617adp-2L, 0xd.d2f2b8399be77e4p-2L, -0xb.77d0d1a8f344a12p-2L, 0xf.177ffbc96536692p-3L, -0xf.4f4240ae714d2acp-4L, 0x9.f3de7e41ee9a787p-5L, -0x9.f90f2f41edcdbb5p-9L, -0x8.07048dc1886be21p-8L, 0xc.9929752ea076dc3p-11L, 0x8.65a9ded0927a627p-10L, -0xb.76632cb7ef5cbbcp-11L, 0x8.ed1e446f22c9d07p-13L, 0x8.7b82e4884dc45e4p-15L, -0xb.43f8bb20adad0a1p-16L, 0x8.1dfba4938f506e5p-18L, -0x8.52b864cbdc7b5dap-23L, -0xd.b0642b5bae37c7cp-25L, 0x9.79b640126a3c29ep-27L, -0xd.5b5a695064f587ep-33L, -0xd.bbedea6b125d8c1p-36L, 0x8.1703505a92944ccp-42L, 0xf.c806dc0c202de26p-49L, -0xa.e6355d251b37dfep-57L, 0xb.cd4df0dd6d782f3p-70L, 0x8.9658e330867ad2ep-91L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xd.ef23ef44a9bf7e6p-7L, 0xf.fb71cf02de0cb05p-4L, -0x8.76fbc0963f37be8p-1L, 0xb.c4757dff7ab7e6ep-1L, -0x8.5cf2c6824f158e6p-1L, 0xa.beb952a6cdbec82p-2L, -0xa.d762ccc9eb2601dp-2L, 0xb.35f0027de12c188p-2L, -0x9.2bdb98710a46a7ap-2L, 0xb.0f351247d3b2edap-3L, -0x8.eb30b84242b9b67p-4L, 0xb.b1a5749c2f3e942p-7L, 0xd.572f59b67919cdep-8L, -0xb.3516ec08c4d2b92p-8L, 0xc.f72e1c6ff9e2d6dp-10L, 0xe.772295aae3180b3p-15L, -0xb.e8731ba9d6fc085p-13L, 0xc.ad4dd8a66760405p-15L, -0xd.6345c24b6f75385p-20L, -0xa.51f298ee66ad3e4p-20L, 0xa.2d2d956d67f7238p-23L, -0xd.02c2f3943a728d1p-31L, -0xa.525579b7ed76162p-31L, 0xc.0c6e1e1b32163bep-37L, 0xd.e47631a948722aep-44L, -0x8.e287a56da6a461dp-51L, 0xa.a0f72f7f5d13f61p-64L, 0xf.779e334a13dd19fp-85L, -0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0xe.d4f7dc266880dc5p-5L, -0x8.54b1a91e3c07cabp-5L, -0xb.756bc5953fc385dp-1L, 0x8.fd85bf73ff4da1p+1L, -0xd.135907cdef77f86p+1L, 0xa.d1b1380b495aeaap+1L, -0xe.1dc9ba1f6af0fa5p-1L, -0x8.1c9faa033715437p+0L, 0xe.70719adcdae7ec4p+0L, -0x9.9b8fa1bc7e12e6ep+0L, 0x8.23a26399544b84bp-5L, 0xa.eaddd56169ee9cdp-1L, -0xa.b481d5e4e9b9684p-1L, 0xa.79b3a285d814a56p-2L, -0x8.b78df8f23eebd9ap-4L, -0x8.653044fe20f733p-6L, 0xf.e8f321b94c6f489p-7L, -0x8.93ab4e369e900fp-8L, 0x8.18e721eb7954d94p-12L, 0xe.de2d091a80b9ee2p-14L, -0xb.72bac364ced9545p-16L, 0x9.9c60964d4ada3f3p-22L, 0xf.6419dee46b558e8p-24L, -0x9.8f70f1115417f37p-29L, -0x8.3466712818e830ep-35L, 0xd.5a4368c8a906c55p-43L, -0xc.b8d6308a3e25ebp-55L, -0x9.41b2dacc9130e5dp-74L, 0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xc.5145f8fa5d7812bp-3L, -0x8.5c765a89f338723p+0L, 0x9.80e8bd62f0e36d7p+1L, -0xc.052feaf5df5265fp+1L, 0xa.51cf1f08246b12ap+1L, -0x8.8a413c74ecd0982p+1L, 0x8.c71226bcd019464p+1L, -0x9.c84334dd03bcb23p+1L, 0xc.0223638d6d8a444p+1L, -0x8.5203ca3cc7208f6p+2L, 0xa.9284ee82627b576p+2L, -0xa.5a34298e2d8cfacp+2L, 0xe.4078a18719a503cp+1L, -0xc.16f69e44f3f4fd2p+0L, 0xb.b0850b3844f8cadp-3L, 0xd.8544d440c6033bfp-3L, -0x9.5a8b6d2e8407dd6p-3L, 0xa.440c4e0731919f2p-5L, -0x8.b6ec8fe746979d1p-9L, -0xc.abeababfa6ac0f1p-10L, 0xb.09de79617e3529fp-12L, -0x8.56de0126d2a8a97p-17L, -0xa.2482acbd44843d2p-19L, 0x9.1c5eaa88ac31dcbp-24L, 0x8.5c31de2c9d0ea8bp-30L, -0x9.6d6295ae9addc71p-37L, 0xd.455ad309c458ed8p-49L, 0x9.a7e7c45e7d9feeap-67L, -0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xf.0ab7ac0a2d5d3e8p-2L, -0xe.c9a85911c615c82p+1L, 0xd.81f1cabf66b5001p+3L, -0xf.a8efd3c4ec3c419p+4L, 0xd.8ecf71990eca11bp+5L, -0x9.e485bf1e50edc17p+6L, 0xd.0812fcefab32f7bp+6L, -0xf.7416dd5b55881cap+6L, 0xf.e78b4c99c8261c4p+6L, -0xd.f7706e0646ed8ddp+6L, 0xa.a2fa4f007a4af9bp+6L, -0xe.1ce51aadeae94b8p+5L, 0xe.8bf371344016517p+4L, -0xc.682f15c0e7b935cp+2L, -0xd.2beed726f676c5ap+2L, 0x8.32dfdce7f6881c4p+3L, -0x8.d3c1df77e743d81p+2L, 0x9.74f960ac0d34b75p+0L, -0x9.e56cd1213828f04p-5L, -0x8.da59d3d53874134p-4L, 0x8.ad18a34d4e700e2p-6L, -0xa.e33531e49a3a34ep-11L, -0xa.edab0664546ca1p-13L, 0xe.2bdf2954afcd1ep-18L, 0xe.4b9c033e2c84ec9p-24L, -0xb.1fb29623912c4c5p-30L, 0xb.b4bb3eda211db22p-41L, 0x8.8459c371cf4ab4bp-58L, -0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0xe.c386f5e602e22c6p-1L, -0x8.615c585940c9ee7p+3L, 0x8.85e9ba6b1aa85ccp+5L, -0xa.220ed77990ea00bp+6L, 0xf.576a4111664dc93p+6L, -0xe.f502ad56a76577ep+6L, 0x8.7536f43aab75351p+6L, 0x9.ddc90b0228ce8d7p+2L, -0xb.e01ea6e7aa8a396p+6L, 0xd.bbefb63b9185cdp+7L, -0xa.ceea2e0c37d88e3p+8L, 0xc.956af742a2c67bbp+8L, -0xb.b8b74d94c4b8e53p+8L, 0x9.a66ca166a39d2d4p+8L, -0xe.9084343fd1b7644p+7L, 0x9.3f1020c8928bd55p+7L, -0x8.770098e0d827732p+6L, 0x8.9ffe00b7ab651d2p+4L, 0xc.810d4eea709578cp-2L, -0xe.5ca82d384b2dbfdp+0L, 0xf.88e6b0c619ac534p-2L, -0xd.1ff7f0d4a16a0e5p-6L, -0xd.4a9ed441ba370f6p-8L, 0xc.b8c5f71d7b945cfp-12L, 0xd.6a124f9ccac6c82p-18L, -0xf.5b8668d520288fbp-24L, 0xb.9003503d04bfb0cp-34L, 0x8.698313f351569a4p-50L, 0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0x8.aa8ac563754c257p+0L, -0xa.7f61d351960f794p+3L, 0xb.86f620f57cbe932p+5L, -0xf.4a67f658f7d0a3cp+6L, 0xd.f8588069a68203p+7L, -0x9.c948c01fe7a3daep+8L, 0xb.ce67a857da36deap+8L, -0xd.5b6484c8b08d94p+8L, 0xe.23f6cd0bdce6402p+8L, -0xd.78802bc1e4e0454p+8L, 0xb.9542ce55da38fbfp+8L, -0x9.423735cd8a7a408p+8L, 0xd.9ec3effb54aa43bp+7L, -0x8.d708293d724a1cp+7L, 0xa.0f0b74e21a99604p+6L, -0xa.3001862df903727p+5L, 0x8.40c736ecd66e3b7p+4L, -0xc.7785b363b31632ap+1L, -0xb.75c761697e78222p+0L, 0x9.d5d0181f80e2122p+0L, -0xa.c46b691cb246e7cp-2L, 0xa.e5031d144bd1a3cp-6L, 0xb.9644270369ccd47p-8L, -0x9.5bdcced391cd468p-11L, -0x9.acd6af648a62d24p-17L, 0x8.67f844ea6ac9781p-22L, -0x9.03a9abaad597738p-32L, -0xd.1d6ceaac9a2dc82p-48L, -0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0x8.ba7d8eb39831c18p+0L, -0xa.e7b1da03950427fp+3L, 0xc.2cb815c9848fe3fp+5L, -0x8.0471c6326a024f5p+7L, 0xe.01e0dc6fb09f8cp+7L, -0x8.f069828b6686adbp+8L, 0x9.9a827173155c815p+8L, -0xa.24c51cda2ee968bp+8L, 0xa.8062115bf26b28ap+8L, -0x9.6b7c8b797831eb6p+8L, 0xe.2dec5c5f666d9f8p+7L, -0x9.db9046e0c283a87p+7L, 0xd.258c0c883e39073p+6L, -0xe.01ac1f2494c092fp+5L, 0x8.92a6aee8d1e432cp+4L, 0xd.f0ca84cbce12938p-1L, -0xb.55fa92090f522ecp+2L, 0xd.efd4a4a391e9b21p+2L, -0xb.d4e0815eda4a88ap+2L, 0xc.349069e83f691d5p+1L, -0xd.4d6fd92e2793a35p-1L, 0x8.99bb20dc4eddf8ap-4L, 0x8.c8e3231160d8992p-6L, -0xc.468c211c336121fp-9L, -0xd.7727a335dcb4b2ep-15L, 0x8.af2f4ba3ff0ddeep-19L, -0xd.e2248f7707ee606p-29L, -0xa.18e01f3aa66c51bp-43L, -0x0p+0L}; - } - if constexpr (order == 10) { - return {0x0p+0L, 0xa.bee90172f4255c3p-1L, -0xd.a135ca4c3c846a5p+2L, 0xf.7a8579b5e4a4f6ap+4L, -0xa.6d47322333f3562p+6L, 0x9.6c44d5844c887bdp+7L, -0xc.a2b764377e3a1ebp+7L, 0xe.50fbae94e0bc253p+7L, -0xf.9757925a45f487cp+7L, 0x8.530717ee753bcd5p+8L, -0x8.3ff3ae16c29c979p+8L, 0xf.159bf6afa230cc6p+7L, -0xd.147e7fb73425ae6p+7L, 0xa.acb695f3e0fc1c3p+7L, -0x8.13b08baf665a54p+7L, 0xb.87a2d1f4db643efp+6L, -0xf.6fad2d9aa709453p+5L, 0x9.3d8f0994c5d9f7bp+5L, -0x9.df34921f79618f8p+4L, 0x9.db8f809079523d6p+3L, -0x8.8cc2eca027a29bcp+2L, 0x9.dad4bb17829d702p+0L, -0xe.1960c3b3edb91b1p-4L, -0xa.ec744dc5d17a352p-5L, 0x9.d8da354be17d4f6p-7L, 0x9.1b83681fb7ba338p-13L, -0xc.e137e4279ffaf08p-17L, 0xc.b149cd09c7159bbp-26L, 0x9.3a1452c9a7cedecp-39L, 0x0p+0L}; - } - if constexpr (order == 11) { - return {0x0p+0L, 0xc.15d0c5140aaa4eep-2L, -0xf.7190d63c174081fp+1L, 0x8.ba72fb2d2252c3fp+4L, -0xb.740eabe264bca0cp+5L, 0x9.b46f19b0fd72575p+6L, -0xb.883398ebe4385ep+6L, 0xb.30e910677d07ffp+6L, -0xb.419dbbc73b9d5a1p+6L, 0xc.19e0dbd12662221p+6L, -0xb.826867ada01fb9cp+6L, 0x9.5143da543a25f3ap+6L, -0xe.bcab98d7996a714p+5L, 0xb.d3311ddf4d7bdfbp+5L, -0x8.6eecfd0d6810f0bp+5L, 0xa.7c120c15da204bcp+4L, -0xc.dc6b77ec19e1f99p+3L, 0xf.35cdfe48953061cp+2L, -0xe.c39532a44de361dp+1L, 0xc.1727280b8b20591p+0L, -0x9.e40d8406be2c4fap-1L, 0xc.388bf027ec112cbp-3L, -0xf.968ede9ca84c64dp-9L, -0x9.93e06924a09fd14p-6L, 0x8.9dc64ac28a2fbc2p-8L, -0x8.4a44983b6d59171p-16L, -0xb.c238c931736ccdbp-17L, 0x9.8e9343ad5a2f5d8p-26L, 0xd.e1d77974b4c54b1p-39L, 0x0p+0L}; - } - if constexpr (order == 12) { - return {0x0p+0L, 0x9.1480bef44c4469ep-3L, -0xb.a584c6bd94a1187p+0L, 0xd.1eb7f2c429e0f2ep+2L, -0x8.774ff1631cd3a64p+4L, 0xd.bf61476f622a169p+4L, -0xe.e5fff6d9d283fd3p+4L, 0xc.7ca8972468e2375p+4L, -0xb.a10d8d44022caeap+4L, 0xd.0bf0e90f39e8d94p+4L, -0xc.589dd6de50ec435p+4L, 0x9.080317497a44b68p+4L, -0xd.4bcc6a26d36101bp+3L, 0xb.17a90e8cb9542f6p+3L, -0xf.868a33cfb4e032cp+2L, 0x8.582a0590e784928p+2L, -0x9.73fc0eb91ba83cbp+1L, 0xb.bb58cde0ef3d615p+0L, -0x9.c855651ad1a4682p-1L, 0x8.73474a22b80bb4fp-3L, -0x8.ecf338b09522ep-5L, 0x8.f0a0fb7c1c0d8ddp-8L, 0xb.13140f8352b2905p-6L, -0x8.0288713e357cfe6p-6L, 0xe.ed032d5499f9d13p-9L, -0x9.cbf215a660e12a2p-13L, -0xa.f13c07f71d1127bp-16L, 0xc.9eb1f575f7dbcbbp-26L, 0x9.26242b289016945p-37L, -0x0p+0L}; - } - if constexpr (order == 13) { - return {0x0p+0L, 0x9.6dd40b0366fa267p-6L, -0xc.1dd48316e0854aap-3L, 0xd.e3672174e9d1088p-1L, -0x9.64bdec0bd7ca5b2p+1L, 0x8.70348a6c98aa9bbp+2L, -0xa.fa3833406a56d39p+2L, 0xb.751fdfa491a058dp+2L, -0xa.d3bbf6a498f90bp+2L, 0xa.124bc010cc1696ap+2L, -0x9.8487f9ebff6b313p+2L, 0x9.1f220ceedb2076ep+2L, -0x8.3fe9ab7bb39dc96p+2L, 0xd.47a4451db725977p+1L, -0xa.4c991c276c5a664p+1L, 0x8.54b6a108a07f661p+1L, -0xc.7b066ce02b0141p+0L, 0x8.01de5f9352ed819p+0L, -0xa.19f78236cf689c9p-1L, 0xd.32dbeffc9a904b7p-2L, -0xe.9b01956f96deb78p-3L, 0xd.250d6a385e86ee4p-4L, -0xc.474fb1a89e70305p-5L, 0xb.3b27cb2e4a88b76p-6L, -0xc.8e1b591d78ebf4ap-8L, 0x8.3e81ebd0d6e0c17p-11L, 0x9.b169f1bffb66918p-14L, -0xc.96dfedfd40cbd7ep-23L, -0x9.17fc02283edf3c4p-33L, 0x0p+0L}; - } - if constexpr (order == 14) { - return {0x0p+0L, 0xc.6eb70b42708eae9p-9L, -0xf.fda6f00329e9b71p-6L, 0x8.fc6fc4ef54c1db5p-3L, -0xb.7571951d3c8341p-2L, 0x9.0067ed5854443d7p-1L, -0x8.f943b3124055b9cp-1L, 0xc.84c85bf74ee8fcap-2L, -0x9.e8b35b15b042f15p-2L, 0xb.a6b0570d4675539p-2L, -0xb.40132bce1109dcp-2L, 0xf.3b5d4574c46a8f3p-3L, -0xb.04184a4ea6416d5p-3L, 0xa.4795456b82864acp-3L, -0xf.3e84e8eae3b6c57p-4L, 0x8.9297742ef492803p-4L, -0xb.74e803f1e728564p-5L, 0x8.5447df6496d92bp-5L, -0x8.b7538f93b58072dp-6L, 0x8.0c57d49a41b3dccp-7L, -0x9.7d029ef3a886eafp-8L, 0x9.1baf7134b7c3668p-9L, -0xb.9d88649c725b305p-11L, 0x8.ef6641b8591aa6cp-12L, -0xd.c389d26eba54b8ep-14L, 0xb.99388fbb2600ba3p-17L, 0xa.ef5bb62a05b60a1p-19L, -0xc.93892cf88209c7cp-26L, -0x9.04cc8adc99aa115p-35L, 0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.d99d611c0465d7fca87092137394p-12Q, 0x1.0d2f985427a1dc1f62afa99d998fp-4Q, 0x1.4a539266aac6de6ff0ee136fe6aap-1Q, 0x1.1fc50d04f7f07a49e55f06b78355p-1Q, -0x1.d497750272bfa28f3f1990b740bdp-2Q, 0x1.3575a87d9c1633de9f0ee95125a2p-2Q, -0x1.7e644ab11888684db8a7b8d90489p-3Q, 0x1.a1785765bb948d52e0838b0df196p-4Q, -0x1.7135a6ada8b52155f89869cf22c7p-5Q, 0x1.d8cfdcbb1618899a1617de65e071p-7Q, -0x1.57e157b5bcea7fac037e4b9b62aap-9Q, -0x1.5f633204e959fc32c151ba987165p-15Q, 0x1.10a4589d9f87d6dc51e36837ed0bp-13Q, -0x1.592264d16e621b5275bdd9d12d3ep-16Q, 0x1.89979784d7185338d2badb26cabcp-18Q, -0x1.4f841169a1bad189406e2832bc2dp-18Q, 0x1.74953d3967ccd8cc322dbf252946p-20Q, -0x1.f7cb1acefcf435a3d287cb8094c6p-26Q, -0x1.c92be21aef0c9ac0fb550ddd5f87p-26Q, -0x1.3b9a57c4ce7e7a8e7b0e1df188abp-35Q, -0x1.6a58cec0fa224ca49741d5041713p-35Q, 0x1.4bf1eb8cd4c9c2273508a8b73f46p-37Q, 0x1.697067f1715a141417bb7553b3a7p-44Q, -0x1.513d790bd242fdd412e02eaf3fd9p-49Q, -0x1.b3943c02986a6636aaf05d95d84p-57Q, 0x1.54d330be5783db7123cd1333ac9cp-67Q, -0x1.3f6e1e631364c64c65f6b5a7fe23p-80Q, -0x1.d0d882f8587b498d8efb759e05fp-104Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.af673717274af370272903c1fa7cp-9Q, 0x1.c7ad45d086ea4c5ed9ed7e340defp-3Q, 0x1.9756cb092ee06f6ac1eb577b96f6p-1Q, -0x1.51916657c183447d0774789d6344p+0Q, 0x1.6cc6e8f0624052b2c0fdcc8950d3p-2Q, -0x1.8cf37d6182ca0b170d0a042e4192p-4Q, 0x1.9a3fa2f41d4953051b0c6d4a1b03p-4Q, -0x1.0a50be22f2b86dd755f1bb101decp-3Q, 0x1.df3f4f6c19d45193b61450be39f8p-4Q, -0x1.2d4b7e715db6bf84cb93e1a16129p-4Q, 0x1.0681e4c20b9fce41d5b4e56756a7p-5Q, -0x1.1b50d689cbed8df146901e68b6b4p-7Q, 0x1.49acd134a254ba0136bf2c9ddd8p-11Q, 0x1.16651955943e391787562b852142p-11Q, -0x1.c26d1f2c70c86f0644644cef75b6p-13Q, 0x1.3002118e762a111c6bcee4aaae9bp-16Q, 0x1.49fbecfd7d9c6cba55cd30ac067dp-17Q, -0x1.8781a4a6a5f7c8daadd9ede249c3p-19Q, 0x1.5ed0ad164acd249f0f9d827483fep-24Q, 0x1.da4a7558674addd03b35614f7a6dp-25Q, -0x1.7e23c7237f3f9358779e22d38d23p-29Q, -0x1.bd8f2cef8c9f03d137232e9e498bp-35Q, 0x1.1c61501fa10480730673344e3608p-37Q, -0x1.c1b8b33989e0245e7c861b898f54p-44Q, -0x1.95156f39cb33a3cd95db28e3bb11p-52Q, 0x1.d1f8ddb7d01989509bfbf0327d67p-60Q, -0x1.34635de67ce8bb9a35ccd2f4bcc3p-74Q, -0x1.c0c6d283f741e5d8d9e1ced44ca2p-97Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.52aa167437ed3a97a2d16e2e7e71p-6Q, 0x1.2f386450cd3603452775e405daacp-1Q, -0x1.92da3e0f4795f52ddad307073cb1p-2Q, -0x1.010e6c23362c2f5a0189ea0fe7f3p+1Q, 0x1.ba5e5707337cefc73943a8303bc5p+1Q, -0x1.6efa1a351e68942304e8e68b7bacp+1Q, 0x1.e2efff792ca6cd2456dfdb721f76p+0Q, -0x1.e9e84815ce29a5578b4bc0477acbp-1Q, 0x1.3e7bcfc83dd34f0d929299013451p-2Q, -0x1.3f21e5e83db9b76a1e6a21ec3442p-6Q, -0x1.00e091b8310d7c425038e08dacbfp-5Q, 0x1.93252ea5d40edb85ff0ddad301dp-8Q, 0x1.0cb53bda124f4c4d4c0ae3af4779p-7Q, -0x1.6ecc6596fdeb97786cd08cbbbaedp-8Q, 0x1.1da3c88de4593a0d10cc249b83cep-10Q, 0x1.0f705c9109b88bc792c8e251c3f5p-12Q, -0x1.687f176415b5a1410c9f394cb959p-13Q, 0x1.03bf749271ea0dc9bfa9a81f4245p-15Q, -0x1.0a570c997b8f6bb3aa2b6fc454e1p-20Q, -0x1.b60c856b75c6f8f8db3b0f76f67dp-22Q, 0x1.2f36c8024d47853b1fc5abd2c569p-24Q, -0x1.ab6b4d2a0c9eb0fb78406697468ap-30Q, -0x1.b77dbd4d624bb182ce2a8088a4c2p-33Q, 0x1.02e06a0b5252899742121667393ep-39Q, 0x1.f900db818405bc4cfc19c190531fp-46Q, -0x1.5cc6aba4a366fbfbcb9e7e9b2b91p-54Q, 0x1.79a9be1badaf05e53c8d4ae211e7p-67Q, 0x1.12cb1c6610cf5a5ca8d9bf45819bp-88Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.bde47de89537efcc2943722b907bp-4Q, 0x1.ff6e39e05bc1960ac6a7468afb9ep-1Q, -0x1.0edf7812c7e6f7d06a00b362ef27p+2Q, 0x1.788eafbfef56fcdc50a685d1f90ep+2Q, -0x1.0b9e58d049e2b1cb9469b014878dp+2Q, 0x1.57d72a54d9b7d9046e3ca22b5dccp+1Q, -0x1.5aec59993d64c03ae451f5fb822ap+1Q, 0x1.66be004fbc25830ff3a497ea74efp+1Q, -0x1.257b730e2148d4f4b3feb863502dp+1Q, 0x1.61e6a248fa765db41939b126fafep+0Q, -0x1.1d661708485736ce63b6c04b417fp-1Q, 0x1.7634ae9385e7d28433590ede5d72p-4Q, 0x1.aae5eb36cf2339bb1da3727f92c7p-5Q, -0x1.66a2dd81189a5724bb1062f0dfebp-5Q, 0x1.9ee5c38dff3c5ada29575f743d87p-7Q, 0x1.cee452b55c630166e1f1c650af12p-12Q, -0x1.7d0e63753adf810a13b7946ecd6fp-10Q, 0x1.95a9bb14ccec080a6175688009ap-12Q, -0x1.ac68b8496deea7093d3eaa37178ap-17Q, -0x1.4a3e531dccd5a7c88df667aa9928p-17Q, 0x1.45a5b2adacfee470f99a3f9acab4p-20Q, -0x1.a0585e72874e51a270db9477829dp-28Q, -0x1.4a4aaf36fdaec2c3a3e857f50877p-28Q, 0x1.818dc3c36642c77c4040a75f3899p-34Q, 0x1.bc8ec635290e455c58f05f4aae9ap-41Q, -0x1.1c50f4adb4d48c39b492719c193cp-48Q, 0x1.541ee5efeba27ec1d6332fa4f538p-61Q, 0x1.eef3c669427ba33d298eab6d070cp-82Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.da9efb84cd101b891a55bf085a33p-2Q, -0x1.0a963523c780f95520ba62e1635dp-2Q, -0x1.6ead78b2a7f870bae850968c013ap+2Q, 0x1.1fb0b7ee7fe9b42077abdaf556e2p+4Q, -0x1.a26b20f9bdeeff0cd0b5e878c8cap+4Q, 0x1.5a362701692b5d54a80faabe0329p+4Q, -0x1.c3b93743ed5e1f4aae7ff96667ep+2Q, -0x1.0393f54066e2a86d4f5766fcec98p+3Q, 0x1.ce0e335b9b5cfd8737f6de07dc86p+3Q, -0x1.3371f4378fc25cdcbf584ed9698fp+3Q, 0x1.04744c732a8970957ba707eb759dp-2Q, 0x1.5d5bbaac2d3dd399541ae8c8527cp+2Q, -0x1.56903abc9d372d08f72cf8f9b7f6p+2Q, 0x1.4f367450bb0294accf5c9a7e742cp+1Q, -0x1.16f1bf1e47dd7b33b29f107a7717p-1Q, -0x1.0ca6089fc41ee660907b2bb584cap-3Q, 0x1.fd1e6437298de912355a40f30818p-4Q, -0x1.127569c6d3d201e096a74c3e92a3p-5Q, 0x1.031ce43d6f2a9b28afac205ca3a5p-9Q, 0x1.dbc5a12350173dc4ceb0edd40202p-11Q, -0x1.6e57586c99db2a8af6576e5d9fc9p-13Q, 0x1.338c12c9a95b47e57d454a7c66e9p-19Q, 0x1.ec833bdc8d6ab1cf492647696452p-21Q, -0x1.31ee1e222a82fe6e397b0f1ab0a7p-26Q, -0x1.068cce25031d061c7d5229b85c51p-32Q, 0x1.ab486d191520d8a9aefca6d39becp-40Q, -0x1.971ac61147c4bd5f21d58d94dd2bp-52Q, -0x1.28365b5992261cb91d89a4a61c9dp-71Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.8a28bf1f4baf0256370de9e50cdfp+0Q, -0x1.0b8ecb513e670e46e8b61ff5e5a2p+3Q, 0x1.301d17ac5e1c6daeb2bb903493bbp+4Q, -0x1.80a5fd5ebbea4cbe232c3d8a57f1p+4Q, 0x1.4a39e3e1048d62539834148e9e34p+4Q, -0x1.1148278e9d9a1304c4d27a6289e7p+4Q, 0x1.18e244d79a0328c7ff6eaa1380dep+4Q, -0x1.3908669ba07796469d9944fd1af2p+4Q, 0x1.80446c71adb1488769cf4e603a7ap+4Q, -0x1.0a40794798e411ebd23986dcd959p+5Q, 0x1.52509dd04c4f6aeb9cbf4fd2a65ep+5Q, -0x1.4b468531c5b19f58ba9821140c9p+5Q, 0x1.c80f1430e334a07768f1a5bc676fp+4Q, -0x1.82ded3c89e7e9fa329e76277e5cep+3Q, 0x1.7610a167089f1959ecdad2bfe856p+0Q, 0x1.b0a89a8818c0677d48d7304191d3p+0Q, -0x1.2b516da5d080fbac57ead9c2cab4p+0Q, 0x1.488189c0e63233e310386fe21bdep-2Q, -0x1.16dd91fce8d2f3a24746d48a1c72p-6Q, -0x1.957d5757f4d581e1eb81397c4cedp-7Q, 0x1.613bcf2c2fc6a53ed2c91b207503p-9Q, -0x1.0adbc024da55152d1e362e31540ap-14Q, -0x1.44905597a89087a3899ef1de6ff1p-16Q, 0x1.238bd55115863b967f9591633549p-21Q, 0x1.0b863bc593a1d515b8c451bf0e45p-27Q, -0x1.2dac52b5d35bb8e11505ea96f44p-34Q, 0x1.a8ab5a61388b1db01ad925c31a8cp-46Q, 0x1.34fcf88bcfb3fdd3eace81ef29a8p-64Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.e156f58145aba7d0b30fa35cff6p+1Q, -0x1.d9350b2238c2b904f5fdfc3f59d8p+4Q, 0x1.b03e3957ecd6a002d130922f2289p+6Q, -0x1.f51dfa789d878832ad001b3c3bbap+7Q, 0x1.b1d9ee3321d942364cb8258ac548p+8Q, -0x1.3c90b7e3ca1db82e1a61d1d6988cp+9Q, 0x1.a1025f9df5665ef6d6390bf76e1p+9Q, -0x1.ee82dbab6ab103949b52c0e24238p+9Q, 0x1.fcf169933904c38827bff6f06e1ap+9Q, -0x1.beee0dc0c8ddb1ba16139309e6dap+9Q, 0x1.545f49e00f495f369a9c2bc574c5p+9Q, -0x1.c39ca355bd5d296f37962bd729eep+8Q, 0x1.d17e6e268802ca2d8ab4ba84d645p+7Q, -0x1.8d05e2b81cf726b84ae7be04d2f8p+5Q, -0x1.a57ddae4deced8b3bcbf57c78c0cp+5Q, 0x1.065bfb9cfed103880a47e8cebd5dp+6Q, -0x1.1a783beefce87b0115cd7f827bd2p+5Q, 0x1.2e9f2c1581a696ea729509934246p+3Q, -0x1.3cad9a2427051e071bf1f9b27c09p-2Q, -0x1.1b4b3a7aa70e82673e69d678de04p-1Q, 0x1.15a31469a9ce01c4f9e606bc0537p-3Q, -0x1.5c66a63c9347469ce6f66ff5c6a6p-8Q, -0x1.5db560cc8a8d9420c2df7533732ep-10Q, 0x1.c57be52a95f9a3c03fb08957c434p-15Q, 0x1.c9738067c5909d91761fe08abd47p-21Q, -0x1.63f652c47225898a139ddd320614p-27Q, 0x1.769767db4423b6439ddbe400214ap-38Q, 0x1.108b386e39e95695575892a5277bp-55Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.d870debcc05c458cb431fd983345p+2Q, -0x1.0c2b8b0b28193dcd228c0a0c405bp+6Q, 0x1.10bd374d63550b983999c56c677ap+8Q, -0x1.4441daef321d4016bb9b2c10ec43p+9Q, 0x1.eaed48222cc9b9253ebb102b9831p+9Q, -0x1.dea055aad4ecaefb97c3b4138e1fp+9Q, 0x1.0ea6de87556ea6a2de81d408b23ep+9Q, 0x1.3bb921604519d1ae88e6a7fa3786p+5Q, -0x1.7c03d4dcf551472cf7483533c9dbp+9Q, 0x1.b77df6c77230b9a06a324d910941p+10Q, -0x1.59dd45c186fb11c5ad121467058cp+11Q, 0x1.92ad5ee85458cf75ddc7493a06c7p+11Q, -0x1.7716e9b298971ca51bace1729b0ap+11Q, 0x1.34cd942cd473a5a7100d811101f7p+11Q, -0x1.d2108687fa36ec88dd6bfb56d5c3p+10Q, 0x1.27e2041912517aaa65b2132e4553p+10Q, -0x1.0ee0131c1b04ee634d1b07d2c971p+9Q, 0x1.13ffc016f56ca3a3bb78dd1c64f4p+7Q, 0x1.9021a9dd4e12af18897a92604f62p+1Q, -0x1.cb9505a70965b7f9ec7314ae6da2p+3Q, 0x1.f11cd618c3358a67a8f728986e77p+1Q, -0x1.a3fefe1a942d41c95d66abeb0178p-3Q, -0x1.a953da883746e1eb5fc521fbad44p-5Q, 0x1.9718bee3af728b9e4c2d8088bafdp-9Q, 0x1.ad4249f39958d903ac018ed0138fp-15Q, -0x1.eb70cd1aa40511f5c12a3ada0131p-21Q, 0x1.72006a07a097f617e889edbdb056p-31Q, 0x1.0d30627e6a2ad3489cda0318f0edp-47Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.155158ac6ea984ad1f3ad98465a9p+3Q, -0x1.4fec3a6a32c1ef2818fdbca7bd5fp+6Q, 0x1.70dec41eaf97d263c2e4504b0b21p+8Q, -0x1.e94cfecb1efa1478b22094cf32b8p+9Q, 0x1.bf0b100d34d0405ff7a1094810ecp+10Q, -0x1.39291803fcf47b5c26824c7c465ep+11Q, 0x1.79ccf50afb46dbd4b77400a63149p+11Q, -0x1.ab6c90991611b280fa6243394583p+11Q, 0x1.c47ed9a17b9cc8042e779917f5f2p+11Q, -0x1.af1005783c9c08a75d46ca645f35p+11Q, 0x1.72a859cabb471f7e1c8ba7bd2a6cp+11Q, -0x1.2846e6b9b14f481005e402049827p+11Q, 0x1.b3d87dff6a954876ee30a3fd1e1p+10Q, -0x1.1ae10527ae49437f7880589e6393p+10Q, 0x1.41e16e9c43532c08707a85b672ep+9Q, -0x1.460030c5bf206e4d0618004a8fep+8Q, 0x1.0818e6dd9acdc76d8ca94db3b3b3p+7Q, -0x1.8ef0b66c7662c653e53071c7fb7ep+4Q, -0x1.6eb8ec2d2fcf0443ad7c1412d0d4p+3Q, 0x1.3aba0303f01c424453fb561d43b2p+3Q, -0x1.588d6d239648dcf73cdacc19a23ap+1Q, 0x1.5ca063a2897a34772f3d9594be58p-3Q, 0x1.72c884e06d399a8e64ff05cdd7a2p-5Q, -0x1.2b7b99da7239a8d08435e37194cp-8Q, -0x1.359ad5ec914c5a48afa1ae580694p-14Q, 0x1.0cff089d4d592f01775a150c05eep-19Q, -0x1.207535755ab2ee6fe496486e6edap-29Q, -0x1.a3ad9d559345b904814003502ba2p-45Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.174fb1d6730638307d1e4b445fc7p+3Q, -0x1.5cf63b4072a084fdeb886ad661e9p+6Q, 0x1.859702b93091fc7e65868db7a8fbp+8Q, -0x1.008e38c64d4049e94bd38a5f00e3p+10Q, 0x1.c03c1b8df613f180675faa2c200ap+10Q, -0x1.1e0d30516cd0d5b6c1126d4bf14cp+11Q, 0x1.33504e2e62ab9029d44ee63bfb62p+11Q, -0x1.4498a39b45dd2d15e6ecc8905aabp+11Q, 0x1.500c422b7e4d651447cfcdfc454bp+11Q, -0x1.2d6f916f2f063d6cac6b467c2932p+11Q, 0x1.c5bd8b8beccdb3ef655c28cdfe75p+10Q, -0x1.3b7208dc1850750db50ab0ef592ep+10Q, 0x1.a4b1819107c720e54775d3b0e2c4p+9Q, -0x1.c03583e49298125db8e2fdf27d4ep+8Q, 0x1.1254d5dd1a3c865791d5348ec394p+7Q, 0x1.be19509979c252700bdddf4796f4p+2Q, -0x1.6abf524121ea45d75b1ac598d945p+5Q, 0x1.bdfa9494723d3641f8f4e66eff1ap+5Q, -0x1.7a9c102bdb495114d11be11a8205p+5Q, 0x1.86920d3d07ed23a9933ffc257d69p+4Q, -0x1.a9adfb25c4f27469db3fea5dd201p+2Q, 0x1.1337641b89dbbf1427d95e0cc537p-1Q, 0x1.191c64622c1b13245bafd3429ab6p-3Q, -0x1.88d18423866c243d7190f3f8f03dp-6Q, -0x1.aee4f466bb96965b6a34b6c35598p-12Q, 0x1.15e5e9747fe1bbdbc08f26b48b4cp-16Q, -0x1.bc4491eee0fdcc0c5c6a94682339p-26Q, -0x1.431c03e754cd8a35cd8981f0bf35p-40Q, 0x0p+0Q}; - } - if constexpr (order == 10) { - return {0x0p+0Q, 0x1.57dd202e5e84ab856980df8a0abap+2Q, -0x1.b426b94987908d499f3bffafa19ep+5Q, 0x1.ef50af36bc949ed3fa7cc19e8e96p+7Q, -0x1.4da8e644667e6ac3b7b19c4c383dp+9Q, 0x1.2d889ab089910f7ad4219226878ep+10Q, -0x1.9456ec86efc743d502abdf76eae3p+10Q, 0x1.ca1f75d29c1784a6a7a3af88a28cp+10Q, -0x1.f2eaf24b48be90f886d98564f553p+10Q, 0x1.0a60e2fdcea779a991419059c46dp+11Q, -0x1.07fe75c2d85392f12125b660934dp+11Q, 0x1.e2b37ed5f446198c3a6ab7d8b74fp+10Q, -0x1.a28fcff6e684b5cca8e0268f1e92p+10Q, 0x1.5596d2be7c1f83852a4b17681f79p+10Q, -0x1.02761175eccb4a7f32feddc56feep+10Q, 0x1.70f45a3e9b6c87dda520903f4aafp+9Q, -0x1.edf5a5b354e128a66fada7d4bcf3p+8Q, 0x1.27b1e13298bb3ef65c7ced26ff2fp+8Q, -0x1.3be69243ef2c31f0230131660198p+7Q, 0x1.3b71f0120f2a47ab2f14bf7b7d89p+6Q, -0x1.11985d9404f45378f95059bc551ep+5Q, 0x1.3b5a9762f053ae040918d7979484p+3Q, -0x1.c32c18767db723614ce78e339586p-1Q, -0x1.5d8e89b8ba2f46a3386878a383e3p-2Q, 0x1.3b1b46a97c2fa9eb1545e9c9486p-4Q, 0x1.23706d03f6f7466fb42dcd72c19fp-10Q, -0x1.9c26fc84f3ff5e0f45e88806fbbbp-14Q, 0x1.962939a138e2b376295550104948p-23Q, 0x1.27428a5934f9dbd8cb77b8eb93d8p-36Q, 0x0p+0Q}; - } - if constexpr (order == 11) { - return {0x0p+0Q, 0x1.82ba18a2815549dbb583ba20e3a4p+1Q, -0x1.ee321ac782e8103dfda5e2a50005p+4Q, 0x1.174e5f65a44a587e2370d6742aeep+7Q, -0x1.6e81d57c4c979417ab1a67acd69dp+8Q, 0x1.368de3361fae4ae909df52a5836ap+9Q, -0x1.7106731d7c870bc083e5fa51f617p+9Q, 0x1.661d220cefa0ffe013a28a70693fp+9Q, -0x1.6833b778e773ab42be55fb8d5e31p+9Q, 0x1.833c1b7a24cc4442e638654d7d43p+9Q, -0x1.704d0cf5b403f737ee51433c941bp+9Q, 0x1.2a287b4a8744be736369f360e45fp+9Q, -0x1.d795731af32d4e2789960ef06165p+8Q, 0x1.7a6623bbe9af7bf6c822bfb77cd2p+8Q, -0x1.0ddd9fa1ad021e162c6d71d17f6ap+8Q, 0x1.4f824182bb440977dbde7b407e9p+7Q, -0x1.9b8d6efd833c3f31fdcf2bc0b9fap+6Q, 0x1.e6b9bfc912a60c385c4952c1112ep+5Q, -0x1.d872a65489bc6c3914d51095ebc1p+4Q, 0x1.82e4e50171640b22bb8023c09d2ep+3Q, -0x1.3c81b080d7c589f42c4b3bd2cdd6p+2Q, 0x1.87117e04fd822595de3e0b568ccp+0Q, -0x1.f2d1dbd395098c995334374fed2ep-6Q, -0x1.327c0d249413fa2745cbbd687d3ep-3Q, 0x1.13b8c9585145f7834dc70fb2de56p-5Q, -0x1.094893076dab22e2cc6f5a93ce22p-13Q, -0x1.784719262e6d99b5739a61a4981ap-14Q, 0x1.31d26875ab45ebb06f0484706cp-23Q, 0x1.bc3aef2e9698a9624f45add91d4dp-36Q, 0x0p+0Q}; - } - if constexpr (order == 12) { - return {0x0p+0Q, 0x1.229017de89888d3b45e2c184d9bp+0Q, -0x1.74b098d7b294230e1965426f3612p+3Q, 0x1.a3d6fe58853c1e5c5b0a3a09e40cp+5Q, -0x1.0ee9fe2c639a74c7c045b3701c38p+7Q, 0x1.b7ec28edec4542d27f9646062fefp+7Q, -0x1.dcbffedb3a507fa5c4f4218a69c2p+7Q, 0x1.8f9512e48d1c46e9aca0a2a1ffcap+7Q, -0x1.7421b1a8804595d4b26746d9ca32p+7Q, 0x1.a17e1d21e73d1b2881053890e718p+7Q, -0x1.8b13badbca1d886a8838c2c2e2e8p+7Q, 0x1.210062e92f4896d0f00a29c58cfbp+7Q, -0x1.a9798d44da6c2035da535dfbec27p+6Q, 0x1.62f521d1972a85eb2c6f26f231b9p+6Q, -0x1.f0d14679f69c06584d1c30d18738p+5Q, 0x1.0b0540b21cf0924f5546e5194d02p+5Q, -0x1.2e7f81d7237507956599c3ca61c1p+4Q, 0x1.776b19bc1de7ac2a6f830edb0d24p+3Q, -0x1.390aaca35a348d0447af0cac40bp+2Q, 0x1.0e68e9445701769efc7a68d035e5p+0Q, -0x1.1d9e671612a45bff7deef6e6cc44p-2Q, 0x1.1e141f6f8381b1b9942811bfdb96p-5Q, 0x1.626281f06a565209b56968645fb1p-3Q, -0x1.00510e27c6af9fccce7dab2661cp-3Q, 0x1.dda065aa933f3a25232d375fa99bp-6Q, -0x1.397e42b4cc1c25443933189b9067p-10Q, -0x1.5e2780fee3a224f5cbc2e8463206p-13Q, 0x1.93d63eaebefb797682d434c6108cp-23Q, 0x1.24c485651202d28a48b67967bbebp-34Q, 0x0p+0Q}; - } - if constexpr (order == 13) { - return {0x0p+0Q, 0x1.2dba81606cdf44cd9f04d2f8bc14p-3Q, -0x1.83ba9062dc10a95420ae8251630ap+0Q, 0x1.bc6ce42e9d3a21102e4fdf0d4671p+2Q, -0x1.2c97bd817af94b6452b764a95107p+4Q, 0x1.0e06914d9315537516f107f294e6p+5Q, -0x1.5f4706680d4ada71d3fe8928e941p+5Q, 0x1.6ea3fbf492340b1a8746b11d0c42p+5Q, -0x1.5a777ed4931f215f8e0a373e4b9fp+5Q, 0x1.424978021982d2d37f62990dfb19p+5Q, -0x1.3090ff3d7fed662537bbff91030bp+5Q, 0x1.23e4419ddb640edbe25a71aaad29p+5Q, -0x1.07fd356f7673b92c13a9d66edf4fp+5Q, 0x1.a8f488a3b6e4b2eef60c68cd2c1fp+4Q, -0x1.49932384ed8b4cc7bb541dede413p+4Q, 0x1.0a96d421140fecc2982baba8b026p+4Q, -0x1.8f60cd9c056028206308e7df4429p+3Q, 0x1.003bcbf26a5db032107ad008618cp+3Q, -0x1.433ef046d9ed13921cc6b579a83ap+2Q, 0x1.a65b7dff9352096da27547ffc3e7p+1Q, -0x1.d36032adf2dbd6f014bd3f02cf6dp+0Q, 0x1.a4a1ad470bd0ddc88c1710fd49dcp-1Q, -0x1.88e9f63513ce060ad42735911b82p-2Q, 0x1.6764f965c95116ec3ca5a4be4d2fp-3Q, -0x1.91c36b23af1d7e93ac71caa65612p-5Q, 0x1.07d03d7a1adc182d361556de1e4bp-8Q, 0x1.362d3e37ff6cd230a2a77cad24c8p-11Q, -0x1.92dbfdbfa8197afc834aaea734e3p-20Q, -0x1.22ff804507dbe78851ce06e1d7fp-30Q, 0x0p+0Q}; - } - if constexpr (order == 14) { - return {0x0p+0Q, 0x1.8dd6e1684e11d5d1ba3be6ea3c1dp-6Q, -0x1.ffb4de00653d36e2054de2d9b35cp-3Q, 0x1.1f8df89dea983b6a6839c59e1daap+0Q, -0x1.6eae32a3a790681f248ae47d8bf4p+1Q, 0x1.200cfdab0a8887ae485a3302d7acp+2Q, -0x1.1f287662480ab738cbe219de6228p+2Q, 0x1.90990b7ee9dd1f94866d2e2c98f7p+1Q, -0x1.3d166b62b6085e29fb936a0976f7p+1Q, 0x1.74d60ae1a8ceaa71b4a74664e6fcp+1Q, -0x1.68026579c2213b7f75e6c5dc86c1p+1Q, 0x1.e76ba8ae988d51e5857ecafcf58dp+0Q, -0x1.60830949d4c82da954f5df283712p+0Q, 0x1.48f2a8ad7050c9588f35978df03dp+0Q, -0x1.e7d09d1d5c76d8ae64a80dc22b4p-1Q, 0x1.1252ee85de9250052c51460801d2p-1Q, -0x1.6e9d007e3ce50ac7539c0411656fp-2Q, 0x1.0a88fbec92db255ff329ff3310a4p-2Q, -0x1.16ea71f276b00e5a14dad4f88487p-3Q, 0x1.018afa9348367b971e98c4cc0c2cp-4Q, -0x1.2fa053de7510dd5de40051b25ee8p-5Q, 0x1.2375ee2696f86cd08bc27b41fb5bp-6Q, -0x1.73b10c938e4b6609ab6cf8acbfb8p-8Q, 0x1.1decc8370b2354d839f55dfbd7ebp-9Q, -0x1.b8713a4dd74a971b693427cc738fp-11Q, 0x1.732711f764c017456161af308333p-14Q, 0x1.5deb76c540b6c1414e8c8011ad5bp-16Q, -0x1.9271259f104138f720ca0ebaa72bp-23Q, -0x1.2099915b9335422a7d16c948a51bp-32Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.000451674235365384163942534112879962170050430005649917728757105702078353003628"), boost::lexical_cast("0.0657192182866101725866380380286811711515267979947671850787346119584203921772"), boost::lexical_cast("0.645168852837185491636493374398382329354332388562492079567204840361307401530"), boost::lexical_cast("0.562050253731258347205225316820341051454701066703611230358129787369760785703"), boost::lexical_cast("-0.457609012865475182073165321965578159870245716869287833800525163245742305892"), boost::lexical_cast("0.302206642786606318842929559153148332332027636245062198716044751793827663646"), boost::lexical_cast("-0.186714728860412474380906761378313253397706130867010868609662030951952027624"), boost::lexical_cast("0.101921407123630858758878752387723770129600361381616407855191001954194217355"), boost::lexical_cast("-0.0450695281445151618957628013259453588544003268599264913526498769137792861370"), boost::lexical_cast("0.0144290759837282383389717270501147248409603304909144671371390973500564022245"), boost::lexical_cast("-0.00262359805753383314662667515147465743725326741143989187946940239264695275198"), boost::lexical_cast("-0.0000418886520841363769876466059678934092937240028663097642468207760071276890909"), boost::lexical_cast("0.000130005825599913762664943931799127959428720573899694402098048868888541005861"), boost::lexical_cast("-0.0000205716103829132083896977152938360606246573125609400824113246425939226624402"), boost::lexical_cast("0.00000586498015739086657425466432113622386414392393452860334775926059357778996230"), boost::lexical_cast("-0.00000499957637035187196702848333851389108402668590913054256330886021719308298712"), boost::lexical_cast("0.00000138797970659198398937552944013353477360674956899913623607020403817559610213"), boost::lexical_cast("-0.0000000293246341063622314369884411909694341374016914830560434158406924220522844059"), boost::lexical_cast("-0.0000000266108789272668583275470247613518141118690036911170538022214691534270571516"), boost::lexical_cast("-0.0000000000358798958751818824805546395996552774193550110102954766818768372071949994542"), boost::lexical_cast("-0.0000000000411940737663914578546068859164549863164641326242451122480764989500567400523"), boost::lexical_cast("0.00000000000943444434993874525374981775164876413640256062778860481019536432363883306329"), boost::lexical_cast("0.0000000000000802555990656338684626332640433500241162747359468279574694310485074495210891"), boost::lexical_cast("-0.00000000000000234007347019229302189231520607745332418408168658262584544662206333484487383"), boost::lexical_cast("-0.0000000000000000118063935549154939400230495672962537326752673673203124419820222929027040784"), boost::lexical_cast("0.00000000000000000000902156164058513114611965908129419583178659829820202967090436659668867250204"), boost::lexical_cast("-0.00000000000000000000000103213448481218221009064172156534966525116936574987378830865635836819679217"), boost::lexical_cast("-0.0000000000000000000000000000000895260346451574665144738326201699984549687922838691880872307609498354042916"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00329134509554637016227932395665184462188816405990441294841331937353859018226"), boost::lexical_cast("0.222498460222472570856273888144670809240856508400605204839473169454853935753"), boost::lexical_cast("0.795584053870187153774544931353721619014829085153170531707050020981654416712"), boost::lexical_cast("-1.31862487452009442113191889013673630946692796798217185455367151031243111753"), boost::lexical_cast("0.356227531120169092417942057959374242399264990210294310292353566593351691969"), boost::lexical_cast("-0.0969118974391443107220210564208451767882607680272587960271393042788920753139"), boost::lexical_cast("0.100158344781294000713035822000520082413219469752287984509961094639923004704"), boost::lexical_cast("-0.130036817018062768743563639955461355704215091556126309135663258237107378316"), boost::lexical_cast("0.117003736727942246589361189897913287911205837308941552740306120021988232773"), boost::lexical_cast("-0.0735583247350015119447973100838355102019211295561712733895699734366729336147"), boost::lexical_cast("0.0320443599633683857344012220821277284392085436118203012615734033030618281606"), boost::lexical_cast("-0.00864611125470508985643225531487538786192034817394773971373053363374166094832"), boost::lexical_cast("0.000628805288742353846490436895658042874791044019850556792669438723659506085433"), boost::lexical_cast("0.000530996165887140074103720044534180857989796558151325571171563750787375335630"), boost::lexical_cast("-0.000214779976330435101072773020094474738162154098655749881678420221771826004102"), boost::lexical_cast("0.0000181202936405411896779927444691964784933446136755724601326144179927538206594"), boost::lexical_cast("0.00000983429208199500966319547766620244833625578532495918145530854169815290840910"), boost::lexical_cast("-0.00000291695012617423905198714249842169472953358927807533287184982174200989887962"), boost::lexical_cast("0.0000000816805151056558922184516574886797062939832551592181636407453778207357205351"), boost::lexical_cast("0.0000000552147222971053211575103164058845299224045417814192301423715110168730452639"), boost::lexical_cast("-0.00000000278043267728072036716596349031021595779494213305561207660868932770850125951"), boost::lexical_cast("-0.0000000000506542254942098412185567568651337434634840678880205714031416165837498235238"), boost::lexical_cast("0.00000000000808256938962468939245796995705643475400792001340399660747359264165908131377"), boost::lexical_cast("-0.0000000000000998582294082358754350176794222318406554783198601555538700921435939017946389"), boost::lexical_cast("-0.000000000000000351354126713507884430073360081165916784665517276373638465106586156112456813"), boost::lexical_cast("0.00000000000000000157877499711653737932118233203050006270260955310540472677365606073041849944"), boost::lexical_cast("-0.0000000000000000000000637731750269505916186533295298744348554008849524832564488593506481003691981"), boost::lexical_cast("-0.0000000000000000000000000000110631985666703620681934992597766218656255805692698991301252307109696735556"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0206704348828442146455298601806634783291751329720893335837042915536707378997"), boost::lexical_cast("0.592227110732533668578196417495075085776270621924559929262444977224271579097"), boost::lexical_cast("-0.393410653765291902433654817300663592654609126271817695403842500410554851245"), boost::lexical_cast("-2.00825263709370592101160988069513144599529156226855536777407723196800985003"), boost::lexical_cast("3.45600402690522611687855374504814910966687688506140696928870357367763805207"), boost::lexical_cast("-2.86700751870813930579622494686911790950745721733944746524273875866576699091"), boost::lexical_cast("1.88647457798347347099275071442649242213607288760070094281108153092725485932"), boost::lexical_cast("-0.956850292836935604631540519513924221386391922474899432365133146628294288211"), boost::lexical_cast("0.311019178959628658277170626061412967741738777405140811903034561579177783544"), boost::lexical_cast("-0.0194782967746181932246482266173892495865298049064803547744629981318754422562"), boost::lexical_cast("-0.0313570829471545004393086766795416583820751761342161837181042072847055050674"), boost::lexical_cast("0.00615150822507380481298471457879524284933712566490823438535524615873979419699"), boost::lexical_cast("0.00820031568959443119144645656936832514382458714118391502141763262037478621079"), boost::lexical_cast("-0.00559689979763050004637051840086547958672230503688973990238062875917621549458"), boost::lexical_cast("0.00108962928377240734615453107312674463537085212267186648902987674997945923733"), boost::lexical_cast("0.000258864319280176698538293850130236134559386073543313286799132944540622102087"), boost::lexical_cast("-0.000171898103078683638566235253747478209530138496225519577636080550780658518207"), boost::lexical_cast("0.0000309643593428530836922212378988146884356326608056935343727759049059725321223"), boost::lexical_cast("-0.000000992193952216759361998206689460639053628352064203189180453876299839498267728"), boost::lexical_cast("-0.000000407964839436173861149529833860827000185779144514563959244446135200869586348"), boost::lexical_cast("0.0000000705975083156988948042006749490456594343348564541499729785531649950346638501"), boost::lexical_cast("-0.00000000155494179555932056144441546086944808103333056502334729683797165052002203223"), boost::lexical_cast("-0.000000000199857445192527259692451554428036856578337723773413083760501868541113100329"), boost::lexical_cast("0.00000000000183942900453685991873954617889384304378063723737901417198613372194175703222"), boost::lexical_cast("0.0000000000000280333173005321969994829794928971151622655528245490950449547091812376086824"), boost::lexical_cast("-0.0000000000000000756287516479864730495516004403817436298330236371191825066059211760651100095"), boost::lexical_cast("0.00000000000000000000999665788433766570461546432082424563816636646761251573329874233246246718961"), boost::lexical_cast("0.00000000000000000000000000346838035061342291761151778299701276081089278724101229318566334215065043283"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.108860484914954355575079084123243067459138310025744627437589606265973071599"), boost::lexical_cast("0.998887833249571574793052798864346575877689982939641232390178172030375530161"), boost::lexical_cast("-4.23238946756428856622131292649026891499466392216766277033807459199608937126"), boost::lexical_cast("5.88370889419216762997764273176879062741698215984105909165713345305176600493"), boost::lexical_cast("-4.18153972950635043322094865169225941018236097827115854289221926390733666302"), boost::lexical_cast("2.68625382559861128387876607708138212048108442724703967044946506502965986523"), boost::lexical_cast("-2.71033782942212120942300194056190679749862535535035830851858838821499116226"), boost::lexical_cast("2.80267337697322824370014932789371815543658898251892562879598691459308783545"), boost::lexical_cast("-2.29282987775747551395165451529677668919917484323451781112725285361710130069"), boost::lexical_cast("1.38242544442842915241462115657754442376597315779845068025541999436023658186"), boost::lexical_cast("-0.557419509659821724210988870096723764341990624840837128686052996727907371417"), boost::lexical_cast("0.0913588351617082455490771960757168500073024080354221476837833915643532317832"), boost::lexical_cast("0.0521115869546275007352831459735453272977332230195277247545553011333489468213"), boost::lexical_cast("-0.0437788320785046747745346318425081514627922547506568893727540135563564332044"), boost::lexical_cast("0.0126616673332992189763107668027329389224194983671833648722585850627694599870"), boost::lexical_cast("0.000441448103933958333509284170313361172667888623881067406682817939537903874448"), boost::lexical_cast("-0.00145361406367327911114133543555577415997816227432838988097249869672074010228"), boost::lexical_cast("0.000386870394595489219311323992284710227818861035531855271955313566170705603465"), boost::lexical_cast("-0.0000127675849793530154804055067259332359495984011575122830149195089883065001976"), boost::lexical_cast("-0.00000984202193485852050035097860846555963077977093712397464798289054164353785487"), boost::lexical_cast("0.00000121313056970512630452162029729108592943238420540807995979786912047956902162"), boost::lexical_cast("-0.00000000605861992739089687382030498760415289269264550833486793263523845161506867233"), boost::lexical_cast("-0.00000000480637734385966690366533313966404604324257069377664472991243197708870665367"), boost::lexical_cast("0.0000000000876647773931341316071062687585175265372059405788465230989307402677425063505"), boost::lexical_cast("0.000000000000789693132057393370058232851770479415791480697650703122951856272042933692562"), boost::lexical_cast("-0.00000000000000394568035880557031827281908497945772005279351103258103359896718769121745485"), boost::lexical_cast("0.000000000000000000576186871216969872110176316067425636374680848236512588856967818814130253782"), boost::lexical_cast("0.000000000000000000000000399819240477850657780597515175272454717319941884716677679140202464346919659"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.463497095089465556193152361674354253550988460728700341512951575248924005107"), boost::lexical_cast("-0.260338621434017069194053753179442990911796110131041248263757604108300285944"), boost::lexical_cast("-5.72933785864723347958689894576856896970871030371827125012166758462465732047"), boost::lexical_cast("17.98064416088037112447262961210309819025869195128448398522612428283054724080"), boost::lexical_cast("-26.15115449481430666135654454601908476913798365469208452665031301194399803840"), boost::lexical_cast("21.63822079230404623177750575684281008376996692891143829654563260593428321030"), boost::lexical_cast("-7.05817968019025161983821299053916328782422062221848193813994955273557967790"), boost::lexical_cast("-8.11181128099913899853666875636635568569027342591544318148780945667167347907"), boost::lexical_cast("14.43923347370119331414236561312914409252115548929447052983356089629331208180"), boost::lexical_cast("-9.60766039707057083044613368973988543650262251496746962365376370801259816429"), boost::lexical_cast("0.254349894074616002886672766738792455231069414161313786718905562281170886778"), boost::lexical_cast("5.45872370542653337904479516900588079252234184768289022901378718755768784979"), boost::lexical_cast("-5.35255306643817868800359080338618790990023650113900088092988956482209882224"), boost::lexical_cast("2.61884931508941023112322057748116480880128421631501355291655017759032872768"), boost::lexical_cast("-0.544813129850747446272398562457900585540272070585851811513882046278191469393"), boost::lexical_cast("-0.131176059127497035521761280194566727490837461219732199796495750703105213740"), boost::lexical_cast("0.124296561686239461871148096056473522101237708684506720861975326392569561724"), boost::lexical_cast("-0.0335032525969103386712875546102562852883523762416026454755015996210457308706"), boost::lexical_cast("0.00197687421925104166227063798049851778200652533856069925030249177610043199615"), boost::lexical_cast("0.000907463054694841802512946678881228619813411228517790637608215643817975804741"), boost::lexical_cast("-0.000174685093401222970344248415273071087172528039501120783385838904981987795138"), boost::lexical_cast("0.00000229140491543835493234065523810377340538057291963129940713094363492371457667"), boost::lexical_cast("0.000000917376265236181573917176045082865834981330874821423583901682913289270269380"), boost::lexical_cast("-0.0000000178074782772529767026962575165367966565557061024587011596888125628493484815"), boost::lexical_cast("-0.000000000238787852610260980034963670269451676132667432806865308573034008434193644445"), boost::lexical_cast("0.00000000000151801385578324942916928975944130135623202429359583566878602650893789670624"), boost::lexical_cast("-0.000000000000000353106940189348195874403026790192524180728472834959918047053114899585048985"), boost::lexical_cast("-0.000000000000000000000490042195447641265484925140544266723530168196082394169729111887193451305107"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.53968424333623591283539637104393285306939860118163339899756370093511752412"), boost::lexical_cast("-8.36118093364641071529734734349327158167828129455095101209909508144950844421"), boost::lexical_cast("19.00710265475370468078225452071655698496996076626930820052271290018734955410"), boost::lexical_cast("-24.04052483563886538469582688782856892395508706836015455488573334599930766580"), boost::lexical_cast("20.63913333795138578853149761490637030572718665431616641957345863819867808720"), boost::lexical_cast("-17.08011584958297102568375705513842664210388848702083749417185061652687170920"), boost::lexical_cast("17.55524143428210432499122213752206106254752320830907975294234324350799433880"), boost::lexical_cast("-19.56455097953537387041983773986348842091325243494736289394773636533578502420"), boost::lexical_cast("24.01670498281153432550600418634366701269994413307461865903740508422306310080"), boost::lexical_cast("-33.28148132262550348111697065791345588077894804510178954360174393891984479610"), boost::lexical_cast("42.28936350567703557972644120171241320325939901556345142153549130433210665950"), boost::lexical_cast("-41.40943373570026124612528767222691112123207497138997507301595976366377899660"), boost::lexical_cast("28.50368136498153869650031108535771315726615052538666183891156005702322580770"), boost::lexical_cast("-12.08970059569761086730267951049932958603674239966305615386495196624445364550"), boost::lexical_cast("1.46119126096220632514786029604710199172818340040776736162153531687984436840"), boost::lexical_cast("1.69007268736527437715523188086809199467627091856919669141240791790387659253"), boost::lexical_cast("-1.16921124742703235845376498243007226742896232096052353425298018102553247710"), boost::lexical_cast("0.320806648634560611806653735358063869544619918599484137286628075250908147793"), boost::lexical_cast("-0.0170205999053340524093626134534504044131532660032315483110190757667509195644"), boost::lexical_cast("-0.0123745609743425718328045581079363596477322528018678302846161407372341760769"), boost::lexical_cast("0.00269495872461749278937894414651717305557023546290073525941350512704421287628"), boost::lexical_cast("-0.0000636240007004980264934020663683814909158562231106074681170796063893995191439"), boost::lexical_cast("-0.0000193455103657614392543301741967257949034899863831055047403088880777986411556"), boost::lexical_cast("0.000000543047159360829865209946475973261539370518740747480923818151249126619846189"), boost::lexical_cast("0.00000000778598331220689574680060505013012792715985361940745149089414772050997826569"), boost::lexical_cast("-0.0000000000685925299554479615829881764374497385028698287479222092891938709078253622707"), boost::lexical_cast("0.0000000000000235738843909944600637338699828608981498881273911589420488771624426365157864"), boost::lexical_cast("0.0000000000000000000654307895488301061055340897951003080401798618960776945151552704816810354728"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.76046627819172595883579644359769953588535927343615287177933134988108839887"), boost::lexical_cast("-29.57545007102832657505743042011930496079450543026239630758938313589160532240"), boost::lexical_cast("108.06076562293097255019034894476937881414402744559487246258107823410272147100"), boost::lexical_cast("-250.55855156825033737879997781487474575584645685461277748381454265462847743800"), boost::lexical_cast("433.85129088951476536844660346166919823690012103418599659417068253860704897400"), boost::lexical_cast("-633.13061187142324243446054071388968011665704146897570849362072311779672021000"), boost::lexical_cast("834.01854300005356154348334819062306666614375690886471768229153759480600689000"), boost::lexical_cast("-989.02232878407997120358917296431206973916448753054681863157557204973406068100"), boost::lexical_cast("1017.88603439602004763640177568787110596329999229043433566699158997753449125000"), boost::lexical_cast("-893.85979471023473569530438057552113081237409230440464102711969573113903766400"), boost::lexical_cast("680.74444199320236644223784616878658122038563144919598756685948523953944743700"), boost::lexical_cast("-451.61186729310171527075800065120538411278520704643026316215948118992976179100"), boost::lexical_cast("232.74693413172044063567820009907697632227981752574909323161715193839229115800"), boost::lexical_cast("-49.62787383879085055577682941397994398270572566635118571746050265908129325690"), boost::lexical_cast("-52.68645266346889530866217977440828165209704972435580166424853416940379389960"), boost::lexical_cast("65.58982701592708822194210862578781927575261800997369868610970088145137416290"), boost::lexical_cast("-35.30870806416811325167467803727623467536045583746263032317420353531903306020"), boost::lexical_cast("9.45693020058134236236600914378186391920422807218483316498811188937316130359"), boost::lexical_cast("-0.309255989510124888838029367237184571273819098555330087401099231089501040621"), boost::lexical_cast("-0.553308322403180080662599855565330327614574762204447931420915764088214443229"), boost::lexical_cast("0.135564956163967134955269497874425345862822277717224909042351279062593810689"), boost::lexical_cast("-0.00531617697249685655413505764052220837874749434001927999181762850859579155872"), boost::lexical_cast("-0.00133403209032194873051891038551751265477738184982267945387427251670469994336"), boost::lexical_cast("0.0000540595013560067659511437186384964395648420570660778415392983733962063677878"), boost::lexical_cast("0.000000852069217823962821991801896006403698378777746783454675044188487130238725815"), boost::lexical_cast("-0.0000000103598635303144789735973280116080267383974282294610808060500440818154996985"), boost::lexical_cast("0.00000000000532326436761189266527809050123441642697540291063663589608819865551319229350"), boost::lexical_cast("0.0000000000000000295492612379887305461120954141505699178535540439686934703841872278010480863"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("7.38188904221300776496009553048328527576967910065603262630183408064961588176"), boost::lexical_cast("-67.04252259666674067633742223812249438362172734096027398031203225656148164940"), boost::lexical_cast("272.73912509608366716885866926191887521865157404771591884845733117796365013300"), boost::lexical_cast("-648.51449384638772307312239131652586511983283577261311478642454334856167122300"), boost::lexical_cast("981.85376383959687377603447626048634109920104854648430762305735754076198344100"), boost::lexical_cast("-957.25261435887056636875408331000776657447691883681487882680731075009939532500"), boost::lexical_cast("541.30366603538032163248551525965043960470666784840537611909029954347476521100"), boost::lexical_cast("39.46539569102171970705958669748925636189807552510212755901108827273086521860"), boost::lexical_cast("-760.02993356684106043735642415972224288718293309831726448424859435908357278400"), boost::lexical_cast("1757.96818720008277561277665672510216931821317114629250348699495528960281618000"), boost::lexical_cast("-2766.91476513255525367674460260698725596040373449509635634609462930432032153000"), boost::lexical_cast("3221.41783539270407631009108958251542185799510806531936255493906833962767291000"), boost::lexical_cast("-3000.71602754404820657764337837297990613638348460036621198220820334626336373000"), boost::lexical_cast("2470.42433778280717582983628335578899816038747362488063072589123876893726477000"), boost::lexical_cast("-1864.25821113047613457963263669044806128695158307572413234609544859584885145000"), boost::lexical_cast("1183.53150011814970334873822520119965114014726798970411170643520179119098445000"), boost::lexical_cast("-541.75058318442630698467104298817880920356698078100114691327566384707686791700"), boost::lexical_cast("137.99951240297224977307761334347678893729357990322145120547559793252791826600"), boost::lexical_cast("3.12602732950121750809668208362625489517387955383131958143915945154981671955"), boost::lexical_cast("-14.36194117187840557384339396841994678599549531498197679768014612622396331010"), boost::lexical_cast("3.88369251450641812542291404390995294553530491514707983578184816105564596373"), boost::lexical_cast("-0.205076203523751335646189692334735950522359458346215290146294237414818037925"), boost::lexical_cast("-0.0519198673443746908093580937887859538950707062316162140689427725731341271982"), boost::lexical_cast("0.00310590105240650772150514682372321446899318001963069459842377331199995861966"), boost::lexical_cast("0.0000511716533793490097430403325096759854066642658007865906291974896322156973598"), boost::lexical_cast("-0.000000915379504933333794585544205822404705959783310556611306655341242734341633518"), boost::lexical_cast("0.000000000673029022229937708128420645199884166792336526676086359571430889068627124496"), boost::lexical_cast("0.00000000000000747149572478212798771461071516239850864323299591892246195331160945379616491"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.66617997816256087920214536690617523746852206827065901622480769322290866167"), boost::lexical_cast("-83.98069158491897137664435643009459588979224859539210985853414803563252312670"), boost::lexical_cast("368.87018005167903705545229666937571099808324458744316183527918620353726742800"), boost::lexical_cast("-978.60152567875426023724121513068510566332100363338255210925843566160434538000"), boost::lexical_cast("1788.17285471112791661414958933940320019900977016707109161896875006334039594000"), boost::lexical_cast("-2505.28418158917689197444930176607319501629136847421443278162092799123039839000"), boost::lexical_cast("3022.40491246297357949186655015360733638291689023377677784285814202906653466000"), boost::lexical_cast("-3419.39265112219216302436718059863861209172985626334602672566056357398676317000"), boost::lexical_cast("3619.96406625884105825247254683983713351764036286848853247298077428329530067000"), boost::lexical_cast("-3448.50066768491548867152223553559079606474609521504982348767152988432081387000"), boost::lexical_cast("2965.26096092775058800222809037838051197376961526002823132548802908800674743000"), boost::lexical_cast("-2370.21566471701430778551537838896798515071343646894034846503015619772514804000"), boost::lexical_cast("1743.38269029053220243343945130374232884233597011426038758644227989592405303000"), boost::lexical_cast("-1131.51593963642249460026014723981984745424498754407883282530799710966079933000"), boost::lexical_cast("643.76118806159351516503113028075491121270396142347621937335117880501444850600"), boost::lexical_cast("-326.00074420849016938772363017187446532879284433779346261909720782417377859600"), boost::lexical_cast("132.04863636507697220410685855738565713363890174302170404844428502247667225600"), boost::lexical_cast("-24.93376772277967886098168919462189547482955889196701960148760723136973166400"), boost::lexical_cast("-11.46007355523622142805150360772463017894407819656429723380717693966775564550"), boost::lexical_cast("9.83520651597144304944047691431100720299540773467198740353710392336582989354"), boost::lexical_cast("-2.69181598889969722526095182382965976931346646569879768346189984962140006978"), boost::lexical_cast("0.170227793119178996114554027953840164114050954576165838411751690985113034637"), boost::lexical_cast("0.0452616305587191906906494463453331102952776770834099929727401231003607603490"), boost::lexical_cast("-0.00456974512275900662016820515100695013104712320434429376265064123517366266192"), boost::lexical_cast("-0.0000738155428701868927889552496062375155784301031721819122602154168460705282344"), boost::lexical_cast("0.00000200417805609293879064935927873520236391193751194342643471993129180158539068"), boost::lexical_cast("-0.00000000209880706796452611382955148605270725220758859068164296317180454372369377273"), boost::lexical_cast("-0.0000000000000465936380567652114719537560618521630318410912594224492450951043895287614753"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.72847835430747578271505940879392817014574904538191687349175230203052100211"), boost::lexical_cast("-87.24046040248515953396974656933062782610014739997179110379894560357414245520"), boost::lexical_cast("389.58988530574605311236047709354236113070541543269814845208675455966229540400"), boost::lexical_cast("-1026.22221524757438134135537633211873760625163523383080063432834094852546692000"), boost::lexical_cast("1792.93918179541631021688427461004056301988797982219951847510033799076038456000"), boost::lexical_cast("-2288.41214820149496386771786036086875129982895627472684354601681048945900938000"), boost::lexical_cast("2458.50954360267178809055553896154712231820849082662071689423543492550962685000"), boost::lexical_cast("-2596.76997150082880482258601881426530105265882898194790860287791956876237858000"), boost::lexical_cast("2688.38307737987921311800960622311996109514265545357119388268171549268774070000"), boost::lexical_cast("-2411.48650321182678409587384256865680519785438974750423956549570619527017446000"), boost::lexical_cast("1814.96164224744171541403234219853877586836575705876463094283829263461877926000"), boost::lexical_cast("-1261.78179075598184586999264045402353666457191513788617366898826973902302211000"), boost::lexical_cast("841.38676655654695150319104651983606990067095607106581498410485823300639441800"), boost::lexical_cast("-448.20904377535777870670016285684401262406426096054935991931563578462255940200"), boost::lexical_cast("137.16569415040272577867061166123400360598914522499642465421078486401470231300"), boost::lexical_cast("6.97029509532788895885164044921726939214354175896907818967947070760987898130"), boost::lexical_cast("-45.34341860661268956588627411545980012291737814825718255408526440488307550890"), boost::lexical_cast("55.74735370610838025915657695145098428353232401912757615516991907215832408810"), boost::lexical_cast("-47.32620271933516468424041285810723316313451633124158857561987010794991368370"), boost::lexical_cast("24.41065715637416470293954557751523613609531738353047901798090642091718991060"), boost::lexical_cast("-6.65124396027002908823875984373242061438238591321150033722971368086704479617"), boost::lexical_cast("0.537531975137361943952820148566801590297468742601138200538147419339609552580"), boost::lexical_cast("0.137261184926968071617250973316263533192179366757491899389956174516444039153"), boost::lexical_cast("-0.0239757337968515916483444709404140761125184131451276108629481306614530373711"), boost::lexical_cast("-0.000410932878749734216531821493671349775506467371457544836055057579036862846795"), boost::lexical_cast("0.0000165640171463349552097550017612947486316141194677792210133363117017273377794"), boost::lexical_cast("-0.0000000258597924701581016593914203020341509426840234287159000763753949926949104263"), boost::lexical_cast("-0.00000000000114791530792780648836943943902186807559930855796434559067866982676609926206"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 10) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.37287144211047504433704259901170390442721988996694171621504548629516455500"), boost::lexical_cast("-54.51890809483490464852283248943415532742549501170721326549017349607757265280"), boost::lexical_cast("247.65758677532204293221852843860039171893106744274564279152987067839641783700"), boost::lexical_cast("-667.31952719692784203091445371189075055828427651171572798348516350202578612200"), boost::lexical_cast("1206.13444150385134150552864103423123937369610639043173021135297756204197139000"), boost::lexical_cast("-1617.35818646827561667680600978897561880473542593995241051599248884894163073000"), boost::lexical_cast("1832.49156632655474156472726861249059324354983667150184526174507469910118731000"), boost::lexical_cast("-1995.67103845695443412193473876339890830254900007363102304644200890512301198000"), boost::lexical_cast("2131.02770891534946890637577113319756817054287535999854454320796762879118815000"), boost::lexical_cast("-2111.95187513591062446244103153762651327657529103137337383793513437628034658000"), boost::lexical_cast("1930.80461644034257841108186913574331573849553980249852538863650267384764992000"), boost::lexical_cast("-1674.24706814300119787406852339956482688948935893569842998213675767018340090000"), boost::lexical_cast("1366.35661279794117490633588742507550359572013220593797272821411949768939054000"), boost::lexical_cast("-1033.84481571316170085412808060764164688210636040456382284874028192216356915000"), boost::lexical_cast("737.90900404538211792129865165976450017644934243508965145264819927501132834700"), boost::lexical_cast("-493.95955963918928208805985585771230332863018601652969197751321482230632186700"), boost::lexical_cast("295.69484249333185830134864171026294553463486994728404251971308252543408822300"), boost::lexical_cast("-157.95033466620052198343083333630677317616869298083612156110564608777827008500"), boost::lexical_cast("78.86126735894737975190973401300435275810030284606457363717046418120379800980"), boost::lexical_cast("-34.19939723625297188671822278987343132401852492048877442030253470317557547340"), boost::lexical_cast("9.85480851482372144542629775026818779321611645636661320085440910666337715905"), boost::lexical_cast("-0.881195797409289017926845853302397485367129834932274334657677636659627396326"), boost::lexical_cast("-0.341364051723345408298411031291185136527925242955856494823260412052622050419"), boost::lexical_cast("0.0769303093181967020937802382117977446742217414595484586532006746274227409798"), boost::lexical_cast("0.00111175217988709633101089934655770002991047763696322734469092738921189950071"), boost::lexical_cast("-0.0000982647635077159314335458943401180956222687035734331269592286893349623594861"), boost::lexical_cast("0.000000189133470696662119943963434893213305034415041925165273061718661046346898186"), boost::lexical_cast("0.0000000000167835835060281197407582642924424716906566393004236332464276808169954678267"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 11) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("3.02130420622658340696449326038237531822446799531129776174318955573407685405"), boost::lexical_cast("-30.88723257001993621576643426629273861715132220480188564481242234143744414420"), boost::lexical_cast("139.65307157164095118547259358765798565209048590969720241210221184082814259900"), boost::lexical_cast("-366.50716378087925339618840606165232094377044199283379149990581531088506707700"), boost::lexical_cast("621.10849644228854707468833979073748978917989740451446746601968372897995517700"), boost::lexical_cast("-738.05038803654141867136650825674832560704059341561497206520134648959243742700"), boost::lexical_cast("716.22760163975362868384596863440985771640184356269565624056314309892640235800"), boost::lexical_cast("-720.40403662968977912382793878795331281967949028146265663798101543449138262900"), boost::lexical_cast("774.46958853527806540260330998289032375034119650758547176995108093121313426500"), boost::lexical_cast("-736.60195800103968521796236805592735351842535720597394502820018520167468427100"), boost::lexical_cast("596.31626254658612005766603140598759356655195606907637429116209218854881937200"), boost::lexical_cast("-471.58378761708200298998558351304868385444119358761564411342671419904990477200"), boost::lexical_cast("378.39898275809490245077643425004608535503558145569856205930880098307153717800"), boost::lexical_cast("-269.86571703409037356854373301981664730493718351969444434530300707084602972400"), boost::lexical_cast("167.75440605674704647078720706448625075038628046714247177190414075458807244900"), boost::lexical_cast("-102.88811870683190292233095418098044601993226910564909825458147979457012259200"), boost::lexical_cast("60.84069783294831355931283800609894422578310981797539730725548116612260807360"), boost::lexical_cast("-29.52799065611523148766040534779036649587797273072633016718343937010872259070"), boost::lexical_cast("12.09044122964690028250983947194193410583757173591995469038844600943694632610"), boost::lexical_cast("-4.94541561682043406565916615601715119979854449991220349537517054946542132239"), boost::lexical_cast("1.52761066076119130776354014949615007676815462459446946713730714810296595229"), boost::lexical_cast("-0.0304455420249075430891047039138326243093334846566920021789140647984175448097"), boost::lexical_cast("-0.149650671652588930076956033416283389031589049770514927584948507803553202910"), boost::lexical_cast("0.0336574490088785668148493615449347354611183173599708036294762098419950316423"), boost::lexical_cast("-0.000126497027151469654378765535979290734289731625144899692503470508091193529475"), boost::lexical_cast("-0.0000897116011370451342055211796348790683035477616931359835457707561956726691767"), boost::lexical_cast("0.000000142409422634022110726759123860758274606648079204544228006777846621754692259"), boost::lexical_cast("0.0000000000252515640185869778340276613779458838796409717012259538150426423432799209608"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 12) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("1.13501118834531862832791685103090778732600754703053509379504805718104885902"), boost::lexical_cast("-11.64655725601608471987125140319522273869255472727074641759372417306485077730"), boost::lexical_cast("52.47997731358147104819352051854695978618817398284168789151634324060243697900"), boost::lexical_cast("-135.45701731410847795494161971266033798422685436748530857469841989392043701600"), boost::lexical_cast("219.96124976643716810233421769891415115050379995458616095550270708427626420900"), boost::lexical_cast("-238.37499127470823560688111086646834383929171370516476493761439859373820683700"), boost::lexical_cast("199.79115976545848616437399472512434089517222358850429527846981583702591271100"), boost::lexical_cast("-186.06580854955499729692153505979598892043417420915640640747325871682106260700"), boost::lexical_cast("208.74631601283777221705885370999784696071568535053317514980802005864771752100"), boost::lexical_cast("-197.53853499262074041123518689566722947819857600237876006152376593189070798400"), boost::lexical_cast("144.50075463010970867145970534859505768015783636183955794684498462003441805100"), boost::lexical_cast("-106.36870296080726935127337203425079184767065663506312262840651389217392205900"), boost::lexical_cast("88.73938682065148057511439985326164459436444773853443006110286562673807699280"), boost::lexical_cast("-62.10218520435182935953770979789019089452934455495249757573801037083579624320"), boost::lexical_cast("33.37756480360810332092878948658803898197552007679892596614034975425467298740"), boost::lexical_cast("-18.90612968481519997245444759492813159382596260487606074048382930111416740570"), boost::lexical_cast("11.73182379476133043347419318594516895878294775638321702310633621242203615490"), boost::lexical_cast("-4.89127651169185001615684659153647879805287303355244863107672447172949919127"), boost::lexical_cast("1.05628831785634767244430613794778237383118902182955930156963055438457640198"), boost::lexical_cast("-0.278924570772378963005919620761891241290397678645427497366931683979103470313"), boost::lexical_cast("0.0349217046715326267223252535829602432217755405230717045003308341586538338077"), boost::lexical_cast("0.173039450787921076573568728042430497574717189628459371201122511640416535804"), boost::lexical_cast("-0.125154600705023543935668144417468315166811999855906394348835987111005330572"), boost::lexical_cast("0.0291520111880351888227853532698326680951804379655921639568061622853077591827"), boost::lexical_cast("-0.00119588167326521772050685130712167568577493075580492617893532154147491503516"), boost::lexical_cast("-0.000166966587098874949698033688140021197028135858548757937517355756848615445303"), boost::lexical_cast("0.000000188051207904050407421484278134701770752347161244389100186827497009857301113"), boost::lexical_cast("0.0000000000665676590058883342359366356514472856699743985374049531980671537812596361102"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 13) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.147328387026945181742534360727928536657557400346046037192839862582804936900"), boost::lexical_cast("-1.51456549085202376204483791233550876670959441040514033264111698819378554402"), boost::lexical_cast("6.94414619972386232622555773936309700660158456761079287802696168029991317902"), boost::lexical_cast("-18.78704596117275369235580835040616276805576972998620945843399189205354798320"), boost::lexical_cast("33.75320683102715133888929607462218380210425052594719299190672951764918964970"), boost::lexical_cast("-43.90968018808903858591509195317885887927809302282775758823494965859626988710"), boost::lexical_cast("45.83007041045357748015949276788143174487066194868689328670377077172900922670"), boost::lexical_cast("-43.30834737848262311266594213584179463295479030127624741231273476750096363320"), boost::lexical_cast("40.28587342872956736979372620674121597409935291189432692644089811506211904560"), boost::lexical_cast("-38.07079933210995921006056307099293201249460698597519136937589815349848540930"), boost::lexical_cast("36.48645327878740068202506706074164138888906527167902669842548785200456090760"), boost::lexical_cast("-32.99863707618939353424238452194841065903680035129007522576517208426242003870"), boost::lexical_cast("26.55970062209079850156043839739581666886976736313064228805575294861660949750"), boost::lexical_cast("-20.59842254567111580869690652690847120193788739757843717989385899237339101340"), boost::lexical_cast("16.66182339593160150140392670274598786225164619130356052597867372641808254150"), boost::lexical_cast("-12.48056679222918764776819055454069770140079985190646278545971576285539893300"), boost::lexical_cast("8.00729939791465563598426689351883338497952088924077343600523943715192249470"), boost::lexical_cast("-5.05071646613187505818485190469727424915951382050926867171160457018863109602"), boost::lexical_cast("3.29966711978217146018111284131326004314469156813581461296273109642531273479"), boost::lexical_cast("-1.82568661448281886663681039165151047023026983547946329025101178092516198927"), boost::lexical_cast("0.821545996592165413015176926103918379703993671815822408869238370242177789874"), boost::lexical_cast("-0.383704993238053425488527996051173229244898380519514965582775999086944158021"), boost::lexical_cast("0.175485561770223825536069856812357489141836294882044305667107034046144733761"), boost::lexical_cast("-0.0490433781210161672748726863502704850354754206732915757148321796262332557411"), boost::lexical_cast("0.00402547360327382273192760485491174840524317417151707477913869414062168673233"), boost::lexical_cast("0.000591615163102432487394020984370444214618369356333750305162759222030306708281"), boost::lexical_cast("-0.00000150076799335799622176733790301367198750063662367274615802926812851245445696"), boost::lexical_cast("-0.00000000105864474240497768156598640472330313913710369319591100716113011216570777723"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 14) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0242821885342162555172194807204060720439176164669704179647896832718856332498"), boost::lexical_cast("-0.249856695544308322348171496342170210083410754460476379583874589925971489368"), boost::lexical_cast("1.12326005797749044778439744178131419781661379271554672577789771011822915870"), boost::lexical_cast("-2.86469109526581467211201873076519837722365386321507572083194802001927335161"), boost::lexical_cast("4.50079290106999295066844741272526027729937316456024276862452670751556633337"), boost::lexical_cast("-4.48684463117403305020608532973799146401232890979166234034679061467612710549"), boost::lexical_cast("3.12967055985402796636707893316937491613623416550895649179552121609620465579"), boost::lexical_cast("-2.47724668807865361819228723977775474438205454678621615947243362585570677107"), boost::lexical_cast("2.91278205889249382066105160662535333323212648243270007533168890574238996600"), boost::lexical_cast("-2.81257313199263046793165930650235695480992793053614182870128250653240399226"), boost::lexical_cast("1.90398649466128702523970742655503101903096138960699394205660617785029524613"), boost::lexical_cast("-1.37699945499915151843967957813503956475301514890644971272041072293843226357"), boost::lexical_cast("1.28495268091529903567348249127974601649844237295023870994028850106617764318"), boost::lexical_cast("-0.952763471445207071061796159152966939284649904476335068736845300084967366990"), boost::lexical_cast("0.535788968888742389713782672547333938330308007633675251508339886039944284585"), boost::lexical_cast("-0.358020789818714250877447233131478684920110238088884239583652089996295811608"), boost::lexical_cast("0.260288177789983828698553363324988305811986215701965042156106479955015465057"), boost::lexical_cast("-0.136189356052305779370763109924086580150032155644746928185072140262278106899"), boost::lexical_cast("0.0628766811464750403125935867053544555088689453179188749663490799516604967151"), boost::lexical_cast("-0.0370637548509496888808797750019041755705513054464047218196448291548517149764"), boost::lexical_cast("0.0177893472376662545340696681623277652018062438254456540388233762026125185107"), boost::lexical_cast("-0.00567156369248172085563495886241541581202423428371480185063640538001288280474"), boost::lexical_cast("0.00218143409758500086570687953062016667230176987210602107478648809100271457937"), boost::lexical_cast("-0.000840077010916613961293716749850474022730704167044599676252293240098595360069"), boost::lexical_cast("0.0000884896797884032945739919608263751800212682320278642794159422173907791309331"), boost::lexical_cast("0.0000208568442490274769998537189218999959487143160425280136701000686328977000945"), boost::lexical_cast("-0.000000187401650616022963832478803386742923717598478201557979913608078604137745338"), boost::lexical_cast("-0.000000000262480056546984342244841766991496735739199664461987202512509327833476650923"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } - if constexpr (p == 16) { - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0f, 0x1.674708p-13f, 0x1.27cdb4p-5f, 0x1.f3f9a4p-2f, 0x1.8a1b0ep-1f, -0x1.d00082p-2f, 0x1.06c982p-2f, -0x1.4ec10ap-3f, 0x1.b93c32p-4f, -0x1.09f5f4p-4f, 0x1.0b6a76p-5f, -0x1.a17eb8p-7f, 0x1.cda18ep-9f, -0x1.18156ap-11f, -0x1.547c4ep-15f, 0x1.a1d518p-15f, -0x1.fb90c6p-17f, 0x1.085bbcp-19f, 0x1.4a16eap-22f, -0x1.3b0f84p-23f, 0x1.42695p-28f, 0x1.acf5ccp-29f, 0x1.c7dfc2p-37f, -0x1.99a498p-37f, 0x1.0c54f6p-42f, 0x1.60b622p-49f, -0x1.63607p-54f, 0x1.f308a8p-62f, -0x1.dcd83cp-74f, -0x1.f4c81ep-87f, 0x1.f541a8p-112f, -0x0p+0f}; - } - if constexpr (order == 1) { - return {0x0p+0f, 0x1.5e2be4p-10f, 0x1.115596p-3f, 0x1.8e066ep-1f, -0x1.9a3aeap-1f, -0x1.b4e824p-2f, 0x1.24d79cp-1f, -0x1.96ff08p-2f, 0x1.7cff08p-3f, -0x1.3b2f7p-5f, -0x1.8c4396p-6f, 0x1.d82f62p-6f, -0x1.d30848p-7f, 0x1.b8ca7p-9f, 0x1.4ea26ep-13f, -0x1.44550ap-12f, 0x1.116fb6p-15f, 0x1.e6f46ap-16f, -0x1.73244cp-17f, 0x1.105e3p-20f, 0x1.85ee5ap-23f, -0x1.5ac9f2p-25f, 0x1.d789f4p-30f, 0x1.8d5e3ep-35f, -0x1.c8b384p-37f, 0x1.38fe4p-43f, 0x1.f524d2p-49f, -0x1.a73b7ep-57f, -0x1.c53204p-68f, 0x1.a5354ep-81f, -0x1.a59b92p-105f, -0x0p+0f}; - } - if constexpr (order == 2) { - return {0x0p+0f, 0x1.295efep-7f, 0x1.9d61ccp-2f, 0x1.161d42p-2f, -0x1.5b7a46p+1f, 0x1.d1174ep+1f, -0x1.64fd52p+1f, 0x1.05168ep+1f, -0x1.657508p+0f, 0x1.a38bfp-1f, -0x1.889b16p-2f, 0x1.152c76p-3f, -0x1.1b4c9ap-5f, 0x1.907f1ep-8f, -0x1.48b152p-13f, -0x1.a3276ep-11f, 0x1.19008ap-11f, -0x1.4a0f3p-13f, 0x1.b16d86p-17f, 0x1.3c9bcap-19f, 0x1.899254p-24f, -0x1.e003aep-24f, -0x1.b118f8p-27f, 0x1.a8e81cp-30f, 0x1.472048p-36f, 0x1.0bc546p-41f, -0x1.5b7878p-47f, -0x1.75c578p-53f, -0x1.4450ep-64f, 0x1.74639cp-76f, -0x1.74be14p-99f, 0x0p+0f}; - } - if constexpr (order == 3) { - return {0x0p+0f, 0x1.ade0c6p-5f, 0x1.c28b44p-1f, -0x1.5f4cdp+1f, 0x1.cdb8f6p+0f, 0x1.f77744p+0f, -0x1.dd879cp+1f, 0x1.37053cp+1f, -0x1.1bfa76p-2f, -0x1.2b5034p+0f, 0x1.63e226p+0f, -0x1.a29914p-1f, 0x1.852868p-3f, 0x1.9a9664p-4f, -0x1.c29f78p-4f, 0x1.54d634p-5f, -0x1.41b2a6p-9f, -0x1.225dap-8f, 0x1.f9019ap-10f, -0x1.2c2838p-12f, -0x1.8e8742p-16f, 0x1.c9f58cp-17f, -0x1.61f64ap-20f, -0x1.96b8bp-25f, 0x1.71f48cp-27f, -0x1.b5fc8ep-34f, -0x1.c5963ep-38f, 0x1.6b4e6cp-45f, 0x1.e67136p-58f, -0x1.6aff4p-67f, 0x1.6b579p-89f, 0x0p+0f}; - } - if constexpr (order == 4) { - return {0x0p+0f, 0x1.002834p-2f, 0x1.74f146p-1f, -0x1.d40722p+2f, 0x1.2af6fp+4f, -0x1.a43136p+4f, 0x1.9a15aep+4f, -0x1.38d1bep+4f, 0x1.6c6cdcp+3f, -0x1.13619ap+2f, 0x1.d56ce2p-1f, -0x1.e42908p-1f, 0x1.e52912p+0f, -0x1.ee224ep+0f, 0x1.1f26d6p+0f, -0x1.588844p-2f, -0x1.9e45fcp-7f, 0x1.dcd2d2p-5f, -0x1.93116cp-6f, 0x1.0e0178p-8f, 0x1.31f3fap-12f, -0x1.f6b0ep-13f, 0x1.f05078p-16f, 0x1.2ec5bap-20f, -0x1.47f2bp-22f, 0x1.bcb022p-29f, 0x1.1bcefep-32f, -0x1.34d97ap-39f, -0x1.6f2c8cp-53f, 0x1.34e43ep-60f, -0x1.352f98p-81f, -0x0p+0f}; - } - if constexpr (order == 5) { - return {0x0p+0f, 0x1.e5d8b2p-1f, -0x1.e7e4aep+1f, 0x1.643948p+1f, 0x1.8bf778p+3f, -0x1.39576p+5f, 0x1.f6657cp+5f, -0x1.2981aap+6f, 0x1.0cf3p+6f, -0x1.71528cp+4f, -0x1.136588p+6f, 0x1.5ecf14p+7f, -0x1.ca8fbep+7f, 0x1.83a966p+7f, -0x1.9d9118p+6f, 0x1.818f5cp+4f, 0x1.4e782cp+3f, -0x1.7fba74p+3f, 0x1.361d7ep+2f, -0x1.85fee8p-1f, -0x1.fcc32p-4f, 0x1.30d54cp-4f, -0x1.4236c8p-7f, -0x1.6b6d4cp-12f, 0x1.251cb8p-13f, -0x1.7df628p-19f, -0x1.6d7bap-23f, 0x1.04735p-29f, 0x1.ecabdp-41f, -0x1.035efp-49f, 0x1.039e9p-69f, 0x0p+0f}; - } - if constexpr (order == 6) { - return {0x0p+0f, 0x1.5c435cp+1f, -0x1.45ad88p+4f, 0x1.1ac644p+6f, -0x1.3bcd24p+7f, 0x1.1132bep+8f, -0x1.a33216p+8f, 0x1.2bec4cp+9f, -0x1.83ddd4p+9f, 0x1.b1ad42p+9f, -0x1.9d7a32p+9f, 0x1.5526f8p+9f, -0x1.e99686p+8f, 0x1.186a9ap+8f, -0x1.4f805p+6f, -0x1.84955p+5f, 0x1.59efa2p+6f, -0x1.dac7aep+5f, 0x1.620788p+4f, -0x1.88bb02p+1f, -0x1.04b916p+0f, 0x1.18c698p-1f, -0x1.508ddcp-4f, -0x1.539386p-9f, 0x1.9eab9ap-10f, -0x1.980b92p-15f, -0x1.761c2ap-19f, 0x1.64e7e2p-25f, 0x1.1823b8p-35f, -0x1.623924p-44f, 0x1.6290fap-63f, 0x0p+0f}; - } - if constexpr (order == 7) { - return {0x0p+0f, 0x1.891444p+2f, -0x1.c4b29p+5f, 0x1.d994c4p+7f, -0x1.26defep+9f, 0x1.ddf578p+9f, -0x1.fd207ap+9f, 0x1.36152ap+9f, 0x1.d8616ap+6f, -0x1.190b42p+10f, 0x1.36219cp+11f, -0x1.eed74p+11f, 0x1.31c14ap+12f, -0x1.31807ap+12f, 0x1.07e38p+12f, -0x1.9ca0ep+11f, 0x1.192392p+11f, -0x1.28f7fp+10f, 0x1.8ef118p+8f, -0x1.076216p+5f, -0x1.3734aap+5f, 0x1.2e313ep+4f, -0x1.913ecep+1f, -0x1.aba4ep-4f, 0x1.5578cap-4f, -0x1.f3ff48p-9f, -0x1.bd3a12p-13f, 0x1.29ffeap-18f, 0x1.5e7712p-28f, -0x1.267e4p-36f, 0x1.26c8dap-54f, 0x0p+0f}; - } - if constexpr (order == 8) { - return {0x0p+0f, 0x1.1c0608p+3f, -0x1.65d998p+6f, 0x1.9d8978p+8f, -0x1.24c8d8p+10f, 0x1.21d47ap+11f, -0x1.bbc006p+11f, 0x1.2211c4p+12f, -0x1.5c65p+12f, 0x1.845a36p+12f, -0x1.87e6ep+12f, 0x1.650412p+12f, -0x1.2b9aap+12f, 0x1.cebcfcp+11f, -0x1.3e375cp+11f, 0x1.7d70c6p+10f, -0x1.8fd688p+9f, 0x1.57b6f4p+8f, -0x1.3e2cp+6f, -0x1.f1e0f6p+4f, 0x1.39f676p+5f, -0x1.07f7dep+4f, 0x1.6eaf02p+1f, 0x1.f8896cp-4f, -0x1.b78e4ap-4f, 0x1.faf294p-8f, 0x1.a6b604p-12f, -0x1.9886bep-17f, -0x1.7c0bdep-26f, 0x1.90aca4p-34f, -0x1.91166ep-51f, -0x0p+0f}; - } - if constexpr (order == 9) { - return {0x0p+0f, 0x1.58e7ep+3f, -0x1.c53a2ap+6f, 0x1.0cc18ep+9f, -0x1.7c92fcp+10f, 0x1.6a1946p+11f, -0x1.fab772p+11f, 0x1.254298p+12f, -0x1.407f9ep+12f, 0x1.53233cp+12f, -0x1.3b528cp+12f, 0x1.e2ea28p+11f, -0x1.3d616ap+11f, 0x1.75fce6p+10f, -0x1.2b5b5p+9f, -0x1.18e052p+7f, 0x1.ed1ee2p+8f, -0x1.f5a5a8p+8f, 0x1.920c94p+8f, -0x1.22c138p+8f, 0x1.4b1ba2p+7f, -0x1.ec877p+5f, 0x1.641262p+3f, 0x1.3bac8p-1f, -0x1.3ae0dcp-1f, 0x1.0ba446p-4f, 0x1.c3804ap-9f, -0x1.3c78fcp-13f, -0x1.6e90a4p-22f, 0x1.34c398p-29f, -0x1.351bbcp-45f, -0x0p+0f}; - } - if constexpr (order == 10) { - return {0x0p+0f, 0x1.0cfd94p+3f, -0x1.68c00ep+6f, 0x1.b4a63ap+8f, -0x1.3c4fdp+10f, 0x1.35efeap+11f, -0x1.c3872cp+11f, 0x1.1261acp+12f, -0x1.39e1fap+12f, 0x1.5e4c9ep+12f, -0x1.6b72e4p+12f, 0x1.578fd4p+12f, -0x1.30faf4p+12f, 0x1.0174aep+12f, -0x1.942bc4p+11f, 0x1.25cbc8p+11f, -0x1.914caap+10f, 0x1.f93f04p+9f, -0x1.1b4f5ep+9f, 0x1.1df01cp+8f, -0x1.048db6p+7f, 0x1.730bccp+5f, -0x1.09b56cp+3f, -0x1.4fb834p+0f, 0x1.e38e1p-1f, -0x1.ee07e6p-4f, -0x1.913ceep-8f, 0x1.0726b8p-11f, 0x1.2751c6p-20f, -0x1.00ceb8p-26f, 0x1.012308p-41f, 0x0p+0f}; - } - if constexpr (order == 11) { - return {0x0p+0f, 0x1.6ddd34p+2f, -0x1.ef9ef6p+5f, 0x1.2bec86p+8f, -0x1.ab3138p+9f, 0x1.90171ap+10f, -0x1.0b827ap+11f, 0x1.21c7ccp+11f, -0x1.3291c6p+11f, 0x1.52187ep+11f, -0x1.5764b2p+11f, 0x1.2d82b8p+11f, -0x1.efcf7p+10f, 0x1.96b834p+10f, -0x1.34d67cp+10f, 0x1.9aafbap+9f, -0x1.002f1ep+9f, 0x1.378956p+8f, -0x1.48f682p+7f, 0x1.17de88p+6f, -0x1.abd1c4p+4f, 0x1.18837p+3f, -0x1.72b116p-2f, -0x1.93c736p+0f, 0x1.74105cp-1f, -0x1.a93828p-4f, -0x1.8ee02cp-9f, 0x1.b89c5ep-11f, 0x1.5051p-19f, -0x1.a9ba34p-25f, 0x1.aa6a7ep-39f, -0x0p+0f}; - } - if constexpr (order == 12) { - return {0x0p+0f, 0x1.7e688cp+1f, -0x1.044f66p+5f, 0x1.39d278p+7f, -0x1.b63bb8p+8f, 0x1.86b368p+9f, -0x1.d8001cp+9f, 0x1.b397fp+9f, -0x1.9ca192p+9f, 0x1.d28d7ep+9f, -0x1.daeab6p+9f, 0x1.738e38p+9f, -0x1.0785a4p+9f, 0x1.a556aap+8f, -0x1.320672p+8f, 0x1.33661p+7f, -0x1.d86506p+5f, 0x1.9ebe06p+4f, -0x1.ec9eeap-1f, -0x1.103434p+4f, 0x1.04d752p+4f, -0x1.2fcc8ap+3f, 0x1.7c24bcp+2f, -0x1.c84c14p+1f, 0x1.57bcccp+0f, -0x1.d81dbp-3f, -0x1.20f9f8p-13f, 0x1.c2f2aep-9f, 0x1.baf67p-17f, -0x1.ae94eep-22f, 0x1.af9128p-35f, 0x0p+0f}; - } - if constexpr (order == 13) { - return {0x0p+0f, 0x1.a308fp-1f, -0x1.1df37cp+3f, 0x1.5a47ccp+5f, -0x1.e7cc32p+6f, 0x1.ba5aa6p+7f, -0x1.137ebep+8f, 0x1.07f96cp+8f, -0x1.f176d6p+7f, 0x1.0c09ap+8f, -0x1.12bf1p+8f, 0x1.de16d6p+7f, -0x1.8c7b4ap+7f, 0x1.565926p+7f, -0x1.13d91ap+7f, 0x1.8b69dep+6f, -0x1.15b78cp+6f, 0x1.8188b8p+5f, -0x1.e03c02p+4f, 0x1.12ed8cp+4f, -0x1.36a5bp+3f, 0x1.3d2642p+2f, -0x1.11ef14p+1f, 0x1.c294dap-1f, -0x1.4f57e8p-2f, 0x1.1ebd9ap-4f, 0x1.367918p-14f, -0x1.fdd378p-10f, -0x1.0fc074p-22f, 0x1.f945fcp-22f, -0x1.fb1bdp-34f, 0x0p+0f}; - } - if constexpr (order == 14) { - return {0x0p+0f, 0x1.74ef14p-3f, -0x1.fd9d32p+0f, 0x1.3320f2p+3f, -0x1.a9e31ep+4f, 0x1.73dbdep+5f, -0x1.aa50f2p+5f, 0x1.5e48acp+5f, -0x1.20d7a8p+5f, 0x1.4350bap+5f, -0x1.549ap+5f, 0x1.0d8c72p+5f, -0x1.8fe88ap+4f, 0x1.63da6cp+4f, -0x1.24224p+4f, 0x1.7851e2p+3f, -0x1.e4fd18p+2f, 0x1.610a44p+2f, -0x1.ae4c3ep+1f, 0x1.a6fe28p+0f, -0x1.ccc92p-1f, 0x1.f93894p-2f, -0x1.8612dep-3f, 0x1.fd43fcp-5f, -0x1.aafa1ep-6f, 0x1.b63874p-8f, 0x1.071682p-11f, -0x1.a84c4p-12f, 0x1.a20c24p-18f, 0x1.e7f1cp-23f, -0x1.eb089ap-34f, -0x0p+0f}; - } - if constexpr (order == 15) { - return {0x0p+0f, 0x1.31c72ap-6f, -0x1.a21aa8p-3f, 0x1.f656a4p-1f, -0x1.589b5p+1f, 0x1.250496p+2f, -0x1.3b0f08p+2f, 0x1.bed88p+1f, -0x1.37fe76p+1f, 0x1.75c34ap+1f, -0x1.9f32b2p+1f, 0x1.2a50b6p+1f, -0x1.80aff2p+0f, 0x1.71f9bp+0f, -0x1.40d216p+0f, 0x1.6edc3cp-1f, -0x1.abb5dp-2f, 0x1.5fdcbap-2f, -0x1.af4e9cp-3f, 0x1.57b33ep-4f, -0x1.736294p-5f, 0x1.e1a61ep-6f, -0x1.381382p-7f, 0x1.a99b88p-10f, -0x1.191adap-10f, 0x1.44a23ap-12f, 0x1.4db128p-13f, -0x1.2cad38p-14f, 0x1.f38c66p-19f, 0x1.c87078p-24f, -0x1.cdd01ap-34f, -0x0p+0f}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0, 0x1.674708c20fd28p-13, 0x1.27cdb30a789aap-5, 0x1.f3f9a4213a58ep-2, 0x1.8a1b0e63e768fp-1, -0x1.d0008134e7b25p-2, 0x1.06c9817f611eap-2, -0x1.4ec109006f3abp-3, 0x1.b93c322324f49p-4, -0x1.09f5f4083e297p-4, 0x1.0b6a75dfa25cdp-5, -0x1.a17eb803ff746p-7, 0x1.cda18d3f662aap-9, -0x1.1815693b1e50ap-11, -0x1.547c4d557ee7fp-15, 0x1.a1d518779619bp-15, -0x1.fb90c559a340ap-17, 0x1.085bbb58c3dc6p-19, 0x1.4a16ea18a78a9p-22, -0x1.3b0f83cef7c9dp-23, 0x1.426950d9b6bcap-28, 0x1.acf5cc83787c7p-29, 0x1.c7dfc1cbcd56p-37, -0x1.99a4987142751p-37, 0x1.0c54f6dbbd52bp-42, 0x1.60b6215484a1dp-49, -0x1.6360709f9f94cp-54, 0x1.f308a7934d099p-62, -0x1.dcd83ccd7b40ep-74, -0x1.f4c81d09055a8p-87, 0x1.f541a7bafa402p-112, -0x0p+0}; - } - if constexpr (order == 1) { - return {0x0p+0, 0x1.5e2be3ffc02e6p-10, 0x1.115596e3350edp-3, 0x1.8e066ec21fc6ap-1, -0x1.9a3ae9a2a692bp-1, -0x1.b4e823397cf88p-2, 0x1.24d79baf908bcp-1, -0x1.96ff08990aa2p-2, 0x1.7cff079859d45p-3, -0x1.3b2f6fbc125fp-5, -0x1.8c439625af32p-6, 0x1.d82f61038e0ep-6, -0x1.d308486caa608p-7, 0x1.b8ca6f1e525d9p-9, 0x1.4ea26d28d3087p-13, -0x1.4455094b3efadp-12, 0x1.116fb5095b29ap-15, 0x1.e6f46905743cfp-16, -0x1.73244b5651139p-17, 0x1.105e30d7ecb46p-20, 0x1.85ee598e5c773p-23, -0x1.5ac9f1c76ae72p-25, 0x1.d789f3d703addp-30, 0x1.8d5e3e20027e8p-35, -0x1.c8b3833c3b769p-37, 0x1.38fe40b99904fp-43, 0x1.f524d19d8420ap-49, -0x1.a73b7d5e557e7p-57, -0x1.c5320460bba02p-68, 0x1.a5354de9b5e4cp-81, -0x1.a59b918cf087fp-105, -0x0p+0}; - } - if constexpr (order == 2) { - return {0x0p+0, 0x1.295efeac152d8p-7, 0x1.9d61cc47e5de2p-2, 0x1.161d416b67638p-2, -0x1.5b7a45663376bp+1, 0x1.d1174d09edd0ep+1, -0x1.64fd520a6621ap+1, 0x1.05168da964846p+1, -0x1.6575089c4586dp+0, 0x1.a38bf0b53f437p-1, -0x1.889b16ed752f1p-2, 0x1.152c76b8c5aa6p-3, -0x1.1b4c99876d202p-5, 0x1.907f1e8b42629p-8, -0x1.48b152205d27fp-13, -0x1.a3276d4b1b41fp-11, 0x1.19008ab2bad0ep-11, -0x1.4a0f2fc3a3fe6p-13, 0x1.b16d8531bcd97p-17, 0x1.3c9bc919e0e4ap-19, 0x1.899254d741919p-24, -0x1.e003adff466a7p-24, -0x1.b118f867cd64ep-27, 0x1.a8e81cf9b2bf5p-30, 0x1.472047d4ce812p-36, 0x1.0bc546f1206bp-41, -0x1.5b78778ec812cp-47, -0x1.75c5773026aecp-53, -0x1.4450e0ff79234p-64, 0x1.74639b34e972ap-76, -0x1.74be14820bd54p-99, 0x0p+0}; - } - if constexpr (order == 3) { - return {0x0p+0, 0x1.ade0c67a6df63p-5, 0x1.c28b430a75f2ap-1, -0x1.5f4ccfba427cfp+1, 0x1.cdb8f607de72ep+0, 0x1.f77743196657ap+0, -0x1.dd879ba809268p+1, 0x1.37053c10bce29p+1, -0x1.1bfa76c0a943ap-2, -0x1.2b5034c5e7cecp+0, 0x1.63e2260baa9fep+0, -0x1.a29913a0c0f2ep-1, 0x1.852867c8ceb36p-3, 0x1.9a9664fc9e679p-4, -0x1.c29f78e2de8f5p-4, 0x1.54d634445fcf7p-5, -0x1.41b2a5a54a663p-9, -0x1.225d9fec5c6e9p-8, 0x1.f9019974a7ddbp-10, -0x1.2c283714217e7p-12, -0x1.8e8742bbbfb21p-16, 0x1.c9f58c62dd5d4p-17, -0x1.61f6495ed1b8fp-20, -0x1.96b8b0f8a15e3p-25, 0x1.71f48c99d030bp-27, -0x1.b5fc8d66ab6dp-34, -0x1.c5963ee2273d3p-38, 0x1.6b4e6ce52480bp-45, 0x1.e67135f42b49bp-58, -0x1.6aff40a6dd5b4p-67, 0x1.6b5790e714dd8p-89, 0x0p+0}; - } - if constexpr (order == 4) { - return {0x0p+0, 0x1.002833198203cp-2, 0x1.74f145f5180b5p-1, -0x1.d40722c67b8b3p+2, 0x1.2af6f0f464bc5p+4, -0x1.a43135145799ap+4, 0x1.9a15ae041271p+4, -0x1.38d1bd49e9af3p+4, 0x1.6c6cdb14d7fe1p+3, -0x1.13619aaa119f9p+2, 0x1.d56ce1ec874a1p-1, -0x1.e42907ae7a264p-1, 0x1.e52911f9f6566p+0, -0x1.ee224ef8eb13dp+0, 0x1.1f26d6223d44dp+0, -0x1.5888435f57836p-2, -0x1.9e45fc4e6f7c9p-7, 0x1.dcd2d2ebfb6e4p-5, -0x1.93116bc1ac6b7p-6, 0x1.0e01783e342a4p-8, 0x1.31f3faa90de9fp-12, -0x1.f6b0df77a544p-13, 0x1.f05077a02c3acp-16, 0x1.2ec5b9d224e6cp-20, -0x1.47f2b0eb68edbp-22, 0x1.bcb021bf883a2p-29, 0x1.1bcefd6cfba52p-32, -0x1.34d97adc52a39p-39, -0x1.6f2c8c9ca395p-53, 0x1.34e43d9253e6fp-60, -0x1.352f98f0f2e49p-81, -0x0p+0}; - } - if constexpr (order == 5) { - return {0x0p+0, 0x1.e5d8b15d3664dp-1, -0x1.e7e4ae8313c98p+1, 0x1.643947f56174fp+1, 0x1.8bf77730624fbp+3, -0x1.39575fcf961c1p+5, 0x1.f6657cd6c7e2ap+5, -0x1.2981aaa66ca37p+6, 0x1.0cf300079688ep+6, -0x1.71528cd9cab13p+4, -0x1.13658826409b4p+6, 0x1.5ecf135e336b8p+7, -0x1.ca8fbd8754dc2p+7, 0x1.83a96558c6c07p+7, -0x1.9d91182e0786ap+6, 0x1.818f5ca05f024p+4, 0x1.4e782cc994095p+3, -0x1.7fba734a37797p+3, 0x1.361d7d826bb5bp+2, -0x1.85fee8307d591p-1, -0x1.fcc3205624ce5p-4, 0x1.30d54b861144bp-4, -0x1.4236c7ccc62dfp-7, -0x1.6b6d4bcc089efp-12, 0x1.251cb75a77a65p-13, -0x1.7df627db3ed38p-19, -0x1.6d7ba0319a18p-23, 0x1.047350b843565p-29, 0x1.ecabd0f857c51p-41, -0x1.035ef08b1273dp-49, 0x1.039e900e7fa13p-69, 0x0p+0}; - } - if constexpr (order == 6) { - return {0x0p+0, 0x1.5c435b4994699p+1, -0x1.45ad88073e625p+4, 0x1.1ac643e9c99f9p+6, -0x1.3bcd24e1c22f1p+7, 0x1.1132bead650e6p+8, -0x1.a3321607e3596p+8, 0x1.2bec4ce73b525p+9, -0x1.83ddd4224b9acp+9, 0x1.b1ad4241d86bfp+9, -0x1.9d7a3218170b3p+9, 0x1.5526f87e8214fp+9, -0x1.e996857ebd3fep+8, 0x1.186a9a24f3388p+8, -0x1.4f804f76b6d5cp+6, -0x1.84954fc1821p+5, 0x1.59efa11d2ec7p+6, -0x1.dac7ad3b33c96p+5, 0x1.62078796373e7p+4, -0x1.88bb023e9f2fap+1, -0x1.04b9160269b8ap+0, 0x1.18c6982acbd2dp-1, -0x1.508ddc9d3ccb4p-4, -0x1.539386e1415cfp-9, 0x1.9eab992a4b9abp-10, -0x1.980b92ff814ccp-15, -0x1.761c29381edd3p-19, 0x1.64e7e2ec4af2dp-25, 0x1.1823b743e4c41p-35, -0x1.623923d3ddbafp-44, 0x1.6290fa803758ep-63, 0x0p+0}; - } - if constexpr (order == 7) { - return {0x0p+0, 0x1.891443770e9f6p+2, -0x1.c4b28f7dbecf4p+5, 0x1.d994c46f08418p+7, -0x1.26defe09eb9e3p+9, 0x1.ddf577c4250f8p+9, -0x1.fd2079b0f3ddbp+9, 0x1.36152a2e286dp+9, 0x1.d8616a51db369p+6, -0x1.190b42892374cp+10, 0x1.36219b3961795p+11, -0x1.eed74001662f8p+11, 0x1.31c149450a5eap+12, -0x1.31807a4d8f7d9p+12, 0x1.07e37f0875c29p+12, -0x1.9ca0e06fa4e41p+11, 0x1.192392a49659fp+11, -0x1.28f7ef65a911cp+10, 0x1.8ef1182eeb70cp+8, -0x1.076216da5c43bp+5, -0x1.3734a9c9c5015p+5, 0x1.2e313dce4fbf1p+4, -0x1.913ecda1e3437p+1, -0x1.aba4e0591b35fp-4, 0x1.5578ca229685fp-4, -0x1.f3ff47839e58dp-9, -0x1.bd3a12076a4f5p-13, 0x1.29ffe91412a2ap-18, 0x1.5e7711914b059p-28, -0x1.267e3f1ece052p-36, 0x1.26c8d9be624c4p-54, 0x0p+0}; - } - if constexpr (order == 8) { - return {0x0p+0, 0x1.1c06072fbf26fp+3, -0x1.65d998749f19fp+6, 0x1.9d8978b96f57fp+8, -0x1.24c8d76a7f36dp+10, 0x1.21d479bc00698p+11, -0x1.bbc006c939353p+11, 0x1.2211c4425df9cp+12, -0x1.5c64ff1d8bf67p+12, 0x1.845a35a315834p+12, -0x1.87e6df0fbf8efp+12, 0x1.6504110de640cp+12, -0x1.2b9aa02be2b35p+12, 0x1.cebcfb329a57fp+11, -0x1.3e375c669dacp+11, 0x1.7d70c67fe8974p+10, -0x1.8fd6874952e8bp+9, 0x1.57b6f4096f1cfp+8, -0x1.3e2c004c73161p+6, -0x1.f1e0f66437532p+4, 0x1.39f676c722756p+5, -0x1.07f7de36ead71p+4, 0x1.6eaf02b444bc5p+1, 0x1.f8896c7b27aebp-4, -0x1.b78e4a3636f78p-4, 0x1.faf293c65fc89p-8, 0x1.a6b604defe6a9p-12, -0x1.9886be2865e4cp-17, -0x1.7c0bde2d4dd5p-26, 0x1.90aca39ea2e8bp-34, -0x1.91166efa6d0a9p-51, -0x0p+0}; - } - if constexpr (order == 9) { - return {0x0p+0, 0x1.58e7df673241ap+3, -0x1.c53a29616fa38p+6, 0x1.0cc18d57a1a2p+9, -0x1.7c92fc1b6ca39p+10, 0x1.6a1945d20b68ep+11, -0x1.fab771c0e1bafp+11, 0x1.254298acbb2d4p+12, -0x1.407f9dc95f9b1p+12, 0x1.53233c63dd8a8p+12, -0x1.3b528b3453998p+12, 0x1.e2ea2797d25e5p+11, -0x1.3d6169dd11c9cp+11, 0x1.75fce5d641404p+10, -0x1.2b5b50127f9f5p+9, -0x1.18e0518b142ecp+7, 0x1.ed1ee257a974bp+8, -0x1.f5a5a8d8a9b3cp+8, 0x1.920c943e9e1a2p+8, -0x1.22c1385412c46p+8, 0x1.4b1ba13f6628bp+7, -0x1.ec876f34dee07p+5, 0x1.641261f15a2bcp+3, 0x1.3bac7fcb6882p-1, -0x1.3ae0db5ff49e1p-1, 0x1.0ba445bef297cp-4, 0x1.c3804abda5b0fp-9, -0x1.3c78fba89f7e5p-13, -0x1.6e90a45b17e12p-22, 0x1.34c398a5dd485p-29, -0x1.351bbccd566d6p-45, -0x0p+0}; - } - if constexpr (order == 10) { - return {0x0p+0, 0x1.0cfd9304e9d0fp+3, -0x1.68c00ea69764dp+6, 0x1.b4a63a85c6a12p+8, -0x1.3c4fcf304828fp+10, 0x1.35efe9ab816f7p+11, -0x1.c3872b5b6dcd2p+11, 0x1.1261ac83f506cp+12, -0x1.39e1fa3f00834p+12, 0x1.5e4c9d364466fp+12, -0x1.6b72e41a84906p+12, 0x1.578fd4c404249p+12, -0x1.30faf3648505dp+12, 0x1.0174ad7c89821p+12, -0x1.942bc49f2f52ap+11, 0x1.25cbc7992fd64p+11, -0x1.914caac567631p+10, 0x1.f93f030387c4dp+9, -0x1.1b4f5dfc787bcp+9, 0x1.1df01b8a36a8bp+8, -0x1.048db6f3ab7c2p+7, 0x1.730bcb9c58bfcp+5, -0x1.09b56b87c1c8p+3, -0x1.4fb833b30fa7fp+0, 0x1.e38e1048601a6p-1, -0x1.ee07e572041f7p-4, -0x1.913ced3c0164bp-8, 0x1.0726b83c4032cp-11, 0x1.2751c6763466cp-20, -0x1.00ceb77e39cacp-26, 0x1.0123085a89101p-41, 0x0p+0}; - } - if constexpr (order == 11) { - return {0x0p+0, 0x1.6ddd33f198eb4p+2, -0x1.ef9ef6f596ce4p+5, 0x1.2bec86422c73p+8, -0x1.ab3138ae63b3cp+9, 0x1.90171accf1ae9p+10, -0x1.0b8279e6381aap+11, 0x1.21c7cbc3a51f5p+11, -0x1.3291c6bd3630dp+11, 0x1.52187d4f27825p+11, -0x1.5764b21031afp+11, 0x1.2d82b77758b7bp+11, -0x1.efcf6fd97e751p+10, 0x1.96b834131566ep+10, -0x1.34d67cf0a39aep+10, 0x1.9aafba6f0ff86p+9, -0x1.002f1ef9723b2p+9, 0x1.378956144d5bep+8, -0x1.48f6827b3eeb5p+7, 0x1.17de886be7cb4p+6, -0x1.abd1c377daaf4p+4, 0x1.18836fa0aedf1p+3, -0x1.72b11631904f7p-2, -0x1.93c736e0c44c1p+0, 0x1.74105b4ecfea7p-1, -0x1.a9382883de208p-4, -0x1.8ee02bc822713p-9, 0x1.b89c5ecf7a7b7p-11, 0x1.5051009d42a45p-19, -0x1.a9ba33acc416cp-25, 0x1.aa6a7d0ba8103p-39, -0x0p+0}; - } - if constexpr (order == 12) { - return {0x0p+0, 0x1.7e688b7526a77p+1, -0x1.044f66dd0bb35p+5, 0x1.39d2780b0ad2fp+7, -0x1.b63bb8898df09p+8, 0x1.86b367123a214p+9, -0x1.d8001c1817ddfp+9, 0x1.b397f071da311p+9, -0x1.9ca191acc971ep+9, 0x1.d28d7edb2db09p+9, -0x1.daeab5bf793f1p+9, 0x1.738e37d47cc22p+9, -0x1.0785a3e74df5ap+9, 0x1.a556a97ba7348p+8, -0x1.320671c41025dp+8, 0x1.33661041ead75p+7, -0x1.d86506577d508p+5, 0x1.9ebe065723855p+4, -0x1.ec9ee90429332p-1, -0x1.1034340999c87p+4, 0x1.04d7524f6aap+4, -0x1.2fcc89fd04e89p+3, 0x1.7c24bc012bffcp+2, -0x1.c84c145900f78p+1, 0x1.57bccbd9e4fcfp+0, -0x1.d81daf1af068dp-3, -0x1.20f9f72def1dfp-13, 0x1.c2f2ad7e016f5p-9, 0x1.baf6705e59cacp-17, -0x1.ae94eeab2dbd5p-22, 0x1.af91281d99389p-35, 0x0p+0}; - } - if constexpr (order == 13) { - return {0x0p+0, 0x1.a308ef1d16805p-1, -0x1.1df37cb20ef6dp+3, 0x1.5a47cc2daffcbp+5, -0x1.e7cc32d4c7f06p+6, 0x1.ba5aa6f58d154p+7, -0x1.137ebe2556bb6p+8, 0x1.07f96c27b79bap+8, -0x1.f176d6c3151d9p+7, 0x1.0c09a0e0bcbap+8, -0x1.12bf0f34a9a55p+8, 0x1.de16d55d65d2cp+7, -0x1.8c7b496d3d3fep+7, 0x1.56592506626bcp+7, -0x1.13d919c9693b3p+7, 0x1.8b69de5718a0ap+6, -0x1.15b78c90e7837p+6, 0x1.8188b8db550ffp+5, -0x1.e03c011f666acp+4, 0x1.12ed8b36e9864p+4, -0x1.36a5b057bc26fp+3, 0x1.3d2641cf67e9p+2, -0x1.11ef148707dfap+1, 0x1.c294da23fe2ap-1, -0x1.4f57e7e05e819p-2, 0x1.1ebd9964081cfp-4, 0x1.367917f76eee3p-14, -0x1.fdd37749c94d9p-10, -0x1.0fc0733cbc7d6p-22, 0x1.f945fb653cfdbp-22, -0x1.fb1bcfae6e46dp-34, 0x0p+0}; - } - if constexpr (order == 14) { - return {0x0p+0, 0x1.74ef139ad4e12p-3, -0x1.fd9d32fdef74p+0, 0x1.3320f17be8b7p+3, -0x1.a9e31dbd98dd1p+4, 0x1.73dbdd38a87f5p+5, -0x1.aa50f206f25c7p+5, 0x1.5e48ac9c2f1f2p+5, -0x1.20d7a78e95ecfp+5, 0x1.4350b94e5aa2ep+5, -0x1.5499ff05228dep+5, 0x1.0d8c7214ffee1p+5, -0x1.8fe88996cfa9ap+4, 0x1.63da6bffb7323p+4, -0x1.24223f5c1b9d9p+4, 0x1.7851e19176716p+3, -0x1.e4fd178fcd0efp+2, 0x1.610a439acb289p+2, -0x1.ae4c3e147b71cp+1, 0x1.a6fe28ab7ffaap+0, -0x1.ccc920f98175ep-1, 0x1.f9389387bff6bp-2, -0x1.8612de961fd02p-3, 0x1.fd43fc0e7883fp-5, -0x1.aafa1e0c4a87p-6, 0x1.b638737fa8e8fp-8, 0x1.071682a1f5058p-11, -0x1.a84c3f530239bp-12, 0x1.a20c2374a0f67p-18, 0x1.e7f1c0adda0f6p-23, -0x1.eb089a4058efep-34, -0x0p+0}; - } - if constexpr (order == 15) { - return {0x0p+0, 0x1.31c729360063ep-6, -0x1.a21aa8a66a683p-3, 0x1.f656a46fa2a91p-1, -0x1.589b4fca92a9fp+1, 0x1.25049558932c2p+2, -0x1.3b0f087615a27p+2, 0x1.bed87f332745cp+1, -0x1.37fe75fa2aa3bp+1, 0x1.75c34ae38a12p+1, -0x1.9f32b219f201fp+1, 0x1.2a50b5ebe798ep+1, -0x1.80aff2523d4b3p+0, 0x1.71f9af43c19f1p+0, -0x1.40d21595459ccp+0, 0x1.6edc3b8de7cbdp-1, -0x1.abb5cf29e076bp-2, 0x1.5fdcb9c5e1f88p-2, -0x1.af4e9b9242255p-3, 0x1.57b33e4d63cb5p-4, -0x1.736294d370decp-5, 0x1.e1a61d7964669p-6, -0x1.38138139d6cd8p-7, 0x1.a99b874715d59p-10, -0x1.191ada841d112p-10, 0x1.44a23a1750afbp-12, 0x1.4db128e094988p-13, -0x1.2cad37f3dbf9ep-14, 0x1.f38c667f69482p-19, 0x1.c870773604d03p-24, -0x1.cdd01a024c711p-34, -0x0p+0}; - } - } - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0L, 0xb.3a3846107e93c71p-16L, 0x9.3e6d9853c4d4d26p-8L, 0xf.9fcd2109d2c70bp-5L, 0xc.50d8731f3b477fep-4L, -0xe.800409a73d92674p-5L, 0x8.364c0bfb08f4c1cp-5L, -0xa.7608480379d5af6p-6L, 0xd.c9e1911927a4784p-7L, -0x8.4fafa041f14b7dbp-7L, 0x8.5b53aefd12e6ae9p-8L, -0xd.0bf5c01ffba2e16p-10L, 0xe.6d0c69fb315533p-12L, -0x8.c0ab49d8f284eep-14L, -0xa.a3e26aabf73f753p-18L, 0xd.0ea8c3bcb0cd49bp-18L, -0xf.dc862acd1a0536cp-20L, 0x8.42dddac61ee2f0bp-22L, 0xa.50b750c53c5492bp-25L, -0x9.d87c1e77be4e6b7p-26L, 0xa.134a86cdb5e53d1p-31L, 0xd.67ae641bc3e3b4bp-32L, 0xe.3efe0e5e6ab002dp-40L, -0xc.cd24c38a13a8934p-40L, 0x8.62a7b6ddea955d3p-45L, 0xb.05b10aa4250e4b5p-52L, -0xb.1b0384fcfca5df4p-57L, 0xf.98453c9a684c9f5p-65L, -0xe.e6c1e66bda07395p-77L, -0xf.a640e8482ad4089p-90L, 0xf.aa0d3dd7d200c8bp-115L, -0x0p+0L}; - } - if constexpr (order == 1) { - return {0x0p+0L, 0xa.f15f1ffe0172e5bp-13L, 0x8.8aacb719a8764e8p-6L, 0xc.70337610fe3509fp-4L, -0xc.d1d74d153495bebp-4L, -0xd.a74119cbe7c3dc1p-5L, 0x9.26bcdd7c845def1p-4L, -0xc.b7f844c8550ff96p-5L, 0xb.e7f83cc2cea254cp-6L, -0x9.d97b7de092f7fa8p-8L, -0xc.621cb12d798fd78p-9L, 0xe.c17b081c7070057p-9L, -0xe.984243655303eaap-10L, 0xd.c65378f292ec7e1p-12L, 0xa.751369469843a67p-16L, -0xa.22a84a59f7d64eap-15L, 0x8.8b7da84ad94ceep-18L, 0xf.37a3482ba1e794ep-19L, -0xb.99225ab2889ca73p-20L, 0x8.82f186bf65a2e47p-23L, 0xc.2f72cc72e3b957cp-26L, -0xa.d64f8e3b5739183p-28L, 0xe.bc4f9eb81d6e738p-33L, 0xc.6af1f10013f432fp-38L, -0xe.459c19e1dbb49cp-40L, 0x9.c7f205ccc827418p-46L, 0xf.a9268cec210502dp-52L, -0xd.39dbeaf2abf3a86p-60L, -0xe.29902305dd00cf8p-71L, 0xd.29aa6f4daf25f05p-84L, -0xd.2cdc8c67843fbf1p-108L, -0x0p+0L}; - } - if constexpr (order == 2) { - return {0x0p+0L, 0x9.4af7f560a96bcb2p-10L, 0xc.eb0e623f2ef1314p-5L, 0x8.b0ea0b5b3b1bf47p-5L, -0xa.dbd22b319bb54d5p-2L, 0xe.88ba684f6e872d5p-2L, -0xb.27ea9053310cf1ap-2L, 0x8.28b46d4b2423017p-2L, -0xb.2ba844e22c3642p-3L, 0xd.1c5f85a9fa1b98bp-4L, -0xc.44d8b76ba978ba9p-5L, 0x8.a963b5c62d530fcp-6L, -0x8.da64cc3b6900f46p-8L, 0xc.83f8f45a13145ecp-11L, -0xa.458a9102e93f63ap-16L, -0xd.193b6a58da0f707p-14L, 0x8.c8045595d6873c2p-14L, -0xa.50797e1d1ff33a2p-16L, 0xd.8b6c298de6cba8p-20L, 0x9.e4de48cf0724d64p-22L, 0xc.4c92a6ba0c8c4adp-27L, -0xf.001d6ffa3353439p-27L, -0xd.88c7c33e6b26e41p-30L, 0xd.4740e7cd95fa76bp-33L, 0xa.39023ea674090bcp-39L, 0x8.5e2a378903582b6p-44L, -0xa.dbc3bc7640960d4p-50L, -0xb.ae2bb9813575fa4p-56L, -0xa.228707fbc919e5bp-67L, 0xb.a31cd9a74b94ec4p-79L, -0xb.a5f0a4105eaa2e2p-102L, 0x0p+0L}; - } - if constexpr (order == 3) { - return {0x0p+0L, 0xd.6f0633d36fb15fep-8L, 0xe.145a1853af94c61p-4L, -0xa.fa667dd213e750bp-2L, 0xe.6dc7b03ef3972cbp-3L, 0xf.bbba18cb32bd3c5p-3L, -0xe.ec3cdd404933d4fp-2L, 0x9.b829e085e714688p-2L, -0x8.dfd3b6054a1d126p-5L, -0x9.5a81a62f3e7613dp-3L, 0xb.1f11305d54fef5bp-3L, -0xd.14c89d060796ef7p-4L, 0xc.29433e46759ad44p-6L, 0xc.d4b327e4f33c651p-7L, -0xe.14fbc716f47a93ep-7L, 0xa.a6b1a222fe7b777p-8L, -0xa.0d952d2a5331434p-12L, -0x9.12ecff62e374622p-11L, 0xf.c80ccba53eedb19p-13L, -0x9.6141b8a10bf3aa6p-15L, -0xc.743a15ddfd9089p-19L, 0xe.4fac6316eae9c34p-20L, -0xb.0fb24af68dc7671p-23L, -0xc.b5c587c50af1901p-28L, 0xb.8fa464ce81856ffp-30L, -0xd.afe46b355b67eadp-37L, -0xe.2cb1f71139e968ap-41L, 0xb.5a73672924054c6p-48L, 0xf.3389afa15a4d6d7p-61L, -0xb.57fa0536eada04ep-70L, 0xb.5abc8738a6ec098p-92L, 0x0p+0L}; - } - if constexpr (order == 4) { - return {0x0p+0L, 0x8.014198cc101dfabp-5L, 0xb.a78a2fa8c05a46p-4L, -0xe.a0391633dc59632p-1L, 0x9.57b787a325e2b8ep+1L, -0xd.2189a8a2bccd13fp+1L, 0xc.d0ad7020938821dp+1L, -0x9.c68dea4f4d7949p+1L, 0xb.6366d8a6bff083fp+0L, -0x8.9b0cd5508cfcbdap-1L, 0xe.ab670f643a5062fp-4L, -0xf.21483d73d132347p-4L, 0xf.29488fcfb2b3205p-3L, -0xf.711277c7589ea5dp-3L, 0x8.f936b111ea265a4p-3L, -0xa.c4421afabc1b145p-5L, -0xc.f22fe2737be4b07p-10L, 0xe.e696975fdb72006p-8L, -0xc.988b5e0d635b9p-9L, 0x8.700bc1f1a15234ap-11L, 0x9.8f9fd5486f4f6f1p-15L, -0xf.b586fbbd2a200d7p-16L, 0xf.8283bd0161d5d44p-19L, 0x9.762dce912735e76p-23L, -0xa.3f95875b476d467p-25L, 0xd.e5810dfc41d0fc9p-32L, 0x8.de77eb67dd2905dp-35L, -0x9.a6cbd6e2951c534p-42L, -0xb.796464e51ca7defp-56L, 0x9.a721ec929f3744cp-63L, -0x9.a97cc78797246d9p-84L, -0x0p+0L}; - } - if constexpr (order == 5) { - return {0x0p+0L, 0xf.2ec58ae9b326a91p-4L, -0xf.3f2574189e4c21p-2L, 0xb.21ca3fab0ba7711p-2L, 0xc.5fbbb983127d9a8p+0L, -0x9.cabafe7cb0e079fp+2L, 0xf.b32be6b63f14cdcp+2L, -0x9.4c0d5533651b59dp+3L, 0x8.6798003cb446c2fp+3L, -0xb.8a9466ce5589bd2p+1L, -0x8.9b2c413204da0b9p+3L, 0xa.f6789af19b5be1p+4L, -0xe.547dec3aa6e0c9p+4L, 0xc.1d4b2ac6360394ap+4L, -0xc.ec88c1703c353c7p+3L, 0xc.0c7ae502f811c1cp+1L, 0xa.73c1664ca04a6f6p+0L, -0xb.fdd39a51bbcb87p+0L, 0x9.b0ebec135dad9dap-1L, -0xc.2ff74183eac8757p-4L, -0xf.e61902b12672b5fp-7L, 0x9.86aa5c308a25804p-7L, -0xa.11b63e66316fb48p-10L, -0xb.5b6a5e6044f76b4p-15L, 0x9.28e5bad3bd32814p-16L, -0xb.efb13ed9f69bfabp-22L, -0xb.6bdd018cd0bfce3p-26L, 0x8.239a85c21ab28b1p-32L, 0xf.655e87c2be28938p-44L, -0x8.1af78458939ea43p-52L, 0x8.1cf48073fd095efp-72L, 0x0p+0L}; - } - if constexpr (order == 6) { - return {0x0p+0L, 0xa.e21ada4ca34ca18p-2L, -0xa.2d6c4039f3128bdp+1L, 0x8.d6321f4e4cfc7p+3L, -0x9.de69270e1178454p+4L, 0x8.8995f56b287327p+5L, -0xd.1990b03f1acb0aep+5L, 0x9.5f626739da926f4p+6L, -0xc.1eeea1125cd5fdbp+6L, 0xd.8d6a120ec35f6eap+6L, -0xc.ebd190c0b85945bp+6L, 0xa.a937c3f410a79b7p+6L, -0xf.4cb42bf5e9fec33p+5L, 0x8.c354d12799c3f3ap+5L, -0xa.7c027bb5b6adc35p+3L, -0xc.24aa7e0c10803ep+2L, 0xa.cf7d08e97637cb2p+3L, -0xe.d63d69d99e4aebp+2L, 0xb.103c3cb1b9f39dbp+1L, -0xc.45d811f4f97cc5dp-2L, -0x8.25c8b0134dc4eacp-3L, 0x8.c634c1565e9668ap-4L, -0xa.846ee4e9e65a1e2p-7L, -0xa.9c9c370a0ae7abcp-12L, 0xc.f55cc9525cd59bdp-13L, -0xc.c05c97fc0a662abp-18L, -0xb.b0e149c0f6e94f3p-22L, 0xb.273f17625796a99p-28L, 0x8.c11dba1f262097fp-38L, -0xb.11c91e9eedd7769p-47L, 0xb.1487d401bac7208p-66L, 0x0p+0L}; - } - if constexpr (order == 7) { - return {0x0p+0L, 0xc.48a21bb874fadacp-1L, -0xe.25947bedf679c74p+2L, 0xe.cca62378420be4ep+4L, -0x9.36f7f04f5cf1891p+6L, 0xe.efabbe21287bc6p+6L, -0xf.e903cd879eed94cp+6L, 0x9.b0a951714367f56p+6L, 0xe.c30b528ed9b461fp+3L, -0x8.c85a14491ba6385p+7L, 0x9.b10cd9cb0bcab3ep+8L, -0xf.76ba000b317bf3bp+8L, 0x9.8e0a4a2852f4c19p+9L, -0x9.8c03d26c7bec5cfp+9L, 0x8.3f1bf843ae145d5p+9L, -0xc.e507037d2720736p+8L, 0x8.c91c9524b2cfadfp+8L, -0x9.47bf7b2d488e112p+7L, 0xc.7788c1775b861dcp+5L, -0x8.3b10b6d2e21d939p+2L, -0x9.b9a54e4e280a5b6p+2L, 0x9.7189ee727df88e1p+1L, -0xc.89f66d0f1a1b57cp-2L, -0xd.5d2702c8d9af7bcp-7L, 0xa.abc65114b42fbafp-7L, -0xf.9ffa3c1cf2c6819p-12L, -0xd.e9d0903b527a85p-16L, 0x9.4fff48a09514e9bp-21L, 0xa.f3b88c8a582c5bap-31L, -0x9.33f1f8f67028c1p-39L, 0x9.3646cdf31261e85p-57L, 0x0p+0L}; - } - if constexpr (order == 8) { - return {0x0p+0L, 0x8.e030397df9379acp+0L, -0xb.2eccc3a4f8cf9fbp+3L, 0xc.ec4bc5cb7abf8aap+5L, -0x9.2646bb53f9b6b84p+7L, 0x9.0ea3cde0034bd8ap+8L, -0xd.de003649c9a9964p+8L, 0x9.108e2212efce172p+9L, -0xa.e327f8ec5fb3bd6p+9L, 0xc.22d1ad18ac1a3e5p+9L, -0xc.3f36f87dfc77a18p+9L, 0xb.2820886f3206234p+9L, -0x9.5cd5015f159aa05p+9L, 0xe.75e7d994d2bf56ep+8L, -0x9.f1bae334ed5fea7p+8L, 0xb.eb8633ff44b9f04p+7L, -0xc.7eb43a4a9745482p+6L, 0xa.bdb7a04b78e780bp+5L, -0x9.f160026398b080cp+3L, -0xf.8f07b321ba98ffdp+1L, 0x9.cfb3b63913ab26dp+2L, -0x8.3fbef1b756b8bfp+1L, 0xb.757815a225e2672p-2L, 0xf.c44b63d93d7545p-7L, -0xd.bc7251b1b7bbe9bp-7L, 0xf.d7949e32fe445dap-11L, 0xd.35b026f7f354a7ap-15L, -0xc.c435f1432f26328p-20L, -0xb.e05ef16a6ea832dp-29L, 0xc.85651cf5174561cp-37L, -0xc.88b377d3685495ep-54L, -0x0p+0L}; - } - if constexpr (order == 9) { - return {0x0p+0L, 0xa.c73efb39920cedbp+0L, -0xe.29d14b0b7d1c041p+3L, 0x8.660c6abd0d0fda4p+6L, -0xb.e497e0db651c4abp+7L, 0xb.50ca2e905b46c5dp+8L, -0xf.d5bb8e070dd7927p+8L, 0x9.2a14c565d96a24dp+9L, -0xa.03fcee4afcd8902p+9L, 0xa.9919e31eec53f8cp+9L, -0x9.da9459a29ccbc9bp+9L, 0xf.17513cbe92f2a28p+8L, -0x9.eb0b4ee88e4de52p+8L, 0xb.afe72eb20a022bp+7L, -0x9.5ada8093fcfab6ap+6L, -0x8.c7028c58a1762e5p+4L, 0xf.68f712bd4ba559bp+5L, -0xf.ad2d46c54d9e03ap+5L, 0xc.9064a1f4f0d1331p+5L, -0x9.1609c2a09622ff8p+5L, 0xa.58dd09fb31458efp+4L, -0xf.643b79a6f703a82p+2L, 0xb.20930f8ad15e1ebp+0L, 0x9.dd63fe5b440fe97p-4L, -0x9.d706daffa4f07edp-4L, 0x8.5d222df794bdd1ep-7L, 0xe.1c0255ed2d877d5p-12L, -0x9.e3c7dd44fbf26e9p-16L, -0xb.748522d8bf08c1ap-25L, 0x9.a61cc52eea42bddp-32L, -0x9.a8dde66ab36adabp-48L, -0x0p+0L}; - } - if constexpr (order == 10) { - return {0x0p+0L, 0x8.67ec98274e874f4p+0L, -0xb.46007534bb26601p+3L, 0xd.a531d42e35090ebp+5L, -0x9.e27e798241476f8p+7L, 0x9.af7f4d5c0b7b569p+8L, -0xe.1c395adb6e69289p+8L, 0x8.930d641fa835ff8p+9L, -0x9.cf0fd1f80419d17p+9L, 0xa.f264e9b223377bap+9L, -0xb.5b9720d42482e67p+9L, 0xa.bc7ea62021246d6p+9L, -0x9.87d79b24282e6fbp+9L, 0x8.0ba56be44c10be5p+9L, -0xc.a15e24f97a95118p+8L, 0x9.2e5e3cc97eb1e7ap+8L, -0xc.8a65562b3b184f6p+7L, 0xf.c9f8181c3e2680dp+6L, -0x8.da7aefe3c3dde19p+6L, 0x8.ef80dc51b545874p+5L, -0x8.246db79d5be0e64p+4L, 0xb.985e5ce2c5fe107p+2L, -0x8.4dab5c3e0e3fdbep+0L, -0xa.7dc19d987d3f778p-3L, 0xf.1c70824300d3066p-4L, -0xf.703f2b9020fb9c6p-7L, -0xc.89e769e00b25ab7p-11L, 0x8.3935c1e20195fc1p-14L, 0x9.3a8e33b1a335de3p-23L, -0x8.0675bbf1ce55e11p-29L, 0x8.091842d44880a98p-44L, 0x0p+0L}; - } - if constexpr (order == 11) { - return {0x0p+0L, 0xb.6ee99f8cc759e4bp-1L, -0xf.7cf7b7acb67220ap+2L, 0x9.5f6432116397da5p+5L, -0xd.5989c5731d9e0f1p+6L, 0xc.80b8d6678d74968p+7L, -0x8.5c13cf31c0d515cp+8L, 0x9.0e3e5e1d28fa819p+8L, -0x9.948e35e9b18657fp+8L, 0xa.90c3ea793c12aedp+8L, -0xa.bb2590818d7801fp+8L, 0x9.6c15bbbac5bd569p+8L, -0xf.7e7b7ecbf3a84e5p+7L, 0xc.b5c1a098ab36e4fp+7L, -0x9.a6b3e7851cd6ca3p+7L, 0xc.d57dd3787fc2f5fp+6L, -0x8.0178f7cb91d933p+6L, 0x9.bc4ab0a26adf067p+5L, -0xa.47b413d9f75a975p+4L, 0x8.bef4435f3e59d64p+3L, -0xd.5e8e1bbed57a092p+1L, 0x8.c41b7d0576f88b8p+0L, -0xb.9588b18c827b5eap-5L, -0xc.9e39b70622606d2p-3L, 0xb.a082da767f5360bp-4L, -0xd.49c1441ef103d27p-7L, -0xc.77015e41138988ap-12L, 0xd.c4e2f67bd3dbb98p-14L, 0xa.828804ea1522a4ep-22L, -0xd.4dd19d6620b5d5fp-28L, 0xd.5353e85d40818dap-42L, -0x0p+0L}; - } - if constexpr (order == 12) { - return {0x0p+0L, 0xb.f3445ba9353ba5cp-2L, -0x8.227b36e85d9aaf5p+2L, 0x9.ce93c0585697ae1p+4L, -0xd.b1ddc44c6f84b46p+5L, 0xc.359b3891d109cd3p+6L, -0xe.c000e0c0beef91cp+6L, 0xd.9cbf838ed188ae1p+6L, -0xc.e50c8d664b8f00fp+6L, 0xe.946bf6d96d84894p+6L, -0xe.d755adfbc9f852fp+6L, 0xb.9c71bea3e610ea4p+6L, -0x8.3c2d1f3a6face9p+6L, 0xd.2ab54bdd39a4207p+5L, -0x9.90338e20812e975p+5L, 0x9.9b30820f56ba5f5p+4L, -0xe.c32832bbea8400dp+2L, 0xc.f5f032b91c2a8d1p+1L, -0xf.64f748214999222p-4L, -0x8.81a1a04cce4348p+1L, 0x8.26ba927b54fff92p+1L, -0x9.7e644fe827446adp+0L, 0xb.e125e0095ffe3e9p-1L, -0xe.4260a2c807bbd9ap-2L, 0xa.bde65ecf27e7508p-3L, -0xe.c0ed78d78346885p-6L, -0x9.07cfb96f78ef479p-16L, 0xe.17956bf00b7a939p-12L, 0xd.d7b382f2ce56194p-20L, -0xd.74a775596dea6ap-25L, 0xd.7c8940ecc9c488dp-38L, 0x0p+0L}; - } - if constexpr (order == 13) { - return {0x0p+0L, 0xd.184778e8b402badp-4L, -0x8.ef9be59077b66a9p+0L, 0xa.d23e616d7fe5968p+2L, -0xf.3e6196a63f82e61p+3L, 0xd.d2d537ac68aa3c8p+4L, -0x8.9bf5f12ab5dae19p+5L, 0x8.3fcb613dbcdd0e4p+5L, -0xf.8bb6b618a8ec653p+4L, 0x8.604d0705e5cffc7p+5L, -0x8.95f879a54d2a806p+5L, 0xe.f0b6aaeb2e95db1p+4L, -0xc.63da4b69e9fec14p+4L, 0xa.b2c92833135e147p+4L, -0x8.9ec8ce4b49d9743p+4L, 0xc.5b4ef2b8c504f17p+3L, -0x8.adbc64873c1b94ap+3L, 0xc.0c45c6daa87f51cp+2L, -0xf.01e008fb335633p+1L, 0x8.976c59b74c322cp+1L, -0x9.b52d82bde13767bp+0L, 0x9.e9320e7b3f47defp-1L, -0x8.8f78a4383efd09p-2L, 0xe.14a6d11ff14fe9cp-4L, -0xa.7abf3f02f40c74p-5L, 0x8.f5eccb2040e7b75p-7L, 0x9.b3c8bfbb7771784p-17L, -0xf.ee9bba4e4a6c8ddp-13L, -0x8.7e0399e5e3eb2bep-25L, 0xf.ca2fdb29e7ed48cp-25L, -0xf.d8de7d73723689ep-37L, 0x0p+0L}; - } - if constexpr (order == 14) { - return {0x0p+0L, 0xb.a7789cd6a708f8p-6L, -0xf.ece997ef7b9fe29p-3L, 0x9.99078bdf45b839ap+0L, -0xd.4f18edecc6e84b2p+1L, 0xb.9edee9c543fa832p+2L, -0xd.5287903792e3955p+2L, 0xa.f24564e178f8f8p+2L, -0x9.06bd3c74af67abfp+2L, 0xa.1a85ca72d516d28p+2L, -0xa.a4cff829146ee94p+2L, 0x8.6c6390a7ff70509p+2L, -0xc.7f444cb67d4d2a9p+1L, 0xb.1ed35ffdb991773p+1L, -0x9.2111fae0dceca83p+1L, 0xb.c28f0c8bb38af61p+0L, -0xf.27e8bc7e687797cp-1L, 0xb.08521cd65944bcep-1L, -0xd.7261f0a3db8e14ap-2L, 0xd.37f1455bffd4c88p-3L, -0xe.664907cc0baeeacp-4L, 0xf.c9c49c3dffb59aap-5L, -0xc.3096f4b0fe81145p-6L, 0xf.ea1fe073c41f722p-8L, -0xd.57d0f0625437c47p-9L, 0xd.b1c39bfd474775fp-11L, 0x8.38b4150fa82bf11p-14L, -0xd.4261fa9811cdb2p-15L, 0xd.10611ba507b38p-21L, 0xf.3f8e056ed07b157p-26L, -0xf.5844d202c77f32cp-37L, -0x0p+0L}; - } - if constexpr (order == 15) { - return {0x0p+0L, 0x9.8e3949b0031f00ap-9L, -0xd.10d5453353419edp-6L, 0xf.b2b5237d1548b4fp-4L, -0xa.c4da7e54954f883p-2L, 0x9.2824aac49960d3ep-1L, -0x9.d87843b0ad13405p-1L, 0xd.f6c3f9993a2dfbdp-2L, -0x9.bff3afd1551db4ap-2L, 0xb.ae1a571c508fe19p-2L, -0xc.f99590cf900f84fp-2L, 0x9.5285af5f3cc721cp-2L, -0xc.057f9291ea599a1p-3L, 0xb.8fcd7a1e0cf84a9p-3L, -0xa.0690acaa2ce5ec5p-3L, 0xb.76e1dc6f3e5e678p-4L, -0xd.5dae794f03b58fap-5L, 0xa.fee5ce2f0fc3e14p-5L, -0xd.7a74dc92112ab1p-6L, 0xa.bd99f26b1e5a94cp-7L, -0xb.9b14a69b86f63cfp-8L, 0xf.0d30ebcb2334763p-9L, -0x9.c09c09ceb66c13bp-10L, 0xd.4cdc3a38aeac8ap-13L, -0x8.c8d6d420e888ec5p-13L, 0xa.2511d0ba857d42dp-15L, 0xa.6d894704a4c3cb1p-16L, -0x9.6569bf9edfcf3d1p-17L, 0xf.9c6333fb4a41095p-22L, 0xe.4383b9b026817b9p-27L, -0xe.6e80d0126388779p-37L, -0x0p+0L}; - } - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {0x0p+0Q, 0x1.674708c20fd278e13cb308fbf6b6p-13Q, 0x1.27cdb30a789a9a4cba57381b80dfp-5Q, 0x1.f3f9a4213a58e15fea805c6fce03p-2Q, 0x1.8a1b0e63e768effc8742d136ac6ep-1Q, -0x1.d0008134e7b24ce7a0bdb2d5e177p-2Q, 0x1.06c9817f611e98379b152a389fafp-2Q, -0x1.4ec109006f3ab5eb9ef4b4145d24p-3Q, 0x1.b93c322324f48f0734b615fc9893p-4Q, -0x1.09f5f4083e296fb6c1df50020f51p-4Q, 0x1.0b6a75dfa25cd5d117e10197333bp-5Q, -0x1.a17eb803ff745c2b927f4b56bb55p-7Q, 0x1.cda18d3f662aa65f684ad290727fp-9Q, -0x1.1815693b1e509dbfebb4547eb7c2p-11Q, -0x1.547c4d557ee7eea60970ca463eb3p-15Q, 0x1.a1d518779619a935a6506c218d6ap-15Q, -0x1.fb90c559a340a6d74429771a650ap-17Q, 0x1.085bbb58c3dc5e159337591d11c5p-19Q, 0x1.4a16ea18a78a9255137a36b6eeb6p-22Q, -0x1.3b0f83cef7c9cd6e4992ef7a8e0ap-23Q, 0x1.426950d9b6bca7a253eba2c282ddp-28Q, 0x1.acf5cc83787c76964322f9b1343dp-29Q, 0x1.c7dfc1cbcd560059e1fa3bbb0da4p-37Q, -0x1.99a4987142751268f68b0c6ed2ep-37Q, 0x1.0c54f6dbbd52aba64c70d9892a56p-42Q, 0x1.60b6215484a1c96af7151c51425dp-49Q, -0x1.6360709f9f94bbe775bd0ffbeceep-54Q, 0x1.f308a7934d0993ea019328882821p-62Q, -0x1.dcd83ccd7b40e72afa7a2bb7cfap-74Q, -0x1.f4c81d09055a8112f9a8f0e29d58p-87Q, 0x1.f541a7bafa4019158f37f50aca47p-112Q, 0x0p+0Q}; - } - if constexpr (order == 1) { - return {0x0p+0Q, 0x1.5e2be3ffc02e5cb63d505e4d42d9p-10Q, 0x1.115596e3350ec9cfc7fd8b282c15p-3Q, 0x1.8e066ec21fc6a13efd57c0a1a8d5p-1Q, -0x1.9a3ae9a2a692b7d6fe0312f42fd2p-1Q, -0x1.b4e823397cf87b829664fcfb615p-2Q, 0x1.24d79baf908bbde12d97a94a7f11p-1Q, -0x1.96ff08990aa1ff2b3a6156b3a6f7p-2Q, 0x1.7cff079859d44a97134acb0b3815p-3Q, -0x1.3b2f6fbc125eff4f9e00971a8041p-5Q, -0x1.8c439625af31faef37a9ac49e57fp-6Q, 0x1.d82f61038e0e00ad9adf7940901dp-6Q, -0x1.d308486caa607d54998083598bc8p-7Q, 0x1.b8ca6f1e525d8fc1aecc191249d8p-9Q, 0x1.4ea26d28d30874cd6f1bece4d0cdp-13Q, -0x1.4455094b3efac9d3c28631c94fc4p-12Q, 0x1.116fb5095b299dc0400b6814e296p-15Q, 0x1.e6f46905743cf29b32a5a94efd0bp-16Q, -0x1.73244b56511394e5623a6c13b582p-17Q, 0x1.105e30d7ecb45c8d929e54615ad8p-20Q, 0x1.85ee598e5c772af7b4423f5e4908p-23Q, -0x1.5ac9f1c76ae72306c6963aa9eb6ap-25Q, 0x1.d789f3d703adce6fceeb7470ebe2p-30Q, 0x1.8d5e3e20027e865e92d2141a2b73p-35Q, -0x1.c8b3833c3b76938050c849f3c902p-37Q, 0x1.38fe40b99904e82fbd88d14cb331p-43Q, 0x1.f524d19d8420a05a730c8d14369dp-49Q, -0x1.a73b7d5e557e750b97979bfe8e3ep-57Q, -0x1.c5320460bba019effc9564690ea4p-68Q, 0x1.a5354de9b5e4be0a26cfffd8bdbp-81Q, -0x1.a59b918cf087f7e28a66eadc80bbp-105Q, 0x0p+0Q}; - } - if constexpr (order == 2) { - return {0x0p+0Q, 0x1.295efeac152d79633d42d6d916dap-7Q, 0x1.9d61cc47e5de2628b18136c91ea6p-2Q, 0x1.161d416b67637e8de5329814dbadp-2Q, -0x1.5b7a45663376a9aa5f95ed877064p+1Q, 0x1.d1174d09edd0e5a9b8dec824cf43p+1Q, -0x1.64fd520a66219e33ceb19171c931p+1Q, 0x1.05168da96484602e8bf4113ac4e7p+1Q, -0x1.6575089c4586c8407b43149ab11bp+0Q, 0x1.a38bf0b53f437316576c7b5f77a6p-1Q, -0x1.889b16ed752f17512574ee20842fp-2Q, 0x1.152c76b8c5aa61f7d1f86545cf96p-3Q, -0x1.1b4c99876d201e8bbadda8305eebp-5Q, 0x1.907f1e8b42628bd87c6dfaa42428p-8Q, -0x1.48b152205d27ec7322d3d940da05p-13Q, -0x1.a3276d4b1b41ee0d43115b5aa81dp-11Q, 0x1.19008ab2bad0e78321ce13187a8p-11Q, -0x1.4a0f2fc3a3fe6743d3250b9f0687p-13Q, 0x1.b16d8531bcd974ffcfcfb275888ap-17Q, 0x1.3c9bc919e0e49ac8c1ec9b7c72d7p-19Q, 0x1.899254d74191895a0ee7c7e368dfp-24Q, -0x1.e003adff466a6871b6189e153009p-24Q, -0x1.b118f867cd64dc8214de14f22a3dp-27Q, 0x1.a8e81cf9b2bf4ed6a7f80b7fee49p-30Q, 0x1.472047d4ce812177c28860710d42p-36Q, 0x1.0bc546f1206b056c51ef6c4e3c73p-41Q, -0x1.5b78778ec812c1a8126f0f855511p-47Q, -0x1.75c5773026aebf48665648526e47p-53Q, -0x1.4450e0ff79233cb66d7ae0406fdfp-64Q, 0x1.74639b34e9729d879c349c60a705p-76Q, -0x1.74be14820bd545c3f1e6ecce41eap-99Q, 0x0p+0Q}; - } - if constexpr (order == 3) { - return {0x0p+0Q, 0x1.ade0c67a6df62bfb0e80195f4993p-5Q, 0x1.c28b430a75f298c1d73bb81e4353p-1Q, -0x1.5f4ccfba427cea15c66f4a5c12bbp+1Q, 0x1.cdb8f607de72e596ea568a034c8fp+0Q, 0x1.f77743196657a78ad5bf74425543p+0Q, -0x1.dd879ba809267a9d7904ab437cc5p+1Q, 0x1.37053c10bce28d1022d31ac1246dp+1Q, -0x1.1bfa76c0a943a24b6df5bb2abebdp-2Q, -0x1.2b5034c5e7cec27aa44e7ea3a878p+0Q, 0x1.63e2260baa9fdeb5f048ba37a04bp+0Q, -0x1.a29913a0c0f2ddeebb2bd3c275b3p-1Q, 0x1.852867c8ceb35a88f788b40857cap-3Q, 0x1.9a9664fc9e678ca180654356c297p-4Q, -0x1.c29f78e2de8f527b7cd8a08d24efp-4Q, 0x1.54d634445fcf6eedbc5dccf04eadp-5Q, -0x1.41b2a5a54a66286808252915b865p-9Q, -0x1.225d9fec5c6e8c447caf2b42ced4p-8Q, 0x1.f9019974a7ddb631ebee782869d1p-10Q, -0x1.2c283714217e754b55528b628588p-12Q, -0x1.8e8742bbbfb2111f9226dbaea15fp-16Q, 0x1.c9f58c62dd5d38676514b49c9e2ep-17Q, -0x1.61f6495ed1b8ece209fc78f1d085p-20Q, -0x1.96b8b0f8a15e32028c8ee0076679p-25Q, 0x1.71f48c99d030adfe377a7056701dp-27Q, -0x1.b5fc8d66ab6cfd5a83337a0cc9b9p-34Q, -0x1.c5963ee2273d2d13e0940bb125cdp-38Q, 0x1.6b4e6ce52480a98b4ad64082a237p-45Q, 0x1.e67135f42b49adad00310559fa39p-58Q, -0x1.6aff40a6dd5b409b62d44964fcf6p-67Q, 0x1.6b5790e714dd812f487575d04214p-89Q, 0x0p+0Q}; - } - if constexpr (order == 4) { - return {0x0p+0Q, 0x1.002833198203bf56e8fbb6905c21p-2Q, 0x1.74f145f5180b48bf2521976daf68p-1Q, -0x1.d40722c67b8b2c63d49b5a9b6cadp+2Q, 0x1.2af6f0f464bc571c8b763a8383eap+4Q, -0x1.a43135145799a27dfd1fadf6761p+4Q, 0x1.9a15ae0412710439a9b40c2dd4dbp+4Q, -0x1.38d1bd49e9af291f59c9f34bcde4p+4Q, 0x1.6c6cdb14d7fe107edc16c4953b35p+3Q, -0x1.13619aaa119f97b37d6d1c2c4585p+2Q, 0x1.d56ce1ec874a0c5dd634fb59d6d1p-1Q, -0x1.e42907ae7a26468d6ecb1d9e3f24p-1Q, 0x1.e52911f9f656640a2404f83a2b4fp+0Q, -0x1.ee224ef8eb13d4b961d19b7d1c3bp+0Q, 0x1.1f26d6223d44cb481a2910c6eba2p+0Q, -0x1.5888435f5783628967f9baa03f79p-2Q, -0x1.9e45fc4e6f7c960ebee0a7c398e8p-7Q, 0x1.dcd2d2ebfb6e400bbcf752c0bf7fp-5Q, -0x1.93116bc1ac6b7200b82ddbf8d638p-6Q, 0x1.0e01783e342a4693e98c9edbf33cp-8Q, 0x1.31f3faa90de9ede16d914789626ap-12Q, -0x1.f6b0df77a54401ad9bab438557ddp-13Q, 0x1.f05077a02c3aba8741da9769ad4ep-16Q, 0x1.2ec5b9d224e6bceb5db9ee6cff1dp-20Q, -0x1.47f2b0eb68eda8ce48926b156c9bp-22Q, 0x1.bcb021bf883a1f92a78fc9df6525p-29Q, 0x1.1bcefd6cfba520ba047378483637p-32Q, -0x1.34d97adc52a38a676a55a692601cp-39Q, -0x1.6f2c8c9ca394fbdec6dda2487026p-53Q, 0x1.34e43d9253e6e8975e6c8e7aefefp-60Q, -0x1.352f98f0f2e48db2a203fb32a0f2p-81Q, 0x0p+0Q}; - } - if constexpr (order == 5) { - return {0x0p+0Q, 0x1.e5d8b15d3664d52108fae09a8e52p-1Q, -0x1.e7e4ae8313c9841f6b4ba59501e9p+1Q, 0x1.643947f56174ee22b35084254df8p+1Q, 0x1.8bf77730624fb34f058dbb215e6ap+3Q, -0x1.39575fcf961c0f3da45ce2cb7fb1p+5Q, 0x1.f6657cd6c7e299b7cc89d7d3daa3p+5Q, -0x1.2981aaa66ca36b3a94f8297750dp+6Q, 0x1.0cf300079688d85d6be476057064p+6Q, -0x1.71528cd9cab137a39829bbec9ca2p+4Q, -0x1.13658826409b41720bd51a0f2d32p+6Q, 0x1.5ecf135e336b7c201cd13f9f1c7bp+7Q, -0x1.ca8fbd8754dc1920d78e0ace3c5ep+7Q, 0x1.83a96558c6c07294f0fd718cdf26p+7Q, -0x1.9d91182e0786a78e2338c8bf2ff2p+6Q, 0x1.818f5ca05f023837d630b257f2ffp+4Q, 0x1.4e782cc994094deb153537dfc8d9p+3Q, -0x1.7fba734a377970e0ae8d82bc8b81p+3Q, 0x1.361d7d826bb5b3b3a1616de586bdp+2Q, -0x1.85fee8307d590ead49f8c992534dp-1Q, -0x1.fcc3205624ce56be678cf9a5a7bcp-4Q, 0x1.30d54b861144b0080c77fb2ef955p-4Q, -0x1.4236c7ccc62df6904f1792b21926p-7Q, -0x1.6b6d4bcc089eed67f90762e3bff2p-12Q, 0x1.251cb75a77a65027fa18c49d6fe7p-13Q, -0x1.7df627db3ed37f55c551bdd12823p-19Q, -0x1.6d7ba0319a17f9c5347fd4ebc07ap-23Q, 0x1.047350b843565161f3ac671e5f76p-29Q, 0x1.ecabd0f857c5126fafed07e8e831p-41Q, -0x1.035ef08b1273d485ae68801933a9p-49Q, 0x1.039e900e7fa12bdd9aa0b500dd5fp-69Q, 0x0p+0Q}; - } - if constexpr (order == 6) { - return {0x0p+0Q, 0x1.5c435b4994699430de1f0bf0f96ep+1Q, -0x1.45ad88073e6251792d84638c28d6p+4Q, 0x1.1ac643e9c99f8dff42b4b5f9e976p+6Q, -0x1.3bcd24e1c22f08a7330d952db5cp+7Q, 0x1.1132bead650e64e0cc6250fd5a4cp+8Q, -0x1.a3321607e359615c22640184890cp+8Q, 0x1.2bec4ce73b524de840d2af975fb7p+9Q, -0x1.83ddd4224b9abfb64ecabd8660acp+9Q, 0x1.b1ad4241d86bedd378c0238858cbp+9Q, -0x1.9d7a3218170b28b67328a4e4a6f8p+9Q, 0x1.5526f87e8214f36e89fc59fbe6b5p+9Q, -0x1.e996857ebd3fd865f8b8b57715d2p+8Q, 0x1.186a9a24f3387e74b22113290d4ap+8Q, -0x1.4f804f76b6d5b86a618f6e232bp+6Q, -0x1.84954fc1821007c0fd22bc06ae8ep+5Q, 0x1.59efa11d2ec6f964630b6fd432d3p+6Q, -0x1.dac7ad3b33c95d5f07d90297e68ap+5Q, 0x1.62078796373e73b5598b78c1554p+4Q, -0x1.88bb023e9f2f98b9b7a5caf3d0d1p+1Q, -0x1.04b9160269b89d57d0a515a32ad5p+0Q, 0x1.18c6982acbd2cd140bf32d2822bbp-1Q, -0x1.508ddc9d3ccb43c37b8bf661b39ap-4Q, -0x1.539386e1415cf5772194fa5cb789p-9Q, 0x1.9eab992a4b9ab37998a4782656d7p-10Q, -0x1.980b92ff814cc556c4aeda05445fp-15Q, -0x1.761c29381edd29e5680cf5367b41p-19Q, 0x1.64e7e2ec4af2d5325d3b1ebf7038p-25Q, 0x1.1823b743e4c412fe2e1a1caf98aep-35Q, -0x1.623923d3ddbaeed10b04fa360d62p-44Q, 0x1.6290fa803758e40f0b825bbc6f28p-63Q, 0x0p+0Q}; - } - if constexpr (order == 7) { - return {0x0p+0Q, 0x1.891443770e9f5b58ca0bdbd939d6p+2Q, -0x1.c4b28f7dbecf38e874d3b242d4fbp+5Q, 0x1.d994c46f08417c9c24a3de260d39p+7Q, -0x1.26defe09eb9e312242e62017ceb2p+9Q, 0x1.ddf577c4250f78c0132ae5d7d1cep+9Q, -0x1.fd2079b0f3ddb297d557ffac7fap+9Q, 0x1.36152a2e286cfeac434a875affb8p+9Q, 0x1.d8616a51db368c3df9bbb5de82cep+6Q, -0x1.190b42892374c709dd8c148043fep+10Q, 0x1.36219b396179567cea600ef5a5e7p+11Q, -0x1.eed74001662f7e761e907ef9b166p+11Q, 0x1.31c149450a5e9832b2fbd7c32f38p+12Q, -0x1.31807a4d8f7d8b9ec23e94e23c9ap+12Q, 0x1.07e37f0875c28ba98c5df12ea151p+12Q, -0x1.9ca0e06fa4e40e6ba9a2f070a627p+11Q, 0x1.192392a49659f5be4afa683922a3p+11Q, -0x1.28f7ef65a911c2242d4a04d3586cp+10Q, 0x1.8ef1182eeb70c3b810afe07ad9aep+8Q, -0x1.076216da5c43b27292cd22bcb978p+5Q, -0x1.3734a9c9c5014b6b42b155a6abedp+5Q, 0x1.2e313dce4fbf11c25ec52c766e83p+4Q, -0x1.913ecda1e3436af7caac068805f8p+1Q, -0x1.aba4e0591b35ef78388396d8949ap-4Q, 0x1.5578ca229685f75ec4dbb7fb72b6p-4Q, -0x1.f3ff47839e58d032a1a624c1f604p-9Q, -0x1.bd3a12076a4f509f06e99bb28599p-13Q, 0x1.29ffe91412a29d368ce7b0895443p-18Q, 0x1.5e7711914b058b73ae8c4ed370dp-28Q, -0x1.267e3f1ece05182094aa29382cf7p-36Q, 0x1.26c8d9be624c3d09b42c989d403cp-54Q, 0x0p+0Q}; - } - if constexpr (order == 8) { - return {0x0p+0Q, 0x1.1c06072fbf26f358c9f078f98565p+3Q, -0x1.65d998749f19f3f52787d2ac7bd1p+6Q, 0x1.9d8978b96f57f154ef9ce52c7bdfp+8Q, -0x1.24c8d76a7f36d7089e3f4940c827p+10Q, 0x1.21d479bc00697b14d91a6dd4bcabp+11Q, -0x1.bbc006c9393532c76b5d7283eb2fp+11Q, 0x1.2211c4425df9c2e46c401315e702p+12Q, -0x1.5c64ff1d8bf677ab09ac8c8005b4p+12Q, 0x1.845a35a3158347c96beac73413ep+12Q, -0x1.87e6df0fbf8ef42fd538df2c44e6p+12Q, 0x1.6504110de640c4682cba264cf46ap+12Q, -0x1.2b9aa02be2b35409ccae86a8991fp+12Q, 0x1.cebcfb329a57eadc95a6866f02e1p+11Q, -0x1.3e375c669dabfd4de916796f2023p+11Q, 0x1.7d70c67fe8973e080c2a8eb7f182p+10Q, -0x1.8fd6874952e8a903dace07633bccp+9Q, 0x1.57b6f4096f1cf0152662dc88de7ap+8Q, -0x1.3e2c004c73161017d1fe47d49586p+6Q, -0x1.f1e0f66437531ffa287a43716481p+4Q, 0x1.39f676c7227564daf7244ac826e7p+5Q, -0x1.07f7de36ead717df75674d143f33p+4Q, 0x1.6eaf02b444bc4ce4684168c04e9ap+1Q, 0x1.f8896c7b27aea8a0c13b638bec5cp-4Q, -0x1.b78e4a3636f77d36045fd051d0a7p-4Q, 0x1.faf293c65fc88bb39eaf07f0c833p-8Q, 0x1.a6b604defe6a94f42a0056ad171bp-12Q, -0x1.9886be2865e4c650159b7d4d95b1p-17Q, -0x1.7c0bde2d4dd50659d8e873b48d0ap-26Q, 0x1.90aca39ea2e8ac3870ca13b1a564p-34Q, -0x1.91166efa6d0a92bc7a2e9704d452p-51Q, 0x0p+0Q}; - } - if constexpr (order == 9) { - return {0x0p+0Q, 0x1.58e7df6732419db59e9ac42f9ab1p+3Q, -0x1.c53a29616fa380817d7f5e347aefp+6Q, 0x1.0cc18d57a1a1fb48e108cac3a066p+9Q, -0x1.7c92fc1b6ca3895680c38212861fp+10Q, 0x1.6a1945d20b68d8baff4381a817e2p+11Q, -0x1.fab771c0e1baf24e2c8f95c4199fp+11Q, 0x1.254298acbb2d449a7b3bb526f729p+12Q, -0x1.407f9dc95f9b1203f980178aa4a8p+12Q, 0x1.53233c63dd8a7f18f0a2b3af5ccep+12Q, -0x1.3b528b34539979362d8c0e80e80ep+12Q, 0x1.e2ea2797d25e54507eb78c335f71p+11Q, -0x1.3d6169dd11c9bca3212058149b0bp+11Q, 0x1.75fce5d641404560c1229131d8bdp+10Q, -0x1.2b5b50127f9f56d44ea4f01f61c9p+9Q, -0x1.18e0518b142ec5c99d05ce213217p+7Q, 0x1.ed1ee257a974ab35fe81e878de48p+8Q, -0x1.f5a5a8d8a9b3c073ca67ee8615b8p+8Q, 0x1.920c943e9e1a266133bfad52e46dp+8Q, -0x1.22c1385412c45fef72454e0ef403p+8Q, 0x1.4b1ba13f6628b1dd44be57f24352p+7Q, -0x1.ec876f34dee07503da6a5d0e4af4p+5Q, 0x1.641261f15a2bc3d54eada0d94bc5p+3Q, 0x1.3bac7fcb6881fd2d747aef7d1cc5p-1Q, -0x1.3ae0db5ff49e0fda9ef09cfb9b34p-1Q, 0x1.0ba445bef297ba3c0905b698e9c6p-4Q, 0x1.c3804abda5b0efa9daece8d22468p-9Q, -0x1.3c78fba89f7e4dd2da5d2b0f1ab2p-13Q, -0x1.6e90a45b17e11834e30d4035587ep-22Q, 0x1.34c398a5dd4857b9fcc2b9b3ec09p-29Q, -0x1.351bbccd566d5b56e0d110fac029p-45Q, 0x0p+0Q}; - } - if constexpr (order == 10) { - return {0x0p+0Q, 0x1.0cfd9304e9d0e9e89a508d967352p+3Q, -0x1.68c00ea69764cc01a573447ef7eep+6Q, 0x1.b4a63a85c6a121d6db6758f94115p+8Q, -0x1.3c4fcf304828edf08897e340df25p+10Q, 0x1.35efe9ab816f6ad2ce3b95243287p+11Q, -0x1.c3872b5b6dcd2512d759e390543cp+11Q, 0x1.1261ac83f506bff0f38c31198cefp+12Q, -0x1.39e1fa3f00833a2dd6c432f2edcep+12Q, 0x1.5e4c9d364466ef749b8d0d88979bp+12Q, -0x1.6b72e41a84905cceda3e7fc6c066p+12Q, 0x1.578fd4c404248dabc968b7c529b9p+12Q, -0x1.30faf3648505cdf5f671e0ae34fdp+12Q, 0x1.0174ad7c898217c903f8f07741efp+12Q, -0x1.942bc49f2f52a22fa3eae80252dcp+11Q, 0x1.25cbc7992fd63cf31740b115daf5p+11Q, -0x1.914caac5676309ecc6f6c550d8ebp+10Q, 0x1.f93f030387c4d019b6838cf24389p+9Q, -0x1.1b4f5dfc787bbc32262ca3f167bep+9Q, 0x1.1df01b8a36a8b0e740af0c5b60a7p+8Q, -0x1.048db6f3ab7c1cc8ce49930b812dp+7Q, 0x1.730bcb9c58bfc20d60bef0471523p+5Q, -0x1.09b56b87c1c7fb7baeed74ce6cdbp+3Q, -0x1.4fb833b30fa7eeef6a7358348b92p+0Q, 0x1.e38e1048601a60cbceead8c786b8p-1Q, -0x1.ee07e572041f738c256c5953b0d7p-4Q, -0x1.913ced3c0164b56d323de7f36c57p-8Q, 0x1.0726b83c4032bf81b9ad0141e709p-11Q, 0x1.2751c6763466bbc5b359801c4ca6p-20Q, -0x1.00ceb77e39cabc22cbab1770a0b7p-26Q, 0x1.0123085a8910152fac9990b7a672p-41Q, 0x0p+0Q}; - } - if constexpr (order == 11) { - return {0x0p+0Q, 0x1.6ddd33f198eb3c96ba1c54f670fdp+2Q, -0x1.ef9ef6f596ce44132c5dde1777d4p+5Q, 0x1.2bec86422c72fb4a905555a96936p+8Q, -0x1.ab3138ae63b3c1e29f1c692c8b8ep+9Q, 0x1.90171accf1ae92cfd9c146fd2557p+10Q, -0x1.0b8279e6381aa2b741cb2d9796cbp+11Q, 0x1.21c7cbc3a51f50320f21aa56334ap+11Q, -0x1.3291c6bd3630cafeef14937244cfp+11Q, 0x1.52187d4f278255d90661622e17d1p+11Q, -0x1.5764b21031af003ebeca03a2b0b9p+11Q, 0x1.2d82b77758b7aad296e73eef7d7bp+11Q, -0x1.efcf6fd97e7509c927b7122c5c13p+10Q, 0x1.96b834131566dc9e06167e63c7d4p+10Q, -0x1.34d67cf0a39ad9453edbb75a25c5p+10Q, 0x1.9aafba6f0ff85ebebfb694ebd422p+9Q, -0x1.002f1ef9723b265f846b3c2332f6p+9Q, 0x1.378956144d5be0ceae60b1a0aa28p+8Q, -0x1.48f6827b3eeb52ea5b3fa287d164p+7Q, 0x1.17de886be7cb3ac887cff35422aap+6Q, -0x1.abd1c377daaf4123bc47a29397f4p+4Q, 0x1.18836fa0aedf116ff47c167f808p+3Q, -0x1.72b11631904f6bd3fd5a823e34cp-2Q, -0x1.93c736e0c44c0da3f45cfa30760fp+0Q, 0x1.74105b4ecfea6c16423bc348f8fp-1Q, -0x1.a9382883de207a4dbe62c7de34c2p-4Q, -0x1.8ee02bc822713114de66688f8544p-9Q, 0x1.b89c5ecf7a7b773088c639b3a53ap-11Q, 0x1.5051009d42a4549b60dc1a4ffdc1p-19Q, -0x1.a9ba33acc416babe2777385baddfp-25Q, 0x1.aa6a7d0ba81031b3c9971794d3cep-39Q, 0x0p+0Q}; - } - if constexpr (order == 12) { - return {0x0p+0Q, 0x1.7e688b7526a774b76724ba13a96cp+1Q, -0x1.044f66dd0bb355e9e82c72d5eaffp+5Q, 0x1.39d2780b0ad2f5c130250e42d893p+7Q, -0x1.b63bb8898df0968b0e5291c5adf1p+8Q, 0x1.86b367123a2139a59288ccfca3dfp+9Q, -0x1.d8001c1817ddf23795b1149354dfp+9Q, 0x1.b397f071da3115c284e47fbefa66p+9Q, -0x1.9ca191acc971e01d76f080b3e85ap+9Q, 0x1.d28d7edb2db091286a502e3d1491p+9Q, -0x1.daeab5bf793f0a5db198f7c1b01p+9Q, 0x1.738e37d47cc21d48d3f57dfe7cfep+9Q, -0x1.0785a3e74df59d20286619983999p+9Q, 0x1.a556a97ba734840eab5a765f294cp+8Q, -0x1.320671c41025d2eac683ee371196p+8Q, 0x1.33661041ead74be914f62376ca64p+7Q, -0x1.d86506577d5080199e51f7260b6fp+5Q, 0x1.9ebe0657238551a24ab6c6c0e20bp+4Q, -0x1.ec9ee904293324442bcbed481925p-1Q, -0x1.1034340999c868fff5238312a8aap+4Q, 0x1.04d7524f6a9fff23ceab9523e19cp+4Q, -0x1.2fcc89fd04e88d59c75667d7c4bbp+3Q, 0x1.7c24bc012bffc7d1e21de0348c52p+2Q, -0x1.c84c145900f77b34a4876818624fp+1Q, 0x1.57bccbd9e4fcea0faae4ccf7a2f9p+0Q, -0x1.d81daf1af068d1091e32e8f2fcc9p-3Q, -0x1.20f9f72def1de8f22a005f73e8a4p-13Q, 0x1.c2f2ad7e016f5272ff115101365p-9Q, 0x1.baf6705e59cac3284164d29d2adfp-17Q, -0x1.ae94eeab2dbd4d40eac4360abe26p-22Q, 0x1.af91281d9938911a63573a1c8a3ap-35Q, 0x0p+0Q}; - } - if constexpr (order == 13) { - return {0x0p+0Q, 0x1.a308ef1d16805759614e47ced45fp-1Q, -0x1.1df37cb20ef6cd526bae886688ccp+3Q, 0x1.5a47cc2daffcb2cf20f8cbe23f9dp+5Q, -0x1.e7cc32d4c7f05cc178a92423af38p+6Q, 0x1.ba5aa6f58d154790fde87c08c1abp+7Q, -0x1.137ebe2556bb5c31390bfbcc3555p+8Q, 0x1.07f96c27b79ba1c76a48900fad0dp+8Q, -0x1.f176d6c3151d8ca65c2069cc8ba9p+7Q, 0x1.0c09a0e0bcb9ff8d7d5ef1548dd1p+8Q, -0x1.12bf0f34a9a5500b54ae9f341239p+8Q, 0x1.de16d55d65d2bb62ec7f100c7235p+7Q, -0x1.8c7b496d3d3fd8274eb146a1b265p+7Q, 0x1.56592506626bc28d37aec7a2a08bp+7Q, -0x1.13d919c9693b2e85ee4209bf711ep+7Q, 0x1.8b69de5718a09e2e84e51d955579p+6Q, -0x1.15b78c90e783729339c94d803f63p+6Q, 0x1.8188b8db550fea38899d2489ef66p+5Q, -0x1.e03c011f666ac66011b7609652a9p+4Q, 0x1.12ed8b36e986458009c8fb08c63dp+4Q, -0x1.36a5b057bc26ecf6312ef4c8aa89p+3Q, 0x1.3d2641cf67e8fbde6d24a0c08316p+2Q, -0x1.11ef148707dfa11f55a9bad8158fp+1Q, 0x1.c294da23fe29fd37f9c13ab439f3p-1Q, -0x1.4f57e7e05e818e7ff02709327119p-2Q, 0x1.1ebd9964081cf6e9a360b8a8d058p-4Q, 0x1.367917f76eee2f0773ffda2dee7cp-14Q, -0x1.fdd37749c94d91b95e5811e014fcp-10Q, -0x1.0fc0733cbc7d657bb2812f3ed59dp-22Q, 0x1.f945fb653cfda9182e6054d0438ep-22Q, -0x1.fb1bcfae6e46d13bafafa99aa27p-34Q, 0x0p+0Q}; - } - if constexpr (order == 14) { - return {0x0p+0Q, 0x1.74ef139ad4e11f00f65daa8820cdp-3Q, -0x1.fd9d32fdef73fc52b4caeb648516p+0Q, 0x1.3320f17be8b7073381e865362afep+3Q, -0x1.a9e31dbd98dd09635b0d379485c8p+4Q, 0x1.73dbdd38a87f5064433a350c721dp+5Q, -0x1.aa50f206f25c72a99cb7b1dfa7d2p+5Q, 0x1.5e48ac9c2f1f1eff350b14cb6a0cp+5Q, -0x1.20d7a78e95ecf57e7add31db3fd2p+5Q, 0x1.4350b94e5aa2da50e61a74e27b2cp+5Q, -0x1.5499ff05228ddd2807c95d8259cp+5Q, 0x1.0d8c7214ffee0a1235b3874b3a3ap+5Q, -0x1.8fe88996cfa9a55157f19af30b98p+4Q, 0x1.63da6bffb7322ee61e908c187b83p+4Q, -0x1.24223f5c1b9d9506d6b401adee8dp+4Q, 0x1.7851e19176715ec2bb3ef2e77d74p+3Q, -0x1.e4fd178fcd0ef2f7354c8299da37p+2Q, 0x1.610a439acb28979c58f2b0d330cdp+2Q, -0x1.ae4c3e147b71c294863ea12a0857p+1Q, 0x1.a6fe28ab7ffa991086c47e322a6dp+0Q, -0x1.ccc920f98175dd5797f1c22d8029p-1Q, 0x1.f9389387bff6b354c93278385205p-2Q, -0x1.8612de961fd0228a7f5532d1edd2p-3Q, 0x1.fd43fc0e7883ee43ba7f30ad9465p-5Q, -0x1.aafa1e0c4a86f88db60d4f1fa17bp-6Q, 0x1.b638737fa8e8eebd498a75e7c49cp-8Q, 0x1.071682a1f5057e2143b4d72fc7c5p-11Q, -0x1.a84c3f530239b63f7da26929d4ffp-12Q, 0x1.a20c2374a0f6700016084886c2a8p-18Q, 0x1.e7f1c0adda0f62adb67917e7d654p-23Q, -0x1.eb089a4058efe658e6efa5db9e34p-34Q, 0x0p+0Q}; - } - if constexpr (order == 15) { - return {0x0p+0Q, 0x1.31c729360063e0149d619e7c5659p-6Q, -0x1.a21aa8a66a6833da5818bdb00dc4p-3Q, 0x1.f656a46fa2a9169e56e0e1915e67p-1Q, -0x1.589b4fca92a9f10523379245a6fbp+1Q, 0x1.25049558932c1a7bf94dfb345bd9p+2Q, -0x1.3b0f087615a26809432e1d6e01c8p+2Q, 0x1.bed87f332745bf792baa46fb22d3p+1Q, -0x1.37fe75fa2aa3b693bb533ebc90ap+1Q, 0x1.75c34ae38a11fc31440e21813692p+1Q, -0x1.9f32b219f201f09e83858382dcccp+1Q, 0x1.2a50b5ebe798e437ef2503085768p+1Q, -0x1.80aff2523d4b3342a833db6031p+0Q, 0x1.71f9af43c19f0952a4e07472578p+0Q, -0x1.40d21595459cbd897728656ded6bp+0Q, 0x1.6edc3b8de7cbccef39ac5c5b8452p-1Q, -0x1.abb5cf29e076b1f30f36686df3b2p-2Q, 0x1.5fdcb9c5e1f87c285b04c2fd8053p-2Q, -0x1.af4e9b9242255620df4c3ab9bf57p-3Q, 0x1.57b33e4d63cb5298c7100384e3b2p-4Q, -0x1.736294d370dec79efb4014a700a8p-5Q, 0x1.e1a61d7964668ec603cb9aadd499p-6Q, -0x1.38138139d6cd8275f0059b0302fbp-7Q, 0x1.a99b874715d59140bd445bce9797p-10Q, -0x1.191ada841d111d8ae1875d5194c5p-10Q, 0x1.44a23a1750afa85a30082caf581dp-12Q, 0x1.4db128e094987961ef4278d6a462p-13Q, -0x1.2cad37f3dbf9e7a235442f3e067dp-14Q, 0x1.f38c667f694821291da674a42ae8p-19Q, 0x1.c870773604d02f72b6568dfdd8eep-24Q, -0x1.cdd01a024c710ef11bdc57da89cfp-34Q, 0x0p+0Q}; - } - } - #endif - if constexpr (std::is_same_v) { - if constexpr (order == 0) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.000171316851323746428212831421306300113678607875446348503559419927437918383967"), boost::lexical_cast("0.0361088272946006985912064934900062644165629414989774122809757345902866027938"), boost::lexical_cast("0.488256992843695840962159179639502910381980307460695354580458818691887940645"), boost::lexical_cast("0.769737672515207083007430504821028844267689308307112651993923296421178108389"), boost::lexical_cast("-0.453126925329274055451166333557401859659406793270554665033541123983449765432"), boost::lexical_cast("0.256628058814639987338137180313733199002175042843789042052759470470604205726"), boost::lexical_cast("-0.163454122854003496557302427492278171149085655394974230532183221080254700021"), boost::lexical_cast("0.107723422859916997108276817161022290367504837432994030942098049009089713930"), boost::lexical_cast("-0.0649318249233011704784968686914491012172054359333812436767935404371230620232"), boost::lexical_cast("0.0326435377329051629426715185593256884476167946008041064239605220708580188240"), boost::lexical_cast("-0.0127409361375573448882342299469851670195888311206647480453026814799719677344"), boost::lexical_cast("0.00352196549620161398967203337357383200834551341224048951969904909167613097889"), boost::lexical_cast("-0.000534217142003219306131911092756991844459258563640870926150016500754364314332"), boost::lexical_cast("-0.0000405890411165595317643619001506764641287318490078309353140855497110673976431"), boost::lexical_cast("0.0000498095041023299888778042223185543062245836773367960445465000704315159966296"), boost::lexical_cast("-0.0000151266310013612774856135240041061222014350088021428301604611262734516728901"), boost::lexical_cast("0.00000196962302501772214722461685124074719608921063431828230431618407481183902342"), boost::lexical_cast("0.000000307419811865464641941041529634159778226115669718094511609235500455794645613"), boost::lexical_cast("-0.000000146711526898488736937232395914501861484051305606502624138556023532223617309"), boost::lexical_cast("0.00000000469170321491953908065098991723043621408692762756980179169088515131858959747"), boost::lexical_cast("0.00000000312109588324696299578629133466134546804934425652317350217208685069513949015"), boost::lexical_cast("0.0000000000129567198099448561278298370512360354984106954815513505005111818553145714634"), boost::lexical_cast("-0.0000000000116427529260004024077348030611493564888124415305981619797224470056679948811"), boost::lexical_cast("0.000000000000238326595578192588974326088085766915138526617008998625640603860278073091204"), boost::lexical_cast("0.00000000000000244742730302692510517546840958886727657274951555813495950007886554971190043"), boost::lexical_cast("-0.0000000000000000770600420494052668960125627196143256619852875376018693997338520252928378898"), boost::lexical_cast("0.000000000000000000422698076320704793842624462462122259676671218339643878393761622611533681352"), boost::lexical_cast("-0.0000000000000000000000986091681636424791402346661562732411914581846543827917931134779717124541059"), boost::lexical_cast("-0.0000000000000000000000000126415071901335517823653751264600698935766480825324951588072073703511279792"), boost::lexical_cast("0.000000000000000000000000000000000377103451930012080634362697114829703633218765482534208185011848812515552568"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 1) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00133579806419009115196675706637156796250602084906080838786026804834468971451"), boost::lexical_cast("0.133464030083480084488351954591647717793838350786372177549592743667488710460"), boost::lexical_cast("0.777392827221672586310666248128747829200320493773819351137332467588231583243"), boost::lexical_cast("-0.801230717758959652961918527009129684833274859723487119504590846793863335812"), boost::lexical_cast("-0.426666784652518489250422806683556250288833676277503213685236945222428885252"), boost::lexical_cast("0.571957459622602012169769841907390760981552952793047182594349400518281072515"), boost::lexical_cast("-0.397457250920213664316589385904613867162187759231452008713125765190307200547"), boost::lexical_cast("0.186033305489426000253295545948948513398939530758207475017080180368379398183"), boost::lexical_cast("-0.0384747679059492805673916579189810661778669575642656012980830136829451472564"), boost::lexical_cast("-0.0241860357552808869059750766214192783314611864202213790162280116456669700270"), boost::lexical_cast("0.0288198897744401662329162080788778906001500235821576069533309114033731355962"), boost::lexical_cast("-0.0142526963839655487645868201986010179113871984727712950466970890939532437287"), boost::lexical_cast("0.00336296659876176824397694271542208875883948628180586907906711210463700136985"), boost::lexical_cast("0.000159566153593696861386281086000847690312020416646262230382754818302321719438"), boost::lexical_cast("-0.000309307263435472022314536922703140898276518864598497490064213305898284747610"), boost::lexical_cast("0.0000325961537538155977461153441016758163050507356702941089478538114352859222854"), boost::lexical_cast("0.0000290247635542117698570144977074207416731978843448666289133343239852468689816"), boost::lexical_cast("-0.0000110608868168013164312795909662150842245074396074718805254622442187665703898"), boost::lexical_cast("0.00000101464961764211094555255572688179572800548750891083281483490440540837760392"), boost::lexical_cast("0.000000181575796575106178569931388126652092356228605369118455900710625612685300521"), boost::lexical_cast("-0.0000000403715350553834157466382021922715956137169052960785956913878496250614284899"), boost::lexical_cast("0.00000000171544844106973826322799913004035593507782409764976544917598966515593650516"), boost::lexical_cast("0.0000000000451755267309694366768252738364162154259717215355595513364624281739328028806"), boost::lexical_cast("-0.0000000000129802294066363039747634462122684813596696625800552726940142002601766408318"), boost::lexical_cast("0.000000000000138996891829717676890440608071964520497157312831377423601945181405496090684"), boost::lexical_cast("0.00000000000000347738382169564687828118552109166638991744665362295779616649639285729819837"), boost::lexical_cast("-0.0000000000000000114717366932132278311818016897232315223329690486333509730375898406349099958"), boost::lexical_cast("-0.00000000000000000000599799090330095203536315142157704385751706823140887377206448675107156989932"), boost::lexical_cast("0.000000000000000000000000680498581094669635360619813975423231834669537307635911669206391386823114209"), boost::lexical_cast("-0.0000000000000000000000000000000405993437164566724529315224811697049713922457638122491969890878584620874206"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 2) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.00907504496732640314944688849486681911170876832663177666164174959468906643803"), boost::lexical_cast("0.403693382156658974454216765797474206766624418327280399905409355427011080214"), boost::lexical_cast("0.271595976047908300146227934593263488450798813237955930924729605110240403784"), boost::lexical_cast("-2.71466891756329191846888796871430523337714028235285198760495724403435013146"), boost::lexical_cast("3.63352358803570678788478060023534112555476154451350510970246835738280509121"), boost::lexical_cast("-2.78898072726975682640228727618234727138388953315526188172240636749159256228"), boost::lexical_cast("2.03975077410817374151183520926644188466298014618670416662972210485960248730"), boost::lexical_cast("-1.39631704154228509023706369056571803134772531763393599140130182392659436684"), boost::lexical_cast("0.819427034497158945142654966863542712206855345194448346903634159296239630598"), boost::lexical_cast("-0.383404119723578321449814608400708917510598449828088961243589855149596001885"), boost::lexical_cast("0.135338714135930963195025224311403350634380005187589310729670665679985290100"), boost::lexical_cast("-0.0345824240315870800399189191226465109691714421609307243691766680673623150574"), boost::lexical_cast("0.00611109252646139447895469481926612685642577266141459174233983728056045874462"), boost::lexical_cast("-0.000156732873630400332452745828101813648998758607431152977455922938360286361652"), boost::lexical_cast("-0.000799472830647854921185434616224208697749055953896801846063825566821972723190"), boost::lexical_cast("0.000535969002468135628001789755566345264258267679652530938019113713661289348208"), boost::lexical_cast("-0.000157384549414717885084996140216171026329363074442489876604893016989401039526"), boost::lexical_cast("0.0000129171554337007654761147781184602376979060587640275295086289574304678711395"), boost::lexical_cast("0.00000235891742489546284645209760127039465129319583273974596760329794893748689585"), boost::lexical_cast("0.0000000916355305976574852247317081462867277633622646780812044187106843272112326405"), boost::lexical_cast("-0.000000111762055600082304510067275185623693221628140706419356829204316323573355820"), boost::lexical_cast("-0.0000000126047973860633771018680395413773434461601001774651486849360410809332840361"), boost::lexical_cast("0.00000000154580154095772067092661818331346769426075368407031625141514557326211824376"), boost::lexical_cast("0.0000000000185949656985422215139801744960422197149550325212978585262596149007208130605"), boost::lexical_cast("0.000000000000475656161103013775576836068201182321050146685578942140172354013017630940520"), boost::lexical_cast("-0.00000000000000964424579936565782431696216162300377942338427905223389622237003668698745504"), boost::lexical_cast("-0.000000000000000162097483836675470258977768421201321419436509333952009353262345869183739617"), boost::lexical_cast("-0.0000000000000000000686765701841635939050965407015716594433862441435219008736510985170543518442"), boost::lexical_cast("0.0000000000000000000000192520645691275200631994551227278033106343644450467270809557380021147426532"), boost::lexical_cast("-0.00000000000000000000000000000229720301797888422217182338458254109542893787274416640198192653932982382539"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 3) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0524753452804691735477738251517009853016979362519517221207312376177764782969"), boost::lexical_cast("0.879968733813233322230074392947552628565967066414165711760276698494844390125"), boost::lexical_cast("-2.74453159899437732175018000055779377712653677438008754872020488131059119320"), boost::lexical_cast("1.80360353176224527101835802230946052421659096363090207129121849285840468259"), boost::lexical_cast("1.96666354532348341330633181326044172915860234894700083373343277220577971735"), boost::lexical_cast("-3.73070092873449595291889929112197581304463119652084787245047615859331130715"), boost::lexical_cast("2.42984724824215839353390105174821482301107399626250856007397139446613345585"), boost::lexical_cast("-0.277322631367784241585872795091101589798351228341158053606520050000850391984"), boost::lexical_cast("-1.16919259864499295419145746896607736986733203837630984609448122373016720827"), boost::lexical_cast("1.39016950402094561654444812940516530484537994331951170078343059431705063505"), boost::lexical_cast("-0.817574132321601018212216995379856653768755317510857634630667447972613443467"), boost::lexical_cast("0.190018473449379212093490515862790233603734487245387060360549170220720527831"), boost::lexical_cast("0.100241083602577673991999687326956519174898192619719218177625643190688840896"), boost::lexical_cast("-0.110015365802528313698254717873775724459189967181830195015949587831350610756"), boost::lexical_cast("0.0416060467568914386443724185616672217060437647984160864439680078935440524035"), boost::lexical_cast("-0.00245435974160983337464675102356272887367440646869277382351633348615279833109"), boost::lexical_cast("-0.00443062929513058573083346981678078784735168535836855152956465826632431223593"), boost::lexical_cast("0.00192644595259837997265354752663163334685724941492449191301572332061212680367"), boost::lexical_cast("-0.000286252108033456570905469351445678979854820611278948347680038000227240824154"), boost::lexical_cast("-0.0000237541414511668265954922688834169477800802817148790300058634367070336055647"), boost::lexical_cast("0.0000136482469252724735030504787827046649952988816328627069135194335843416601041"), boost::lexical_cast("-0.00000131861141712690876615365340120264536061804975586109036631891707678386628591"), boost::lexical_cast("-0.0000000473486085383219537439492823717115126567852265733507953095631575087828890796"), boost::lexical_cast("0.0000000107671154662516331418850350729831199883227731812375998404087097072976836721"), boost::lexical_cast("-0.0000000000995866077139100400870850073442653083344654813486051402700610836989945821329"), boost::lexical_cast("-0.00000000000644585749433741211569153851347580280472182636866394478917140428098212069667"), boost::lexical_cast("0.0000000000000403351073771297890412924077239685188093056035814882459390662060096671857385"), boost::lexical_cast("0.00000000000000000659252152542076182761062902783690995247798500608023765240694648924331810668"), boost::lexical_cast("-0.00000000000000000000960845271049957763593097408492741398950372383171287599580336659389110633204"), boost::lexical_cast("0.00000000000000000000000000229301073796668864262563070071270109124544905677035858311033933294273314683"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 4) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.250153349334599315252252388126799299269205865296558881938205954482634425962"), boost::lexical_cast("0.728403268974963829703458458071470050940885133583732803633168550716310693177"), boost::lexical_cast("-7.31293553717675839320538206374566119063264654529238980016770942275333057680"), boost::lexical_cast("18.68528838602266775292882053961758029216187265423226470274612731462272361220"), boost::lexical_cast("-26.26201351114432524894573270494314114413810106786511729006960444976330657170"), boost::lexical_cast("25.63029290762557459998254683581314951053365051306913942327754105908104915980"), boost::lexical_cast("-19.55120591041754554650107676016020601099463018398879255525071777101622456320"), boost::lexical_cast("11.38828805991210130161237386775166797562787000397306556310659987606493988010"), boost::lexical_cast("-4.30283228500638291198113772321275270873046197281267419596706014023411466725"), boost::lexical_cast("0.916846332667450611187893927561003746742522420503995679541446843858673884695"), boost::lexical_cast("-0.945625534103851129678007688099239113134137817655559774710855777516502347910"), boost::lexical_cast("1.89515793182939656979518906226485738613531079677925225755026655593370960082"), boost::lexical_cast("-1.93021100594621881524555259846350558417500093095145605126078231465409489372"), boost::lexical_cast("1.12168634735032240026321692944283569195655093165680965383861531031185719852"), boost::lexical_cast("-0.336457302755550977576916271285480607975977081669910226236184937860992298991"), boost::lexical_cast("-0.0126426202740467393304674214034871452929934964899914857227809055709449712216"), boost::lexical_cast("0.0582059974257001233798447456344149565398178531031451066540415121870578243558"), boost::lexical_cast("-0.0246013214406903516120171910897552685116442802184487116944341538415325680043"), boost::lexical_cast("0.00411996064777101316931682571931078586923686158543745182753395278198530764373"), boost::lexical_cast("0.000291779559634866855426419087305363632521209937998931712658121173823485969925"), boost::lexical_cast("-0.000239701704903312956607867825407660197652926764025390834805038196728688308116"), boost::lexical_cast("0.0000295826390590035655056112200057348642111500715341367896808394225854268570663"), boost::lexical_cast("0.00000112791496012934939362671595835297640696200634426263650389034453900171789361"), boost::lexical_cast("-0.000000305425386948880794569641314813535348968283260910445455462866729010610312003"), boost::lexical_cast("0.00000000323553114835699703688881035252953349590896466534687900103865721438408552054"), boost::lexical_cast("0.000000000258122376607866610987411018878425618791837110136955492805044321479509589635"), boost::lexical_cast("-0.00000000000219450790662654304491928786757425834815059646115033341354646744288934919567"), boost::lexical_cast("-0.000000000000000159236348311539532630177443070999135468225820289422009164997153592635443466"), boost::lexical_cast("0.00000000000000000104656532906862901171727858795431981501763265514191943218716516961575846913"), boost::lexical_cast("-0.000000000000000000000000499516806365011687457115487988706495932857454344801314889510253590960148386"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 5) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.948918860081173023486878449541710926994880432689837974961014397406181264670"), boost::lexical_cast("-3.81166631126650312996004125539249329519725796000525742386348292571081819916"), boost::lexical_cast("2.78299808007697130717152451621473328395694372256303981775622804889029881229"), boost::lexical_cast("12.37395820093160240345825282236635205331906106919047160212092164049284839100"), boost::lexical_cast("-39.16766321350906531896872834791517677824323075070438683104809495173394326760"), boost::lexical_cast("62.79955451772214024240382060087062426787397929319295079601210237275121712680"), boost::lexical_cast("-74.37662754095149895480040703763760620711511291610626181895862800609093747870"), boost::lexical_cast("67.23730480057039248447342118422920230943504437004823887131700745396390082610"), boost::lexical_cast("-23.08265385699185215685260119277430566259281075316203981240706774938023666940"), boost::lexical_cast("-68.84915218133284171164114487633189831096395205709886147861137522063085837340"), boost::lexical_cast("175.40444464090045806415168932366102695577037312699033623699052962519622077400"), boost::lexical_cast("-229.28074286375890467633294993254440174269835310543834526028533785864822388200"), boost::lexical_cast("193.83085133958977511845883119454638599531183632122825347548271736828828668300"), boost::lexical_cast("-103.39169380112586043483075412413138934035348978763581785737531822374487802400"), boost::lexical_cast("24.09750044484111524536729862648168444109977342535349604249164282561465455780"), boost::lexical_cast("10.45216979380374210587460533102864566884224012655559338370841906137296941750"), boost::lexical_cast("-11.99151005263756363002508198337155102952159028098769603630967872540787513590"), boost::lexical_cast("4.84554994331741826783417472084829739722607030792844096956440587496738411823"), boost::lexical_cast("-0.761710410994668509466406853308159275909502383230971027854958930856015369067"), boost::lexical_cast("-0.124209524454545658676627889167517050395399779084274645999974675911672746289"), boost::lexical_cast("0.0744221639771051463314174298022584491868353705194585772380078427077920515089"), boost::lexical_cast("-0.00983319049696390510116538964560712881930733797491178109985861752053037330480"), boost::lexical_cast("-0.000346590936489614878108837586184646026813106498935784307571500760640790704534"), boost::lexical_cast("0.000139766775489175116907285138350503430979371922048966698178677524730163900835"), boost::lexical_cast("-0.00000284583528087152912455876731878039503894920609382383306623061678825974042090"), boost::lexical_cast("-0.000000170191243809068258319726930807249987074459356894402421753166625042558224671"), boost::lexical_cast("0.00000000189502643796773771078878563475104632826265649607597910973035053389210254464"), boost::lexical_cast("0.000000000000875159779988110397841134172673233828490501760246058591460605371182339054825"), boost::lexical_cast("-0.00000000000000179974686472459484619567373444439533680836492233083181824874458737160102214"), boost::lexical_cast("0.00000000000000000000171801697948722978384418571523357254435734351358127403605526786536558291798"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 6) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.72080556004295870927948424445222388100259573295765738309696540518313358664"), boost::lexical_cast("-20.35486605481687082915848974154624621834658263785879525672648653134317139910"), boost::lexical_cast("70.69361844342337341827651301058270782618285357205640682781626444606188387450"), boost::lexical_cast("-157.90067201133162316239612336927048444714935472994185058634807793776069875000"), boost::lexical_cast("273.19822200505440746851580897502900411638483947712679427834499734688751603100"), boost::lexical_cast("-419.19564866352573545746821411474547215410128530316966417749138435741251020600"), boost::lexical_cast("599.84609690090711287694432739982078555920467552320725430638045237415518597600"), boost::lexical_cast("-775.73303631488442783947171088475881408364372009796884367795062491210589677500"), boost::lexical_cast("867.35358450953923058123434268208131384207780232732818873949031917800169735900"), boost::lexical_cast("-826.95465375065970699136161187085785345289352007444881210861847791029287195400"), boost::lexical_cast("682.30445844031956022343618018820158741773280156063117441757258118184658256700"), boost::lexical_cast("-489.58797447319361281730621439860073553304564691478746587385050469768692568500"), boost::lexical_cast("280.41641455591206428665542158114941187595434907081896095846035277563013174300"), boost::lexical_cast("-83.87530313006339392205670404100927251009153086911120664987656189069922028960"), boost::lexical_cast("-48.57290602853936778598444588838000320319188797120667088890627817071006819220"), boost::lexical_cast("86.48401303861623414105279810601960248737236193164692484110937025080244348070"), boost::lexical_cast("-59.34749838115491965382974741024204031184960541600602452546612244205852115450"), boost::lexical_cast("22.12683829000516493499208689759136028373805834965052266237848630047551885400"), boost::lexical_cast("-3.06820705468851142387494397352111576035038520405038204822630392926462913822"), boost::lexical_cast("-1.01844918784056167247769356011865100548861696497532359778154988643933299720"), boost::lexical_cast("0.548390155052322116601605108703391030814361014039987127607247780249699826925"), boost::lexical_cast("-0.0821665399305853726866950173051458732522788040166080680936985410341364899325"), boost::lexical_cast("-0.00259076138957212819580904996053947215856595645621290484740534408016060849032"), boost::lexical_cast("0.00158184168192186218699552573165552035786412989560027541837371028175219359299"), boost::lexical_cast("-0.0000486427797988048217823553064360225239762325535402325453015988941445205147689"), boost::lexical_cast("-0.00000278733673658518296782298192418270556801753284097037387222408724354826075481"), boost::lexical_cast("0.0000000415493043046997178773581906387206851820091297524869075078083888063058100083"), boost::lexical_cast("0.0000000000318481755988583873479575641293261720504490443808109780404429573043006066979"), boost::lexical_cast("-0.0000000000000786533511511639686500635180600662013025908347693905569053412273585440000541"), boost::lexical_cast("0.000000000000000000150164678504192250638011216866493543394290529002160876206865753397561385614"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 7) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("6.14186178805038248389630463226453535538160220630273168999055179268700878311"), boost::lexical_cast("-56.58718775023035303740954199011503276263410041781331860722827039023288201390"), boost::lexical_cast("236.79056117034701253831145295400349362659332673554984369468013095569697737800"), boost::lexical_cast("-589.74212764744550791699351051034231997851066299588318672773755627012133999100"), boost::lexical_cast("955.91771747407523740699612277021093282646971930388485874767008345752406868200"), boost::lexical_cast("-1018.25371372134704439175662005189756423202874621778366040811852543575681051000"), boost::lexical_cast("620.16534974073328124363357805606821825717843510348080668139769912997493261800"), boost::lexical_cast("118.09513214016409343018299161962983559825963510724745846686457205186992634000"), boost::lexical_cast("-1124.17593601667896107495596149804572042346983911263262865208494201555643863000"), boost::lexical_cast("2481.05019825971494606026459932673050920844604853044544044249826635533039896000"), boost::lexical_cast("-3958.72656316717252768182437149784469578445448081086451227500629910596142977000"), boost::lexical_cast("4892.08038810778226650447637979773553060005455552013373826491377287611549607000"), boost::lexical_cast("-4888.02985912371580185159900968286792361495832247558286519513525186654679328000"), boost::lexical_cast("4222.21851392745950660685593080126541478731847689276755099970578373193227197000"), boost::lexical_cast("-3301.02739698605769321367226000985199110976449700946791984290949429902919623000"), boost::lexical_cast("2249.11165074697026237037038692307185505620568793949311249024089637097353635000"), boost::lexical_cast("-1187.87398664007835892158563773173750314639645000950438376922380430030480509000"), boost::lexical_cast("398.94177525756891966681160860599524375229162312548764259215104838155477665200"), boost::lexical_cast("-32.92289515108174067117397420787028784793135289819773804980403784424237633870"), boost::lexical_cast("-38.90071447021924707376179244031261113671069629451701962465484487047604238050"), boost::lexical_cast("18.88702183332856460379524735396940221841668334008996536437289731073857378770"), boost::lexical_cast("-3.13472910313296479389678303201845822338839740930736804510308660361540192213"), boost::lexical_cast("-0.104405285224584684173481804595561114177382914767308859899431383064024115571"), boost::lexical_cast("0.0833671470549304163921288867140169654715033486774418851176340785841513622562"), boost::lexical_cast("-0.00381467578864364562968701846853701311666229039725704435440024110934078146310"), boost::lexical_cast("-0.000212300699997037803249607997697918026005513531720485603301750991443816531034"), boost::lexical_cast("0.00000444054082400028863949114022229769838935441151556537774085307875568116728653"), boost::lexical_cast("0.00000000509993859755275328806308874095727887214819535696251443253417433071486761002"), boost::lexical_cast("-0.0000000000167399975134582079218262940873121039789400471542818329635957062341003441119"), boost::lexical_cast("0.0000000000000000639212147850254313089119430941095253920739364313765534055842450107396358145"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 8) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.87573584867024438192288359005520927769283739845626908320402959675129181181"), boost::lexical_cast("-89.46249563427999259136175287546983385362056330272761288548978010797275886190"), boost::lexical_cast("413.53699835747096831461960515667083330041243777158520357367773071672954421000"), boost::lexical_cast("-1171.13814794944060840954109636487013129118793177524654224322494272585137735000"), boost::lexical_cast("2318.63986015396571592184876974869163171162613486972744615164020031916734488000"), boost::lexical_cast("-3550.00082837270164131331314150441834830049599401355505132632489796798446179000"), boost::lexical_cast("4641.11041485509138580464243430685343405509172986351525682383304436384521680000"), boost::lexical_cast("-5574.31228403733210075849705237883208794074944113113868870635833735655518388000"), boost::lexical_cast("6213.63809498218005198867412543832867815767594736394946861528827045454364892000"), boost::lexical_cast("-6270.42945837810044547764288676694403309477382977177928731847017182750753511000"), boost::lexical_cast("5712.25416364615036894363595935332173184639280691157188990767737995783827699000"), boost::lexical_cast("-4793.66410435252078277013910846939514432498915716171347756825555965008446551000"), boost::lexical_cast("3701.90566377778244662006515118308691363996241871472358316732096914372421991000"), boost::lexical_cast("-2545.73002939982681324232451707199314555811122671561913141889937616476059628000"), boost::lexical_cast("1525.76211545671409952881904946874414887615701953904066966165263931990216324000"), boost::lexical_cast("-799.67600361393244423210153323478015290110022742899088191532821628208931108000"), boost::lexical_cast("343.71466120684357322054217074049470228013278108322582312246908268821531549000"), boost::lexical_cast("-79.54296988918714825182831271113602645818430801267882016130158946025000070880"), boost::lexical_cast("-31.11742247721594622537736075250551303862928746280885436044292583853573827770"), boost::lexical_cast("39.24534373830708704714957239063819401930019800422830284025236588588276304120"), boost::lexical_cast("-16.49801465465629310378163586594498701051184640106636079791958143499072398020"), boost::lexical_cast("2.86471589853451505092762387909842635954128523779170775248876357690346385928"), boost::lexical_cast("0.123177932504841138584100462602213000414409636861317554953311729819152981937"), boost::lexical_cast("-0.107313432588339694252584996265922811157032804886175374104426839751272364880"), boost::lexical_cast("0.00773540599618550353141393406195746669996857798924014596151059620636703068705"), boost::lexical_cast("0.000403128635241149243596335554099377174869092597389189451754820571281078679507"), boost::lexical_cast("-0.0000121750336610624680031947143595873921578210617486500364426723519144528821747"), boost::lexical_cast("-0.0000000221216095903365985949388422841378231674809606300993758039913686908512670984"), boost::lexical_cast("0.0000000000911028045352580286145166937280851897647011765638383494849691163731056620327"), boost::lexical_cast("-0.000000000000000695776129234608161606962102284274675410179267386907251288229647263547841513"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 9) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("10.77830476909189246875213224644256434851574836114150288979408883932663408760"), boost::lexical_cast("-113.30679847949875283481197239555445238305089613518166263999502351065318841000"), boost::lexical_cast("537.51212592498992595355212803505674673365549040582999946710655984020061098100"), boost::lexical_cast("-1522.29663739785441603519129487498101658679127253026107709485943801614900510000"), boost::lexical_cast("2896.78977300861767873975381093516844970516257221777808353633619790702973572000"), boost::lexical_cast("-4053.73263591850224842595039982230587297183053442752128125465336858346975258000"), boost::lexical_cast("4692.16227410427044352689392249627854521349603478803164622820633019994975786000"), boost::lexical_cast("-5127.97602212282174693460907248514758996752003938521226665443443773461217536000"), boost::lexical_cast("5426.20224367656186913233154675879829819354550253827715074695101579354057124000"), boost::lexical_cast("-5045.15898544937188101087562784811147553356778814416690263956287346030906424000"), boost::lexical_cast("3863.31733313644020638644030085749560942435363977228787799940538794012224406000"), boost::lexical_cast("-2539.04417279695725930037661713449400977494982097924738163800547690349669888000"), boost::lexical_cast("1495.95152813312696164796032367069415490408732672326544293608639517256708804000"), boost::lexical_cast("-598.71338111144603167677059201789107648873467499782686184459249005987266004500"), boost::lexical_cast("-140.43812212582941929559905584906021898863758588035667146287549276998098600600"), boost::lexical_cast("493.12064121138670888525270736014297176175068242740057327881696669435953096300"), boost::lexical_cast("-501.64710764067763354144069937731667392246374465461102519748339502452412766200"), boost::lexical_cast("402.04913703308025098584676401156574655968469749939939291725245197030615330000"), boost::lexical_cast("-290.75476575334721451091504764009888592656309571548514827563707050104045459700"), boost::lexical_cast("165.55396459695871034570692084628299088745963671918908584151041422747359826100"), boost::lexical_cast("-61.56613007836500140570535045646327943146923286793207561329066790849269699840"), boost::lexical_cast("11.12724396838290672842395163676983586805573062177784417480776259950013093590"), boost::lexical_cast("0.616550439434153199469147689908320765572732324919216224085798570609031970737"), boost::lexical_cast("-0.614996772254297606838306172301584143891219608321996340606361952393554618405"), boost::lexical_cast("0.0653422092865749098941219576491799499470841617658284880902741473153604810456"), boost::lexical_cast("0.00344468033183476613063821405936170839437245968135759299996161161087759703491"), boost::lexical_cast("-0.000150905890468010880910940122626955537936454095361790792537415847674081059644"), boost::lexical_cast("-0.000000341390266894352391056312753971168883114216701317332621177306336321608604935"), boost::lexical_cast("0.00000000224655412582960893249160250701023608274672603071809480941098000782254450127"), boost::lexical_cast("-0.0000000000000343179206875786428614845147622090553145880464453051733061740197696623777452"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 10) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("8.40595389327657226503694497012483164362124209823619932408143213509789418142"), boost::lexical_cast("-90.18755588816675228829817416935430178296553880218263006522596252933799260750"), boost::lexical_cast("436.64933048343039643869664274295205972159884268297618856653635883730240629900"), boost::lexical_cast("-1265.24702078863967272446087300490983418244378482038979633311557029559187581000"), boost::lexical_cast("2479.49727416305844438566515309514579938046134972182762000607495793961979937000"), boost::lexical_cast("-3612.22404262013984275650095257916266122615183211172708920604427365997332248000"), boost::lexical_cast("4390.10461803162979442824063337386992495525825588510223744432684369166514283000"), boost::lexical_cast("-5022.12359523964154158524736614172785466023371493789078267642792825970442996000"), boost::lexical_cast("5604.78838183135573305540445463913574361373339338579848172772266429190600683000"), boost::lexical_cast("-5815.18068935187129727737790596258417265132106330711026316076022878535003649000"), boost::lexical_cast("5496.98944474809909883345018624513683552577448320588129783533814897200127901000"), boost::lexical_cast("-4879.68442203485471741212789690616385244300504302852282730946221011631520548000"), boost::lexical_cast("4119.29235509599810627701483024966303400343567833202767250947700453832737400000"), boost::lexical_cast("-3233.36775168650371444115689095291480507860192155181401201543648075525710965000"), boost::lexical_cast("2350.36811503737581431248480830061956015641307301010846976218535988613892099000"), boost::lexical_cast("-1605.19792304130910913657642308517047415091779052762305083384570282636342729000"), boost::lexical_cast("1010.49227947358451800455150244650563573753526087564849242400820565186861825000"), boost::lexical_cast("-566.62005573161101918270073525503120095406475610339310771504079035825340859100"), boost::lexical_cast("285.93792022547194485799602926303040314550718046007817587164843637458151043200"), boost::lexical_cast("-130.27678643673248754523842749099954235730480748012199117865803024394099262500"), boost::lexical_cast("46.38075945039597150032827358523901955451289440527106334217760766144442187450"), boost::lexical_cast("-8.30339600100546654050525461274557456779962476685870904307407201958336470745"), boost::lexical_cast("-1.31140444871530779856774818636439538472323427394561636210886717702287713836"), boost::lexical_cast("0.944443234286201477285280631764338282009445764538235481135279079602176865296"), boost::lexical_cast("-0.120612999220845884841770938047070126476556890469242771667061304639099680352"), boost::lexical_cast("-0.00612240592818620183859019486914162369755180328595090553906554353918907508111"), boost::lexical_cast("0.000501921174446894651071522876884881677798862264257444046312361569076439240403"), boost::lexical_cast("0.00000110015062442341106953762659845461877288849794732582550741170847972381078513"), boost::lexical_cast("-0.0000000149481631455733098677769729640496918070320996170917395536883890913165962523"), boost::lexical_cast("0.000000000000456766795438744131185097599240634110830128913864595728289285533008059188955"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 11) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("5.71662615388384035490661602572026128251294325475247692177411024734707018748"), boost::lexical_cast("-61.95261947504494240974525516761288737718458065654976960732742872670132713050"), boost::lexical_cast("299.92392362199005365846763014477362358033777481183567437527249031455105143600"), boost::lexical_cast("-854.38454227321882602012934795768021816131020192369607501580124187697270944900"), boost::lexical_cast("1600.36101077653647183632909120922276146512736031345582867483706653247060307000"), boost::lexical_cast("-2140.07738028486081463619489247776891689722101986432309104955433096170807913000"), boost::lexical_cast("2318.24362356424763321295439620892210840488958065858246141680343191186676880000"), boost::lexical_cast("-2452.55551014503575390323183594502097923638970524686355738420251386509103336000"), boost::lexical_cast("2704.76529653278947329663444759952034890877923302103630805132576388538972614000"), boost::lexical_cast("-2747.14673623756244311092333721767148045245885058383000695480413427282125343000"), boost::lexical_cast("2412.08489577605845461832534754288001056964932833568370698369648585962621442000"), boost::lexical_cast("-1983.24120175694784202508820179002467936094914905473739070428929084792886805000"), boost::lexical_cast("1626.87817837800998599505523804923350020881957088925397853144571494720023844000"), boost::lexical_cast("-1235.35137573220290037298796944863432831370478695788713485540725637661419976000"), boost::lexical_cast("821.37287700919909202293078059900314209961592538962184148238624773351355270700"), boost::lexical_cast("-512.36813276364982792979888767414531827457847125018199834823820044378682592500"), boost::lexical_cast("311.53646971596379276316317223887976975287113725456002799972326204795524864500"), boost::lexical_cast("-164.48146424429947905468701694679777546495466959145717581719894831842925074900"), boost::lexical_cast("69.96731728174455147890349889940708552672488525211671432746656999693968225190"), boost::lexical_cast("-26.73871180360852431769728634910008054094567759215735127221449159427110567160"), boost::lexical_cast("8.76604443915764102583091274494705031974551432188167671170993272943904796868"), boost::lexical_cast("-0.362003657126549623871141694778787300536949241545084284403839044422181900363"), boost::lexical_cast("-1.57725852000685070664686477385087762553122190528479055773272661383335169406"), boost::lexical_cast("0.726687291498781501912136314567313444745762140706471235702655842502262486103"), boost::lexical_cast("-0.103813322317258033888614985218841754913997474053598134379424827680388803266"), boost::lexical_cast("-0.00304317984052183404339782146911467997675320910745831815762231114417956519165"), boost::lexical_cast("0.000840398448358251520779467930923617673432444631095231180255579031943245676198"), boost::lexical_cast("0.00000250575256067101292262100569305822521295926652713304136991428596750128740360"), boost::lexical_cast("-0.0000000495611865767157365743127106863134595887690986921006107382476777985767199385"), boost::lexical_cast("0.00000000000302986770281715807340388725183309305879191944670327753347349945452961991743"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 12) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("2.98756545276892961683405920317400782688926167457213404606206894953469090570"), boost::lexical_cast("-32.53877041522938902748893248611882921380701347287193692458464408872270681770"), boost::lexical_cast("156.91107210642938297454108565759471733768304768928530524781265126236462047800"), boost::lexical_cast("-438.23328456607176854897749709031392294408668236354846841483816529557797373400"), boost::lexical_cast("781.40158298338287783314503913374413961456166368022728026502599517169883168300"), boost::lexical_cast("-944.00085736432437654121844433808421180478044182471803034745876831993387206200"), boost::lexical_cast("871.18702529100316496510657599432732757147821503683438970158984398762342159700"), boost::lexical_cast("-825.26225814663098471936651058959817182597766714375609693318512269093807603100"), boost::lexical_cast("933.10543384295409309368246495330995137453207941551441370036549134265538765800"), boost::lexical_cast("-949.83367150707461495067586025268239472985940864418244218914669709742438195200"), boost::lexical_cast("743.11107879726135141484801469462437364046148934147523506605304654685788997800"), boost::lexical_cast("-527.04406443888294920168702045857144963725142274860553582472478068752203879100"), boost::lexical_cast("421.33852360565335024951901100209978198412810212541506159854671267737618195800"), boost::lexical_cast("-306.02517342943412940702644642463233060183139335286436410908479737189261628600"), boost::lexical_cast("153.69934278480254603223204551372425554980051718272712837279730258851702658500"), boost::lexical_cast("-59.04932850218943944934225606851905428436217033134937163374348351651622137740"), boost::lexical_cast("25.92139276541304973776659197601093424514632883892831929110158475123035210590"), boost::lexical_cast("-0.962149888761450607548667577621856494158643540101329999411575837264452498654"), boost::lexical_cast("-17.01274493932990083951623416795053065446598743948526471513759064128883019650"), boost::lexical_cast("16.30256873151847666122910844100498304960224732436925588411210572182662140460"), boost::lexical_cast("-9.49371814172560994368165179232263581655149629936005381772523795944996123037"), boost::lexical_cast("5.93974208940926161725307281051166656360861938611697972636537005680715438577"), boost::lexical_cast("-3.56482176156890404621445412519261540357391040079386784517365108357090968874"), boost::lexical_cast("1.34272455281915240128955665480521952634664404440227746448796352198622736864"), boost::lexical_cast("-0.230525367745987004995002631304137357183156209105644834496304002576886379356"), boost::lexical_cast("-0.000137794698671713437634696681954243933103735285034498363332772681562760804986"), boost::lexical_cast("0.00344045989823171334589527993003846308427283936104805061708662437757755864133"), boost::lexical_cast("0.0000132013157638346537184564818139969682565470634989172759825885721468788821545"), boost::lexical_cast("-0.000000401010519633852578247631428587627292136452995638469407199569086176144778907"), boost::lexical_cast("0.0000000000490634895829511758823128551590445161881103933303527735015583380577005829440"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 13) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.818427536297577413662164686067597972826506918636591011690333183337912720187"), boost::lexical_cast("-8.93597254540483169304505499620510189518004297750684300492893393884837531090"), boost::lexical_cast("43.28505740826911943179704985609069278737276400385479670313947361507288590850"), boost::lexical_cast("-121.94941265554743093324264638861456116774169427109119662746887892891581414600"), boost::lexical_cast("221.17705504748540968473650066059868951479247074002625157942998465440826537800"), boost::lexical_cast("-275.49508889548757008568001670977657433955615658111585669026893704820453833800"), boost::lexical_cast("263.97430656654945046201101887433086255955773561111355779696585609107954522100"), boost::lexical_cast("-248.73210725434071237643827703257935321449607282648266512518873782422456148600"), boost::lexical_cast("268.03761105163175511980802546399577987927646399395524413177595218195546680300"), boost::lexical_cast("-274.74632577077619559794959711805873055919483442081245207387230106955552634800"), boost::lexical_cast("239.04459659450491561902145275774681231766178202091849139640330374817659226000"), boost::lexical_cast("-198.24079457638428918916507018047876417177573585609523087243911695920766059300"), boost::lexical_cast("171.17411060286929567487650609762363461665749097833059519177248964117986882700"), boost::lexical_cast("-137.92402486238060270403376601148674136697949366488773861402567537082900349700"), boost::lexical_cast("98.85338722312749675832616392395611353702627445403696398493090489812880274670"), boost::lexical_cast("-69.42924715436025679968823314670561196868618424662305178477940854240571797230"), boost::lexical_cast("48.19175883630122313265867563554087765085528907020382930380472297614957949970"), boost::lexical_cast("-30.01464950814868046242052769312726238783217187685035205505179037973211186450"), boost::lexical_cast("17.18299409341888528416337955184486836168042336837628442005969736301859437960"), boost::lexical_cast("-9.70772568832145809755029602593534775626803932755931576353380272720933569318"), boost::lexical_cast("4.95546002630693726392090932025925003607433594321786357647449706566309372496"), boost::lexical_cast("-2.14010864823626171034034636914985284178400701423559135938044246487466223776"), boost::lexical_cast("0.880041901487022196333800296293828350812076915017847173990679115863977711041"), boost::lexical_cast("-0.327483771390349393328449791379023445875626515179961154056969671224666397451"), boost::lexical_cast("0.0700050346208691475219456475608152516659372000469712274360723295281871848387"), boost::lexical_cast("0.0000740225367427644001587409378753952383212767606234921042405852483821239061334"), boost::lexical_cast("-0.00194483199670374685015094187211770910054778766605235293849027402856312150840"), boost::lexical_cast("-0.000000253088547271589825310570020884344496366999521135191317044614410762991878950"), boost::lexical_cast("0.000000470572493262891053536372764217043903584963956635299308538734504960681361207"), boost::lexical_cast("-0.000000000115303154806547333281398739726672346354039012152713743670663506289507432912"), boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 14) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.182096627390465002841872599753582960857482793103154443921292798922930823312"), boost::lexical_cast("-1.99067991923898541144309882988836202482422764820095134691586013396479875824"), boost::lexical_cast("9.59777139855370444734294750686163842012139708590050472898305559257417654445"), boost::lexical_cast("-26.61794828473449778541050916432452820900605760472867782882032588243833218460"), boost::lexical_cast("46.48235553993428243642096843754171537043857798264743456557286506206884999660"), boost::lexical_cast("-53.28952413012626128654306352591401630142078063921055789323943087480417380740"), boost::lexical_cast("43.78548547762683495894325883003176846356585388587214183280498394113771237500"), boost::lexical_cast("-36.10530005831753430370334734266356752826479202721810859304361182987411236780"), boost::lexical_cast("40.41441594328021583316039518661942961300602117705878612433379552772328367060"), boost::lexical_cast("-42.57519344340992846492391425032425629733148181868603643066418155132222692720"), boost::lexical_cast("33.69357696920429126980241665391486766936852157516836030131774633802657214380"), boost::lexical_cast("-24.99427184019678212351060274549661020691119426526756451144184518863090205460"), boost::lexical_cast("22.24082565201673464792084352820810035044717879419914422566840373427801119710"), boost::lexical_cast("-18.25836120586050027075089243454704089299356205520219684237280836587814742320"), boost::lexical_cast("11.75999525461842751380077638481339770186505465117919491977936260095287395430"), boost::lexical_cast("-7.57794751208369560067407289978430835851835802702956349867965768312335398938"), boost::lexical_cast("5.51625146977006284358570281266574340943582336186123580684755277118777603718"), boost::lexical_cast("-3.36170173645122190520455082014298086926033428887456137863348894911353768638"), boost::lexical_cast("1.65231565653810221017900302691080368910278392146172824258223867713998781120"), boost::lexical_cast("-0.899971991021384569041112723985746774474890344096613796399657618872823089914"), boost::lexical_cast("0.493379883919252205004540248830738351306813744782324207970147006276757888741"), boost::lexical_cast("-0.190465678173474433044011230247932891163095527351165979372112094377892415660"), boost::lexical_cast("0.0621662066439658745587942761812051647689996933574065948837820956985288446830"), boost::lexical_cast("-0.0260606091916674704141077213394275894517321034885463805642148072294982340641"), boost::lexical_cast("0.00668671436111235768206809845426737458018128101136661828669846361010276014213"), boost::lexical_cast("0.000501800405113171457500759977346203260700591357705539339843489778157288724465"), boost::lexical_cast("-0.000404641953708090404336673259880430820473496337074290841846682708432617331297"), boost::lexical_cast("0.00000622939193262507048296472703033235853521538144434623520667251347304027494807"), boost::lexical_cast("0.000000227216792432532934218802486321263209684697324571081185820714866955957698807"), boost::lexical_cast("-0.000000000111648115236885172375463021306155593347638298619118930265825307233276056732"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - if constexpr (order == 15) { - return {boost::lexical_cast("0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00"), boost::lexical_cast("0.0186632063341731699487622519569900676156629675744736414459848077254980584439"), boost::lexical_cast("-0.204152410105326344047690139058847944463463829383572825741723149474265517687"), boost::lexical_cast("0.981129778506629236917943314009391202465976027147847806934681206721129743489"), boost::lexical_cast("-2.69223973647360950767394915742670959250796023828609553625040576017143217370"), boost::lexical_cast("4.57840474748508233139703474514191577520139760766602312536057813786879861719"), boost::lexical_cast("-4.92279254466715210570744929069389870019317731597159546050988432127489832899"), boost::lexical_cast("3.49098196027493477759169680079840596940785122938110897581250074622145540830"), boost::lexical_cast("-2.43745302882351007548114866638762563227820344626399026957104467610746424919"), boost::lexical_cast("2.92002235517806230637018721558192349007812525216552453182604910919733517109"), boost::lexical_cast("-3.24373461024153144136567992763463788222027847288621903947814561657763790774"), boost::lexical_cast("2.33058809298308412023805776435915774549596651226832414404182013235265783095"), boost::lexical_cast("-1.50268473155783226586328187697167000171012304032869369458457484335905926235"), boost::lexical_cast("1.44521613506514880646597775935884860442911229706573188445594135154651054603"), boost::lexical_cast("-1.25320563215574317573983783719179686555846390567587617560334570616539136371"), boost::lexical_cast("0.716523991653864912132988574383055048288486387296028098428465297303529312898"), boost::lexical_cast("-0.417685734682996474655995981787950272634517973441398985560062415678439970424"), boost::lexical_cast("0.343615439131547337750639931144047450610704550982732392292547279251562842012"), boost::lexical_cast("-0.210599151040031056875841224107239694928740122133299240427666270185426716963"), boost::lexical_cast("0.0839111741718053411362323568803319587928469795988859679968270250707587553192"), boost::lexical_cast("-0.0453350931889210140035133942035842323703748999105117340363647560154703981313"), boost::lexical_cast("0.0293975150903577374499867887808058812502982622650503969014313916908299400994"), boost::lexical_cast("-0.00952380952701618903633264790459773368829395336984965315811681382826752366623"), boost::lexical_cast("0.00162356389207281836884637948122226515491709153554839790386903440166058269155"), boost::lexical_cast("-0.00107233008114088588860897903711349245756991842194937466975676115541205802164"), boost::lexical_cast("0.000309594820880373636252028432067839316250026602381083168344278875876631484733"), boost::lexical_cast("0.000159116759294319410028654591726757975556683309929396718417834438386747643662"), boost::lexical_cast("-0.0000716868960901604452106499159427785061407281838428321680583983254056627687328"), boost::lexical_cast("0.00000372192590676834494238303138990722411083877718883831917839190468860584330496"), boost::lexical_cast("0.000000106273060435352363021386153934099392277182493972188516192741747367832383831"), boost::lexical_cast("-0.000000000105004095727400196995819073889347146562377832036002728993854591918261645500"), boost::lexical_cast("-0.00000000000000000000000000000000000000000000000000000000000000000000000000e+00")}; - } - } - } std::array m{}; - for (auto & x : m) { - x = std::numeric_limits::quiet_NaN(); - } - return m; + return daubechies_scaling_integer_grid_imp::value; } } // namespaces From b79d622861d08d97e847c869a86a4a2f9f93d758 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Tue, 25 Feb 2020 14:35:55 +0000 Subject: [PATCH 059/104] septic hermite: remove some stray letters (typos). --- .../boost/math/interpolators/detail/septic_hermite_detail.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 5e26d8805..c0f8528fa 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -336,7 +336,7 @@ public: return dydx; } - inline Real double_prime(Real x) constq + inline Real double_prime(Real x) const { Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) @@ -537,7 +537,7 @@ public: if (x == xf) { return data_.back()[2]*2*inv_dx_*inv_dx_; - }q + } return this->unchecked_double_prime(x); } From d6eb9ca78cc9f72d4fcd9f23eccada2d2a679bb9 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 27 Feb 2020 06:49:37 -0500 Subject: [PATCH 060/104] Remove unused variable [CI SKIP] --- example/daubechies_wavelets/daubechies_plots.cpp | 6 +++--- .../daubechies_wavelets/daubechies_scaling_integer_grid.cpp | 1 - .../detail/daubechies_scaling_integer_grid.hpp | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_plots.cpp b/example/daubechies_wavelets/daubechies_plots.cpp index 96e8ce419..7776909a1 100644 --- a/example/daubechies_wavelets/daubechies_plots.cpp +++ b/example/daubechies_wavelets/daubechies_plots.cpp @@ -84,8 +84,8 @@ void plot_condition_number() using std::log; static_assert(p >= 3, "p = 2 is not differentiable, so condition numbers cannot be effectively evaluated."); auto phi = boost::math::daubechies_scaling(); - Real a = 1000*std::numeric_limits::epsilon(); - Real b = phi.support().second - 1000*std::numeric_limits::epsilon(); + Real a = std::sqrt(std::numeric_limits::epsilon()); + Real b = phi.support().second - 1000*std::sqrt(std::numeric_limits::epsilon()); std::string title = "log10 of condition number of function evaluation for Daubechies " + std::to_string(p) + " scaling function."; std::string filename = "daubechies_" + std::to_string(p) + "_scaling_condition_number.svg"; @@ -106,7 +106,7 @@ void plot_condition_number() if (isnan(z)) { // Graphing libraries don't like nan's: - return Real(1); + return Real(1); } return log10(z); }; diff --git a/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp index 1dc55bfe2..703c94b0e 100644 --- a/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp +++ b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp @@ -203,7 +203,6 @@ int main() << " static_assert(sizeof(Real) <= 16, \"Integer grids only computed up to 128 bits of precision.\");\n" << " static_assert(p <= " << p_max << ", \"Integer grids only implemented up to " << p_max << ".\");\n" << " static_assert(p > 1, \"Integer grids only implemented for p >= 2.\");\n" - << " std::array m{};\n" << " return daubechies_scaling_integer_grid_imp::value;\n" << "}\n\n"; diff --git a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp index 208093342..d10fd232e 100644 --- a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +++ b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp @@ -237,7 +237,6 @@ constexpr inline std::array daubechies_scaling_integer_grid() static_assert(sizeof(Real) <= 16, "Integer grids only computed up to 128 bits of precision."); static_assert(p <= 18, "Integer grids only implemented up to 18."); static_assert(p > 1, "Integer grids only implemented for p >= 2."); - std::array m{}; return daubechies_scaling_integer_grid_imp::value; } From 98a6fb3a2f1f024851a8dae782c01a36e076d3d4 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 27 Feb 2020 10:40:58 -0500 Subject: [PATCH 061/104] Clean up plots [CI SKIP] --- .../daubechies_wavelets/daubechies_plots.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_plots.cpp b/example/daubechies_wavelets/daubechies_plots.cpp index 7776909a1..9c0520b67 100644 --- a/example/daubechies_wavelets/daubechies_plots.cpp +++ b/example/daubechies_wavelets/daubechies_plots.cpp @@ -26,9 +26,11 @@ void plot_phi(int grid_refinements = -1) Real a = 0; Real b = phi.support().second; std::string title = "Daubechies " + std::to_string(p) + " scaling function"; + title = ""; std::string filename = "daubechies_" + std::to_string(p) + "_scaling.svg"; int samples = 1024; quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); + daub.set_gridlines(8, 2*p-1); daub.set_stroke_width(1); daub.add_fn(phi); daub.write_all(); @@ -45,10 +47,12 @@ void plot_dphi(int grid_refinements = -1) Real a = 0; Real b = phi.support().second; std::string title = "Daubechies " + std::to_string(p) + " scaling function derivative"; + title = ""; std::string filename = "daubechies_" + std::to_string(p) + "_scaling_prime.svg"; int samples = 1024; quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); daub.set_stroke_width(1); + daub.set_gridlines(8, 2*p-1); auto dphi = [phi](Real x)->Real { return phi.prime(x); }; daub.add_fn(dphi); daub.write_all(); @@ -61,10 +65,12 @@ void plot_convergence() Real a = 0; Real b = phi0.support().second; std::string title = "Daubechies " + std::to_string(p) + " scaling at 0 (green), 1 (orange), 2 (red), and 24 (blue) grid refinements"; + title = ""; std::string filename = "daubechies_" + std::to_string(p) + "_scaling_convergence.svg"; quicksvg::graph_fn daub(a, b, title, filename, 1024, GRAPH_WIDTH); daub.set_stroke_width(1); + daub.set_gridlines(8, 2*p-1); daub.add_fn(phi0, "green"); auto phi1 = boost::math::daubechies_scaling(1); @@ -74,6 +80,7 @@ void plot_convergence() auto phi21 = boost::math::daubechies_scaling(21); daub.add_fn(phi21); + daub.write_all(); } @@ -87,11 +94,13 @@ void plot_condition_number() Real a = std::sqrt(std::numeric_limits::epsilon()); Real b = phi.support().second - 1000*std::sqrt(std::numeric_limits::epsilon()); std::string title = "log10 of condition number of function evaluation for Daubechies " + std::to_string(p) + " scaling function."; + title = ""; std::string filename = "daubechies_" + std::to_string(p) + "_scaling_condition_number.svg"; quicksvg::graph_fn daub(a, b, title, filename, 2048, GRAPH_WIDTH); daub.set_stroke_width(1); + daub.set_gridlines(8, 2*p-1); auto cond = [&phi](Real x) { @@ -120,10 +129,14 @@ void do_ulp(int coarse_refinements, PhiPrecise phi_precise) auto phi_coarse = boost::math::daubechies_scaling(coarse_refinements); std::string title = std::to_string(p) + " vanishing moment ULP plot at " + std::to_string(coarse_refinements) + " refinements and " + boost::core::demangle(typeid(CoarseReal).name()) + " precision"; + title = ""; + std::string filename = "daubechies_" + std::to_string(p) + "_" + boost::core::demangle(typeid(CoarseReal).name()) + "_" + std::to_string(coarse_refinements) + "_refinements.svg"; int samples = 20000; int clip = 20; - quicksvg::ulp_plot(phi_coarse, phi_precise, CoarseReal(0), phi_coarse.support().second, title, filename, samples, GRAPH_WIDTH, clip); + int horizontal_lines = 8; + int vertical_lines = 2*p - 1; + quicksvg::ulp_plot(phi_coarse, phi_precise, CoarseReal(0), phi_coarse.support().second, title, filename, samples, GRAPH_WIDTH, clip, horizontal_lines, vertical_lines); } @@ -189,7 +202,7 @@ int main() using PreciseReal = float128; using CoarseReal = double; int precise_refinements = 22; - constexpr const int p = 12; + constexpr const int p = 8; std::cout << "Computing precise scaling function in " << boost::core::demangle(typeid(PreciseReal).name()) << " precision.\n"; auto phi_precise = boost::math::daubechies_scaling(precise_refinements); std::cout << "Beginning comparison with functions computed in " << boost::core::demangle(typeid(CoarseReal).name()) << " precision.\n"; From a7c5ae6d8c62c6e1c653ee1d19bde2c13b9c1e30 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Fri, 28 Feb 2020 08:18:43 -0500 Subject: [PATCH 062/104] Give option to control absolute error [CI SKIP] --- .../find_best_daubechies_interpolator.cpp | 147 ++++++++---------- .../special_functions/daubechies_scaling.hpp | 17 +- 2 files changed, 78 insertions(+), 86 deletions(-) diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index 2cfb7f268..03d19f3ba 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include @@ -35,99 +35,66 @@ void choose_refinement() { std::cout << "Choosing refinement for " << boost::core::demangle(typeid(Real).name()) << " precision Daubechies scaling function with " << p << " vanishing moments.\n"; using std::abs; - int rmax = 21; + int rmax = 22; auto phi_dense = boost::math::detail::dyadic_grid(rmax); Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - for (int r = 2; r <= rmax - 2; ++r) + for (int r = 2; r <= 12; ++r) { - auto phi_accurate = boost::math::detail::dyadic_grid(r); - std::vector phi(phi_accurate.size()); - for (size_t i = 0; i < phi_accurate.size(); ++i) - { - phi[i] = Real(phi_accurate[i]); - } - auto phi_prime_accurate = boost::math::detail::dyadic_grid(r); - std::vector phi_prime(phi_accurate.size()); - for (size_t i = 0; i < phi_prime_accurate.size(); ++i) - { - phi_prime[i] = Real(phi_prime_accurate[i]); - } + Real dx = Real(1)/ (1 << r); + std::cout << "\tdx = 1/" << (1/dx) << " = 1/2^" << r << " = " << dx << "\n"; + auto phi = boost::math::daubechies_scaling(r); + Real max_flt_distance = 0; + Real sup = 0; + Real rel_sup = 0; + Real worst_flt_abscissa = 0; + Real worst_flt_value = 0; + Real worst_flt_computed = 0; - Real dx = (2*p-1)/static_cast(phi.size()-1); - std::cout << "\tdx = 1/" << (1/dx) << " = " << dx << "\n"; + Real worst_rel_abscissa = 0; + Real worst_rel_value = 0; + Real worst_rel_computed = 0; - if constexpr (p < 6 && p >= 3) + Real worst_abs_abscissa = 0; + Real worst_abs_computed = 0; + Real worst_abs_expected = 0; + for (size_t i = 0; i < phi_dense.size(); ++i) { - auto ch = boost::math::interpolators::cardinal_cubic_hermite(std::move(phi), std::move(phi_prime), Real(0), Real(dx)); - Real flt_distance = 0; - Real sup = 0; - Real worst_abscissa = 0; - Real worst_value = 0; - Real worst_computed = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) + Real t = i*dx_dense; + Real computed = phi(t); + Real expected = Real(phi_dense[i]); + Real abs_diff = abs(computed - expected); + Real rel_diff = abs_diff/abs(expected); + Real flt_distance = abs(boost::math::float_distance(computed, expected)); + if (flt_distance > max_flt_distance) { - Real t = i*dx_dense; - Real computed = ch(t); - Real expected = Real(phi_dense[i]); - if (std::abs(expected) < 100*std::numeric_limits::epsilon()) - { - continue; - } - Real diff = abs(computed - expected); - Real distance = abs(boost::math::float_distance(computed, expected)); - if (distance > flt_distance) - { - flt_distance = distance; - worst_abscissa = t; - worst_value = expected; - worst_computed = computed; - } - if (diff > sup) - { - sup = diff; - } + max_flt_distance = flt_distance; + worst_flt_abscissa = t; + worst_flt_value = expected; + worst_flt_computed = computed; } - std::cout << "\t\tFloat distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; - std::cout << "\t\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; - } - else if constexpr (p >= 6) - { - auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); - auto qh = boost::math::interpolators::cardinal_quintic_hermite(std::move(phi), std::move(phi_prime), std::move(phi_dbl_prime), Real(0), dx); - Real flt_distance = 0; - Real sup = 0; - Real worst_abscissa = 0; - Real worst_value = 0; - Real worst_computed = 0; - for (size_t i = 0; i < phi_dense.size(); ++i) + if (expected != 0 && rel_diff > rel_sup) { - Real t = i*dx_dense; - Real computed = qh(t); - Real expected = Real(phi_dense[i]); - if (std::abs(expected) < 100*std::numeric_limits::epsilon()) - { - continue; - } + rel_sup = rel_diff; + worst_rel_abscissa = t; + worst_rel_value = expected; + worst_rel_computed = computed; - Real diff = abs(computed - expected); - Real distance = abs(boost::math::float_distance(computed, expected)); - if (distance > flt_distance) - { - flt_distance = distance; - worst_abscissa = t; - worst_value = expected; - worst_computed = computed; - } - if (diff > sup) - { - sup = diff; - } - std::cout << "Float distance at r = " << r << " is " << flt_distance << ", sup distance = " << sup << "\n"; - std::cout << "\tWorst abscissa = " << worst_abscissa << ", worst value = " << worst_value << ", computed = " << worst_computed << "\n"; + } + if (abs_diff > sup) + { + sup = abs_diff; + worst_abs_abscissa = t; + worst_abs_computed = computed; + worst_abs_expected = expected; } } + std::cout << "\t\tFloat distance at r = " << r << " is " << max_flt_distance << ", sup distance = " << sup << ", max relative error = " << rel_sup << "\n"; + std::cout << "\t\tWorst flt abscissa = " << worst_flt_abscissa << ", worst expected value = " << worst_flt_value << ", computed = " << worst_flt_computed << "\n"; + std::cout << "\t\tWorst rel abscissa = " << worst_rel_abscissa << ", worst expected value = " << worst_rel_value << ", computed = " << worst_rel_computed << "\n"; + std::cout << "\t\tWorst abs abscissa = " << worst_abs_abscissa << ", worst expected value = " << worst_abs_computed << ", worst abs value (expected) = " << worst_abs_expected << "\n"; } + std::cout << "\n\n\n"; } template @@ -560,11 +527,25 @@ void find_best_interpolator() } int main() { - //choose_refinement(); + /*choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement();*/ + + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); + choose_refinement(); //choose_refinement(); //choose_refinement(); // Says linear interpolation is the best: - find_best_interpolator(); + /*find_best_interpolator(); // Says linear interpolation is the best: find_best_interpolator(); // Says cubic_hermite_spline is best: @@ -590,5 +571,5 @@ int main() { // Says septic_hermite_spline is best: find_best_interpolator(); // Says septic_hermite_spline is best: - find_best_interpolator(); + find_best_interpolator();*/ } diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index d1e4092b8..657a2e0e8 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -252,9 +252,20 @@ public: { if (std::is_same_v) { - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - std::array r{-1, -1, 22, 21, 19, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11}; - grid_refinements = r[p]; + if (grid_refinements == -2) + { + // Control absolute error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4}; + grid_refinements = r[p]; + } + else + { + // Control relative error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 + std::array r{-1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11}; + grid_refinements = r[p]; + } } else if (std::is_same_v) { From dc52a787c8eacd9d45d9d674a0d479e6f577ba1f Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Fri, 28 Feb 2020 17:24:38 +0000 Subject: [PATCH 063/104] daubechies.hpp: simplify header and reduce dependencies. --- .../daubechies_coefficients.cpp | 61 +-- include/boost/math/filters/daubechies.hpp | 355 ++---------------- test/Jamfile.v2 | 1 + test/compile_test/daubechies_incl_test.cpp | 33 ++ 4 files changed, 69 insertions(+), 381 deletions(-) create mode 100644 test/compile_test/daubechies_incl_test.cpp diff --git a/example/daubechies_wavelets/daubechies_coefficients.cpp b/example/daubechies_wavelets/daubechies_coefficients.cpp index 23349defa..1366e921c 100644 --- a/example/daubechies_wavelets/daubechies_coefficients.cpp +++ b/example/daubechies_wavelets/daubechies_coefficients.cpp @@ -17,8 +17,14 @@ #include #include #include +#ifdef BOOST_HAS_FLOAT128 #include -#include + +typedef boost::multiprecision::float128 float128_t; +#else +typedef boost::multiprecision::cpp_bin_float_quad float128_t; +#endif +//#include #include using std::string; @@ -220,10 +226,8 @@ int main() << "#ifndef BOOST_MATH_FILTERS_DAUBECHIES_HPP\n" << "#define BOOST_MATH_FILTERS_DAUBECHIES_HPP\n" << "#include \n" - << "#ifdef BOOST_HAS_FLOAT128\n" - << "#include \n" - << "#endif\n" - << "#include \n" + << "#include \n" + << "#include \n\n" << "namespace boost::math::filters {\n\n" << "template \n" << "constexpr std::array daubechies_scaling_filter()\n" @@ -232,54 +236,15 @@ int main() for(size_t p = 1; p < p_max; ++p) { - fs << std::hexfloat; + fs << std::setprecision(std::numeric_limits::max_digits10); auto roots = find_roots(p); auto h = daubechies_coefficients(roots); fs << " if constexpr (p == " << p << ") {\n"; - fs << " if constexpr (std::is_same_v) {\n"; - fs << " return {"; + fs << " return {"; for (size_t i = 0; i < h.size() - 1; ++i) { - fs << static_cast(h[i]) << "f, "; + fs << "BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, " << h[i] << "), "; } - fs << static_cast(h[h.size()-1]) << "f};\n"; - fs << " }\n"; - - fs << " if constexpr (std::is_same_v) {\n"; - fs << " return {"; - for (size_t i = 0; i < h.size() - 1; ++i) { - fs << static_cast(h[i]) << ", "; - } - fs << static_cast(h[h.size()-1]) << "};\n"; - fs << " }\n"; - - fs << " if constexpr (std::is_same_v) {\n"; - fs << " return {"; - for (size_t i = 0; i < h.size() - 1; ++i) { - fs << static_cast(h[i]) << "L, "; - } - fs << static_cast(h[h.size()-1]) << "L};\n"; - fs << " }\n"; - - fs << " #ifdef BOOST_HAS_FLOAT128\n"; - fs << " if constexpr (std::is_same_v) {\n"; - fs << " return {"; - for (size_t i = 0; i < h.size() - 1; ++i) { - fs << static_cast(h[i]) << "Q, "; - } - fs << static_cast(h[h.size()-1]) << "Q};\n"; - fs << " }\n"; - fs << " #endif\n"; - - fs << " if constexpr (std::is_same_v) {\n"; - fs << " return {"; - fs <::digits10 + 3); - for (size_t i = 0; i < h.size() - 1; ++i) { - fs << "boost::lexical_cast(\"" << static_cast(h[i]) << "\"), "; - } - fs << "boost::lexical_cast(\"" << static_cast(h[h.size()-1]) << "\")};\n"; - fs << " }\n"; - - + fs << "BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, " << h[h.size()-1] << ") };\n"; fs << " }\n"; } diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp index 9682b54d1..c60ce27f8 100644 --- a/include/boost/math/filters/daubechies.hpp +++ b/include/boost/math/filters/daubechies.hpp @@ -7,382 +7,71 @@ #ifndef BOOST_MATH_FILTERS_DAUBECHIES_HPP #define BOOST_MATH_FILTERS_DAUBECHIES_HPP #include -#ifdef BOOST_HAS_FLOAT128 -#include -#endif -#include +#include +#include + namespace boost::math::filters { -#ifdef BOOST_MATH_GENERATE_DAUBECHIES_GRID -typedef boost::multiprecision::number, boost::int32_t, -262142, 262143>, boost::multiprecision::et_off> octuple_type; -#else -typedef boost::multiprecision::cpp_bin_float_oct octuple_type; -#endif - template constexpr std::array daubechies_scaling_filter() { static_assert(p < 20, "Filter coefficients only implemented up to 19."); if constexpr (p == 1) { - if constexpr (std::is_same_v) { - return {0x1.6a09e6p-1f, 0x1.6a09e6p-1f}; - } - if constexpr (std::is_same_v) { - return {0x1.6a09e667f3bcdp-1, 0x1.6a09e667f3bcdp-1}; - } - if constexpr (std::is_same_v) { - return {0xb.504f333f9de6484p-4L, 0xb.504f333f9de6484p-4L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.6a09e667f3bcc908b2fb1366ea95p-1Q, 0x1.6a09e667f3bcc908b2fb1366ea95p-1Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195"), boost::lexical_cast("0.707106781186547524400844362104849039284835937688474036588339868995366237195")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.70710678118654752440084436210484903928483593768847403658833986899536623923), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.70710678118654752440084436210484903928483593768847403658833986899536623923) }; } if constexpr (p == 2) { - if constexpr (std::is_same_v) { - return {0x1.ee8dd4p-2f, 0x1.ac4bdep-1f, 0x1.cb0bfp-3f, -0x1.0907dcp-3f}; - } - if constexpr (std::is_same_v) { - return {0x1.ee8dd4748bf15p-2, 0x1.ac4bdd6e3fd71p-1, 0x1.cb0bf0b6b7109p-3, -0x1.0907dc193069p-3}; - } - if constexpr (std::is_same_v) { - return {0xf.746ea3a45f8a62ap-5L, 0xd.625eeb71feb8557p-4L, 0xe.585f85b5b8845bdp-6L, -0x8.483ee0c9834834cp-6L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.ee8dd4748bf14c548b969de58fap-2Q, 0x1.ac4bdd6e3fd70aae9f48d8a63d1bp-1Q, 0x1.cb0bf0b6b7108b79b4bf11d08b16p-3Q, -0x1.0907dc1930690697b13714fd4a15p-3Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.482962913144534143374871599864448683816952419504202275201171538155211606550"), boost::lexical_cast("0.836516303737807905575293780916873203459370388348439293495341472652894725147"), boost::lexical_cast("0.224143868042013381025972762240400355467883518184271761387168330840154631777"), boost::lexical_cast("-0.129409522551260381174449418812024164174534450659965256907001603657528486820")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.48296291314453414337487159986444868381695241950420227520117153815521160699), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.83651630373780790557529378091687320345937038834843929349534147265289472661), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.22414386804201338102597276224040035546788351818427176138716833084015463224), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.12940952255126038117444941881202416417453445065996525690700160365752848737) }; } if constexpr (p == 3) { - if constexpr (std::is_same_v) { - return {0x1.54a796p-2f, 0x1.9d20e2p-1f, 0x1.d6ea2p-2f, -0x1.1480a8p-3f, -0x1.5df7acp-4f, 0x1.2092e4p-5f}; - } - if constexpr (std::is_same_v) { - return {0x1.54a796e50d264p-2, 0x1.9d20e247d28bbp-1, 0x1.d6ea20bf0f744p-2, -0x1.1480a85c59629p-3, -0x1.5df7ab50d483cp-4, 0x1.2092e373789b9p-5}; - } - if constexpr (std::is_same_v) { - return {0xa.a53cb7286931db4p-5L, 0xc.e907123e945da19p-4L, 0xe.b75105f87ba23d6p-5L, -0x8.a40542e2cb14943p-6L, -0xa.efbd5a86a41e206p-7L, 0x9.04971b9bc4dcbc1p-8L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.54a796e50d263b67e38e82a5584cp-2Q, 0x1.9d20e247d28bb431f1e6c634b34ep-1Q, 0x1.d6ea20bf0f7447ac92de97f0e152p-2Q, -0x1.1480a85c596292857548d060a171p-3Q, -0x1.5df7ab50d483c40c41dbcf2191cfp-4Q, 0x1.2092e373789b9781e66814a5fa37p-5Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.332670552950082615998511589139005630012923399245068359708470578551793724009"), boost::lexical_cast("0.806891509311092576494493604088713490519297394994823618165092063603486835060"), boost::lexical_cast("0.459877502118491570095151942147616720808110177431492306643386780248640335647"), boost::lexical_cast("-0.135011020010254588696389906699374480562219845223781191975686255357062767858"), boost::lexical_cast("-0.0854412738820266616928191691817733115361976389880866297635174898050678201973"), boost::lexical_cast("0.0352262918857095366027406647155100293277583879174316103989340607489421719736")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.33267055295008261599851158913900563001292339924506835970847057855179372371), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.80689150931109257649449360408871349051929739499482361816509206360348683533), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.45987750211849157009515194214761672080811017743149230664338678024864033563), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.135011020010254588696389906699374480562219845223781191975686255357062768), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.085441273882026661692819169181773311536197638988086629763517489805067820106), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.035226291885709536602740664715510029327758387917431610398934060748942171898) }; } if constexpr (p == 4) { - if constexpr (std::is_same_v) { - return {0x1.d7d052p-3f, 0x1.6e005ep-1f, 0x1.4302cep-1f, -0x1.ca7c7p-6f, -0x1.7f0c1cp-3f, 0x1.f94e22p-6f, 0x1.0d60acp-5f, -0x1.5b4174p-7f}; - } - if constexpr (std::is_same_v) { - return {0x1.d7d052af15ecp-3, 0x1.6e005ea45d748p-1, 0x1.4302cdd3de43ap-1, -0x1.ca7c6f9db5bfbp-6, -0x1.7f0c1b7c604d4p-3, 0x1.f94e2196383a9p-6, 0x1.0d60ac768117bp-5, -0x1.5b41730b72e29p-7}; - } - if constexpr (std::is_same_v) { - return {0xe.be829578af5fe6dp-6L, 0xb.7002f522eba3e31p-4L, 0xa.18166e9ef21cf0dp-4L, -0xe.53e37cedadfd7d8p-9L, -0xb.f860dbe30269f7ap-6L, 0xf.ca710cb1c1d472dp-9L, 0x8.6b0563b408bdbabp-8L, -0xa.da0b985b97149dcp-10L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.d7d052af15ebfcd98dc85ef4cc01p-3Q, 0x1.6e005ea45d747c624e43405b1919p-1Q, 0x1.4302cdd3de439e1a299a6a04b89fp-1Q, -0x1.ca7c6f9db5bfafb07b9dace22f7p-6Q, -0x1.7f0c1b7c604d3ef4ab50462dfcedp-3Q, 0x1.f94e2196383a8e592495a4baff62p-6Q, 0x1.0d60ac768117b7550c2a3307e30fp-5Q, -0x1.5b41730b72e293b823fb2cbd40c6p-7Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.230377813308896500863291183044070850001615248248309297791096844028271643620"), boost::lexical_cast("0.714846570552915647089921955273992603707608401099308175845011003442625044997"), boost::lexical_cast("0.630880767929858907881716338300615220203222922677195117405747328484353359854"), boost::lexical_cast("-0.0279837694168598542114137471800753854119873202244917528400335826533630929593"), boost::lexical_cast("-0.187034811719093084079570672789081419584544174374580091205777087593992585799"), boost::lexical_cast("0.0308413818355607636272193625349590501703148217200340334182121909360632337258"), boost::lexical_cast("0.0328830116668851997354075135492443886645419411375497125972727840767338203692"), boost::lexical_cast("-0.0105974017850690321048832085240272291810999649063764198348497427299589480739")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.23037781330889650086329118304407085000161524824830929779109684402827164374), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.71484657055291564708992195527399260370760840109930817584501100344262504653), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.63088076792985890788171633830061522020322292267719511740574732848435336141), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.027983769416859854211413747180075385411987320224491752840033582653363093001), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.18703481171909308407957067278908141958454417437458009120577708759399258629), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.030841381835560763627219362534959050170314821720034033418212190936063233775), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.032883011666885199735407513549244388664541941137549712597272784076733820371), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.01059740178506903210488320852402722918109996490637641983484974272995894807) }; } if constexpr (p == 5) { - if constexpr (std::is_same_v) { - return {0x1.47e3c4p-3f, 0x1.35291cp-1f, 0x1.72d892p-1f, 0x1.1b8038p-3f, -0x1.f0384ep-3f, -0x1.082664p-5f, 0x1.3dbb9cp-4f, -0x1.990ad4p-8f, -0x1.9c3fp-7f, 0x1.b5385ep-9f}; - } - if constexpr (std::is_same_v) { - return {0x1.47e3c41a7b911p-3, 0x1.35291c2c4b00cp-1, 0x1.72d89143b54f5p-1, 0x1.1b80373befcc6p-3, -0x1.f0384d3f81474p-3, -0x1.0826648a8dc74p-5, 0x1.3dbb9b52515aap-4, -0x1.990ad4579f2e8p-8, -0x1.9c3eff3294128p-7, 0x1.b5385e04e3c09p-9}; - } - if constexpr (std::is_same_v) { - return {0xa.3f1e20d3dc8840dp-6L, 0x9.a948e1625806185p-4L, 0xb.96c48a1daa7a767p-4L, 0x8.dc01b9df7e62cc6p-6L, -0xf.81c269fc0a3a1e2p-6L, -0x8.413324546e39fcbp-8L, 0x9.eddcda928ad4cf6p-7L, -0xc.c856a2bcf973f17p-11L, -0xc.e1f7f994a094303p-10L, 0xd.a9c2f0271e04896p-12L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.47e3c41a7b91081ae95ed12670b7p-3Q, 0x1.35291c2c4b00c30a87eaf4d05e71p-1Q, 0x1.72d89143b54f4ecd724f0b79d111p-1Q, 0x1.1b80373befcc598b25a1d5436079p-3Q, -0x1.f0384d3f814743c3d93da5cd8909p-3Q, -0x1.0826648a8dc73f96ef19214f403ep-5Q, 0x1.3dbb9b52515a99ecaa66a225e968p-4Q, -0x1.990ad4579f2e7e2dc54832641bd8p-8Q, -0x1.9c3eff32941286062a45cb776526p-7Q, 0x1.b5385e04e3c0912c23cbbf7041e8p-9Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.160102397974192914480723748020420733650544124625057832772569920207547214207"), boost::lexical_cast("0.603829269797189670540119306525062107507422163101698698796928336036862837113"), boost::lexical_cast("0.724308528437772927728071244102218640768756218232007372576733504804092797357"), boost::lexical_cast("0.138428145901320731505397146339024697314105791173956102269465221088552175948"), boost::lexical_cast("-0.242294887066382031862571379474616361991490808062618598391372691341065474637"), boost::lexical_cast("-0.0322448695846383746484797550621349283135649841637984722543426813198116091835"), boost::lexical_cast("0.0775714938400457135231304893886018198062309945201252798321014623895567160574"), boost::lexical_cast("-0.00624149021279827427419051911292019297076355716568760732341743532590851604324"), boost::lexical_cast("-0.0125807519990819994685097399317757929492045916260978502016923270647650161437"), boost::lexical_cast("0.00333572528547377127799818341581735574763652474230531509970642851567135111157")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.16010239797419291448072374802042073365054412462505783277256992020754721449), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.60382926979718967054011930652506210750742216310169869879692833603686283702), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.72430852843777292772807124410221864076875621823200737257673350480409279922), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.13842814590132073150539714633902469731410579117395610226946522108855217638), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.24229488706638203186257137947461636199149080806261859839137269134106547424), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.032244869584638374648479755062134928313564984163798472254342681319811609232), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.077571493840045713523130489388601819806230994520125279832101462389556715934), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0062414902127982742741905191129201929707635571656876073234174353259085160535), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.012580751999081999468509739931775792949204591626097850201692327064765016178), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0033357252854737712779981834158173557476365247423053150997064285156713511141) }; } if constexpr (p == 6) { - if constexpr (std::is_same_v) { - return {0x1.c8def2p-4f, 0x1.fa7ebp-2f, 0x1.8094ap-1f, 0x1.42d0fcp-2f, -0x1.cf63dep-3f, -0x1.09c336p-3f, 0x1.8f5dd8p-4f, 0x1.c2ef44p-6f, -0x1.02b856p-5f, 0x1.225f72p-11f, 0x1.391514p-8f, -0x1.1a6874p-10f}; - } - if constexpr (std::is_same_v) { - return {0x1.c8def24dc3952p-4, 0x1.fa7eaf64539a9p-2, 0x1.80949fa3bc0bbp-1, 0x1.42d0fcfa92f21p-2, -0x1.cf63dd26916f1p-3, -0x1.09c33622722ebp-3, 0x1.8f5dd7f4e1752p-4, 0x1.c2ef43d612549p-6, -0x1.02b856404e8cep-5, 0x1.225f71210a7c1p-11, 0x1.391514c62a31bp-8, -0x1.1a6873b7a6466p-10}; - } - if constexpr (std::is_same_v) { - return {0xe.46f7926e1ca8e15p-7L, 0xf.d3f57b229cd4bdfp-5L, 0xc.04a4fd1de05d701p-4L, 0xa.1687e7d497907f9p-5L, -0xe.7b1ee9348b785acp-6L, -0x8.4e19b11391756c5p-6L, 0xc.7aeebfa70ba93cep-7L, 0xe.177a1eb092a4be4p-9L, -0x8.15c2b2027466fc3p-8L, 0x9.12fb890853e0901p-14L, 0x9.c8a8a631518d6e7p-11L, -0x8.d3439dbd3232f08p-13L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.c8def24dc3951c2a6dae413b8ddbp-4Q, 0x1.fa7eaf64539a97bd50da008738e1p-2Q, 0x1.80949fa3bc0bae02bf1b494d3af8p-1Q, 0x1.42d0fcfa92f20ff1b5b87f2f698cp-2Q, -0x1.cf63dd26916f0b589f7743608e82p-3Q, -0x1.09c33622722ead8a0ff038a97bp-3Q, 0x1.8f5dd7f4e175279c5a356a3fbcc9p-4Q, 0x1.c2ef43d6125497c75e24a80c6bfap-6Q, -0x1.02b856404e8cdf85933c3736d91cp-5Q, 0x1.225f71210a7c1202de723c931ed6p-11Q, 0x1.391514c62a31adcdfa747aebbdeep-8Q, -0x1.1a6873b7a6465e0ff5c033201061p-10Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.111540743350109463621323917240923439042539591984421675908236045797651596176"), boost::lexical_cast("0.494623890398453085677204176877855588637786382896274362353183452618869845497"), boost::lexical_cast("0.751133908021095350678934498439731685580254783338261200973042065947992668343"), boost::lexical_cast("0.315250351709197629085989654810926396649519923517294524440416381606252448494"), boost::lexical_cast("-0.226264693965439820076314500660903465670540153972896994014348779178970276888"), boost::lexical_cast("-0.129766867567261935562289605876585460845233749223581470159931065581720412930"), boost::lexical_cast("0.0975016055873230491023435525381253423398307474952551427989319312112779815986"), boost::lexical_cast("0.0275228655303057286255408395041932136573875878304345432149420287900002992420"), boost::lexical_cast("-0.0315820393174860295650790806998486690574795323731484233751146493526060457826"), boost::lexical_cast("0.000553842201161496139251918398046501220611026277386496429547652456752475273329"), boost::lexical_cast("0.00477725751094551063963597524682070705023050121658143429759325457002031530381"), boost::lexical_cast("-0.00107730108530847956485262160958720003523523360933441968981858089478841770562")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.11154074335010946362132391724092343904253959198442167590823604579765159644), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.4946238903984530856772041768778555886377863828962743623531834526188698465), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.75113390802109535067893449843973168558025478333826120097304206594799266889), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.31525035170919762908598965481092639664951992351729452444041638160625244927), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.22626469396543982007631450066090346567054015397289699401434877917897027718), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.12976686756726193556228960587658546084523374922358147015993106558172041337), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.097501605587323049102343552538125342339830747495255142798931931211277981638), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.027522865530305728625540839504193213657387587830434543214942028790000299266), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.031582039317486029565079080699848669057479532373148423375114649352606045848), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00055384220116149613925191839804650122061102627738649642954765245675247527348), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0047772575109455106396359752468207070502305012165814342975932545700203152873), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0010773010853084795648526216095872000352352336093344196898185808947884177076) }; } if constexpr (p == 7) { - if constexpr (std::is_same_v) { - return {0x1.3ee1ccp-4f, 0x1.960e68p-2f, 0x1.7550cep-1f, 0x1.e10e9cp-2f, -0x1.26b83p-3f, -0x1.cad37cp-3f, 0x1.241522p-4f, 0x1.4a3072p-4f, -0x1.378a8ep-5f, -0x1.0f8eaap-6f, 0x1.9b4568p-7f, 0x1.c271f6p-12f, -0x1.d84a1p-10f, 0x1.72e554p-12f}; - } - if constexpr (std::is_same_v) { - return {0x1.3ee1cba38b6b1p-4, 0x1.960e674303003p-2, 0x1.7550cd294c1fep-1, 0x1.e10e9ba294ddcp-2, -0x1.26b830e491e33p-3, -0x1.cad37bbd5ab97p-3, 0x1.241522ca7821cp-4, 0x1.4a30727f2fa53p-4, -0x1.378a8eecf45ccp-5, -0x1.0f8eaa8ffe709p-6, 0x1.9b45682a50d7p-7, 0x1.c271f584373d4p-12, -0x1.d84a0f9cb2f31p-10, 0x1.72e5533fa10d3p-12}; - } - if constexpr (std::is_same_v) { - return {0x9.f70e5d1c5b5851p-7L, 0xc.b0733a181801b18p-5L, 0xb.aa86694a60ff1fap-4L, 0xf.0874dd14a6ee015p-5L, -0x9.35c187248f196d4p-6L, -0xe.569bddead5cb84ap-6L, 0x9.20a91653c10e31cp-7L, 0xa.518393f97d2944bp-7L, -0x9.bc547767a2e6031p-8L, -0x8.7c75547ff384611p-9L, 0xc.da2b415286b8088p-10L, 0xe.138fac21b9ea0e9p-15L, -0xe.c2507ce59798a73p-13L, 0xb.972a99fd0869924p-15L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.3ee1cba38b6b0a205a4c9aac651fp-4Q, 0x1.960e67430300363014da61e0a27dp-2Q, 0x1.7550cd294c1fe3f40f374c82e23dp-1Q, 0x1.e10e9ba294ddc02a47644f227fffp-2Q, -0x1.26b830e491e32da8b525e8ab6aa1p-3Q, -0x1.cad37bbd5ab970931a91ed1dfe9cp-3Q, 0x1.241522ca7821c638e85eb5e52839p-4Q, 0x1.4a30727f2fa52896ef76d0300cfp-4Q, -0x1.378a8eecf45cc0627b1c4b5cace1p-5Q, -0x1.0f8eaa8ffe708c22b1145a6b8cc8p-6Q, 0x1.9b45682a50d70110df27e4af9e36p-7Q, 0x1.c271f584373d41d177397b25f7ebp-12Q, -0x1.d84a0f9cb2f314e62607c084aab4p-10Q, 0x1.72e5533fa10d324758be56783dp-12Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0778520540850091790199635219578937483791830529279556843870293717996297655927"), boost::lexical_cast("0.396539319481917306539000390936842856358715114933328740111049962075487815071"), boost::lexical_cast("0.729132090846235119916943070339282051717966061190136378269771574955357027757"), boost::lexical_cast("0.469782287405193122471591160974451738681791305678735953239252914100836922120"), boost::lexical_cast("-0.143906003928564975405068362213046001795273570549908483440175301422991840895"), boost::lexical_cast("-0.224036184993874982638140420233250964475783089677324655266509530724151657744"), boost::lexical_cast("0.0713092192668302647508765705011290482271132745141231465957511322020290613667"), boost::lexical_cast("0.0806126091510830719129224803593819058582382096562948905813921847722652754485"), boost::lexical_cast("-0.0380299369350144135795920616018580358544619693846786989828312271657410616427"), boost::lexical_cast("-0.0165745416306668806541076748917026547920450439482071370523927254871434907950"), boost::lexical_cast("0.0125509985560998406129898860341877795728947404604871003841181834416741023260"), boost::lexical_cast("0.000429577972921366521132129122819732222823535039694240974294636693544941849482"), boost::lexical_cast("-0.00180164070404749091526826291273955096258565146964109062532386481459081601883"), boost::lexical_cast("0.000353713799974520248446295836306425431095906005952004001252427564526433555672")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.077852054085009179019963521957893748379183052927955684387029371799629765558), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.3965393194819173065390003909368428563587151149333287401110499620754878153), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.72913209084623511991694307033928205171796606119013637826977157495535702874), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.4697822874051931224715911609744517386817913056787359532392529141008369217), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.14390600392856497540506836221304600179527357054990848344017530142299184121), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.22403618499387498263814042023325096447578308967732465526650953072415165804), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.071309219266830264750876570501129048227113274514123146595751132202029061555), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.080612609151083071912922480359381905858238209656294890581392184772265275649), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.038029936935014413579592061601858035854461969384678698982831227165741061737), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.016574541630666880654107674891702654792045043948207137052392725487143490786), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.012550998556099840612989886034187779572894740460487100384118183441674102341), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00042957797292136652113212912281973222282353503969424097429463669354494184942), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0018016407040474909152682629127395509625856514696410906253238648145908160214), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00035371379997452024844629583630642543109590600595200400125242756452643355644) }; } if constexpr (p == 8) { - if constexpr (std::is_same_v) { - return {0x1.bdc64ap-5f, 0x1.40616ap-2f, 0x1.59ec46p-1f, 0x1.2bb39cp-1f, -0x1.035814p-6f, -0x1.22d4f8p-2f, 0x1.ef6f9cp-12f, 0x1.07acbcp-3f, -0x1.1c942p-6f, -0x1.692bc6p-5f, 0x1.ca215cp-7f, 0x1.1e978ep-7f, -0x1.3f2ef6p-8f, -0x1.9ac502p-12f, 0x1.622148p-11f, -0x1.ecbbbcp-14f}; - } - if constexpr (std::is_same_v) { - return {0x1.bdc64ada308ddp-5, 0x1.4061690b4c31ep-2, 0x1.59ec45992376p-1, 0x1.2bb39bedb5e28p-1, -0x1.03581459a95c6p-6, -0x1.22d4f8724d56fp-2, 0x1.ef6f9caf662bp-12, 0x1.07acbb163ba09p-3, -0x1.1c9420f07509dp-6, -0x1.692bc518a7fe2p-5, 0x1.ca215cd5b85b4p-7, 0x1.1e978df35f5fcp-7, -0x1.3f2ef6d3ac74ap-8, -0x1.9ac501798e65dp-12, 0x1.622148e2ef341p-11, -0x1.ecbbbc88e3fc3p-14}; - } - if constexpr (std::is_same_v) { - return {0xd.ee3256d1846ea19p-8L, 0xa.030b485a618f383p-5L, 0xa.cf622cc91bb0386p-4L, 0x9.5d9cdf6daf13eaep-4L, -0x8.1ac0a2cd4ae2f65p-9L, -0x9.16a7c3926ab7ac2p-5L, 0xf.7b7ce57b3157c6dp-15L, 0x8.3d65d8b1dd0442p-6L, -0x8.e4a10783a84e546p-9L, -0xb.495e28c53ff0c66p-8L, 0xe.510ae6adc2d9ca2p-10L, 0x8.f4bc6f9afafe075p-10L, -0x9.f977b69d63a5188p-11L, -0xc.d6280bcc732e77dp-15L, 0xb.110a471779a0a94p-14L, -0xf.65dde4471fe1763p-17L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.bdc64ada308dd431e90c51caaddfp-5Q, 0x1.4061690b4c31e70689f16560d4fdp-2Q, 0x1.59ec45992376070ce88329890c41p-1Q, 0x1.2bb39bedb5e27d5c19af764e6b08p-1Q, -0x1.03581459a95c5ec9b8a25898e79fp-6Q, -0x1.22d4f8724d56f584680effd871d8p-2Q, 0x1.ef6f9caf662af8d967c439494864p-12Q, 0x1.07acbb163ba0883fad048482f33cp-3Q, -0x1.1c9420f07509ca8be1e93402904ap-6Q, -0x1.692bc518a7fe18cb861085169737p-5Q, 0x1.ca215cd5b85b39449ec69ab26159p-7Q, 0x1.1e978df35f5fc0eabddff5ee9da6p-7Q, -0x1.3f2ef6d3ac74a30f6f64186b6be2p-8Q, -0x1.9ac501798e65cefa54cc7686cbfep-12Q, 0x1.622148e2ef341527c8d993cd7e86p-11Q, -0x1.ecbbbc88e3fc2ec652987ddfb595p-14Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0544158422431040099550094052029993550359955429473305039772928086771936225734"), boost::lexical_cast("0.312871590914299970659162375505717721949731974037022918569871242115311497533"), boost::lexical_cast("0.675630736297289806807800767047183149986911590633636422776675983811728748708"), boost::lexical_cast("0.585354683654206712771265520045098194430326667805336905570717534889570522452"), boost::lexical_cast("-0.0158291052563493056673805478764663041577447115450282655973533595603126615697"), boost::lexical_cast("-0.284015542961546926516203132374164732468435012487145179359920480909375859275"), boost::lexical_cast("0.000472484573913282770360590009825894986194801128877007464408409602299544658383"), boost::lexical_cast("0.128747426620478458857029287509708384302260157555648879557700016549770662789"), boost::lexical_cast("-0.0173693010018075461696161488680959831141308652948839431697731538851197479461"), boost::lexical_cast("-0.0440882539307947515067637232389635018975183919011099647275039198547543351349"), boost::lexical_cast("0.0139810279173982816487229305726334514423955953293434716914636811442629383260"), boost::lexical_cast("0.00874609404740577671638274324647564018040214708114067674268674702611775846381"), boost::lexical_cast("-0.00487035299345157431042218155710982401663497851215700376473620853219217075614"), boost::lexical_cast("-0.000391740373376947046298080357323776267522935007389049372449269467759195224284"), boost::lexical_cast("0.000675449406450569366369547573879299121848963001355843210361707737505966890496"), boost::lexical_cast("-0.000117476784124769533730628231698890944408669395031150392762001353514813073214")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.054415842243104009955009405202999355035995542947330503977292808677193622648), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.31287159091429997065916237550571772194973197403702291856987124211531149794), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.67563073629728980680780076704718314998691159063363642277667598381172874696), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.58535468365420671277126552004509819443032666780533690557071753488957052267), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.015829105256349305667380547876466304157744711545028265597353359560312661545), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.28401554296154692651620313237416473246843501248714517935992048090937585953), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00047248457391328277036059000982589498619480112887700746440840960229954465856), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.12874742662047845885702928750970838430226015755564887955770001654977066319), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.017369301001807546169616148868095983114130865294883943169773153885119747929), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.044088253930794751506763723238963501897518391901109964727503919854754335188), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.013981027917398281648722930572633451442395595329343471691463681144262938301), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0087460940474057767163827432464756401804021470811406767426867470261177584378), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0048703529934515743104221815571098240166349785121570037647362085321921707468), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00039174037337694704629808035732377626752293500738904937244926946775919522535), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00067544940645056936636954757387929912184896300135584321036170773750596688963), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00011747678412476953373062823169889094440866939503115039276200135351481307347) }; } if constexpr (p == 9) { - if constexpr (std::is_same_v) { - return {0x1.37ef3ep-5f, 0x1.f35f98p-3f, 0x1.35ab6p-1f, 0x1.50881p-1f, 0x1.10c9cap-3f, -0x1.2c4ff6p-2f, -0x1.8ca8ecp-4f, 0x1.303622p-3f, 0x1.f768dap-6f, -0x1.15062ap-4f, 0x1.07231ap-12f, 0x1.6e5f9cp-6f, -0x1.358a3ap-8f, -0x1.1897b6p-8f, 0x1.e4597cp-10f, 0x1.e3276ap-13f, -0x1.0833dap-12f, 0x1.4a11bap-15f}; - } - if constexpr (std::is_same_v) { - return {0x1.37ef3e540da7cp-5, 0x1.f35f9808bc2ap-3, 0x1.35ab60603a288p-1, 0x1.5088101e8fe35p-1, 0x1.10c9ca803fb22p-3, -0x1.2c4ff66fd53efp-2, -0x1.8ca8ebcdc98fcp-4, 0x1.303621e43e771p-3, 0x1.f768d94677997p-6, -0x1.1506294f451a2p-4, 0x1.07231a6b6ca0dp-12, 0x1.6e5f9be058887p-6, -0x1.358a39f783bbfp-8, -0x1.1897b64b3bfb6p-8, 0x1.e4597bbfc711fp-10, 0x1.e3276a3bc510bp-13, -0x1.0833da803978ap-12, 0x1.4a11ba1ad31b5p-15}; - } - if constexpr (std::is_same_v) { - return {0x9.bf79f2a06d3e1d5p-8L, 0xf.9afcc045e1503b9p-6L, 0x9.ad5b0301d143d0bp-4L, 0xa.844080f47f1a981p-4L, 0x8.864e5401fd91397p-6L, -0x9.627fb37ea9f7708p-5L, -0xc.65475e6e4c7e255p-7L, 0x9.81b10f21f3b8936p-6L, 0xf.bb46ca33bccb6bep-9L, -0x8.a8314a7a28d0fa4p-7L, 0x8.3918d35b65065cap-15L, 0xb.72fcdf02c443b9ap-9L, -0x9.ac51cfbc1ddf90ep-11L, -0x8.c4bdb259dfdac19p-11L, 0xf.22cbddfe388f56ep-13L, 0xf.193b51de288565ap-16L, -0x8.419ed401cbc51f3p-15L, 0xa.508dd0d698da458p-18L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.37ef3e540da7c3aa0d1dcf5bb03fp-5Q, 0x1.f35f9808bc2a0772556b997598d3p-3Q, 0x1.35ab60603a287a1609387fb893b8p-1Q, 0x1.5088101e8fe3530163beb11528dcp-1Q, 0x1.10c9ca803fb2272d1e1cf6fa2d0cp-3Q, -0x1.2c4ff66fd53eee10d811f3bf5459p-2Q, -0x1.8ca8ebcdc98fc4aa06bb294a039cp-4Q, 0x1.303621e43e77126c475b311fee41p-3Q, 0x1.f768d94677996d7b05f99f12d599p-6Q, -0x1.1506294f451a1f48db3652c40168p-4Q, 0x1.07231a6b6ca0cb934ff78371a261p-12Q, 0x1.6e5f9be058887734b49665246c12p-6Q, -0x1.358a39f783bbf21cd3bb737b9bf7p-8Q, -0x1.1897b64b3bfb583210060e933d6p-8Q, 0x1.e4597bbfc711eadc2635b08cc11dp-10Q, 0x1.e3276a3bc510acb32c14bfd1c3d9p-13Q, -0x1.0833da803978a3e6248db817fff9p-12Q, 0x1.4a11ba1ad31b48b0c2e32412ef31p-15Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0380779473638783465886976588795511844877171449627841747664719248482680479602"), boost::lexical_cast("0.243834674612590353732041581649284415526361108560923136142908810357641947074"), boost::lexical_cast("0.604823123690111111903076867434236170895956271189611756533371353266219479839"), boost::lexical_cast("0.657288078051300538078212639045173214030585866924591885443603406558844920237"), boost::lexical_cast("0.133197385825007576190954945899795553692178076843366113615434683783912029373"), boost::lexical_cast("-0.293273783279174908806403195242198731043896162858990682572511282649777494073"), boost::lexical_cast("-0.0968407832229764605135081335376966022482545810459909967947126760842963820075"), boost::lexical_cast("0.148540749338106380135072717506042302479125857728060306077164939460051558202"), boost::lexical_cast("0.0307256814793333792123174007203788271410580502467074478150306050580744709008"), boost::lexical_cast("-0.0676328290613299736756422748297190159257879087135373990074833120984537787038"), boost::lexical_cast("0.000250947114831451957587189749988554331517627199370963332183416469143399245077"), boost::lexical_cast("0.0223616621236790972053737827026909524185564668830885375472181623365153339468"), boost::lexical_cast("-0.00472320475775139727792570784824246540572951491262793801875852685657845737998"), boost::lexical_cast("-0.00428150368246342983449679500231453187648118181146328837486045503769103000912"), boost::lexical_cast("0.00184764688305622647661912949112567705112108135960031816073251504574674723494"), boost::lexical_cast("0.000230385763523195967205216392824542169294066205246371197226000686680376244675"), boost::lexical_cast("-0.000251963188942710136974988684287860660728218154347802821413426535123097430873"), boost::lexical_cast("0.0000393473203162715994806898830658915070778247705551701350735993815544054870406")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.038077947363878346588697658879551184487717144962784174766471924848268047975), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.24383467461259035373204158164928441552636110856092313614290881035764194652), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.60482312369011111190307686743423617089595627118961175653337135326621948137), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.6572880780513005380782126390451732140305858669245918854436034065588449216), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.13319738582500757619095494589979555369217807684336611361543468378391202935), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.29327378327917490880640319524219873104389616285899068257251128264977749451), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.096840783222976460513508133537696602248254581045990996794712676084296381974), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.14854074933810638013507271750604230247912585772806030607716493946005155866), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.03072568147933337921231740072037882714105805024670744781503060505807447087), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.067632829061329973675642274829719015925787908713537399007483312098453778674), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00025094711483145195758718974998855433151762719937096333218341646914339924457), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0223616621236790972053737827026909524185564668830885375472181623365153339), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0047232047577513972779257078482424654057295149126279380187585268565784573968), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0042815036824634298344967950023145318764811818114632883748604550376910299936), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0018476468830562264766191294911256770511210813596003181607325150457467472311), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00023038576352319596720521639282454216929406620524637119722600068668037624505), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00025196318894271013697498868428786066072821815434780282141342653512309743183), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.934732031627159948068988306589150707782477055517013507359938155440548714e-05) }; } if constexpr (p == 10) { - if constexpr (std::is_same_v) { - return {0x1.b4f654p-6f, 0x1.8162d6p-3f, 0x1.0ded5p-1f, 0x1.607db4p-1f, 0x1.1feba4p-2f, -0x1.ffaf7cp-3f, -0x1.914c48p-3f, 0x1.04da38p-3f, 0x1.7d29b8p-4f, -0x1.246e3p-4f, -0x1.e2a1dep-6f, 0x1.101406p-5f, 0x1.d8b7dcp-9f, -0x1.5fb466p-7f, 0x1.6dc878p-10f, 0x1.052608p-9f, -0x1.67962p-11f, -0x1.e87f56p-14f, 0x1.888a12p-14f, -0x1.bd12a2p-17f}; - } - if constexpr (std::is_same_v) { - return {0x1.b4f6549dc7ae3p-6, 0x1.8162d69198cfep-3, 0x1.0ded5071bf874p-1, 0x1.607db4062d775p-1, 0x1.1feba4923f567p-2, -0x1.ffaf7b6c111e3p-3, -0x1.914c47c1ca802p-3, 0x1.04da377a0ae83p-3, 0x1.7d29b819fd18dp-4, -0x1.246e307349ac4p-4, -0x1.e2a1dd5152b25p-6, 0x1.1014069cb8f3cp-5, 0x1.d8b7db3e21714p-9, -0x1.5fb466d770edcp-7, 0x1.6dc8787ae38ddp-10, 0x1.0526072a98cd8p-9, -0x1.67962098c50fp-11, -0x1.e87f555dc50ddp-14, 0x1.888a11cfae433p-14, -0x1.bd12a2a1a43dbp-17}; - } - if constexpr (std::is_same_v) { - return {0xd.a7b2a4ee3d71687p-9L, 0xc.0b16b48cc67ed9dp-6L, 0x8.6f6a838dfc39cfcp-4L, 0xb.03eda0316bba9f7p-4L, 0x8.ff5d2491fab3641p-5L, -0xf.fd7bdb6088f17a6p-6L, -0xc.8a623e0e5400e29p-6L, 0x8.26d1bbd05741a5ep-6L, 0xb.e94dc0cfe8c6997p-7L, -0x9.2371839a4d62324p-7L, -0xf.150eea8a95926cep-9L, 0x8.80a034e5c79dfcbp-8L, 0xe.c5bed9f10b89f27p-12L, -0xa.fda336bb876e26p-10L, 0xb.6e43c3d71c6ebc5p-13L, 0x8.29303954c66bfc4p-12L, -0xb.3cb104c62878097p-14L, -0xf.43faaaee286e92ap-17L, 0xc.44508e7d72197a7p-17L, -0xd.e895150d21eda8p-20L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.b4f6549dc7ae2d0da711a289f0cap-6Q, 0x1.8162d69198cfdb39a90922d70e5fp-3Q, 0x1.0ded5071bf8739f750ffec152978p-1Q, 0x1.607db4062d7753edab576af3e0dcp-1Q, 0x1.1feba4923f566c829244a5b4f4c2p-2Q, -0x1.ffaf7b6c111e2f4b082d1396dfd9p-3Q, -0x1.914c47c1ca801c5176763b1002edp-3Q, 0x1.04da377a0ae834bb94a9fa4f0243p-3Q, 0x1.7d29b819fd18d32d43de1a7d3641p-4Q, -0x1.246e307349ac4648ebbb94e378bbp-4Q, -0x1.e2a1dd5152b24d9c384763b949a8p-6Q, 0x1.1014069cb8f3bf95bd45be617d84p-5Q, 0x1.d8b7db3e21713e4ea2df5435db4ap-9Q, -0x1.5fb466d770edc4c0f4a29d7e3176p-7Q, 0x1.6dc8787ae38dd789b768877a70c2p-10Q, 0x1.0526072a98cd7f8751cc002da048p-9Q, -0x1.67962098c50f012db290a44515a5p-11Q, -0x1.e87f555dc50dd253428e6067701p-14Q, 0x1.888a11cfae432f4e4bd0c734fcc9p-14Q, -0x1.bd12a2a1a43db4fff0519cd821dfp-17Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0266700579005555535866174487713085827719249829085128993277997577621650735643"), boost::lexical_cast("0.188176800077691489020892973679093994270254675864039348434859544409886608680"), boost::lexical_cast("0.527201188931725586481744827959508192498140268084022344531854947145139828409"), boost::lexical_cast("0.688459039453603565741871782549235853977136404240733953727968115839903445132"), boost::lexical_cast("0.281172343660577460748726998445589287624388885902615041383154395183374807120"), boost::lexical_cast("-0.249846424327315379416101897920779100056466973713207371501312159710676300514"), boost::lexical_cast("-0.195946274377377043504299254319098131876677647638277847439678187683856178731"), boost::lexical_cast("0.127369340335793260082677233201400977078617748042224599556309752373906702894"), boost::lexical_cast("0.0930573646035723511603522898354527322694291799894692586806397410224547567765"), boost::lexical_cast("-0.0713941471663970871453360930760506476729261198370215091752375634796582409510"), boost::lexical_cast("-0.0294575368218758128582832376014183919938820051606494877976965428318490167081"), boost::lexical_cast("0.0332126740593410017397636531821591289797833741326709604332335127083312999184"), boost::lexical_cast("0.00360655356695616965542329141713340329951735051861899476273061229128656318944"), boost::lexical_cast("-0.0107331754833305750443181141065136444811154878114392321337033393709343696195"), boost::lexical_cast("0.00139535174705290116578931844795770756766054285568855242672111772342943140108"), boost::lexical_cast("0.00199240529518505611715874224264064321176255536551410528006793647824864459995"), boost::lexical_cast("-0.000685856694959711626561370981926571419662504333678692051621190356175797931438"), boost::lexical_cast("-0.000116466855129285450951480971025899189152746185434759736281923507446885853623"), boost::lexical_cast("0.0000935886703200695913340501303422285439968845621529727644352187393967719605190"), boost::lexical_cast("-0.0000132642028945212448124366753122668330574924096060582975640067461946671323150")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.026670057900555553586617448771308582771924982908512899327799757762165073565), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.1881768000776914890208929736790939942702546758640393484348595444098866088), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.52720118893172558648174482795950819249814026808402234453185494714513982787), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.68845903945360356574187178254923585397713640424073395372796811583990344659), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.28117234366057746074872699844558928762438888590261504138315439518337480745), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.24984642432731537941610189792077910005646697371320737150131215971067630043), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.1959462743773770435042992543190981318766776476382778474396781876838561782), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.12736934033579326008267723320140097707861774804222459955630975237390670344), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.093057364603572351160352289835452732269429179989469258680639741022454756675), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.071394147166397087145336093076050647672926119837021509175237563479658240953), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.029457536821875812858283237601418391993882005160649487797696542831849016741), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.033212674059341001739763653182159128979783374132670960433233512708331299782), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0036065535669561696554232914171334032995173505186189947627306122912865631829), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.01073317548333057504431811410651364448111548781143923213370333937093436962), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0013953517470529011657893184479577075676605428556885524267211177234294314032), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0019924052951850561171587422426406432117625553655141052800679364782486446064), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00068585669495971162656137098192657141966250433367869205162119035617579793186), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00011646685512928545095148097102589918915274618543475973628192350744688585366), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 9.3588670320069591334050130342228543996884562152972764435218739396771960302e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.3264202894521244812436675312266833057492409606058297564006746194667132319e-05) }; } if constexpr (p == 11) { - if constexpr (std::is_same_v) { - return {0x1.324992p-6f, 0x1.270c9cp-3f, 0x1.ccb286p-2f, 0x1.5f1256p-1f, 0x1.a5d9fcp-2f, -0x1.4c56f6p-3f, -0x1.18cff8p-2f, 0x1.0e83b8p-4f, 0x1.32d0a4p-3f, -0x1.7cc388p-5f, -0x1.10221ep-4f, 0x1.00b272p-5f, 0x1.557516p-6f, -0x1.f77976p-7f, -0x1.b5e4ap-9f, 0x1.42fd2p-8f, -0x1.439544p-12f, -0x1.d4338ep-11f, 0x1.05416p-12f, 0x1.c8ab06p-15f, -0x1.228a1p-15f, 0x1.2d9b0cp-18f}; - } - if constexpr (std::is_same_v) { - return {0x1.3249916076091p-6, 0x1.270c9c42314cfp-3, 0x1.ccb286198c9dfp-2, 0x1.5f125643212ccp-1, 0x1.a5d9fccefe816p-2, -0x1.4c56f6b2bf66cp-3, -0x1.18cff89a8cc46p-2, 0x1.0e83b8b6a4d8fp-4, 0x1.32d0a3f0ba732p-3, -0x1.7cc387e4a9a09p-5, -0x1.10221dbbeff7cp-4, 0x1.00b27276a8099p-5, 0x1.557516a958be5p-6, -0x1.f77975a6883f7p-7, -0x1.b5e49f3346a8bp-9, 0x1.42fd20a75f9acp-8, -0x1.439543c841133p-12, -0x1.d4338d3fdae3ap-11, 0x1.05415f0bc6ea2p-12, 0x1.c8ab05d193c38p-15, -0x1.228a0febb3e8cp-15, 0x1.2d9b0b4e10d78p-18}; - } - if constexpr (std::is_same_v) { - return {0x9.924c8b03b048b06p-9L, 0x9.3864e2118a67afdp-6L, 0xe.659430cc64ef74bp-5L, 0xa.f892b2190965c91p-4L, 0xd.2ecfe677f40b2aap-5L, -0xa.62b7b595fb361ep-6L, -0x8.c67fc4d4662301ap-5L, 0x8.741dc5b526c7499p-7L, 0x9.96851f85d39931p-6L, -0xb.e61c3f254d048e4p-8L, -0x8.8110eddf7fbe097p-7L, 0x8.059393b5404c82ap-8L, 0xa.aba8b54ac5f295dp-9L, -0xf.bbcbad3441fb82ap-10L, -0xd.af24f99a3545bf1p-12L, 0xa.17e9053afcd5e0bp-11L, -0xa.1caa1e42089945fp-15L, -0xe.a19c69fed71d098p-14L, 0x8.2a0af85e37512d9p-15L, 0xe.45582e8c9e1bc7dp-18L, -0x9.14507f5d9f45ff4p-18L, 0x9.6cd85a7086bbdf3p-21L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.324991607609160c660c469077c4p-6Q, 0x1.270c9c42314cf5fa956419fe6ca8p-3Q, 0x1.ccb286198c9dee96d12668532b6cp-2Q, 0x1.5f125643212cb922d29e40df5ae5p-1Q, 0x1.a5d9fccefe816554cfd2c1b4c2eap-2Q, -0x1.4c56f6b2bf66c3c093c0529f8f7fp-3Q, -0x1.18cff89a8cc4603466567c5566b2p-2Q, 0x1.0e83b8b6a4d8e932eca95459a69cp-4Q, 0x1.32d0a3f0ba73261f3f385a0ab52ep-3Q, -0x1.7cc387e4a9a091c75d9de8faea58p-5Q, -0x1.10221dbbeff7c12d2228c7667179p-4Q, 0x1.00b27276a80990547cbd63f84547p-5Q, 0x1.557516a958be52b928260c4c6ad5p-6Q, -0x1.f77975a6883f7054b8b01c477981p-7Q, -0x1.b5e49f3346a8b7e121e98be0fcfbp-9Q, 0x1.42fd20a75f9abc16cec7fe76464bp-8Q, -0x1.439543c8411328be7c3dbb239962p-12Q, -0x1.d4338d3fdae3a1309e0d7105695cp-11Q, 0x1.05415f0bc6ea25b1e91fb2adce4fp-12Q, 0x1.c8ab05d193c378f97fff6933dc9bp-15Q, -0x1.228a0febb3e8bfe721948bedcf9cp-15Q, 0x1.2d9b0b4e10d77be6e48f3790bbdep-18Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0186942977614710840254357293956197572896777445592195854328669208544639848493"), boost::lexical_cast("0.144067021150624512795191584936100114302371896755623960431885248217612109866"), boost::lexical_cast("0.449899764356045334768894037385360367780689537864893347459965579586344042705"), boost::lexical_cast("0.685686774916200511120938631696309793594020496456770349505158901745075089131"), boost::lexical_cast("0.411964368947907462925939648571066730743040041018784531569724251133330862864"), boost::lexical_cast("-0.162275245027490362240582726998551154074426432421213020964966742981832149727"), boost::lexical_cast("-0.274230846817946961202100945283526662864808952177517822190577839005023967370"), boost::lexical_cast("0.0660435881966831919006145788812630265675314216894079154111345722601572700631"), boost::lexical_cast("0.149812012466378496406656261704419329858827242026748465379690959421507533896"), boost::lexical_cast("-0.0464799551166841872716172258902374457722326096684826074745032098759584318172"), boost::lexical_cast("-0.0664387856950252052789921553697120319181956689607973962285857402336065270973"), boost::lexical_cast("0.0313350902190460760309479840830314453635810568088003196493644550909547400332"), boost::lexical_cast("0.0208409043601810630229481125565649101515776183273471569112669220076703474398"), boost::lexical_cast("-0.0153648209062015994261981160995882274401432649577300012020584862793777385002"), boost::lexical_cast("-0.00334085887301444560609080861798240610193065835949919084565673177725408174281"), boost::lexical_cast("0.00492841765605904112317073974170827369028554772991580241839745801019376641230"), boost::lexical_cast("-0.000308592858815143165175459072627895330718021660507848858192156227602365444134"), boost::lexical_cast("-0.000893023250666264613390082462264865398987951987862072879313335822408534301830"), boost::lexical_cast("0.000249152523552823498871221687266680108822119930285542538197139249093202823549"), boost::lexical_cast("0.0000544390746993684716735785687957683219193667852560079397804368892016829413126"), boost::lexical_cast("-0.0000346349841869849955412808515997404321450648804823345803594360135567940224107"), boost::lexical_cast("0.00000449427427723651009541564828231013091641049798738375346057174174843400859633")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.018694297761471084025435729395619757289677744559219585432866920854463984821), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.1440670211506245127951915849361001143023718967556239604318852482176121098), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.4498997643560453347688940373853603677806895378648933474599655795863440433), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.68568677491620051112093863169630979359402049645677034950515890174507509031), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.41196436894790746292593964857106673074304004101878453156972425113333086269), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.16227524502749036224058272699855115407442643242121302096496674298183214991), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.27423084681794696120210094528352666286480895217751782219057783900502396695), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.066043588196683191900614578881263026567531421689407915411134572260157270027), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.14981201246637849640665626170441932985882724202674846537969095942150753335), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.046479955116684187271617225890237445772232609668482607474503209875958431693), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.06643878569502520527899215536971203191819566896079739622858574023360652697), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.031335090219046076030947984083031445363581056808800319649364455090954740139), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.020840904360181063022948112556564910151577618327347156911266922007670347371), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.015364820906201599426198116099588227440143264957730001202058486279377738507), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0033408588730144456060908086179824061019306583594991908456567317772540817346), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0049284176560590411231707397417082736902855477299158024183974580101937664126), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00030859285881514316517545907262789533071802166050784885819215622760236544448), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00089302325066626461339008246226486539898795198786207287931333582240853430266), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00024915252355282349887122168726668010882211993028554253819713924909320282452), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 5.4439074699368471673578568795768321919366785256007939780436889201682941436e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -3.4634984186984995541280851599740432145064880482334580359436013556794022457e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 4.4942742772365100954156482823101309164104979873837534605717417484340085911e-06) }; } if constexpr (p == 12) { - if constexpr (std::is_same_v) { - return {0x1.ada998p-7f, 0x1.c0c89p-4f, 0x1.826962p-2f, 0x1.507c5ap-1f, 0x1.082246p-1f, -0x1.6eb4acp-5f, -0x1.43c448p-2f, -0x1.85997p-6f, 0x1.75b758p-3f, 0x1.5f3ea8p-8f, -0x1.8afc68p-4f, 0x1.63811ap-7f, 0x1.5458dcp-5f, -0x1.906176p-7f, -0x1.a4c4a6p-7f, 0x1.b7d844p-8f, 0x1.26babep-9f, -0x1.1dac02p-9f, 0x1.b73c72p-18f, 0x1.978844p-12f, -0x1.73369p-14f, -0x1.96b4a6p-16f, 0x1.acb93p-17f, -0x1.9a7502p-20f}; - } - if constexpr (std::is_same_v) { - return {0x1.ada9978d2fa57p-7, 0x1.c0c890682f879p-4, 0x1.82696272e40bdp-2, 0x1.507c59d8e6f6bp-1, 0x1.082245c297978p-1, -0x1.6eb4ac1d9855dp-5, -0x1.43c448da45b22p-2, -0x1.85996f0f3b3b2p-6, 0x1.75b757e56dd3bp-3, 0x1.5f3ea878d368ep-8, -0x1.8afc682193383p-4, 0x1.638119d1c4362p-7, 0x1.5458dbe394ebp-5, -0x1.90617513f389bp-7, -0x1.a4c4a623e2a51p-7, 0x1.b7d844bffa4e9p-8, 0x1.26babd1f8d181p-9, -0x1.1dac0186ec142p-9, 0x1.b73c724cbcd25p-18, 0x1.9788431be0bfbp-12, -0x1.7336904b8b4e8p-14, -0x1.96b4a56f63fa9p-16, 0x1.acb92f10c423ap-17, -0x1.9a7502d7dc2f3p-20}; - } - if constexpr (std::is_same_v) { - return {0xd.6d4cbc697d2b459p-10L, 0xe.064483417c3c86cp-7L, 0xc.134b1397205e82fp-5L, 0xa.83e2cec737b5622p-4L, 0x8.41122e14bcbbcc8p-4L, -0xb.75a560ecc2ae67fp-8L, -0xa.1e2246d22d9117cp-5L, -0xc.2ccb7879d9d93dbp-9L, 0xb.adbabf2b6e9db71p-6L, 0xa.f9f543c69b47041p-11L, -0xc.57e3410c99c1b5p-7L, 0xb.1c08ce8e21b0dd8p-10L, 0xa.a2c6df1ca7582e3p-8L, -0xc.830ba89f9c4dbcbp-10L, -0xd.2625311f15287e1p-10L, 0xd.bec225ffd274461p-11L, 0x9.35d5e8fc68c04b8p-12L, -0x8.ed600c3760a133p-12L, 0xd.b9e39265e692542p-21L, 0xc.bc4218df05fd969p-15L, -0xb.99b4825c5a7426p-17L, -0xc.b5a52b7b1fd454bp-19L, 0xd.65c97886211cfe7p-20L, -0xc.d3a816bee17970fp-23L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.ada9978d2fa568b21229688156b8p-7Q, 0x1.c0c890682f8790d7f6bb1c1aa44ep-4Q, 0x1.82696272e40bd05e57c851b9cb36p-2Q, 0x1.507c59d8e6f6ac435d1e88e090b6p-1Q, 0x1.082245c29797798f324c3b86f65cp-1Q, -0x1.6eb4ac1d9855ccfed03d4133c6fbp-5Q, -0x1.43c448da45b222f8d287f72956dcp-2Q, -0x1.85996f0f3b3b27b5f0ec32953a95p-6Q, 0x1.75b757e56dd3b6e26eea4e0a43bap-3Q, 0x1.5f3ea878d368e081a5d3cb36d936p-8Q, -0x1.8afc6821933836a0611906df913cp-4Q, 0x1.638119d1c4361bb00a2f22d1f90bp-7Q, 0x1.5458dbe394eb05c5aab3c4ceb31ap-5Q, -0x1.90617513f389b7954493854c387ep-7Q, -0x1.a4c4a623e2a50fc10158bea8a45cp-7Q, 0x1.b7d844bffa4e88c2ef52650eb0e3p-8Q, 0x1.26babd1f8d1809707edb54236067p-9Q, -0x1.1dac0186ec14265ff3ab908c13a3p-9Q, 0x1.b73c724cbcd24a84c3c597249f8dp-18Q, 0x1.9788431be0bfb2d1938d25135045p-12Q, -0x1.7336904b8b4e84c0e0396f9346efp-14Q, -0x1.96b4a56f63fa8a95abb9ecaeceaep-16Q, 0x1.acb92f10c4239fce7d915af19a6cp-17Q, -0x1.9a7502d7dc2f2e1e665f9ba74bc1p-20Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.0131122579572295175067460908889332806566551064193132500774828079813751369078"), boost::lexical_cast("0.109566272821185154605704505024890542607568050306677404638365743414594716237"), boost::lexical_cast("0.377355135214212657092821260487920614901094170605752633470583911562885099045"), boost::lexical_cast("0.657198722579307089302761128664116983425020328998841214139428195001939202386"), boost::lexical_cast("0.515886478427815608756032648054303270067769308703609005612764729867503168411"), boost::lexical_cast("-0.0447638856537746266676274731154016652928454363150592413907170410117965514990"), boost::lexical_cast("-0.316178453752785536864802935347803109850883903254736438957420337160049554984"), boost::lexical_cast("-0.0237792572560697276839975460913322578455336655833174115248261271603350281595"), boost::lexical_cast("0.182478605927579679854043611618924171029477144809630269832901126083410652478"), boost::lexical_cast("0.00535956967435215032827627672976833228886266518419270582163634261809269415715"), boost::lexical_cast("-0.0964321200965070820265032053432248412743088014304522051434640274861906048848"), boost::lexical_cast("0.0108491302558221843808901023774815218866163056760333465932251226434077741286"), boost::lexical_cast("0.0415462774950844407392709468190657486451353222138837486128707899413616614352"), boost::lexical_cast("-0.0122186490697482807199879826647156771298246609311655817534481104550208384247"), boost::lexical_cast("-0.0128408251983006832946603447189472849620610983231409763327522557348508782102"), boost::lexical_cast("0.00671149900879550917776702706821567245064811218585645674037945533688642441241"), boost::lexical_cast("0.00224860724099523759995086521126723401834319978614617709926201027901007445066"), boost::lexical_cast("-0.00217950361862776047159890337958417118784007529186057126498094298705073259759"), boost::lexical_cast("0.00000654512821250959556650043039932711072911177056889735663071455200741848443049"), boost::lexical_cast("0.000388653062820931443589728883779598179191748857342017752343609613138331820861"), boost::lexical_cast("-0.0000885041092082043242082164596155372659873832215147193280801544303001991847212"), boost::lexical_cast("-0.0000242415457570307840297891532053171958042377836266428223937753220729228844731"), boost::lexical_cast("0.0000127769522193797665871404636261662088737596094143942875605535392042653701946"), boost::lexical_cast("-0.00000152907175806851090271223916452290122319761543966034067260269641683218542373")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.013112257957229517506746090888933280656655106419313250077482807981375136912), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.1095662728211851546057045050248905426075680503066774046383657434145947162), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.37735513521421265709282126048792061490109417060575263347058391156288509976), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.65719872257930708930276112866411698342502032899884121413942819500193920417), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.51588647842781560875603264805430327006776930870360900561276472986750316737), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.04476388565377462666762747311540166529284543631505924139071704101179655136), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.31617845375278553686480293534780310985088390325473643895742033716004955521), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.02377925725606972768399754609133225784553366558331741152482612716033502819), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.18247860592757967985404361161892417102947714480963026983290112608341065294), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0053595696743521503282762767297683322888626651841927058216363426180926941677), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.096432120096507082026503205343224841274308801430452205143464027486190605026), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.010849130255822184380890102377481521886616305676033346593225122643407774116), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.041546277495084440739270946819065748645135322213883748612870789941361661575), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.012218649069748280719987982664715677129824660931165581753448110455020838418), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.012840825198300683294660344718947284962061098323140976332752255734850878212), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0067114990087955091777670270682156724506481121858564567403794553368864243964), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.002248607240995237599950865211267234018343199786146177099262010279010074457), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0021795036186277604715989033795841711878400752918605712649809429870507326048), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 6.5451282125095955665004303993271107291117705688973566307145520074184844383e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00038865306282093144358972888377959817919174885734201775234360961313833182126), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -8.8504109208204324208216459615537265987383221514719328080154430300199184715e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -2.4241545757030784029789153205317195804237783626642822393775322072922884523e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.2776952219379766587140463626166208873759609414394287560553539204265370227e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.529071758068510902712239164522901223197615439660340672602696416832185426e-06) }; } if constexpr (p == 13) { - if constexpr (std::is_same_v) { - return {0x1.2d8918p-7f, 0x1.53665p-4f, 0x1.3f7bf6p-2f, 0x1.38dc5p-1f, 0x1.2d82fp-1f, 0x1.644b26p-4f, -0x1.428842p-2f, -0x1.fe442cp-4f, 0x1.6f9128p-3f, 0x1.2acc8p-4f, -0x1.b16354p-4f, -0x1.b1fc6ep-6f, 0x1.cbe504p-5f, 0x1.37f29ep-9f, -0x1.86743ap-6f, 0x1.0128dp-8f, 0x1.db8098p-8f, -0x1.6a025cp-9f, -0x1.58e562p-10f, 0x1.e8ceb2p-11f, 0x1.9d26d8p-15f, -0x1.5a4cf4p-13f, 0x1.0159a8p-15f, 0x1.5e5f8p-17f, -0x1.3b708ap-18f, 0x1.183f9ep-21f}; - } - if constexpr (std::is_same_v) { - return {0x1.2d89174d37e3bp-7, 0x1.53664fc8a3d4cp-4, 0x1.3f7bf6c09afe8p-2, 0x1.38dc5001834bbp-1, 0x1.2d82ef0bea472p-1, 0x1.644b251290fb5p-4, -0x1.42884206fc5aep-2, -0x1.fe442b86ad763p-4, 0x1.6f91279c81aa4p-3, 0x1.2acc804557c8bp-4, -0x1.b163543c8eaccp-4, -0x1.b1fc6de239706p-6, 0x1.cbe5044520d5ep-5, 0x1.37f29dfe3e92cp-9, -0x1.867439245b0c7p-6, 0x1.0128d031aa3bp-8, 0x1.db80973172631p-8, -0x1.6a025cdac7e1p-9, -0x1.58e561b1f2cf6p-10, 0x1.e8ceb1ee24cabp-11, 0x1.9d26d847f17cap-15, -0x1.5a4cf360064a4p-13, 0x1.0159a865542d3p-15, 0x1.5e5f8028cd835p-17, -0x1.3b708a4c3be34p-18, 0x1.183f9db8da3ap-21}; - } - if constexpr (std::is_same_v) { - return {0x9.6c48ba69bf1db2dp-10L, 0xa.9b327e451ea606ap-7L, 0x9.fbdfb604d7f42bfp-5L, 0x9.c6e2800c1a5d56fp-4L, 0x9.6c17785f5238ef1p-4L, 0xb.2259289487da5f5p-7L, -0xa.14421037e2d6f28p-5L, -0xf.f2215c356bb1af3p-7L, 0xb.7c893ce40d51d77p-6L, 0x9.5664022abe455a4p-7L, -0xd.8b1aa1e47565fb8p-7L, -0xd.8fe36f11cb8316bp-9L, 0xe.5f28222906af18bp-8L, 0x9.bf94eff1f49636bp-12L, -0xc.33a1c922d8636b9p-9L, 0x8.0946818d51d8108p-11L, 0xe.dc04b98b931878p-11L, -0xb.5012e6d63f07f27p-12L, -0xa.c72b0d8f967b059p-13L, 0xf.46758f712655aeep-14L, 0xc.e936c23f8be4d46p-18L, -0xa.d2679b00325201p-16L, 0x8.0acd432aa169479p-18L, 0xa.f2fc01466c1a50ap-20L, -0x9.db845261df1a01dp-21L, 0x8.c1fcedc6d1d027ap-24L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.2d89174d37e3b6596d64d168e49p-7Q, 0x1.53664fc8a3d4c0d33efd4b4bc6fap-4Q, 0x1.3f7bf6c09afe857e70d916613d78p-2Q, 0x1.38dc5001834baade66ebb6ec9fc1p-1Q, 0x1.2d82ef0bea471de1f0a3864a5cccp-1Q, 0x1.644b251290fb4bea9c417da1f71ep-4Q, -0x1.42884206fc5ade5015e8dd0e5832p-2Q, -0x1.fe442b86ad7635e6a44fa231478p-4Q, 0x1.6f91279c81aa3aed801eca5172e8p-3Q, 0x1.2acc804557c8ab4899f3d0916648p-4Q, -0x1.b163543c8eacbf70b0092010e485p-4Q, -0x1.b1fc6de2397062d67f76ff78186p-6Q, 0x1.cbe5044520d5e315c90c0ed1b10cp-5Q, 0x1.37f29dfe3e92c6d51003ce786db8p-9Q, -0x1.867439245b0c6d71509d7a14369ep-6Q, 0x1.0128d031aa3b020f68dbd131fc68p-8Q, 0x1.db80973172630eff11f1aa6bf206p-8Q, -0x1.6a025cdac7e0fe4d3e8433e38ffbp-9Q, -0x1.58e561b1f2cf60b1ce144cfab0ffp-10Q, 0x1.e8ceb1ee24cab5dbcf0c32d1591bp-11Q, 0x1.9d26d847f17c9a8ce68c968f105dp-15Q, -0x1.5a4cf360064a4020bfd19dc8e5fp-13Q, 0x1.0159a865542d28f1113c2ad46cb5p-15Q, 0x1.5e5f8028cd834a146bf59b16d932p-17Q, -0x1.3b708a4c3be3403a7da544157c5bp-18Q, 0x1.183f9db8da3a04f4c66e4459dad2p-21Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00920213353896236797297016347564418466753417191641656238600970303711912173265"), boost::lexical_cast("0.0828612438729027796443202713123046640520811333289013507251427742009482956517"), boost::lexical_cast("0.311996322160438063396078411221404969394668352896718031716039017308515654041"), boost::lexical_cast("0.611055851158787652821199513674418056207361267601823943852658294015204037145"), boost::lexical_cast("0.588889570431218908071039534739533392766598638281283604223557340650249576137"), boost::lexical_cast("0.0869857261796472373102373983808749439923188407661970125088201664378054171345"), boost::lexical_cast("-0.314972907711388632998169825593228258287688845067878902595030681868130772999"), boost::lexical_cast("-0.124576730750815258941380833602126018079273929517363471957206932075260972005"), boost::lexical_cast("0.179476079429339843234845007233936901358196625624413339304288145469676423326"), boost::lexical_cast("0.0729489336567771638090283061047766198332592902687987355362796328461636696921"), boost::lexical_cast("-0.105807618187934326450966730419646484947886075480123665823236051077820681894"), boost::lexical_cast("-0.0264884064753436946396391224803478572641960484429769701626422412133519842633"), boost::lexical_cast("0.0561394771002834288621450199838733111998837879254310024473705625396675790207"), boost::lexical_cast("0.00237997225405907881146517095855420835809439461205193486847513927070930528134"), boost::lexical_cast("-0.0238314207103236490320640306775773913425292271763622627407729863341057724688"), boost::lexical_cast("0.00392394144879741624331637022081552655882474662345140404391840728787217413821"), boost::lexical_cast("0.00725558940161756619451839330050269889897352967964668369526982867260050623476"), boost::lexical_cast("-0.00276191123465686217801457626609844599535009333050181802496631648326614964558"), boost::lexical_cast("-0.00131567391189229893661383537059364337606041259265365230723812459474570122051"), boost::lexical_cast("0.000932326130867263386222651780254851410091808829980195230799156927112701492336"), boost::lexical_cast("0.0000492515251262894619214095738786659621010377829938882350084009445661139469929"), boost::lexical_cast("-0.000165128988556505489461668770923800075589854821465977670334780149359987420945"), boost::lexical_cast("0.0000306785375793254934664948322857547623660042821723790056312823074855283018382"), boost::lexical_cast("0.0000104419305714081370817071499108059695167070643621732816964147406843820801008"), boost::lexical_cast("-0.00000470041647936086832565019516506177132165038358297095855656805971133412246529"), boost::lexical_cast("0.000000522003509845486469173642435484317697674705215524355700153190105348895004025")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0092021335389623679729701634756441846675341719164165623860097030371191217305), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.082861243872902779644320271312304664052081133328901350725142774200948295461), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.31199632216043806339607841122140496939466835289671803171603901730851565412), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.61105585115878765282119951367441805620736126760182394385265829401520403811), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.58888957043121890807103953473953339276659863828128360422355734065024957534), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.08698572617964723731023739838087494399231884076619701250882016643780541724), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.31497290771138863299816982559322825828768884506787890259503068186813077354), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.12457673075081525894138083360212601807927392951736347195720693207526097203), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.17947607942933984323484500723393690135819662562441333930428814546967642382), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.072948933656777163809028306104776619833259290268798735536279632846163669865), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.10580761818793432645096673041964648494788607548012366582323605107782068188), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.026488406475343694639639122480347857264196048442976970162642241213351984244), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.05613947710028342886214501998387331119988378792543100244737056253966757901), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0023799722540590788114651709585542083580943946120519348684751392707093052796), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.023831420710323649032064030677577391342529227176362262740772986334105772526), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0039239414487974162433163702208155265588247466234514040439184072878721741534), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0072555894016175661945183933005026988989735296796466836952698286726005062515), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0027619112346568621780145762660984459953500933305018180249663164832661496432), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0013156739118922989366138353705936433760604125926536523072381245947457012192), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00093232613086726338622265178025485141009180882998019523079915692711270149142), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 4.9251525126289461921409573878665962101037782993888235008400944566113947075e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00016512898855650548946166877092380007558985482146597767033478014935998742089), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.0678537579325493466494832285754762366004282172379005631282307485528301752e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.0441930571408137081707149910805969516707064362173281696414740684382080067e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -4.7004164793608683256501951650617713216503835829709585565680597113341224593e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 5.2200350984548646917364243548431769767470521552435570015319010534889500617e-07) }; } if constexpr (p == 14) { - if constexpr (std::is_same_v) { - return {0x1.a7702ap-8f, 0x1.fee46p-5f, 0x1.04f778p-2f, 0x1.1bcdf2p-1f, 0x1.432b0ep-1f, 0x1.bfd66ap-3f, -0x1.163586p-2f, -0x1.be885ep-3f, 0x1.1b6ef4p-3f, 0x1.1eb29p-3f, -0x1.63524ep-4f, -0x1.251084p-4f, 0x1.c480a6p-5f, 0x1.ba103ap-6f, -0x1.ee8e8ap-6f, -0x1.6ffce6p-8f, 0x1.a3160cp-7f, -0x1.873bd2p-11f, -0x1.f89472p-9f, 0x1.1650e2p-10f, 0x1.7334fep-11f, -0x1.959f6ap-12f, -0x1.5e73f4p-15f, 0x1.20612ap-14f, -0x1.5adbf4p-17f, -0x1.26968ep-18f, 0x1.cf0cbcp-20f, -0x1.7fc91p-23f}; - } - if constexpr (std::is_same_v) { - return {0x1.a7702ace363acp-8, 0x1.fee460f5cb877p-5, 0x1.04f777f62f423p-2, 0x1.1bcdf22a1725cp-1, 0x1.432b0dc3136d4p-1, 0x1.bfd66ae4258acp-3, -0x1.1635861af071dp-2, -0x1.be885d06053bfp-3, 0x1.1b6ef32bc7359p-3, 0x1.1eb28fc03c55bp-3, -0x1.63524d6aa4cf7p-4, -0x1.2510847f3ed26p-4, 0x1.c480a659de0cdp-5, 0x1.ba103a92149f4p-6, -0x1.ee8e8a6bca9acp-6, -0x1.6ffce6192a67bp-8, 0x1.a3160ba7d924ep-7, -0x1.873bd13c8af18p-11, -0x1.f894721441f67p-9, 0x1.1650e1f6ec4c3p-10, 0x1.7334fd9e58c6ap-11, -0x1.959f69010da01p-12, -0x1.5e73f3c020201p-15, 0x1.20612a2e814f8p-14, -0x1.5adbf364f5e1cp-17, -0x1.26968e53fb76dp-18, 0x1.cf0cbb4133dbbp-20, -0x1.7fc90f0c46da2p-23}; - } - if constexpr (std::is_same_v) { - return {0xd.3b815671b1d61adp-11L, 0xf.f72307ae5c3b8acp-8L, 0x8.27bbbfb17a114bp-5L, 0x8.de6f9150b92e008p-4L, 0xa.19586e189b69d98p-4L, 0xd.feb357212c55f71p-6L, -0x8.b1ac30d7838e67p-5L, -0xd.f442e83029df6fp-6L, 0x8.db77995e39ac42bp-6L, 0x8.f5947e01e2ad986p-6L, -0xb.1a926b55267b7d4p-7L, -0x9.288423f9f692d35p-7L, 0xe.240532cef066a7ap-8L, 0xd.d081d490a4fa2c2p-9L, -0xf.7474535e54d6257p-9L, -0xb.7fe730c9533d677p-11L, 0xd.18b05d3ec926ef4p-10L, -0xc.39de89e4578bd58p-14L, -0xf.c4a390a20fb38fap-12L, 0x8.b2870fb76261486p-13L, 0xb.99a7ecf2c634fb5p-14L, -0xc.acfb48086d004d1p-15L, -0xa.f39f9e01010090ep-18L, 0x9.030951740a7c181p-17L, -0xa.d6df9b27af0deefp-20L, -0x9.34b4729fdbb6709p-21L, 0xe.7865da099eddb46p-23L, -0xb.fe48786236d0c8ep-26L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.a7702ace363ac35a31e24ad7f18bp-8Q, 0x1.fee460f5cb8771588fb11eee4edep-5Q, 0x1.04f777f62f422960e164233d2842p-2Q, 0x1.1bcdf22a1725c010c6b543c39465p-1Q, 0x1.432b0dc3136d3b304d5a3bf4569bp-1Q, 0x1.bfd66ae4258abee147e56af809ep-3Q, -0x1.1635861af071cce08b7655b9575p-2Q, -0x1.be885d06053beddff8849acb8697p-3Q, 0x1.1b6ef32bc7358856a3c8661f7dbbp-3Q, 0x1.1eb28fc03c55b30ce48dc30b7f77p-3Q, -0x1.63524d6aa4cf6fa795512cfa3aa5p-4Q, -0x1.2510847f3ed25a6abc4fb2ebbea9p-4Q, 0x1.c480a659de0cd4f4123d770896e6p-5Q, 0x1.ba103a92149f4583a4c79c292018p-6Q, -0x1.ee8e8a6bca9ac4ad53dedccf86b9p-6Q, -0x1.6ffce6192a67aceee5260da8193dp-8Q, 0x1.a3160ba7d924dde8cc52f58fbb97p-7Q, -0x1.873bd13c8af17ab00e30f03b73e4p-11Q, -0x1.f894721441f671f4ac26746366e6p-9Q, 0x1.1650e1f6ec4c290c75eee26e8b4ap-10Q, 0x1.7334fd9e58c69f69b95d47a6075fp-11Q, -0x1.959f69010da009a2eacf096b1dafp-12Q, -0x1.5e73f3c02020121b8b1dbc91cc8ap-15Q, 0x1.20612a2e814f83021e4b38a90018p-14Q, -0x1.5adbf364f5e1bddd8115a86dd662p-17Q, -0x1.26968e53fb76ce12ec5e07348937p-18Q, 0x1.cf0cbb4133dbb68c44095fc163dep-20Q, -0x1.7fc90f0c46da191bc033464815fbp-23Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00646115346008794781816639744862281427232715941920119921810140416821319638585"), boost::lexical_cast("0.0623647588493988983279856675843487742830533369340766716460251880613807597066"), boost::lexical_cast("0.254850267792621353665907788677828668618704241636713744378008420238232719628"), boost::lexical_cast("0.554305617940893835992683144985115484407826983095163460968399777532226842271"), boost::lexical_cast("0.631187849104856779557661713535817234862395245657001728978880959248433640269"), boost::lexical_cast("0.218670687758906521491747591821751705176577432127043205903027323352534222868"), boost::lexical_cast("-0.271688552278748041414219247618117109460488246568333081431189666923849066652"), boost::lexical_cast("-0.218033529993276044755555881270231191197524066947060475274712704179785996228"), boost::lexical_cast("0.138395213864806591073993969002157371398990046322968611905911990239065683492"), boost::lexical_cast("0.139989016584460701249294316227116344032822155561432618133368381730127661592"), boost::lexical_cast("-0.0867484115681696890456082206672779538297914953951750365749296445982289331724"), boost::lexical_cast("-0.0715489555040461307358414511517380799095806967312953809999091309335447192979"), boost::lexical_cast("0.0552371262592160441161883406053340339791383363251167215767110765995965856731"), boost::lexical_cast("0.0269814083079129169739903140321519334337576659580727423328434928060131390138"), boost::lexical_cast("-0.0301853515403906351871482262348913757378157540665865262488375619379066007462"), boost::lexical_cast("-0.00561504953035695913321837136769149863745729720392581038769868016916017798506"), boost::lexical_cast("0.0127894932663334089615733070578407929937490386157205831348153451948141528455"), boost::lexical_cast("-0.000746218989268384937181716073918178097195818798881330290043548750870183218766"), boost::lexical_cast("-0.00384963886802218744578634931609555177409681850828570049305891572532777766984"), boost::lexical_cast("0.00106169108560676184303256674938841117303394158214783086389393956154388248847"), boost::lexical_cast("0.000708021154235527858644297769761712898347186346418159537167009442266803119446"), boost::lexical_cast("-0.000386831947312954482107666339805731442732890210784216537990146842609536038748"), boost::lexical_cast("-0.0000417772457703725973526797953983925892838972659013273013105432373007939629113"), boost::lexical_cast("0.0000687550425269750960387343702162803160189037068765187527988272789892867302714"), boost::lexical_cast("-0.0000103372091845707739466140734259481458626927250949074485069144305905647763599"), boost::lexical_cast("-0.00000438970490178139411525404256136716982932308536080082571815104919437269388055"), boost::lexical_cast("0.00000172499467536781276988571269274179852358789470986735657691071794719454646345"), boost::lexical_cast("-0.000000178713996831135907633419293847083934388299030997695944699402284569127317214")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0064611534600879478181663974486228142723271594192011992181014041682131963958), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.062364758849398898327985667584348774283053336934076671646025188061380759653), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.25485026779262135366590778867782866861870424163671374437800842023823271874), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.55430561794089383599268314498511548440782698309516346096839977753222684278), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.63118784910485677955766171353581723486239524565700172897888095924843364054), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.21867068775890652149174759182175170517657743212704320590302732335253422232), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.27168855227874804141421924761811710946048824656833308143118966692384906639), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.21803352999327604475555588127023119119752406694706047527471270417978599672), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.13839521386480659107399396900215737139899004632296861190591199023906568404), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.13998901658446070124929431622711634403282215556143261813336838173012766117), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.086748411568169689045608220667277953829791495395175036574929644598228933263), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.071548955504046130735841451151738079909580696731295380999909130933544719175), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.055237126259216044116188340605334033979138336325116721576711076599596585739), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.026981408307912916973990314032151933433757665958072742332843492806013139065), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.030185351540390635187148226234891375737815754066586526248837561937906600698), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0056150495303569591332183713676914986374572972039258103876986801691601779992), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.012789493266333408961573307057840792993749038615720583134815345194814152872), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0007462189892683849371817160739181780971958187988813302900435487508701832207), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.003849638868022187445786349316095551774096818508285700493058915725327777667), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0010616910856067618430325667493884111730339415821478308638939395615438824882), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00070802115423552785864429776976171289834718634641815953716700944226680311764), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00038683194731295448210766633980573144273289021078421653799014684260953603847), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -4.1777245770372597352679795398392589283897265901327301310543237300793962875e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 6.8755042526975096038734370216280316018903706876518752798827278989286730311e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.0337209184570773946614073425948145862692725094907448506914430590564776387e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -4.3897049017813941152540425613671698293230853608008257181510491943726938635e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.7249946753678127698857126927417985235878947098673565769107179471945464675e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.7871399683113590763341929384708393438829903099769594469940228456912731758e-07) }; } if constexpr (p == 15) { - if constexpr (std::is_same_v) { - return {0x1.297006p-8f, 0x1.7eec02p-5f, 0x1.a5efd6p-3f, 0x1.f87476p-2f, 0x1.4aa806p-1f, 0x1.5b237cp-2f, -0x1.8bae9cp-3f, -0x1.27d0d6p-2f, 0x1.0b6624p-4f, 0x1.856ba4p-3f, -0x1.44f2p-5f, -0x1.c726cp-4f, 0x1.158586p-5f, 0x1.c0c324p-5f, -0x1.a62aaap-6f, -0x1.54f3aep-6f, 0x1.ee4514p-7f, 0x1.4e4c96p-8f, -0x1.a92e2p-8f, -0x1.fb0008p-13f, 0x1.fd6e44p-10f, -0x1.879fe8p-12f, -0x1.79081p-12f, 0x1.46f04ap-13f, 0x1.b0baccp-16f, -0x1.d7ff96p-16f, 0x1.c35f5cp-19f, 0x1.e6358ep-20f, -0x1.532292p-21f, 0x1.076d02p-24f}; - } - if constexpr (std::is_same_v) { - return {0x1.2970058a26dcep-8, 0x1.7eec010bca4c4p-5, 0x1.a5efd6f02857ep-3, 0x1.f8747691d3f73p-2, 0x1.4aa8051a530b4p-1, 0x1.5b237b0c28179p-2, -0x1.8bae9ca895b45p-3, -0x1.27d0d6e28e01fp-2, 0x1.0b6623378c72fp-4, 0x1.856ba3f0d1d5bp-3, -0x1.44f200621040dp-5, -0x1.c726bf22e4a16p-4, 0x1.15858527779bcp-5, 0x1.c0c32426f4663p-5, -0x1.a62aa972a6fc4p-6, -0x1.54f3ad3a0b7c6p-6, 0x1.ee4513500347p-7, 0x1.4e4c95b98ec2dp-8, -0x1.a92e1fc2fdcaep-8, -0x1.fb000715d8e65p-13, 0x1.fd6e43c3dd5e8p-10, -0x1.879fe7f24ba0ap-12, -0x1.79080f71ee322p-12, 0x1.46f04a6cb59p-13, 0x1.b0bacca20c60fp-16, -0x1.d7ff965f47a09p-16, 0x1.c35f5c1543372p-19, 0x1.e6358dfe44b53p-20, -0x1.532291d1cbfa4p-21, 0x1.076d016337019p-24}; - } - if constexpr (std::is_same_v) { - return {0x9.4b802c5136e6cb1p-11L, 0xb.f760085e52620cp-8L, 0xd.2f7eb78142bee86p-6L, 0xf.c3a3b48e9fb9b9bp-5L, 0xa.554028d2985a2bep-4L, 0xa.d91bd86140bc88ap-5L, -0xc.5d74e544ada28ecp-6L, -0x9.3e86b714700f9f8p-5L, 0x8.5b3119bc6397595p-7L, 0xc.2b5d1f868ead57ap-6L, -0xa.2790031082066ebp-8L, -0xe.3935f917250aff5p-7L, 0x8.ac2c293bbcde0e2p-8L, 0xe.06192137a331763p-8L, -0xd.31554b9537e1c3bp-9L, -0xa.a79d69d05be2dedp-9L, 0xf.72289a801a381d6p-10L, 0xa.7264adcc7616af1p-11L, -0xd.4970fe17ee56c45p-11L, -0xf.d80038aec732ac5p-16L, 0xf.eb721e1eeaf4368p-13L, -0xc.3cff3f925d05241p-15L, -0xb.c8407b8f7191299p-15L, 0xa.37825365ac803f5p-16L, 0xd.85d665106307a4ap-19L, -0xe.bffcb2fa3d0481cp-19L, 0xe.1afae0aa19b8c5bp-22L, 0xf.31ac6ff225a9413p-23L, -0xa.99148e8e5fd1f6dp-24L, 0x8.3b680b19b80c80ep-27L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.2970058a26dcd961f2ddf52bca08p-8Q, 0x1.7eec010bca4c417f3cf45c166751p-5Q, 0x1.a5efd6f02857dd0be400d7c02e2cp-3Q, 0x1.f8747691d3f737355530dd281d86p-2Q, 0x1.4aa8051a530b457c39051251b937p-1Q, 0x1.5b237b0c281791146b95d35023c4p-2Q, -0x1.8bae9ca895b451d87fbb9a690248p-3Q, -0x1.27d0d6e28e01f3ef0606971828aap-2Q, 0x1.0b6623378c72eb295fa0f634a67bp-4Q, 0x1.856ba3f0d1d5aaf4f59a12cbb286p-3Q, -0x1.44f200621040cdd51fafc7035006p-5Q, -0x1.c726bf22e4a15fea85834dbb1052p-4Q, 0x1.15858527779bc1c4ec7f8b6fdd21p-5Q, 0x1.c0c32426f4662ec60f158af78296p-5Q, -0x1.a62aa972a6fc3876e9915f565de4p-6Q, -0x1.54f3ad3a0b7c5bd971d938015013p-6Q, 0x1.ee451350034703acaa0dbe95c1aep-7Q, 0x1.4e4c95b98ec2d5e117559a2b0da9p-8Q, -0x1.a92e1fc2fdcad88a36c4f23f938p-8Q, -0x1.fb000715d8e6558a8e3b0bc34d7fp-13Q, 0x1.fd6e43c3dd5e86d041c185aa9428p-10Q, -0x1.879fe7f24ba0a4818b2d76fbd7e6p-12Q, -0x1.79080f71ee322531c0337932b9a5p-12Q, 0x1.46f04a6cb59007eab6af7b114fa4p-13Q, 0x1.b0bacca20c60f4939edefbff1354p-16Q, -0x1.d7ff965f47a09038cb01ea5da5e9p-16Q, 0x1.c35f5c15433718b508f832bbf1b8p-19Q, 0x1.e6358dfe44b5282546827ce8042cp-20Q, -0x1.532291d1cbfa3eda1a3275ffd36dp-21Q, 0x1.076d01633701901bb8cc971717bp-24Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00453853736157889888145939491021169634666367124378878699791651359730618263777"), boost::lexical_cast("0.0467433948927662718917096933484357577657915170021494351311319734377213834945"), boost::lexical_cast("0.206023863986995731539891500947630721930613850564193090270204726624901561209"), boost::lexical_cast("0.492631771708139623606775707402994637261722156513093240216016003697522813162"), boost::lexical_cast("0.645813140357424358176420912010691799643260828749404618107148947895533066481"), boost::lexical_cast("0.339002535454731527691264114383577391875676949179355466933669011509397556470"), boost::lexical_cast("-0.193204139609145428706399053432147174630409003914286382793775492150589726686"), boost::lexical_cast("-0.288882596566965646248412500982233298131143563043534259497129296256293483504"), boost::lexical_cast("0.0652829528487728169228310791986957488203917428559614412596510130561953369929"), boost::lexical_cast("0.190146714007122982348489311658602051795950125817433669687815606055254287820"), boost::lexical_cast("-0.0396661765557909444838436675189620066838174282068373680544974535292838687668"), boost::lexical_cast("-0.111120936037231693365671032467405860885862376216591412050565788400539631609"), boost::lexical_cast("0.0338771439235076862085481784443352377086474468741126536946319599123012785905"), boost::lexical_cast("0.0547805505845076126891379031258187910860941599742276856424484536408030091303"), boost::lexical_cast("-0.0257670073284399625859452575426982639220364163482534013839683682541716280711"), boost::lexical_cast("-0.0208100501696930816778848342467700016205465795136489904099616617271926101264"), boost::lexical_cast("0.0150839180278359023632927446017032273624489282330562771623396889036950783790"), boost::lexical_cast("0.00510100036040754316970886018556531472480106652734422205552663106916575853665"), boost::lexical_cast("-0.00648773456031574499518168314921869081695584563938882640792896746945184786140"), boost::lexical_cast("-0.000241756490761624281166722532630017960522994699581453522332941192889131156009"), boost::lexical_cast("0.00194332398038221154176491233254108744101142486557953140145230261789465341230"), boost::lexical_cast("-0.000373482354137616992009809421364541461138763096803025662574022673555831120585"), boost::lexical_cast("-0.000359565244362468812164962007590980885819420245408409030562748046672838761659"), boost::lexical_cast("0.000155896489920599747947165824122710881625556705962549591522860363042830623991"), boost::lexical_cast("0.0000257926991553189368092586241761685591294404236876734070916011973700950042214"), boost::lexical_cast("-0.0000281332962660478136475532477707847866579144387629378890426725562075302388539"), boost::lexical_cast("0.00000336298718173757980312484521042017747213484665586407818718630450150330033976"), boost::lexical_cast("0.00000181127040794057708376851091228584116057708592533750785059029068086553957632"), boost::lexical_cast("-0.000000631688232588166442120159729951765765416613791512119551041664162606772181110"), boost::lexical_cast("0.0000000613335991330575202905629946028978860198919045088539651217384559505804672173")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0045385373615788988814593949102116963466636712437887869979165135973061826537), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.046743394892766271891709693348435757765791517002149435131131973437721383622), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.20602386398699573153989150094763072193061385056419309027020472662490156122), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.49263177170813962360677570740299463726172215651309324021601600369752281377), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.64581314035742435817642091201069179964326082874940461810714894789553306679), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.3390025354547315276912641143835773918756769491793554669336690115093975569), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.19320413960914542870639905343214717463040900391428638279377549215058972689), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.28888259656696564624841250098223329813114356304353425949712929625629348294), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.065282952848772816922831079198695748820391742855961441259651013056195336897), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.19014671400712298234848931165860205179595012581743366968781560605525428795), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.039666176555790944483843667518962006683817428206837368054497453529283868676), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.11112093603723169336567103246740586088586237621659141205056578840053963186), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.033877143923507686208548178444335237708647446874112653694631959912301278547), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.05478055058450761268913790312581879108609415997422768564244845364080300918), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.025767007328439962585945257542698263922036416348253401383968368254171628001), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.020810050169693081677884834246770001620546579513648990409961661727192610178), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.015083918027835902363292744601703227362448928233056277162339688903695078372), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0051010003604075431697088601855653147248010665273442220555266310691657585506), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0064877345603157449951816831492186908169558456393888264079289674694518478686), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00024175649076162428116672253263001796052299469958145352233294119288913115604), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0019433239803822115417649123325410874410114248655795314014523026178946534131), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00037348235413761699200980942136454146113876309680302566257402267355583112012), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00035956524436246881216496200759098088581942024540840903056274804667283876243), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00015589648992059974794716582412271088162555670596254959152286036304283062436), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 2.5792699155318936809258624176168559129440423687673407091601197370095004239e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -2.8133296266047813647553247770784786657914438762937889042672556207530238846e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.3629871817375798031248452104201774721348466558640781871863045015033003361e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.8112704079405770837685109122858411605770859253375078505902906808655395748e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -6.3168823258816644212015972995176576541661379151211955104166416260677217926e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 6.1333599133057520290562994602897886019891904508853965121738455950580467421e-08) }; } if constexpr (p == 16) { - if constexpr (std::is_same_v) { - return {0x1.a2048p-9f, 0x1.1df6c8p-5f, 0x1.520d3ap-3f, 0x1.b8a3e6p-2f, 0x1.465392p-1f, 0x1.c2db72p-2f, -0x1.6f9ed6p-4f, -0x1.4ee9bp-2f, -0x1.c96974p-6f, 0x1.b084cp-3f, 0x1.bff16p-6f, -0x1.0f219ap-3f, -0x1.98ed2ep-8f, 0x1.36fc54p-4f, -0x1.f159dcp-8f, -0x1.2e3094p-5f, 0x1.516f08p-7f, 0x1.ca8c3ep-7f, -0x1.ca18fcp-8f, -0x1.dda9bcp-9f, 0x1.99ff0cp-9f, 0x1.abb604p-12f, -0x1.ed5dcep-11f, 0x1.df29e6p-14f, 0x1.6e8e3p-13f, -0x1.0000dep-14f, -0x1.d3f062p-17f, 0x1.7c64bap-17f, -0x1.1821aep-20f, -0x1.8b5554p-21f, 0x1.efcecp-23f, -0x1.6a61bcp-26f}; - } - if constexpr (std::is_same_v) { - return {0x1.a2047f25eec86p-9, 0x1.1df6c86cbec6p-5, 0x1.520d391a94107p-3, 0x1.b8a3e5feb4879p-2, 0x1.465391b465934p-1, 0x1.c2db72f84c204p-2, -0x1.6f9ed69c399c7p-4, -0x1.4ee9af39c16ecp-2, -0x1.c96973b93bd86p-6, 0x1.b084bf1dc763bp-3, 0x1.bff160aba4bc3p-6, -0x1.0f21999627c5fp-3, -0x1.98ed2d2871d0ap-8, 0x1.36fc54ec8b106p-4, -0x1.f159dcb973ff4p-8, -0x1.2e3093b602a51p-5, 0x1.516f07b10e2cp-7, 0x1.ca8c3dcce54c3p-7, -0x1.ca18fbf2cc141p-8, -0x1.dda9bb9568c15p-9, 0x1.99ff0c3f2ed81p-9, 0x1.abb6031610513p-12, -0x1.ed5dcd1b49a3fp-11, 0x1.df29e5ea12845p-14, 0x1.6e8e301063e5ap-13, -0x1.0000dea4283e9p-14, -0x1.d3f0626b575afp-17, 0x1.7c64ba15d2346p-17, -0x1.1821ad345e7cp-20, -0x1.8b555407022a1p-21, 0x1.efcebf5a99b7bp-23, -0x1.6a61bcee28103p-26}; - } - if constexpr (std::is_same_v) { - return {0xd.1023f92f7642ed3p-12L, 0x8.efb64365f630239p-8L, 0xa.9069c8d4a08344dp-6L, 0xd.c51f2ff5a43c97dp-5L, 0xa.329c8da32c99c9dp-4L, 0xe.16db97c26101ca7p-5L, -0xb.7cf6b4e1cce36cbp-7L, -0xa.774d79ce0b75fdfp-5L, -0xe.4b4b9dc9dec3204p-9L, 0xd.8425f8ee3b1d5bfp-6L, 0xd.ff8b055d25e15c1p-9L, -0x8.790cccb13e2f58ep-6L, -0xc.c76969438e84e18p-11L, 0x9.b7e2a76458832d7p-7L, -0xf.8acee5cb9ff9e4cp-11L, -0x9.71849db015288a6p-8L, 0xa.8b783d88715ff76p-10L, 0xe.5461ee672a6184ep-10L, -0xe.50c7df9660a0b0ep-11L, -0xe.ed4ddcab460a85bp-12L, 0xc.cff861f976c0535p-12L, 0xd.5db018b082895d2p-15L, -0xf.6aee68da4d1f9e1p-14L, 0xe.f94f2f509422907p-17L, 0xb.747180831f2d336p-16L, -0x8.0006f52141f4728p-17L, -0xe.9f83135abad7bfp-20L, 0xb.e325d0ae91a325cp-20L, -0x8.c10d69a2f3dfe1fp-23L, -0xc.5aaaa0381150b42p-24L, 0xf.7e75fad4cdbdbc5p-26L, -0xb.530de771408178bp-29L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.a2047f25eec85da6e57cd7f20965p-9Q, 0x1.1df6c86cbec60472edd73314093ap-5Q, 0x1.520d391a9410689a221d2a40ed0cp-3Q, 0x1.b8a3e5feb48792faed491d08e637p-2Q, 0x1.465391b4659339393dc6b44dd0b9p-1Q, 0x1.c2db72f84c20394e90d8314fee8dp-2Q, -0x1.6f9ed69c399c6d957cef0caf36cp-4Q, -0x1.4ee9af39c16ebfbef0c302e6791dp-2Q, -0x1.c96973b93bd864088cf77c5363e8p-6Q, 0x1.b084bf1dc763ab7d34b03cf7014cp-3Q, 0x1.bff160aba4bc2b81b5cb21d8ed3dp-6Q, -0x1.0f21999627c5eb1bdc396cd5510bp-3Q, -0x1.98ed2d2871d09c2ff301236b3aa5p-8Q, 0x1.36fc54ec8b1065ad541d9561e805p-4Q, -0x1.f159dcb973ff3c971dea81777e8cp-8Q, -0x1.2e3093b602a5114cced31fb3d21p-5Q, 0x1.516f07b10e2bfeeb35e5d488972dp-7Q, 0x1.ca8c3dcce54c309c6bfdafe5b818p-7Q, -0x1.ca18fbf2cc14161cd462d6382e8dp-8Q, -0x1.dda9bb9568c150b5b1b563e2a704p-9Q, 0x1.99ff0c3f2ed80a696d3f49d1ae83p-9Q, 0x1.abb6031610512ba452ab2c15607bp-12Q, -0x1.ed5dcd1b49a3f3c23377158c2ae9p-11Q, 0x1.df29e5ea1284520ed9350c7d7e2fp-14Q, 0x1.6e8e301063e5a66bc2dcbb672407p-13Q, -0x1.0000dea4283e8e4f97e320b5edbp-14Q, -0x1.d3f0626b575af7e0f5c7b70618f9p-17Q, 0x1.7c64ba15d23464b7681824c41ca1p-17Q, -0x1.1821ad345e7bfc3ef33cc03c406ap-20Q, -0x1.8b555407022a1683907685f46c79p-21Q, 0x1.efcebf5a99b7b789a7792201843ep-23Q, -0x1.6a61bcee28102f153c8290cebfbbp-26Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00318922092534773802976954756464595868706708675013142876787587817778694863119"), boost::lexical_cast("0.0349077143236733464103014722402302000921824143050398414614005464773763780013"), boost::lexical_cast("0.165064283488853117899125273056113481158483500234272324021359282902034099572"), boost::lexical_cast("0.430312722846003813740392542435768462063397047803698677392464629118864929936"), boost::lexical_cast("0.637356332083788898631985241299603053649859594081419812596775159322552430035"), boost::lexical_cast("0.440290256886356900039086916357167928852780303513527257878988432216501129849"), boost::lexical_cast("-0.0897510894024896428571871807744259743065924744558266014962471841522684784655"), boost::lexical_cast("-0.327063310527917704646290567568911964175722891822881242814172353116733610255"), boost::lexical_cast("-0.0279182081330282766826451959502687320433997121917473604153547976243684979156"), boost::lexical_cast("0.211190693947104288720968016326883790092849142616767943925104282659239340555"), boost::lexical_cast("0.0273402637527160413648524575720161796542902781950713022023150026811811035864"), boost::lexical_cast("-0.132388305563810390450047414775649337509228781770602797879854902742212569323"), boost::lexical_cast("-0.00623972275247487176567450339412002586544465631167876099076145808663824556181"), boost::lexical_cast("0.0759242360442763158214849874394142246153040594610094335194031399951322105236"), boost::lexical_cast("-0.00758897436885773763849489086463699579658697514499092540009716094367144606278"), boost::lexical_cast("-0.0368883976917301423335266632089455431471874842970673083106406876512904740900"), boost::lexical_cast("0.0102976596409559694116500058007661690052885626580366220885414734497334909977"), boost::lexical_cast("0.0139937688598287310295045187367032972640984029172786898849010078360486452906"), boost::lexical_cast("-0.00699001456341391667028424953651728833805785619964646907811575967502711102002"), boost::lexical_cast("-0.00364427962149838993216900054093362938705533397335310866884121504669938973849"), boost::lexical_cast("0.00312802338120626883166120255985467876782147190619360811745036081031020620657"), boost::lexical_cast("0.000407896980849712836241747032340609578243195297231054671507139711098341190969"), boost::lexical_cast("-0.000941021749359567588926645395363587540775474721673448050925027367949065706153"), boost::lexical_cast("0.000114241520038722392644022809955566294583968434493647265287709142315097418924"), boost::lexical_cast("0.000174787245225338180380175863766074687498602472861539989797195359589183047664"), boost::lexical_cast("-0.0000610359662141093583516236915052221281195725998196591914396172281391485128503"), boost::lexical_cast("-0.0000139456689882088934519907831199840198232527356919867533540870797045644631590"), boost::lexical_cast("0.0000113366086612762585875884876288653699751947106820375366175784342881379088583"), boost::lexical_cast("-0.00000104357134231160650152545473726261540488747893063567647154603268028625910132"), boost::lexical_cast("-0.000000736365678545120551209969571972556364658544554584166332743356923285383067848"), boost::lexical_cast("0.000000230878408685754586640541273294200612130630673586665552537254486473108851937"), boost::lexical_cast("-0.0000000210933963010074309700057262360348990683629758459160530774534994952533728279")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0031892209253477380297695475646459586870670867501314287678758781777869486255), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.034907714323673346410301472240230200092182414305039841461400546477376377996), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.16506428348885311789912527305611348115848350023427232402135928290203409966), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.43031272284600381374039254243576846206339704780369867739246462911886492889), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.63735633208378889863198524129960305364985959408141981259677515932255242966), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.44029025688635690003908691635716792885278030351352725787898843221650113068), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.089751089402489642857187180774425974306592474455826601496247184152268478657), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.32706331052791770464629056756891196417572289182288124281417235311673360956), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.027918208133028276682645195950268732043399712191747360415354797624368497971), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.21119069394710428872096801632688379009284914261676794392510428265923934071), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.027340263752716041364852457572016179654290278195071302202315002681181103625), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.13238830556381039045004741477564933750922878177060279787985490274221256881), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0062397227524748717656745033941200258654446563116787609907614580866382455691), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.075924236044276315821484987439414224615304059461009433519403139995132210368), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.007588974368857737638494890864636995796586975144990925400097160943671446065), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.036888397691730142333526663208945543147187484297067308310640687651290473968), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.010297659640955969411650005800766169005288562658036622088541473449733491006), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.013993768859828731029504518736703297264098402917278689884901007836048645298), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0069900145634139166702842495365172883380578561996464690781157596750271110103), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0036442796214983899321690005409336293870553339733531086688412150466993897338), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0031280233812062688316612025598546787678214719061936081174503608103102062028), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00040789698084971283624174703234060957824319529723105467150713971109834118994), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00094102174935956758892664539536358754077547472167344805092502736794906570513), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00011424152003872239264402280995556629458396843449364726528770914231509741867), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00017478724522533818038017586376607468749860247286153998979719535958918304821), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -6.1035966214109358351623691505222128119572599819659191439617228139148512866e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.3945668988208893451990783119984019823252735691986753354087079704564463183e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.1336608661276258587588487628865369975194710682037536617578434288137908852e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.0435713423116065015254547372626154048874789306356764715460326802862590987e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -7.3636567854512055120996957197255636465854455458416633274335692328538306759e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 2.3087840868575458664054127329420061213063067358666555253725448647310885248e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -2.1093396301007430970005726236034899068362975845916053077453499495253372784e-08) }; } if constexpr (p == 17) { - if constexpr (std::is_same_v) { - return {0x1.25d69p-9f, 0x1.a9bea4p-6f, 0x1.0cba66p-3f, 0x1.7b3d38p-2f, 0x1.38d48cp-1f, 0x1.0960bp-1f, 0x1.bf874ap-6f, -0x1.50335p-2f, -0x1.0346bcp-3f, 0x1.941794p-3f, 0x1.9e404p-4f, -0x1.03b7f2p-3f, -0x1.d3b162p-5f, 0x1.4c35cap-4f, 0x1.6d90b8p-6f, -0x1.80637cp-5f, -0x1.acbb0ep-9f, 0x1.7477f4p-6f, -0x1.8ed9ccp-9f, -0x1.19e68ap-7f, 0x1.850572p-9f, 0x1.2d9fa2p-9f, -0x1.78a90ep-10f, -0x1.581268p-12f, 0x1.ccd01ap-12f, -0x1.adaa96p-16f, -0x1.582268p-14f, 0x1.85029cp-16f, 0x1.d5219cp-18f, -0x1.2e638p-18f, 0x1.43e648p-22f, 0x1.3d94aap-22f, -0x1.69ce4ap-24f, 0x1.f36b16p-28f}; - } - if constexpr (std::is_same_v) { - return {0x1.25d68f81bd86cp-9, 0x1.a9bea4085cef4p-6, 0x1.0cba6633a3a6dp-3, 0x1.7b3d3861245dp-2, 0x1.38d48c64aa0dbp-1, 0x1.0960af0f4068ep-1, 0x1.bf874a24b1d56p-6, -0x1.50335073492d2p-2, -0x1.0346bb1b97634p-3, 0x1.9417930ab08a3p-3, 0x1.9e403f27b713fp-4, -0x1.03b7f2067576fp-3, -0x1.d3b162866891bp-5, 0x1.4c35ca8307eb6p-4, 0x1.6d90b88bab06p-6, -0x1.80637c4a935c8p-5, -0x1.acbb0e1b24a77p-9, 0x1.7477f35c89773p-6, -0x1.8ed9cce7691cbp-9, -0x1.19e6894a383d1p-7, 0x1.8505717311392p-9, 0x1.2d9fa2834b37bp-9, -0x1.78a90e5fc8eecp-10, -0x1.58126708ae49dp-12, 0x1.ccd01a3d65145p-12, -0x1.adaa9541cd341p-16, -0x1.5822674fd0b1ap-14, 0x1.85029b61ff0fcp-16, 0x1.d5219c45df32ep-18, -0x1.2e63809757f53p-18, 0x1.43e648c7ce72fp-22, 0x1.3d94aa0876b2dp-22, -0x1.69ce4aed2f58ep-24, 0x1.f36b16a008a29p-28}; - } - if constexpr (std::is_same_v) { - return {0x9.2eb47c0dec36183p-12L, 0xd.4df52042e779eb7p-9L, 0x8.65d3319d1d36a45p-6L, 0xb.d9e9c30922e8138p-5L, 0x9.c6a46325506d79dp-4L, 0x8.4b05787a03472d6p-4L, 0xd.fc3a51258eaaed3p-9L, -0xa.819a839a4968eafp-5L, -0x8.1a35d8dcbb19dd2p-6L, 0xc.a0bc9855845188cp-6L, 0xc.f201f93db89f96ep-7L, -0x8.1dbf9033abb79d9p-6L, -0xe.9d8b1433448d469p-8L, 0xa.61ae54183f5b11cp-7L, 0xb.6c85c45d582fc12p-9L, -0xc.031be2549ae3edfp-8L, -0xd.65d870d9253b88dp-12L, 0xb.a3bf9ae44bb963dp-9L, -0xc.76ce673b48e5651p-12L, -0x8.cf344a51c1e8512p-10L, 0xc.282b8b9889c92c5p-12L, 0x9.6cfd141a59bd766p-12L, -0xb.c54872fe4775c65p-13L, -0xa.c0933845724e821p-15L, 0xe.6680d1eb28a2645p-15L, -0xd.6d54aa0e69a09cdp-19L, -0xa.c1133a7e858d207p-17L, 0xc.2814db0ff87dcc6p-19L, 0xe.a90ce22ef996e32p-21L, -0x9.731c04babfa9664p-21L, 0xa.1f32463e73979d5p-25L, 0x9.eca55043b596609p-25L, -0xb.4e7257697ac7376p-27L, 0xf.9b58b5004514458p-31L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.25d68f81bd86c306bc9043f43f4p-9Q, 0x1.a9bea4085cef3d6d79a074d9709ep-6Q, 0x1.0cba6633a3a6d489f4c961323b24p-3Q, 0x1.7b3d3861245d02709eb04b0b2b39p-2Q, 0x1.38d48c64aa0daf396243783e95bep-1Q, 0x1.0960af0f4068e5ac2ea6e7c9135p-1Q, 0x1.bf874a24b1d55da571e39f2bf7e7p-6Q, -0x1.50335073492d1d5e6945d8cdee28p-2Q, -0x1.0346bb1b97633ba3dcc115a9814cp-3Q, 0x1.9417930ab08a311830b19e500034p-3Q, 0x1.9e403f27b713f2db7263ac22d15fp-4Q, -0x1.03b7f2067576f3b2927e9c5889d3p-3Q, -0x1.d3b162866891a8d294e6e9eb979p-5Q, 0x1.4c35ca8307eb62387847e8508ae5p-4Q, 0x1.6d90b88bab05f824bb4e728b7a1p-6Q, -0x1.80637c4a935c7dbdd09fd2c6d8fdp-5Q, -0x1.acbb0e1b24a7711aad0c2cc58d1fp-9Q, 0x1.7477f35c89772c79eec161a3cdd2p-6Q, -0x1.8ed9cce7691caca1362d6d7abefcp-9Q, -0x1.19e6894a383d0a23e4d18574889p-7Q, 0x1.85057173113925897d4027a40b6ep-9Q, 0x1.2d9fa2834b37aecc772ff5c2d7b1p-9Q, -0x1.78a90e5fc8eeb8c9dbcf2179c3bbp-10Q, -0x1.58126708ae49d0421a9c690b913dp-12Q, 0x1.ccd01a3d65144c8ab80302b0f5dbp-12Q, -0x1.adaa9541cd34139a00a6638e9bf6p-16Q, -0x1.5822674fd0b1a40e647125cde434p-14Q, 0x1.85029b61ff0fb98b3294c269c9e6p-16Q, 0x1.d5219c45df32dc63e76e89984d9dp-18Q, -0x1.2e63809757f52cc8ed09e415ace1p-18Q, 0x1.43e648c7ce72f3a94ea0d55898bap-22Q, 0x1.3d94aa0876b2cc113a8ea22e3eecp-22Q, -0x1.69ce4aed2f58e6ecb8a211f55ad1p-24Q, 0x1.f36b16a008a288af85eb1e1cec02p-28Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00224180700103731285353596267707443691406219188056037073325053118133419193342"), boost::lexical_cast("0.0259853937036060433891486459172078831547394452487824129439994827687663725129"), boost::lexical_cast("0.131214903307824406577550623185906996014429360925997853006700439459033631661"), boost::lexical_cast("0.370350724152641150449254819072188644947707887689680382365042593579529628290"), boost::lexical_cast("0.610996615684622818188667886767937208273709389335872629137178390490835290734"), boost::lexical_cast("0.518315764056937839325453852808596804621681719771841640243990498683288900340"), boost::lexical_cast("0.0273149704032936350043125071914758648035046981896456300367294282283271222511"), boost::lexical_cast("-0.328320748363961736090966534072506176758159769815155802467913052689676377760"), boost::lexical_cast("-0.126599752215882702874467911093382550505396626010408616210372832359164928283"), boost::lexical_cast("0.197310589565010992785404704478193014255142241413564691712228422600456673716"), boost::lexical_cast("0.101135489177470272150969985643343480219662254549966487610943796293105029624"), boost::lexical_cast("-0.126815691778286311094857112866233168038479218591501706573213748994956827246"), boost::lexical_cast("-0.0570914196316769272891123947865138232416116086984534705399014464059382899408"), boost::lexical_cast("0.0811059866541608850796588574855542920102436419095449919402067822775070461335"), boost::lexical_cast("0.0223123361781037959533913605953481375623224211409368924402086919318268997481"), boost::lexical_cast("-0.0469224383892697373330089705921140050713876812549803060287843927826168188238"), boost::lexical_cast("-0.00327095553581929378165536022217749445206952595806160939280927575122449701285"), boost::lexical_cast("0.0227336765839462703184561624478844896990671374133833949802486413275635089855"), boost::lexical_cast("-0.00304298998135463706859248263790720607863339545722509658828788135585314667137"), boost::lexical_cast("-0.00860292152032285483171370641324365991792673628427173061192098670257230281191"), boost::lexical_cast("0.00296799669152609487280648506000803826995946384654837899504419503429102573503"), boost::lexical_cast("0.00230120524215354562430205986903842360424197668018944747606476493728483725055"), boost::lexical_cast("-0.00143684530480297612622289040298038490350367453072993580956143471121236432705"), boost::lexical_cast("-0.000328132519409837971395444401752011507581240244272874970019565158958075253614"), boost::lexical_cast("0.000439465427768643677838567752731784163228924931973889217946591075762286390503"), boost::lexical_cast("-0.0000256101095665484588272989121094992022166408206153190965517841374523415859860"), boost::lexical_cast("-0.0000820480320245339183909548257628218986613627304963676433868959364213432243666"), boost::lexical_cast("0.0000231868137987459508448206820570627757210669517409189533853073478931042782802"), boost::lexical_cast("0.00000699060098507675127320454970085537862776275858590205796402748138050877941586"), boost::lexical_cast("-0.00000450594247722298819410226820637831212971357260071649994491841668706683585071"), boost::lexical_cast("0.000000301654960999455741560520759487993976347616870521764689770270618984715407855"), boost::lexical_cast("0.000000295770093331685675497990525881615136787034562892431730735463949569521998500"), boost::lexical_cast("-0.0000000842394844600268017878707129692287706841031094222279962259313341617779208118"), boost::lexical_cast("0.00000000726749296856160811087976744140903503415858171978979108889204640807029047656")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0022418070010373128535359626770744369140621918805603707332505311813341919259), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.025985393703606043389148645917207883154739445248782412943999482768766372542), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.1312149033078244065775506231859069960144293609259978530067004394590336311), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.37035072415264115044925481907218864494770788768968038236504259357952962858), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.61099661568462281818866788676793720827370938933587262913717839049083529043), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.51831576405693783932545385280859680462168171977184164024399049868328890005), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.027314970403293635004312507191475864803504698189645630036729428228327122309), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.32832074836396173609096653407250617675815976981515580246791305268967637817), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.12659975221588270287446791109338255050539662601040861621037283235916492881), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.19731058956501099278540470447819301425514224141356469171222842260045667421), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.10113548917747027215096998564334348021966225454996648761094379629310502982), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.12681569177828631109485711286623316803847921859150170657321374899495682695), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.057091419631676927289112394786513823241611608698453470539901446405938289849), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.081105986654160885079658857485554292010243641909544991940206782277507046299), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.022312336178103795953391360595348137562322421140936892440208691931826899684), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.04692243838926973733300897059211400507138768125498030602878439278261681888), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0032709555358192937816553602221774944520695259580616093928092757512244970215), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.022733676583946270318456162447884489699067137413383394980248641327563508924), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.003042989981354637068592482637907206078633395457225096588287881355853146664), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0086029215203228548317137064132436599179267362842717306119209867025723028123), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0029679966915260948728064850600080382699594638465483789950441950342910257421), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0023012052421535456243020598690384236042419766801894474760647649372848372532), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0014368453048029761262228904029803849035036745307299358095614347112123643258), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0003281325194098379713954444017520115075812402442728749700195651589580752544), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00043946542776864367783856775273178416322892493197388921794659107576228639092), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -2.561010956654845882729891210949920221664082061531909655178413745234158599e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -8.2048032024533918390954825762821898661362730496367643386895936421343224507e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 2.3186813798745950844820682057062775721066951740918953385307347893104278256e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 6.9906009850767512732045497008553786277627585859020579640274813805087794281e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -4.5059424772229881941022682063783121297135726007164999449184166870668358606e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.016549609994557415605207594879939763476168705217646897702706189847154081e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 2.9577009333168567549799052588161513678703456289243173073546394956952199848e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -8.4239484460026801787870712969228770684103109422227996225931334161777920896e-08), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 7.2674929685616081108797674414090350341585817197897910888920464080702904824e-09) }; } if constexpr (p == 18) { - if constexpr (std::is_same_v) { - return {0x1.9d3864p-10f, 0x1.3c05f8p-6f, 0x1.a84c62p-4f, 0x1.423b32p-2f, 0x1.24c67cp-1f, 0x1.24c33p-1f, 0x1.2d835p-3f, -0x1.2cb3a6p-2f, -0x1.bb5a5cp-3f, 0x1.323edep-3f, 0x1.562ebap-3f, -0x1.7a31p-4f, -0x1.b541d8p-4f, 0x1.09c72ep-4f, 0x1.d35d24p-5f, -0x1.6cc216p-5f, -0x1.84d84cp-6f, 0x1.b4f90cp-6f, 0x1.9a65bep-8f, -0x1.ababc2p-7f, 0x1.f19208p-14f, 0x1.43f78cp-8f, -0x1.2544ep-10f, -0x1.5f6de6p-10f, 0x1.497f3cp-11f, 0x1.bfe9bap-13f, -0x1.a098a2p-13f, -0x1.49d5fp-23f, 0x1.39d678p-15f, -0x1.1de76cp-17f, -0x1.bf4c72p-19f, 0x1.dac908p-20f, -0x1.4a5a66p-24f, -0x1.f9216ep-24f, 0x1.079c6ap-25f, -0x1.58b01ap-29f}; - } - if constexpr (std::is_same_v) { - return {0x1.9d386358a1875p-10, 0x1.3c05f73c5b367p-6, 0x1.a84c610f33b44p-4, 0x1.423b3247213b9p-2, 0x1.24c67bbcaad51p-1, 0x1.24c32fbf17436p-1, 0x1.2d834f99026eap-3, -0x1.2cb3a5153503ap-2, -0x1.bb5a5b1e13b57p-3, 0x1.323ede758da42p-3, 0x1.562eba30ba3dbp-3, -0x1.7a30ff6ce5272p-4, -0x1.b541d802db16ep-4, 0x1.09c72d78f0163p-4, 0x1.d35d236774d12p-5, -0x1.6cc216694aaa1p-5, -0x1.84d84c9eacf2cp-6, 0x1.b4f90c6dc9842p-6, 0x1.9a65be90d86a5p-8, -0x1.ababc1ea3f978p-7, 0x1.f19207685977fp-14, 0x1.43f78b1e4d853p-8, -0x1.2544e0deeca72p-10, -0x1.5f6de508b2306p-10, 0x1.497f3c70a07ccp-11, 0x1.bfe9ba59913cep-13, -0x1.a098a12371c0dp-13, -0x1.49d5efd42da9p-23, 0x1.39d678c2c06afp-15, -0x1.1de76b2193bedp-17, -0x1.bf4c72e2a2d94p-19, 0x1.dac907ddfd9dbp-20, -0x1.4a5a655290e68p-24, -0x1.f9216d4e4d83bp-24, 0x1.079c6a0fc4518p-25, -0x1.58b0195a8266dp-29}; - } - if constexpr (std::is_same_v) { - return {0xc.e9c31ac50c3a483p-13L, 0x9.e02fb9e2d9b3a9bp-9L, 0xd.426308799da225cp-7L, 0xa.11d9923909dc42bp-5L, 0x9.2633dde556a88a3p-4L, 0x9.26197df8ba1b1b2p-4L, 0x9.6c1a7cc81374c03p-6L, -0x9.659d28a9a81cd3ap-5L, -0xd.dad2d8f09dab48bp-6L, 0x9.91f6f3ac6d21107p-6L, 0xa.b175d185d1ed60ap-6L, -0xb.d187fb672938eb2p-7L, -0xd.aa0ec016d8b6c08p-7L, 0x8.4e396bc780b1464p-7L, 0xe.9ae91b3ba68905ep-8L, -0xb.6610b34a5550677p-8L, -0xc.26c264f56795d72p-9L, 0xd.a7c8636e4c20f3dp-9L, 0xc.d32df486c3529e3p-11L, -0xd.5d5e0f51fcbc222p-10L, 0xf.8c903b42cbbfa1ep-17L, 0xa.1fbc58f26c29bbap-11L, -0x9.2a2706f76538d5fp-13L, -0xa.fb6f284591832p-13L, 0xa.4bf9e38503e5e52p-14L, 0xd.ff4dd2cc89e6cb3p-16L, -0xd.04c5091b8e0651fp-16L, -0xa.4eaf7ea16d480ecp-26L, 0x9.ceb3c6160357432p-18L, -0x8.ef3b590c9df6482p-20L, -0xd.fa63971516c9e77p-22L, 0xe.d6483eefeced63bp-23L, -0xa.52d32a948733d34p-27L, -0xf.c90b6a726c1d6d6p-27L, 0x8.3ce3507e228be57p-28L, -0xa.c580cad41336728p-32L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.9d386358a187490511616014e787p-10Q, 0x1.3c05f73c5b367536d2be9893ed8cp-6Q, 0x1.a84c610f33b444b779a9b1758c69p-4Q, 0x1.423b3247213b88555f9f2ada7d8ap-2Q, 0x1.24c67bbcaad511453636985416f3p-1Q, 0x1.24c32fbf17436364ee6d86ce0b36p-1Q, 0x1.2d834f99026e9806c6f6c1aa6cb3p-3Q, -0x1.2cb3a51535039a741562ba69c7a8p-2Q, -0x1.bb5a5b1e13b56915364cb7d6d1bfp-3Q, 0x1.323ede758da4220dcba304aad9d9p-3Q, 0x1.562eba30ba3dac1311ece1a1884ap-3Q, -0x1.7a30ff6ce5271d64766823319bd4p-4Q, -0x1.b541d802db16d80f141c678b2993p-4Q, 0x1.09c72d78f01628c7ccd127058828p-4Q, 0x1.d35d236774d120bc0fddfe320959p-5Q, -0x1.6cc216694aaa0ced2f850c2b3eb7p-5Q, -0x1.84d84c9eacf2bae4fd091b9bdb4fp-6Q, 0x1.b4f90c6dc9841e7a702107e1aca3p-6Q, 0x1.9a65be90d86a53c665da90605941p-8Q, -0x1.ababc1ea3f978443c6511c976c7fp-7Q, 0x1.f19207685977f43b68af0530733ap-14Q, 0x1.43f78b1e4d853774466d94263915p-8Q, -0x1.2544e0deeca71abd544eac93fa45p-10Q, -0x1.5f6de508b23063ffd5522faa2f1ap-10Q, 0x1.497f3c70a07cbca34a7835790cbfp-11Q, 0x1.bfe9ba59913cd96563f593913af3p-13Q, -0x1.a098a12371c0ca3dcc2d68b00891p-13Q, -0x1.49d5efd42da901d7159610c4d152p-23Q, 0x1.39d678c2c06ae863ef3b97fa7d6p-15Q, -0x1.1de76b2193bec903a9d077f1666ep-17Q, -0x1.bf4c72e2a2d93cedea468c1c5543p-19Q, 0x1.dac907ddfd9dac76e76088418dc5p-20Q, -0x1.4a5a655290e67a67e8d8672b7916p-24Q, -0x1.f9216d4e4d83adac1cb13466b74bp-24Q, 0x1.079c6a0fc4517cae3d72b9596e6p-25Q, -0x1.58b0195a8266ce508d99fc62d4eep-29Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00157631021844076043154074492993977774767075371099166036368442986184714001537"), boost::lexical_cast("0.0192885317241463770592139171582905241995466702528849757223671483332142575124"), boost::lexical_cast("0.103588465822423596224191049193725359647069655522024167297622418469656394177"), boost::lexical_cast("0.314678941337031699057199825565257993178670619048937450949130751036740690695"), boost::lexical_cast("0.571826807766607223481858937090062341939367374313093056129532404803265328819"), boost::lexical_cast("0.571801654888651335289111999406596502566804788281852506075939526421405556433"), boost::lexical_cast("0.147223111969928141575097727108107231255786410735570138780167713584411016265"), boost::lexical_cast("-0.293654040736558744247903099498115072393571072903505323966175230801212578403"), boost::lexical_cast("-0.216480934005142971123767862566827147143793723566949240838869239366378506250"), boost::lexical_cast("0.149533975565377789350930173891366720880481669189376561026194307191290248158"), boost::lexical_cast("0.167081312763257404514931813995013474532420564635398808315225063337013902642"), boost::lexical_cast("-0.0923318841508462806042937255865945973143184800014456961207450846746206498455"), boost::lexical_cast("-0.106752246659828485593220058161498486138526640462411208391770205467847935365"), boost::lexical_cast("0.0648872162119054428194757795514191146312938211663414784613714984515877764896"), boost::lexical_cast("0.0570512477385368841209076884649962226059622612043103852460067642320755043632"), boost::lexical_cast("-0.0445261419029823247155614355974465349297147789143983359275503466820231489272"), boost::lexical_cast("-0.0237332103958600010327520958266521611019751933071349023307156579014300914190"), boost::lexical_cast("0.0266707059264705902998790863167202034320789599993607281336347152037595652919"), boost::lexical_cast("0.00626216795430570748523609314449788250199032520474501319026805231525752058555"), boost::lexical_cast("-0.0130514809466120017727763644760080716975519105450757166660613358038629139862"), boost::lexical_cast("0.000118630033858117465730174159216181908454489941745231740518561572996617939506"), boost::lexical_cast("0.00494334360546673813066552951680297483429963831336647776529520326003067700242"), boost::lexical_cast("-0.00111873266699249707280065885523865018231806048258497014551268711985227900418"), boost::lexical_cast("-0.00134059629833610662951756722825158360982304452468598664032394269120723888750"), boost::lexical_cast("0.000628465682965145712561944988542083821755102279630158287434965288076478383268"), boost::lexical_cast("0.000213581561910340688403905281434192602587320032599646652254344051060271497781"), boost::lexical_cast("-0.000198648552311747948579824541636248955492779788026401787613960521573218466250"), boost::lexical_cast("-0.000000153591712353472467506977033587671719370047242702151323658728810220957329769"), boost::lexical_cast("0.0000374123788074003818109220813803539395230429261579398503073136385132849832575"), boost::lexical_cast("-0.00000852060253744669520391925491165552302243759695622637651230591706524073534413"), boost::lexical_cast("-0.00000333263447888582188878245203334103682731150590779649843982933727956405960650"), boost::lexical_cast("0.00000176871298362761545587632873075537517641250135911405881545310061923499126827"), boost::lexical_cast("-0.0000000769163268988517614600015287853959840581739758815652511676990865187416269746"), boost::lexical_cast("-0.000000117609876702823169845098235656129256134757977769539695352814136780995583426"), boost::lexical_cast("0.0000000306883586304517480093547829493397537245017978789457449293057011634442052915"), boost::lexical_cast("-0.00000000250793445494859826719517318314712673180631714486827581994140326785823293114")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0015763102184407604315407449299397777476707537109916603636844298618471400136), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.019288531724146377059213917158290524199546670252884975722367148333214257583), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.10358846582242359622419104919372535964706965552202416729762241846965639407), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.3146789413370316990571998255652579931786706190489374509491307510367406906), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.57182680776660722348185893709006234193936737431309305612953240480326532941), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.5718016548886513352891119994065965025668047882818525060759395264214055574), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.14722311196992814157509772710810723125578641073557013878016771358441101668), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.29365404073655874424790309949811507239357107290350532396617523080121257803), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.21648093400514297112376786256682714714379372356694924083886923936637850636), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.14953397556537778935093017389136672088048166918937656102619430719129024846), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.16708131276325740451493181399501347453242056463539880831522506333701390259), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.092331884150846280604293725586594597314318480001445696120745084674620649946), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.10675224665982848559322005816149848613852664046241120839177020546784793523), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.06488721621190544281947577955141911463129382116634147846137149845158777673), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.057051247738536884120907688464996222605962261204310385246006764232075504463), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.044526141902982324715561435597446534929714778914398335927550346682023149009), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.023733210395860001032752095826652161101975193307134902330715657901430091468), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.026670705926470590299879086316720203432078959999360728133634715203759565359), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0062621679543057074852360931444978825019903252047450131902680523152575205897), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.013051480946612001772776364476008071697551910545075716666061335803862913986), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00011863003385811746573017415921618190845448994174523174051856157299661793944), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0049433436054667381306655295168029748342996383133664777652952032600306770112), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0011187326669924970728006588552386501823180604825849701455126871198522790015), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0013405962983361066295175672282515836098230445246859866403239426912072388874), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00062846568296514571256194498854208382175510227963015828743496528807647838152), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0002135815619103406884039052814341926025873200325996466522543440510602714976), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00019864855231174794857982454163624895549277978802640178761396052157321846575), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.5359171235347246750697703358767171937004724270215132365872881022095732925e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.7412378807400381810922081380353939523042926157939850307313638513284983136e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -8.5206025374466952039192549116555230224375969562263765123059170652407353738e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -3.3326344788858218887824520333410368273115059077964984398293372795640596047e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.7687129836276154558763287307553751764125013591140588154531006192349912666e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -7.6916326898851761460001528785395984058173975881565251167699086518741626737e-08), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.1760987670282316984509823565612925613475797776953969535281413678099558364e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.0688358630451748009354782949339753724501797878945744929305701163444205366e-08), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -2.5079344549485982671951731831471267318063171448682758199414032678582329327e-09) }; } if constexpr (p == 19) { - if constexpr (std::is_same_v) { - return {0x1.22a192p-10f, 0x1.d3f68ap-7f, 0x1.4cea48p-4f, 0x1.0ebbd8p-2f, 0x1.0c82ecp-1f, 0x1.34129ep-1f, 0x1.0b280cp-2f, -0x1.d32194p-3f, -0x1.24b2e2p-2f, 0x1.31c694p-4f, 0x1.b2e46cp-3f, -0x1.12957ap-5f, -0x1.246cd4p-3f, 0x1.c3f126p-6f, 0x1.63f856p-4f, -0x1.b2323ep-6f, -0x1.7629ccp-5f, 0x1.6248a8p-6f, 0x1.3d72f2p-6f, -0x1.ca5f1cp-7f, -0x1.807eap-8f, 0x1.cd6c24p-8f, 0x1.93274ep-11f, -0x1.604346p-9f, 0x1.66699p-12f, 0x1.81c5bep-11f, -0x1.1156b8p-12f, -0x1.054e8ap-13f, 0x1.6d608ep-14f, 0x1.56a79p-18f, -0x1.172d04p-16f, 0x1.941ff2p-19f, 0x1.9b3988p-20f, -0x1.7070fep-21f, 0x1.f1373cp-27f, 0x1.8e4f58p-25f, -0x1.7f97c4p-27f, 0x1.dc770ep-31f}; - } - if constexpr (std::is_same_v) { - return {0x1.22a1917fed85ap-10, 0x1.d3f6896603bf4p-7, 0x1.4cea4765b114ap-4, 0x1.0ebbd74f124f2p-2, 0x1.0c82ecc416391p-1, 0x1.34129e60b6e3p-1, 0x1.0b280be54f8b7p-2, -0x1.d32194b53c804p-3, -0x1.24b2e1dd4c73ep-2, 0x1.31c6940f7edfap-4, 0x1.b2e46c1684042p-3, -0x1.12957a28f5bb3p-5, -0x1.246cd3943959bp-3, 0x1.c3f126f461d98p-6, 0x1.63f8568e9e6ecp-4, -0x1.b2323dbfdcbe7p-6, -0x1.7629cb842f99bp-5, 0x1.6248a775ca66p-6, 0x1.3d72f2476d004p-6, -0x1.ca5f1bf2f3244p-7, -0x1.807e9f533b217p-8, 0x1.cd6c23ae5d8f9p-8, 0x1.93274e99dc9b5p-11, -0x1.6043462e3e51ap-9, 0x1.66698fcf3c249p-12, 0x1.81c5be1857466p-11, -0x1.1156b7a432a66p-12, -0x1.054e8a6af00d7p-13, 0x1.6d608dedb3cf6p-14, 0x1.56a78fb9bd527p-18, -0x1.172d0353b3f12p-16, 0x1.941ff236730f1p-19, 0x1.9b39878b95663p-20, -0x1.7070fedc9cdedp-21, 0x1.f1373b9dbeafap-27, 0x1.8e4f570c878dep-25, -0x1.7f97c3aa5d9ep-27, 0x1.dc770dc2ed00bp-31}; - } - if constexpr (std::is_same_v) { - return {0x9.150c8bff6c2cf0bp-13L, 0xe.9fb44b301dfa184p-10L, 0xa.67523b2d88a4cd2p-7L, 0x8.75deba789279273p-5L, 0x8.64176620b1c8a9ap-4L, 0x9.a094f305b717f7bp-4L, 0x8.59405f2a7c5b569p-5L, -0xe.990ca5a9e402365p-6L, -0x9.25970eea639ef9ap-5L, 0x9.8e34a07bf6fd17cp-7L, 0xd.972360b420211e3p-6L, -0x8.94abd147add99bfp-8L, -0x9.23669ca1cacd462p-6L, 0xe.1f8937a30ecc2f7p-9L, 0xb.1fc2b474f37606ap-7L, -0xd.9191edfee5f3727p-9L, -0xb.b14e5c217ccd592p-8L, 0xb.12453bae532fcd5p-9L, 0x9.eb97923b6802088p-9L, -0xe.52f8df979921d82p-10L, -0xc.03f4fa99d90b962p-11L, 0xe.6b611d72ec7ca7cp-11L, 0xc.993a74cee4da67fp-14L, -0xb.021a3171f28cdccp-12L, 0xb.334c7e79e124bccp-15L, 0xc.0e2df0c2ba32ef3p-14L, -0x8.8ab5bd21953315ep-15L, -0x8.2a745357806b795p-16L, 0xb.6b046f6d9e7b04p-17L, 0xa.b53c7dcdea9365p-21L, -0x8.b9681a9d9f88fe1p-19L, 0xc.a0ff91b39878443p-22L, 0xc.d9cc3c5cab31a21p-23L, -0xb.8387f6e4e6f68p-24L, 0xf.89b9dcedf57d09dp-30L, 0xc.727ab8643c6ec27p-28L, -0xb.fcbe1d52ecefc57p-30L, 0xe.e3b86e176805b46p-34L}; - } - #ifdef BOOST_HAS_FLOAT128 - if constexpr (std::is_same_v) { - return {0x1.22a1917fed859e160446bb7b167ap-10Q, 0x1.d3f6896603bf4308e8ccc5a30641p-7Q, 0x1.4cea4765b11499a3de1dc5fdc4b7p-4Q, 0x1.0ebbd74f124f24e597d3a5bc26dbp-2Q, 0x1.0c82ecc4163915332b81143283e8p-1Q, 0x1.34129e60b6e2fef58b66c45f7099p-1Q, 0x1.0b280be54f8b6ad2d41e0f33532ep-2Q, -0x1.d32194b53c8046c9a7b9b8714cebp-3Q, -0x1.24b2e1dd4c73df34e82deb7bb6c6p-2Q, 0x1.31c6940f7edfa2f8c6ddc9cd2aefp-4Q, 0x1.b2e46c16840423c52b33ff7476eep-3Q, -0x1.12957a28f5bb337e3e66ea6f23e6p-5Q, -0x1.246cd3943959a8c450bf5ca92b86p-3Q, 0x1.c3f126f461d985ee9de87f3424e5p-6Q, 0x1.63f8568e9e6ec0d34220dce2e186p-4Q, -0x1.b2323dbfdcbe6e4ed8b2320fb129p-6Q, -0x1.7629cb842f99ab236f8e908d21c2p-5Q, 0x1.6248a775ca65f9a99ecab76ed61p-6Q, 0x1.3d72f2476d00410fe80cb42bd72bp-6Q, -0x1.ca5f1bf2f3243b0308970f1f944p-7Q, -0x1.807e9f533b2172c38f0c60523009p-8Q, 0x1.cd6c23ae5d8f94f8e6c997306168p-8Q, 0x1.93274e99dc9b4cfea213c9163decp-11Q, -0x1.6043462e3e519b97ce417a7ac3b3p-9Q, 0x1.66698fcf3c2497984ab865b5b6acp-12Q, 0x1.81c5be1857465de5530984af43cbp-11Q, -0x1.1156b7a432a662bbb70ff712e064p-12Q, -0x1.054e8a6af00d6f29e88cd98738bep-13Q, 0x1.6d608dedb3cf6080fb9e6ef72893p-14Q, 0x1.56a78fb9bd526ca09fc616b1b8ap-18Q, -0x1.172d0353b3f11fc1e8818be3f7a7p-16Q, 0x1.941ff236730f0886ee4074951d94p-19Q, 0x1.9b39878b9566344204396825f773p-20Q, -0x1.7070fedc9cdecfffd4c6dc5d1fe5p-21Q, 0x1.f1373b9dbeafa1390279c531a649p-27Q, 0x1.8e4f570c878dd84d17b935d5f69ap-25Q, -0x1.7f97c3aa5d9df8ae90e909fae15p-27Q, 0x1.dc770dc2ed00b68b9c525506b211p-31Q}; - } - #endif - if constexpr (std::is_same_v) { - return {boost::lexical_cast("0.00110866976318171057109915419520971516424529967777343593213545529038383924770"), boost::lexical_cast("0.0142810984507643973743988915295019923474566344216366595787071599110771075191"), boost::lexical_cast("0.0812781132654595506529630678490162483984497997102862036649772686406019150041"), boost::lexical_cast("0.264388431740896784674810038028942687386237780721192071841738581477351352687"), boost::lexical_cast("0.524436377464654915336057597548406462604463364104807211639316023628078258263"), boost::lexical_cast("0.601704549127537894886707713592180262053656563958596329331393143392083219576"), boost::lexical_cast("0.260894952651038829287245667531052832417267310130190773992521389876582446158"), boost::lexical_cast("-0.228091394215482646374632577605463720709378723708642590953482241776619580080"), boost::lexical_cast("-0.285838631755826241854597569502898423721735609558833514992211937357294676905"), boost::lexical_cast("0.0746522697081032663676343311187881900586586614973190965636539995134773660042"), boost::lexical_cast("0.212349743306278488809060856705982419707707420087883944841690869803668388649"), boost::lexical_cast("-0.0335185419023028786816938841878573150697784507523896681981403258573481442235"), boost::lexical_cast("-0.142785695038736574977960273162611281299849770615242850862756243341853036336"), boost::lexical_cast("0.0275843506256286687501474352016219865537447459696342308076281830983836771416"), boost::lexical_cast("0.0869067555558122324884764542880844303478520800246819275964035297492772454078"), boost::lexical_cast("-0.0265012362501230408990183584367638736107506801768674780817134564719233152649"), boost::lexical_cast("-0.0456742262772309080564544421429579601793893573211563005088010978423298835500"), boost::lexical_cast("0.0216237674095850471303298425717237235431809706785875254257102081949907179885"), boost::lexical_cast("0.0193755498891761276463709435445799981449688509587582554640696372421676825877"), boost::lexical_cast("-0.0139883886785351416325040123524866252191681386745309583680836668669699906947"), boost::lexical_cast("-0.00586692228101217472658449343605437377381460834080875817737276517150642852313"), boost::lexical_cast("0.00704074736710524315301451120740062010940168989766538307822939808316234678585"), boost::lexical_cast("0.000768954359257548355974913914867395516347794708603940612954642251648623392855"), boost::lexical_cast("-0.00268755180070158200395736385507039863653403892098247829017026719960594838510"), boost::lexical_cast("0.000341808653458595776565165729046380813521421484881951725779403154942704074894"), boost::lexical_cast("0.000735802520505435207026048190539728187518317579277990485818949491732987619374"), boost::lexical_cast("-0.000260676135678628005731831513089752279038393936207356340861354755942716317598"), boost::lexical_cast("-0.000124600791734158775344978440890165399031734141334198090475759204698349203833"), boost::lexical_cast("0.0000871127046721992296541686238819112826841293389328208351772944342009756120059"), boost::lexical_cast("0.00000510595048707388605304922280993423157368736799210628266938926416431155785903"), boost::lexical_cast("-0.0000166401762971549445462067771989919863033367560881201810873914492293692424442"), boost::lexical_cast("0.00000301096431629652633969533445472594363264579893816242716885138250008132314822"), boost::lexical_cast("0.00000153193147669119306393183238108663603120312303272347746362414105936220672489"), boost::lexical_cast("-0.000000686275565776914270188355461348673285445274075277139241175841882669179558939"), boost::lexical_cast("0.0000000144708829879784454207821986329161542055167357407136783431616765021249777078"), boost::lexical_cast("0.0000000463693777578260422343085772821094889887174829108596229664932070020615712517"), boost::lexical_cast("-0.0000000111640206703582581639050476914247258646497579928447368224607655958423915203"), boost::lexical_cast("0.000000000866684883899761935032301354078212462728974219027305931912284064941409400037")}; - } + return {BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0011086697631817105710991541952097151642452996777734359321354552903838392437), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.014281098450764397374398891529501992347456634421636659578707159911077107554), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.081278113265459550652963067849016248398449799710286203664977268640601914766), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.26438843174089678467481003802894268738623778072119207184173858147735135325), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.5244363774646549153360575975484064626044633641048072116393160236280782601), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.60170454912753789488670771359218026205365656395859632933139314339208321996), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.26089495265103882928724566753105283241726731013019077399252138987658244676), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.22809139421548264637463257760546372070937872370864259095348224177661957967), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.2858386317558262418545975695028984237217356095588335149922119373572946758), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.074652269708103266367634331118788190058658661497319096563653999513477365762), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.21234974330627848880906085670598241970770742008788394484169086980366838817), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.033518541902302878681693884187857315069778450752389668198140325857348144255), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.14278569503873657497796027316261128129984977061524285086275624334185303587), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.027584350625628668750147435201621986553744745969634230807628183098383677126), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.086906755555812232488476454288084430347852080024681927596403529749277245343), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.026501236250123040899018358436763873610750680176867478081713456471923315261), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.045674226277230908056454442142957960179389357321156300508801097842329883502), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.021623767409585047130329842571723723543180970678587525425710208194990717941), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.019375549889176127646370943544579998144968850958758255464069637242167682526), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.013988388678535141632504012352486625219168138674530958368083666866969990669), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0058669222810121747265844934360543737738146083408087581773727651715064285159), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0070407473671052431530145112074006201094016898976653830782293980831623467743), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.0007689543592575483559749139148673955163477947086039406129546422516486233949), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.0026875518007015820039573638550703986365340389209824782901702671996059483895), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.000341808653458595776565165729046380813521421484881951725779403154942704075), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 0.00073580252050543520702604819053972818751831757927799048581894949173298761722), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00026067613567862800573183151308975227903839393620735634086135475594271631675), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -0.00012460079173415877534497844089016539903173414133419809047575920469834920407), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 8.7112704672199229654168623881911282684129338932820835177294434200975612019e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 5.105950487073886053049222809934231573687367992106282669389264164311557866e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.6640176297154944546206777198991986303336756088120181087391449229369242509e-05), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 3.0109643162965263396953344547259436326457989381624271688513825000813231431e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.5319314766911930639318323810866360312031230327234774636241410593622067271e-06), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -6.862755657769142701883554613486732854452740752771392411758418826691795609e-07), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 1.4470882987978445420782198632916154205516735740713678343161676502124977734e-08), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 4.6369377757826042234308577282109488988717482910859622966493207002061571346e-08), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, -1.116402067035825816390504769142472586464975799284473682246076559584239149e-08), BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, 8.6668488389976193503230135407821246272897421902730593191228406494140940156e-10) }; } } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index f74444221..59842ee9f 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -943,6 +943,7 @@ test-suite misc : [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run daubechies_scaling_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] + [ compile compile_test/daubechies_incl_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quadratic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quintic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] diff --git a/test/compile_test/daubechies_incl_test.cpp b/test/compile_test/daubechies_incl_test.cpp new file mode 100644 index 000000000..f70d40d36 --- /dev/null +++ b/test/compile_test/daubechies_incl_test.cpp @@ -0,0 +1,33 @@ +// Copyright John Maddock 2020. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// Basic sanity check that header +// #includes all the files that it needs to. +// +#include + +void compile_and_link_test() +{ + using namespace boost::math::filters; + + constexpr std::array fa = daubechies_scaling_filter(); + static_assert(fa[0] == 0.70710678118654752440084436210484903928483593768847403658833986899536623923f); + static_assert(fa[1] == 0.70710678118654752440084436210484903928483593768847403658833986899536623923f); + + constexpr std::array da = daubechies_scaling_filter(); + static_assert(da[0] == 0.48296291314453414337487159986444868381695241950420227520117153815521160699); + static_assert(da[1] == 0.83651630373780790557529378091687320345937038834843929349534147265289472661); + static_assert(da[2] == 0.22414386804201338102597276224040035546788351818427176138716833084015463224); + static_assert(da[3] == -0.12940952255126038117444941881202416417453445065996525690700160365752848737); + + constexpr std::array la = daubechies_scaling_filter(); + static_assert(la[0] == 0.33267055295008261599851158913900563001292339924506835970847057855179372371L); + static_assert(la[1] == 0.80689150931109257649449360408871349051929739499482361816509206360348683533L); + static_assert(la[2] == 0.45987750211849157009515194214761672080811017743149230664338678024864033563L); + static_assert(la[3] == -0.135011020010254588696389906699374480562219845223781191975686255357062768L); + static_assert(la[4] == -0.085441273882026661692819169181773311536197638988086629763517489805067820106L); + static_assert(la[5] == 0.035226291885709536602740664715510029327758387917431610398934060748942171898L); + +} From e81a3c87aed1f431f9d8f2c84772c2baf8cb7649 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 5 Mar 2020 06:14:38 -0500 Subject: [PATCH 064/104] Fix Jamfile syntax; kick off build. --- test/Jamfile.v2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 59842ee9f..e43152572 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -943,7 +943,7 @@ test-suite misc : [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run daubechies_scaling_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] - [ compile compile_test/daubechies_incl_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] ] + [ compile compile_test/daubechies_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quadratic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quintic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] From bcc1e57395558e6cf22b2fd4d7988d47fec0cbc3 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 5 Mar 2020 07:03:26 -0500 Subject: [PATCH 065/104] Add additional integer grid and filters computed by JM to unit tests. [CI SKIP] --- .../daubechies_scaling_integer_grid.cpp | 5 +- .../daubechies_scaling_integer_grid.hpp | 2 +- test/daubechies_scaling_test.cpp | 212 ++++++------------ 3 files changed, 69 insertions(+), 150 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp index 703c94b0e..c06bad5f1 100644 --- a/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp +++ b/example/daubechies_wavelets/daubechies_scaling_integer_grid.cpp @@ -160,8 +160,7 @@ int main() constexpr const size_t p_max = 18; std::ofstream fs{"daubechies_scaling_integer_grid.hpp"}; fs << "/*\n" - << " * Copyright Nick Thompson, 2019\n" - << " * Copyright John Maddock, 2020\n" + << " * Copyright Nick Thompson, John Maddock 2020\n" << " * Use, modification and distribution are subject to the\n" << " * Boost Software License, Version 1.0. (See accompanying file\n" << " * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n" @@ -201,7 +200,7 @@ int main() << "constexpr inline std::array daubechies_scaling_integer_grid()\n" << "{\n" << " static_assert(sizeof(Real) <= 16, \"Integer grids only computed up to 128 bits of precision.\");\n" - << " static_assert(p <= " << p_max << ", \"Integer grids only implemented up to " << p_max << ".\");\n" + << " static_assert(p <= " << p_max + 1 << ", \"Integer grids only implemented up to " << p_max + 1 << ".\");\n" << " static_assert(p > 1, \"Integer grids only implemented for p >= 2.\");\n" << " return daubechies_scaling_integer_grid_imp::value;\n" << "}\n\n"; diff --git a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp index d10fd232e..361d50683 100644 --- a/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +++ b/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp @@ -235,7 +235,7 @@ template constexpr inline std::array daubechies_scaling_integer_grid() { static_assert(sizeof(Real) <= 16, "Integer grids only computed up to 128 bits of precision."); - static_assert(p <= 18, "Integer grids only implemented up to 18."); + static_assert(p <= 19, "Integer grids only implemented up to 19."); static_assert(p > 1, "Integer grids only implemented for p >= 2."); return daubechies_scaling_integer_grid_imp::value; } diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index b7d832e09..7bf7847a7 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -63,7 +63,7 @@ void test_daubechies_filters() // Daubechies wavelet of order p has p vanishing moments. // Unfortunately, the condition number of the sum is infinite. // Hence we must scale the tolerance by the summation condition number to ensure that we don't get spurious test failures. - for (size_t k = 1; k < p; ++k) + for (size_t k = 1; k < p && k < 9; ++k) { Real hk = 0; Real abs_hk = 0; @@ -82,7 +82,7 @@ void test_daubechies_filters() } // Multiply the tolerance by the condition number: Real cond = abs(hk) > 0 ? abs_hk/abs(hk) : 1/std::numeric_limits::epsilon(); - if (!CHECK_MOLLIFIED_CLOSE(0, hk, cond*tol)) + if (!CHECK_MOLLIFIED_CLOSE(0, hk, 2*cond*tol)) { std::cerr << " The " << k << "th moment of the p = " << p << " filter did not vanish\n"; std::cerr << " Condition number = " << abs_hk/abs(hk) << "\n"; @@ -97,7 +97,6 @@ void test_daubechies_filters() } // Test that the filters agree with Daubechies, Ten Lenctures on Wavelets, Table 6.1: - void test_agreement_with_ten_lectures() { std::cout << "Testing agreement with Ten Lectures\n"; @@ -119,7 +118,8 @@ void test_agreement_with_ten_lectures() auto h4_ = boost::math::filters::daubechies_scaling_filter(); for (size_t i = 0; i < h4.size(); ++i) { - if(!CHECK_ULP_CLOSE(h4[i], h4_[i], 18)) { + if(!CHECK_ULP_CLOSE(h4[i], h4_[i], 18)) + { std::cerr << " Index " << i << " incorrect.\n"; } } @@ -155,82 +155,93 @@ void test_integer_grid() Real unit_roundoff = std::numeric_limits::epsilon()/2; auto grid = daubechies_scaling_integer_grid(); - if constexpr (order == 0) { + if constexpr (order == 0) + { auto cond = summation_condition_number(0); - for (auto & x : grid) { + for (auto & x : grid) + { cond += x; } CHECK_MOLLIFIED_CLOSE(1, cond.sum(), 6*cond.l1_norm()*unit_roundoff); } - if constexpr (order == 1) { + if constexpr (order == 1) + { auto cond = summation_condition_number(0); for (size_t i = 0; i < grid.size(); ++i) { cond += i*grid[i]; } - CHECK_MOLLIFIED_CLOSE(-1, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + CHECK_MOLLIFIED_CLOSE(Real(-1), cond.sum(), 2*cond.l1_norm()*unit_roundoff); // Differentiate \sum_{k} \phi(x-k) = 1 to get this: cond = summation_condition_number(0); for (size_t i = 0; i < grid.size(); ++i) { cond += grid[i]; } - CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + CHECK_MOLLIFIED_CLOSE(Real(0), cond.sum(), 2*cond.l1_norm()*unit_roundoff); } - if constexpr (order == 2) { + if constexpr (order == 2) + { auto cond = summation_condition_number(0); - for (size_t i = 0; i < grid.size(); ++i) { + for (size_t i = 0; i < grid.size(); ++i) + { cond += i*i*grid[i]; } - CHECK_MOLLIFIED_CLOSE(2, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + CHECK_MOLLIFIED_CLOSE(Real(2), cond.sum(), 2*cond.l1_norm()*unit_roundoff); // Differentiate \sum_{k} \phi(x-k) = 1 to get this: cond = summation_condition_number(0); - for (size_t i = 0; i < grid.size(); ++i) { + for (size_t i = 0; i < grid.size(); ++i) + { cond += grid[i]; } - CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + CHECK_MOLLIFIED_CLOSE(Real(0), cond.sum(), 2*cond.l1_norm()*unit_roundoff); } - if constexpr (order == 3) { + if constexpr (order == 3) + { auto cond = summation_condition_number(0); - for (size_t i = 0; i < grid.size(); ++i) { + for (size_t i = 0; i < grid.size(); ++i) + { cond += i*i*i*grid[i]; } - CHECK_MOLLIFIED_CLOSE(-6, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + CHECK_MOLLIFIED_CLOSE(Real(-6), cond.sum(), 2*cond.l1_norm()*unit_roundoff); // Differentiate \sum_{k} \phi(x-k) = 1 to get this: cond = summation_condition_number(0); - for (size_t i = 0; i < grid.size(); ++i) { + for (size_t i = 0; i < grid.size(); ++i) + { cond += grid[i]; } - CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); - + CHECK_MOLLIFIED_CLOSE(Real(0), cond.sum(), 2*cond.l1_norm()*unit_roundoff); } - if constexpr (order == 4) { + if constexpr (order == 4) + { auto cond = summation_condition_number(0); - for (size_t i = 0; i < grid.size(); ++i) { + for (size_t i = 0; i < grid.size(); ++i) + { cond += i*i*i*i*grid[i]; } CHECK_MOLLIFIED_CLOSE(24, cond.sum(), 2*cond.l1_norm()*unit_roundoff); // Differentiate \sum_{k} \phi(x-k) = 1 to get this: cond = summation_condition_number(0); - for (size_t i = 0; i < grid.size(); ++i) { + for (size_t i = 0; i < grid.size(); ++i) + { cond += grid[i]; } - CHECK_MOLLIFIED_CLOSE(0, cond.sum(), 2*cond.l1_norm()*unit_roundoff); + CHECK_MOLLIFIED_CLOSE(Real(0), cond.sum(), 2*cond.l1_norm()*unit_roundoff); } - } template void test_dyadic_grid() { std::cout << "Testing dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; - boost::hana::for_each(std::make_index_sequence<13>(), [&](auto i){ + auto f = [&](auto i) + { auto phijk = boost::math::detail::dyadic_grid(0); auto phik = boost::math::detail::daubechies_scaling_integer_grid(); assert(phik.size() == phijk.size()); @@ -262,103 +273,22 @@ void test_dyadic_grid() cond += phijk[idx]; } } - CHECK_MOLLIFIED_CLOSE(1, cond.sum(), 10*cond()*std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(1), cond.sum(), 10*cond()*std::numeric_limits::epsilon()); } } - }); + }; + + boost::hana::for_each(std::make_index_sequence<18>(), f); } -template -void test_interpolation() -{ - std::cout << "Testing constant interpolation on type " << boost::core::demangle(typeid(Real).name()) << "\n"; - boost::hana::for_each(std::make_index_sequence<13>(), [&](auto i){ - auto phik = boost::math::detail::daubechies_scaling_integer_grid(); - for (size_t j = 0; j < 5; ++j) { - auto phi = boost::math::daubechies_scaling(j); - assert(phik.size()==phi.support().second + 1); - for (size_t k = 1; k < phik.size(); ++k) { - auto expected = phik[k]; - auto computed = phi.constant_interpolation(k); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Constant interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.single_crank_linear(k); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Single crank linear interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.first_order_taylor(k); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " First order Taylor expansion wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.constant_interpolation(k*(1+2*std::numeric_limits::epsilon())); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Constant interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.constant_interpolation(k*(1-2*std::numeric_limits::epsilon())); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Constant interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.linear_interpolation(k); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Linear interpolation wrong at x = " << k << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - } - - for (size_t i = 0; i < phi.size() -1; ++i) { - Real x = phi.index_to_abscissa(i); - Real expected = phi[i]; - Real computed = phi.constant_interpolation(x); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Constant interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.linear_interpolation(x); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.single_crank_linear(x); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Single crank linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - computed = phi.first_order_taylor(x); - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " First order Taylor expansion wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - x += phi.spacing()/2; - computed = phi.linear_interpolation(x); - expected = phi[i]/2 + phi[i+1]/2; - if (!CHECK_ULP_CLOSE(expected, computed, 1)) { - std::cerr << " Linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - x *= (1+std::numeric_limits::epsilon()); - computed = phi.constant_interpolation(x); - expected = phi[i+1]; - if (!CHECK_ULP_CLOSE(expected, computed, 0)) { - std::cerr << " Linear interpolation wrong at x = " << x << ", j_max = " << j << ", p = " << i+2 << "\n"; - } - - } - } - }); -} - // Taken from Lin, 2005, doi:10.1016/j.amc.2004.12.038, // "Direct algorithm for computation of derivatives of the Daubechies basis functions" void test_first_derivative() { auto phi1_3 = boost::math::detail::daubechies_scaling_integer_grid(); - std::array lin_3{0.0L, 1.638452340884085725014976L, -2.232758190463137395017742L, 0.5501593582740176149905562L, 0.04414649130503405501220997L, 0.0L}; + std::array lin_3{0.0L, 1.638452340884085725014976L, -2.232758190463137395017742L, + 0.5501593582740176149905562L, 0.04414649130503405501220997L, 0.0L}; for (size_t i = 0; i < lin_3.size(); ++i) { if(!CHECK_ULP_CLOSE(lin_3[i], phi1_3[i], 0)) @@ -368,7 +298,8 @@ void test_first_derivative() } auto phi1_4 = boost::math::detail::daubechies_scaling_integer_grid(); - std::array lin_4 = {0.0L, 1.776072007522184640093776L, -2.785349397229543142492785L, 1.192452536632278174347632L, -0.1313745151846729587935189L, -0.05357102822023923595359996L,0.001770396479992522798495351L, 0.0L}; + std::array lin_4 = {0.0L, 1.776072007522184640093776L, -2.785349397229543142492785L, 1.192452536632278174347632L, + -0.1313745151846729587935189L, -0.05357102822023923595359996L,0.001770396479992522798495351L, 0.0L}; for (size_t i = 0; i < lin_4.size(); ++i) { @@ -378,7 +309,8 @@ void test_first_derivative() } } - std::array lin_5 = {0.0L,1.558326313047001366564379L,-2.436012783189551921436896L,1.235905129801454293947039L,-0.3674377136938866359947561L,-0.02178035117564654658884556L,0.03234719350814368885815854L,-0.001335619912770701035229331L,-0.00001216838474354431384970525L,0.0L}; + std::array lin_5 = {0.0L, 1.558326313047001366564379L, -2.436012783189551921436896L, 1.235905129801454293947039L, -0.3674377136938866359947561L, + -0.02178035117564654658884556L,0.03234719350814368885815854L,-0.001335619912770701035229331L,-0.00001216838474354431384970525L,0.0L}; auto phi1_5 = boost::math::detail::daubechies_scaling_integer_grid(); for (size_t i = 0; i < lin_5.size(); ++i) { @@ -392,23 +324,17 @@ void test_first_derivative() int main() { test_agreement_with_ten_lectures(); + + boost::hana::for_each(std::make_index_sequence<19>(), [&](auto i){ + test_daubechies_filters(); + test_daubechies_filters(); + test_daubechies_filters(); + }); + test_first_derivative(); - test_dyadic_grid(); - test_dyadic_grid(); - test_dyadic_grid(); - #ifdef BOOST_HAS_FLOAT128 - test_dyadic_grid(); - #endif - /* - test_interpolation(); - test_interpolation(); - test_interpolation(); - #if BOOST_HAS_FLOAT128 - test_interpolation(); - #endif*/ // All scaling functions have a first derivative. - boost::hana::for_each(std::make_index_sequence<13>(), [&](auto idx){ + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto idx){ test_integer_grid(); test_integer_grid(); test_integer_grid(); @@ -423,7 +349,7 @@ int main() // 4-tap (2 vanishing moment) scaling function does not have a second derivative; // all other scaling functions do. - boost::hana::for_each(std::make_index_sequence<13>(), [&](auto idx){ + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto idx){ test_integer_grid(); test_integer_grid(); test_integer_grid(); @@ -433,7 +359,7 @@ int main() }); // 8-tap filter (4 vanishing moments) is the first to have a third derivative. - boost::hana::for_each(std::make_index_sequence<12>(), [&](auto idx){ + boost::hana::for_each(std::make_index_sequence<16>(), [&](auto idx){ test_integer_grid(); test_integer_grid(); test_integer_grid(); @@ -443,7 +369,7 @@ int main() }); // 10-tap filter (5 vanishing moments) is the first to have a fourth derivative. - boost::hana::for_each(std::make_index_sequence<11>(), [&](auto idx){ + boost::hana::for_each(std::make_index_sequence<15>(), [&](auto idx){ test_integer_grid(); test_integer_grid(); test_integer_grid(); @@ -452,27 +378,21 @@ int main() #endif }); - boost::hana::for_each(std::make_index_sequence<8>(), [&](auto i){ - test_daubechies_filters(); - }); - - boost::hana::for_each(std::make_index_sequence<12>(), [&](auto i){ - test_daubechies_filters(); - }); - - boost::hana::for_each(std::make_index_sequence<11>(), [&](auto i){ - test_daubechies_filters(); - }); - + test_dyadic_grid(); + test_dyadic_grid(); + test_dyadic_grid(); + #ifdef BOOST_HAS_FLOAT128 + test_dyadic_grid(); + #endif #ifdef BOOST_HAS_FLOAT128 - boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ + boost::hana::for_each(std::make_index_sequence<19>(), [&](auto i){ test_filter_ulp_distance(); test_filter_ulp_distance(); test_filter_ulp_distance(); }); - boost::hana::for_each(std::make_index_sequence<12>(), [&](auto i){ + boost::hana::for_each(std::make_index_sequence<19>(), [&](auto i){ test_daubechies_filters(); }); #endif From afdebdb739e99cc391e15e9adb9be1bd91ae6357 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 5 Mar 2020 08:19:32 -0500 Subject: [PATCH 066/104] More Daubechies scaling functions [CI SKIP] --- .../daubechies_wavelets/daubechies_plots.cpp | 63 ++--------- .../special_functions/daubechies_scaling.hpp | 105 ++++-------------- 2 files changed, 27 insertions(+), 141 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_plots.cpp b/example/daubechies_wavelets/daubechies_plots.cpp index 9c0520b67..70172c98e 100644 --- a/example/daubechies_wavelets/daubechies_plots.cpp +++ b/example/daubechies_wavelets/daubechies_plots.cpp @@ -6,6 +6,9 @@ */ #include #include +#include +#include + #include #include #include @@ -142,62 +145,10 @@ void do_ulp(int coarse_refinements, PhiPrecise phi_precise) int main() { - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - plot_phi(); - - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - plot_dphi(); - - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - plot_condition_number(); - - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - plot_convergence(); - + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ plot_phi(); }); + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ plot_dphi(); }); + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ plot_condition_number(); }); + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ plot_convergence(); }); using PreciseReal = float128; using CoarseReal = double; diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 657a2e0e8..d379d165f 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -13,9 +13,6 @@ #include #include #include -#ifdef BOOST_HAS_FLOAT128 -#include -#endif #include #include #include @@ -23,7 +20,6 @@ #include #include - namespace boost::math { namespace detail { @@ -244,10 +240,6 @@ class daubechies_scaling { public: daubechies_scaling(int grid_refinements = -1) { - static_assert(p <= 15, "Scaling functions only implements up to p = 15"); - #ifdef BOOST_HAS_FLOAT128 - using boost::multiprecision::float128; - #endif if (grid_refinements < 0) { if (std::is_same_v) @@ -255,22 +247,22 @@ public: if (grid_refinements == -2) { // Control absolute error: - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4}; + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4}; grid_refinements = r[p]; } else { // Control relative error: - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - std::array r{-1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11}; + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{-1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11}; grid_refinements = r[p]; } } else if (std::is_same_v) { - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 - std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18}; + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18, 18, 18, 18, 18}; grid_refinements = r[p]; } else @@ -329,18 +321,22 @@ public: std::vector d3ydx3; if constexpr (p >= 6) { std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v) + { auto v = detail::dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { + for (size_t i = 0; i < v.size(); ++i) + { w[i] = v[i]; } return w; } - else if constexpr (std::is_same_v) { + else if constexpr (std::is_same_v) + { auto v = detail::dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { + for (size_t i = 0; i < v.size(); ++i) + { w[i] = v[i]; } return w; @@ -351,10 +347,12 @@ public: if constexpr (p >= 10) { std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v) + { auto v = detail::dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { + for (size_t i = 0; i < v.size(); ++i) + { w[i] = v[i]; } return w; @@ -362,7 +360,8 @@ public: else if constexpr (std::is_same_v) { auto v = detail::dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { + for (size_t i = 0; i < v.size(); ++i) + { w[i] = v[i]; } return w; @@ -524,70 +523,6 @@ private: std::shared_ptr>>> m_qh; // Need this for p >= 10: std::shared_ptr>>> m_sh; - - /* - Real single_crank_linear(Real x) const { - if (x <= 0 || x >= 2*p-1) { - return Real(0); - } - using std::floor; - Real y = (1<= 0 && idx < m_v.size()) { - term += m_c[l]*m_v[idx]; - } - } - - if (y - idx1 < idx1 + 1 - y) - { - Real t = 2*(y - idx1); - return (1-t)*m_v[static_cast(idx1)] + t*term; - } - else { - Real t = 2*(idx1 + 1 - y); - return t*term + (1-t)*m_v[static_cast(idx1)+1]; - } - } - - Real single_crank_quadratic(Real x) const { - if (x <= 0 || x >= 2*p-1) { - return Real(0); - } - using std::floor; - Real y = (1<= 0 && idx < m_v.size()) { - term += m_c[l]*m_v[idx]; - } - } - - Real y0 = m_v[static_cast(idx1)]; - Real y1 = term; - Real y2 = m_v[static_cast(idx1)+1]; - - Real a = (y2+y0-2*y1)/2; - Real b = (4*y1-3*y0 - y2)/2; - Real t = 2*(y - idx1); - return a*t*t + b*t + y0; - } - - size_t bytes() const - { - size_t s = sizeof(*this); - s += m_v.size()*sizeof(Real); - return s; - } -*/ }; } From 17c9912aba660c484ef84b93c59641dd6df205ba Mon Sep 17 00:00:00 2001 From: NAThompson Date: Fri, 6 Mar 2020 06:33:59 -0500 Subject: [PATCH 067/104] Attempt to fix compilation error of Windows. Add compiler tests for Daubechies scaling. --- .../find_best_daubechies_interpolator.cpp | 58 +++---------------- .../special_functions/daubechies_scaling.hpp | 2 +- test/Jamfile.v2 | 3 +- ...t.cpp => daubechies_filters_incl_test.cpp} | 0 .../daubechies_scaling_incl_test.cpp | 21 +++++++ test/cubic_hermite_test.cpp | 2 + 6 files changed, 35 insertions(+), 51 deletions(-) rename test/compile_test/{daubechies_incl_test.cpp => daubechies_filters_incl_test.cpp} (100%) create mode 100644 test/compile_test/daubechies_scaling_incl_test.cpp diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index 03d19f3ba..a495d1059 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include #include @@ -39,7 +41,7 @@ void choose_refinement() auto phi_dense = boost::math::detail::dyadic_grid(rmax); Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); - for (int r = 2; r <= 12; ++r) + for (int r = 2; r <= 18; ++r) { Real dx = Real(1)/ (1 << r); std::cout << "\tdx = 1/" << (1/dx) << " = 1/2^" << r << " = " << dx << "\n"; @@ -104,7 +106,7 @@ void find_best_interpolator() std::ofstream fs{filename}; static_assert(sizeof(PreciseReal) >= sizeof(Real), "sizeof(PreciseReal) >= sizeof(Real) is required."); using std::abs; - int rmax = 17; + int rmax = 18; std::cout << "Computing phi_dense_precise\n"; auto phi_dense_precise = boost::math::detail::dyadic_grid(rmax); std::vector phi_dense(phi_dense_precise.size()); @@ -135,7 +137,7 @@ void find_best_interpolator() fs << "\n"; } } - for (int r = 2; r < rmax-1; ++r) + for (int r = 2; r < 13; ++r) { fs << r << ", "; std::map m; @@ -526,50 +528,8 @@ void find_best_interpolator() } } -int main() { - /*choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement();*/ - - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - choose_refinement(); - //choose_refinement(); - //choose_refinement(); - // Says linear interpolation is the best: - /*find_best_interpolator(); - // Says linear interpolation is the best: - find_best_interpolator(); - // Says cubic_hermite_spline is best: - find_best_interpolator(); - // Says cubic_hermite_spline is best: - find_best_interpolator(); - // Says quintic_hermite_spline is best: - find_best_interpolator(); - // Says quintic_hermite_spline is best: - find_best_interpolator(); - // Says quintic_hermite_spline is best: - find_best_interpolator(); - // Says quintic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator(); - // Says septic_hermite_spline is best: - find_best_interpolator();*/ +int main() +{ + boost::hana::for_each(std::make_index_sequence<4>(), [&](auto i){ choose_refinement(); }); + boost::hana::for_each(std::make_index_sequence<4>(), [&](auto i){ find_best_interpolator(); }); } diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index d379d165f..89ade5454 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -248,7 +248,7 @@ public: { // Control absolute error: // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4}; + std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3}; grid_refinements = r[p]; } else diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index e43152572..be1d60e68 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -943,7 +943,8 @@ test-suite misc : [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run daubechies_scaling_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] - [ compile compile_test/daubechies_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] + [ compile compile_test/daubechies_filter_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] + [ compile compile_test/daubechies_scaling_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quadratic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quintic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] diff --git a/test/compile_test/daubechies_incl_test.cpp b/test/compile_test/daubechies_filters_incl_test.cpp similarity index 100% rename from test/compile_test/daubechies_incl_test.cpp rename to test/compile_test/daubechies_filters_incl_test.cpp diff --git a/test/compile_test/daubechies_scaling_incl_test.cpp b/test/compile_test/daubechies_scaling_incl_test.cpp new file mode 100644 index 000000000..7c983c583 --- /dev/null +++ b/test/compile_test/daubechies_scaling_incl_test.cpp @@ -0,0 +1,21 @@ +// Copyright Nick Thompson 2020. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// Basic sanity check that header +// #includes all the files that it needs to. +// +#include +// +// Note this header includes no other headers, this is +// important if this test is to be meaningful: +// +#include "test_compile_result.hpp" + +void compile_and_link_test() +{ + double x = 0; + auto daub3 = boost::math::daubechies_scaling(5); + check_result(daub3(x)); +} diff --git a/test/cubic_hermite_test.cpp b/test/cubic_hermite_test.cpp index 8b1636768..6d75c2883 100644 --- a/test/cubic_hermite_test.cpp +++ b/test/cubic_hermite_test.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include #ifdef BOOST_HAS_FLOAT128 From 40405e38f6693da5146238a159beb12150881bdf Mon Sep 17 00:00:00 2001 From: NAThompson Date: Fri, 6 Mar 2020 08:58:59 -0500 Subject: [PATCH 068/104] Compute bytes() --- .../daubechies_scaling_memory_occupation.cpp | 61 +++++++++++++++++++ .../math/interpolators/cubic_hermite.hpp | 30 +++++++-- .../detail/cubic_hermite_detail.hpp | 22 ++++++- .../detail/quintic_hermite_detail.hpp | 34 ++++++++--- .../detail/septic_hermite_detail.hpp | 28 +++++++-- .../math/interpolators/quintic_hermite.hpp | 37 ++++++++--- .../math/interpolators/septic_hermite.hpp | 14 +++++ .../special_functions/daubechies_scaling.hpp | 54 +++++++++++++++- 8 files changed, 250 insertions(+), 30 deletions(-) create mode 100644 example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp diff --git a/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp b/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp new file mode 100644 index 000000000..d4aeb6de6 --- /dev/null +++ b/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include + +int main() +{ + boost::hana::for_each(std::make_index_sequence<18>(), + [](auto i) { + std::cout << std::right; + auto daub = boost::math::daubechies_scaling(); + std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " + << std::setw(12) << daub.bytes() << " bytes in relative accuracy mode in " + << boost::core::demangle(typeid(float).name()) << " precision\n"; + //std::cout << "Size of class = " << sizeof(daub) << "\n"; + }); + + std::cout << std::endl; + std::cout << std::endl; + std::cout << std::endl; + + boost::hana::for_each(std::make_index_sequence<18>(), + [](auto i) { + std::cout << std::right; + auto daub = boost::math::daubechies_scaling(-2); + std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " + << std::setw(12) << daub.bytes() << " bytes in absolute accuracy mode in " + << boost::core::demangle(typeid(float).name()) << " precision\n"; + //std::cout << "Size of class = " << sizeof(daub) << "\n"; + }); + + std::cout << std::endl; + std::cout << std::endl; + std::cout << std::endl; + + + boost::hana::for_each(std::make_index_sequence<18>(), + [](auto i) { + std::cout << std::right; + auto daub = boost::math::daubechies_scaling(); + std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " + << std::setw(12) << daub.bytes() << " bytes in relative accuracy mode in " + << boost::core::demangle(typeid(double).name()) << " precision\n"; + }); + + std::cout << std::endl; + std::cout << std::endl; + std::cout << std::endl; + + boost::hana::for_each(std::make_index_sequence<18>(), + [](auto i) { + std::cout << std::right; + auto daub = boost::math::daubechies_scaling(-2); + std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " + << std::setw(12) << daub.bytes() << " bytes in absolute accuracy mode in " + << boost::core::demangle(typeid(double).name()) << " precision\n"; + }); + + +} \ No newline at end of file diff --git a/include/boost/math/interpolators/cubic_hermite.hpp b/include/boost/math/interpolators/cubic_hermite.hpp index c3ac71d7b..f7a0bed07 100644 --- a/include/boost/math/interpolators/cubic_hermite.hpp +++ b/include/boost/math/interpolators/cubic_hermite.hpp @@ -34,10 +34,16 @@ public: return os; } - void push_back(Real x, Real y, Real dydx) { + void push_back(Real x, Real y, Real dydx) + { impl_->push_back(x, y, dydx); } + int64_t bytes() + { + return impl_->bytes() + sizeof(impl_); + } + private: std::shared_ptr> impl_; }; @@ -51,11 +57,13 @@ public: : impl_(std::make_shared>(std::move(y), std::move(dydx), x0, dx)) {} - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { return impl_->operator()(x); } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { return impl_->prime(x); } @@ -65,6 +73,11 @@ public: return os; } + int64_t bytes() const + { + return impl_->bytes() + sizeof(impl_); + } + private: std::shared_ptr> impl_; }; @@ -80,11 +93,13 @@ public: : impl_(std::make_shared>(std::move(data), x0, dx)) {} - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { return impl_->operator()(x); } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { return impl_->prime(x); } @@ -94,6 +109,11 @@ public: return os; } + int64_t bytes() const + { + return impl_->bytes() + sizeof(impl_); + } + private: std::shared_ptr> impl_; }; diff --git a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp index ee8e63f74..94c250ff3 100644 --- a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp @@ -150,6 +150,11 @@ public: return x_.size(); } + int64_t bytes() const + { + return 3*x_.size()*sizeof(Real) + 3*sizeof(x_); + } + RandomAccessContainer x_; RandomAccessContainer y_; RandomAccessContainer dydx_; @@ -241,7 +246,8 @@ public: return this->unchecked_prime(x); } - inline Real unchecked_prime(Real x) const { + inline Real unchecked_prime(Real x) const + { using std::floor; Real s = (x-x0_)*inv_dx_; Real ii = floor(s); @@ -262,6 +268,13 @@ public: return y_.size(); } + int64_t bytes() const + { + return 2*y_.size()*sizeof(Real) + 2*sizeof(y_) + 2*sizeof(Real); + } + +private: + RandomAccessContainer y_; RandomAccessContainer dy_; Real x0_; @@ -373,6 +386,13 @@ public: return dat_.size(); } + int64_t bytes() const + { + return dat_.size()*dat_[0].size()*sizeof(Real) + sizeof(dat_) + 2*sizeof(Real); + } + + +private: RandomAccessContainer dat_; Real x0_; Real inv_dx_; diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 6ab07a747..26a4e7498 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -55,7 +55,8 @@ public: d2ydx2_.push_back(d2ydx2); } - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { if (x < x_[0] || x > x_.back()) { std::ostringstream oss; @@ -133,7 +134,7 @@ public: return dydx; } - inline Real double_prime(Real x) const + inline Real double_prime(Real x) const { if (x < x_[0] || x > x_.back()) { @@ -182,6 +183,11 @@ public: return os; } + int64_t bytes() const + { + return 4*x_.size()*sizeof(x_); + } + private: RandomAccessContainer x_; RandomAccessContainer y_; @@ -310,7 +316,8 @@ public: return dydx; } - inline Real double_prime(Real x) const { + inline Real double_prime(Real x) const + { const Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { std::ostringstream oss; @@ -327,7 +334,8 @@ public: return this->unchecked_double_prime(x); } - inline Real unchecked_double_prime(Real x) const { + inline Real unchecked_double_prime(Real x) const + { using std::floor; Real s = (x-x0_)*inv_dx_; Real ii = floor(s); @@ -348,6 +356,11 @@ public: return d2ydx2; } + int64_t bytes() const + { + return 3*y_.size()*sizeof(Real) + 2*sizeof(Real); + } + private: RandomAccessContainer y_; RandomAccessContainer dy_; @@ -446,7 +459,8 @@ public: return this->unchecked_prime(x); } - inline Real unchecked_prime(Real x) const { + inline Real unchecked_prime(Real x) const + { using std::floor; Real s = (x-x0_)*inv_dx_; Real ii = floor(s); @@ -467,7 +481,8 @@ public: return dy*inv_dx_; } - inline Real double_prime(Real x) const { + inline Real double_prime(Real x) const + { const Real xf = x0_ + (data_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { @@ -485,7 +500,8 @@ public: return this->unchecked_double_prime(x); } - inline Real unchecked_double_prime(Real x) const { + inline Real unchecked_double_prime(Real x) const + { using std::floor; Real s = (x-x0_)*inv_dx_; Real ii = floor(s); @@ -506,6 +522,10 @@ public: return d2ydx2; } + int64_t bytes() const + { + return data_.size()*data_[0].size()*sizeof(Real) + 2*sizeof(Real); + } private: RandomAccessContainer data_; diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index c0f8528fa..659cf019d 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -168,7 +168,6 @@ public: return std::numeric_limits::quiet_NaN(); } - friend std::ostream& operator<<(std::ostream & os, const septic_hermite_detail & m) { os << "(x,y,y') = {"; @@ -180,6 +179,10 @@ public: return os; } + int64_t bytes() + { + return 5*x_.size()*sizeof(Real) + 5*sizeof(x_); + } private: RandomAccessContainer x_; @@ -285,7 +288,8 @@ public: return z0*y0 + z1*dy0 + z2*a0 + z3*j0 + z4*y1 + z5*dy1 + z6*a1 + z7*j1; } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { Real xf = x0_ + (y_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { @@ -389,6 +393,11 @@ public: return d2ydx2; } + int64_t bytes() const + { + return 4*y_.size()*sizeof(Real) + 2*sizeof(Real) + 4*sizeof(y_); + } + private: RandomAccessContainer y_; RandomAccessContainer dy_; @@ -440,7 +449,8 @@ public: return this->unchecked_evaluation(x); } - inline Real unchecked_evaluation(Real x) const { + inline Real unchecked_evaluation(Real x) const + { using std::floor; Real s3 = (x-x0_)*inv_dx_; Real ii = floor(s3); @@ -470,10 +480,10 @@ public: Real j1 = data_[i+1][3]; return z0*y0 + z1*dy0 + z2*a0 + z3*j0 + z4*y1 + z5*dy1 + z6*a1 + z7*j1; - } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { Real xf = x0_ + (data_.size()-1)/inv_dx_; if (x < x0_ || x > xf) { @@ -491,7 +501,8 @@ public: return this->unchecked_prime(x); } - inline Real unchecked_prime(Real x) const { + inline Real unchecked_prime(Real x) const + { using std::floor; Real s3 = (x-x0_)*inv_dx_; Real ii = floor(s3); @@ -576,6 +587,11 @@ public: return d2ydx2; } + int64_t bytes() const + { + return data_.size()*data_[0].size()*sizeof(Real) + 2*sizeof(Real) + sizeof(data_); + } + private: RandomAccessContainer data_; Real x0_; diff --git a/include/boost/math/interpolators/quintic_hermite.hpp b/include/boost/math/interpolators/quintic_hermite.hpp index 59fe7fa9b..0c8e077e4 100644 --- a/include/boost/math/interpolators/quintic_hermite.hpp +++ b/include/boost/math/interpolators/quintic_hermite.hpp @@ -15,15 +15,18 @@ public: : impl_(std::make_shared>(std::move(x), std::move(y), std::move(dydx), std::move(d2ydx2))) {} - Real operator()(Real x) const { + Real operator()(Real x) const + { return impl_->operator()(x); } - Real prime(Real x) const { + Real prime(Real x) const + { return impl_->prime(x); } - Real double_prime(Real x) const { + Real double_prime(Real x) const + { return impl_->double_prime(x); } @@ -33,10 +36,15 @@ public: return os; } - void push_back(Real x, Real y, Real dydx, Real d2ydx2) { + void push_back(Real x, Real y, Real dydx, Real d2ydx2) + { impl_->push_back(x, y, dydx, d2ydx2); } + int64_t bytes() const + { + returm impl_->bytes() + sizeof(impl_); + } private: std::shared_ptr> impl_; @@ -58,10 +66,16 @@ public: return impl_->prime(x); } - inline Real double_prime(Real x) const { + inline Real double_prime(Real x) const + { return impl_->double_prime(x); } + int64_t bytes() const + { + returm impl_->bytes() + sizeof(impl_); + } + private: std::shared_ptr> impl_; }; @@ -75,18 +89,25 @@ public: : impl_(std::make_shared>(std::move(data), x0, dx)) {} - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { return impl_->operator()(x); } - inline Real prime(Real x) const { + inline Real prime(Real x) const + { return impl_->prime(x); } - inline Real double_prime(Real x) const { + inline Real double_prime(Real x) const + { return impl_->double_prime(x); } + int64_t bytes() const + { + return impl_->bytes() + sizeof(impl_); + } private: std::shared_ptr> impl_; }; diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp index d65b776db..81d33291f 100644 --- a/include/boost/math/interpolators/septic_hermite.hpp +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -39,6 +39,11 @@ public: return os; } + int64_t bytes() const + { + return impl_->bytes() + sizeof(impl_); + } + private: std::shared_ptr> impl_; }; @@ -69,6 +74,11 @@ public: return impl_->double_prime(x); } + int64_t bytes() const + { + return impl_->bytes() + sizeof(impl_); + } + private: std::shared_ptr> impl_; }; @@ -98,6 +108,10 @@ public: return impl_->double_prime(x); } + int64_t bytes() const + { + return impl_.size() + sizeof(impl_); + } private: std::shared_ptr> impl_; diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 89ade5454..5061449e9 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -78,8 +78,6 @@ std::vector dyadic_grid(int64_t j_max) v[delivery_idx] = term; } } - - return v; } @@ -98,7 +96,8 @@ public: } } - inline Real operator()(Real x) const { + inline Real operator()(Real x) const + { using std::floor; using std::sqrt; // This is the exact Holder exponent, but it's pessimistic almost everywhere! @@ -114,6 +113,13 @@ public: return y_[i] + (2*dphi - diff)*t + 2*sqrt(t)*(diff-dphi); } + int64_t bytes() const + { + int64_t b = 1 + y_.size() + dy_.size(); + // There might be some layout issues here but this should be fine: + return b*sizeof(Real) + sizeof(y_) + sizeof(dy_); + } + private: Real inv_h_; RandomAccessContainer y_; @@ -151,6 +157,12 @@ public: return y0 + (2*dphi - diff)*t + 2*sqrt(t)*(diff-dphi); } + int64_t bytes() const + { + int64_t b = 1 + data_.size()*data_[0].size()*sizeof(Real) + sizeof(data_); + return b; + } + private: Real inv_h_; RandomAccessContainer data_; @@ -189,6 +201,11 @@ public: return (1-t)*dydx_[kk] + t*dydx_[kk+1]; } + int64_t bytes() const + { + return (1 + y_.size() + dydx_.size())*sizeof(Real) + sizeof(y_) + sizeof(dydx_); + } + private: Real s_; RandomAccessContainer y_; @@ -228,6 +245,11 @@ public: return (1-t)*data_[kk][1] + t*data_[kk+1][1]; } + int64_t bytes() const + { + return sizeof(Real) + data_.size()*data_[0].size()*sizeof(Real); + } + private: Real s_; RandomAccessContainer data_; @@ -512,6 +534,32 @@ public: return {Real(0), Real(2*p-1)}; } + int64_t bytes() const + { + if constexpr (p==2) + { + return m_mh->bytes() + sizeof(m_mh); + } + if constexpr (p == 3) + { + return m_lin->bytes() + sizeof(m_lin); + } + if constexpr (p == 4 || p == 5) + { + return m_cbh->bytes() + sizeof(m_cbh); + } + if constexpr (p >= 6 && p <= 9) + { + return m_qh->bytes() + sizeof(m_qh); + } + if constexpr (p >= 10) + { + return m_sh->bytes() + sizeof(m_sh); + } + + return -1; + } + private: // Need this for p = 2: std::shared_ptr>>> m_mh; From e0e3872de7253e69ac92bc3ccec99eea2addcee5 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sat, 7 Mar 2020 12:30:35 -0500 Subject: [PATCH 069/104] Remove dyadic_grid from detail namespace. [CI SKIP] --- example/daubechies_wavelets/bench.cpp | 4 +-- .../daubechies_scaling_memory_occupation.cpp | 12 +++---- .../special_functions/daubechies_scaling.hpp | 32 +++++++++---------- 3 files changed, 23 insertions(+), 25 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 797121d79..878bf1c7e 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -27,7 +27,7 @@ void DyadicGrid(benchmark::State & state) size_t s = 0; for (auto _ : state) { - auto v = boost::math::detail::dyadic_grid(j); + auto v = boost::math::dyadic_grid(j); benchmark::DoNotOptimize(v[0]); s = v.size(); } @@ -486,4 +486,4 @@ void CardinalSepticHermiteAOS(benchmark::State & state) BENCHMARK_TEMPLATE(CardinalSepticHermiteAOS, double)->RangeMultiplier(2)->Range(1<<8, 1<<20)->Complexity(); -BENCHMARK_MAIN(); \ No newline at end of file +BENCHMARK_MAIN(); diff --git a/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp b/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp index d4aeb6de6..43ae80779 100644 --- a/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp +++ b/example/daubechies_wavelets/daubechies_scaling_memory_occupation.cpp @@ -11,9 +11,8 @@ int main() std::cout << std::right; auto daub = boost::math::daubechies_scaling(); std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " - << std::setw(12) << daub.bytes() << " bytes in relative accuracy mode in " + << std::setw(12) << daub.bytes()/1000.0 << " kilobytes in relative accuracy mode in " << boost::core::demangle(typeid(float).name()) << " precision\n"; - //std::cout << "Size of class = " << sizeof(daub) << "\n"; }); std::cout << std::endl; @@ -25,9 +24,8 @@ int main() std::cout << std::right; auto daub = boost::math::daubechies_scaling(-2); std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " - << std::setw(12) << daub.bytes() << " bytes in absolute accuracy mode in " + << std::setw(12) << daub.bytes()/1000.0 << " kilobytes in absolute accuracy mode in " << boost::core::demangle(typeid(float).name()) << " precision\n"; - //std::cout << "Size of class = " << sizeof(daub) << "\n"; }); std::cout << std::endl; @@ -40,7 +38,7 @@ int main() std::cout << std::right; auto daub = boost::math::daubechies_scaling(); std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " - << std::setw(12) << daub.bytes() << " bytes in relative accuracy mode in " + << std::setw(12) << daub.bytes()/1000.0 << " kilobytes in relative accuracy mode in " << boost::core::demangle(typeid(double).name()) << " precision\n"; }); @@ -53,9 +51,9 @@ int main() std::cout << std::right; auto daub = boost::math::daubechies_scaling(-2); std::cout << "The Daubechies " << std::setw(2) << i + 2 << " scaling function occupies " - << std::setw(12) << daub.bytes() << " bytes in absolute accuracy mode in " + << std::setw(12) << daub.bytes()/1000.0 << " kilobytes in absolute accuracy mode in " << boost::core::demangle(typeid(double).name()) << " precision\n"; }); -} \ No newline at end of file +} diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 5061449e9..a4899c7e6 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -22,8 +22,6 @@ namespace boost::math { -namespace detail { - template std::vector dyadic_grid(int64_t j_max) { @@ -35,7 +33,7 @@ std::vector dyadic_grid(int64_t j_max) x *= scale; } - auto phik = daubechies_scaling_integer_grid(); + auto phik = detail::daubechies_scaling_integer_grid(); // Maximum sensible j for 32 bit floats is j_max = 22: std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); @@ -52,7 +50,7 @@ std::vector dyadic_grid(int64_t j_max) { // Where this value will go: int64_t delivery_idx = k*(1 << (j_max-j)); - // This is a nice check, but we've tested this exhaustively, and it's expensive: + // This is a nice check, but we've tested this exhaustively, and it's an expensive check: //if (delivery_idx >= (int64_t) v.size()) { // std::cerr << "Delivery index out of range!\n"; // continue; @@ -81,6 +79,8 @@ std::vector dyadic_grid(int64_t j_max) return v; } +namespace detail { + template class matched_holder { public: @@ -298,7 +298,7 @@ public: std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { w[i] = v[i]; @@ -306,7 +306,7 @@ public: return w; } else if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { w[i] = v[i]; @@ -314,12 +314,12 @@ public: return w; } - return detail::dyadic_grid(grid_refinements); + return dyadic_grid(grid_refinements); }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { w[i] = v[i]; @@ -327,7 +327,7 @@ public: return w; } else if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { w[i] = v[i]; @@ -335,7 +335,7 @@ public: return w; } - return detail::dyadic_grid(grid_refinements); + return dyadic_grid(grid_refinements); }); // if necessary, compute the second and third derivative: @@ -345,7 +345,7 @@ public: std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -355,7 +355,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -364,14 +364,14 @@ public: return w; } - return detail::dyadic_grid(grid_refinements); + return dyadic_grid(grid_refinements); }); if constexpr (p >= 10) { std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -380,7 +380,7 @@ public: return w; } else if constexpr (std::is_same_v) { - auto v = detail::dyadic_grid(grid_refinements); + auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -389,7 +389,7 @@ public: return w; } - return detail::dyadic_grid(grid_refinements); }); + return dyadic_grid(grid_refinements); }); d3ydx3 = t4.get(); } d2ydx2 = t3.get(); From 7db35cef21f1e54825c5bd07c360abeeec7f5e2a Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sat, 7 Mar 2020 12:33:02 -0500 Subject: [PATCH 070/104] Fix typo that breaks build. --- test/Jamfile.v2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index be1d60e68..10be0bf03 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -943,7 +943,7 @@ test-suite misc : [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run daubechies_scaling_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] - [ compile compile_test/daubechies_filter_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] + [ compile compile_test/daubechies_filters_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ compile compile_test/daubechies_scaling_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] [ run cardinal_quadratic_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] From 649551931f69d87e0997c17eed5d1147b42679a1 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sat, 7 Mar 2020 13:34:58 -0500 Subject: [PATCH 071/104] First pass at docs. [CI SKIP] --- doc/filters/daubechies.qbk | 68 +++++++++++++++++++++++ include/boost/math/filters/daubechies.hpp | 2 +- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 doc/filters/daubechies.qbk diff --git a/doc/filters/daubechies.qbk b/doc/filters/daubechies.qbk new file mode 100644 index 000000000..cfbcd2f33 --- /dev/null +++ b/doc/filters/daubechies.qbk @@ -0,0 +1,68 @@ +[/ + Copyright Nick Thompson, 2020 + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). +] + +[section:daubechies_filters Daubechies Filters] + +[h4 Synopsis] + +#include + + namespace boost::math:filters { + + template + constexpr std::array daubechies_scaling_filter(); + + template + std::array daubechies_wavelet_filter(); + + } // namespaces + +The Daubechies filters provided by Boost.Math return the filter coefficients of the compactly-supported family discovered by Daubechies. + +A basic usage is as follows: + + using boost::math::filters::daubechies_scaling_filter; + using boost::math::filters::daubechies_wavelet_filter; + + auto h = daubechies_scaling_filter(); + auto g = daubechies_wavelet_filter(); + +The filters take the number of vanishing moments as a template argument, returning a `std::array` which has twice as many entries as vanishing moments. + +[h3 Caveats and Ambiguities] + +Numerous notational conventions for the filter coefficients exist. +The first ambiguity is whether they should be indexed by the number of vanishing moments, or the number of filter taps. +/Boost.Math indexes the family by the number of vanishing moments./ +This indexing convention is the same as PyWavelets and Mathematica, but differs from Numerical Recipes. + +Next, we need to ask whether the coefficients + +Here are some printing of the coefficents to help recognize the ambiguities: + + +WaveletFilterCoefficients[DaubechiesWavelet[2], "PrimalLowpass"] +{{0, 0.341506}, {1, 0.591506}, {2, 0.158494}, {3, -0.0915064}} + +>>> print(pywt.Wavelet('db2').dec_lo) +[-0.12940952255126037, 0.2241438680420134, 0.8365163037378079, 0.48296291314453416] +>>> np.linalg.norm(pywt.Wavelet('db2').dec_lo) +1.0 + + + + + +[h3 Accuracy] + +The filters are accurate to quad precision. + +[h3 References] + +* Ingrid Daubechies, ['Ten Lectures on Wavelets], SIAM Volume 61, 1992 + +[endsect] diff --git a/include/boost/math/filters/daubechies.hpp b/include/boost/math/filters/daubechies.hpp index c60ce27f8..0dc4b5bf5 100644 --- a/include/boost/math/filters/daubechies.hpp +++ b/include/boost/math/filters/daubechies.hpp @@ -1,5 +1,5 @@ /* - * Copyright Nick Thompson, 2019 + * Copyright Nick Thompson, John Maddock 2020 * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) From 6f208637199a71a338288fbe9071aea94b91eb08 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sat, 7 Mar 2020 18:37:47 -0500 Subject: [PATCH 072/104] Document filter coefficients. [CI SKIP] --- doc/filters/daubechies.qbk | 33 +++++++++++++++++++++++++-------- doc/math.qbk | 4 ++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/doc/filters/daubechies.qbk b/doc/filters/daubechies.qbk index cfbcd2f33..82ece322a 100644 --- a/doc/filters/daubechies.qbk +++ b/doc/filters/daubechies.qbk @@ -40,20 +40,37 @@ The first ambiguity is whether they should be indexed by the number of vanishing /Boost.Math indexes the family by the number of vanishing moments./ This indexing convention is the same as PyWavelets and Mathematica, but differs from Numerical Recipes. -Next, we need to ask whether the coefficients +The next ambiguity is the overall scale. +We (and PyWavelets) normalize the filters so that their L[sub 2] norm is 1. +Others normalize so that the L[sub 2] norm is [sqrt]2. -Here are some printing of the coefficents to help recognize the ambiguities: +Finally, we can use a convolutional representation of the filters, or a dot product representation. +The dot product has all elements reversed relative to the convolutional representation. -WaveletFilterCoefficients[DaubechiesWavelet[2], "PrimalLowpass"] -{{0, 0.341506}, {1, 0.591506}, {2, 0.158494}, {3, -0.0915064}} ->>> print(pywt.Wavelet('db2').dec_lo) -[-0.12940952255126037, 0.2241438680420134, 0.8365163037378079, 0.48296291314453416] ->>> np.linalg.norm(pywt.Wavelet('db2').dec_lo) -1.0 +The Boost convention: + + // ... + auto h = boost::math::filters::daubechies_scaling_filter(); + std::cout << "h = {" << h[0] << ", " << h[1] << ", " << h[2] << ", " << h[3] << "}\n"; + // output: + h = {0.48296291314453416, 0.83651630373780794, 0.22414386804201339, -0.12940952255126037} +Mathematica conventions: + + WaveletFilterCoefficients[DaubechiesWavelet[2], "PrimalLowpass"] + {{0, 0.341506}, {1, 0.591506}, {2, 0.158494}, {3, -0.0915064}} + + +PyWavelet conventions: + + >>> import pywt + >>> print(pywt.Wavelet('db2').dec_lo) + [-0.12940952255126037, 0.2241438680420134, 0.8365163037378079, 0.48296291314453416] + >>> np.linalg.norm(pywt.Wavelet('db2').dec_lo) + 1.0 diff --git a/doc/math.qbk b/doc/math.qbk index b572647f3..804b4fe5a 100644 --- a/doc/math.qbk +++ b/doc/math.qbk @@ -730,6 +730,10 @@ and as a CD ISBN 0-9504833-2-X 978-0-9504833-2-0, Classification 519.2-dc22. [include differentiation/lanczos_smoothing.qbk] [endmathpart] +[mathpart filters Filters] +[include filters/daubechies.qbk] +[endmathpart] + [include complex/complex-tr1.qbk] [include quaternion/math-quaternion.qbk] [include octonion/math-octonion.qbk] From 0b156d9552d10745104966be5767108a89801a65 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sun, 8 Mar 2020 09:21:19 -0400 Subject: [PATCH 073/104] Fix up docs for Daubechies filters [CI SKIP] --- doc/filters/daubechies.qbk | 57 ++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/doc/filters/daubechies.qbk b/doc/filters/daubechies.qbk index 82ece322a..6ee31b5c4 100644 --- a/doc/filters/daubechies.qbk +++ b/doc/filters/daubechies.qbk @@ -1,5 +1,5 @@ [/ - Copyright Nick Thompson, 2020 + Copyright Nick Thompson, John Maddock 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -9,17 +9,17 @@ [h4 Synopsis] -#include + #include - namespace boost::math:filters { + namespace boost::math:filters { - template - constexpr std::array daubechies_scaling_filter(); + template + constexpr std::array daubechies_scaling_filter(); - template - std::array daubechies_wavelet_filter(); + template + std::array daubechies_wavelet_filter(); - } // namespaces + } // namespaces The Daubechies filters provided by Boost.Math return the filter coefficients of the compactly-supported family discovered by Daubechies. @@ -38,21 +38,24 @@ The filters take the number of vanishing moments as a template argument, returni Numerous notational conventions for the filter coefficients exist. The first ambiguity is whether they should be indexed by the number of vanishing moments, or the number of filter taps. /Boost.Math indexes the family by the number of vanishing moments./ -This indexing convention is the same as PyWavelets and Mathematica, but differs from Numerical Recipes. +This indexing convention is the same as PyWavelets and Mathematica, but Numerical Recipes and Wikipedia index by the number of filter taps. The next ambiguity is the overall scale. -We (and PyWavelets) normalize the filters so that their L[sub 2] norm is 1. +Boost (and PyWavelets) normalize the filters so that their L[sub 2] norm is 1. Others normalize so that the L[sub 2] norm is [sqrt]2. Finally, we can use a convolutional representation of the filters, or a dot product representation. The dot product has all elements reversed relative to the convolutional representation. +The Boost representation agrees with Table 1 of Daubechies 1988 paper "Orthonormal Bases of Compactly Supported Wavelets", +and Mallat's "A Wavelet Tour of Signal Processing", Table 7.2. The Boost convention: // ... - auto h = boost::math::filters::daubechies_scaling_filter(); + constexpr const int p = 2; + auto h = boost::math::filters::daubechies_scaling_filter(); std::cout << "h = {" << h[0] << ", " << h[1] << ", " << h[2] << ", " << h[3] << "}\n"; // output: h = {0.48296291314453416, 0.83651630373780794, 0.22414386804201339, -0.12940952255126037} @@ -63,6 +66,7 @@ Mathematica conventions: WaveletFilterCoefficients[DaubechiesWavelet[2], "PrimalLowpass"] {{0, 0.341506}, {1, 0.591506}, {2, 0.158494}, {3, -0.0915064}} +(Multiplying all elements of the Mathematica filter by [sqrt]2 gives the Boost filter.) PyWavelet conventions: @@ -72,14 +76,43 @@ PyWavelet conventions: >>> np.linalg.norm(pywt.Wavelet('db2').dec_lo) 1.0 +(Reversing the PyWavelet filter gives the Boost filter.) +The wavelet filters bring additional ambiguity, because they are defined only by being orthogonal to the scaling filter. +So both sign and scale are determined by convention. + +For this reason, we demo some other conventions for the wavelet filter as well: + +Boost: + + auto g = boost::math::filters::daubechies_wavelet_filter(); + std::cout << "g = {" << g[0] << ", " << g[1] << ", " << g[2] << ", " << g[3] << "}\n"; + // output: + g = {-0.12940952255126037, -0.22414386804201339, 0.83651630373780794, -0.48296291314453416} + +Mathematica: + + WaveletFilterCoefficients[DaubechiesWavelet[2], "PrimalHighpass"] + {{-2, -0.0915064}, {-1, -0.158494}, {0, 0.591506}, {1, -0.341506}} + +(Note how Mathematica indexes the filter starting at -2; Boost starts at 0, and the scaling convention is different.) + +PyWavelets: + + >>> print(pywt.Wavelet('db2').dec_hi) + [-0.48296291314453416, 0.8365163037378079, -0.2241438680420134, -0.12940952255126037] + +(Again, reversing the PyWavelets filter gives the Boost filter.) + [h3 Accuracy] -The filters are accurate to quad precision. +The filters are accurate to octuple precision. [h3 References] * Ingrid Daubechies, ['Ten Lectures on Wavelets], SIAM Volume 61, 1992 +* Ingrid Daubechies, ['Orthonormal bases of compactly supported wavelets], Communications on pure and applied mathematics 41.7 (1988): 909-996. +* Stéphane Mallat. ['A wavelet tour of signal processing.] Elsevier, 1999. [endsect] From 4ebef8456489dd0732d2d2975fd56d302d3f5303 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sun, 8 Mar 2020 09:59:54 -0400 Subject: [PATCH 074/104] Fix typos that break build; kick off build [CI SKIP] --- test/daubechies_scaling_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index 7bf7847a7..a81269d96 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -242,7 +242,7 @@ void test_dyadic_grid() std::cout << "Testing dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; auto f = [&](auto i) { - auto phijk = boost::math::detail::dyadic_grid(0); + auto phijk = boost::math::dyadic_grid(0); auto phik = boost::math::detail::daubechies_scaling_integer_grid(); assert(phik.size() == phijk.size()); @@ -253,7 +253,7 @@ void test_dyadic_grid() for (size_t j = 1; j < 10; ++j) { - auto phijk = boost::math::detail::dyadic_grid(j); + auto phijk = boost::math::dyadic_grid(j); auto phik = boost::math::detail::daubechies_scaling_integer_grid(); for (size_t i = 0; i < phik.size(); ++i) { From 3fa4267ddaa6299404f4b2469af39dd13adf1e3c Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sun, 8 Mar 2020 11:08:27 -0400 Subject: [PATCH 075/104] Add documentation for Daubechies scaling function [CI SKIP] --- doc/math.qbk | 2 + doc/sf/daubechies.qbk | 98 +++++++++++++++---- .../special_functions/daubechies_scaling.hpp | 1 + 3 files changed, 80 insertions(+), 21 deletions(-) diff --git a/doc/math.qbk b/doc/math.qbk index 804b4fe5a..e7cde1c5c 100644 --- a/doc/math.qbk +++ b/doc/math.qbk @@ -683,6 +683,8 @@ and as a CD ISBN 0-9504833-2-X 978-0-9504833-2-0, Classification 519.2-dc22. [include sf/inv_hyper.qbk] [include sf/owens_t.qbk] +[include sf/daubechies.qbk] + [endmathpart] [/section:special Special Functions] diff --git a/doc/sf/daubechies.qbk b/doc/sf/daubechies.qbk index a0f92d8e8..77bde196e 100644 --- a/doc/sf/daubechies.qbk +++ b/doc/sf/daubechies.qbk @@ -1,5 +1,5 @@ [/ - Copyright 2019, Nick Thompson + Copyright Nick Thompson, John Maddock, 2020 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). @@ -9,44 +9,100 @@ [h4 Synopsis] - #include + #include - namespace boost::math::filters { + namespace boost::math { - template - constexpr std::array daubechies_scaling_filter(); + template + class daubechies_scaling { + public: + daubechies_scaling(int grid_refinements = -1); - template - std::array daubechies_wavelet_filter(); + inline Real operator()(Real x) const; - } // namespaces + inline Real prime(Real x) const; + + inline Real double_prime(Real x) const; + + std::pair support() const; + + int64_t bytes() const; + }; + + template + std::vector dyadic_grid(int64_t j_max); + + + } // namespaces -Daubechies wavelets are a family of compactly supported functions indexed by an integer /p/ which have /p/ vanishing moments and an associated filter of length /2p/. +Daubechies wavelets and scaling functions are a family of compactly supported functions indexed by an integer /p/ which have /p/ vanishing moments and an associated filter of length /2p/. They are used in signal denoising, Galerkin methods for PDEs, and compression. The canonical reference on these functions is Daubechies' monograph /Ten Lectures on Wavelets/, -which we attempt to follow here. +whose notational conventions we attempt to follow here. -To get the (low-pass) scaling filter for the Daubechies scaling function with 3 vanishing moments, use +A basic usage is as follows: - auto h = boost::math::filters::daubechies_scaling_filter(); + auto phi = boost::math::daubechies_scaling(); + double y = phi(0.38); + double dydx = phi.prime(0.38); -To get the (high-pass) wavelet filter for the Daubechies wavelet with 3 vanishing moments, use +Note that the constructor call is expensive, as it must assemble a /dyadic grid/--values of [sub /p/]\u03C6 at dyadic rationals, +i.e., numbers of the form n/2[super /j/]. +You should only instantiate this class once in the duration of a program. +The class is pimpl'd and all its member functions are threadsafe, so it can be copied cheaply and shared between threads. +The default number of grid refinements is chosen so that the relative error is controlled to ~2-3 ULPs away from the right-hand side of the support, +where superexponential growth of the condition number of function evaluation makes this impossible. +However, controlling relative error of Daubechies wavelets and scaling functions is much more difficult than controlling absolute error, +and the memory consumption is much higher in relative mode. +The memory consumption of the class can be queried via - auto g = boost::math::filters::daubechies_wavelet_filter(); + int64_t mem = phi.bytes(); -Notational conventions for these filters seem not to exist. -Ambiguities include whether or not the filter is defined via convolution or dot product (which corresponds to reversing the array), -and the overall scaling. -/The filters in Boost.Math agree with Daubechies, Ten Lectures, Table 6.1./ -This means that the elements sum to sqrt(2), and the filter is defined via a dot product. +and if this is deemed unacceptably large, the user may choose to control absolute error via calling the constructor with the `grid_refinements` parameter set to -2, +so + auto phi = boost::math::daubechies_scaling(-2); + +gives a scaling function which keeps the absolute error bounded by roughly the double precision unit roundoff. + +If context precludes the ability to reuse the class in different parts of the program evaluation, it makes sense to reduce the accuracy even further. +This can be done by specifying the grid refinements, for example, + + auto phi = boost::math::daubechies_scaling(12); + +creates a Daubechies scaling function interpolated from a dyadic grid computed down to depth /j/ = 12. +The call to the constructor is exponential time in the number of grid refinements, and the call operator, `.prime`, and `.double_prime` are constant time. + +Note that the only reason that this is a class, rather than a free function is that the dyadic grids would make the Boost source download extremely large. +Hence, it may make sense to precompute the dyadic grid and dump it in a `.cpp` file; this can be achieved via + + using boost::multiprecision::float128; + int grid_refinements = 12; + constexpr const derivative = 0; + constexpr const p = 8; + std::vector v = boost::math::dyadic_grid(grid_refinements); + +Note that quad precision is the most accurate precision provided, for both the dyadic grid and for the scaling function. +1ULP accuracy can only be achieved for float and double precision. + +Derivatives are only available if the wavelet and scaling function has sufficient smoothness. +The compiler will gladly inform you of your error if you try to call `.prime` on [sub 2]\u03C6, which is not differentiable, +but be aware that smoothness increases with the number of vanishing moments. + +The axioms of a multiresolution analysis ensure that integer shifts of the scaling functions are elements of the multiresolution analysis; +a side effect is that the supports of the (unshifted) wavelet and scaling functions are arbitrary. +For this reason, we have provided `.support()` so that you can check our conventions: + + auto [xmin, xmax] = phi.support(); + +For definiteness though, for the scaling function, the support is always [0, 2/p/ -1], and the support of the wavelet is [-/p/, /p/+1]. [heading References] -* Daubechies, Ingrid. ['Ten lectures on wavelets.] Vol. 61. Siam, 1992. -* Mallat, Stephane. ['A wavelet tour of signal processing: the sparse way] Academic press, 2008. +* Daubechies, Ingrid. ['Ten Lectures on Wavelets.] Vol. 61. Siam, 1992. +* Mallat, Stephane. ['A Wavelet Tour of Signal Processing: the sparse way] Academic press, 2008. diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index a4899c7e6..a2fcdf996 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -262,6 +262,7 @@ class daubechies_scaling { public: daubechies_scaling(int grid_refinements = -1) { + static_assert(p < 20, "Daubechies scaling functions are only implemented for p < 20."); if (grid_refinements < 0) { if (std::is_same_v) From 0661b377165adf4a340b0938f95cb4734aa0c3e5 Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sun, 8 Mar 2020 11:37:08 -0400 Subject: [PATCH 076/104] Remove typos from docs. --- doc/sf/daubechies.qbk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/sf/daubechies.qbk b/doc/sf/daubechies.qbk index 77bde196e..3828f3d31 100644 --- a/doc/sf/daubechies.qbk +++ b/doc/sf/daubechies.qbk @@ -67,7 +67,7 @@ so gives a scaling function which keeps the absolute error bounded by roughly the double precision unit roundoff. -If context precludes the ability to reuse the class in different parts of the program evaluation, it makes sense to reduce the accuracy even further. +If context precludes the ability to reuse the class throughout the program, it makes sense to reduce the accuracy even further. This can be done by specifying the grid refinements, for example, auto phi = boost::math::daubechies_scaling(12); @@ -85,7 +85,7 @@ Hence, it may make sense to precompute the dyadic grid and dump it in a `.cpp` f std::vector v = boost::math::dyadic_grid(grid_refinements); Note that quad precision is the most accurate precision provided, for both the dyadic grid and for the scaling function. -1ULP accuracy can only be achieved for float and double precision. +1ULP accuracy can only be achieved for float and double precision, in well-conditioned regions. Derivatives are only available if the wavelet and scaling function has sufficient smoothness. The compiler will gladly inform you of your error if you try to call `.prime` on [sub 2]\u03C6, which is not differentiable, @@ -97,7 +97,7 @@ For this reason, we have provided `.support()` so that you can check our convent auto [xmin, xmax] = phi.support(); -For definiteness though, for the scaling function, the support is always [0, 2/p/ -1], and the support of the wavelet is [-/p/, /p/+1]. +For definiteness though, for the scaling function, the support is always [0, /2p/ - 1], and the support of the wavelet is [ -/p/, /p/ + 1]. [heading References] From 2c7863e1a803e8a451a1839ca6fe7e0aa74099df Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Sun, 8 Mar 2020 15:33:18 -0400 Subject: [PATCH 077/104] Quadrature unit tests. [CI SKIP] --- include/boost/math/quadrature/trapezoidal.hpp | 9 ++- .../special_functions/daubechies_scaling.hpp | 13 +++- test/daubechies_scaling_test.cpp | 68 +++++++++++++++++++ 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/include/boost/math/quadrature/trapezoidal.hpp b/include/boost/math/quadrature/trapezoidal.hpp index 4899e356c..1046484d2 100644 --- a/include/boost/math/quadrature/trapezoidal.hpp +++ b/include/boost/math/quadrature/trapezoidal.hpp @@ -61,11 +61,14 @@ auto trapezoidal(F f, Real a, Real b, Real tol, std::size_t max_refinements, Rea // The recursion is: // I_k = 1/2 I_{k-1} + 1/2^k \sum_{j=1; j odd, j < 2^k} f(a + j(b-a)/2^k) std::size_t k = 2; - // We want to go through at least 4 levels so we have sampled the function at least 10 times. + // We want to go through at least 5 levels so we have sampled the function at least 20 times. // Otherwise, we could terminate prematurely and miss essential features. - // This is of course possible anyway, but 10 samples seems to be a reasonable compromise. + // This is of course possible anyway, but 20 samples seems to be a reasonable compromise. Real error = abs(I0 - I1); - while (k < 4 || (k < max_refinements && error > tol*IL1) ) + // I take k < 5, rather than k < 4, or some other smaller minimum number, + // because I hit a truly exceptional bug where the k = 2 and k =3 refinement were bitwise equal, + // but the quadrature had not yet converged. + while (k < 5 || (k < max_refinements && error > tol*IL1) ) { I0 = I1; IL0 = IL1; diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index a2fcdf996..b18828d44 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -263,6 +263,12 @@ public: daubechies_scaling(int grid_refinements = -1) { static_assert(p < 20, "Daubechies scaling functions are only implemented for p < 20."); + static_assert(p > 0, "Daubechies scaling functions must have at least 1 vanishing moment."); + if constexpr (p == 1) + { + return; + } + else { if (grid_refinements < 0) { if (std::is_same_v) @@ -457,6 +463,7 @@ public: } m_sh = std::make_shared>>>(std::move(data), Real(0), dx); } + } } @@ -466,6 +473,10 @@ public: { return 0; } + if constexpr (p==1) + { + return Real(1); + } if constexpr (p==2) { return m_mh->operator()(x); @@ -490,7 +501,7 @@ public: inline Real prime(Real x) const { - static_assert(p != 2, "The 2-vanishing moment Daubechies scaling function is not continuously differentiable."); + static_assert(p > 2, "The 3-vanishing moment Daubechies scaling function is the first which is continuously differentiable."); if (x <= 0 || x >= 2*p-1) { return 0; diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index a81269d96..f2795c9f9 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -8,6 +8,9 @@ #include "math_unit_test.hpp" #include #include +#include +#include +#include #include #include #include @@ -17,6 +20,7 @@ #include #include #include +#include #ifdef BOOST_HAS_FLOAT128 #include @@ -321,8 +325,71 @@ void test_first_derivative() } } +template +void test_quadratures() +{ + using boost::math::quadrature::trapezoidal; + if constexpr (p == 2) + { + // 2phi is truly bizarre, because two successive trapezoidal estimates are always bitwise equal, + // whereas the third is way different. I don' t think that's a reasonable thing to optimize for, + // so one-off it is. + Real h = Real(1)/Real(256); + auto phi = boost::math::daubechies_scaling(); + Real t = 0; + Real Q = 0; + while (t < 3) { + Q += phi(t); + t += h; + } + Q *= h; + CHECK_ULP_CLOSE(Real(1), Q, 32); + return; + } + else if constexpr (p > 2) + { + auto phi = boost::math::daubechies_scaling(); + + Real tol = std::numeric_limits::epsilon(); + Real error_estimate = std::numeric_limits::quiet_NaN(); + Real L1 = std::numeric_limits::quiet_NaN(); + auto [a, b] = phi.support(); + Real Q = trapezoidal(phi, a, b, tol, 15, &error_estimate, &L1); + if (!CHECK_MOLLIFIED_CLOSE(Real(1), Q, Real(0.0001))) + { + std::cerr << " Quadrature of " << p << " vanishing moment scaling function is not equal 1.\n"; + } + + std::random_device rd; + Real t = static_cast(rd())/static_cast(rd.max()); + Real S = phi(t); + Real dS = phi.prime(t); + while (t < b) + { + t += 1; + S += phi(t); + dS += phi.prime(t); + } + + if(!CHECK_ULP_CLOSE(Real(1), S, 64)) + { + std::cerr << " Normalizing sum for " << p << " vanishing moment scaling function is incorrect.\n"; + } + + if(!CHECK_MOLLIFIED_CLOSE(Real(0), dS, 100*std::sqrt(std::numeric_limits::epsilon()))) + { + std::cerr << " Derivative of normalizing sum for " << p << " vanishing moment scaling function doesn't vanish.\n"; + } + } +} + int main() { + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ + test_quadratures(); + test_quadratures(); + }); + test_agreement_with_ten_lectures(); boost::hana::for_each(std::make_index_sequence<19>(), [&](auto i){ @@ -385,6 +452,7 @@ int main() test_dyadic_grid(); #endif + #ifdef BOOST_HAS_FLOAT128 boost::hana::for_each(std::make_index_sequence<19>(), [&](auto i){ test_filter_ulp_distance(); From a67321c8d2905d74c6969a31f959eb7422c2fdeb Mon Sep 17 00:00:00 2001 From: Nick Thompson Date: Mon, 9 Mar 2020 20:19:36 -0400 Subject: [PATCH 078/104] Fix build errors. --- .../math/special_functions/daubechies_scaling.hpp | 4 ++-- test/daubechies_scaling_test.cpp | 12 ++++++------ test/quintic_hermite_test.cpp | 2 ++ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index b18828d44..96147e20f 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -45,7 +45,7 @@ std::vector dyadic_grid(int64_t j_max) for (int64_t j = 1; j <= j_max; ++j) { - int64_t k_max = v.size()/(1 << (j_max-j)); + int64_t k_max = v.size()/(int64_t(1) << (j_max-j)); for (int64_t k = 1; k < k_max; k += 2) { // Where this value will go: @@ -58,7 +58,7 @@ std::vector dyadic_grid(int64_t j_max) Real term = 0; for (int64_t l = 0; l < (int64_t) c.size(); ++l) { - int64_t idx = k*(1 << (j_max - j + 1)) - l*(1 << j_max); + int64_t idx = k*(int64_t(1) << (j_max - j + 1)) - l*(int64_t(1) << j_max); if (idx < 0) { break; diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index f2795c9f9..532eccdc4 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -257,11 +257,11 @@ void test_dyadic_grid() for (size_t j = 1; j < 10; ++j) { - auto phijk = boost::math::dyadic_grid(j); - auto phik = boost::math::detail::daubechies_scaling_integer_grid(); - for (size_t i = 0; i < phik.size(); ++i) + phijk = boost::math::dyadic_grid(j); + phik = boost::math::detail::daubechies_scaling_integer_grid(); + for (size_t l = 0; l < phik.size(); ++l) { - CHECK_ULP_CLOSE(phik[i], phijk[i*(1<(0); - for (size_t i = 0; i < phik.size(); ++i) + for (size_t l = 0; l < phik.size(); ++l) { - size_t idx = i*(1< #include +#include +#include #include #include #include From f38a3cc13f16df966752d950f467c9805cd985eb Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 10 Mar 2020 05:57:38 -0400 Subject: [PATCH 079/104] Remove some warning and try to fix msvc compile error by adding bigobj tag. --- .../special_functions/daubechies_scaling.hpp | 46 +++++++++++-------- test/Jamfile.v2 | 2 +- test/daubechies_scaling_test.cpp | 10 ++-- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 96147e20f..5f0ffae19 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -304,19 +304,23 @@ public: // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v) + { auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); } return w; } - else if constexpr (std::is_same_v) { + else if constexpr (std::is_same_v) + { auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); } return w; } @@ -325,19 +329,23 @@ public: }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) { + if constexpr (std::is_same_v) + { auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); } return w; } - else if constexpr (std::is_same_v) { + else if constexpr (std::is_same_v) + { auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); } return w; } @@ -356,7 +364,7 @@ public: std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + w[i] = static_cast(v[i]); } return w; } @@ -366,7 +374,7 @@ public: std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + w[i] = static_cast(v[i]); } return w; } @@ -382,21 +390,23 @@ public: std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + w[i] = static_cast(v[i]); } return w; } - else if constexpr (std::is_same_v) { + else if constexpr (std::is_same_v) + { auto v = dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { - w[i] = v[i]; + w[i] = static_cast(v[i]); } return w; } - return dyadic_grid(grid_refinements); }); + return dyadic_grid(grid_refinements); + }); d3ydx3 = t4.get(); } d2ydx2 = t3.get(); diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 10be0bf03..a685a1c91 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -942,7 +942,7 @@ test-suite misc : [ run cardinal_b_spline_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] - [ run daubechies_scaling_test.cpp : : : [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] + [ run daubechies_scaling_test.cpp : : : msvc:/bigobj [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ compile compile_test/daubechies_filters_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ compile compile_test/daubechies_scaling_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index 532eccdc4..42c003a07 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -255,13 +255,13 @@ void test_dyadic_grid() CHECK_ULP_CLOSE(phik[k], phijk[k], 0); } - for (size_t j = 1; j < 10; ++j) + for (int64_t j = 1; j < 10; ++j) { phijk = boost::math::dyadic_grid(j); phik = boost::math::detail::daubechies_scaling_integer_grid(); - for (size_t l = 0; l < phik.size(); ++l) + for (int64_t l = 0; l < static_cast(phik.size()); ++l) { - CHECK_ULP_CLOSE(phik[l], phijk[l*(1<(0); - for (size_t l = 0; l < phik.size(); ++l) + for (int64_t l = 0; l < static_cast(phik.size()); ++l) { - size_t idx = l*(1< Date: Tue, 10 Mar 2020 07:15:52 -0400 Subject: [PATCH 080/104] Sketch out Daubechies wavelet class [CI SKIP] --- doc/sf/daubechies.qbk | 25 +- .../special_functions/daubechies_wavelet.hpp | 387 ++++++++++++++++++ test/Jamfile.v2 | 1 + 3 files changed, 411 insertions(+), 2 deletions(-) create mode 100644 include/boost/math/special_functions/daubechies_wavelet.hpp diff --git a/doc/sf/daubechies.qbk b/doc/sf/daubechies.qbk index 3828f3d31..c56849b17 100644 --- a/doc/sf/daubechies.qbk +++ b/doc/sf/daubechies.qbk @@ -32,6 +32,24 @@ template std::vector dyadic_grid(int64_t j_max); + + #include + template + class daubechies_wavelet { + public: + daubechies_wavelet(int grid_refinements = -1); + + inline Real operator()(Real x) const; + + inline Real prime(Real x) const; + + inline Real double_prime(Real x) const; + + std::pair support() const; + + int64_t bytes() const; + }; + } // namespaces @@ -48,6 +66,9 @@ A basic usage is as follows: double y = phi(0.38); double dydx = phi.prime(0.38); + auto psi = boost::math::daubechies_wavelet(); + y = psi(0.38); + Note that the constructor call is expensive, as it must assemble a /dyadic grid/--values of [sub /p/]\u03C6 at dyadic rationals, i.e., numbers of the form n/2[super /j/]. You should only instantiate this class once in the duration of a program. @@ -95,9 +116,9 @@ The axioms of a multiresolution analysis ensure that integer shifts of the scali a side effect is that the supports of the (unshifted) wavelet and scaling functions are arbitrary. For this reason, we have provided `.support()` so that you can check our conventions: - auto [xmin, xmax] = phi.support(); + auto [a, b] = phi.support(); -For definiteness though, for the scaling function, the support is always [0, /2p/ - 1], and the support of the wavelet is [ -/p/, /p/ + 1]. +For definiteness though, for the scaling function, the support is always [0, /2p/ - 1], and the support of the wavelet is [ -/p/ + 1, /p/]. [heading References] diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp new file mode 100644 index 000000000..94eb87d75 --- /dev/null +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -0,0 +1,387 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#ifndef BOOST_MATH_SPECIAL_DAUBECHIES_WAVELET_HPP +#define BOOST_MATH_SPECIAL_DAUBECHIES_WAVELET_HPP +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace boost::math { + +template +std::vector wavelet_dyadic_grid(int64_t j_max) +{ + auto phijk = dyadic_grid(j_max); +} + + +template +class daubechies_wavelet { +public: + daubechies_wavelet(int grid_refinements = -1) + { + static_assert(p < 20, "Daubechies wavelets are only implemented for p < 20."); + static_assert(p > 0, "Daubechies wavelets must have at least 1 vanishing moment."); + if constexpr (p == 1) + { + return; + } + else + { + if (grid_refinements < 0) + { + if (std::is_same_v) + { + if (grid_refinements == -2) + { + // Control absolute error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3}; + grid_refinements = r[p]; + } + else + { + // Control relative error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{-1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11}; + grid_refinements = r[p]; + } + } + else if (std::is_same_v) + { + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18, 18, 18, 18, 18}; + grid_refinements = r[p]; + } + else + { + grid_refinements = 21; + } + } + + // Compute the refined grid: + // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. + std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { + // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: + if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + else if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + + return dyadic_grid(grid_refinements); + }); + // Compute the derivative of the refined grid: + std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { + if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + else if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + + return dyadic_grid(grid_refinements); + }); + + // if necessary, compute the second and third derivative: + std::vector d2ydx2; + std::vector d3ydx3; + if constexpr (p >= 6) { + std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { + if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + else if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + + return dyadic_grid(grid_refinements); + }); + + if constexpr (p >= 10) { + std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { + if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + else if constexpr (std::is_same_v) + { + auto v = dyadic_grid(grid_refinements); + std::vector w(v.size()); + for (size_t i = 0; i < v.size(); ++i) + { + w[i] = static_cast(v[i]); + } + return w; + } + + return dyadic_grid(grid_refinements); + }); + d3ydx3 = t4.get(); + } + d2ydx2 = t3.get(); + } + + + auto y = t0.get(); + auto dydx = t1.get(); + + if constexpr (p==2) + { + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + } + // This need to change for the wavelet! Needs a starting support parameter! + m_mh = std::make_shared>>>(std::move(data), grid_refinements); + } + if constexpr (p==3) + { + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + } + // This needs to change for the wavelet! Needs a starting support parameter! + m_lin = std::make_shared>>>(std::move(data), grid_refinements); + } + if constexpr (p == 4 || p == 5) + { + Real dx = Real(1)/(1 << grid_refinements); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + } + m_cbh = std::make_shared>>>(std::move(data), Real(-p+1), dx); + } + if constexpr (p >= 6 && p <= 9) + { + Real dx = Real(1)/(1 << grid_refinements); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + data[i][2] = d2ydx2[i]; + } + + m_qh = std::make_shared>>>(std::move(data), Real(-p+1), dx); + } + if constexpr (p >= 10) + { + Real dx = Real(1)/(1 << grid_refinements); + std::vector> data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + data[i][2] = d2ydx2[i]; + data[i][3] = d3ydx3[i]; + } + m_sh = std::make_shared>>>(std::move(data), Real(-p+1), dx); + } + } + } + + + inline Real operator()(Real x) const + { + if (x <= -p + 1 || x >= p) + { + return 0; + } + if constexpr (p==1) + { + if (x < Real(1)/Real(2)) + { + return 1; + } + else if (x == Real(1)/Real(2)) + { + return 0; + } + return -1; + } + if constexpr (p==2) + { + return m_mh->operator()(x); + } + if constexpr (p==3) + { + return m_lin->operator()(x); + } + if constexpr (p==4 || p ==5) + { + return m_cbh->unchecked_evaluation(x); + } + if constexpr (p >= 6 && p <= 9) + { + return m_qh->unchecked_evaluation(x); + } + if constexpr (p >= 10) + { + return m_sh->unchecked_evaluation(x); + } + } + + inline Real prime(Real x) const + { + static_assert(p > 2, "The 3-vanishing moment Daubechies wavelet is the first which is continuously differentiable."); + if (x <= -p + 1 || x >= p) + { + return 0; + } + if constexpr (p == 3) + { + return m_lin->prime(x); + } + if constexpr (p == 4 || p == 5) + { + return m_cbh->unchecked_prime(x); + } + if constexpr (p >= 6 && p <= 9) + { + return m_qh->unchecked_prime(x); + } + if constexpr (p >= 10) + { + return m_sh->unchecked_prime(x); + } + } + + inline Real double_prime(Real x) const + { + static_assert(p >= 6, "Second derivatives of Daubechies wavelets require at least 6 vanishing moments."); + if (x <= -p + 1 || x >= p) + { + return Real(0); + } + if constexpr (p >= 6 && p <= 9) + { + return m_qh->unchecked_double_prime(x); + } + if constexpr (p >= 10) + { + return m_sh->unchecked_double_prime(x); + } + } + + std::pair support() const + { + return {Real(-p+1), Real(p)}; + } + + int64_t bytes() const + { + if constexpr (p==1) + { + return sizeof(this); + } + if constexpr (p==2) + { + return m_mh->bytes() + sizeof(m_mh); + } + if constexpr (p == 3) + { + return m_lin->bytes() + sizeof(m_lin); + } + if constexpr (p == 4 || p == 5) + { + return m_cbh->bytes() + sizeof(m_cbh); + } + if constexpr (p >= 6 && p <= 9) + { + return m_qh->bytes() + sizeof(m_qh); + } + if constexpr (p >= 10) + { + return m_sh->bytes() + sizeof(m_sh); + } + + return -1; + } + +private: + // Need this for p = 2: + std::shared_ptr>>> m_mh; + // Need this for p = 3: + std::shared_ptr>>> m_lin; + // Need this for p = 4,5: + std::shared_ptr>>> m_cbh; + // Need this for p = 6,7,8,9: + std::shared_ptr>>> m_qh; + // Need this for p >= 10: + std::shared_ptr>>> m_sh; +}; + +} +#endif diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index a685a1c91..48157914e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -943,6 +943,7 @@ test-suite misc : [ run jacobi_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run gegenbauer_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ run daubechies_scaling_test.cpp : : : msvc:/bigobj [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] + [ run daubechies_wavelet_test.cpp : : : msvc:/bigobj [ requires cxx17_if_constexpr cxx17_std_apply ] [ check-target-builds ../config//has_float128 "GCC libquadmath and __float128 support" : -lquadmath ] ] [ compile compile_test/daubechies_filters_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ compile compile_test/daubechies_scaling_incl_test.cpp : [ requires cxx17_if_constexpr cxx17_std_apply ] ] [ run whittaker_shannon_test.cpp : : : [ requires cxx11_auto_declarations cxx11_constexpr cxx11_smart_ptr cxx11_defaulted_functions ] ] From 59fe4d690c3c420260b158b97611538cab6856e7 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 10 Mar 2020 08:17:53 -0400 Subject: [PATCH 081/104] Add test file [CI SKIP] --- test/daubechies_wavelet_test.cpp | 117 +++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 test/daubechies_wavelet_test.cpp diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp new file mode 100644 index 000000000..3144469ef --- /dev/null +++ b/test/daubechies_wavelet_test.cpp @@ -0,0 +1,117 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "math_unit_test.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_HAS_FLOAT128 +#include +using boost::multiprecision::float128; +#endif + + +using boost::math::constants::pi; +using boost::math::constants::root_two; + + +template +void test_wavelet_dyadic_grid() +{ + std::cout << "Testing wavelet dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; + auto f = [&](auto i) + { + auto phijk = boost::math::dyadic_grid(0); + auto phik = boost::math::detail::daubechies_scaling_integer_grid(); + assert(phik.size() == phijk.size()); + + for (size_t k = 0; k < phik.size(); ++k) + { + CHECK_ULP_CLOSE(phik[k], phijk[k], 0); + } + + for (int64_t j = 1; j < 10; ++j) + { + phijk = boost::math::dyadic_grid(j); + phik = boost::math::detail::daubechies_scaling_integer_grid(); + for (int64_t l = 0; l < static_cast(phik.size()); ++l) + { + CHECK_ULP_CLOSE(phik[l], phijk[l*(int64_t(1)<(0); + for (int64_t l = 0; l < static_cast(phik.size()); ++l) + { + int64_t idx = l*(int64_t(1)<::epsilon()); + } + } + }; + + boost::hana::for_each(std::make_index_sequence<18>(), f); +} + + +template +void test_quadratures() +{ + using boost::math::quadrature::trapezoidal; + auto psi = boost::math::daubechies_wavelet(); + + Real tol = std::numeric_limits::epsilon(); + Real error_estimate = std::numeric_limits::quiet_NaN(); + Real L1 = std::numeric_limits::quiet_NaN(); + auto [a, b] = psi.support(); + CHECK_ULP_CLOSE(Real(-p+1), a, 0); + CHECK_ULP_CLOSE(Real(p), b, 0); + // A wavelet is a function of zero average; ensure the quadrature over its support is zero. + /*Real Q = trapezoidal(psi, a, b, tol, 15, &error_estimate, &L1); + if (!CHECK_MOLLIFIED_CLOSE(Real(0), Q, Real(0.0001))) + { + std::cerr << " Quadrature of " << p << " vanishing moment wavelet does not vanish.\n"; + }*/ + // psi is orthogonal to its integer translates: \int \psi(x-k) \psi(x) \, \mathrm{d}x = 0 + // psi has L2 norm 1: + + // g_n = 1/sqrt(2) (Mallat, 7.55) +} + +int main() +{ + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ + test_quadratures(); + test_quadratures(); + }); + + + test_wavelet_dyadic_grid(); + test_wavelet_dyadic_grid(); + test_wavelet_dyadic_grid(); + #ifdef BOOST_HAS_FLOAT128 + test_wavelet_dyadic_grid(); + #endif + + return boost::math::test::report_errors(); +} From 6f94c35bf4d1588951e8bbfe2e3fb5bf2de292ab Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 10 Mar 2020 08:29:29 -0400 Subject: [PATCH 082/104] Fix typo [CI SKIP] --- include/boost/math/interpolators/quintic_hermite.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/boost/math/interpolators/quintic_hermite.hpp b/include/boost/math/interpolators/quintic_hermite.hpp index 0c8e077e4..beb7238f1 100644 --- a/include/boost/math/interpolators/quintic_hermite.hpp +++ b/include/boost/math/interpolators/quintic_hermite.hpp @@ -43,7 +43,7 @@ public: int64_t bytes() const { - returm impl_->bytes() + sizeof(impl_); + return impl_->bytes() + sizeof(impl_); } private: @@ -73,7 +73,7 @@ public: int64_t bytes() const { - returm impl_->bytes() + sizeof(impl_); + return impl_->bytes() + sizeof(impl_); } private: From c090b53eb8aa0fd5705ca386859b45eae44049ef Mon Sep 17 00:00:00 2001 From: NAThompson Date: Tue, 10 Mar 2020 08:33:46 -0400 Subject: [PATCH 083/104] Fix compilation error [CI SKIP] --- .../find_best_daubechies_interpolator.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index a495d1059..f5edc4dbe 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -38,7 +38,7 @@ void choose_refinement() std::cout << "Choosing refinement for " << boost::core::demangle(typeid(Real).name()) << " precision Daubechies scaling function with " << p << " vanishing moments.\n"; using std::abs; int rmax = 22; - auto phi_dense = boost::math::detail::dyadic_grid(rmax); + auto phi_dense = boost::math::dyadic_grid(rmax); Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); for (int r = 2; r <= 18; ++r) @@ -108,7 +108,7 @@ void find_best_interpolator() using std::abs; int rmax = 18; std::cout << "Computing phi_dense_precise\n"; - auto phi_dense_precise = boost::math::detail::dyadic_grid(rmax); + auto phi_dense_precise = boost::math::dyadic_grid(rmax); std::vector phi_dense(phi_dense_precise.size()); for (size_t i = 0; i < phi_dense.size(); ++i) { @@ -141,8 +141,8 @@ void find_best_interpolator() { fs << r << ", "; std::map m; - auto phi = boost::math::detail::dyadic_grid(r); - auto phi_prime = boost::math::detail::dyadic_grid(r); + auto phi = boost::math::dyadic_grid(r); + auto phi_prime = boost::math::dyadic_grid(r); std::vector x(phi.size()); Real dx = (2*p-1)/static_cast(x.size()-1); @@ -383,7 +383,7 @@ void find_best_interpolator() } if constexpr (p > 2) { - auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); + auto phi_dbl_prime = boost::math::dyadic_grid(r); { auto phi_copy = phi; @@ -451,8 +451,8 @@ void find_best_interpolator() if constexpr (p > 3) { - auto phi_dbl_prime = boost::math::detail::dyadic_grid(r); - auto phi_triple_prime = boost::math::detail::dyadic_grid(r); + auto phi_dbl_prime = boost::math::dyadic_grid(r); + auto phi_triple_prime = boost::math::dyadic_grid(r); { auto totaylor = [&phi, &phi_prime, &phi_dbl_prime, &phi_triple_prime, &r](Real x)->Real { From 2da10b8467a978d79039719c3b5715da2b97e86b Mon Sep 17 00:00:00 2001 From: NAThompson Date: Wed, 11 Mar 2020 08:07:41 -0400 Subject: [PATCH 084/104] Add start of support parameter to one-off interpolators. [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 32 +++++++++---------- .../special_functions/daubechies_wavelet.hpp | 6 ++-- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 5f0ffae19..a14edb62b 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -86,7 +86,7 @@ class matched_holder { public: using Real = typename RandomAccessContainer::value_type; - matched_holder(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements) : y_{std::move(y)}, dy_{std::move(dydx)} + matched_holder(RandomAccessContainer && y, RandomAccessContainer && dydx, int grid_refinements, Real x0) : x0_{x0}, y_{std::move(y)}, dy_{std::move(dydx)} { inv_h_ = (1 << grid_refinements); Real h = 1/inv_h_; @@ -104,7 +104,7 @@ public: // It's only exactly right at dyadic rationals. //Real const alpha = 2 - log(1+sqrt(Real(3)))/log(Real(2)); // We're gonna use alpha = 1/2, rather than 0.5500... - Real s = x*inv_h_; + Real s = (x-x0_)*inv_h_; Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; @@ -115,12 +115,11 @@ public: int64_t bytes() const { - int64_t b = 1 + y_.size() + dy_.size(); - // There might be some layout issues here but this should be fine: - return b*sizeof(Real) + sizeof(y_) + sizeof(dy_); + return 2*y_.size()*sizeof(Real) + sizeof(this); } private: + Real x0_; Real inv_h_; RandomAccessContainer y_; RandomAccessContainer dy_; @@ -132,7 +131,7 @@ public: using Point = typename RandomAccessContainer::value_type; using Real = typename Point::value_type; - matched_holder_aos(RandomAccessContainer && data, int grid_refinements) : data_{std::move(data)} + matched_holder_aos(RandomAccessContainer && data, int grid_refinements, Real x0) : x0_{x0}, data_{std::move(data)} { inv_h_ = (1 << grid_refinements); Real h = 1/inv_h_; @@ -146,7 +145,7 @@ public: { using std::floor; using std::sqrt; - Real s = x*inv_h_; + Real s = (x-x0_)*inv_h_; Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; @@ -159,11 +158,11 @@ public: int64_t bytes() const { - int64_t b = 1 + data_.size()*data_[0].size()*sizeof(Real) + sizeof(data_); - return b; + return data_.size()*data_[0].size()*sizeof(Real) + sizeof(this); } private: + Real x0_; Real inv_h_; RandomAccessContainer data_; }; @@ -218,7 +217,7 @@ public: using Point = typename RandomAccessContainer::value_type; using Real = typename Point::value_type; - linear_interpolation_aos(RandomAccessContainer && data, int grid_refinements) : data_{std::move(data)} + linear_interpolation_aos(RandomAccessContainer && data, int grid_refinements, Real x0) : x0_{x0}, data_{std::move(data)} { s_ = (1 << grid_refinements); } @@ -226,7 +225,7 @@ public: inline Real operator()(Real x) const { using std::floor; - Real y = x*s_; + Real y = (x-x0_)*s_; Real k = floor(y); int64_t kk = static_cast(k); @@ -237,7 +236,7 @@ public: inline Real prime(Real x) const { using std::floor; - Real y = x*s_; + Real y = (x-x0_)*s_; Real k = floor(y); int64_t kk = static_cast(k); @@ -247,10 +246,11 @@ public: int64_t bytes() const { - return sizeof(Real) + data_.size()*data_[0].size()*sizeof(Real); + return sizeof(this) + data_.size()*data_[0].size()*sizeof(Real); } private: + Real x0_; Real s_; RandomAccessContainer data_; }; @@ -291,7 +291,7 @@ public: else if (std::is_same_v) { // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18, 18, 18, 18, 18}; + std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18}; grid_refinements = r[p]; } else @@ -424,7 +424,7 @@ public: data[i][0] = y[i]; data[i][1] = dydx[i]; } - m_mh = std::make_shared>>>(std::move(data), grid_refinements); + m_mh = std::make_shared>>>(std::move(data), grid_refinements, Real(0)); } if constexpr (p==3) { @@ -434,7 +434,7 @@ public: data[i][0] = y[i]; data[i][1] = dydx[i]; } - m_lin = std::make_shared>>>(std::move(data), grid_refinements); + m_lin = std::make_shared>>>(std::move(data), grid_refinements, Real(0)); } if constexpr (p == 4 || p == 5) { diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp index 94eb87d75..52a56b1d8 100644 --- a/include/boost/math/special_functions/daubechies_wavelet.hpp +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -198,8 +198,7 @@ public: data[i][0] = y[i]; data[i][1] = dydx[i]; } - // This need to change for the wavelet! Needs a starting support parameter! - m_mh = std::make_shared>>>(std::move(data), grid_refinements); + m_mh = std::make_shared>>>(std::move(data), grid_refinements, Real(-p+1)); } if constexpr (p==3) { @@ -209,8 +208,7 @@ public: data[i][0] = y[i]; data[i][1] = dydx[i]; } - // This needs to change for the wavelet! Needs a starting support parameter! - m_lin = std::make_shared>>>(std::move(data), grid_refinements); + m_lin = std::make_shared>>>(std::move(data), grid_refinements, Real(-p+1)); } if constexpr (p == 4 || p == 5) { From 10040456676a6d779ebc4714fcd7a3e38c78b932 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 12 Mar 2020 05:48:16 -0400 Subject: [PATCH 085/104] Attempt to fix some build errors --- example/daubechies_wavelets/bench.cpp | 2 +- .../find_best_daubechies_interpolator.cpp | 20 ++++----- .../special_functions/daubechies_scaling.hpp | 41 ++++++++++++------- .../special_functions/daubechies_wavelet.hpp | 31 +++++++------- test/daubechies_scaling_test.cpp | 4 +- test/daubechies_wavelet_test.cpp | 4 +- test/quintic_hermite_test.cpp | 6 +-- test/septic_hermite_test.cpp | 2 +- 8 files changed, 62 insertions(+), 48 deletions(-) diff --git a/example/daubechies_wavelets/bench.cpp b/example/daubechies_wavelets/bench.cpp index 878bf1c7e..db2846130 100644 --- a/example/daubechies_wavelets/bench.cpp +++ b/example/daubechies_wavelets/bench.cpp @@ -27,7 +27,7 @@ void DyadicGrid(benchmark::State & state) size_t s = 0; for (auto _ : state) { - auto v = boost::math::dyadic_grid(j); + auto v = boost::math::daubechies_scaling_dyadic_grid(j); benchmark::DoNotOptimize(v[0]); s = v.size(); } diff --git a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp index f5edc4dbe..56c5ed3cb 100644 --- a/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp +++ b/example/daubechies_wavelets/find_best_daubechies_interpolator.cpp @@ -38,7 +38,7 @@ void choose_refinement() std::cout << "Choosing refinement for " << boost::core::demangle(typeid(Real).name()) << " precision Daubechies scaling function with " << p << " vanishing moments.\n"; using std::abs; int rmax = 22; - auto phi_dense = boost::math::dyadic_grid(rmax); + auto phi_dense = boost::math::daubechies_scaling_dyadic_grid(rmax); Real dx_dense = (2*p-1)/static_cast(phi_dense.size()-1); for (int r = 2; r <= 18; ++r) @@ -108,7 +108,7 @@ void find_best_interpolator() using std::abs; int rmax = 18; std::cout << "Computing phi_dense_precise\n"; - auto phi_dense_precise = boost::math::dyadic_grid(rmax); + auto phi_dense_precise = boost::math::daubechies_scaling_dyadic_grid(rmax); std::vector phi_dense(phi_dense_precise.size()); for (size_t i = 0; i < phi_dense.size(); ++i) { @@ -141,8 +141,8 @@ void find_best_interpolator() { fs << r << ", "; std::map m; - auto phi = boost::math::dyadic_grid(r); - auto phi_prime = boost::math::dyadic_grid(r); + auto phi = boost::math::daubechies_scaling_dyadic_grid(r); + auto phi_prime = boost::math::daubechies_scaling_dyadic_grid(r); std::vector x(phi.size()); Real dx = (2*p-1)/static_cast(x.size()-1); @@ -155,7 +155,7 @@ void find_best_interpolator() { auto phi_copy = phi; auto phi_prime_copy = phi_prime; - auto mh = boost::math::detail::matched_holder(std::move(phi_copy), std::move(phi_prime_copy), r); + auto mh = boost::math::detail::matched_holder(std::move(phi_copy), std::move(phi_prime_copy), r, Real(0)); Real sup = 0; // call to matched_holder is unchecked, so only go to phi_dense.size() -1. for (size_t i = 0; i < phi_dense.size() - 1; ++i) @@ -383,7 +383,7 @@ void find_best_interpolator() } if constexpr (p > 2) { - auto phi_dbl_prime = boost::math::dyadic_grid(r); + auto phi_dbl_prime = boost::math::daubechies_scaling_dyadic_grid(r); { auto phi_copy = phi; @@ -451,8 +451,8 @@ void find_best_interpolator() if constexpr (p > 3) { - auto phi_dbl_prime = boost::math::dyadic_grid(r); - auto phi_triple_prime = boost::math::dyadic_grid(r); + auto phi_dbl_prime = boost::math::daubechies_scaling_dyadic_grid(r); + auto phi_triple_prime = boost::math::daubechies_scaling_dyadic_grid(r); { auto totaylor = [&phi, &phi_prime, &phi_dbl_prime, &phi_triple_prime, &r](Real x)->Real { @@ -530,6 +530,6 @@ void find_best_interpolator() int main() { - boost::hana::for_each(std::make_index_sequence<4>(), [&](auto i){ choose_refinement(); }); - boost::hana::for_each(std::make_index_sequence<4>(), [&](auto i){ find_best_interpolator(); }); + //boost::hana::for_each(std::make_index_sequence<4>(), [&](auto i){ choose_refinement(); }); + boost::hana::for_each(std::make_index_sequence<12>(), [&](auto i){ find_best_interpolator(); }); } diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index a14edb62b..37231bb04 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -23,7 +23,7 @@ namespace boost::math { template -std::vector dyadic_grid(int64_t j_max) +std::vector daubechies_scaling_dyadic_grid(int64_t j_max) { using std::isnan; auto c = boost::math::filters::daubechies_scaling_filter(); @@ -36,6 +36,13 @@ std::vector dyadic_grid(int64_t j_max) auto phik = detail::daubechies_scaling_integer_grid(); // Maximum sensible j for 32 bit floats is j_max = 22: + if (std::is_same_v) + { + if (j_max > 23) + { + throw std::logic_error("Requested dyadic grid more dense than number of representables on the interval."); + } + } std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); v[0] = 0; v[v.size()-1] = 0; @@ -306,7 +313,7 @@ public: // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -316,7 +323,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -324,14 +331,16 @@ public: } return w; } - - return dyadic_grid(grid_refinements); + else + { + return daubechies_scaling_dyadic_grid(grid_refinements); + } }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -341,7 +350,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -349,8 +358,10 @@ public: } return w; } - - return dyadic_grid(grid_refinements); + else + { + return daubechies_scaling_dyadic_grid(grid_refinements); + } }); // if necessary, compute the second and third derivative: @@ -360,7 +371,7 @@ public: std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -370,7 +381,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -379,14 +390,14 @@ public: return w; } - return dyadic_grid(grid_refinements); + return daubechies_scaling_dyadic_grid(grid_refinements); }); if constexpr (p >= 10) { std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -396,7 +407,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -405,7 +416,7 @@ public: return w; } - return dyadic_grid(grid_refinements); + return daubechies_scaling_dyadic_grid(grid_refinements); }); d3ydx3 = t4.get(); } diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp index 52a56b1d8..8738c4552 100644 --- a/include/boost/math/special_functions/daubechies_wavelet.hpp +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -24,9 +24,12 @@ namespace boost::math { template -std::vector wavelet_dyadic_grid(int64_t j_max) +std::vector daubechies_wavelet_dyadic_grid(int64_t j_max) { - auto phijk = dyadic_grid(j_max); + auto phijk = daubechies_scaling_dyadic_grid(j_max); + + /// wrogn: + return phijk; } @@ -80,7 +83,7 @@ public: // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -90,7 +93,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -99,13 +102,13 @@ public: return w; } - return dyadic_grid(grid_refinements); + return daubechies_wavelet_dyadic_grid(grid_refinements); }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -115,7 +118,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -124,7 +127,7 @@ public: return w; } - return dyadic_grid(grid_refinements); + return daubechies_wavelet_dyadic_grid(grid_refinements); }); // if necessary, compute the second and third derivative: @@ -134,7 +137,7 @@ public: std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -144,7 +147,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -153,14 +156,14 @@ public: return w; } - return dyadic_grid(grid_refinements); + return daubechies_wavelet_dyadic_grid(grid_refinements); }); if constexpr (p >= 10) { std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -170,7 +173,7 @@ public: } else if constexpr (std::is_same_v) { - auto v = dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid(grid_refinements); std::vector w(v.size()); for (size_t i = 0; i < v.size(); ++i) { @@ -179,7 +182,7 @@ public: return w; } - return dyadic_grid(grid_refinements); + return daubechies_wavelet_dyadic_grid(grid_refinements); }); d3ydx3 = t4.get(); } diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index 42c003a07..c22ae5c3e 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -246,7 +246,7 @@ void test_dyadic_grid() std::cout << "Testing dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; auto f = [&](auto i) { - auto phijk = boost::math::dyadic_grid(0); + auto phijk = boost::math::daubechies_scaling_dyadic_grid(0); auto phik = boost::math::detail::daubechies_scaling_integer_grid(); assert(phik.size() == phijk.size()); @@ -257,7 +257,7 @@ void test_dyadic_grid() for (int64_t j = 1; j < 10; ++j) { - phijk = boost::math::dyadic_grid(j); + phijk = boost::math::daubechies_scaling_dyadic_grid(j); phik = boost::math::detail::daubechies_scaling_integer_grid(); for (int64_t l = 0; l < static_cast(phik.size()); ++l) { diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp index 3144469ef..bb64c9590 100644 --- a/test/daubechies_wavelet_test.cpp +++ b/test/daubechies_wavelet_test.cpp @@ -34,7 +34,7 @@ void test_wavelet_dyadic_grid() std::cout << "Testing wavelet dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; auto f = [&](auto i) { - auto phijk = boost::math::dyadic_grid(0); + auto phijk = boost::math::daubechies_scaling_dyadic_grid(0); auto phik = boost::math::detail::daubechies_scaling_integer_grid(); assert(phik.size() == phijk.size()); @@ -45,7 +45,7 @@ void test_wavelet_dyadic_grid() for (int64_t j = 1; j < 10; ++j) { - phijk = boost::math::dyadic_grid(j); + phijk = boost::math::daubechies_scaling_dyadic_grid(j); phik = boost::math::detail::daubechies_scaling_integer_grid(); for (int64_t l = 0; l < static_cast(phik.size()); ++l) { diff --git a/test/quintic_hermite_test.cpp b/test/quintic_hermite_test.cpp index 997155f70..a668e42e1 100644 --- a/test/quintic_hermite_test.cpp +++ b/test/quintic_hermite_test.cpp @@ -111,7 +111,7 @@ void test_quadratic() for (Real t = 0; t <= 9; t += 0.0078125) { CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 2); - CHECK_ULP_CLOSE(t, qh.prime(t), 7); + CHECK_ULP_CLOSE(t, qh.prime(t), 12); CHECK_ULP_CLOSE(Real(1), qh.double_prime(t), 32); } @@ -145,7 +145,7 @@ void test_quadratic() for (Real t = xmin; t <= xmax; t += 0.125) { CHECK_ULP_CLOSE(Real(t*t)/2, qh(t), 4); - CHECK_ULP_CLOSE(t, qh.prime(t), 36); + CHECK_ULP_CLOSE(t, qh.prime(t), 53); CHECK_ULP_CLOSE(Real(1), qh.double_prime(t), 700); } } @@ -363,7 +363,7 @@ void test_cardinal_quadratic() { Real computed = qh_aos(t); CHECK_ULP_CLOSE(Real(t*t)/2, computed, 2); - CHECK_ULP_CLOSE(t, qh_aos.prime(t), 7); + CHECK_ULP_CLOSE(t, qh_aos.prime(t), 12); CHECK_ULP_CLOSE(Real(1), qh_aos.double_prime(t), 64); } } diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index 180ceff0f..6b7265327 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -177,7 +177,7 @@ void test_quadratic() for (Real t = 0; t <= 9; t += 0.0078125) { CHECK_ULP_CLOSE(t*t/2, sh(t), 100); - CHECK_ULP_CLOSE(t, sh.prime(t), 7); + CHECK_ULP_CLOSE(t, sh.prime(t), 32); } boost::random::mt19937 rng; From f44feba639516d05b4085268920b796e196d9b6e Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 12 Mar 2020 06:07:03 -0400 Subject: [PATCH 086/104] Test L2 norm of Daubechies scaling function. [CI SKIP] --- test/daubechies_scaling_test.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index c22ae5c3e..bdc097bad 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -358,7 +358,17 @@ void test_quadratures() if (!CHECK_MOLLIFIED_CLOSE(Real(1), Q, Real(0.0001))) { std::cerr << " Quadrature of " << p << " vanishing moment scaling function is not equal 1.\n"; + std::cerr << " Error estimate is " << error_estimate << ", L1 norm is " << L1 << "\n"; } + + auto phi_sq = [phi](Real x) { Real t = phi(x); return t*t; }; + Q = trapezoidal(phi, a, b, tol, 15, &error_estimate, &L1); + if (!CHECK_MOLLIFIED_CLOSE(Real(1), Q, 20*std::sqrt(std::numeric_limits::epsilon())/(p*p))) + { + std::cerr << " L2 norm of " << p << " vanishing moment scaling function is not equal 1.\n"; + std::cerr << " Error estimate is " << error_estimate << ", L1 norm is " << L1 << "\n"; + } + std::random_device rd; Real t = static_cast(rd())/static_cast(rd.max()); @@ -376,10 +386,14 @@ void test_quadratures() std::cerr << " Normalizing sum for " << p << " vanishing moment scaling function is incorrect.\n"; } - if(!CHECK_MOLLIFIED_CLOSE(Real(0), dS, 100*std::sqrt(std::numeric_limits::epsilon()))) + // The p = 3, 4 convergence rate is very slow, making this produce false positives: + if (p > 4) { - std::cerr << " Derivative of normalizing sum for " << p << " vanishing moment scaling function doesn't vanish.\n"; - } + if(!CHECK_MOLLIFIED_CLOSE(Real(0), dS, 100*std::sqrt(std::numeric_limits::epsilon()))) + { + std::cerr << " Derivative of normalizing sum for " << p << " vanishing moment scaling function doesn't vanish.\n"; + } + } } } From c4e0563c1b09867f8a32d3fc8b13a35353e017b7 Mon Sep 17 00:00:00 2001 From: NAThompson Date: Thu, 12 Mar 2020 09:49:33 -0400 Subject: [PATCH 087/104] Wavelet tests [CI SKIP] --- .../daubechies_wavelet_plots.cpp | 162 ++++++++++++++++++ .../special_functions/daubechies_wavelet.hpp | 38 +++- test/daubechies_wavelet_test.cpp | 77 ++------- 3 files changed, 214 insertions(+), 63 deletions(-) create mode 100644 example/daubechies_wavelets/daubechies_wavelet_plots.cpp diff --git a/example/daubechies_wavelets/daubechies_wavelet_plots.cpp b/example/daubechies_wavelets/daubechies_wavelet_plots.cpp new file mode 100644 index 000000000..d2a3a24a0 --- /dev/null +++ b/example/daubechies_wavelets/daubechies_wavelet_plots.cpp @@ -0,0 +1,162 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#include +#include +#include +#include + +#include +#include +#include +#include + + +using boost::multiprecision::float128; +constexpr const int GRAPH_WIDTH = 700; + +template +void plot_psi(int grid_refinements = -1) +{ + auto phi = boost::math::daubechies_wavelet(); + if (grid_refinements >= 0) + { + phi = boost::math::daubechies_wavelet(grid_refinements); + } + auto [a, b] = phi.support(); + std::string title = "Daubechies " + std::to_string(p) + " wavelet"; + title = ""; + std::string filename = "daubechies_" + std::to_string(p) + "_wavelet.svg"; + int samples = 1024; + quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); + daub.set_gridlines(8, 2*p-1); + daub.set_stroke_width(1); + daub.add_fn(phi); + daub.write_all(); +} + +template +void plot_dpsi(int grid_refinements = -1) +{ + auto psi = boost::math::daubechies_wavelet(); + if (grid_refinements >= 0) + { + psi = boost::math::daubechies_wavelet(grid_refinements); + } + auto [a, b] = psi.support(); + std::string title = "Daubechies " + std::to_string(p) + " wavelet derivative"; + title = ""; + std::string filename = "daubechies_" + std::to_string(p) + "_wavelet_prime.svg"; + int samples = 1024; + quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); + daub.set_stroke_width(1); + daub.set_gridlines(8, 2*p-1); + auto dpsi = [psi](Real x)->Real { return psi.prime(x); }; + daub.add_fn(dpsi); + daub.write_all(); +} + +template +void plot_convergence() +{ + auto phi0 = boost::math::daubechies_wavelet(0); + auto [a, b] = phi0.support(); + std::string title = "Daubechies " + std::to_string(p) + " wavelet at 0 (green), 1 (orange), 2 (red), and 24 (blue) grid refinements"; + title = ""; + std::string filename = "daubechies_" + std::to_string(p) + "_wavelet_convergence.svg"; + + quicksvg::graph_fn daub(a, b, title, filename, 1024, GRAPH_WIDTH); + daub.set_stroke_width(1); + daub.set_gridlines(8, 2*p-1); + + daub.add_fn(phi0, "green"); + auto phi1 = boost::math::daubechies_wavelet(1); + daub.add_fn(phi1, "orange"); + auto phi2 = boost::math::daubechies_wavelet(2); + daub.add_fn(phi2, "red"); + + auto phi21 = boost::math::daubechies_wavelet(21); + daub.add_fn(phi21); + + daub.write_all(); +} + +template +void plot_condition_number() +{ + using std::abs; + using std::log; + static_assert(p >= 3, "p = 2 is not differentiable, so condition numbers cannot be effectively evaluated."); + auto phi = boost::math::daubechies_wavelet(); + Real a = phi.support().first + 1000*std::sqrt(std::numeric_limits::epsilon()); + Real b = phi.support().second - 1000*std::sqrt(std::numeric_limits::epsilon()); + std::string title = "log10 of condition number of function evaluation for Daubechies " + std::to_string(p) + " wavelet function."; + title = ""; + std::string filename = "daubechies_" + std::to_string(p) + "_wavelet_condition_number.svg"; + + + quicksvg::graph_fn daub(a, b, title, filename, 2048, GRAPH_WIDTH); + daub.set_stroke_width(1); + daub.set_gridlines(8, 2*p-1); + + auto cond = [&phi](Real x) + { + Real y = phi(x); + Real dydx = phi.prime(x); + Real z = abs(x*dydx/y); + using std::isnan; + if (z==0) + { + return Real(-1); + } + if (isnan(z)) + { + // Graphing libraries don't like nan's: + return Real(1); + } + return log10(z); + }; + daub.add_fn(cond); + daub.write_all(); +} + +template +void do_ulp(int coarse_refinements, PhiPrecise phi_precise) +{ + auto phi_coarse = boost::math::daubechies_wavelet(coarse_refinements); + + std::string title = std::to_string(p) + " vanishing moment ULP plot at " + std::to_string(coarse_refinements) + " refinements and " + boost::core::demangle(typeid(CoarseReal).name()) + " precision"; + title = ""; + + std::string filename = "daubechies_" + std::to_string(p) + "_wavelet_" + boost::core::demangle(typeid(CoarseReal).name()) + "_" + std::to_string(coarse_refinements) + "_refinements.svg"; + int samples = 20000; + int clip = 20; + int horizontal_lines = 8; + int vertical_lines = 2*p - 1; + quicksvg::ulp_plot(phi_coarse, phi_precise, CoarseReal(0), phi_coarse.support().second, title, filename, samples, GRAPH_WIDTH, clip, horizontal_lines, vertical_lines); +} + + +int main() +{ + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ plot_psi(); }); + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ plot_dpsi(); }); + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ plot_condition_number(); }); + boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ plot_convergence(); }); + + using PreciseReal = float128; + using CoarseReal = double; + int precise_refinements = 22; + constexpr const int p = 8; + std::cout << "Computing precise wavelet function in " << boost::core::demangle(typeid(PreciseReal).name()) << " precision.\n"; + auto phi_precise = boost::math::daubechies_wavelet(precise_refinements); + std::cout << "Beginning comparison with functions computed in " << boost::core::demangle(typeid(CoarseReal).name()) << " precision.\n"; + for (int i = 7; i <= precise_refinements-1; ++i) + { + std::cout << "\tCoarse refinement " << i << "\n"; + do_ulp(i, phi_precise); + } +} diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp index 8738c4552..be301e840 100644 --- a/include/boost/math/special_functions/daubechies_wavelet.hpp +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -26,10 +26,40 @@ namespace boost::math { template std::vector daubechies_wavelet_dyadic_grid(int64_t j_max) { - auto phijk = daubechies_scaling_dyadic_grid(j_max); + auto phijk = daubechies_scaling_dyadic_grid(j_max-1); + //psi_j[l] = psi(-p+1 + l/2^j) = \sum_{k=0}^{2p-1} (-1)^k c_k \phi(1-2p+k + l/2^{j-1}) + //For derivatives just map c_k -> 2^order c_k. + auto d = boost::math::filters::daubechies_scaling_filter(); + Real scale = boost::math::constants::root_two()*(1 << order); + for (size_t i = 0; i < d.size(); ++i) + { + d[i] *= scale; + if (i & 1) + { + d[i] = -d[i]; + } + } - /// wrogn: - return phijk; + std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); + v[0] = 0; + v[v.size()-1] = 0; + + for (int64_t l = 1; l < static_cast(v.size() - 1); ++l) + { + Real term = 0; + for (int64_t k = 0; k < static_cast(d.size()); ++k) + { + int64_t idx = (int64_t(1) << (j_max-1))*(1 - 2*p + k) + l; + if (idx < 0 || idx >= static_cast(phijk.size())) + { + continue; + } + term += d[k]*phijk[idx]; + } + v[l] = term; + } + + return v; } @@ -68,7 +98,7 @@ public: else if (std::is_same_v) { // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 19, 18, 18, 18, 18, 18, 18}; + std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 18, 18, 18, 18, 18, 18, 18}; grid_refinements = r[p]; } else diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp index bb64c9590..7023116c7 100644 --- a/test/daubechies_wavelet_test.cpp +++ b/test/daubechies_wavelet_test.cpp @@ -28,55 +28,10 @@ using boost::math::constants::pi; using boost::math::constants::root_two; -template -void test_wavelet_dyadic_grid() -{ - std::cout << "Testing wavelet dyadic grid on type " << boost::core::demangle(typeid(Real).name()) << "\n"; - auto f = [&](auto i) - { - auto phijk = boost::math::daubechies_scaling_dyadic_grid(0); - auto phik = boost::math::detail::daubechies_scaling_integer_grid(); - assert(phik.size() == phijk.size()); - - for (size_t k = 0; k < phik.size(); ++k) - { - CHECK_ULP_CLOSE(phik[k], phijk[k], 0); - } - - for (int64_t j = 1; j < 10; ++j) - { - phijk = boost::math::daubechies_scaling_dyadic_grid(j); - phik = boost::math::detail::daubechies_scaling_integer_grid(); - for (int64_t l = 0; l < static_cast(phik.size()); ++l) - { - CHECK_ULP_CLOSE(phik[l], phijk[l*(int64_t(1)<(0); - for (int64_t l = 0; l < static_cast(phik.size()); ++l) - { - int64_t idx = l*(int64_t(1)<::epsilon()); - } - } - }; - - boost::hana::for_each(std::make_index_sequence<18>(), f); -} - - template void test_quadratures() { + std::cout << "Testing quadratures of " << p << " vanishing moment Daubechies wavelet on type " << boost::core::demangle(typeid(Real).name()) << "\n"; using boost::math::quadrature::trapezoidal; auto psi = boost::math::daubechies_wavelet(); @@ -87,11 +42,23 @@ void test_quadratures() CHECK_ULP_CLOSE(Real(-p+1), a, 0); CHECK_ULP_CLOSE(Real(p), b, 0); // A wavelet is a function of zero average; ensure the quadrature over its support is zero. - /*Real Q = trapezoidal(psi, a, b, tol, 15, &error_estimate, &L1); + Real Q = trapezoidal(psi, a, b, tol, 15, &error_estimate, &L1); if (!CHECK_MOLLIFIED_CLOSE(Real(0), Q, Real(0.0001))) { std::cerr << " Quadrature of " << p << " vanishing moment wavelet does not vanish.\n"; - }*/ + std::cerr << " Error estimate: " << error_estimate << ", L1 norm: " << L1 << "\n"; + } + auto psi_sq = [psi](Real x) { + Real t = psi(x); + return t*t; + }; + Q = trapezoidal(psi_sq, a, b, tol, 15, &error_estimate, &L1); + Real quad_tol = 2000*std::sqrt(std::numeric_limits::epsilon())/(p*p*p); + if (!CHECK_MOLLIFIED_CLOSE(Real(1), Q, quad_tol)) + { + std::cerr << " L2 norm of " << p << " vanishing moment wavelet does not vanish.\n"; + std::cerr << " Error estimate: " << error_estimate << ", L1 norm: " << L1 << "\n"; + } // psi is orthogonal to its integer translates: \int \psi(x-k) \psi(x) \, \mathrm{d}x = 0 // psi has L2 norm 1: @@ -100,18 +67,10 @@ void test_quadratures() int main() { - boost::hana::for_each(std::make_index_sequence<18>(), [&](auto i){ - test_quadratures(); - test_quadratures(); + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ + test_quadratures(); + test_quadratures(); }); - - test_wavelet_dyadic_grid(); - test_wavelet_dyadic_grid(); - test_wavelet_dyadic_grid(); - #ifdef BOOST_HAS_FLOAT128 - test_wavelet_dyadic_grid(); - #endif - return boost::math::test::report_errors(); } From cfc9b953977d728f479bcec57c72003f277535cc Mon Sep 17 00:00:00 2001 From: NAThompson Date: Fri, 13 Mar 2020 06:50:34 -0400 Subject: [PATCH 088/104] Fix a couple bugs in Daubechies wavelets [CI SKIP] --- .../daubechies_wavelet_plots.cpp | 26 +++++++++---------- .../special_functions/daubechies_wavelet.hpp | 12 +++++++-- test/daubechies_wavelet_test.cpp | 19 ++++++++++++++ 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_wavelet_plots.cpp b/example/daubechies_wavelets/daubechies_wavelet_plots.cpp index d2a3a24a0..d4fcb5952 100644 --- a/example/daubechies_wavelets/daubechies_wavelet_plots.cpp +++ b/example/daubechies_wavelets/daubechies_wavelet_plots.cpp @@ -21,12 +21,12 @@ constexpr const int GRAPH_WIDTH = 700; template void plot_psi(int grid_refinements = -1) { - auto phi = boost::math::daubechies_wavelet(); + auto psi = boost::math::daubechies_wavelet(); if (grid_refinements >= 0) { - phi = boost::math::daubechies_wavelet(grid_refinements); + psi = boost::math::daubechies_wavelet(grid_refinements); } - auto [a, b] = phi.support(); + auto [a, b] = psi.support(); std::string title = "Daubechies " + std::to_string(p) + " wavelet"; title = ""; std::string filename = "daubechies_" + std::to_string(p) + "_wavelet.svg"; @@ -34,7 +34,7 @@ void plot_psi(int grid_refinements = -1) quicksvg::graph_fn daub(a, b, title, filename, samples, GRAPH_WIDTH); daub.set_gridlines(8, 2*p-1); daub.set_stroke_width(1); - daub.add_fn(phi); + daub.add_fn(psi); daub.write_all(); } @@ -62,9 +62,9 @@ void plot_dpsi(int grid_refinements = -1) template void plot_convergence() { - auto phi0 = boost::math::daubechies_wavelet(0); - auto [a, b] = phi0.support(); - std::string title = "Daubechies " + std::to_string(p) + " wavelet at 0 (green), 1 (orange), 2 (red), and 24 (blue) grid refinements"; + auto psi1 = boost::math::daubechies_wavelet(1); + auto [a, b] = psi1.support(); + std::string title = "Daubechies " + std::to_string(p) + " wavelet at 1 (orange), 2 (red), and 21 (blue) grid refinements"; title = ""; std::string filename = "daubechies_" + std::to_string(p) + "_wavelet_convergence.svg"; @@ -72,14 +72,12 @@ void plot_convergence() daub.set_stroke_width(1); daub.set_gridlines(8, 2*p-1); - daub.add_fn(phi0, "green"); - auto phi1 = boost::math::daubechies_wavelet(1); - daub.add_fn(phi1, "orange"); - auto phi2 = boost::math::daubechies_wavelet(2); - daub.add_fn(phi2, "red"); + daub.add_fn(psi1, "orange"); + auto psi2 = boost::math::daubechies_wavelet(2); + daub.add_fn(psi2, "red"); - auto phi21 = boost::math::daubechies_wavelet(21); - daub.add_fn(phi21); + auto psi21 = boost::math::daubechies_wavelet(21); + daub.add_fn(psi21); daub.write_all(); } diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp index be301e840..225c1532a 100644 --- a/include/boost/math/special_functions/daubechies_wavelet.hpp +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -26,6 +26,10 @@ namespace boost::math { template std::vector daubechies_wavelet_dyadic_grid(int64_t j_max) { + if (j_max == 0) + { + throw std::domain_error("The wavelet dyadic grid is refined from the scaling integer grid, so its minimum amount of data is half integer widths."); + } auto phijk = daubechies_scaling_dyadic_grid(j_max-1); //psi_j[l] = psi(-p+1 + l/2^j) = \sum_{k=0}^{2p-1} (-1)^k c_k \phi(1-2p+k + l/2^{j-1}) //For derivatives just map c_k -> 2^order c_k. @@ -34,13 +38,13 @@ std::vector daubechies_wavelet_dyadic_grid(int64_t j_max) for (size_t i = 0; i < d.size(); ++i) { d[i] *= scale; - if (i & 1) + if (!(i & 1)) { d[i] = -d[i]; } } - std::vector v(2*p + (2*p-1)*((1<::quiet_NaN()); + std::vector v(2*p + (2*p-1)*((int64_t(1) <::quiet_NaN()); v[0] = 0; v[v.size()-1] = 0; @@ -70,6 +74,10 @@ public: { static_assert(p < 20, "Daubechies wavelets are only implemented for p < 20."); static_assert(p > 0, "Daubechies wavelets must have at least 1 vanishing moment."); + if (grid_refinements == 0) + { + throw std::domain_error("The wavelet requires at least 1 grid refinement."); + } if constexpr (p == 1) { return; diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp index 7023116c7..d9b9f0796 100644 --- a/test/daubechies_wavelet_test.cpp +++ b/test/daubechies_wavelet_test.cpp @@ -27,6 +27,23 @@ using boost::multiprecision::float128; using boost::math::constants::pi; using boost::math::constants::root_two; +template +void test_exact_value() +{ + // The global phase of the wavelet is not constrained by anything other than convention. + // Make sure that our conventions match the rest of the world: + + auto psi = boost::math::daubechies_wavelet(2); + auto phi = boost::math::daubechies_wavelet(2); + auto h = boost::math::filters::daubechies_scaling_filter(); + + Real computed = psi(1); + // this expression for expected is wrong! + Real expected = root_two()*(-h[0]*phi(1) + h[1]*phi(2)); + CHECK_ULP_CLOSE(expected, computed, 1); + + std::cout << "psi(" << 1 << ") = " << psi(1) << "\n"; +} template void test_quadratures() @@ -67,6 +84,8 @@ void test_quadratures() int main() { + //test_exact_value(); + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ test_quadratures(); test_quadratures(); From 5ce09f50ca91be2c3e19496863a9e26f0f010d1b Mon Sep 17 00:00:00 2001 From: NAThompson Date: Fri, 13 Mar 2020 08:59:13 -0400 Subject: [PATCH 089/104] Implement wavelet transform [CI SKIP] --- .../daubechies_wavelets/wavelet_transform.cpp | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 example/daubechies_wavelets/wavelet_transform.cpp diff --git a/example/daubechies_wavelets/wavelet_transform.cpp b/example/daubechies_wavelets/wavelet_transform.cpp new file mode 100644 index 000000000..b52f9db0a --- /dev/null +++ b/example/daubechies_wavelets/wavelet_transform.cpp @@ -0,0 +1,82 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#include +#include +#include +#include +#include +#include +#include + +namespace bg = boost::gil; + +template +class daubechies_wavelet_transform +{ +public: + daubechies_wavelet_transform(F f, int grid_refinements = -1, Real tol = boost::math::tools::root_epsilon(), + int max_refinements = 12) : f_{f}, psi_(grid_refinements), tol_{tol}, max_refinements_{max_refinements} + {} + + Real operator()(Real s, Real t) const + { + using std::sqrt; + using boost::math::quadrature::trapezoidal; + if (s <= 0) + { + throw std::domain_error("s > 0 is required."); + } + Real a = -s*p + s + t; + Real b = s*p + t; + Real Q = trapezoidal(f_, a, b, tol_, max_refinements_); + return Q/sqrt(s); + } + +private: + F f_; + boost::math::daubechies_wavelet psi_; + Real tol_; + int max_refinements_; +}; + + + +int main(int argc, char *argv[]) +{ + int height = 1000; + int width = 1.618*height; + auto img = bg::gray16_image_t{width, height, bg::gray16_pixel_t {0}}; + auto view = bg::view(img); + auto count = std::uint16_t {0}; + for (auto it = view.begin(); it != view.end(); ++it) + { + *it = count++; + } + + //bg::write_view("img.png", bg::const_view(img), bg::png_tag()); + bg::write_view("img.jpeg", bg::const_view(img), bg::png_tag()); + return 0; +} + +/*int main() +{ + double a = 1.3; + auto f = [&a](double t) { + if(t==0) { + return double(0); + } + return std::sin(a/t); + }; + + auto Wf = daubechies_wavelet_transform(f); + + double s = 7; + double t = 9.2; + double Wfst = Wf(s, t); + std::cout << "W[f](s,t) = " << Wfst << "\n"; + return 0; +}*/ \ No newline at end of file From e5282c570e8a89cd409e89627cb531b14c1e1ed1 Mon Sep 17 00:00:00 2001 From: Nick Date: Fri, 13 Mar 2020 16:51:40 -0400 Subject: [PATCH 090/104] Wavelet transform [CI SKIP] --- .../daubechies_wavelets/wavelet_transform.cpp | 49 ++++------------- .../math/quadrature/wavelet_transforms.hpp | 53 +++++++++++++++++++ 2 files changed, 63 insertions(+), 39 deletions(-) create mode 100644 include/boost/math/quadrature/wavelet_transforms.hpp diff --git a/example/daubechies_wavelets/wavelet_transform.cpp b/example/daubechies_wavelets/wavelet_transform.cpp index b52f9db0a..479e6a6be 100644 --- a/example/daubechies_wavelets/wavelet_transform.cpp +++ b/example/daubechies_wavelets/wavelet_transform.cpp @@ -5,46 +5,15 @@ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #include -#include -#include +#include #include #include #include #include +#include namespace bg = boost::gil; - -template -class daubechies_wavelet_transform -{ -public: - daubechies_wavelet_transform(F f, int grid_refinements = -1, Real tol = boost::math::tools::root_epsilon(), - int max_refinements = 12) : f_{f}, psi_(grid_refinements), tol_{tol}, max_refinements_{max_refinements} - {} - - Real operator()(Real s, Real t) const - { - using std::sqrt; - using boost::math::quadrature::trapezoidal; - if (s <= 0) - { - throw std::domain_error("s > 0 is required."); - } - Real a = -s*p + s + t; - Real b = s*p + t; - Real Q = trapezoidal(f_, a, b, tol_, max_refinements_); - return Q/sqrt(s); - } - -private: - F f_; - boost::math::daubechies_wavelet psi_; - Real tol_; - int max_refinements_; -}; - - - +/* int main(int argc, char *argv[]) { int height = 1000; @@ -60,10 +29,11 @@ int main(int argc, char *argv[]) //bg::write_view("img.png", bg::const_view(img), bg::png_tag()); bg::write_view("img.jpeg", bg::const_view(img), bg::png_tag()); return 0; -} +}*/ -/*int main() +int main() { + using boost::math::quadrature::daubechies_wavelet_transform; double a = 1.3; auto f = [&a](double t) { if(t==0) { @@ -74,9 +44,10 @@ int main(int argc, char *argv[]) auto Wf = daubechies_wavelet_transform(f); + Eigen::MatrixXd grid(512, 512); double s = 7; double t = 9.2; - double Wfst = Wf(s, t); - std::cout << "W[f](s,t) = " << Wfst << "\n"; + grid(0,0) = Wf(s, t); + std::cout << "W[f](s,t) = " << grid(0,0) << "\n"; return 0; -}*/ \ No newline at end of file +} \ No newline at end of file diff --git a/include/boost/math/quadrature/wavelet_transforms.hpp b/include/boost/math/quadrature/wavelet_transforms.hpp new file mode 100644 index 000000000..dfc904bee --- /dev/null +++ b/include/boost/math/quadrature/wavelet_transforms.hpp @@ -0,0 +1,53 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef BOOST_MATH_QUADRATURE_WAVELET_TRANSFORMS_HPP +#define BOOST_MATH_QUADRATURE_WAVELET_TRANSFORMS_HPP +#include +#include + +namespace boost::math::quadrature { + +template +class daubechies_wavelet_transform +{ +public: + daubechies_wavelet_transform(F f, int grid_refinements = -1, Real tol = boost::math::tools::root_epsilon(), + int max_refinements = 12) : f_{f}, psi_(grid_refinements), tol_{tol}, max_refinements_{max_refinements} + {} + + Real operator()(Real s, Real t) const + { + using std::sqrt; + using boost::math::quadrature::trapezoidal; + if (s == 0) + { + return std::numeric_limits::quiet_NaN(); + } + + // -p + 1 < (x-t)/s < p so if s > 0 then s(1-p) + t < x < sp + t + // if s < 0, then + // -sp + s >= x-t >= sp <=> sp + t < x < s(1-p) + t + Real a = -s*p + s + t; + Real b = s*p + t; + if (s < 0) + { + std::swap(a, b); + } + Real Q = trapezoidal(f_, a, b, tol_, max_refinements_); + return Q/sqrt(s); + } + +private: + F f_; + boost::math::daubechies_wavelet psi_; + Real tol_; + int max_refinements_; +}; + + +} +#endif \ No newline at end of file From 81765540b533caeb1cf7863df81720f65d664eb3 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 14 Mar 2020 09:22:48 -0400 Subject: [PATCH 091/104] Wavelet transforms for complex-valued integrands [CI SKIP] --- .../daubechies_wavelets/wavelet_transform.cpp | 21 ++++++++++++++++--- .../math/quadrature/wavelet_transforms.hpp | 15 ++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/example/daubechies_wavelets/wavelet_transform.cpp b/example/daubechies_wavelets/wavelet_transform.cpp index 479e6a6be..8a5c3c959 100644 --- a/example/daubechies_wavelets/wavelet_transform.cpp +++ b/example/daubechies_wavelets/wavelet_transform.cpp @@ -5,6 +5,7 @@ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ #include +#include #include #include #include @@ -46,8 +47,22 @@ int main() Eigen::MatrixXd grid(512, 512); double s = 7; - double t = 9.2; + double t = 0; grid(0,0) = Wf(s, t); - std::cout << "W[f](s,t) = " << grid(0,0) << "\n"; - return 0; + + auto g = [&a](double t)->std::complex { + if (t==0) { + return {0.0, 0.0}; + } + return std::exp(std::complex(0.0, a/t)); + }; + + auto Wg = daubechies_wavelet_transform(g); + std::cout << "W[f](s,t) = " << Wf(s,t) << "\n"; + std::cout << "W[g](s,t) = " << Wg(s, t) << "\n"; + std::cout << Wg(0.0, 3.5) << "\n"; + std::cout << Wf(0.0, 4.8) << "\n"; + std::cout << "W[f](-s,t) = " << Wf(-s, t) << "\n"; + std::cout << "W[g](-s,t) = " << Wg(-s, t) << "\n"; + } \ No newline at end of file diff --git a/include/boost/math/quadrature/wavelet_transforms.hpp b/include/boost/math/quadrature/wavelet_transforms.hpp index dfc904bee..ef8a12c71 100644 --- a/include/boost/math/quadrature/wavelet_transforms.hpp +++ b/include/boost/math/quadrature/wavelet_transforms.hpp @@ -19,14 +19,11 @@ public: int max_refinements = 12) : f_{f}, psi_(grid_refinements), tol_{tol}, max_refinements_{max_refinements} {} - Real operator()(Real s, Real t) const + auto operator()(Real s, Real t)->decltype(std::declval()(std::declval())) const { using std::sqrt; + using std::abs; using boost::math::quadrature::trapezoidal; - if (s == 0) - { - return std::numeric_limits::quiet_NaN(); - } // -p + 1 < (x-t)/s < p so if s > 0 then s(1-p) + t < x < sp + t // if s < 0, then @@ -37,8 +34,12 @@ public: { std::swap(a, b); } - Real Q = trapezoidal(f_, a, b, tol_, max_refinements_); - return Q/sqrt(s); + if (s == 0) + { + return std::numeric_limits::quiet_NaN(); + } + + return trapezoidal(f_, a, b, tol_, max_refinements_)/sqrt(abs(s)); } private: From 6ebdabd397d969e40e3b41e67b8fc1449875a968 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 21 Mar 2020 11:19:46 -0400 Subject: [PATCH 092/104] Still an ASAN bug, but moving along. [CI SKIP] --- .../daubechies_wavelet_plots.cpp | 10 ++--- .../daubechies_wavelets/wavelet_transform.cpp | 24 +----------- test/daubechies_wavelet_test.cpp | 37 +++++++++++++------ 3 files changed, 31 insertions(+), 40 deletions(-) diff --git a/example/daubechies_wavelets/daubechies_wavelet_plots.cpp b/example/daubechies_wavelets/daubechies_wavelet_plots.cpp index d4fcb5952..4d898ea4e 100644 --- a/example/daubechies_wavelets/daubechies_wavelet_plots.cpp +++ b/example/daubechies_wavelets/daubechies_wavelet_plots.cpp @@ -121,10 +121,10 @@ void plot_condition_number() daub.write_all(); } -template -void do_ulp(int coarse_refinements, PhiPrecise phi_precise) +template +void do_ulp(int coarse_refinements, PsiPrecise psi_precise) { - auto phi_coarse = boost::math::daubechies_wavelet(coarse_refinements); + auto psi_coarse = boost::math::daubechies_wavelet(coarse_refinements); std::string title = std::to_string(p) + " vanishing moment ULP plot at " + std::to_string(coarse_refinements) + " refinements and " + boost::core::demangle(typeid(CoarseReal).name()) + " precision"; title = ""; @@ -134,7 +134,7 @@ void do_ulp(int coarse_refinements, PhiPrecise phi_precise) int clip = 20; int horizontal_lines = 8; int vertical_lines = 2*p - 1; - quicksvg::ulp_plot(phi_coarse, phi_precise, CoarseReal(0), phi_coarse.support().second, title, filename, samples, GRAPH_WIDTH, clip, horizontal_lines, vertical_lines); + quicksvg::ulp_plot(psi_coarse, psi_precise, CoarseReal(psi_coarse.support().first), psi_coarse.support().second, title, filename, samples, GRAPH_WIDTH, clip, horizontal_lines, vertical_lines); } @@ -148,7 +148,7 @@ int main() using PreciseReal = float128; using CoarseReal = double; int precise_refinements = 22; - constexpr const int p = 8; + constexpr const int p = 9; std::cout << "Computing precise wavelet function in " << boost::core::demangle(typeid(PreciseReal).name()) << " precision.\n"; auto phi_precise = boost::math::daubechies_wavelet(precise_refinements); std::cout << "Beginning comparison with functions computed in " << boost::core::demangle(typeid(CoarseReal).name()) << " precision.\n"; diff --git a/example/daubechies_wavelets/wavelet_transform.cpp b/example/daubechies_wavelets/wavelet_transform.cpp index 8a5c3c959..67cdde803 100644 --- a/example/daubechies_wavelets/wavelet_transform.cpp +++ b/example/daubechies_wavelets/wavelet_transform.cpp @@ -7,30 +7,8 @@ #include #include #include -#include -#include -#include -#include #include -namespace bg = boost::gil; -/* -int main(int argc, char *argv[]) -{ - int height = 1000; - int width = 1.618*height; - auto img = bg::gray16_image_t{width, height, bg::gray16_pixel_t {0}}; - auto view = bg::view(img); - auto count = std::uint16_t {0}; - for (auto it = view.begin(); it != view.end(); ++it) - { - *it = count++; - } - - //bg::write_view("img.png", bg::const_view(img), bg::png_tag()); - bg::write_view("img.jpeg", bg::const_view(img), bg::png_tag()); - return 0; -}*/ int main() { @@ -65,4 +43,4 @@ int main() std::cout << "W[f](-s,t) = " << Wf(-s, t) << "\n"; std::cout << "W[g](-s,t) = " << Wg(-s, t) << "\n"; -} \ No newline at end of file +} diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp index d9b9f0796..f1614d10e 100644 --- a/test/daubechies_wavelet_test.cpp +++ b/test/daubechies_wavelet_test.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #ifdef BOOST_HAS_FLOAT128 @@ -32,17 +33,10 @@ void test_exact_value() { // The global phase of the wavelet is not constrained by anything other than convention. // Make sure that our conventions match the rest of the world: - auto psi = boost::math::daubechies_wavelet(2); - auto phi = boost::math::daubechies_wavelet(2); - auto h = boost::math::filters::daubechies_scaling_filter(); - Real computed = psi(1); - // this expression for expected is wrong! - Real expected = root_two()*(-h[0]*phi(1) + h[1]*phi(2)); - CHECK_ULP_CLOSE(expected, computed, 1); - - std::cout << "psi(" << 1 << ") = " << psi(1) << "\n"; + Real expected = -1.366025403784439; + CHECK_MOLLIFIED_CLOSE(expected, computed, 0.0001); } template @@ -77,14 +71,33 @@ void test_quadratures() std::cerr << " Error estimate: " << error_estimate << ", L1 norm: " << L1 << "\n"; } // psi is orthogonal to its integer translates: \int \psi(x-k) \psi(x) \, \mathrm{d}x = 0 - // psi has L2 norm 1: - // g_n = 1/sqrt(2) (Mallat, 7.55) + + // Now hit the boundary. Much can go wrong here; this just tests for segfaults: + int samples = 500; + Real xlo = a; + Real xhi = b; + for (int i = 0; i < samples; ++i) + { + CHECK_ULP_CLOSE(Real(0), psi(xlo), 0); + CHECK_ULP_CLOSE(Real(0), psi(xhi), 0); + xlo = std::nextafter(xlo, std::numeric_limits::lowest()); + xhi = std::nextafter(xhi, std::numeric_limits::max()); + } + + xlo = a; + xhi = b; + for (int i = 0; i < samples; ++i) { + assert(abs(psi(xlo)) <= 5); + assert(abs(psi(xhi)) <= 5); + xlo = std::nextafter(xlo, std::numeric_limits::max()); + xhi = std::nextafter(xhi, std::numeric_limits::lowest()); + } } int main() { - //test_exact_value(); + test_exact_value(); boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i){ test_quadratures(); From 5b1ba3bd735123cfa545bb5475d09b8385548ac9 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Sun, 22 Mar 2020 10:12:29 +0000 Subject: [PATCH 093/104] Suppress msvc warnings. --- .../special_functions/daubechies_scaling.hpp | 16 ++++++++-------- test/daubechies_scaling_test.cpp | 14 +++++++------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 37231bb04..fe36bd1b1 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -47,7 +47,7 @@ std::vector daubechies_scaling_dyadic_grid(int64_t j_max) v[0] = 0; v[v.size()-1] = 0; for (int64_t i = 0; i < (int64_t) phik.size(); ++i) { - v[i*(1< daubechies_scaling_dyadic_grid(int64_t j_max) for (int64_t k = 1; k < k_max; k += 2) { // Where this value will go: - int64_t delivery_idx = k*(1 << (j_max-j)); + int64_t delivery_idx = k*(1uLL << (j_max-j)); // This is a nice check, but we've tested this exhaustively, and it's an expensive check: //if (delivery_idx >= (int64_t) v.size()) { // std::cerr << "Delivery index out of range!\n"; @@ -140,7 +140,7 @@ public: matched_holder_aos(RandomAccessContainer && data, int grid_refinements, Real x0) : x0_{x0}, data_{std::move(data)} { - inv_h_ = (1 << grid_refinements); + inv_h_ = Real(1uLL << grid_refinements); Real h = 1/inv_h_; for (auto & datum : data_) { @@ -226,7 +226,7 @@ public: linear_interpolation_aos(RandomAccessContainer && data, int grid_refinements, Real x0) : x0_{x0}, data_{std::move(data)} { - s_ = (1 << grid_refinements); + s_ = Real(1uLL << grid_refinements); } inline Real operator()(Real x) const @@ -389,8 +389,8 @@ public: } return w; } - - return daubechies_scaling_dyadic_grid(grid_refinements); + else + return daubechies_scaling_dyadic_grid(grid_refinements); }); if constexpr (p >= 10) { @@ -415,8 +415,8 @@ public: } return w; } - - return daubechies_scaling_dyadic_grid(grid_refinements); + else + return daubechies_scaling_dyadic_grid(grid_refinements); }); d3ydx3 = t4.get(); } diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index bdc097bad..e033d65fc 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -73,7 +73,7 @@ void test_daubechies_filters() Real abs_hk = 0; for (size_t n = 0; n < h.size(); ++n) { - Real t = pow(n, k)*h[n]; + Real t = static_cast(pow(n, k)*h[n]); if (n & 1) { hk -= t; @@ -255,13 +255,13 @@ void test_dyadic_grid() CHECK_ULP_CLOSE(phik[k], phijk[k], 0); } - for (int64_t j = 1; j < 10; ++j) + for (uint64_t j = 1; j < 10; ++j) { phijk = boost::math::daubechies_scaling_dyadic_grid(j); phik = boost::math::detail::daubechies_scaling_integer_grid(); - for (int64_t l = 0; l < static_cast(phik.size()); ++l) + for (uint64_t l = 0; l < static_cast(phik.size()); ++l) { - CHECK_ULP_CLOSE(phik[l], phijk[l*(int64_t(1)<(0); - for (int64_t l = 0; l < static_cast(phik.size()); ++l) + for (uint64_t l = 0; l < static_cast(phik.size()); ++l) { - int64_t idx = l*(int64_t(1)< 4) + if constexpr(p > 4) { if(!CHECK_MOLLIFIED_CLOSE(Real(0), dS, 100*std::sqrt(std::numeric_limits::epsilon()))) { From 3610dd94dd7707860d0b48a3d93d739f9779bd47 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Sun, 22 Mar 2020 11:05:06 +0000 Subject: [PATCH 094/104] Simplify some of the Daubechies code. [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 144 ++++++------------ .../special_functions/daubechies_wavelet.hpp | 102 ++----------- 2 files changed, 59 insertions(+), 187 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index fe36bd1b1..b55b1356a 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -237,7 +237,7 @@ public: int64_t kk = static_cast(k); Real t = y - k; - return (1-t)*data_[kk][0] + t*data_[kk+1][0]; + return (t != 0) ? (1-t)*data_[kk][0] + t*data_[kk+1][0] : data_[kk][0]; } inline Real prime(Real x) const @@ -248,7 +248,7 @@ public: int64_t kk = static_cast(k); Real t = y - k; - return (1-t)*data_[kk][1] + t*data_[kk+1][1]; + return t != 0 ? (1-t)*data_[kk][1] + t*data_[kk+1][1] : data_[kk][1]; } int64_t bytes() const @@ -262,7 +262,43 @@ private: RandomAccessContainer data_; }; -} + +template +struct daubechies_eval_type +{ + typedef T type; + + static const std::vector& vector_cast(const std::vector& v) { return v; } + +}; +template <> +struct daubechies_eval_type +{ + typedef double type; + + inline static std::vector vector_cast(const std::vector& v) + { + std::vector result(v.size()); + for (unsigned i = 0; i < v.size(); ++i) + result[i] = static_cast(v[i]); + return result; + } +}; +template <> +struct daubechies_eval_type +{ + typedef long double type; + + inline static std::vector vector_cast(const std::vector& v) + { + std::vector result(v.size()); + for (unsigned i = 0; i < v.size(); ++i) + result[i] = static_cast(v[i]); + return result; + } +}; + +} // namespace detail template class daubechies_scaling { @@ -311,57 +347,13 @@ public: // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: - if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else - { - return daubechies_scaling_dyadic_grid(grid_refinements); - } + auto v = daubechies_scaling_dyadic_grid::type, p, 0>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else - { - return daubechies_scaling_dyadic_grid(grid_refinements); - } + auto v = daubechies_scaling_dyadic_grid::type, p, 1>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); }); // if necessary, compute the second and third derivative: @@ -369,54 +361,14 @@ public: std::vector d3ydx3; if constexpr (p >= 6) { std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else - return daubechies_scaling_dyadic_grid(grid_refinements); - }); + auto v = daubechies_scaling_dyadic_grid::type, p, 2>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); if constexpr (p >= 10) { std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_scaling_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else - return daubechies_scaling_dyadic_grid(grid_refinements); + auto v = daubechies_scaling_dyadic_grid::type, p, 3>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); }); d3ydx3 = t4.get(); } diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp index 225c1532a..cbb31b3d9 100644 --- a/include/boost/math/special_functions/daubechies_wavelet.hpp +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -119,109 +119,29 @@ public: // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: - if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - - return daubechies_wavelet_dyadic_grid(grid_refinements); + auto v = daubechies_wavelet_dyadic_grid::type, p, 0>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); }); // Compute the derivative of the refined grid: std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - - return daubechies_wavelet_dyadic_grid(grid_refinements); - }); + auto v = daubechies_wavelet_dyadic_grid::type, p, 1>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); // if necessary, compute the second and third derivative: std::vector d2ydx2; std::vector d3ydx3; if constexpr (p >= 6) { std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - - return daubechies_wavelet_dyadic_grid(grid_refinements); - }); + auto v = daubechies_wavelet_dyadic_grid::type, p, 2>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); if constexpr (p >= 10) { std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { - if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - else if constexpr (std::is_same_v) - { - auto v = daubechies_wavelet_dyadic_grid(grid_refinements); - std::vector w(v.size()); - for (size_t i = 0; i < v.size(); ++i) - { - w[i] = static_cast(v[i]); - } - return w; - } - - return daubechies_wavelet_dyadic_grid(grid_refinements); - }); + auto v = daubechies_wavelet_dyadic_grid::type, p, 3>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); d3ydx3 = t4.get(); } d2ydx2 = t3.get(); From bc70b9955370c2010d8035d243cfa4bf8ae05ff4 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 08:50:21 -0400 Subject: [PATCH 095/104] Test boundaries for segfaults [CI SKIP] --- .../special_functions/daubechies_scaling.hpp | 2 +- test/daubechies_scaling_test.cpp | 77 +++++++++++++++---- 2 files changed, 62 insertions(+), 17 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index b55b1356a..4144469df 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -1,5 +1,5 @@ /* - * Copyright Nick Thompson, 2020 + * Copyright Nick Thompson, John Maddock 2020 * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index e033d65fc..668cd609c 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -1,5 +1,5 @@ /* - * Copyright Nick Thompson, 2019 + * Copyright Nick Thompson, John Maddock 2020 * Use, modification and distribution are subject to the * Boost Software License, Version 1.0. (See accompanying file * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -21,6 +21,7 @@ #include #include #include +#include #ifdef BOOST_HAS_FLOAT128 #include @@ -328,23 +329,47 @@ void test_first_derivative() template void test_quadratures() { + std::cout << "Testing " << p << " vanishing moment scaling function quadratures on type " << boost::core::demangle(typeid(Real).name()) << "\n"; using boost::math::quadrature::trapezoidal; if constexpr (p == 2) { - // 2phi is truly bizarre, because two successive trapezoidal estimates are always bitwise equal, - // whereas the third is way different. I don' t think that's a reasonable thing to optimize for, - // so one-off it is. - Real h = Real(1)/Real(256); - auto phi = boost::math::daubechies_scaling(); - Real t = 0; - Real Q = 0; - while (t < 3) { - Q += phi(t); - t += h; - } - Q *= h; - CHECK_ULP_CLOSE(Real(1), Q, 32); - return; + // 2phi is truly bizarre, because two successive trapezoidal estimates are always bitwise equal, + // whereas the third is way different. I don' t think that's a reasonable thing to optimize for, + // so one-off it is. + Real h = Real(1)/Real(256); + auto phi = boost::math::daubechies_scaling(); + Real t = 0; + Real Q = 0; + while (t < 3) { + Q += phi(t); + t += h; + } + Q *= h; + CHECK_ULP_CLOSE(Real(1), Q, 32); + + auto [a, b] = phi.support(); + // Now hit the boundary. Much can go wrong here; this just tests for segfaults: + int samples = 500; + Real xlo = a; + Real xhi = b; + for (int i = 0; i < samples; ++i) + { + CHECK_ULP_CLOSE(Real(0), phi(xlo), 0); + CHECK_ULP_CLOSE(Real(0), phi(xhi), 0); + xlo = std::nextafter(xlo, std::numeric_limits::lowest()); + xhi = std::nextafter(xhi, std::numeric_limits::max()); + } + + xlo = a; + xhi = b; + for (int i = 0; i < samples; ++i) { + assert(abs(phi(xlo)) <= 5); + assert(abs(phi(xhi)) <= 5); + xlo = std::nextafter(xlo, std::numeric_limits::max()); + xhi = std::nextafter(xhi, std::numeric_limits::lowest()); + } + + return; } else if constexpr (p > 2) { @@ -369,7 +394,6 @@ void test_quadratures() std::cerr << " Error estimate is " << error_estimate << ", L1 norm is " << L1 << "\n"; } - std::random_device rd; Real t = static_cast(rd())/static_cast(rd.max()); Real S = phi(t); @@ -394,6 +418,27 @@ void test_quadratures() std::cerr << " Derivative of normalizing sum for " << p << " vanishing moment scaling function doesn't vanish.\n"; } } + + // Test boundary for segfaults: + int samples = 500; + Real xlo = a; + Real xhi = b; + for (int i = 0; i < samples; ++i) + { + CHECK_ULP_CLOSE(Real(0), phi(xlo), 0); + CHECK_ULP_CLOSE(Real(0), phi(xhi), 0); + xlo = std::nextafter(xlo, std::numeric_limits::lowest()); + xhi = std::nextafter(xhi, std::numeric_limits::max()); + } + + xlo = a; + xhi = b; + for (int i = 0; i < samples; ++i) { + assert(abs(phi(xlo)) <= 5); + assert(abs(phi(xhi)) <= 5); + xlo = std::nextafter(xlo, std::numeric_limits::max()); + xhi = std::nextafter(xhi, std::numeric_limits::lowest()); + } } } From 5cbfdb554abbf5f7f7f1fe034b6345bc5335f39f Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 11:22:36 -0400 Subject: [PATCH 096/104] Fix invalid read in cubic Hermite. [CI SKIP] --- doc/interpolators/cubic_hermite.qbk | 10 ++ .../math/interpolators/cubic_hermite.hpp | 17 +++- .../detail/cubic_hermite_detail.hpp | 29 +++++- test/cubic_hermite_test.cpp | 93 ++++++++++++++++--- test/daubechies_scaling_test.cpp | 8 ++ test/daubechies_wavelet_test.cpp | 21 +++++ 6 files changed, 164 insertions(+), 14 deletions(-) diff --git a/doc/interpolators/cubic_hermite.qbk b/doc/interpolators/cubic_hermite.qbk index 7b78e621e..347659c58 100644 --- a/doc/interpolators/cubic_hermite.qbk +++ b/doc/interpolators/cubic_hermite.qbk @@ -29,6 +29,8 @@ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) void push_back(Real x, Real y, Real dydx); + std::pair domain() const; + friend std::ostream& operator<<(std::ostream & os, const cubic_hermite & m); }; @@ -42,6 +44,8 @@ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) inline Real operator()(Real x) const; inline Real prime(Real x) const; + + std::pair domain() const; }; @@ -56,6 +60,8 @@ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) inline Real operator()(Real x) const; inline Real prime(Real x) const; + + std::pair domain() const; }; } // namespaces @@ -124,6 +130,10 @@ For the "array of structs" version: auto ch = cardinal_cubic_hermite_aos(std::move(data), x0, dx); +For a quick sanity check, we can call `ch.domain()`: + + auto [x_min, x_max] = ch.domain(); + [heading Performance] Google benchmark was used to evaluate the performance. diff --git a/include/boost/math/interpolators/cubic_hermite.hpp b/include/boost/math/interpolators/cubic_hermite.hpp index f7a0bed07..c568510ec 100644 --- a/include/boost/math/interpolators/cubic_hermite.hpp +++ b/include/boost/math/interpolators/cubic_hermite.hpp @@ -39,11 +39,16 @@ public: impl_->push_back(x, y, dydx); } - int64_t bytes() + int64_t bytes() const { return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; @@ -78,6 +83,11 @@ public: return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; @@ -114,6 +124,11 @@ public: return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; diff --git a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp index 94c250ff3..6365e1ab6 100644 --- a/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp @@ -155,6 +155,11 @@ public: return 3*x_.size()*sizeof(Real) + 3*sizeof(x_); } + std::pair domain() const + { + return {x_.front(), x_.back()}; + } + RandomAccessContainer x_; RandomAccessContainer y_; RandomAccessContainer dydx_; @@ -273,6 +278,12 @@ public: return 2*y_.size()*sizeof(Real) + 2*sizeof(y_) + 2*sizeof(Real); } + std::pair domain() const + { + Real xf = x0_ + (y_.size()-1)/inv_dx_; + return {x0_, xf}; + } + private: RandomAccessContainer y_; @@ -336,6 +347,12 @@ public: auto i = static_cast(ii); Real t = s - ii; + // If we had infinite precision, this would never happen. + // But we don't have infinite precision. + if (t == 0) + { + return dat_[i][0]; + } Real y0 = dat_[i][0]; Real y1 = dat_[i+1][0]; Real dy0 = dat_[i][1]; @@ -359,7 +376,7 @@ public: } if (x == xf) { - return dat_.back()[1]; + return dat_.back()[1]*inv_dx_; } return this->unchecked_prime(x); } @@ -371,6 +388,10 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; + if (t == 0) + { + return dat_[i][1]*inv_dx_; + } Real y0 = dat_[i][0]; Real dy0 = dat_[i][1]; Real y1 = dat_[i+1][0]; @@ -391,6 +412,12 @@ public: return dat_.size()*dat_[0].size()*sizeof(Real) + sizeof(dat_) + 2*sizeof(Real); } + std::pair domain() const + { + Real xf = x0_ + (dat_.size()-1)/inv_dx_; + return {x0_, xf}; + } + private: RandomAccessContainer dat_; diff --git a/test/cubic_hermite_test.cpp b/test/cubic_hermite_test.cpp index 6d75c2883..4c9cfc003 100644 --- a/test/cubic_hermite_test.cpp +++ b/test/cubic_hermite_test.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #ifdef BOOST_HAS_FLOAT128 #include @@ -27,10 +28,11 @@ using boost::math::interpolators::cardinal_cubic_hermite_aos; template void test_constant() { - - std::vector x{0,1,2,3, 9, 22, 81}; + Real x0 = 0; + std::vector x{x0,1,2,3, 9, 22, 81}; std::vector y(x.size()); - for (auto & t : y) { + for (auto & t : y) + { t = 7; } @@ -40,9 +42,19 @@ void test_constant() auto dydx_copy = dydx; auto hermite_spline = cubic_hermite(std::move(x_copy), std::move(y_copy), std::move(dydx_copy)); - for (Real t = x[0]; t <= x.back(); t += 0.25) { - CHECK_ULP_CLOSE(Real(7), hermite_spline(t), 2); - CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(t), 2); + // Now check the boundaries: + Real tlo = x.front(); + Real thi = x.back(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(7), hermite_spline(tlo), 2); + CHECK_ULP_CLOSE(Real(7), hermite_spline(thi), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(thi), 2); + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); } boost::circular_buffer x_buf(x.size()); @@ -226,10 +238,34 @@ void test_cardinal_constant() auto hermite_spline_aos = cardinal_cubic_hermite_aos(std::move(data), x0, dx); for (Real t = x0; t <= x0 + 24*dx; t += 0.25) { - CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(t), 2); - CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(t), 2); + if (!CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(t), 2)) { + std::cerr << " Wrong evaluation at t = " << t << "\n"; + } + if (!CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(t), 2)) { + std::cerr << " Wrong evaluation at t = " << t << "\n"; + } } - + + // Now check the boundaries: + Real tlo = x0; + Real thi = x0 + (25-1)*dx; + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(7), hermite_spline(tlo), 2); + CHECK_ULP_CLOSE(Real(7), hermite_spline(thi), 2); + CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(tlo), 2); + CHECK_ULP_CLOSE(Real(7), hermite_spline_aos(thi), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline.prime(thi), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), hermite_spline_aos.prime(thi), 2); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } + } @@ -278,6 +314,25 @@ void test_cardinal_linear() CHECK_ULP_CLOSE(Real(1), hermite_spline_aos.prime(t), 0); } + Real tlo = x0; + Real thi = x0 + (45-1)*dx; + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(tlo), hermite_spline(tlo), 2); + CHECK_ULP_CLOSE(Real(thi), hermite_spline(thi), 2); + CHECK_ULP_CLOSE(Real(1), hermite_spline.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(1), hermite_spline.prime(thi), 2); + CHECK_ULP_CLOSE(Real(tlo), hermite_spline_aos(tlo), 2); + CHECK_ULP_CLOSE(Real(thi), hermite_spline_aos(thi), 2); + CHECK_ULP_CLOSE(Real(1), hermite_spline_aos.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(1), hermite_spline_aos.prime(thi), 2); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } + } @@ -318,6 +373,23 @@ void test_cardinal_quadratic() CHECK_ULP_CLOSE(t, saos.prime(t), 70); } + auto [tlo, thi] = s.domain(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(tlo*tlo/2), s(tlo), 3); + CHECK_ULP_CLOSE(Real(thi*thi/2), s(thi), 3); + CHECK_ULP_CLOSE(Real(tlo), s.prime(tlo), 3); + CHECK_ULP_CLOSE(Real(thi), s.prime(thi), 3); + CHECK_ULP_CLOSE(Real(tlo*tlo/2), saos(tlo), 3); + CHECK_ULP_CLOSE(Real(thi*thi/2), saos(thi), 3); + CHECK_ULP_CLOSE(Real(tlo), saos.prime(tlo), 3); + CHECK_ULP_CLOSE(Real(thi), saos.prime(thi), 3); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } } @@ -359,8 +431,6 @@ int main() test_cardinal_quadratic(); test_cardinal_interpolation_condition(); - - test_constant(); test_linear(); test_quadratic(); @@ -370,7 +440,6 @@ int main() test_cardinal_quadratic(); test_cardinal_interpolation_condition(); - test_constant(); test_linear(); test_quadratic(); diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index 668cd609c..ceb43da88 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -427,6 +427,14 @@ void test_quadratures() { CHECK_ULP_CLOSE(Real(0), phi(xlo), 0); CHECK_ULP_CLOSE(Real(0), phi(xhi), 0); + if constexpr (p > 2) { + assert(abs(phi.prime(xlo)) <= 5); + assert(abs(phi.prime(xhi)) <= 5); + if constexpr (p > 5) { + assert(abs(phi.double_prime(xlo)) <= 5); + assert(abs(phi.double_prime(xhi)) <= 5); + } + } xlo = std::nextafter(xlo, std::numeric_limits::lowest()); xhi = std::nextafter(xhi, std::numeric_limits::max()); } diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp index f1614d10e..384b02664 100644 --- a/test/daubechies_wavelet_test.cpp +++ b/test/daubechies_wavelet_test.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -81,6 +82,15 @@ void test_quadratures() { CHECK_ULP_CLOSE(Real(0), psi(xlo), 0); CHECK_ULP_CLOSE(Real(0), psi(xhi), 0); + if constexpr (p > 2) + { + CHECK_ULP_CLOSE(Real(0), psi.prime(xlo), 0); + CHECK_ULP_CLOSE(Real(0), psi.prime(xhi), 0); + if constexpr (p >= 6) { + CHECK_ULP_CLOSE(Real(0), psi.double_prime(xlo), 0); + CHECK_ULP_CLOSE(Real(0), psi.double_prime(xhi), 0); + } + } xlo = std::nextafter(xlo, std::numeric_limits::lowest()); xhi = std::nextafter(xhi, std::numeric_limits::max()); } @@ -88,8 +98,19 @@ void test_quadratures() xlo = a; xhi = b; for (int i = 0; i < samples; ++i) { + std::cout << std::setprecision(std::numeric_limits::max_digits10); assert(abs(psi(xlo)) <= 5); assert(abs(psi(xhi)) <= 5); + if constexpr (p > 2) + { + assert(abs(psi.prime(xlo)) <= 5); + assert(abs(psi.prime(xhi)) <= 5); + if constexpr (p >= 6) + { + assert(abs(psi.double_prime(xlo)) <= 5); + assert(abs(psi.double_prime(xhi)) <= 5); + } + } xlo = std::nextafter(xlo, std::numeric_limits::max()); xhi = std::nextafter(xhi, std::numeric_limits::lowest()); } From 2af33f272596a771ffbdd2c03097bc81f8c58b2e Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 12:07:05 -0400 Subject: [PATCH 097/104] Fix quintic hermite interpolation [CI SKIP] --- doc/interpolators/quintic_hermite.qbk | 6 ++ .../detail/quintic_hermite_detail.hpp | 45 +++++++++++++-- .../math/interpolators/quintic_hermite.hpp | 15 +++++ test/cubic_hermite_test.cpp | 2 +- test/quintic_hermite_test.cpp | 57 +++++++++++++++++++ 5 files changed, 119 insertions(+), 6 deletions(-) diff --git a/doc/interpolators/quintic_hermite.qbk b/doc/interpolators/quintic_hermite.qbk index dafea2810..a2d550d4e 100644 --- a/doc/interpolators/quintic_hermite.qbk +++ b/doc/interpolators/quintic_hermite.qbk @@ -25,6 +25,8 @@ public: inline Real double_prime(Real x) const; + std::pair domain() const; + friend std::ostream& operator<<(std::ostream & os, const quintic_hermite & m); void push_back(Real x, Real y, Real dydx, Real d2ydx2); @@ -41,6 +43,8 @@ public: inline Real prime(Real x) const; inline Real double_prime(Real x) const; + + std::pair domain() const; }; template @@ -56,6 +60,8 @@ public: inline Real double_prime(Real x) const; + std::pair domain() const; + } `` diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 26a4e7498..28f04daca 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -188,6 +188,11 @@ public: return 4*x_.size()*sizeof(x_); } + std::pair domain() const + { + return {x_.front(), x_.back()}; + } + private: RandomAccessContainer x_; RandomAccessContainer y_; @@ -257,7 +262,10 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; - + if (t == 0) + { + return y_[i]; + } Real y0 = y_[i]; Real y1 = y_[i+1]; Real dy0 = dy_[i]; @@ -301,7 +309,10 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; - + if (t == 0) + { + return dy_[i]*inv_dx_; + } Real y0 = y_[i]; Real y1 = y_[i+1]; Real dy0 = dy_[i]; @@ -341,7 +352,10 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; - + if (t==0) + { + return d2y_[i]*2*inv_dx_*inv_dx_; + } Real y0 = y_[i]; Real y1 = y_[i+1]; @@ -361,6 +375,12 @@ public: return 3*y_.size()*sizeof(Real) + 2*sizeof(Real); } + std::pair domain() const + { + Real xf = x0_ + (y_.size()-1)/inv_dx_; + return {x0_, xf}; + } + private: RandomAccessContainer y_; RandomAccessContainer dy_; @@ -425,6 +445,10 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; + if (t == 0) + { + return data_[i][0]; + } Real y0 = data_[i][0]; Real dy0 = data_[i][1]; @@ -466,6 +490,10 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; + if (t == 0) + { + return data_[i][1]*inv_dx_; + } Real y0 = data_[i][0]; @@ -507,8 +535,9 @@ public: Real ii = floor(s); auto i = static_cast(ii); Real t = s - ii; - - + if (t == 0) { + return data_[i][2]*2*inv_dx_*inv_dx_; + } Real y0 = data_[i][0]; Real dy0 = data_[i][1]; Real d2y0 = data_[i][2]; @@ -527,6 +556,12 @@ public: return data_.size()*data_[0].size()*sizeof(Real) + 2*sizeof(Real); } + std::pair domain() const + { + Real xf = x0_ + (data_.size()-1)/inv_dx_; + return {x0_, xf}; + } + private: RandomAccessContainer data_; Real x0_; diff --git a/include/boost/math/interpolators/quintic_hermite.hpp b/include/boost/math/interpolators/quintic_hermite.hpp index beb7238f1..627f02d28 100644 --- a/include/boost/math/interpolators/quintic_hermite.hpp +++ b/include/boost/math/interpolators/quintic_hermite.hpp @@ -46,6 +46,11 @@ public: return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; @@ -76,6 +81,11 @@ public: return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; @@ -108,6 +118,11 @@ public: { return impl_->bytes() + sizeof(impl_); } + + std::pair domain() const + { + return impl_->domain(); + } private: std::shared_ptr> impl_; }; diff --git a/test/cubic_hermite_test.cpp b/test/cubic_hermite_test.cpp index 4c9cfc003..0a23fb166 100644 --- a/test/cubic_hermite_test.cpp +++ b/test/cubic_hermite_test.cpp @@ -246,7 +246,7 @@ void test_cardinal_constant() } } - // Now check the boundaries: + // Now check the boundaries: Real tlo = x0; Real thi = x0 + (25-1)*dx; int samples = 5000; diff --git a/test/quintic_hermite_test.cpp b/test/quintic_hermite_test.cpp index a668e42e1..05299bae3 100644 --- a/test/quintic_hermite_test.cpp +++ b/test/quintic_hermite_test.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #ifdef BOOST_HAS_FLOAT128 #include @@ -287,6 +288,25 @@ void test_cardinal_constant() CHECK_ULP_CLOSE(Real(0), qh_aos.prime(t), 24); CHECK_ULP_CLOSE(Real(0), qh_aos.double_prime(t), 24); } + + // Now check the boundaries: + auto [tlo, thi] = qh.domain(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(7), qh(tlo), 2); + CHECK_ULP_CLOSE(Real(7), qh(thi), 2); + CHECK_ULP_CLOSE(Real(7), qh_aos(tlo), 2); + CHECK_ULP_CLOSE(Real(7), qh_aos(thi), 2); + CHECK_ULP_CLOSE(Real(0), qh.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), qh.prime(thi), 2); + CHECK_ULP_CLOSE(Real(0), qh_aos.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), qh_aos.prime(thi), 2); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } } @@ -322,6 +342,24 @@ void test_cardinal_linear() CHECK_ULP_CLOSE(Real(0), qh_aos.double_prime(t), 2); } + // Now check the boundaries: + auto [tlo, thi] = qh.domain(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(tlo), qh(tlo), 2); + CHECK_ULP_CLOSE(Real(thi), qh(thi), 2); + CHECK_ULP_CLOSE(Real(tlo), qh_aos(tlo), 2); + CHECK_ULP_CLOSE(Real(thi), qh_aos(thi), 2); + CHECK_ULP_CLOSE(Real(1), qh.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(1), qh.prime(thi), 128); + CHECK_ULP_CLOSE(Real(1), qh_aos.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(1), qh_aos.prime(thi), 128); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } } template @@ -366,6 +404,25 @@ void test_cardinal_quadratic() CHECK_ULP_CLOSE(t, qh_aos.prime(t), 12); CHECK_ULP_CLOSE(Real(1), qh_aos.double_prime(t), 64); } + + // Now check the boundaries: + auto [tlo, thi] = qh.domain(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(tlo*tlo/2, qh(tlo), 16); + CHECK_ULP_CLOSE(thi*thi/2, qh(thi), 16); + CHECK_ULP_CLOSE(tlo*tlo/2, qh_aos(tlo), 16); + CHECK_ULP_CLOSE(thi*thi/2, qh_aos(thi), 16); + CHECK_ULP_CLOSE(tlo, qh.prime(tlo), 16); + CHECK_ULP_CLOSE(thi, qh.prime(thi), 64); + CHECK_ULP_CLOSE(tlo, qh_aos.prime(tlo), 16); + CHECK_ULP_CLOSE(thi, qh_aos.prime(thi), 64); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } } template From fb26bc0cf19e3f645f4cac595f2ca1d6003d3588 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 13:03:48 -0400 Subject: [PATCH 098/104] Fix septic hermite evaluation. --- .../detail/septic_hermite_detail.hpp | 39 ++++++++++++++- .../math/interpolators/septic_hermite.hpp | 15 ++++++ test/septic_hermite_test.cpp | 48 +++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 659cf019d..44843c6bb 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -184,6 +184,11 @@ public: return 5*x_.size()*sizeof(Real) + 5*sizeof(x_); } + std::pair domain() const + { + return {x_.front(), x_.back()}; + } + private: RandomAccessContainer x_; RandomAccessContainer y_; @@ -260,6 +265,9 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; + if (t == 0) { + return y_[i]; + } // See: // http://seisweb.usask.ca/classes/GEOL481/2017/Labs/interpolation_utilities_matlab/shermite.m Real t2 = t*t; @@ -314,6 +322,10 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; + if (t==0) + { + return dy_[i]/inv_dx_; + } Real y0 = y_[i]; Real y1 = y_[i+1]; @@ -366,6 +378,10 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; + if (t==0) + { + return d2y_[i]*2*inv_dx_*inv_dx_; + } Real y0 = y_[i]; Real y1 = y_[i+1]; @@ -398,6 +414,11 @@ public: return 4*y_.size()*sizeof(Real) + 2*sizeof(Real) + 4*sizeof(y_); } + std::pair domain() const + { + return {x0_, x0_ + (y_.size()-1)/inv_dx_}; + } + private: RandomAccessContainer y_; RandomAccessContainer dy_; @@ -456,6 +477,10 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; + if (t==0) + { + return data_[i][0]; + } Real t2 = t*t; Real t3 = t2*t; Real t4 = t3*t; @@ -508,6 +533,10 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; + if (t == 0) + { + return data_[i][1]*inv_dx_; + } Real y0 = data_[i][0]; Real y1 = data_[i+1][0]; @@ -560,7 +589,10 @@ public: Real ii = floor(s3); auto i = static_cast(ii); Real t = s3 - ii; - + if (t == 0) + { + return data_[i][2]*2*inv_dx_*inv_dx_; + } Real y0 = data_[i][0]; Real y1 = data_[i+1][0]; Real dy0 = data_[i][1]; @@ -592,6 +624,11 @@ public: return data_.size()*data_[0].size()*sizeof(Real) + 2*sizeof(Real) + sizeof(data_); } + std::pair domain() const + { + return {x0_, x0_ + (data_.size() -1)/inv_dx_}; + } + private: RandomAccessContainer data_; Real x0_; diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp index 81d33291f..b5acbc764 100644 --- a/include/boost/math/interpolators/septic_hermite.hpp +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -44,6 +44,11 @@ public: return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; @@ -79,6 +84,11 @@ public: return impl_->bytes() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; @@ -113,6 +123,11 @@ public: return impl_.size() + sizeof(impl_); } + std::pair domain() const + { + return impl_->domain(); + } + private: std::shared_ptr> impl_; }; diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index 6b7265327..944a3d0c4 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #ifdef BOOST_HAS_FLOAT128 #include using boost::multiprecision::float128; @@ -74,6 +75,29 @@ void test_constant() CHECK_ULP_CLOSE(Real(0), csh_aos.double_prime(t), 24); } + // Now check the boundaries: + auto [tlo, thi] = csh.domain(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(7), csh(tlo), 2); + CHECK_ULP_CLOSE(Real(7), csh(thi), 2); + CHECK_ULP_CLOSE(Real(7), csh_aos(tlo), 2); + CHECK_ULP_CLOSE(Real(7), csh_aos(thi), 2); + CHECK_ULP_CLOSE(Real(0), csh.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), csh.prime(thi), 2); + CHECK_ULP_CLOSE(Real(0), csh_aos.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), csh_aos.prime(thi), 2); + CHECK_ULP_CLOSE(Real(0), csh.double_prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), csh.double_prime(thi), 2); + CHECK_ULP_CLOSE(Real(0), csh_aos.double_prime(tlo), 2); + CHECK_ULP_CLOSE(Real(0), csh_aos.double_prime(thi), 2); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } + } @@ -151,6 +175,30 @@ void test_linear() CHECK_ULP_CLOSE(Real(1), csh_aos.prime(t), 15); CHECK_ULP_CLOSE(Real(0), csh_aos.double_prime(t), 15); } + + // Now check the boundaries: + auto [tlo, thi] = csh.domain(); + int samples = 5000; + int i = 0; + while (i++ < samples) + { + CHECK_ULP_CLOSE(Real(tlo), csh(tlo), 2); + CHECK_ULP_CLOSE(Real(thi), csh(thi), 2); + CHECK_ULP_CLOSE(Real(tlo), csh_aos(tlo), 2); + CHECK_ULP_CLOSE(Real(thi), csh_aos(thi), 2); + CHECK_ULP_CLOSE(Real(1), csh.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(1), csh.prime(thi), 500); + CHECK_ULP_CLOSE(Real(1), csh_aos.prime(tlo), 2); + CHECK_ULP_CLOSE(Real(1), csh_aos.prime(thi), 500); + CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(tlo), std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(thi), 400*std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(tlo), std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(thi), 400*std::numeric_limits::epsilon()); + + tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); + thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); + } + } template From 3a34827563a9c282246577db898d2607c87527bb Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 13:10:37 -0400 Subject: [PATCH 099/104] Copyright statements. [CI SKIP] --- .../math/interpolators/detail/quintic_hermite_detail.hpp | 6 ++++++ .../math/interpolators/detail/septic_hermite_detail.hpp | 6 ++++++ include/boost/math/interpolators/quintic_hermite.hpp | 7 +++++++ include/boost/math/interpolators/septic_hermite.hpp | 6 ++++++ 4 files changed, 25 insertions(+) diff --git a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp index 28f04daca..49ef7b0ec 100644 --- a/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp @@ -1,3 +1,9 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ #ifndef BOOST_MATH_INTERPOLATORS_DETAIL_QUINTIC_HERMITE_DETAIL_HPP #define BOOST_MATH_INTERPOLATORS_DETAIL_QUINTIC_HERMITE_DETAIL_HPP #include diff --git a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp index 44843c6bb..ad69bf530 100644 --- a/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +++ b/include/boost/math/interpolators/detail/septic_hermite_detail.hpp @@ -1,3 +1,9 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ #ifndef BOOST_MATH_INTERPOLATORS_DETAIL_SEPTIC_HERMITE_DETAIL_HPP #define BOOST_MATH_INTERPOLATORS_DETAIL_SEPTIC_HERMITE_DETAIL_HPP #include diff --git a/include/boost/math/interpolators/quintic_hermite.hpp b/include/boost/math/interpolators/quintic_hermite.hpp index 627f02d28..bc54d84c2 100644 --- a/include/boost/math/interpolators/quintic_hermite.hpp +++ b/include/boost/math/interpolators/quintic_hermite.hpp @@ -1,3 +1,10 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + #ifndef BOOST_MATH_INTERPOLATORS_QUINTIC_HERMITE_HPP #define BOOST_MATH_INTERPOLATORS_QUINTIC_HERMITE_HPP #include diff --git a/include/boost/math/interpolators/septic_hermite.hpp b/include/boost/math/interpolators/septic_hermite.hpp index b5acbc764..67ed476a1 100644 --- a/include/boost/math/interpolators/septic_hermite.hpp +++ b/include/boost/math/interpolators/septic_hermite.hpp @@ -1,3 +1,9 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ #ifndef BOOST_MATH_INTERPOLATORS_SEPTIC_HERMITE_HPP #define BOOST_MATH_INTERPOLATORS_SEPTIC_HERMITE_HPP #include From 0f7cb981887b3ade399eef0ab764eb47e847f8af Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 17:15:22 -0400 Subject: [PATCH 100/104] Tests for wavelet transform [CI SKIP] --- .../math/quadrature/wavelet_transforms.hpp | 25 ++---- test/wavelet_transform_test.cpp | 82 +++++++++++++++++++ 2 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 test/wavelet_transform_test.cpp diff --git a/include/boost/math/quadrature/wavelet_transforms.hpp b/include/boost/math/quadrature/wavelet_transforms.hpp index ef8a12c71..40987d30a 100644 --- a/include/boost/math/quadrature/wavelet_transforms.hpp +++ b/include/boost/math/quadrature/wavelet_transforms.hpp @@ -19,27 +19,20 @@ public: int max_refinements = 12) : f_{f}, psi_(grid_refinements), tol_{tol}, max_refinements_{max_refinements} {} + daubechies_wavelet_transform(F f, boost::math::daubechies_wavelet wavelet, Real tol = boost::math::tools::root_epsilon(), + int max_refinements = 12) : f_{f}, psi_{wavelet}, tol_{tol}, max_refinements_{max_refinements} + {} + auto operator()(Real s, Real t)->decltype(std::declval()(std::declval())) const { using std::sqrt; using std::abs; using boost::math::quadrature::trapezoidal; - - // -p + 1 < (x-t)/s < p so if s > 0 then s(1-p) + t < x < sp + t - // if s < 0, then - // -sp + s >= x-t >= sp <=> sp + t < x < s(1-p) + t - Real a = -s*p + s + t; - Real b = s*p + t; - if (s < 0) - { - std::swap(a, b); - } - if (s == 0) - { - return std::numeric_limits::quiet_NaN(); - } - - return trapezoidal(f_, a, b, tol_, max_refinements_)/sqrt(abs(s)); + auto g = [&] (Real u) { + return f_(s*u+t)*psi_(u); + }; + auto [a,b] = psi_.support(); + return sqrt(abs(s))*trapezoidal(g, a, b, tol_, max_refinements_); } private: diff --git a/test/wavelet_transform_test.cpp b/test/wavelet_transform_test.cpp new file mode 100644 index 000000000..24c555462 --- /dev/null +++ b/test/wavelet_transform_test.cpp @@ -0,0 +1,82 @@ +/* + * Copyright Nick Thompson, 2020 + * Use, modification and distribution are subject to the + * Boost Software License, Version 1.0. (See accompanying file + * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ + +#include "math_unit_test.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef BOOST_HAS_FLOAT128 +#include +using boost::multiprecision::float128; +#endif + + +using boost::math::constants::pi; +using boost::math::constants::root_two; +using boost::math::quadrature::daubechies_wavelet_transform; + +template +void test_wavelet_transform() +{ + std::cout << "Testing wavelet transform of " << p << " vanishing moment Daubechies wavelet on type " << boost::core::demangle(typeid(Real).name()) << "\n"; + auto psi = boost::math::daubechies_wavelet(); + + auto abs_psi = [&psi](Real x) { + return abs(psi(x)); + }; + auto [a, b] = psi.support(); + auto psil1 = boost::math::quadrature::trapezoidal(abs_psi, a, b); + std::cout << "L1 norm of psi = " << psil1 << "\n"; + auto [x_min, psi_min] = boost::math::tools::brent_find_minima(psi, a, b, std::numeric_limits::digits10); + std::cout << "Minimum value is " << psi_min << " which occurs at x = " << x_min << "\n"; + auto neg_psi = [&](Real x) { return -psi(x); }; + auto [x_max, neg_psi_max] = boost::math::tools::brent_find_minima(neg_psi, a, b, std::numeric_limits::digits10); + std::cout << "Maximum value of psi is " << -neg_psi_max << "\n"; + Real psi_sup_norm = std::max(abs(psi_min), std::abs(neg_psi_max)); + std::cout << "psi sup norm = " << psi_sup_norm << "\n"; + // An even function: + auto f = [](Real x) { + return std::exp(-abs(x))*std::cos(10*x); + }; + Real fmax = 1; + + + auto Wf = daubechies_wavelet_transform(f, psi); + for (double s = 0; s < 10; s += 0.01) + { + Real w1 = Wf(s, 0.0); + Real w2 = Wf(-s, 0.0); + // Since f is an even function, we get w1 = w2: + CHECK_ULP_CLOSE(w1, w2, 12); + // Integral inequality: + Real r1 = sqrt(abs(s))*fmax*psil1; + //std::cout << "|w| = " << abs(w1) << ", ||f||_infty||psi||_1 = " << r1 << "\n"; + if(abs(w1) > r1) + { + std::cerr << " Integral inequality | int fg| <= ||f||_infty ||g||_infty is violated.\n"; + } + } + +} + +int main() +{ + test_wavelet_transform(); + /*boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i) { + test_wavelet_transform(); + });*/ + return boost::math::test::report_errors(); +} From 2c85c9898253bc050d03f3a6ffc54c3be144b993 Mon Sep 17 00:00:00 2001 From: Nick Date: Sun, 22 Mar 2020 20:15:10 -0400 Subject: [PATCH 101/104] Document wavelet transform. Submit (mildly) failing unit test for transforms. [CI SKIP] --- ...aubechies_wavelet_transform_definition.svg | 2 + doc/graphs/wavelet_transform_definition.svg | 2 + doc/math.qbk | 1 + doc/quadrature/wavelet_transforms.qbk | 56 +++++++++++++ .../math/quadrature/wavelet_transforms.hpp | 4 +- test/wavelet_transform_test.cpp | 80 ++++++++++++++----- 6 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 doc/graphs/daubechies_wavelet_transform_definition.svg create mode 100644 doc/graphs/wavelet_transform_definition.svg create mode 100644 doc/quadrature/wavelet_transforms.qbk diff --git a/doc/graphs/daubechies_wavelet_transform_definition.svg b/doc/graphs/daubechies_wavelet_transform_definition.svg new file mode 100644 index 000000000..c4f787e37 --- /dev/null +++ b/doc/graphs/daubechies_wavelet_transform_definition.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/doc/graphs/wavelet_transform_definition.svg b/doc/graphs/wavelet_transform_definition.svg new file mode 100644 index 000000000..67a8a73cf --- /dev/null +++ b/doc/graphs/wavelet_transform_definition.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/doc/math.qbk b/doc/math.qbk index e7cde1c5c..4358b71da 100644 --- a/doc/math.qbk +++ b/doc/math.qbk @@ -727,6 +727,7 @@ and as a CD ISBN 0-9504833-2-X 978-0-9504833-2-0, Classification 519.2-dc22. [include quadrature/double_exponential.qbk] [include quadrature/ooura_fourier_integrals.qbk] [include quadrature/naive_monte_carlo.qbk] +[include quadrature/wavelet_transforms.qbk] [include differentiation/numerical_differentiation.qbk] [include differentiation/autodiff.qbk] [include differentiation/lanczos_smoothing.qbk] diff --git a/doc/quadrature/wavelet_transforms.qbk b/doc/quadrature/wavelet_transforms.qbk new file mode 100644 index 000000000..563a7379e --- /dev/null +++ b/doc/quadrature/wavelet_transforms.qbk @@ -0,0 +1,56 @@ +[/ +Copyright (c) 2019 Nick Thompson +Copyright (c) 2019 Paul A. Bristow +Use, modification and distribution are subject to the +Boost Software License, Version 1.0. (See accompanying file +LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +] + +[section:wavelet_transforms Wavelet Transforms] + +[heading Synopsis] + +``` + #include + + namespace boost::math::quadrature { + + template + class daubechies_wavelet_transform + { + public: + daubechies_wavelet_transform(F f, int grid_refinements = -1, Real tol = 100*std::numeric_limits::epsilon(), + int max_refinements = 12) {} + + daubechies_wavelet_transform(F f, boost::math::daubechies_wavelet wavelet, Real tol = 100*std::numeric_limits::epsilon(), + int max_refinements = 12); + + auto operator()(Real s, Real t)->decltype(std::declval()(std::declval())) const; + + }; + + } +``` + +Wavelet transforms compute + +[$../graphs/wavelet_transform_definition.svg] + +For compactly supported Daubechies wavelets, the bounds can always be taken as finite, and we have + +[$../graphs/daubechies_wavelet_transform_definition.svg] + +which gives definies the /s=0/ case. + +A basic usage is + + auto psi = daubechies_wavelet(); + auto f = [](double x) { + return sin(2/x); + }; + auto Wf = daubechies_wavelet_transform(f, psi); + + auto z = Wf(0.8, 7.2); + +[endsect] [/section:wavelet_transforms] + diff --git a/include/boost/math/quadrature/wavelet_transforms.hpp b/include/boost/math/quadrature/wavelet_transforms.hpp index 40987d30a..927d12885 100644 --- a/include/boost/math/quadrature/wavelet_transforms.hpp +++ b/include/boost/math/quadrature/wavelet_transforms.hpp @@ -15,11 +15,11 @@ template class daubechies_wavelet_transform { public: - daubechies_wavelet_transform(F f, int grid_refinements = -1, Real tol = boost::math::tools::root_epsilon(), + daubechies_wavelet_transform(F f, int grid_refinements = -1, Real tol = 100*std::numeric_limits::epsilon(), int max_refinements = 12) : f_{f}, psi_(grid_refinements), tol_{tol}, max_refinements_{max_refinements} {} - daubechies_wavelet_transform(F f, boost::math::daubechies_wavelet wavelet, Real tol = boost::math::tools::root_epsilon(), + daubechies_wavelet_transform(F f, boost::math::daubechies_wavelet wavelet, Real tol = 100*std::numeric_limits::epsilon(), int max_refinements = 12) : f_{f}, psi_{wavelet}, tol_{tol}, max_refinements_{max_refinements} {} diff --git a/test/wavelet_transform_test.cpp b/test/wavelet_transform_test.cpp index 24c555462..25ed881dc 100644 --- a/test/wavelet_transform_test.cpp +++ b/test/wavelet_transform_test.cpp @@ -27,6 +27,7 @@ using boost::multiprecision::float128; using boost::math::constants::pi; using boost::math::constants::root_two; using boost::math::quadrature::daubechies_wavelet_transform; +using boost::math::quadrature::trapezoidal; template void test_wavelet_transform() @@ -38,21 +39,26 @@ void test_wavelet_transform() return abs(psi(x)); }; auto [a, b] = psi.support(); - auto psil1 = boost::math::quadrature::trapezoidal(abs_psi, a, b); - std::cout << "L1 norm of psi = " << psil1 << "\n"; - auto [x_min, psi_min] = boost::math::tools::brent_find_minima(psi, a, b, std::numeric_limits::digits10); - std::cout << "Minimum value is " << psi_min << " which occurs at x = " << x_min << "\n"; - auto neg_psi = [&](Real x) { return -psi(x); }; - auto [x_max, neg_psi_max] = boost::math::tools::brent_find_minima(neg_psi, a, b, std::numeric_limits::digits10); - std::cout << "Maximum value of psi is " << -neg_psi_max << "\n"; - Real psi_sup_norm = std::max(abs(psi_min), std::abs(neg_psi_max)); + auto psil1 = trapezoidal(abs_psi, a, b); + Real psi_sup_norm = 0; + for (double x = a; x < b; x += 0.0001) + { + Real y = psi(x); + if (std::abs(y) > psi_sup_norm) + { + psi_sup_norm = std::abs(y); + } + } std::cout << "psi sup norm = " << psi_sup_norm << "\n"; // An even function: auto f = [](Real x) { - return std::exp(-abs(x))*std::cos(10*x); + return std::exp(-abs(x)); }; Real fmax = 1; - + Real fl2 = 1; + Real fl1 = 2; + std::cout << "||f||_1 = " << fl1 << "\n"; + std::cout << "||f||_2 = " << fl2 << "\n"; auto Wf = daubechies_wavelet_transform(f, psi); for (double s = 0; s < 10; s += 0.01) @@ -61,22 +67,58 @@ void test_wavelet_transform() Real w2 = Wf(-s, 0.0); // Since f is an even function, we get w1 = w2: CHECK_ULP_CLOSE(w1, w2, 12); - // Integral inequality: - Real r1 = sqrt(abs(s))*fmax*psil1; - //std::cout << "|w| = " << abs(w1) << ", ||f||_infty||psi||_1 = " << r1 << "\n"; - if(abs(w1) > r1) + } + + // The wavelet transform with respect to Daubechies wavelets + for (double s = -10; s < 10; s += 0.1) + { + for (double t = -10; t < 10; t+= 0.1) { - std::cerr << " Integral inequality | int fg| <= ||f||_infty ||g||_infty is violated.\n"; + Real w = Wf(s, t); + // Integral inequality: + Real r1 = sqrt(abs(s))*fmax*psil1; + if(abs(w) > r1) + { + std::cerr << " Integral inequality | int fg| <= ||f||_infty ||psi||_1 is violated.\n"; + } + if (s != 0) + { + Real r2 = fl1*psi_sup_norm/sqrt(abs(s)); + if(abs(w) > r2) + { + std::cerr << " Integral inequality | int fg| <= ||f||_1 ||psi||_infty/sqrt(|s|) is violated.\n"; + std::cerr << " Violation: " << abs(w) << " !<= " << r2 << "\n"; + } + Real r3 = fmax*psil1/sqrt(abs(s)); + if(abs(w) > r3) + { + std::cerr << " Integral inequality | int fg| <= ||f||_infty ||psi||_1/sqrt(|s|) is violated.\n"; + std::cerr << " Computed = " << abs(w) << ", expected " << r3 << "\n"; + } + } + if (abs(w) > fl2) + { + std::cerr << " Integral inequality |f psi_s,t| <= ||f||_2 ||psi||2 violated.\n"; + } + Real r4 = sqrt(abs(s))*fl1*psi_sup_norm; + if (abs(w) > r4) + { + std::cerr << " Integral inequality |W[f](s,t)| <= sqrt(|s|)||f||_1 ||psi||_infty is violated.\n"; + } + Real r5 = sqrt(abs(s))*fmax*psil1; + if (abs(w) > r5) + { + std::cerr << " Integral inequality |W[f](s,t)| <= sqrt(|s|)||f||_infty ||psi||_1 is violated.\n"; + } + } } - } int main() { - test_wavelet_transform(); - /*boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i) { + boost::hana::for_each(std::make_index_sequence<17>(), [&](auto i) { test_wavelet_transform(); - });*/ + }); return boost::math::test::report_errors(); } From 9ba1ce6f009a14e22296cffef97540b5049ba419 Mon Sep 17 00:00:00 2001 From: Nick Date: Mon, 23 Mar 2020 07:39:57 -0400 Subject: [PATCH 102/104] Improve docs and loosen tolerances for Windows. --- doc/graphs/scalogram_sin1t_light.png | Bin 0 -> 1070185 bytes doc/quadrature/wavelet_transforms.qbk | 18 ++++++++++++------ test/septic_hermite_test.cpp | 12 ++++++------ 3 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 doc/graphs/scalogram_sin1t_light.png diff --git a/doc/graphs/scalogram_sin1t_light.png b/doc/graphs/scalogram_sin1t_light.png new file mode 100644 index 0000000000000000000000000000000000000000..72487d31e6e73c6fadb73442981d21d7382950d9 GIT binary patch literal 1070185 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 zì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

0Pg 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%0A@M=Y)r;TG{`IPLI=?Rd+Ae)P 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

&Dq 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

>8W9p|&xK5pBiU#g(gTk%Vw^y2k9A=ZXI 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 A6W?#AeweWFADp}-w6i*CiT&dpU+%oT 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%0De(lxl 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

    cZ*6m&D&o z_n&JGjeezAb(_tuW&MV=%`9SkvU@yPA0?`p$X!{#Y1-5VgXzK-E;w?=Up())%ihcB z_PT#w0XKN+9O~Gou)Zt%+PIEss`mpH_qFLCxBl;Coj!k#kC%Z2W1MVDn&64vGh0M= zFU!5?%C%H4bE@3^iIXQim~xLhA@jbp)EvH^*N;W_D6L^mI%NDL_M`usQ~Wa@I{w>| zoydD*U)jHPX6GB+?rB8b+?)3)?&{lA?+a%V!v7eZUjONCTj*Djef@`pS=T2=SJ*Y0 z)Xn?nb8~jU_S03H=4t=Wx0}6bqIG}r@0B&D_PpAC<$bB3n^i7Ho&NRG?7(xsBiZDO zR(Su^(`HKhxvt&n$6{rhB~#)*22KC;B5dON=~o=@Oy05miPeiuZ==qXiq6q+jQjc0 zUHsmv$M=$M?>N8Z?VaddyvwavmgeSae_txfkmmYJs#LS+mf4(l<{MA%)BgS1&Z~Zf z@16bIsuNP4u8rF{eVuu0u47W&Yzdz`tD~o-KHkb7qgbeTrNQ*FCXsJe3#y6^#_0^`0#DvA#YhbjFqAZUzfaEVflVCSW6A zqtm0lw9jajMVPhCanaSD&Kmz)9`02CIzw8zDfu0*ebJ0+f4iI8D%9jyC$}eioLzQW zTroO(Kg*AbdFP`RT$jkU6_|Hp(G^FF7YS!qf93vGX?x}M{>gV(@)t_H5#6YkXxnV_ zI&)`2X1PYG%;9ETjpZ>@OecLkaJ}Mm-W@@iYZcdaCM4gU@cO{kNq4@zY$%m_9ldtu zzC~M8ukF})cwb@rNtf-Oi!%8>-JP~YJ(umcE$2<9vg+$qQ@5(r2{tN9oT+t-oF2Yg z`TB)lLH9SRvAK82tl#@F>c4Zyg)2Xs&u+S3`LTFr^Kr&duf2Be%QXJ+Py1>mUo+FZ zdGq}Trn@SVny(-K5<8p6KE+nfS+ZoxDY-=1H>~S6URiMbTS?`UDRPci`93B53FIu( zmFs-)YDU9`8|@kIr(Zb#$aj9qoW$+lO_qqy6DZ1_zx0j!{@TkHpC7Wz2IuXmD4Tuf zd@mz6>-&u^r#Gx#nX_`ATe?S-*S1TWmOf$W_jz+XYCBW(uCpI6&RqY8e_qj(YX8pS z6<3dy<*fK?_%gwMf?dcfTeZZ$+YCOomgT(EUHIY0e9NW%cH93ivEApcZc@2H{&jEqeD|$OWEarC- zw^H!h;KzwjJnyd*hHqkKTvX^;6q7bl+69iCCq*@UP4KmPN<^ zUi@)o=Ul55#T@k_iq~s&XJ5J@A%9WrjdOi(=�x=1ETVJJ-JSPdvE%o{g1T=G)Ne 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ϦZ90;TiINvm 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

    Z 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

    YQ8vCY|9b%w@0OJ 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

    K)nc!@RYKh0cqW4woRkjlQ!R;$5cqsg@ z<~nEb4CmG7T^OHU(7lzEo6*|0@8Rkv4n?lvjd9l`co`4PD*Lf=!t^bgyMCYfxwW-z zX4r$J4bw{cZrE;FCGQ-6Wvkm->vNtj4p|z1aV=rv-pP38!1P4@w-al`V?R7!a-Zpt z>m&2T-aGMm4#~N$>c1{B@}90z?%#DQRrq4b&OhGw7xg}KIQ;MMK8qz6^0HSoOwX

    aR_VR=r~Pb)&?OS3XY;nyq^C zv-R2%wMg9snVI^P*410@*XySw-#+oT`o-~T`>5G(U*D12{IX2H|NY~@f{&^5*Ub+* zSJ#ty<>vFFWsfD^*1wMVy1ce5{>kfo;cpFP|CS#vefI0ux~GM4{hxOh{8g#kU%&f@ z<;!{VO8)2>F7w4m5HZo9!Gqkl&jVL`K6tIsdaj_JDL%cT*l0@#`eFtPQPyp?B6d?b z51lNOTk-BUL*?b>7lpO2zkUtP`_%e0D5lQg?)u4_a#=M(G8hF8mGx{sduN-Z)yw4N zYa|cN`6Q%s>A~!d-H!2E(>J#5Vfn)HBE^G!f0Lh>0$Zj)w!s0$w15Sw3ubMaC;02r z+mOerWm$C?^*?&KhY2qbR|wwuR{I&p1@G-PxeWW<8l2W&<2LZTwZQ*CjO$_zW}TyF z9-8y}1@AjI7+}U#RZ&w(v`o`7x^|O)Th3gDumh0@qmmFQ$yVY8E zYIomL^HrOUt+{sky~&@J^@87CJ%3q0`J1Z13a{gGXRW61;Hf?P%Iemn+jUz@_qL^9 z+H))Eu-wF&FwN@yAkNW2A*0-$3I6w{Bm~)%JRjJ=-dMkACBN<9&{jaTqCV&MYQx{$BsHm8B(f z+Sk-w*zc|5&41W7FXn#L-D$=9PTmjl`OBQWe)CgC*)I#6_%$o$)EXUo{LJIoq{n%c z>=QU-UMvu7w%PZx+fa{r=7xQX7wD&bico z@*H@*ZlhkwPHw41juun$9AYxO?Ps~g7KC5j*cf+d-Ho5uOp-3lTNqvA@wbji(o_18 z>wW{pvdriEGR)t!%3ad_#r34sjP+lVOv6PExwQ=~-z3ZC@Xnw8uRP)Duex(RuUy2R ze!SXusp05FajS>t3nWrY%q7$}uWEhPzv;0?ZO!`Sa(5Efs${>svpDUqS9e|arL8@I z^=ohU*Y7_hzuNC_9mBsH>yI6&IOvcXeZA!Pu>;{7pYK*V{{GjD#o_b!sMpT^-fs3X z+O)T8(to!d@s(F+8U20XmsDfToL3x|ocS-yI^8KbJML7L*4x8UZntk1?Z33+x}0s+ zt@+|P#|nQp#7X5RzHV8(f2rlFm75Ib?R&q%C|mmck-+4#m*3~TPwMVHe|p`w#dkfA z_y5~852Hy_?#C+hV^{IpYNq(-CHwR3ZRXUyGM20KTYP>4MpH>a)M6f!H~+-`=b4{Z zJhm&j`?T@%j|;UuNip}UYGnlZU$wKp-6rw)rF>jKr$O zH%{lN<^0n1@lF8ij^q!otMb-xbsW#-hzy)=xvI)IIN0(`K41>4LwE?zkjqTx2%ivQT*C%P_57 z7hgNA5xmPVjqifM1??@5w)SOp8!Zt2^-^@^jS$(F-?fd_E;dPCC(&Fs`<&==w%n4s zDZ*Fw{I6n7YbeU#FgR`*7`iL$Z zy-uayv?0_vyZ-&1{JoNg@0s51+~s%WmfL+ErK@G#l$4_5j0zT8*!dtK%7MW(Sv z+uqg2^GEb1|EADa`P%+{IlFe=6-!tDUiV(=qUX1_D#_)&`fo8CH|Lff z2>$n^{88AiX6x&V-XB@*`yl)9v-%Is@^e5}P^MJRo&)5I^{8-*D|At-0 zi@g=M*_ZwQmjD0ng;`fIiaQV1cQ#x(RSh*#Tyvf%zFF4(vo_|j^QWo%-aWK>``GF? z`&YT`C+`R8)XliNe&VLwM%gKg*0PIBq|Yu~)4t|-lmlbsdV|gcCT69FA2nWhZ?8KV z@j#VPbK>u3`p>@J;#J!6BRk-ZOX`E}ACZ?UPETL3Zdcqv%Lbpq*;5}ZZ75~YWHe(e zcikQTw&Jj(i);Ojc=5NF4F8zSQb}6TF>z7n&B%^#AyJGcbQt1UZ)x2M&@-=}dV4R! z-jd0oJx|57<6fUQ8{f9?0;g`tZ}ESjeP$;8T-$3*&o1g)W+!}U@ZNbOrQ`*DY6^rhT^b_{ z>I>_Qr(Z=F)?KkwzGPIQ@%M$*^r!1H1D~%hJs-cQd*6)Y=ucG}E?TZWrWY;#JvhCm zE`Cb;uOG8R_rK{X`xO5CQ$)>cbIFBSHh+DeM}|Ac-wtot{?(*fvo@UR+o8?>z8#I5 zQgrsU+>7!>eV5+tpQ*jgdBN;&{l$fITAq2ItomO2x4ypT@gD!P`#!JUnb}ugazwZ0Y|2uvkl~I@6?cb9*8?*GXWBqsfbzSzZg3G+UqNR-JJjT=1XV!Ul+b`&i}x9nOW{b!%N@%s>@%lZQmEV z;JWViJ4Utlzt`R`d0&0M`rzSj%RmQ_&6fMR!u{m;)$xB{y_{_Ka`L147yADnpHcId zuQ^}6eE#q9_$@1~Z(}JWcU;!k@V4<&W=Fvt_RX{9URf{un7H%y-2T^5>u(pGn_i=L z^x}X2fc5L2G8%mmXl7*lWqZ!fHmz@g&53u(r895vO!>mV$-rm!h4UC^`W4=13Enpo z`f5&yzjaVi)m=MRF6n7~q4cjLTizh1L!Ew&v0L2lZV%@CBeX;$S2RrMLuf9;-VJ;E z!bOj1%bEH!`0hHY`D@Cm34$-zWR*<)daR?$cxv7TrUWKGp*^C^i_iGR9f&){{O(e2 z{KfOyvaBU*r!-E_=r0uXZ9LSFr?EKnV)uy)JsrHazbp{1z0}RRz&9m>?TYH%MZV@` zt?c)wu-zyTS6CnMopt}Nz*}q*YzpGJi`%MP({4!oU}7tNBs$ZNp^(jaN%ZpmYc8^~ z%H?zCe4TE3`FND2v#LAu_MbeN?8&z#Ek027sq%W9xAZw59mQ+@vm3Tagq;%o&}I5* z_d}bNvCnnh?2dW7aiVVR)$|(^ZtdB+ZrhCfXeA|~S(fp-t1IogU5@`c95;VmU!VHU zhut$jJe(op-`QX{{X+fskg%{fd->(g=BWJt8?=<~fsghq$NRsEr{0sh|L<9A?rrwp z(}L%$J)auw^Tzq9uJ)Vb3A?>N&HJ`(@43A1`5EiZzsjt?>lk;wXZDZ1UoyY!mpJ?& zIrWd->^uB>n4Z?P-UP;Y+ZOk#M30yjwA9(lw-@k14y_)`|>-OG0$85g& z`=WIl898fob2J35fzDWc`D}LnynX*(@2{)6^H|Qj7Ie_p7tlHPzwX}ud-r9ke)Y{S z^S!@gb~YUSn*%*o&NR`&gzxL+s! z@3^Z`jV);kYi{^*;it*;`Z?@d+t{`pHMFyl&plqc_WE%_2jS0$YpSL{dLds@ovZu4 zv5hZn!TrZ?E+@;hzOJ34Cp>-OBta#~{9i$~ZyFsLW`4K`TC=r8?nWU`t>2s#i~>$f zs~DLUzPc`S>H7Uou9CBtM(?X}4sG0<_Tu#}4)+7+4*AA!?CMzbNX5~AgIFz7h|;9n z`kGEpqs%uW3m2{Q2N<4f` z>On`+OnWXirw;d73q7xL*6z4_dV39H{>LbH2K~F=L@hT6Z;$4j!X16HrEfPweAB|D zKFKddEw>EsHo2WlcYogbwMfs&`e01x@*qChi29lp((hh1>c14Qi&&rEV?0IWzhOMT z(!$1b_R5QVUY!@KeR^z@1^dPHiq#nr2?jR}3a_%;|HybfJ-=+}xu=zf?(JV~m!32K z!}a%z&qwAz-a6Ip&0+7W3$KgE#>m&N&gFUTR<@Dd&@;Q=Y*N|Awv61Xf%`Y8f3;e_ zZiN(IpC)uiI`o&*WHe)cSYZ zzn9LB{B3(TU1poQ2Xsu4fBd)9c(c1DmwmOv?p*jf-wfpTZ zZ$H1Y*3Imfg{Ji~UxkxGUs(6JXefVCZCJwW_AIiSZC>^~QI6#{HTnmx*EoxA5L&Om za*pvzl;pBL7F1mDGjj(W^ULb~#LT`8-RG`@r-PC+!DoUtG_Y z=I4G8n)i$86;slzh06qgF}-0blWNpAF>ZMrZp}4A`p9FS1)>&G3z@3|*)tx6=`+W( zJ?@qetK+Yc(g>>Qhm|3V(%zVR%6BmyJNbx?p3hd_wlsVLjDWk zl}nQ^_LTk-?YI4M^lXMza^bQH(Pa-d%(!-eJDqL6ZNnB85y1)PLf71W?p<~CR;gds z?rW0UG7d>T)=5}D)kV_xLR4;SWZ8{N;ya%O@BIsQ+rvG-|TQN8^reE;L9^wqyMR(y^OwmdfZ!|FZPs@H~xD{uZ5>b7;&xyLcH zOBeNuPGqUM+W7R#nc8a+Wt;TuY{Yau_x@Yep8s2m?QYE6y*cd*-bO!e(?4%)vR&&| zp4YW4@4wfr+jiEj=2`Ur2lY>vi@QCR@&2f@_2&N|n|HgTc789J|FiGb^xS=ZMrE__ zzwyRc#TAk;o5{cCtG;jf{};b=jBl=dzo)?1TK5_E=R?n6X8}l=c|FL!ai@I$@4J^l zr+vPZeP7X@_n_*Dvb<%)lvj`C|5x0s`8mCQ=Ns|fwqxe|f1bU(SpM&eAIBHHUKaoF zY5Y97KM&ZC+y7Ym$M~W_Qt{W=`p?^5*5CQma+dApWQ>-@N(ZeCOxAOj$*5OO*!^<{CjPgfsMTp;Wy@^DgJ|7QRGn&6Ly?Giw$eWX(=90p>@QXy z^h^wodo1yd@yV2Lm(pgxZrs;U$&|+ww5k4Xm}>7L{h~?N@1I&@eL!ceCCd(;Jx6Yp z7Kb13Ziu^kHgw<0uIPO{rm-SFN)Nm69cghpm0WtKsMY@N57A=IqOOyym4g1E%i8mn z1irnvKcdCs&b!brom;)F8P+r9MB4Aa_t9y~>u35eL*qVoggKP(E^{`nar-UwAyxKb zrjP6D2=N1A@-KtG2(Yx9U255OVbSGPcN&gGE?hrH{reuyirhETvizLq^>@cbw!hm|U*Ei4(D(bw?+c zn|j-2b$!on+qG33`==fIz3!dy`E9nAr_OsGlY46Y8%r%|;njHj|E<%@`Ty^@tEY48 z+3P(8#<#B(q`&ZfkbUE+{qN28vq48Sb06FF^;-0DcDoOa%|}i4exCdO%G-GT%9Gy9 z#P>X46<(ieqqX<@-uG9v75=~I|CjOW&-wpGS2#e)KwXC8LE}A+--{RMKQoTM zu>N|76XWz}v#0WCF~00suX5$A&qlZX(*!m+Z?ET!&=Q#3s9M7CX^~#6QkUGXs7nuv z4tTh>Ur_SkKJ0zxooL*(xNwaG%>@Py>UrxPiD}=`bK^U+^!A!0nW}FW#Mf6IkuR7W z|JuW5-_z68?m8;3eAllqzv1l={LyB{@@%sdMW4}bXZ|N3Yq-@7q zdof>P&Fr$Z88=Q8Zu0@VEQzL3-bMX4m&Wy>55?^h_Mz8dcTr`ei!pJwP&sP)temr z`0%w%`3I+ORj=9F(Qzf^$EwK-|Gqu6>}EJ`WM=kiyD!n}{wCkQbpN2C*sFiLR}_8C z-fj3@Chz^$!rL>VkMFzt`_;CK{ofD#{rg%v)0*p>)L+B2mAz$`B>Xe?R^9(A_r~b; z4*uOe8_#+kyXF22ORYGkjp_f(ssC$tU1zrccx2rOe?;&98olf0 zYh(M*#>?OTz4w0ZyXyPD`NS@l+|J$ZyT0bB_VRR_$C8`=e#`&=&2;v@hu?1J&j+8w z|7)ZCZ^K?t+SJ|AJ$v7~`v1TEuk3$by)XUO75~3iUdnyn;cj1&{PS)8kIygb?LMxQ z{=HclTcS*eZOr9getm6uzU9foam`$hbG-S#RL?Hdef{-b)%Q*Eld64n%>x>>4+~A) z{_j+Ng>9aEdfA+~c>bwBwiY^=-?+G)^Ow<*X8E566+w)XXKj7iJ6+%N!+(KmL>2}cAw7UuP@3{TgexS;iNMc@tmTo;&r0 zc0l+Oheku@s8`Ap^ukW;`pU_>sD5eO?-}#I`JSx(H#af7&Rex=`|tAWzh+J>ZD;#c zQu;;Y!qRQG^n1M`YYo?ZzxrUI)T+eAb@HYQ>b|D0&tKltH+#}`>4_ev)54ESTv)XK zX4qe|gK<9&Y`b|pVp8qb`u|r1B$bdbar6?lX7a-_`rJ_pIl!Z*`mIVAh2PGBrP>?*B0Pa;@B_ z_5N?(?I|!;k9%QRKH@sir~BOhIrsj`=pAg6Up_k8eK|Y+ z_pO(!_q|%ZEdS@U{F(E9-+A7rru}vM{=aX98E%4#&X*7Q>v!aR0r!6XKDPh&_zUQ+ zhs*E(|9kImey`&37tqy4zd(0H{%BvQ`+riX?f?1qe;&WQKJQP@)XGhhFkS1QwP7}s zH~;!_>7939?clF(6r6VHQuFtVc`>J}YGn#b_Wqy0G%onG@-?}d54~1js^?sPZ0Kz) zwETMd1(yJ)EzI2#zZUUEZ@oHu=7j7$FHe`9*~%&BnEFq=oc}dPLYLd!T}R%AtkG|f zaZuemt6zE*O9i79>zR<#Hv;zSJQ+S@9Aqj#M6HB;o1ZdqM0*O_uWWyE z!Q1Le^xlTYEb5#&%x}2*Uo`lgI^CPG>#6sy7CVO0HPXJxe9bM|#pP3lj`ApaGP}96 z?>>1pJ@50{!Yf~+j-Rm1-27_qlt-iJzdpTYtN)94Pxia}Jl-Gt zrMl`ghJG zeJEdajAh@hvusbQ&Su9M+kRc?f0g~i>qD*Fb6quylCMkO`_T51d*1`@W$XXmT7NZL z_Igj&;io^s`{w^zIe%8%mqp^f{gr2uOO$WyeOJ0ZjgRHq@%lfKsJQw+!`;`Jl@0>73>TaE<(``wG#~%E+0t$OMFuba89f)o7w|nc+uN7_EmVP> zS!JHMS<^hZA4+iz%hqnMDSSPhVZ9{N<7KOuYNyuJnLbo?^gffx`z6a=Y8T567p1go zN7jb2&G6cL=R;`TGOg{woM}maMN62Hn7#>JVZ9(y%iz(9Cth(hxphz4-L!~z zzg|4Py#HLG>*fzvg$j>Ht-bhm`Xas$N39wkEm~i5Vda#+x4iS1v!e=y4(0Omc}?bO zGL+xEsQIDlxtiOTHKMyUR?YpodG!`+G^DbHs0 z(`)Lp{n*vkX1@IX)b9Bu?Je4sYqU?PT%BndV?KM`z5jBNv6~O>ySCQQS7z(Ad(+>=%}dU__jTK|#U77eg`V7-|J&!;UpyO7LLPW&eQ4FM z`1gggzv@WmG7JAZXFA2IczOIDtiF8&+*^_V_fVeeTh$@qc?-g==862M`v3dB{*2f9 z|3B$3kN-6>j3wSO=0|Gn_V*#5KeW&eLq{QdfC-z2+F-uf&4@2%C#uG{>s z%zk?ld5gLOY-+E-hV@wc)8n6w`gbYI@$_d$tUv$pZO|+EW!1L2<|&PfxokKpBp{Ty5>&COja5<>lGFMe9)A}gZ&?LS0mbR?+1(pRV54^M2 zZ?9pjk#&=d$ZVN$!DV}-r*Te2X>#L|3r?wD7xM0!mci3tVfEfKa7PB)2Ujfz;RWGq zOzjxr8{(!g9=yQCu!emf%NfR#t#5xs9d~`O`rZfAdD5>_-j)d8QoOa$_0ET*l8XGY z&#ouNt(U&QaFC_(s8q-_y^Meot*Ql<2EmN8)|}@0B3!#yFYxLvp4{H;HHKlYr^Ok6 zXyyOPc)GRjQ>Slu+TVY&-=e;xJ}bX#nL9`F`IK1w+@Q@hZzKd-JI7cfyS{5GZQHCtw6@Gl#&v$1-Ar7X9H#-A;J+2?pTX0E)? z9{;m@jy?Oe&+_+%DQ-7b-w%JYHT~}a$MpG`vwJ@G{M!(n_4&u8``6dyR9>l^esj3j~B&hP^-jSnlH+g4XS(2cK9x?XN#{`vO)zqhNT@9QC_t?m21uDv|_ z-WRpKmnPocUH5>!?!l4uB{iVgm%CN3*IrJq|CWCGJ*em^H$HcC`kp7MOlRy~Z??<+ zHEaFPSugi}-~0Z{MERc+FN4lw*ZjY{{+Ie*rb#hR_y6Ag^4I*|^=a&pUYI>~1yKu8 z*1oC@wR1fEer>q%;NXvhI?ZWIe;nT?C=v1L^7fyM)%*EQ^?4ikush#a*ZcYa`}c?Y z`@QdJZFa0~%x_6H5ok60we9YgRD0F=jcRAb;}t|0yj9jObcipU9Lk!@wI?KRWmbbw zK(K?yo@0Rt!L22~qW3XO&$D1y9^tB0Q#|$An=J)BcixEx9_0-c%y;l)Fgp+v?BIP# z@fM2)V`XRt=Zckg!diX5w6ov+BP#XFwAJ-6lkv~1eGCbWGOf8^&t6g4svUjMXUq04 z?P*iCe$$v9z2|~X!qN==58)Si9&q#4Zob}__hZ$D@Gp`-v;-n{-t}Hz)MNLJ#doLS z*-RT_EAu(5YZb56?f94Fez53T*PQ4BNrG+rc=(FAXEo}7JDi@w`K!q0$(o&W{7hz^ z7fP3VvDTq*O{LyuzP-05{=3k=IrNuz?7u^9&xPhEhM#(p%J=Nu*8=;uwNA<}ub8{t zeEWyjf%}@zuBZdkpKBLS+bMcLF#hi>Lsw~alaN*KYSPxq*UGK0UH$Fb#wBZizd5}@ ze4owyTCx8%>(zcoSM<9Hl{spo4)_g z)61Ys{9b1ISI^>Gdi(dEOG~{kzmEI93)FJ_QL_K{UH^vbf$K~E9N2x&Hn#5l?`7Wa zEA#g-J=pc5{mSdd^5M$;^{)F4sK1i0zI=E2`906~{$7c#k?WwfVKLKfxuW+kl8(Mv z!r$M>K27ezdY?<7$9`OYJ@+Hu(SM1%uV4Dqv4&l_O5xCB9{Y-(G*)v|G9=pPVL z&eWG@wqz@7kT^DbUrO+CgZ})DpXMlkaP2wsX!cANrHyJ2R21f(Xe|B}y)WYNrPrLN zSIa6tVyJRh?P2?2Y1NOs>`9#FAshE`Jz;pX;ophK)0cWfcOC5xx4smg%Y7k)LG4=1 zfpwBUgr0~pUWohRI(vh<#!cxQ7vOUnK-$ z8j23YvwmQjvv}>DJ~dv=_WiFLUgl}+V!lxjcB`^bK~QJo zZGre}-srr^$!lNSI;KBmX6*AV-=#K`}TU>+b@g6_h!7d+BCU7 zsH-Gh=#g%I<>@cl`#)(5w|@nVOHQj>Uwt>b>i+M0=Cwz|YmOfIT5|u_+WS_vFC6)W zmVDKm|4B3Z)1J?B-_NQ0bG$xgeSFQY%k%Xda?Y+WE4X_HJTdgKzkbi3qU7r{`1tvk zhwphLdU<>8?d`t&wJ)5P>;Ju^FPc#{|M#8rPwj^J^}lc5elGv-TkhpAo7c<4rrKib ztUs6{dgI%H-xk5KXWLJDZ~UJ7`(L-i{|9$pXH@<<9K`P-ab&^$$7v@P{RwuF=Z=zc zDu{8gQqH;bU>(=`A7$FNLiw&&nD0^EpZHpOc8_Dvh3O5m4cJncE`8+nWr%+}ZT*KB zhoxNAt#^59k4hZaz^1R+<$A;0kaLsf#V_VH3p?!&#EJg6v^Hed-PQL}j`qf_G5@u5 zC-+>20~(tv_P!Eq&{12|W555_M59|jmaPwpXWh?o-r$Djp)dCq3E!%?Z&E0pU(J<%bM@OotB85YSLK)4S^wQr zTdBEj-+z-+|K9i3)_ncF32%o;d+C9<_dh(n>|T53_=`ykbMvSC?m7RXr*r$&gJxTD`n{ z@9Wsh!t*|`Tx|6=+w$?3YtH)a`lS^Ix#J9KZ!NFAHA|D_>EwA|mb?VrcL$pH@wdC) z)7G~C*Vb^~^_AZ~w_RJa3^Q9!;EK^??WYf`d<%- zZ?AbdweO79jnyv#@;++`OkSveY^wADk;Kbx`vi|>re)vQ!FKk`18>I1Oz*mEukdCp zl(bxMCzfH)qBXbozS51?J`nyTem_&)*#qJec%L6iU+wFcAx*Bt;4dn-ny2#;{NfX*!>GHJkWTMox1MBb%(`O zZBLf7ow)ga^6_uEYqEVZo?SVYP z%YQ}k_wMF*GxXlNmo9wcbvW+c?7DM{Pu+XJ_|3Fm{zhdd&1f?-ttC?|qw_ zKU?l&hr7@B{r~?ikN>qae%7=+#?5O#|NlGd{_MD~x#x>aKVw-F6x6tS$$>!r!{0d{ zXW3=Mbyerw{_6Pehr_(m3f(p%7N3v=27O2@V>Tq&(-(Iz@`?}z(vJDI~ zFPvCkdWZGbqc*KaDYlbeeES-El;XPY!ZnFHjtKnZ~=04k*^L$^~omVr=_q1Jzt`(y*B7&#sd^+l-vZRUyv!{BojKcKRCPl5II+4sIIdntLo;@Fo7?KVp)|9!Uq z|M}&{{@OPs(|6x-U7!7D*ZSX9dyPJ=&98m^W!CjQX}^BX|NoP-;>}9`+EsSnuFL3% z{5voI@8g$j|GHyN{$^M*&IGO)Ue>-Ui+%Y#;jbTlmiS&(yZyxP_RqC%^qBp>JZM?S z`OEfN1FP|+ePZ1WlNfxp&M+*v+^o(vH)FB?0?!7arfEA)YM$D{nHFg0EciD!zKhd4 zVb+P?(fcBr<7_29GO9DadBLWA>SJK^-lyGmj`0WL6W3q=;2Q68CGXcEdxaT!Usf6Z zoTlHPdW~z3%et>t>2K@)Ca~`Ra_dmU^0y58cy@nXU*y7H^5Jayo@EbR4WTzjwPhRkIIU*hV!a^d73&`>oeMGt!e12C zei4`Db#Qg~s?aD_x|}QWw3QS8HT4JFCtiP8aOY9!$|o5~5qumyxA$Jy^kmLt4d%|H zA-foT%$JD9zWDr8d-d|UTg7EFKJN;w-1GGG*N>(Pdp=e=S)a12Z#wWQ^2oX3E%$x5 ze0^&a@#EEFxzn>5^xs^#^p~l7k?;PE7kvK;3Yn?A`sM5PZrAUOa4qi(?%E)Kf7vIuxBPeC;eRU0{l@Wqo|wJi2U%JLr~Uum z__AK^TfSfFsm}+_&N=0De&b}&3bgmN@2l^B5w`y*{AHh4IAt_tt)T>px@!PD}BP}u=%riu^ZUw8b}PD?(;Ru`FnIF2E~!DGwoZCXih z^L_}uQC+}Y@S5%Brntl285>Fti)UYX^JDF6`<_pibmNaa-@$X_qS>;tZc(e&IcsK? ze#&w>TqNGGonem>`v$4xAGk`VH~X{h(~zEE?Na^aan3^C-vW~hrfreGbZ+xG%ZXby$6fc2 zzTCdoUD)Ko8;{jR(@OMSJfG9jd#?A@t)-XbzP&Q$5&QeMrdZ{+_r1$@*WWjmX68Og zeSf@)zeaFoeeszU9?5&^`seEZlB#H#aAooR&cfuPoGsP8+Z>tI|MPC-{$IPX_qf-6 zs})-X3+L|I+PX}ofBSxI)@t3gd)rpp7Tl~{@4bHEFKgeG=4W3&C|q|h+%$08%DZO& ze!u>e`Q%=EZEfZKZ?f%wJ&(zy?~}o@aN&UL!UNO)9`g75UU_1_-PD!mnazu}xNVR7 z3H`XWq0%9${@3z)tG)leuAd+GbyYa$mtRl(|2=uh$X{^)y!^51T=BfkZ0WZDf1aQJ z@7MbORd3t$m+b(p)8+sFf&Vh7V13PO@onY&Un?(z)>phd$Y1y2%Z7H_oLwJ}Nt?TD zzW1kZf7RzN-SI!azLvd-b$+IxU8CTN^XJ;8T~YkYj?cLMdbjIc`#t4vbk}cabKq(a zV;0k$pV+L1=*x!{hRWWZ?V*VJ;3sq$F%o?xM82U@y}`cUl|QpTas_A z-v4yLnxxO0)N ziDdrjNo|Sj4_e$lMMp|GTJu(Ge(3*N*mI4Omm%es>cw_7_KW2VSC(2a+^KP%757-; z!R1@ovai?1AMmf+n#_OJaN>qVtPi*~{L&M+KOB7<*M8?uXrul$KiLPXYfin5ThnFy z=(_cyPKM=L48JUYo;m)BWm3Vti_Eb#WfwRfaP#tTGacP%#^97GksTzzt;RzCYMW)) zsh&>$lRLGzOK)8~>M3=#N>iUX?p5-&8Ev1I-JiW^$$r0t|63+sx%YDGr`xN|N?&-* z+440z`LExL%R#ZTOqbt%JZJU!s!;n&S8~r~%YXCQx_AD0yV)mo*3J(5WS5t{Dd|G! zui~d^U)}_-pMPt2-TTJ3)1OKIP27DYO@8VA^>h7h?w?(|r}x%-W3k(l`|g+T+k$yO zPRN74kO%gAKkfJbUiCnIUKB_A+}V~}TjvG4bJong+*^J9{+`@l^4o15&T*Tch^;^V zR;%EO^OxB0x~+0S`bTeX*FDJLo&7@oiS@T>-yK}pgSY%UW%gx)i+wv|Tdn|?154re z3)i(cSVh9r4#{t0o5f>fsBW0cRLWAxy5Y##kUKY6?p(FIs5XIphj!kVMf0PZHn9G< zHHRy0QMe7;d8ULTx@o%>=InTQ`oQ%3)t6=^>o!f2;O1bvvc&9K_yK)`nQ@1ij!%_d z!v`LVB0t*!|@nEd3<+jD#Cy?54of63f`cSwa$Dphzf#`&?%Rhk zEC0WpI_>Vh+G`u~7{adZox9(v^PJb!C0`dtzSb}PR`zc5-u!Q`o=bmy`~R9~|LXhS zJheCHdwbW%U)%`Z1OK40Q#;l7L0&zf&N|5tCWU)_{6@6A2C^l#>5Tfh8~yKl2T zmJx-`s}4M_fBW=ud;Oi`^R9j{S{EFq(6~NW>`T_p-_!s9{`OM*-{J6>wJ(e2VQs40 zidwvC{I%}gx@*p_4ex#Zby4s;|5w@a)7mA98x94q8Mx_I=kR;?7<1iSk;C(>v)Y;Id%d`&2G^ibzGj-GL9cw+GcC2!W z-?wqqnxzQ_``)g;^XX|QljhZ}47#jqO!r+X-m3h*REeI^LS>&_9a(;N~th^VVxi%zxUPTqK3E^8V|T1^xodf$A79f?#`>D zuVtN?6%0(6|2;Zp+*tJW4nv*i@`!ooMYZ2^O4-8wO^_u)_&goF~29cTkh<>SI)7u zSNT6Dx?l3te<)@jJD;cQPgeT**K?*{J*RAT%`qzU{#xI^OE+$9-T!QN|I%}pA8dN@ zS>nu|`+p~F%-Me}=}r0GxsPu(%&VRBulDeb``=wF=j4BB{~2`qfm+V7X^*d$U(7yP zz5Zv=|83hQ_uPGE{u{J52`zD0@N?OGyt?1y?%&1li{+foO87fAvh4G7JYs$5Xzu%p z=U*NB_;`Hsku%WZ_^?k{#M$ z!8ZMc_zID~2fUaLyjXugXlJ8--r8Lc9e#LMX#LbXAbv~QYZuEA6$bTd7oImH3M!Vh zAMo9pCw*Y4;l@Ra8`c-{ls4K1vBY+ny-{YE{LSoJ!R5DMFG>Y|#V~xcvIyb(p!#Ap zQ~Z?Eyzz{_oDA9@WO6fZGRGfD)_7XP5M8x4c}?v4qbyUL+jl(mwww^ox_63uI{Wjfu;;#C??f0Bb_0C$x$vd>(&e}U~GlyBu?R(iVTd&TL{Gr76 zdz0VBH^~R%TrMn^+c)XL#mo(S)~_GL)P_p0Z95ye;j_&>_xtazo==~Dl(~3k$)7vV zSAK6OtG&fmZCd-9!SBorxB4&oTi5nWNB4!>_xUZp_WNATrH{YQP5*{%sgf(}zt8Xg zyehf8*Y1%{+cd*iMpmI8yODm?$w_cFGbs+4!CRk8JsA>j<_JhZMJo;j z&)iwVTyrsWi_V4F`9HMQm+BmtzF-GeeQeL1+n4m(;ts@Ldo95G`0?%YRS!-}MHr{0 zuT^>7D0WS;%;cQI71qkaIxk7v62Fpn$#b`^`@G0_@!hNd@waotZ?=l5%$I+jwPf!x z=evbf{!9Ju-Va(g%XM~I&(aI$Dj&&AD`N4D{+cfTD&6e+!)E_26GfJu_uKOQq*?9l zAjy2cj0GXFk{34dT19kUbC3S2sIdOmhPl6U>eCX}JKE28&NhB^(oSco@7uj=|F8R& z`+M5&{l9njeVz9v%l_8fl0Pr>Ut>!E>8$%6e*b^Hk8(J6k zUAte%-DYf(-s)vzzaf}^DTA%x^atwYHgTyrh%q4UM&3!nQ`aeJns{+5E92gGMhy>7)+ z-0Js7PHDMpbz}0x)pD~UlOHX3bLaEwg};l|m~7;$e^zyU-PUvaMKhzW-}}F9i94%S z=(^80&5O+xR%W$vN?Cm^+`0Dr@vlGLH?e-d&vW~0)E2uEZd*?~b?skQ?QTndJ9O{! zP5oSz-gJugy*r1|3B@zKTGdU$>Yj+w`2PkGl9<5zY=M@`|pQ>Un|d7Jc;Di zevG9Ttsr{Cu`yQe(EA6=8s&H2kUO5%Q@rMJv9yjs6GNTD{UQZ%_Ao`UhVEfx7q%K6FN>F@ME5q!F+`= zsp}KtdbOTUT3?Rx`aPYtis>_pg^<}}-T0{K8GQ}g^rrr3v}MuT2wJ`MMd`i$op(!T z?|ZeHv)z=*U~1{qI|32wm2V{(s~uLoSNy5z!V#%ehE^XF`5PZeeOOYoT++q6?jr>6rJ-j0}R`fPiP*ph2ve`ilhUK%g8vHs)C*Rj=WLKi5SMU}sNT_67RnSRZb z%`N(iGWWe+sUdi2;mWWC{j;%ez25&a7qpPv7qnN->fEf{3yn`=YV(p+OM8AVjs9x? z@9sf=`}xN&_-$Grbo+hv%lswZ56ug6(3g50x3y0EMbw1?P)i{Cx!cjDH{53Xex00Q z^lEoz-_mcBdtyIL&&5(E#CUVrJoT?j-}UdogQ%#Wb*bGvAd-0ot499POk~^?sL)${hJymNI`EOM{aAe^6 zz}e8EIE6u}>c#2xvrjVhZe>M zp72d;yH)f1de3Esb2{odYYLew*n*qQzg;{W_eS!!>-^h0UvlrgrETEc&dpf*a%lf7zuQyE5FFGwgA-r~} zvcg@p2i&^mdoN8C)qUxn-Pn67Qc=$_c4OVSGnalQ#y$nLI167#HZrZ=dri)`ZT%E@%FqwOKD&YkwlW!}fLe{10jfqfRzOV|FIP%h=2*fQf(=Z1?#ed^2E z60SO@d7L)eE9Uy&sO;T*(@kMtZuUQ0DYb3qqKn)5n(x%N|JoLN%G*J7*4NA{E8F)T zyMKSh!xyLP%(w2IU!%EgUw!n?9aTD+yL0F5d#{pQZ6Aqwxk1Q-sIUju?Emh~uB_a- z4b2oi89{FUM*Df1*6<#nh9>4X8tCHi$ z3x=L+`%k%>ygBxP`Lj^}fljVPKirgVy?DJ)|Df)}qvmlB-R-naJgQu~Q$g^+>*eYr-xWiGySjG8i)rIS>TOPaVKmE)bU$^uzN6lCBnuSbO zUw3VEn>+Eu+SY`17jmRO9G!X5!ZGnc?v3elOoP+q?3!4!EthG&Jv{HiyAZ$Zl`nG& z_dRmf`npK8?BCxNd#~+$xrSXMUH+oZ?9vC^_pNSzUGYUBSf0OZwougssfJMgS&F*f zqw6z+=X$QTx>uinMQqnZn``_2XdO2bH@h0f{Azmb*If6hrF!B$d)VK-GJWN!|LggF zp`%q-3cj>n4T_eutxI>&{*sb?IuY`%`tv>M8HvVC(%y1%r;Y$#vhpUcGVs z+h22D-ecK!?#s870xX&M&DsNc{I9oL?!Cl+Z2BYV+uIJZ*cv>Dh|asv%o_IMkOG_8 z--wwlwfqheQI=f4UM*bl@0xbaN%tpyakKMgcBSp#_JJWnGl}VxV*IYB-nF9tv_1sw zJh+m5-=4B($?Hxt-i+a^@H`N9W#``0<~1*mt#8=JP}p(Xye4p2uk^khTeH{>aLq`5 zu$FztGtqMoreF8*i8D{$rh3@-2E*kFdx`tm&%#BEx~Cqr__gz)cY|<2%-*}JpR%{} z_Dx=YLCE)b^uCgN4Ervu%UThh$abeytbIBk%URiDy76}=u{~k^aCEip%J?h1nJ>y? zr!?-rAUxyb_GMGATW@lEvcc@i-uf3Oe=&AiEN9!g!!@TiP>d$8tN;j;3q^)$2 zZ~vP3;sE{Rs~bMJuAf}uIQ!em=e<^fM-D~BUpXz=_3`5Qo;e#Y$@^~7f4gPkmE#sy zGc;P|(q28@cyop@@5%kup|6a1GBqDXSfBhQem7fM@S36P_MLMLzdhb>n6>(!#%=Y~ zNwrgN<=wZM+`MvYQStiTTdSt6z2ACb`WETGiTkcx+Zk90s?XQRyEFfm_*(K?@2BUn zcaQ9Iu{6qdh>3bUcpY`;>e+0s2icp=()X!1t~cKADw%*KCm#<=n9lxvwoH6)`;+9F z*I%E$a4R^laoe2(?d|Lxi9Z(Klz7H*Td>7ohmlh}(+Vb!kGk<}dp8tI>a*0 z&yzT2AJ!KS)ztEqGyUUQaB_mUfyC2>S?kuPw`&s{1!3cx^jG={)_JPzRKrGYZivcbYH(WbBmH$ z#>M4<<|c{n8Rq@EZnB)yA%I{pa6l$w$pJ?5uw`Hr6l;uzJ_|*If({lIJz1e;+?#uV|uQmtbcxNg9@bJF1 zF+4dcD|)+R^tS8A_g}xgHoW@c-yJVilKZXG`>?Ggj0yzh*;MuNXm_Ug-7ibj)(ZWw zntXeb<5J9t`GPF2H=hLRZ>NNRI`~uKc7*!6-0deN)LtYn$yu?u-I%B0#*YobS3Oo>XjoN9lv;>*TvHay0t(9@wt1;e=^_@mIs&RiExv#CKGF4ZgO} zZ0+W6o6lL;M=59XU;pvpM%lEC^>#C5XR~Qtz2Bdx|9x`4m!b3PPx-ODGUq&+cCF%- zny{qX>)QRdOY@|E=hgdP3C#Ju^Ud~MSL}A|$U?jJ%Lu{rQ1D zt~b97>L>5k{wYwaxou;vaEgHwYv1G=-b)>3hb1@P{nTYEU&s*75w!BcDURBg&z2?F zGt_Tj|DxI8{W15(QA5kLf{kU?Q%^Hke^pz*IPd2zmYT|ar$v7$#W}_^sxvk-)^bL? zYS7=x9inA+$M0xvd?Vk~+XuERtF)c6W__T@Veh!*Id^W}yzHms_q26(W~u2l{co$U zcV4%AwBI3K_KD~O;RTZq>SvzljbEs`ApB(ZT(fiR^Iyzn5__Gf|1DttD)IG|drCO2 zh^{a03Ad5^v{LHT);`Aam!^HD*U!c|BygM8TwQv~USLM>dfC^kI*WJ@_?y?c&W+x8 zftg`ly{yJ8iMqw{RxWxL0`j58jtLL@ODAus3wi&|L-yU0a+U_xlta0pQ+8fmeJ6x<%aOHyZPVvWzi#zwn*JXl{SD!stYJc1L?#Gr=xA8q zFs)>__yeJj#mb>i>Xs@$^=?QK+?rr+a>43U)Q7w4j|(wrF4V5QH(hnN)SOMe9qe|E zbLM<#PCKJmtMwwJVfh8+FG32eDy$~$aia4sua>P`n!Hz)H^IHo?H-@|F>Qa$#fBW`jS@*ibWoqGsb6|*OXSLyja_I-RM7`i0JdIr@`lEojZ2NeE#$Z$1j<8 zb7L&+qw3FG`g1gE_Mgz{ayd!=ayie=`Sbgm!2fT#m%rJvUAX>_ucYdWnOwU4?gMd0 z9)0%zxguq5we^;l!Ry;^9shT(!gKva`Dfm_b7xO|6x6f#pxx`Y#{<8~^}OAE&EKl- zdgUcOEJK;rpx(~i$g*8)j2qV%@3{}ktY=SOz_#Ob8Pji@7xK$@Oya+Oe8;g}$uA!^ z3!1!mTr8Q9%wooJo#D?FlV2~NGc+*8F?umB(^&tKd;LYWJBwr9o;k8M;>l4l`z=$& z&WAmaYqWK+ao7R~X}&4(#~3nkl|L@Y>phJ3&WhMJBIle`0!e^$hPd=U*G{F!}B_XKRwincBy4 z)#qQtU)H(C_239^{0+nY1sb;+7X0Dty<&IgQ>m>~o9_D3DgR%k_cZP*;of_oX~)Cv zs-2R#Z2MN!Yvlb?Vt=ExzL@8?ME-+rqhFj{Jo%Rd{(mmZd@pDVx?lQ#nZcH`!m0f$^~|$g z{j=MCZguYJ*_(L3W$g-OUmTaQcZ%6o{o8t5r)~3np8mPx>b$_+SMR;uI=ScWJ4>wR zXcTKtIByzO1?As8JlIxU3TtdQ&-}k|miEsDwVLZT=5kI_a68OiTcgLE z|K&kjBk%X`kN3u%Km4aj@5JKG4th&_?H)}1d2D?YTN7tA1JCb`@kNdn7qdOMUT{y~ zY*^ml{dAiCsa-F*FRb4EboHGu(R?asOJVy+FvkNU-_)L9?bAN-EjCy~4^Xs_hpAUCI$+_7?tp z!p!92oCbeUCgT?@ChC9Jh*vW2-|=+qJT~uOhNlerJ5QD7yW- zY`vNPmq_n79=E^fh<*Nk=|1b0SC?0~{+Bwwnz35&bkLmNYc|LCpI)4ocVE^1RCd3=LW*Ob!|DTX|}G&0W45tSdtD*H}F%ZEc8S{^0s&`mU`3Y~K#? zdpZO@Y0A73bj?xFHuL@U=ijn!{aU=h_TasZ{R-U4d-8WJ)c*5&n*K8eqs4Nm4HgIE z7%jJ6w_>`)`h``Y{IKHzf2IXqHBC>G-b69^aAk0>zRmn?7ta;Z2{HwD6wRwRXK>5D zJ{$K$e5Yk^^u>_4eGj{5p0bRZ9hko0MVLwI-Z|WRZy6`0++8EN;+*-RpKBHvr!RT3 zG3-s_zO1|%p8pn~{k`~p*Fp1kk=JFHcBVHgY34Z>Y!rC)Ys2I~afSA{|Mu1Inewtj zuhsH@i_6Y;V2O7$&+?Ls`w$S+k~%HC@#)G7CdNy@h&~qGsIpSud*eNmt?Sl(`Y?-W zUuI0g6YaWXAFp!Hy0QG}!`(bW!6Gb&nLF6HP9?5C{A_pqcZu)D$7`+`U!RqIcIUU4 z^Y{K2#uoQ|?0H=K|9$#9ZSno@5??FJ^F@n`+mp#el+t?#h=+1zbp)V^Lq1)9iQgRkPlvwynfgEyK-Oi#jCC?y|$2T z?~KbCVPacKv)&)wvTom|nyXyZ$3JFY^*xm^J?-(D+G z&EYA3UY+{Hy5~s(|Auf@qo0XSPv;sqoOG0Fo+$H1>w-{0P|Q=0H2rldOP=j=Gzu+T zs{Hss+zp z%X#xJ%H4nSJg};_`rVS($8FuQMV-Te>;Jy-ar}5yc!ag)t3`!TEONwxBX0vIR}Kr$ zjWz!z?x%W(%NwzHTx5-DsrAiW;4Xef@Udd{8`0|HHy!->)`>`{rJJ6r?U{I!V_M6Z z$Tf^J7BQqBiL~qnWr-BlXPNI%zHKjeI1t{itoLB`@q?3JqGnVFE{{gvkc7Px4y65S|EU*! ztClgCWy#fPYHzY%G1XYG1U=|wu$pDrdbDG2vi|{%brIYzxCJ^a84L>dCiB)Z{t0k! zZ!k&Pzv1dZ5$Vrwd|5v+rZ7GGxSDhAJo5*qZ#&r4on6f6ZPvb;>u;3vYkP$bvD?}; z3_qAQE-Fh{8S{LGaV=w|{(}~ZMj=HJ7Y0=MJiz44hUJ&2N+N8XD zdi?W@58@BRXDtlR2v7gvw4c%BxXnG*(^Jy^I@lbDm#beL&b%+iezqh-1n))0vyAnO zH5cV)KIo{=usQy9s@eLNs~hzHr08_*uUBqZU*Z1wch1Y^rCnDauQPLHfs^w zW?I_lB=dnoL*+pKGP8)KN6QP=9hSUOrtpE4fv2{IaVx`a1F@U?H*jBQU(57n#am_* z&Kc_QZ_^Km3rwvw`jI+;|1HCQhP@{~r84jfT>iE*rr7W8d}s3m?%ocWY0?KKF~-%| zE@brK-NN$2^_xEX)Dv%5S&seT(c9U7Bkz3RBbj-b)&aqPI2cx*^kbcJ#73HZ&!QuK zYnIxd+F{WBKJcKgjWtVZy6ZIkbDy;3E}lNe$niNR;oAEH{;a23W#6r4EIJT(bAw<(g7Lq@wbNx|YflI*aFssB zv3u681Im1rA~Td3`e$5LHGXcj#4%S`<^$6d!#OIOBr4|{s-5XJJK-sPBcVQw$-Pib zK>R{@%uVsgeJAccIUp`M@6^=3D||JTwkJM`ZcA3bx$>RaZ5cb`724@5W_>;r$ESRB zY9CueWt)D2>I41g-5zDyo6oOTDX}+NA@nQBdg;EV36hq-Ll~!Y*{|#S*`CYzU_t4P zSJF4b!+mZ)KN{1%ZI$f_xv=yvN%bbDYM-%&ThFr1cvg19_=e!ki+^tZiq*c{z!Sf~ zX`bxa(%bJge#tg$e8#Zz!pbX_*0;88d2nmu)6)km@3Bj(-xe=C|K2IWJ|_Lb`8UbS zIy>I-{jQYWasC*?zE$6qzo#;+d0T!U?}zC8itT@&=-udU3~gA?_D$=()7+Qb_R62< zHn;7mKAQi3?~QB!>@M|-<+05DX)e@%rKewOP2Zz`Q&#?y-qu)ge#T=%-N~`do6PRb zo*`U)Oz!caxXN0~1);rF>9^m17kHC;>&nuLD@wMNW`bKrRp-xUEqBhM8F1A>c#$=h2Vj8*fga@0R zm>q*j;^bye2M^cpQu{c2oy$v}8M7R{v7|~jd&YV7hV?rxUC2Ga=dg0pQ*F@PDYLC>r2i|2)DMrRmAv2%=fnI1AV(|*I8>6V`DzPY!8b!{SeAr z;ycY`^I7AXo7I8wFJF9^pDFpTk|!rm{DbL|+foOnyRTsI_@`H`V-zr@QLlRa+3;tU zJ||*+AIVod-dAp)zPmf((Wdn$dBYVRdH>H+eUt9@$1Rz2|9y%6?+2e>%&+1(_Q^Q; zOLeZ;)33%>+w~cvAec>PpS%!-+FeLY53*z zwa)61yRY4onvT|z1yzt=wG|#@|DE-7@}xd{`@K5UeF6F8s!3zPg40d9sK=D3v7O|jez$<5!+NIbZ5V3X7nhPj0r zrxZjsSulQOc>6?K_WP1bqw1T*bMJBsoH34IG?qM2+~91(W+C~f)jw}?tZT*#uX7=( z-*olQS~`e62ufKM6|rqi{KSo?o?V@}%8fBTu|8$#r^y>G`tez4zTz=S-G4#$H`BK+ ziv>J?Mdk;ZtZ|$rwLvnfJ#QP=*%#_{jP|9eKc)8FnrK|SZ2g>@+}t`!s<*GoT|WBN z$v*%2o4AbU3u02-wRZ_tv+qA6eXn2jwq5m{g)#~U%3d<_x%ZBE_VKN~raT?} z|Mo@1{(iIXv)_W!nhl4VuOu?C&D<~YrL0=|@8{ib-f#PPI3ndYQ`Doq%f6L;+EQ>UXgh)<4?e((1}@b8tyb^q;-e|fF7G5&8| z+1b_q_a@YEd|7mO%gXN8!B!V`>Al^XloL|llke8sC#^eq&D|F>qtvmqgt9@gnA`hp zsU*|BDj8qKcw4@CKA6#cCZO@_0oK`H<-hIDdGYG?q?Ow=Z}IvZYGN`nN#Kmt-Jy7{ zsN!%#uhr&>&H7(%svF5zDkOh!OR3-rQEK304|+3)VKKwfZBupP8{#DYMCo0(68o?^ zW$i7y?I8~8n=dOEtkX!zP5Hr9anjgOasx}tlW^Xs>WfBoj8zjCp2{|=6D`m*3f&%XoSqygiSxW}$Rc)im?_cXhs$GiA4T zH^-*cpL^ljs}}aVdctjn_^;Iu_eI4s#9J^t>4#{r2Q}2|2yaJl_@sQ zeBZDB{j%5g*w4GqV~_nm_I}qIwrbN`Q&@9-Z&e@N2dWWomA=@1u~t2H|Hb01ei;1> z1=ed}4hOE^l6vcH%u@5!ViqXkY-Z|VMDC1@Os`vc%pTi+D!+N*s=3#y4J%jjYDu!z zADL6N-XdG%%hLnX4;t|8lBhmpqoBhjAYkF;AS>CcR~6^bCs_P&sumO zUNYr$M97U^{Tt^vQ*4-yMRNaOaw}%&mYV(6S+XgSOXG4|!i?jQ7v;+yXxmMGdU|vD z#`TT9FAo2k`1G{trsBKT7EM0?-E231SNh5#-py%p_LqCJ4KH@`OYYm_yTAU;&1(#f zf$SfiIxNVQJrF;~X^&=J_{ED0?KiW>GaQh4vgqxowvFaTP3)UiD}=l>sj$LG#{*9 z9(ZT-mMQ0K-?hw((%+0(mZ4wDbsF(k1|usn&J8<8EkCQFuK|2s1a%}q7B(oeSXthv%OUF_{CcZFrH z%@sc?)C`P`Hq}0qU%E}YfMYLH821D2inMcfmcfx%SU)jsNSfRK{H{}c!kS;R_T1{f zV8t-=!X(Qzp{PtH_xp%s;v}T!@=-xrstcN@+Ag)8|HSX&f2MW zZ~nsdYr@~f8x?eE+pKgpujl`8<6BPrONm`qt&;p>dS7mv9rl(d{-*t=x~DrnuS_5>P+?~4`^uO=Eaq~z2*=ODMw)7`)e2fb&?Z3z3O`}?HD-?O`qtTfwSsaL&0?Hc==r`eBtviN^pk3RG~LVVw` z&;MAeTfg!U6;)NIdi_Jb@@A=<@4*RtbRObc3<=E-M+WmZeNoBdr^Mr`ue}G zUxH56u=;dD8GLZYm(TY9KWAQF7n^y!Pxdaib(Q%0J=%Yt_W#W}-mwcZxCCkCw_*)Em}lQmGwlESXpWRi(T1Z53J)aPTXN(SdJYHO zd*0ENUM=-NXPdtCv`Y>)4Vr9UAk{8|L4tyU{;kltjrz^CJSmIr>dm{mdg@c|3eFR& z&xN^eThI1m)dAHSmD}P+YjqU(Z#@vax#GjY-0kV>b9L60KC%48lp*Edxo_?J$6*rzRj7AC#9a0`W|iD6y>9uU^pdCg z((wJiuD)$$?*@65>ubcsLfkezR_$-ukTSMZ6wD0iG!gQmicn ze$1s8wmBOKB=45cceFN=W&PsHwqg(831x8u!CO}te^q=_e?9kmwhZ$htqbB0`W?NC zi@mis)#Pq|6E9*^EgK*s$+YjyAKPhLvpRd?R8LQje;si^b)8ZSL!MFnpH)tqwKml< zE^RqG=i#>~{{yCcOKuu35T7;iX?IVmgVztoc;1@IuuYqkf4TEqIBq{DT)rdTwYa3b zdQDk$&fe?Sx^K@B{{4HVtMU8%*ta)0Pu|>@;{U= zA7x(8e@5QMQtn1xHzjR#s^X*hglJw)=`Kg=i zZ{PZ0d2jiP^jkajzuojSLUi9Y?;kJ!uKmc?pxu2ds^snUtJm#{qs}k9?e=YU%3HT{ zm!&X9eH%n(^fBrGd0y{f&A<0~h}mmqb7N8W>OGwe>-!$WR=r&M(pA4I(CW(t=gXSQ z=S-USZOihd?Y3_cU*5`I?<@cJh5P0B|6k*+x3C`gdMbS1rGFN?_a;w&xUPKv@4GM0 z|NnFTa;N&d7xO`di|_XPb=6g`qwmi;XaE0C$)}U*%kBR?w%=y|sc(AR`*XANJ)h70 z@a3WN7Zr^5!~~|G1TL-~X4M=vfeWR1;rBJf539Xu@I1!o{HTZRoxuj?4c&EiU)Vo9 zy)Z#iAmL2W$u(EDab8%>SdlX!Ck_;|{>2S(e2u-QK22?0e?$BQ_k(Qy2a~Sy)ic)U zGS@uiiJ$j&_0DsGGdkadN`8sbC~ffGnD3zVLNqGXL$f*V2g8yr%+YJr4o_!Je8w-} zpYovS?8Uo(()9ZqKHBB2&X!bvW>xYuYtIF%G?T(3%Zk{3n^lQLXdO;q^S&wLpi%Pm zP;qFC`IgO_H>j^W%=4jJ+raklb&dz!rgd|dzl~&$PgHkreu24cX_HWY2DoW$=XJy{Z0Sdh%XMNkDhMa^fvSO?{}{yyPb3Q z{G2<*?pe8L&a#q&abMEse^`BH@%dXD&)r{Y6!!gi^)9g!CnX;)oygnf9oZGX+b zoAdw9JRF{1c{=)%@%*1>N-j9E^PYX=<+d&qGTD{)yedYOTo5>NzJG>rOo8OzFS8-``*vy5BSW@c*Ch72m z7>mSP1qW6XyMNto%Tqn;RzXi-gU6Yb-^)%g3mh{m`*LKVM75grl&_WsEDwSXi2u@L zaGVnK)W@GSuG7bl(L42ncKXkv7pEVrf17e{5nI})vNs`%Rqq}UUl7jV?ainkD9v$1 zv~}LWQ@3x2H+bLRUEt!#KWiHQY2)CXbFVp;t*>NIYwmsI<<&l=;outi1;?*P$>y4z z{grz5Ps6Kj!}A8MwfD}2TOFH{L?Z%ZKy1&-_NICjfd#nB8qMOq;Uf6l_vU=&8__qhA6mr*X z^ZxPt@7j;Q#BV;Wzg`zx`_@>!mT#`vuJcP?n^hGp#Yz!#B+G2~F3!tWc(7XZKy?0I)4650GC|i*e0vjXIw#b>_FeJ(*Tr=o#p^FVzn=W|+oMNG zx3*@7gU(leo|4sQ-ZT}~LZtF4I`!+Y<`}w@;b@9J%#NGe;XYT9$v;I9>GI@8~ z6>Oc!poA>09%d~cX%UIiXDj~Qx_N6_26Gon#-*vEE8_fj^VVLKoT&6U@ORenJ$mn1 zx*mo9W?Wsc?dn9?)5d9{8&0pUT$1}?(qa3h&$686X|h+isUMzthH+i_p4$$3?PWYp zMH8|wZmJf2aC+f-rW(s5PYf=XHSaU};i|T}Y}qP?eHXg+hcPHHHdszc$=y`TSod+x zLj5;q%^r)-JoVw^_1n8LgjbjCu{fxx|G;vyW`c6~%BHNO*n5|A46Hk%52Tt(uzm?; z4wfsP{rXnq+p-yau?MCfj${3zbbEUGFQeN=EN;`Ze_gnlQ(FJ#?uOo*tN)$mTh3Vi zvCp+kpM7VS+>v{mm(9$RTy%P$#g=Vd@w^{WtAEd*^e6Vf<}gFulXu)Wbw5hizWlz8 zIX2C@)>o!0{$I?qsM$Y1&ij35kLm2{m5Cb1ULX1$H=XT=*5wNt&s=IAZ-03{BK+Ag zi{D3Q&A9#5`rD1`?fn;zUEg(OUuC^%TytE{*4ljN*m&j@>5sPO=BDJnSr~<-qTklW zbbjxTLnZ4MhxtdC^ewG@n0D-AYWzIq2dhQz*8l%r@1H)W(5>prV)?m#_J6;WoH0DU zC2dK`Y2EEAo9gG*e!B^}Lnj!#Up&e0F5}-HE$TLkv6WA!&U^UU)4wXn_>Aeq^%Y08 zFNyE_zss$G~>n^{x_uw=@P#rGlCUVW=}n+AKf6orfBz@o4KE~ ze#hq&Twu?YF*81Kri8OXk2xXjaM=Rw21V=pb_@5%*Jti4{;K$I@jXFVJt_ z?c^51NX zd(i!T@+8OgYgX=`|E##rx|D7Ahuv#!-@ER)F3A6_XZv~9g!1=3IqUKAob`JjaAWiH8ROb_pu+;z&$#@~;{Tt|muKJqlg55>huWvY{_2=rkNd3m z^k>V}KNPQ1-21UN--lhUBB46-`DfqxKVz!ye~!Cjxy%o16*GI`fv69M(he}krk8!) z`jr{@_s1e6UXO#c4&!fT=t;HrQ=SyV&_odL{ zZ`=6d`G=5FUZn+7veTbmGLt?r>6n!L?Q;e3(?1$8$G@1`xSr{ZB*)bh5A6n-!m_tH zzUO*OcU&`!o^HB$?!u)!rwjECh)<9Y2ztSBLiAUqz1j3^Lvx;*nQKM9bd_JIb<3A7 z?&W@Bsu zE}PFy#h2D4%bRWtL`e^qy!Czee~sS%l;Ilaz@25z{I*+6l~vbe{8?WAYx$Sc`~RGN zXUA|N8UXetw_DqmD0a z=6e(wo3^g6&Ur6HHh5M=IUWK^pRG3VYPYndR>Pb7q75- zaQ;~GI%>y_#f%ON>1!?@6lZRKrQ^Y1a=4~sX*ObBOt-l6)wnX!nkA+Dv z3ks*QHi#GBId63HZ_4pKUnku6$^0L;_k77p?&_ZC4{P;a7=)}!|Grl$=l9)v+RH#w zub!{I{Eq_`viep1mcIPm_S=un-k03w#v2#g-gh_V=!?YK458&UZX(JK>1IsJw=P`2<65Cy^v0VtpI)n< z^~>qk7Q0(!rltC5%E3j6KTag-zcGw&$Tkvb>tp6ncTg(%;1f3|`#F2UwJU5P58Xd& zZamh*P`W|2LH{~qug-08sY){wldYCE`i9rP6kD8IsA;fn&eLw&*G^X+OP$}^u)d?R z?ZBz(zz3!|^4vc*eOK^0Q1~OP{?-KXLn44si^!W1&^|+@D_2=Kt4Ek=qe}&PtH}TJYHW}{wusSwte$AR$o3AG5o6KC| zv#V~>=B;5^+8N*anEdN5zrNh;U-QSM{cGp!nI|sRCTwh2uhp^rURCz5C+hYuH(Wod zKL1U)l^^quU*ERxp9}8FR^NFn_wvJGe*YNppHr6GsNSvleD>v=&FB55$Jg!ryYcP2 zFYn6tTZ2x`4oJQD;+eSqK9$(AYp>n>FLYo@jvkG^VGFnytmvO(mT;joE<8S$`R#_q zE4dRkNqGoWTL>^|B+K?KyTG=~$meLIK6848wN3D^-8rio_1|#3NI&N=|HOwWj`|PQ ztFo_{As)GJTkiP{?z}aXZR=GXmd@FzwW&r|YKzE&aNe3q>FCDV9BT!$Kisj0($D*` z#vA+WX3?LI0PG0n@UgXojms9nTo%zP!PD zE-{^LuhE-O=lFZ;8uZzpdd)e^_Q<7h$C+~u=1Gz_FG!u`=_;=1vrPH7Xxr8!qI);k zdO0|zd`v1oZ{n7leqC~3M{!EU>Bv*NHcx$+oblr0bJ+*HpU<8?nC2h5;duJaT+4m; z#LxTYh6$Emwuy{?Jo&Bo>%X@8pI;XLe-!b$|ByuM)Y6rSI?Ima>-?VZd{_S()B73^ z<3GpLr0HC9H?w=M{W{~g)UDN1*WF)|u>PvZaC~`~)w3n){wY=Scg*aR zxyvrb{bN;=$FsHB>vkSnUs7{Oc;1A#-?y&&J@s-oYK<*AsrquIe{I&Uz4w3H?muMM zxA$?M^`%zvxEY{>ik7z9eOdT&=lR+^P_Jay`Pz4n=l{O*)Jl_y0UI7v8#k z|G%$W-p>7Bp0gNRgLlb+Ga@gVG!M-vZ0wn_KkRO4Sa|$i|6J!SjXqK{T28VmNiv0< zQd_)0f5DPxTsDWp8dk_~G?i$o<~+W$vTa7<9?aAP2UzB^!aIZeA3QS3iDkTXl>R_S2MoAx#9SC?GJt#3404| zA8I_{{;_)7T}9RALrh^s&TqN*JAb}#sL}Xyt5t*k0quIX<1h4Q3#cDZe#P*7&$hjd zPuqTReR(=-rY)b>O)Hbd3|hQKH8bVP^voDeGB*6&Iz5cJ(o*61hv_$4Vz=GP)vx~9 z_Vo1T;KNr~Dgcr2gKV@h(2{$v?q~M&^G~XP9RH zwVP@0$C>+TXKmx&V_!FZTbt*J5WU`-?=H1fkv3#k2@0|Y|WA%2+|ne+N>?LRDVzSJ*McBJd`6-BI_ zms?yVj-p>BFSGFPI``_8bZOlUrVyvX4NDFv^KJ;z<$KVr*PisIzCHbe`r+U?XWM%` zb3DUVXe5fKTOCO%;9u)3JMckq!3qoWR~NQ^>oxmTmHRfvUw?P_oV)90-}jq#`+jlG@*}?; zW`DP@0$%g#6|32l4rT&wsgUy+6JF_07p*@9!noUw>G<{jdF+w;T6+-ktl5 ze{cG(-}AnEu-|*VA(a1q@@IaV4+oB1?PZs*DX@C6pm`6QK=WM7k4J>lPn|7jzW4k7 z|9@W=u-j&Y+M8t5OK)7wqW=4}*8pjfw4_hy3vmAL?$uGwI(W{eMbxi_clU>@hx9;E;24$*RZf^&i;Z^5<4xN}V42 z?B?!O3zvC{88mDN_On#|`=kGVMc0|QK<&ff%2TDV%nWXD6@Ag9ofW*CQ=w$;)vMw2 z{jGB{vVJ#5Nb4lV@lH2s@MyHX75>n5n*MY-1kiR zu(-p7)bF?Q&Yvm$aQqh&%c}of!UwL)F)zt_kbQ7d9iz4`gVEHS(0Mygz3G0uKt|w3(M7G2)!&N~R;EU?9q70tDpQOFsU}>-sgRr+Wj}IzhOM@cIn@HM{Z1zUltzw zVZYvspy})WO2}W0UmxpVt-Jr)t?Wx*v)`^S#L}$1v5V_X+xq&S)9XF||62e5l}n0ofK>d?Q{k6R z$N&5EIiFYmxoEqgTXU3Wl(A?cRFp%uk$UzJ_J zwO<&s&#eg_(lZJ#oc>nE!0mBl#?%O51K#wXmaI`LAIi5cky&6=aq^%(^U58UF8;DP zJ-spHfcM)+&n2gnYjp)sN43}j7ZJL$M#khWtne}z1eHT*C<*<1z zI<`;kw)i%&-Ll^{S^j8Rn`ga;=Rs&=g@yUV$kh#=4q-Rj=Un6t;N1P8)spej)sH2z zXZsl18G6HZM;Rr>WFMbtD#H5bX}A?r&Bd|{+}2zQ&lMy-+&rN6?Q}-aJ;`uO?Sw5` z8}$1v-^O z#Mm`@&*#_I{hE9K=iD!#d$C>~;@00{-?y$-{N;50-x0f>q^@7HJrMge-n5_vY^7O; zmvO50SS5$pmtA>oofC9nE<@0*1)KqA0yaKB@oB2!Or8r28mxbgPUE}Wur1>M1N(ZZ;uFN@vl@j(%6PG&)g!Rp(%jRb1gnjhs*>L`Q`R%SSRvYKwP3eq{f!Alb&i?!9r)As=@o>wc zymMbtOBpg$*G+t?ecUE{>eS+MClz(y9FBkVT0uN2ssH9yrccRdwtz~`^=vh)FH(1o}!=J4@fbH7xs=&aus{p0ED8+$FbKl=N9^5<~rZ;Q;6T&y37?ANW= zlYX4u^ZU*v`Qpdr7A0;sC;wc`Rk!8z1pc)j+48izKkV0w{cUKsYJZ${p7p)6h0n{+ z&ORm=`+Jo?mOjs~#Rn$e|MKh017Y>^J*M7y&m_-RxPj)^ti;SO&p(mVx0Gq0RmtDq z`~O$(Klc%IZfn)O&-14HS-o5W8fR58Dy)4KJl{+H?+f?6|3GJLeo?Rgq<*&h+pg<- z^+)sk_P=j-zDaoV{i%MvW$ll{@_z5D zuJ69oYku#AS!8^C<|<1pwTl94+Oh*08cDMXoUTj8)+##HmThV5 z(1_h|Qb6a>5{48mox_o53Ll(aFiUF2!u@O>vx<3`l!B)@J6wtB%-9+qdENdDb2+g?{FEwkln{+f)0(CST>QSb6eWD8sT7AyadYDc+dJvvUEH97B!e zk$<*Z>0*2F2imWvAKZFk3u}d_3koX%5g+1_|=UTwKYrUr*jo@-#9(L)AytPHTE}0e_XI!qyO6= zYseZFH21+%lmJ)^ZiqvJ}N#gTfU_F{_lG)L8Gmg-`(APS>5hqXUU6& z?P>`d_-h_8zx?-ofBojep!Ff=FO=R)ozBY`-`(9kkMm8ce)Y`1^|$qY*YVf?IDFZB z-^bpPtD)gbnfYxD=2pF0$v1QB=6ciF+ojBFpB2BXJzrh8I=mli(%3eSY4L*&PsjFK zm)9BZ`jzBcTec;<*)J(JSlUA91J838HPv4-%NXYv?qhwhgw1o7F~hhzjZbK@~F1sOiJSV_xZ`Coe@8+4^&^MS@r$=o6`8x61OH_ z)P44AcV_ZGx#Ly$ZdqtuZ4?4Psx7uQ4WoRfpVOsfndgYa9Mx zrudx6WwO6ltgN`mo|mT8_pL&hFXOb)5OCWNW`%e5uG^>0$M# zL)k|9dSbh**_K~l*VorRvb$K;rmx0W1-ieRuda|+W#*xVeSQ`XTfTrU^0xi9vHvSi zg0u9xPX(XF_fNU^*?ajKBWGvqDPS5??1CdEjjikc1}22qCl}TQi*Gpga5B?c1AQ)r zu4WaseinmCn>86LQfH_c1v6gXAS)oaz&rMa`nu8{o%ocmOnh1KuV*}5pK4qtvE-mW z`@WodqjX*73ds+w2Uu)ek7>PPJ^e%UfVe@x_>Ak$7*7>3$3oXnrL^vRQuM}^`$JwmG<3uSZJDl>%Hi<6z!9JZZ(ZF*bZFJ z0{5IuxT`O&{Wd#Tqp+^+MNZpMqnhq=L!;W%6}r*K=a{Z9{=)o6;=A>Bw);P>O*!Pn z`oXRKhMd53`|0-`WclYu|4PnF`7UL(Smv1BTOq3}fB#9ZwLbHF*Om9xFCzP4#e&6K zJ^N#k;>BvQ^1oM1!?KvV)*CScW4e5smASF0d-bk~4eRHzy|cbvZ~FJFr~3CRRWo(5 zq@CZZnHD#6W-{_D{w9Ale!g_>h8boxLLZr&3TG@~P-#%^`xzqO%Md^B;HhJc*|&}+ zD!l%-na7Js?2}GBL&!u;?gCAtx`~WjH;&p}srj&yZJ$h!7ARb}8@gW0+8z!+8L~A+ zeLZVUA)6J;mX=;?91~_KF-^ zbVT#!zYon;%$|&uJGX5s+WK1NacrtSSM~1r=Eq?S@y-fig%)-CH*VhWiOD(t?B?-R z&rfZSkl!G_jc2ZN`_voVWjB0w>qSd`TlIE*Zk&I$RP~zYHfN_|iJX5LAMSMP`+T>0 z)%e#iVw&HQhKBW>PiEhJ^!{!|@U91*=V#4jw2H*iI9PIkO;mz4%ZEEfV(b4E|9;)c zU|v_^sNt+9?xD6|J&(R5M@oQbEpI{agP9D04Ounyn;dT1I4oe;_vvfPQ!n@CI)=t) z&!+u}azCKG{k+4>4aN=n3|imfqh@{fiDZax2$uY^X`7?>7TE<_43nFEL~jW1t7KDq zv+46)JL_^e>o+k*HI;0-Imvrct|;ves})uK_VZWJ@q2vL9~lm?E@%--Gmo--k$Url z8)N*7TY5ihtXJQ-$a*%>d#-8sXSVq~HH@x|m4&uxF;6?}BK1p@*Jb#`Z)3Wxc|_`T zhoQ;mQ`O5}bF<8M%}x7rJ>``T*zH2!&)Ls^poEp_^Nh!b88&o( z-*WTtn(`an&fWbckM}OMWl0phar*aL?%x`b?+?B|K7Zq$GyR40v;X>r_^#J*e(v&I zqBM84|MnSImwr5N<$Suzrey8!jQ&^o=cC_B?pN2nd?PtXdP^LZAm6r*>HO|5dtXlY z{r1)_wo{u{YAHO(URCsN@7Z^Ieoia7$LW8+n*EgumX6&7rr@vzyn#N#X&LW(U&hvc z*?#`1<%6ku60N4bnhu=T|7^6EUm*PI#5|F3Yqp+4@80lVVd8j_%iQRey5dyiJ|2-x zmU-IWL@QVxoIcO;Vx#fx1L89`eJbr^GqOB0<>0cVN%1$X{7B{%ki352+==S~X&ISv z(tlSuz2ebJ6m}4fJSh|Nc&6Fot8+G(pIe!GZh_3UV&11-54a6FSBtD%d?a*A-CdRR zS@U8ekKYk%(0;S6^2WiN9~1YVc=z=AgqPeay0z8T<{9-C?$dlM6}?+e(7(!d-jU@; zroT39eDb1P;oPxhtTnCtJI}p0&&@eg%C?W;rqIV@tJ2n-F`T`af3>v2s-($}WFr|9 zMJ1KAe#pG%{dM8}`D^~2t7VFkg?rX#UcFj>zSoR_dnva^=iWVL z0W33)2u|Z#!T2L@tf zmhqBdb?s?}eK!hkE?CLrV;XK{cHNSXIX-3Or`1B*Ct7m?rZh}DVU>1b!p(_|>l>!; zk-yEfWYewn0bA^Hj@{dEf1&0@Z<(Y;w@=;?>*n~SW@jVjKep~LuDE`PC z#K!@dw&rzHJuQQpMSt86b^BU=_U$X~`MZxDdprA>+~avmu{B&T>8IRAe_nOxQR zI%~z($3Z&~ZUp77?d&eUH}&7A<8@`(lB(HQ)_6E@X1g80v`R5KB;_ZQLE(!d+qf-M8}zSTkzCbKcVgC4fvJZ<``bH> zG%~8&)=ND&eNOH4^v6!R54b%}8Q0u2?Y|Q9^2N-(4Xe-eU2V{3Uvg%h)DNx=tG0-FPu; z$F%iF&&=9r*Pw5*NLKaU@eRAzN#Ef1t(4z$?&jV-x!*Pk+dbQ8bo^JvH~&4mWoE=z zM%`VyA@Jku19@C#ZF75m8gotk`L$wAr>)w_ccS~%&71T;uhe4}EzXxUuKG|P5}BKG zW!4LR-A9#szb<)wy?Wj=EYsl*|3xjn2FrVWW|zHD@BZXq1Q*8-Deq-#%`?wm3bOjX zLwMV~#7!Pp3d$u1Sh%h<9Np5;UUmM~mUaJroyp)osL8gqL`*?inn5iw-mXD|_k-*F z-a^qt1}$GT<;T7Z@iOzY5`y;KyO^NGJYDH@I728Ot0YfLZQV3x+ijhUfqdSQ7Orm( zh<})r`d2CYT9czs%=;5R4+Q5v;NH)$QYM1Q%DDUFE7mpLS8J|AKN;eq)4mmLWbxWLU`kQWT)z{k(E-8BZLC|}n?xsboEYG4YzQ1l0 zRG$9hlWmUN(rZ1>H{4G?U!8h6BYi>kj^4FjOZ)iRrOptwwmZhbq6{1!ng>)DEZAvz`a^0d+jO39 zo6NrLePknPL2D;8us!0d&rz|bZbkQXUe%vM}IEuVcPe{>Lk~iqT37y zckG*Z>rLU0RU0pU`Sgw9N7fgeTN7vMY|7r+xZdh?Sj=jU0#>b-GRA8^cYeFl5VEa2 z<=d>{58Ss;^raO{z1ija_R!5EryTWiHu0xh+B}b1yXTtWJ=p{LIb1io_kI-S-mS1R zFx)Ch-0WA>>XU9_Rj#sS$8TQwnLKO8-pI+0*8A%l5}5afG4GQ~HR=~V&U>BpN7wzP z_c`B!Hf(-*TwF)%^I`q@>30TuV7+U+>FUZzfi} z>s8sBU3hDt4f$FHzoyFHHkX|oK9`H*$Eztz<>xZ(`z5FziLE>KI(R{w?lM;UE7jMo zm3-ZP{)uEo>m}AzCci}=uv}PDTN^j|<>|7nHvwm@q>e3`5Xk+3{R8&{^@gP%}qP58O8@@I0$dE&@f5iT((2@hV$*s z>5Qc}na!?B?vweURmR>Eb~u#Jh%sv8^qa4jUWq**zCl!SuhQvhzY}X4vSJU2R~O0s zP8N@1TzqzR-<6ow&e+~uQIDy;Ck^f~*qnY4&O4`2Zx-XJiITY-3yh|J;F_y(L*TtP zZ_UMTKO*056L`FA?(vGU`mWxE;a7gPjW(Sr~L6T-o)%6w|(6;>M9WSo$-sgAX(=+ms^Z z;IcP9*YoauJN0?t&7n2=%{dy3H#Vft4dgsB( z+2<0L?0B?s-=T}fIY(!lExvGi-r;*kX1o=QDhjGyy7)HV8nzhL53XrO468Tn-W4Qx zqn#&}A@2?6gtoI=%4g`^5W0CW!}^1(ni2Z}w#xa3#MqbI;I}ySU2e|(l;1|t9jYJ1 zpZ_xL3QJ~RsPf75jp-D@vk&!-UDS72FLeCVo2r@oH;ybn_n|dR+A8WeK*dP_Qf(R+P`>Xd-VMK(e^7I-_;4O*}+@gn#)-IbMx_A%gyc9e*3Lh_jsD< z2667Q(>0nop38mMysM?HG=59CbhqVOt9y&f{#VUgzVUd~xyvzF3Y{C~q5>bb<{vAa z63(>GP4jYd9b>#L$0VOASb9L6q8uE_QUNY+uBL|AUbEAl7v3Cp>w;&>&rfT-8Jx>j zq(>StENu+ZI>(xzk)U<1_{3=i#Rcmb_StxcFizibZKIv=e3>bmUQ3^hczSaqm%-K@ zCezERpXnS}&!fj!V<~b)C|UV{c=odsPgw7S9ME6SIE(Abm9~9MKbTH9is!I>Tf`Rf zxhLwzd%Gt(@qDH`?`Bvq?Ca>hosjNcrf;GgEp=h$>-4e-6MLHWeLQ&}oNZS}Ovu-SA6pPIM z-4o1G-Me_wGi;l}{;g_gSpQf16KHp4KCW%G9*rACIZmi9n7&cGZ-&J0t?jS>eT)2B z%%H1%K$Ky2kjx6r1-!qlR-|$Lb>?>o4&trcO`O~7Lt?i!;!@g-}I$!`q1@EruaAgYxj76ocFAZ zRdCm|x?SnY&g%8=eQMbcO6`7o^IP}c53QH>_?n&fey7L(EdKIb^($6J$Bb3~ z-_Gkz;NiG?@z;JW5sd$_X;DaR@88s*AEMb#+bh<+zIyCcJdpdm2{3}PaucuA7pI*Lpi)_l~Qp?}r z^WJ}pieGa$=#+p?tNqT~#~*3mEB}5rXK}@v(=6AGAH^Jdv3Nt9Q1z7q*DY@DeI)zQ z_tEJ;Jw_?}OWWcN<#rt{j$LmScD}pphsb&9mCH9CcRP0#+b*XY+reed@$GNtHmu*K zWLqWn;p*aqlOb4&rx~-D7&Cmhe2>`0wp~sBYI!k^al;Wc)`EvxwhB`i{FM$*O5em~ zaoj+HJ=BQ%@dRE69|qHg(0Q?^jj{`4m1b_0`J?rgc^m%&P5XQ2zO828DP`E8zx&k0 zH*pTZrXNHxEBpErli2>G9+-Z$A$H<%m2xv}ISXHsEDq{#O*yr;}QiwoNx(F1h{0C)NvB z8PZ>5q%)j5y0vdkw{6|3nSQ)AVjIFg$L)w^o_&mQU&9`zZ_&Iz9^K`!IDcPTc z%gxix?5i11m>=)}fW+as#_axTOQ+5`a;QQvN z2SYqx6=MRUZea1z#ank?ntPZW}N6WL$7o~39&Yj?T+ulz6@LPw?hFlB83#O)D-84&ERMuy+ z)dBs6)qw}Z14PSMKeXm;Sy?_KZJzGglGA2Sb+T?q-rQ*P#dS_moBsJPskv`Dvt?yX ziXUhnH@)`A`Ny=|mU@f}dzovl&f2(3e& zx1F6;Tk&!Y4`cj2<3CRWroVMKczy-*w@=SIvS(gCv-w}e`p<{<%=;E~bMJ>l*Ok9+ zl|4?5{ZPDh)3u5O^PiZ6DKBGM;7epdA*&Gf(_lecw>2*;l29cSYH`oiv99YPs`SeX9qt3*K+7C3> z`F_cX+{R_Vqbn1zDgD+w$JJYA8@|^suI&kC?Dxw3r}%n7*IIoBo5zqA22&aq?4%)E7J#y5Gb} znq@!Gx4(VBWb^Fc+H9S&UICw*J*JWEaK%1h1rY`wi--g)fzqH(EFAlCly zwXg)!56v6(0+fF-WgI-LxMC@jZ$pqw=f-_jmxCt1eoSyXg!G7GncNl)3nlNjv*<6`zM!&@vuJQa*x-H%y^=(nK z^p7svN3T2|Y{}W2`g4}?18#;jFT&%EB@c*iOEKX3u;xJAI?;5g2chS_6~CRiCMQEI za?7JX74p}Z_FYJ{elX|ijRVG|FP<>WwcYN$XEkGu;PZ3aZl1QDdi+!HJi7(FfYUMRNIH#D?fJp zy?iVE&Sw*BbK&3OS^akZQO>-5=gvRv19i`Kf~GHOKAzisDgNJ$^WUyupS}o6$kyB- z_UB@1Zi5WtVUq-I1@FeJq`A#zydf+)Q#R`st~(rQxbe!HqfEAcVx`m#Poyf4Vy;Cqnj&o^qr5t z`E$^;^XD!X=H*ISIQMX4za(q-{?c@-$>!}Z&J(L z+t%|`rQT*-f8flm)N|i@vt(RiS%cH&d*2TLmW@5J{Pq`@qOit@dq;Z)VDEPU72!!;~l;S z+V{%u9p0Ltf9~M+4$0CzujTyZlf&5d&8ocS-?{T~+IKG7+QORBKl740r0ib_{kvLQ zTD|t;hlO#QCw|-V?dFM_QOa1#lHc>0me;*<&iuE4`Mdq`@4@}7HD66W?9Tt4SM}WA zZtL=Er*p8>w-cByhcYxI2kl7G zf#`KBCQZhur>kYWm+2>HGjCRM2Gyn&n(?nKc1Q`{$X@8+lh^-ynz1eGldWnWQorT0 zFVHFwk7BT9Y}o4E^R$YA|ENt)fozXp(TCIX?&dXUZ#G>wpCxV4TgmM?e!Cg=ot>@M z5Pu-np(y3|qp0I%A6(f?6LvD}YiMJ#dJP)6@M+(7VioHKcOKc+tTP?o50pB{cS|RP zGsIiYWAkCW68YcFsD|~!)W^quPcc3HjrsIb{~wP(J8pYn?p-@~tES!YXzl%vVM zZ1xT3O1_v@!+IsX*6_S^>fG&bvqQ?(M;?xQ7<|JLU*YmU@ImYUKm3``7k}lVm&G5zwol_Yyu*Pj$CtGsF-*H>yJKGkTMehjvc2vM@n6^rnD1PQd7Y8_K-%j; z5JR{m&!$@qk_@U13wO*asAjH_v`EQ)lklElS;pjt+!dLPt7Uge2_~GHSAIEt{!%8U zpH>GHt>qt_KEL@d!wQRHxd&^QR%9h`W^`_5{>Ei{NAh>ldx`UYf{Seq?dSLq6$5K9D`2SAR z**wEJwXW{mo2iML9ozKRm8zVMkPiAZ_ris;IU+v}&D+KD#x=e#a@)?l^=vgC_Z_|U z?e{b0r`l7FihCXD*d?j_Y(<#Qnq=wMN$)If?!9I8>!9xc$J-w!e-pJcIluPj#rW&F zzR5Z@JrspX~T?-dNU3uPG>r9GQs<_Yr<595TiRO2PQOnfBEc_XtO}9>QR*Y zdfrz`+E;2Cr!h=pin|qdOy zhVflR+Zv{tw@-XF1&jXZIg`xiC;4UaLwSY;j2A+)UrHIS?{V+FzeP5L`P-qo+q@^Z zKX6%R-{^WRvolWcL-(bOthaMSb<>@hw;lQ>JMFG^`VXTQr*AEceDOTo`BvOQ$>-M( zTsJB!h&vF!Y-;@Hj?)>Oz^P{D?jSaJKJPqCKIf)*yQ((TV;;(cbyUX#AhCI#(1hb$H(GrgqI32$ z>@-@zeB;QQi;?@7ekA1^g)xE}-BuN>FH#w1Fh_-1e_-YaF$&X_eDL(wtcli}RMJIwedIr=y;(NpZ-sekS%dc-j(%`h})5x`OsI&wG1DCp-N|mqk^ZiS&1=xo?d*KeY0` zc>ZDLO&6Jq%J&TO#e0?1UbuCBza;-g+hMKMvYv#xiSUTZQGbkC5+ZBWvph=xa^?MpwF7XS-_fb^r2dNThTQAb6@zA z%QRjahZr;LW7_g*H7Bo-Qncs+@dn`w0V%5wr7UHw%zY=exbDCG z_Ce@2$-NhZd3RhZyjQ~b=a5~_Gb?wa+Sa|rZ1t=kj{e-5cXlU3JX`hAt&{5V*gsrt z>t|{yl0Dgw7G>$so|YDTq^mAJI$rvRQ-8zC4f1^S$3!-|Mc<+It4ef(=H^ z4PQkg^j(6SJgvY%FhE)6jNe8>`L~$Mp@< z`EJA=kh(p2lCfQ++p43Jo^nTU-Z;IfPFKQaE5jL<52??Yy-QPnJnA~KPFwcm7t!ZT zfv%a(UW^(?E&i1^kGxu+oW^CDh{wlWFLj~4bT(JG5SKnRxYzG<| zo5%Jod;Xu2T|ZpYakdN>$aAd`SL6JV%=#l}r!<3iTNy*C(TPKmDYrk}nlM}HN7B!j z#%876VhbkJpGZq}xNNqXaoQ`UB`$6H>(|O&w`9`0oB9DX9^>FW@oDzSbL^kGv}JD} z2#AylJEt8JiEAwSlgZ`GNvL9y_Xnjr> z`Ounb87y`4`mV-a^ zwqiN+kEAotZ-iMsd%E+B`G)EKTKbLaB_6N7A#VJ5yU_XE-5)cjscxCMl-CODB47uN zf=jpW&)D~VCWz+gdZZ$wnJO7~>n_xV=ATZfEq_{gQpj zrp-IG1T9u@|Cpt{;Syi-Vx}L5*cPnXp;XB6N0W!oF3@TJGQE9I4d)wu5&ay)&%A4z z&F_evr!Kx>|F%fqIqS-^gW{!h2%**%-qRo>6NyQ}MF-1Kj^b#AN1f;Xt_m;a^9)^*yK0{kjWhJMW7(Bg3q(Q>2CqDLh)chc#SVzSJz;c>RjZUSUb5)$DMpTI z^FNjUkp0ZCu3;L}zfY@0?_SF(?_u4-CUQKq>o)g?*0kiYTr^XXmBV)b9wY%bh)X4@`~Z>z2bU`=ZW zD!AtS*tPkRp}KA5o|Ch#R8eq^7S>prpEuA`sK@V z``Wu7()fO=}IQzxWboDTo3 zb3Tq$CT0GK4Xg%FE`;yAHqo^2&w=wH2c{qPN;&?CCtmW$t+P}6RGY6&TKg#{jO|`Q zukwW%^OMuB9uSY*`^V}yQ$1_JG{vQi8ZEL5BU2U?eOTe(ejuo_FZ^uGJSXe<{2x+l z8EaAv&MK@)Dvw#ovBvFo?e?FhA6QpxEB>9tc1`O+_PUstCuSyUzm@vY#SiDH z*~Y>K{ck6K1%^+Ucf2pXd2iH#@D$e5QO_hc_=|rKow>WsL^q1D#*!oLP1uVV=J=lS zsSP_NxTQ1L-#q>M^lpcQ=~tBl*R2xu->i6i^z%KPhoA4+1gB#;8Kyx*!oBhMzCTM} zw%32X`PfIc`kaa7^o{&ik8BhX_+UEC=km-iJI~kZ#TFc71sxINC;$J)@yoXF3i;dj zf_BxF%71YGfBp1jLHR#Nc3sarm?Qe*dh~zezb6vi&s^h}yDyJbWP7Q%*=N?Sn`fLi zC^Cy|=RIlm*|qET8Rrdo%p#jhy|<}~Y2-yK@w_&3DvaKqVjRCA?94UhnO6clcrRVK z5Y7;9@$NyNqxS)eiBGkE?cG*)VBwByh7Ak9ZS6agIxqdF)&cPiK@9OJt8e9oTj>Q< zFI!*Zn#fy|cyt9%eCz@73)2sKu^9(`u-&qV?}7FL-S@`zi{_g$_>{J3|B4Y#Q22es zv~^zL>4mFv%qLu*djGFm)schW%O7-?zU7Grwd)^wxvyLLg(v=+`Ek?!Z=FJB%-)tS zo`zewP18TO`LzM}kF8N{`rn)nUu{^wW7_6(A58T=wDv8G&3IDExbIWNwd*!B{tV@EAO-WJNLiOarv_O3j^zfOJ8m>ty%f} z?b@=8&D+o2&U(J)YyOk4&EeltSVgwi?c?l<{{Lv%jIa7>5o>m6=KT#>P#^Ys`?dWu z5;s1&c7Dg-=fd?ifB((@`!b|=zS?u6(8F6Ig+7=zPk+#7{mw(b{^#k-uHvy%&RIO} z*&_Jh_4N5)*L=Age&2-ob?Flou08*y|4*!Yc;fy16z;Wi8=1Op^SI3a;Bhp^i7|ak zOyTT_AB5#r@9@=lz%xxd%~+t8%UvrkSfG$CS|iU`p!SgR@y?r736rJxI3t#|B{Ag{ zPGJ)`Zr`jEUpVc%be`~m@RXiK&!Uc=*tGTTrW(ek!gYs(*=p|Y^?9b(JWVFfC}Snt zzBj9mvr2cLiAz}@WhA}JsOIcV(LQU-)u%p)eh~REi8*aqeS^bI@tRYPo$33V1PxA} zTiDW{`(X7;eF5R(#_3Eyn7WwvG5z@U;B5GE;dfs@h#nB1#e5?1x!<}4COb|aT;H%S z>VSB9z_gu4LVI)S&oNJnHd%Y(O>5Y^ho}EAF+A4t%*k)|{IW*;M^fF3cG(Q6Umtxs zwPl!paQ)!kon^rH_l{mxwD_;zYBsa;N)O)C_;~MEb;{hc#;dvB9KEw^f8F}G>w7m| zUG?>M-X1&K&0ozY{qWteA$Rfjnf9AC9=_H&ch4)m?{of>uub9Hh>Ok37k6L!U-!P+ z{OFI&0=?NuH|qARY*;VJ^8c80zE6JL=h>HkKA%6o?(g;bTIU1Th3j4|zr1bk z#*`c`eL4Nz{|TPkF5HsTSg_-)!xzr}kTYr`1#YKBw@Y%`Kit@LyM^go!pCg%!GHG~3u4;bd|II1{z($mwo%N!c44(Rg<{tRu9 zRAYMgsOspiDED77znG@qv}4#eE1OI9hf&2zhGloRFwWvBD7wKt<79(W!}{D~SAWE% z9p3ZSGQB`@=BBI%+6l%D#$E>;ww_-&HT?+FJthY&)9hIv87dd0UGU0i`G2O=;_S8O zt7X@k?fp0Z{~xESNA;B<%ry&zBLwUgoNb(U_w<7GOf`w`Z7xi=y}a)2(=!bFj8x3$ zJmhA`F>cULu-(4LI;SJZ($w$vs zX)I(d-LpK;+j!n{lh0oDXU@*z4P9 zPVGzCWTe6IfO|sb$q3mu%+rc496vDM(pvlm_lIu&$W1b{Hrc)6@lAE;F}-2-hF>6v zZ6d?AKeHU?HBM~U(Y0Q1-v#Y?D?iRH&3%x4^IPTr?RN9)-hGh&@+RfXQ?KJ2?mKSP z0v%y8bKjkRKQA7*E_eFX))cGOv~ISli5ImS^c{@1AOFH6kS*RnHFM(nV=RY^WqrjP zEYJT*Eqh{R|9r;GtZi+Rwz6M2Wqthjv-ce<8|RhYR8|B^h&cZGB<_)8CQ`t5T6D8y zhh3|(=yuHxi)LMs?UEgK4=29vyjjIKg~6R^9pi+TO))pFC(dJXG(3J#?tz9jW6ehS z0~6AJ7`@QiRKxn=>2;lL4f@|$BcdYae19!au76(q!s!J4b-G`C;>${x%za$Yf4!`& z(d+ZH#w_*?S2!MY7vEKrKJMNycZ2n-IjK6#@!n-}8^SXV{JF4<_xFSHH!m5c-F(R~ zdoBB+s`I}8=gq5|?=He_O-@d$Np<=7mx~w&~V-HMkE=~1albbC)%UI5;LgwWL zC+lY{AFiI+tPyO+RK4-tp7pVl<37~>-&)E3V)2&TFZ&+t_rKvC|L}R7)jILxYo6af z5ofVwzQoEMUyU!|&yjyGn(v#D_v4v4M!CA}cAhtQlU#QE?_0c#@%Mk<`+kYJOm=46 z-v{o?=ic6S{s6P=&Op|CKd@NL@GAj8>HKTV#ydWY|_`)k6q^EL<7J$}AUJ&o}}Pj%D*WybR*Ym2uWJ0SM0 zkH>e5@@esGhJAaM`5x0S%88UeAby>RsfsZ^cl*EGZ#CbI8UomsF#Widdq7-r--$0< z6AnyC{~pEqZ~j;^(|%2t7C9>ePqa(%JP&hb1;#+BCOQcizL(&nyq5Ll-b~QMD`}lp;rJZ%+hySk# zG`e+$`$l)|i}lyd4ov^LK2j$y@Za_DeKYFbIv%c9PJCX*dH?p`**|6WJ1Mk9rZ1Iy`1Uq=BWK!{~hJ&7Tx~uXzurUPrumj zt4aO!%lE!VyG+rEE3z}D6wln{cW(>H?gemc0BGYx#%jsG-K)T zRdQ!>zwiFP2i%wZeq&MaUTXbiwV(%Yug6b~E4iYqcFVc@`#z?w+xM>5ToM-D>?u0u zY}L_Rvt9mGs~(xHY^tu`o3!n_>HK4zUAIj_?)ve(%R77Y{_=aMNRz}!?Gm)R}4iqo2N7S#=PcubF`Qte#_6*{=7AeKDs(mFGLSa zPue^lmQ605tX2_V~XzE#>uFR%Xu3`?~X+JH}^iYZP{U|ht+qt-+cR_aP#?>kN>^?Yrd)9?p?Q;cHZBfRgbRi-=UfI zw_8$7JFhF+Ui8KMtH0Jl8nIvX^X^CO(Ej@~e7)E7_@6VsTxho|dBx{*YNyX#grB#U$E>5PXBRe_l@?_1I`U`j6$x{)~}GgX?UT{ zmU$Ob9Mg}eEmh_V#0w_JKi_fompgO(XExo+X*$;Y30epA7wEH3=Q>f+5UVU_G5x-O@@?q-}yOi43#T%!;NxI#;e%9vVlUC0h z<{r{qKV}`Z-jIHNUdhX))0f5n-Wq>f;KSGL^}n~jWZnO3&zC#DZ8T)7Up(Ag;Fz8l z(D?u7(|Z4On;-0EJEBgfEp2#Yrv22sZe0?nRNWa=ID6?YY5VBH+dIlON3EQ3*6ZiV zbD?+CF6W1>7Tq4Hx&LFaxzy&ugHz0WgdX@f7&F#9bYv@MSeP@dRw+36?cHxo{69_m zuC3c#!)Sc*eTCo6=30gsJI)E7IGufK-qY6%`|lYxte4taxZ$+IQrT&)I_alRg7E1kLoaJQxe}=iKg4lJddB3k} zU*djOzK1z}tKAmnA56bKor$Yks(d|2>Pza)y=_J{8xNf0dT@Gk=ghe=&rhUZv}ZdN zdG;nlT8hNtJn^L6k_W=~@c;9hvcoDMosH##Xz{D^wx5f=_DsL>(DTLJlxl6mg#K^U zuYceAapF>;*|xvu_3O|5bNi$bA9md4TjbeiGmOt#mCSfH@As`Z>A&Vh@s}6o|I^5; z?T*+MUidoxj>u+E+4}#Hz1{S>$G<=Sx4q=g|IL5(*Xq~tcSON*ptyc(y#4N+f6t=h zJ)iG=-Snj=-6k11bB4V?&~E?dVaX}YDe=-S!VZ|GA$13&ar@39Xr}1CpViw&jI_b+I=fc;nGr}ZR?pQk^<#f4^(B{I2Q>3&q zn~fa|rZmJewLG#kGJPs3$&svY1+KjKNyKR?B_O#k-v^+j9EO6NZ0KB3dFp3UYHPkhSaO=lvv z@J{%2CdB6P?DXH8_7$AVI-q=x??Jb=fM)KB%#+_Ley_d0@zWu*1M6McpBSlZ-`=2Keq&!p?2+{s zuWYVVy>5KK@>#_<{Ruj^QgweHsk*nc;{A)|54Qi#dwb#T@7T#Ua-SF3A267=cfsuy zN!zZdKKgTQ_Wq=L<;sB1`>q!sy0HT1Y`gEfuJ65cZmzZYn>$q&(|P3=wI*v99Jm{HY~I>V zZIK)DDv47#&uN#~iZN0rSD+@K>M#g+O|LIUt)Fy4~>F;mNo%UvP#q+tDAN#B? zA9}le`RR4Lt^TerKJWYguEKs{`JydJo1D(>y}oeATidnEOD83n>8gHzXV-Q6-qq@; z<(heygNok2T|5IMSvl#EnXl>hdvRU2?_I8nQrAoaNxlm{e)hk)`G4!%cK`No{#&1Y zf2vsi_Wx`D?zO&@`u`*A@B6p%{r~@U)%UWmyrO*hoHL)F^^f1j53(<-{P!(!{?ECe zGtb%mE9d_$-SO|=M$3;XdDU<7RZgG1@6j>)@7yE*-HO7ac3plH_RsCpL&JY=o90H` zyuVLm``J$M-PiV;{@b>7%k8AJuWtX>xt@7e_U^)cDRcdleVZR`JIR!P>08%rHO}3g zx3$t{YrIp-Te~B7(T>?Wwm#a{`6%zwwXU0LoV!on*2TtnSMIG_e|K(W+Owbg_MiX!`|UfM z{pqi6KlUgIh}c{8b&k92>!MF5)xAGIJA0XbZq+;UbE=^Y>TawOA3{~WtIw}dnyl_$ zCbggM$R$_n^IFvn{_ErRE{QaL|DWeVU%|b~=O+t~%Z8^Om>yobC+)|s&*!Y4^87yS z^LCAu)n?DhYUdVT|F@>Qz2RQh=Vi0=CLL^MpPs^Xw8AB_ZmUB6$SZXa_h47s`}|s$)DWrP12mOC+hO`Nz;wj8dfUjpA_+kTl+Hmhc=oTTPesd2)$&iCy#45C_tV$w_lwnD@oWY)e6JjFv5K7V zd$His`=NQ;@0LxrEPmF}SEzZ_V)_#ewH?c>4vTkJHom;PJbJEm`L=aCpUv9i|L?`( z{;1epB^$p?RJCN%-~VURWb@h-&pw7qZ@+bSW=%2TM z(b~K0iEga2<@uA*MMY1qO_{S(=wy{j{>f9*qoY4P^HO;}agM5b_)AmO{FhQEEB)?G znykHj*^@IptU}XpQdRF{lET1=bz=LRf?6LgF63PeG>aGlX`8!oYXFr$EKCuZu5+? zJ?|O0KKegv&QW{!I8&AUIIWNI?)M(eUwlSt(q^BDDSOoNPo4-)(>)oz%;Qh|Q7VOYx-QVT}J8hGT-7nMk!xii|l<& zPjurqzBoO3^NZpD58e~eidh%mJKtM$-f^F)Li*3Hql;}SyWQnJt!1q|9j^21(-WOv zG9p3DpTat#zWkoB{YCMFeBKk0`;tCt_}_apvArhS@!luV?tM0v-FED)R~q(+E)x4| z_eA%X%#qG{_RY)(zyUhzcne$)&J_nTed!7SIt*d*E`91BHA;;yDFdvBBj63`%u=C1z*gS&n%qV zvQJEE=||>^*Lx<5*E;=*zSuHRreU8LXLX?Z()FT8#b2KLvfbk+x0R)(c8Bh#xhJBZ zXlkrrS}Nxr^u}U(Q&W<9JR@7p&r4Iv4!^m%d2aOYm%5VG-`~ysezMQv5l7{pkHz7?5YVqsE;-?ecaQ4(y$GtKaXvIA_jgF`a@}E0>?zQTUka-hA1`f(rQ;cZe5<6@~T0mHeKx{l%MZ zOXEsyH~m?)CnHVX9i2CIkEpi9*?&)TrM@Sf^E%gcu{$k(?%zL6+{vn*+;o%-Jkz2?Ve4K@ulmB0!*rTe$9$}Z*bnNo;&#R znT;oANUG2Oo(?^V6lwR}FOIOWQUz(vCR8>j4NVBRM*D|!23wJpCyqu(+z zvz^f0ekW+-M|IPJPt*3CnYbBi!SzIUCez8)rnS12mX{;9+IZO^;waqhh5XYmE=pXQ5wl~Z=>nPB~Hhx0j$ z$2^i21qoNKKKxV3apC@_16__6R|YRX_4E0B{q(t|Vzs(#KTj;@`m(iV%cH=s|A`f6 zW*DBkzpePZt-0LPMPin$FS0E=lfoU+?F;X_zf$4WIVreczp8q8p6|(-+7s8ff10+Y z=H*+N`BkqpCCzeX#MJ$KT6D=%T~(VQD|!M0^FFSm?&E&@|NUD1=WTxdIk)qvZa2&`j{CVbbahxyc1&Do^tPOtHb0+C{`BE6|LHqBi|1x~ zel5Qr8Xl`Eoxi6r?%<{SpB`ytCZ68(WdHxa>wV_i*-p7LZObOnf)87>ub(9{l?L)|;D~Q_sz@G^+fRGSfVN-kUw2&lO#8WcQqFRXT@} z=j*Gh+-n@-xqU(>HRaivPUpAz(4Z5)FUIUvhVsjci`(C9ILuf1e6z~bH4B<|{ajE# zHT}~4n$Nz^n;PRRE_|Qx`~Cj?#Sb0WBR94;>s5C7nt(66-D~rU zjtIJY%(tuk^p7WR)xD<`a^~VS@;12y|(LRCeu2ofldBar*v0uJh`C zWj^06C~N=ealiekHt9T#Tl@R0-&v%eaon7C)~Nhx=}ZoT2igZauXI0}Yh7Np@5-Ix z^R~egU(CL&yY0rIpF(cd7R>vCOx)(baQ#&K?WX&_-|wuS@Bj7nu=53Ty(iZ)R&iNH z8vfLM(eh@B(1mWxcA27%&r$bJY{|NMYG=Xn{J1aO2C_32iB~u2ec8SsXsNz88KmZlB(EJMT3Q!|zwC*UxE;vubXOdvY_OnU~4&!gVG? zNzIV1KT<0zB=vExhex$F0Q>iV3zneW@KFPFSO_s!Zj%{=mCIfwCn)%7_u z=Oui7b+zbmulcDP8FvdGf>2jl{Y58dUXMK4I^C;v?dJ5$37#ts?En8aKYMoWwvBHx z)7Of}*IeARf5o;pg0ne$m+e`#x9F+Y>3NJtH>JyLGP_?>{Q813|JFAXFEuu+Y;Rnt zq#2P@r@XR6a_*IV0qHl5C8ECVJ-l{$eBI5?H#?ut+x+YM`}~{D``2*m?=e`P@iM=% zaO#$V8#{F~Q&0bS@GU3qTG{Q~^tU@6_f4y9yt7Ha!& zW~1th?8cQ|aT`Q_>Q*k*e!}u?jpVey{L<6@o|nF6dOapM;L4Y+O*eYph`81DhHT;S zPde|FeDnXwjJLa9ue)~t|G)27?wkHT?R)y)`=sZaqmTE=>Q-;NabW)K7ugq0rvyDQ z-jy+_{#nqI=6|B+%MRY(Sn*V~r{==-N0Wo?7EdkLdy)O|a=w?`3QY-fX=d*QhU}!ML+G-v z@bai{XX37Ls?P~Xtz9SnWqXX%vu*8jql-=T_Zz>wztPwH?iDG^q9sekg)WK9#?*a2 zYi@meYs`h#ePSW2zC87sc>mJ%T}J0NRD4XzJ~2V@oIS6I)r0PRV)wTRxz#GiixG~_kNGE|NA9)>#4e*Pp6-IzWv(T=;&@S-BsJ}X0z6w^=?&GLavYzD}iY`E-u8R@d(5)mb0@Cf9rtECUByZkq3o zb<;G3-o7^YeklPOU3y<&3xE>=h$}NmWlU&xQYLt^^&zU@o-z@_B%!1 zTTk7(eBau5QO5k!=?nKiT^zb=)6x^UFSDZWxnKJ(Vr8A$EvBpUyR2{C!B;-y->=)9Kl2Okm#rnd#pk`J`WFjMxjxft zD*vx=o7t_q z&ODp=>*h(lY@5--y*YtrX)MJzX#M$iD*pZzp^={^yQlf8SZ#?Y=SJRk8Zb z#`c^I2ibxayY+7BFxPavv3cGJ`TsxMFaDP6mo#>}7M*Xq^HG;}%E2bqPe;Y$J=R8T zEoyVhD;9DMQ|S5Q7WUJ~ext31t6aqcMoEi;1u-=rj~Z2cc;Fy-`971OYt)Jhcif_0 zw#<*IzdpD8US(1}r&{^F%H`=Mr>E;r5B9eWO*=P7Q@-XypqKOQ>z?0QA(=_f7UbSFKzQ+!_Z z_p}E^*CNw9Yj;1&nwXjA)+?pD*u8(6pt4(s?T^(_Grx#}LU{9e?}`4K1*crU={1r6 zS9r~B4p0csPWlWg@$7!~gx%Y@VEs|`{Wr4?eeb_nawbpPMEr~C=E_sgb7I0zyRZI| zdiVtU-?d*VxvJQT1VdJxIenA2QMHk&D*vuk>8l9o{5>1DK5UbY`sSdYzDrbBFYX)e ze>%7P-o{yGxml&JuAKb!^ZES0T}!WBz8)m9u|lYSW=PV}F41%MO{xW!hMv%s zeVP3+kK^bw^LrPMZZG?FZ-a9?-?f?P^D=Aye!V_V^y+P!K6(3lKYeU#eiWQHdZ`U+ zn5NC2t~5VQS!4a?sY>!+*8kWh_^w()7}Io^#PF;tV}jmiKbT1)KffZe?HNvwo9c znsejAtDBpbr=Dj@xcUF)(>qQV=G{GZD{uGPId4BdJL{d%a&q-H+tt&ru8A~W9lAQ~ zn)&^j$1EF4US7J=pg%Xu_JmVjv&Kw);jp^1*Z1r>zoJ>EbV2spTU+PeZ&!Bj+frh6 zYXSFP-4#=Q79D+dt)^G|dC#w>-v9soU3;uo+WNhHlZ#(G_ac#gqt++pa;EzIQEQ^M zo{}=pi#fQxWXbxYyJbaY->+~Nzkkd2>y_Yh_D^GqPO46elldN1@?jHSOy-pp6TfcX z|M%=_kEx|!wra_^#ZOV1@5ZdLc`_ut%!H7`D{VFJ{EM4j&bS-qq4y#?t$51&n?L>; z#&5hdRo_hf%hpRzm(5Tvj$JFU_rrHyZTTYt`pf z9QyV3dVKJ4aH(iqb94J1ueGPYwcJU&+?f_V<7cm0(0E~^CcTz zU-q}pefj>N0{36tjv$lNuCuu&TlM~Le)axv<~dvUv&trT#(TTn)-c(BvO`aD zYs~JlwO=1J^NX22=swT!@oeeFpS}4hAJ@+0dvb|U^OyPSHtD<%bEgK`?>{@w_O|2) z(}V*Ja~MCC>#7HyXzHj zt{9h<^7D(0A86a{Jh5AC|KD%3-`iQ;czB3gza;OyMe;G8`$ah#aSqE5?D=#`d+yA= zU-lpSTBh)BlHK9!+Uxf`T6gZJM_#dzq;^2pAF0(ftaD#<>+jo;x9g=^_Ho(rEm2!C z68C<+7Tvgb`F_@AT}u)SclIthlv)!sS1v-o?X}M|tJ5#0Xa?)-Jt0uCa6RkPu4OSB zfA%iB_Ov`qwq((Nn}8R(vY{>e#O{{~g6meB>~DX+-(SvF^D^CZ|80Ti)(^ZFFJ13C zxwyO`@W#&`wOLQ*Zw&zj&*ofE@KkatgM-IpvssPXX_3x%r5krHSnoQ0_k#3izmJ2O zqv1ZF;5qMq!MGq+cg2*MMN3bx|2^yTu4ztd3`?Nadn2A7T9^OmMQ=MJWth}reERx_ zhlfv_oT_Mf>eslk*=OIcSF5$AMr}xNd^N2vc)8!&O=~ZRKiL+r^Uycrx%Urcos84^ zaG2jdLOix);?|eTW?LCsv@CS0=XT!sBYBF__M_KVZR%U_pV1`!oJ@MaQ$OpsDR;~7 z*Y4YXRLiApUsy*}#qTLr`yXE2V$^3+`>SMi=H+FecA0S1fiGJxcz(7^(EL2RJXI^9 z-QVu#5y=l%ca>(po>P48i)M~e1iS2_N}s` z_cvzzH9jAAs^-FVqpfH6Ju{va`93FIyHxK*_RTM6^B(_p-+b@pxv;L73)eSww(swK zo%L|GSh36Hp9}VjPF`E^T~+*H)v>P`JU_Y;)9zKjw@oiwmv?uUrSa7l4obClDJKM; zU-Rr1*XIj){d|7?y;~KJd)GQPv$1OVFMP$cvuI<=Nukx%-`|~ED-t4;i^@*vrr>FA&T`)a+rhWast$)AW1`S-U zE6Tna^E>snU;XK2!a30~#nNlOJq_0iw=+_{rf&}Fg{5zper}O@;UgFCbRW*@h3i|D zrLO;J6OP@~Hz{B5&WkUH=AK&;-o+SS#rJELcI=(xn9tEMAt&!xN9)B^y;Sx79n#Jx zyXLh1{yU$3>#W^u(hn;8k2iv*AVfHRMQQY0$UH=6zzmyA8fd+RS<}sWdDYRD&*$o$_e+(;qI=*UXxtB>u(JIM<=R+^z8L6`zum z*4`mM7wkW}eC>qpA5RvAn66yNE;cQK^Tz*HoyqF{(|FDA1iYCz-S6%j$?PNhd>6|U zpD|o?`|UyJr2hw}fQB#HRlUJ|b7xm_LPMYn) z+SNLemPIN%&#n@==XUug@A_v?E0^T_d~tR4^c$BaS^ZrcySwbta)0^wmS%pth&Kl{ zKRuluZ?)h3FW05}e^L&`=UZ)m=pGQ~er78F-`UUfzOg$!&yU<+_jgX{x3$5k|NnlU z&c-XX!?non()A*t)~Ev|b~}w;d)GGhTK=n)Ve-dX5Rpn68m#Se%Y!1o2a_Etrb*X->+%^C~33r zqU!3j#3xPr#MaNL|M&Cx!n*A;>t9R?oel1!g#UY6pTP5VSLU8Y-f_8y&awa1waaaY zIifB;@%oYw<&ze9FIh^a%|6yE9sT?5_W7y&OrLEgo-;}1XWRVkUUmNKgY5EObPk_- z#B$}whQoZDZ*9xXzA4VXrq}G&iL4tN5~s>nUziuVyDV2WVE z(i7`1GMxI5Vzv0fw%d8xvLzQBr`;<%o_+EEpNmG{7U*l=u3cRk|7-U21e4c?&gGf} zPPreswf{wZ{R>^0ug_z_o8gYDM*nYA)Eb*^iA)`gi`pXWa8-Z!nM zEGVOHvS6%D_R7oG(EC%zdeS+bRC^vfy92iO)BGG1Yr-+%lK{ zSNNaX+@O}?Vkb~bF#}qV{{(8AQ{P#thwcGDi zol}_VIazHf-|yG!_gigm@R6V5loxEXu_DN)E?LlFW~kHe9$W3^tvAzVM^f&`8HYc|F&M>F8?KGce_FVS5(n$#|eMb%y(5>i}`)JLr{4Qs5>TQ zo;PRdcHduA3079y<2bR?T-BR zwsS4N-H!t+-yCY?Udt|5ap2eM`2Sg@Z*E-tsV+D7<@MMX+3Q^P$Z?-d-?K<#{w)qW<4!`O0rM(~s`cP06y|=^Lo>s58D!IPfP+*r(<5>n2sd+v&b;|G%n> z`!*dFi?-PR+wRW?=bzth=coStdVTur{C$ypwqF9C@03>hdveEY>TTytOl(I@8n z0;h(beWP!i`sBpKODlubH>R)q!qd0!*~v*AQyo9e?r;za^Q=yb`1#!a|I0rws`;w7 z>4U~|Ki7S_8XiBDjaSNI{_MAm=abG)ncLO3Z`z`ctCO8RORiQpwZf?NS@XZCXWR~e z#)))2>|SJlJT)^s_eamOr9x+SB^5cwcdMoUoHzBo{AW?^*q=_tj`7;Dem-(DUuUUp zEuMc`U;fMXJ7s~>6MP)6NOm0mDfvOP-$o>)yY%(7lao}vQ=Xlfne;z=(+y*<&cE`f zlg@KIh*7xY=wkJuTQ#cD_?*Szl?Ps2T)dj+$F6s~Uc0cbDF`(kJQvFHS9P+nj!W8mF+D$M0`%mzKZ3H_!3nb(=_`jYb}I!h#-5+AH51 zzlk9Tp_OxYHG{&Hjoz7p$ME zCcdoyRH^CZM>o$upU(d)x@`N7oKzpj7$d=0TZs>%b8XYz7#LXu9Ec-62_+l|kBbo@ zMb9GPgahFv-{wdXZ;ikS?*_*B%ECYi67+QVH893syjh$^v~L6)6!by!q(@y7Nzr4) z$X4T;etxDPmO$$gsQCGG`qNhNxCxHUY$w^Ia{`V`ydjFs8;wsm3?67(?p(BtL!p6z z361zK9I>}*YfQz%R-@WqC7_n`l{JyV(pcT8< zsncWC&dxTUuISu$;$ge|JC=y$ese!@PVvAR`yT`n4oqj~T8&Nek#@nyqvEIce!r(3 zU-xrq&X$XAo9>p~K6x!VU)No>bjp`^ccWijUoU_ERIo8t7k7yy90;G-@TL#L-y8}F zVF}O9%rq)| zZv7=;Yon%~aeRYr2q;2D)ebbQ=km6AsD$ZcPw|RpGt-~UNbZ}sulDz;wcGE_`ckmM z9z79&jjiM~c%ZGX$EA#E42O$u!PBYXr)10TD7MSj?dXv-R(tiTpbl%8_i!0JIIUr> z?u?m81T?}P{Cd59`oqKRpytjJ|M_-D<@)|&OW*M<6@bD1B@S6C~U=& zg#{cIv@r4f&{EWE$C3mDIN~2Pvdc~IoUC?II)9I1_4~cszr4Kc{_RFG|IM1uXAj#; zx?{B8az1d-}V)o!*Pf?oMDmpAiB9F zKo)BP!0w|1{tb-rbw+F4u_Sh^an8WVk_5`IGgMn%p}83^w~mSD$EV4Owj@NVfH5Om z%~2i25Oy3Pi_L)_gcA--pU?9eYo5fW!GWQ12B_pn<6LNkBV@6~Tf=+?=6!!sBKomO z;t)IH)4&*S=*@A}k%Z9x!y@tFsrun65+Zdp3xP7&Xcpp77|lYUEI*osSOi9EAyD;% zyA}#?V*(AX{rUU8e)=-s*{2q{b~CweyBZdK@_Kx|E@-yx&+GXATwCtn*;%|ac6XWI z&6&pOr|N#ceZKqtEYs{K_WytOgBoJ@YCij(F9NOL0C_ikF=zp&8x>8sW2 z*M)s~(9AzA*w50{&+cc+%D}~LTi>n$rEBymeMJl-TTN)*yG|L53RBA?;n$a!i<&#Y zU8F5}cdgRDyx;eG-ImPD$27O!ExT>myte3Fins)5eO<{#*G(7Qq)%>2J)QFR>-Fz< z-d^^%pSrlu%In$L+0S#f>#UBlT>E;WyIkbcJD_Rrn(ueZFKtYApJ|#sEoa})XGWQq zRBo2vuU-9ie)dsr{XGhMtG-Uk-~Ts^&-P0|<)@SC#czd9eT!kUm_jD`6UU~bt zZTIVb2b??Yi0&tlKPTxQXjuQ``2-G3$;LTM+1J-i^)wT6w9D6NSijle{A%m{$$58ooh&|YtL`peyT#_uhr{!Zrk$Us%Pw0o!MMPi z`^AEFAPKLVS67F3^YvW1xyS5IfwSfBH=F0yZo69+oq2WD)R?lHsYQ27ub*7M|KBSf zEotkrHD6v{UVh4O)7~Ag*X>?X|Nq~nyt`Hx8FPiz{XnaUQ*Wzo$=%6Tlc~eZ#v?HI z?wZ2K$Bc4sZMpJb_XVwkjhG%{WD(Ll(6HWRS+5tC#_Uh-FE1`S%hmrWe0gv0Zkw-H zf-U(AZX~vcYL?&5-EP^uZqwTp%u`AdZl1UQuTy@fu>H@^^Y!b({``KwzdY~fkDt%y zTW>CYsViIhA^aJ*uba7i?z1&@|9(CP%~YJ%QL^HmdGFf?(1OETTeDBEUcXPP`pri7 ztwl4nOBk+#I>S6-zYoj*Q?Tluc1|WO>!j%e@7EtMy32Py^I^aBa)JKbvpJxBETOLF zu(fstfG{$$y}Rbcpk*pgPHC?%Nqc)~<^ijc7ZW0nRMvv_ zG1&k6$bYl=yzSh^n0c*lrpDL*-CFYU(oxI#=k&~ykMZnZbnaKb{l6PCPkQHb@BDtR z+IsWEpLffQUN?5#kVrW&T`rDyYhQfr*QvqJr^nYtUW?A(t90(nI&2L^PtZd6OU52p zx`T}kOjZ|8?p0lU?!!{!+Ml}T?S8KTE&dEz?kAgmVd_1=IU1wbpzkD8lb;lUDDu?td9Py2LIeg26Bj?GV=&CdU3yN~aflv&P< z7d??xyALn(oo$sGU-eQo{g~!{*;0p@d^*&_U2!Izu%ue zx9rwRFTuG#z0(;^Z+o#;ytHiHm(;JXu5NldE&9}{soJjjtd*};E?<`KXM4RduWGed z>@uI3N>$d!b54WC1aD=ppL%n1y7lv%%gcJ_lw9&GdNwoNt5?c&)7z-jXwazhogIat z*DCjZkiKA=aDYM5vS^91_N-mGo6nlX?cU6X={JW3Oe_)~LK!{PTriv52SiVpGEa|Q zSNr?hIfdn~*X{Px+xH`>Fn!6cKc7z5vZvJkdb#}4B3JI`0_SZ$_sEo7aD4YLsDHAW z@1(fBRhHYQUU7_?>AjG7-xrJDZ#MV8(B;?P^T8>7L)5d4U$;t6KlkbDpU>y3MLpN< z{`>9r+~|aVpHAzqEPXc_H1jyG=9A~j(ACp+YrRh1$h;5KK~KLh*N#ulCL(Xo$75@r zCo5y=TRHsXGI+4Mrr0|LGs!xbHiA}ZPjr`ixh8%~Mqt*nbzhpir|V7C-FCz2%eQXO z>_o|{D<>s?l)PTM-DzA{Q`f{!R>#M7ipPrs>y}j8d_s{*whRMfH zNT$zGJUh#Dax1rZT3%V6QFZ7UJ_UT;UN2^b+Oiwo6~wrUR-e0+xbKYw93Y3 zo=s%l&ZlC_@9>)6QE+bK@q9b^?Md_dHOksyYdl0RMjo^K{l@s^{r&rSWGoD}g4Q)o z_cgnz^402Z=ebj6Nk=%+e@~CE(=2^`&G-J9V$3LJXyg)1I1t{dGRpuns@&H_xtG)VgD&@ywX<88%o4hyUW*xRDFB%@=V6ooSR1J(a-vJ z#h(5OD!HrQY&>)J-0RzUyM0ThZQPc7`_!GC#kQw+Xzwn0skDCYw^_y-UhI>fMwv|8 zn0(yp{k^@ZhgvwVcEy)o4P9hB#WeGh%f26vy4P$j-no5C&Yc|_bs{!6NSS0zu$p)8 z(#L(j-%XA!yXktb_WRu{ziQ^~FkZ$hYZbC?->+8=yI(1o-1VQXuzfL4NdT83sDlJ* z5Fw=s70|eFr?;dimeHIp;S15a=Vlll-nsP=C^5cGSU$IG)}7k#chB`i_S<~w*c_X$ zy29B1@2}VE!RzBMy35C=?g!0EESsIDr5(ObWG?3${raEYQ{TShEKR%8_v_ueO!i_%54`#BZOIJ2cyq7bjt5LTUoM-?G{3(I$!l<*K2<)@ zu>R9Y)roKsgsMiCHhy`%W_JE*z2^5KzI^MnY7YPPh)?U1qpy|p^xdE(x1V0EUf;#H z<`-z*XI+_G`nfrpvAfGk=hgrDc>K~L*KV!bcf|wwe%vZJ%sW@|+?TTcs@unNyw}I= zO}Vth(@#dq{{|@Y|N8P$`TM=<^=~$xxBK*{TfZ$!qNA`=Y!2&i2*cB(65-&t2$~AGq>#u)nRURde_@(2N&oxxw;|dxt*uS-+d` z>+9?E+p6nxTls!migt*re!F$kVLs~cs7_*cvzgMNbfDJ;CO8ll|=`K07;m`L^x(_v1j# zwC8h*`(7CSnYMzhMmJ)EL)ooN_2p6ddp@?kcq_YEcmJPH-Ea2)|F?+wQ3!g>H*w&ebkCF#X)FvUfY5TW#K4`~7Zt<2hGFY?=QPXy&H!>EsN|rdgu{ z)AIRsyLx1;!>r2R>8#)TEh=lioNd*K$NlztRj&_JzuT$4HE#Zz=3B*PGAVdGiKT|NHrT?!lOsUq4mtD|+hn z{Mz)#$9gAk&Ax8snssG`V!K?`3gg+4x3}f)E#uy@?gC>xXxEKnGn?hT`1-%43yK3d zFcXKvf<2%rEbga@6s8vyCL90_^d6V1UUOwlWbnSf-=fnM!hbdB$vy#XY7eoVX07mM zMslB^ZJQn_l^Q#&@tbS4spe4dnfC>0mUklu5y=j|Z6fEjI2hJ@s{k z9cXRui#Jj46jpz|7VZCT_j|jSS67FxyKB2$-0H#WOWyiZLG@*c+t$d|9@}Jwwr06Ua#MO>PV;X(;bidCeJiZ_qx6=cJ8P6nvbn7 za^;Q1%iC6ha_}_0SgoyDSBu!HUoKeh%xCE`ukP2&GqJ1o^kp5G9_I8oc3aNO7rHw7 z`~Q5>`pWgmDgEcA$n$MHl1f$9M?w2g7P)rMIauWQ&0jzGMZn49H;*Dn_LPdhnT z{q(-y@3cV;h;3PEcg=EdnSlBP!EWjQeqEmbZ_3s^*N-`|)x6X-Hosp}oPOcf*X!~6 z;;|(YuP=n?AQ#f%h(1w5cF(QTfpDp+z#$ALAGo0lXX@AC`XJNGdoyNm*;-Rv{V z#Pi>eZ-=al-0Ze)->BKuXwzx^!1#pptaq1bXs|SSbaPq{Pf@N_tV96qfQ)`ua9{<1N&eA z4=63V&Fd7x^!5t11;(MdJD*Pb^mhAwujl9HKK*({FMPde4a?;Tf*5#csTjd#koq@U|6kgO;l1 z>#sDPk~+K8J3qei``vQu?F+9s27i5hz1)9#Rm{GcojDtiiY;Q^ea`Z^%*B}pFHJ9e zdT_#-*|%=Q zQhRfREMs8ar)B)!r5CeKvS6zEeYpPr@B5m)e6m&+&C7zcZRWjrD^R*@&6m_qPflLi zoPPdG=)Ch^!zNUDd&J7s{YbR@^6fQ!*lKhmHyzn&`c!}aAEkb~Un^uPpG=&0 zJa$XQ#A59up{v7A9%y8KD*yjSd-_h$jB&5|y%#ybizoZrMS`}^RsMRpJoUzg#802k z+jpPSFiSl(CF}R=jkC>iweHt`pW7p8?Di#W@=R|#=6xjzao^wFeL6FJ-o&@t@88=g zy6oPxNvxQ$=di#ClxSyGs%K#)+5>_YqK#kaO5Js3x4K(!nD?Fc{o~ixMq3+)XEMsx zEZOdTg)z`kY_4GTyE{9JemrbH{kY%$-EOe;X1a4jSI6zG+Eno|Df7mLh3^ah|NFlG zG^=>bgEML0{(L@fy?xmkojql5qtY2>^L_XfRd%;DJpIG-+|B1W%n}YTq<=Hn zdv@t{owT1kKX!e)l^wi&{*`Dex%xjJubw-}h3Q;|##5ly_R}Y`JTP0^jaf`q#$k_- z^}41{yp(!tOJ>oBgY4nj(|10)Q+$4E;9@t+)w|2yYMr|xUADFM%MIP=ZBx$M|BoqIFpbaY zb5s-Gk4ub&R+De!@BjPk&auG!=O?gD;|APh;`y=a%^zVbb6*KD4(!ukDlA(Wyxi)! z-PhWwTH1D15xcyo2iv=LRW`bZlAK}>$T{)(UEpPpG=eQS#TGVTu}083gdh9MQ3zfqCDfx$;@q8a}ujw}eIF!_-9&I5A@umktGie9-u&wfz-r z<4QQfTEGJ|`|Ns97)#-Z%XbR*Kx-t*>sH8;;J6RF8;%NjJlOqy-)2x}aCP+dylcy5 z=Vh7Z-n#PY;^Oww)4JOuUSC_wUDC6l6|{r+^_R>3+iz{p&(GcQu(<{V@kLXHkCySk^?ki8aEWpUK@7n-QQ2|w(kpHA9s^avSN1Uk3U+Q%iczzj3~-);$3SbwZnn%y#Hfstnkm&lCR6Dc`~PxaP3W-+}~Ldw}ondNoztpJR zXI3%X=9R&mSd(^Xn@EY_UA{vd=S!>&a-U4!U9->nqjlT$Un6>(>%23?FJ4QTW<}KheI36xzW%T2l;Wwc6hK3NTOapXR~?%m7e3#vR_Cwl%-n^} z>6Z=n>z=ujwz@W?{(;ZY=i+MMS5dh7ML&)Q+Be`lFyuZh~4_4G}C)twl5 zmen#Ar@K|GQaP8OQk%T7b?WX7eZj0s$GcUmo^q@_l{WcfsAb`??(_El@2ra7U$?40 zUHU^RILMpLUwdEv*!uC``4Z`X11eUjzBRYpCU5-vegFTh-|iHj4~h4$-~Yz$di}f| zf4|+noE7mmbLaNP4RcnV{<+@pCf^pZ#F}r0cljn|JemLTRkY7B@oPJMwl}`Yx_Z4u zH2SM@`~G8y$Xjre`*C^lh2qSe;IN)iX7pF?K#DYn_O_yY=3CDW{W!DaIOnbzIqXr( z4IUZa<@1sL`BZQId%r(@54YNNew>-d{3`8I=a0Ji5{kFK|5-NIXB*@CeNiV&Mb|(6 zvDQ1OX4&nATQiHg9^Fb5O4fdE_TXEnaI(429OW*vw^D6?CDP&z|Jpj-5L?!NTvzt( zYK@!IzTd0%e=~F2k$+D$K%=RO&TSsM%ig9uJvH^yo6YCD{@zzk>Q@l2ZkT*#u64NC zjfCc$_S3s^&&{y}&BASDFR^@X^M23gC7{k$!9%Bw_Fqn3_P2lg#=hu@$Hw%Nr>fSh zFuP@3ep0brMybqQq*|a$rul z?^8v!!%l#@y02ERKex5}ec9xXm7z)Z_Eh@qzg}1L@8|Q=A08gw+Z7tUe7`wpaaj7^ zzsEzQ%yJ^u_Uv~0opO4b?%nCEwrW>3JvJ;$=GHDxlvVGTIL&iaaLnV=Ve3H$w0+$k zfBGi#z9*nPCwGpfSR34Bvtj;s|5Q!SCRz2`*)M;Xlqc@_Z+w&OiuOvsmpi{z=NXw* zKhwKe|NrmNfBFBeRHs)@)4y4EJNN18_4_8>+?;-TMd0F;o10SoO7r)8bd$8H*pPnp z^iJNEmrpvMZ@iRZUEnW&EM0!`TZNTw>&n-;PyX0isW&-SVfw;6e&cNl&$XBJoZQt` zsW;h@fAc-ZV$oyok1cral~tp5yCG^;iP2v(_7<$Puld|f4$^b z`X=5Lb3N5BU+0@F6>YhlF}GOlSl$ea_G3xAd|z97Z)~|6?o-Dfz{UUg_?Ckan>b$N zioRVEk$Y=P;lIaLn_sMn+`Q)2)@U?{k{@kMa?bhkWUsIoL{Pp$q^PKB9 z?WXC)&f01D>H6xhwVSrxud80(7oE3rsqv!Q>w}Vy_xYanTC#Z>YwR1w_;Vjk)$d#~ zToLv0sn3&b6Qb@FpSSg^j;R0pb?wn^aq%LK^!Y0uUoN}5(3xF*nwV}>1n9tk2N7Sc zt-K|_?M71ff!`ug1}FV?CiN+8+fXEat*}V)u_&3UuK z(^r-WxJq-JKJnh-A`fI+|FT2%HrFv7-_I})X-{Z@S@4dQT_%~l~ukXa`pWbf2 zA9Z(kdHJcAIt#wp&#VwF&RZV0?mg$Bl21oYM`Z4jO_^i&b<>3NcFXF-Rc>mq&UxB- z^2Z^&=_}19wCZowd~+j+UGJdqG0TeN%Jy>mCM)ijZl0rk^5e`b=2scFPClt_ zP&poUF4y69Y{dMTUm|vjU4HBES~#p`*)2yAx4O#H-**e|f4pS9e^Cv{ovsgEYF_GI z{l8OlxyCJrsw+ohf<5i~?tfM}p1z8AMeG&7x}V&SZzWDj*8Xmmko2alv-ro>`1M~C zw`8t=+_v$YOT6aQ?+l4Yx2>{fs?V>vwAp8hcIm53^EUCg3dQtLy}e(8mhZ9Ep0zZ1 z27Ba-3yxC`=_e~~Z@qGBUher!=i1-jbW^@xu?sw2e%aUDvM}R+-MgL7gT8WoIx>&< z%+2l5+w&Z|#6#6i`t4-uM~}JnRWI)!0i87Q^7it1RjW!5ajILK-^}~N=qlf$4CX}1 zN?G;dxi5bls`(G{dgP?JM#b}f-b%^&R=;T3z1#m^$NxXI#%t>JU+3k1@r(Y7yFHI_ z%_+0*t~<9iZkQXhKBr&pw&S)ckxw^|hgf@T3N$M&pAC(=2T`fjJl5NCo@;42j)|k7Vj{ujkiFn=6|uWx|l!HBy&=5-rld*HhZ|ka?()+~pIaI>wTiVe@xIg5o7eZ9&7Sbcb*ks4;B^NUcj&IU(^@(w z#%-7FNx#D0^Q+^I%h&I@yuS3A-EXtJMz)%nS?qyZ8aMRp>6^UsTuDvhzW>Ho*{T%AwYrZ)zJf^TUI4+%eb3WtToj0|vn+a?SHnr#%RlD7I z{AKWJuAgs`SILr-;Vzy00?u&javg5R%$Ps(OT|vH$!{HA3#HX8yVaPfynl}9r@Ni^ zH(t7~ZfO^s>#%oGfzrM&(_a0*GbLCg_dxHi8`)a#3OCuRfo1b@CG&9CWZu;=P{{QWrD;70-P1BEm7Y&+q z@t>;wC9K=3`g->Iz0drGc#__isx1ryw~dO|MTg<@tfuMYvV`;*<-TR#OJU0z%D|L^zmM;W)ato(YI-#%n@^g7X7>$l#&Tlf3z&MvXNwkQ2| zHlgRseP^m{f4x}jH~(5)?fu&Cmb07Bd`Mj->v9p)bhhcco_+aa>(77ZL!<+?t5{b) zwXL0d@R=YTM(qnMy z<5GWgI%n;@^}d#_7uif68LV4baXK`1HaLTecAr|AwQbctuGiqw^f|ON4awblGhX!4 zGD-PKcemWxX7oVY+wJ+exwChz`1GKe|JSrD2feBix7GdqwJ-J14TIWWUqWh^`OTg6 zb%Oo>KbuV}K0LU>6BT8@US8Ir>~`+SgP{ z)yA#T|5oFFg3bMaOWx;&aiAUaVjjO3_uo)m^~0@SZtkn;{x%<5zFzjXj|5F$Y%P0x z%R%wwbf>)ibuX7r5BmM0S@43)z=JAi!vZXa~U%5X0JD(zb!AkAw$eb3C_y6+S|JmR*vnY=_(JIvO^ru59)+d5^weO#| zQ@iaL)Vry2dA_k^{EX*DH`y-j{WGs!a`t`8Ls9vg)+Nq6opSE*nsUR+)89cYX;o9Z z$+-@?zE(5q_$OQe6^ATu_dD7dv)WEOSthW>&+(D*O}<5DTHoKZa`l4TwJm#>tU&yR z_dk8DX67-!dw(Wr{mLE3Pkxi#di>hE<@fLI+_35Ewdm-o^ViOR_84u*y1MG=6w9Ymf{o1E zzeT10FVbgvzvFS=yzPaB{>$XKzTM8>e}#2n+Syr=(_@M{je|S*xFkW_Siir&n=;uq zDAmvE<&rhWOZwk_U$K2t3Hv;oFBhEaj;>m3|G39^&R-Rg;&^zSg%L97l$L#jzMlbi98&tc(tyk(?_TLYWN>8hq-}{nz zzf|Bwr~15%+&v$Ut$h5Vr_Q$O%Z5V|BGXgUub+Nz*mdL3so03)A2)l(&rezY#p2IA zcft6y*gK3*s&;Q{y+NpJ8XwaRy95Qe5l0w!^*bJR`<`_EdyoVO_jTE`y3Ph zw$o=T<8`gu$u~BpT8D4E?Q_laP4UcAl{dcXsipt?m&a4I4$^R0oT)zfJ>w)$DcY#; z*Zf8LGKJ$tclnyGXl8&KLNYyEf8VKeltc2ZA(#3i?r*mHK~12BZF>#Yt$a~fr0dxS zDsv96n6v4r{+jG|&%U*HZZ~vplvX=8ajop~{L{;QjqOxo*KL|-{6O1%UwqxqRM2qs zxua9tc%`F2_03Y_k1upX+4y8Kz?-AZWP7$&e0(J1emeg%=zN=(^?%A=UQ#ukeG#<( zdGF_Q*8A8m#XD6+OYD^h0d-PEkqgRMSK%``r4Nxy#OvUhj18|I94rsN*WuJCD`%7j~XqUH8lNvY++aCx7~0+}fJG zRcY!CwpEHZw2Le&-%j4C=l50t7NJI;-+sN7Qj<9UbcpnaqSGw9~KVRF#dJ)kun zb1%q#St>qjx$kVTjQMArUe^ElQfBNpom+3mftC8q`ZfaMcT_G;-=1-0#l+8T zMlb5>o-XRpuWi}OcgE)VoMN4~=2ll%oqP59gmQm`yL@fQDt+_ZTUVksrFd=?`1fVG z{nArc*2UfiEwK4|EjmB)SNw+gb-z}AJ;2N#!7f`8u*zq5+1oXttHVOA{U(TdmYouf z7l9PflTUkWSHG#b?&Hp{mu6Oh21LGGJvY}neD+QQSi}lUn^-+3r$6x6^f*|wo>#G6 zYF%yH@0}A@Ds5Gg@#_80DVo8nL{}a$3*bE%H}Ukz?D=O(3$xgN@?{xZ<(rfuQg=f5$Al)i6E!*{%)Ar)}zHtoKFArS-_UGr3Rl%*Jv!J$9!u`*)i@Fx^wv_s+ZoXf=*ALW>aR}MZz30=@ zb=;qCC4yR2hhH1czoE4h8ntmh%dS72Tz;&5N7mGzCmPnvRQ`Wo{~vrB)=F-jIQbo~ zuC2|Et$aFl+C6d8Gf#iLUcbHMn(o}E*`Lpv`(JhZzxsamGP%E(PVasDIM7{Ibca^e zX^Zb=MZfMdw(2bV_hag#?!8Wr)-I{_d1}`2^48YuwQ9bzENT-^Oi*+zI~jSbq~=!J z?Jb#)k8HRa79DBjbtfORMRM!EU$3oG`)xj*$U0i`&HnG)CCrDu^tNCBbUS}P_$aun zX9|0JvlP82%`G~bZDqFBKVm2MYm1#dCDoJWK9ZUry}nz2-;I~2Z{6RU_VJAAgVQ0_ z9gBEdQlH4F-%g(Lap`sK``_z#tzT)j;JMeP$=B>}3r)Xa^m+yJj=Rw(zQ4O`UA+18 zE}`2FYAyoH&(!XTJHAr($!|#4Wg;lVXF^*_Gt=VMAMQK*S|)L=F`}h3)Nna)Fk{R-*T)nQ+KYl*ACG@rHQ0EVwbfu0M zP*fV-WjnNI*`#~V|IP!qkQG+lXRWj3{(WoVOS1>!)7PCh2aQ>(fkqPCBPy@opV-5H za#`fR+Y%q9svfrrz1L^`?nO+?)oAlqZ!E3Wu3Pv2(`o&=(bjThHxkd4$(Af+K3sBY zPmqq4=}*vH=$&PO=dZ4f-k!yLChgpunX9_{%Fd^Q#+K&ReoYEe+&p#WugBqC`rkek zt~#=5S&{USvOhmQuKc&+dp3Wvq3ry7ZI@&%q*BcGbnETX2nAK}>xDMmn^yYe#l>r& z+3(c7*Sqci|2)6aZePMdru9mZ*Hv$7W+!}eySy>87F=nbOkHw&@*9!sKeogbKR@St zS1#(m_TB80Nb&b{)=s@uKa5^a{AYFIx4mxuD&7}6C%swn_58LYhTA+Rt1Yc_f6-7l z_vq#9m0!#RuADrrR~$R%mgBzpwLV*$Rism&-G03l*71BgZKvLw8%F)|&$1C?2Hhv) z_aTiLNT{ouuTR_yYUxhB$JSJrR&?8E+i{C+%?rSJP_p&oUC(WIcHf4yio*ge1n1xO z($xlyEza@T-e|CXA6>#FoyC+(A`iGJI9Smk)wyW9guZtw~}KXGkdX|!GL ztdEL2O-|QaGw<8Q=s9yL}m33Xinene8zW(wCM$k+v?& zndHXm;nDK=HyOM4> z?v!>FoF6~W=z4nf|LKut*Iy^yYLMGKXYM1h+4pu`ocpr)`P}ktU+hmGia52Fx8<$K z^0I(a=k1PeX)ZE1lAM3CIQ8E@jb*$ka;IOHPT5#_RsFWreuf9DL-^_ZS{oXNw+Fgk35$Wdz`Y1cgDVDLGM1cUSxZ8E&R~FvW#84J1jp| z@mO#BQY`YhT45EmFS6wM!Pk{`mFYDd(-TtHu3o_y|LdW`ZU0|yVye7V%f;sHe!tH; zeYM528Od`#^-7z6+nX@^vjQV`$-6r@Ew9T}zX?q3H$HD;9GbrUU8~Kj9>;f+&U$a( znf9{&4`{h?`S&^f&*#_g3x3WgYxP8DHS3o-c|McX{rR@=x9(wmG%fml)W3aY$9g1J z-r4{2+3fxKA1cL;{{W5nbt&$h|FdO6RP7N#cZ=UI*M@gTekt2X*YLg@b8pfDN~)l`aJtp&oIVU^_?jTc;{BwcV7Q_ z-0Q#h{#Q;tyH#&9Z^qA}GOwf@e!CwDSsSMFae$VM7B4kj|Mux6woip#N!AyvrhnS( zpJuI5zS!be`m5qC_w_r@m^}zzH{omG@oD~ZeXm`8vU3j)*V)P|U;X-*g5z#q$$qEX z4RXqUen0oHd-UIbUuk)Knq=|LEsbY(d@0>Hf99hrd|ra_zYMu^*#jkJ{&~0L&SUPy zye|wF6?m<$p76YN+efbs{k!V})FdKS6&sB5Ga-&|I{&912dbKEL?p@GPwZ$*%|LkU7_vOLgUthhiDjILA ziQB#T|C8ixd3UXzH*KAl{^&?&W3nx%vtjjq_xpW~-#pg~Gw)-XSSjXJ{v}&Fuijv4 z^!cu3YfIci*fX^Yd-MPO`MJ{W*D3AwOI)Y_U0EG{e3|d;H2oRLuNxSd=X~Ctb@h~H zUS0RD8uRpL=e8&G@ynx)&Di_E)-}&J;V_sjn-7rlzeYwi9W!s~!-(K^&+T^ePwfucQ)xy0#-;3kRRghngJQXX4!;KRrvpX(S4!c0m_E3sMLc*rS0v{MSZ%)?}{>*XBzHY-~IQD$n>%Y$0q-b$fUTTS7leI$yZ!#MzRwq&`B`rr z*Zs2G{_n|4w|D!_wYnNR_3Out$K|}|YX9B;SAXx9p!B`>KB@Mo{`EGwuJPIMZqDYj zX2s|1v#zW-u>AUtuQOgAKe?^AYVM(5N&2^co+^#rm7L~x_xejq!-=WL7HGk)ewHaC0*1Y`kvrpDK>hv_-(>g&z3yI?+kf$%{FSfpoT|cO&Zsv-(QT>ZaYeR zbiK&uBiZ`(u4h$UvyDGkL#fGAmzsNP%|2KE)0pG4wQ<9`l@;E<*874buNpsnGJR#u zdf8vH$FplMC9Q6Omb4XH&C6pIK{evKxTkhuXByVm1ivZE*z2A(A@$-S*OiSj!OMI& zH+iq>xi>3tzt43?S;uMh|31%OS-duKv)a~fK8fP}Q{s0NBxdbhslNN&uGPi=y7l*2 ze9+uo^77G}#oNnxHcffey;tG+x+g|zMYGRtumAtg&pPwop313_Z#TW2eBLbhy!6(yC6=Mw3dgyEKi;i;KG*O6)%`ck@0Lvd`ti7Y`rpF**HteTwp%^Dv;Sk@ zmgXgrPdzHPo?Z6nvT*yyfBIc!3rhWGO}=LNBFSjm8LM6yOQWxLj_D?`8R!aVB6Eu0(mMVLTW)AAlt&~A>yO!MK+&*whDId#pe99trziIRwv$4>U%W$QhhGikQsksA532v z6lZO6mF-a1TA^Ezae#-@i(}(GW~bG7m|Z+|<5+|Ke4E#-5qkwzZ};_)4|y7V=hAPlf>@#nMV%ljsupR8iV+It>#F++0AyZeRTYn}J?zssqYn*FjYVHIynrpR%# z1*Jv0-L?PIckwQ{zIV#|pLh1OK7Asme|>Sao$$t`*Fg&m&)v`XTMIr`dUe=ZulsYp zR_@&1_~k)&p_jeiy61sgo6l4|{e1IyiM7X~z-9T{K)uG-G0Sc{nAw*{M{L}AT>I(b zle^kV^)6fTufBKmnc@8Vy+7w@cYuQ(Qdtdj9^u+l)DU_1R+Uem)J| z_L5un#KPNIS5_pl?%n$2@Av!jt^U`3zZ?E`hGV$R=QGADAHT>|FV@YAEfqL5N!7bZ zw0zt2SKWIZ)Ym_7N_=h>U4J6wnxo&XWzuFj887RLrz9Cl-haFO{=8S}$;bQ7O7{JJ zxWDY}t!vNc*U!^hzr7_y{I8^8l1tX!`;*_@-EEy(nzkW--_K*~Bd&e*EIB0=09v}x z3R?Uy`PhWdnL=}m*rtXZ2&u{2U-r9TU;j(yeLmZpRiu_KwRj#J{4vw@P!%YuGwx1) zvE(b?rWrkF*Pa&*kD2&u_P=)fKZ+OZXYcs^DtYI2M)PY)bMHK6sq9%KTX9u;{&~A) zw;hFg_w@X|HnT^6P4Ub;=DM<%uMcR-z-1g#_fF_M+7q`Sp%HW>?D9G1j(xpb zem_)u`PY}Xwyq9#OLqkwa#o`+_40x7U;dr5OtY?`M0|=DA;M_q*j*`v!DO zS;48X(D2|a7UkA^S{V~3O#8Rk&9~lx!`It$a!}4yFGUfR8}?E<$ELMKtzH|obODEI z=cFkLDhHjG_`c#_&(6j7tINJ`es-?%`>pD<+If>VpWE~MOby#R%j&di zb#*oK($~)1{Ji@6?OFWC=RJ1%(ImcS!57bO^Z(k^)qnds>F3cs)jvzHh&u z$vstfK6!6)?%%VwFJGTz`d+g9%DST~LT}Gr*Q*<{9a$awZDHp_m)qVw(dW5Z!!zszEqn~ zxAXkZ=})$#@PDaUR%EsP*|+x~6AwI&;67HR`|(Y|NjZtnUH7-2&3$WoA$WJ;nZG|u z{pD}&ug;Gy|EhRg^v=C(*7)98?F(ML-uLeHI{8CK!WI7=@&9w=-}Sn;*T3!mwR-=q z`s3F3Hp>6!y)O`3^S!*jeCNfvMxMgI9?Sp#v2}y$znO;xGWPtw`~F`2m&NjT|6kJo z8&oM_@^5pQqC@rl-}lU)E|cl5*DCyTY-5M^zS1}B^&i;3+yCBdADzTs{c&xoe$~b9 zb;aH7Cq6E`nY%q;-!XH;*89(Go?HIDzW?9Xr}KCBP!e@BjaMzx?jKtL)V;8O&@pq~~VZ^~`WSV)E_M$L-O*&#V8%8STGs{pWL6 z{LiWJmA3!mKF_-TrvA~%T-?Qnz=hSEVd7qmacRoa~RQJWy`poUwp6g*ZKWD@-MvRXt;>uiH!1hMxsGiR1>UEzBceF^N) zoPJ~48GXA8Kd3567_oLU)7@S{9iVE)6&2Hf589mfzFq$-yHJ&(jQ2%PkYha_FLNi z3xBlt_k*=5SCZ4VjIub(RaF3(>-FHGJj{9>tm_=l-$@@rn7lfL(%?QeJdpGTk_F&q2&W#fKbn*Q$o zmu2Q}?LSTIUoiDe3!me$-S@t(`{Zk*UwP8|lzsJ&KhN#!|DV18=j?C!pA+S8*8jRZ z-!1+)v)#9i{cr1kwAb(0V}B&+->)PUl#J~wpFeCbF8KA=k)rW9NQkv{*jd1x%1Pe>3ehjKQrH7`TzC) zf3F`K{P{b3|IgXKf9yXV|8-UP+x>4&?^|=DGhd;np38Wj;gauV@s_C;I&-7fLo1MX z+RMGqt{1)TYquq46aTb#jd49uWqs#$XU3oZyv?}W@M81V-RXI{_O|D~c9?!P z&p&eO@bwv=Cz-w%ET499#{D0^&9Wb7G}qm~{%6{o#)OLNbL5`e9;iK=n`>KO6JGuA zY)Q`cufNv)esH7w{GVxWnpGubKhLVFoqXPJ***KxH~XG#PvK|TzSMH&{gCbRMn4q%YLAJ`nd{W&h z?&omudaL+}4`5SBaBUBZNKLQGA6*jN`QQ+z#*bYem?Y8WYUtFih)qT2h&L(wv*~kZuJEZULWEvnf*b|reeeG_usc0KCD(P z$Y%QXFi)LX@&@xa2c2cn@0-^?&*$gaE&^t~w~=_(XpiJIIl&KdH_vmwVXRgNWBKjC z_N~G8K~w_&4Q9s&d1lvd?0#6q875j2>m>S4gH8RNY~$58y&N~%?=5gWoU@mI+r0g@ z20F8$CKt%vVE%T%;lOXD_3YmoUO(I+b%T2yh}CGDz|V8NW$pU*==1k0AJ|B6RQML? zZeWk$f6G{%ut(|3|F=@N=f7MU5%Qr_bLx&}i#a>W8A2zUt0l-+HH-Of{%Uul>fg5m z8%pxPR(?KE334DaH_GJfwciP^f8J(3 zd}$}x%5%)m!A@t{qyMQYfq#cw-|EJ_55O#tPYZl+{HogV_0L@PbIpwn*IBMJRUi0z zL2d*4F>R;+_t$OwJ2S4!l{J2PP^Wdr;m&II0Mp83rf&<)GcKBdLoA=4$NM?hN^AZ( zV5bXw*mvS}qwRw#i*;<@n!qfOPY;_WzJC4i+UIgP3w}1HIN=!XH;mVvs}IOYtmpV! zzx&v?^eRm;(VAE<)prVf>hEM7u0HAI1V_?kcqGjQTlwB*G?GRmX*4H|<|Nt{cgkw- z4*&JPf9sR+`9CM$=EmH;ckJp_`TJIVe~oQ(YQ8Bwx}jQBS@8A4wT+tg-kL~BneknBg z_2AX2++FT6=WX`>exz={>-Qb@{dM=me=f9mt{a{%XH&E5mi_IMKNcDaKi~ht)c@_g zy7S%V?wpl9VDY$DxK69OWS`WX8eFx+ikD@b-(W8!m{I?XZI{K>@4{n&Y#v}Up=Gdh{1+NyS|)1 zE9?KvygUC-xB9%&x=-2n`%Ird=l1KF_r^)ju!_I%&AJ2bH!^-yKAK-!^nK>`x}Tm2 z&v#3>?_o{KJZf0wV*fz-&4l^E^6|gEEibG8(eHQ7`Gd2amrTfR370w{GYv7T|4-ll znS1yD@7?;n8PB%6@%QFiJ++dPuMd_n%-g>|)}G(&R&jaOnee|~>hIV7$=_?_H+8N1 z8cXT75uKSVw~wC}e-rnoTmH`9_xbfj3hqh0_W$So-}QU` z`k$w-&lIk`qx>|IdH-|4*y-%Pl`OZIdD2 zyq|M76$%|+xzhHD)MMkA^t|r%cWckP|2zEddECEWum7$Tf090bhyK3qTXT=i;z*u! z^ZviJ^7sGlp1$|vEt$KEzOQ`0b@xs2BXb||92R+<@mT)f`ufekr`NxG?|aP2?2+%4 z^!fR@eauqHwsvK|W+lzt{L#Puef-;d-%RWG&sbcyERIk4i1M*79}b%x3a*w;{`*|M z`uMx~dp_u3?_c!=KN8rguzz)ML`0JlAXXqn__EjT8U>X@7rX?>F!B z&kt_gAF^imw=*YiEU5W5!TaQQiw~XGgU#;!eObTvw|4xeWv?%aup9C^S3eL;zTkh1 z&EVwGjrVIGY_{L`+q?eR#ahQB=6T_r7AO3V9lOe`By{Fh?KbySm(BhiPp?b+-lhI8 z&C^oc-TK;U7a5W4eha0Af7kt${4MeNeeJ8*-Rmpgow?sNf&XWRg`54ysw`!>kMp!o zsHP^{pMU(n?w9j!``@bd9}ldFy&tmgL!#Z!j+*bi5$tkrE!d^s8Xn(S^Qyl-{resJ zzmqDWx4u=JF5&YtK<_Bq4@G&~9Gkx%{=eDx!Sah_)$B~QJ|nhYI#zPq`OaM6k4bNf zxt0An@B4=f=S|o)mmXjh3iwdk==xH0Qq%h4NnHER&3qup8ZWx2r(;#s;Y9a?)0^~J z`oR0(^}OW|ykUZ6)~xZn=Qgc>xZVwV3S>=u5q>b-wItMtH!5>P`vGi;FSS6tO zV^zVDGPxhT@zx--lQwC9P4YfC{XX0%?}OoY#5I3#aqXT9aivJjPhOCV^jYKU4nv$8 zUXwlT{)eaLH6WKfH3vJf?L7CY`CR+7WZqq25vjRq6Sj5vgV%fJz&)?T8ZX*+rLSpy z^M&K}moC;{`e+ah@en8orZ=tsvE1aZx-1B_>9fW^mJfn>8{}2*gW)m4f7pcrFY}aRv->tp>p|)B# z%yS?wfCBTg^u9lB>v!mXlHS+UbpOLwTlqk6=kZOJSQu z4^}%Zd9eD>#9I*eUpEK^nFa|)sPT{1IUJncwEiQ%Cd^2XwDvkq)F9`FY1F>fwAuII zbx9$98>IygUJG`I?yE}sZoK{6>zV2Qo_sS~mzV$e)vNw|+4iRO=b0bsvc?~MeARe< z`{Q4_{Brm9wg0;DBStnN>3!$)zo*_A@BjKLONHzBE`!Gr@-qKc?tOMmxi5X*z1okH zn-}NV8&gW^Xjrry5V&BexoAT$vjLy&TUuG>Y^WXp6HT~T)zJxg+k8#>h zwY7@p&3j|h@^dy(6&temz(G;Ce!&CpgW)^VZT_G}@GOuxSP4ka(XXKJ(r1k~6y`gh z`0YbX7W?_`uHGXOTMnDOSa?yc*5%lP<;@SW_qRV^EZBB?ugZc4uj8ia%5P~}KWl2! z`dRK-{s+TbIa{NyzW6D-#hGbE<>l+?7mg=B32IvZdcm`}fPIpI7w5cP{8(ejsUHgs zOa5uh+c{k#eb2-{7k*kkUw+)0bD!VYu;0c^E3vq<0Rjm-TY>& z-kdKN`nB!v)#lINW#v7OUfkAbcS!!IVDdNHKQ)dKv+fHOzESMEEBeEt!d=bwQHPGA zSdVg2tU~;kjUjrH_D7UwIR1T6(<0b3{~4PdoAmbi#uDyFxHhJ|@=iW+d_w;0$a8E4 zuLJ&v(%gjom_q>0g{&DB`hl@X#>3>VSrg3WX@}M&Z&MZAL z>t}FN(%VGkg2MTXSCSUrRklq!do$y>*It?TYI25c&wP*Z-{$at+neP3=Vo`d;897z zZ!3MRuRmfJYPx)s(a2k3Va-W*mPrN8dv7c@vrY27+0fGYGT{HViQjGp)umWnS(d9g zS^w!~f02An>F`dAZ=HEdBb+;2rH@YPUi?;FnEmI;8#}5TT$1kQ9G@jGHr#wl)4X?2IZpIFtn_APq!)vdVcT)XKS`zxwBI#1b?Stt6c zg?-vMrT2p~Q^(OAGxB0m85s0aQXSelQc%Sdi*n9fs1B+=ZWS>d}KC9X|*Z-K? z{F>W^UrtPa)WdNrs9(`-Q?cg8pgF4X9v0#ML9r}zSx7rXeX{=3#SgMq9RKLg8h_j* zsds^1*VgTKzuLBhX)5v^fyAY2(9DQTA1?;hpU<+cpHod$R<=15al4S^yY>$Qd*Rhh z>t~bLii^8EuW7w$Xt9zwYrLrl zX3S~)Saq^gAh6X@Bq;UI1qrM8bhDl9g~xWE;GaAHi%sE${2!|p9N7EYV49t+_n%&d z`t!@|VqF~_wEEC;!6x=jRE7(>EE?WMA1I@v56)ZCetj6Q8i? zfwop${*CtsOx7g+6*kl8i>ouZ)?(0@q$)r0w2&E>@rm|FFOJ#rm~PW6bXfP$E?9b( zZrF#?IFDVf?}P6b?_ch|VxLI*jl~hwH#qF?q#Lf<8|$}EAU!K@Tkes_s<j&`5JY*)lXEE=LV-AnJN+okP zeCT)+Ame@1t8m$)hSC)`UIflQV&Ck+KUe&;_zaC7UF%ku&k`=NTa);Apa~7YEfdUU zDGgk+_wBm(id&Q#uNb7?+W4&_`NL(g^(je94Y~Hcvg@&BjW-nrrS}_;zpmQrCer=k zLPu?j=!eNW3Y9KyzyBe0)z(w;T>HWzuep0_{-`>l6sP%PRppXzA~m5i0#=0f&b#ku z&9yJ9V(t-dXl=LeTuu@HcdQD<3UrTF=FGXE%TH%ge?)%Jtnce102GOk!eX ze4@OjVFzQaN)FG#L*|bhWR9|Rv}sJ=;K;w!V@60$z?u>}VRwtB8sn{zO3<3^!v||0 zfpDw%oCyz>JNK7#Do@UDlk9mZn0=0Ijj=%bvVYFCC;7SGzF7D<=_ivgYkc6xs>P=L z$OW4(hp)Gw}Xl{j#Eo-H2hkc)3Wf`v`vnMDp}JXdQq=X6O#A*aK}eNaUHnw ziqJflaI9&8#MOI28=Xpx%rxX#$8Y~D@!`?;^Deaf@Vcb%ggK}3zQd%8n>zyPIkY}z#4x&HU2I)Yy4{M%()Yq*3W9kXv8dju)6KK z=bjd)RXy@j&d*<;QTuLiu0s6h!q1cEsq<+eO1I|f?@2Akw%CVjss#u**d5~H@W0@G z=$L>Ghl)a95;IG{6z>}g+JjU!X_;w+S|6_KGCc6(pZojB#b<_JvZ{NU)-MRjzv2!q0~7sPdzb!6 zSi_mfbkxhv=;yZ$f^{AYjypx91NKkpHMnvk$V{Wp<*iZ7%WV+{uU9I*6x&O%40J4S z!dC`P_~Fs?Jnaxi;akD%Q*1}P3fYXsSdOmvHmyr^)#QziKQ(?>trxy7KI=t-5Nkld z?T#+FZdRLuu@`*W!EPKF$gFP}+N0yuY)dY5j4QI?e4|`?4-^?aPu|Y0DZfswR>Z zy7+ndg}$csQgP}Zg}7E4)n)L^U2i=5&S8tku}|91`B%-eSn*(W)1n8f4>dlTZe*nx zck`n2@g81*&l4(ila{szsYoDY9$Oa0C(4ucjbgQ?_sG9E9I|iaucim;sf%@woV+Uk z$U?=Z%;@VyqP~gj;os6ohs>%PElYzS39Jt5Ll7 z#yR!m#s2%=T2wvpE_7qbU3pwU`R2|k5t`>F>8s3HU4Pr-cTQhsr|7E5C#Qc3{9ti;E=4f_t~WPEpjx$sCc=d5b3 zeOhl)+h;6&C$iA&jj~f?sd3?BmqqdWAHLr6FWYj_gKXWYb51%R4Ci&DG#lNT-zg%j z!J#0Z$l9X*LOC&+LySd8z1BcvmHy2T;>BTj`nqS{Aib}e@PTU@u`AG`9G3zZvd8atcTuc+92an6Fz ziM+4*OF5;ze;$kwKE%>BwI=1$+eGC*6BwF`G|d*&X-X%q*tj$&0MzK-aVd9W)B4X& zmvpP<|C;yP*4F9kQj5cKM{gZ=`|;4OJMit>qED?B!Nr?%mCs%JtQ7UW$jqWoHOqac z+mxMgInO6=yr_P^Ovd)pQVZp#Bkn>r=E80r+5Hj0W(r|l#xpi5Xt-_N90E?1UE933r%&EdBR@XBKW||&P!&B_c8xNY)74*w@2LG`ugJP*hdyD z-jEEXd{`%)xn(J&(TyH$iTjx^Z)p4Ke`A3~6+GHp^t^9qoKcYPS}gtD;L43%M;Ldu z{r1Uy0WI_VTkXEuey^@-dF5T$X4|#3z4yc6TCv5qZa;m(UAXL7+HJQvOP{-P?K>xF zwE6S*IdU&AuU;PZy0**M?ed+)7Kh!UUkNG;6&oj}bVdaKbXp_w{J`SeCAHfWj(*j1 zyLkAX&%P=BP3srR9k&;)k-gkuw?waN>x#Qyx%Oo(+ju-_?KT1JbmidP+vbP-6|D(n z4f_!KP{W#QpWh6XyiYIW91dRRye#@w>qk_e;qsus523+6KBysVK>yy$q$EzO7DK0_H&`x`_ba$Cv!#JNyJx?rv6 zO%CT?-PC62c*K{0NO1ik7)?y}V2yvyGxO%pYQO$3FRuo#{%Utra&hLnz&VMFbuV`a zcJ7>Mu*qf3${NM6uHpw5%`VwRPk2-%zW7CAzFIsedj#}9p3k+fFVjUnNc?Ejm3LLF z@urt=1b+xMKH0Hk-Gjq_eAZ9;(D6zr@UppYYLTM!QT{Wwr&PtY&*yh-WiQ{iIPsli znxuU@|B1s_-b_0w{udS#Ii2tRa5f4@MMHQscO z-y>D*ebIn};jFCh?zV6I@-p)GzyFcaQ*VEs`z>85)rQMIsBnw?x5fP(DvCYU zHuHUzf8~u@j6L>~i@Q9_{rO?8Yx1vz%%;Jsm=jNKA9nkp$jI_ED97P%klCStWbc~` zEQGe6E?9ay30%!Ye<3DQY`OOocQpfTuL)e2+qf*pVU0+-L9$~&PgefQh=o>?(x6Q7 z*{ZO1VJDwjAOq{x-W4wr?SFDeTP_T>p5L>hG3n&di|?*Y5nx}(Wcx@W>+-)aP$L`M zoXcId)V=I&OwiZw()*a6ex0^bwsXZHiH+eON_+qOVm0)>t9i&-`J3Rw19!adJh^D< zaPWHR&G7F|2d}^Kic(+lVD+v8+B z3qP$kpS0~UzUNx^;?I)joy}bPv@{Cd+x0Bbdks9PY@~5W8GmJLe;>=iR(Nwyl!edrP&? zXP;!6!7|W{+J&RY;sRJdjL)FZyk#v48^sNH9vyzp3}0B4oa#!C{PCU%;JTeHR=EV{Eo&#>=E z)XZBGdmph^1s=Q}vDJP5&gYf9AEfumef)CuvEqUUuRj*VpIP0sUTP~DeI$(^s|ptU zSlZ*qG3QU)df|1P4?COITPI9=;CD#LNr^b({Y2P2+6REj+LbT?p4T*)D>%s6= z=Y!$Bi{C61Slpbj#Nw0mKCNG091M^0$kny;uF{{YZ}z8ceNf*=cm6a>>0CyiW$nLy ze3agI>{kE&PTRTs)+8r)xkc$!Eq|UI;oZKUEkUMtR?qSiZV#>a=KZ|8e4p{Le!k!} zoyX;NsD0ZYs8~E-R@LnDr=m}DIX~PyEU75=kt5h7->B|}oAq=H?~U7*GBnq&l06#v zNW#aoe$reY`|l^WOR8Nno2-9S(yVCfPWg??KDD+Kf6bT9oG%-(EUEQXN=|?s*S>Sr z(FeoNwy=t{XES`wYR|vs#aZZ}aM`&+ti&Sk^^X$u*~Bpkz;= z{KcOej`COEu9Yx5!Tepz{T#??RX?S7uS-ERzP5_iuplX$8F>#&$4FKdqwI1&)NaZ(3cQKtqd?LXi8 z=$BE2h=XIUveuur?U2?mKexuB^S8`E1(2!gk;cCFg2w}9Z}ZR+*6uyo(RRaacIJ~s z541IGZgph#AonM~uE=|=4apT!nZJG)3I=@my5ofYlkkJ#yisIyUO+8x&?u++5gD$1 zemm4!)VcP(Ylv*J=Ink^m_BKrcE=R?$|CLbIJK-(C&~mPuvfN-(@sZ?}+?e zb3-|i>8HlmR*Mtv$K2HTK26>@QS$O({#za$ZJ;5uhxb5L`9fAuRX!he$c%p(c-%!! z{maVtJMUjs4vFtFeiOI`G!Xi3v&7YVdg}2V#-`@C%^vA+=Hj0RFzTgX9zg4d)w@Zn zYiA!nu;#A2ETR`itkW#|H*!%{0k(57dwMWL>w5FFF`uY$lYP!0T~W zvn-*lPRQI(<=5T!^X=xf?TZs+WR2I>dKRL^wJ!^VN$uIg`zPlP{I34tv*bu4Q%8u* z+x9mvl$AU=R77fc*Bbv@(w>|;=l_z&9jpJmI|M4YlwVa^#pnF+x0*Jq*S^Z&^v#B^ zYn=bK|C%Jv8lU|3_$Eoo>K#3AQ1UH({;zYh_S-pb zOoP_e4Li@TyF9D5(DLWGwg|rf{o@Lc1d}uFrTp2@`{BwxjcanByB_s$6z}EOxy66_ z=GsrW)~_b&AC(k*l2vS<3dWkuSJszkkiK=0hSsX8*hybBlk!krFp+d?>eU*6lQ@#V;R5 zY+UhRHPh|ZNcMyNX?_>BhkkuAQLoTN-)Vo^j>{6C1Y6b8ET!M>bT6D{(QsTq`)A+> z(K&tQN&e3di`lL?e`A5+6Xiz=(j|2(W2$~Cs!1C18!F06zO&5{N%QV#6S}UnYpTk! zmA{R=9Ulq=-fn%TX?Xyc_BQy92DoxQqluJ2_K~QwOx~}zjSz`k>A1V;0&qral+iHdFR|WsKlK*BYA4Ow~V0n znfR{c6W_nR<}h50S&O+IYU$yXa<)_A+vNCs`l+SU<&!1}eijh^G!ayCCT?rV(AX$; zQCG&$_o{r+*&7naj-3Cgds#VT|C|Jdb*_@{4Acs%`?5nPL@nF**;MkpKzWz(n*e># zK*cnBCOOy6Gb9v9nABobRD|^y4uE}j(Y@s~OZmZ>{# zxC}H&^zky^;yJ3;(}lE;Mt*8dJM%?=yGbHTD@=ej71Er@KKiv)&1!}VqsWzQU$lA@ zt{2nFM#&o$7wqC^sIF5{0Z-VSa96t)^H!vW^>pFlT}Ld0 za3nr8}4K=IiW7BUAXkKAY143sxMj7EtJA$ zRBNWmJ~KC5Y{CBS?at|^SSz0V+44N^#sYAgeCzH-_4B?=I32W6$@qk7u=S^j8z;Ur z#$G)_db;|{Xf&fl`ZPIs^vC_sqMnS7+>|U(OWf*+$+1lgtInDvFYamFd0c6g&zd{R zbMlX|8J@i1(ZdLhxJcoP{*R7%9t=Ozl$*!3FD$N{HNLcwjJ7&-AVTv0+{W+UKg{&# z1TSP@XmoMva!S>un&T%L-kz@OZ!RhktT*!kUE(6cj|+ImCqy ziJ(?=J6b%rYNkXe&hI{{+SFQOwDHoOMW0(GJEm8C@tAJGcW}~N5n~}y2maIU87k`3we);6=W0WM90?x9-@@Ke_$yi6RY&r$K*soYU*S zt$e@c=WAh+>}UR*pwU#08Nc6Ht-UEeee(O9j;AbNi+Ge!))~DuT(5Di!{B=N1n=J^ zmbcaKZ(A()GiZ*W<2tkN%J3@g$}`dQV8jgVR?rNsYwgOi0=q?v+W$UL&Uw-j_O`}I zNvca#+4cHW-_q8>O3I%-FdT7zCNu+K2+Th2;weMPF z_~uEZ?J^7Va5#9Kt2@g}h@_p62dqE?4e7CGy-3^87@-Ji|Ld&MBys=bYtZh((a1xK zq|wO3mik6>9=4)mH0NO}_eYCOv?2vuTaDIv;9x+jv`6baYz?Q;1`F1P6Zs96fA(@Q WK`B=LJberd3=E#GelF{r5}E)bd472S literal 0 HcmV?d00001 diff --git a/doc/quadrature/wavelet_transforms.qbk b/doc/quadrature/wavelet_transforms.qbk index 563a7379e..53bc7c57b 100644 --- a/doc/quadrature/wavelet_transforms.qbk +++ b/doc/quadrature/wavelet_transforms.qbk @@ -28,11 +28,10 @@ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) auto operator()(Real s, Real t)->decltype(std::declval()(std::declval())) const; }; - } ``` -Wavelet transforms compute +The wavelet transform of a function /f/ with respect to a wavelet \u03C8 is [$../graphs/wavelet_transform_definition.svg] @@ -40,17 +39,24 @@ For compactly supported Daubechies wavelets, the bounds can always be taken as f [$../graphs/daubechies_wavelet_transform_definition.svg] -which gives definies the /s=0/ case. +which also defines the /s/=0 case. + +The code provided by Boost merely forwards a lambda to the trapezoidal quadrature routine, which converges quickly due to the Euler-Maclaurin summation formula. +However, the convergence is not as rapid as for infinitely differentiable functions, so the default tolerances are modified. A basic usage is auto psi = daubechies_wavelet(); auto f = [](double x) { - return sin(2/x); + return sin(1/x); }; auto Wf = daubechies_wavelet_transform(f, psi); - auto z = Wf(0.8, 7.2); + double w = Wf(0.8, 7.2); + +An image from this function is shown below. + +[$../graphs/scalogram_sin1t_light.png] + [endsect] [/section:wavelet_transforms] - diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index 944a3d0c4..188ac56de 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -183,17 +183,17 @@ void test_linear() while (i++ < samples) { CHECK_ULP_CLOSE(Real(tlo), csh(tlo), 2); - CHECK_ULP_CLOSE(Real(thi), csh(thi), 2); + CHECK_ULP_CLOSE(Real(thi), csh(thi), 4); CHECK_ULP_CLOSE(Real(tlo), csh_aos(tlo), 2); - CHECK_ULP_CLOSE(Real(thi), csh_aos(thi), 2); + CHECK_ULP_CLOSE(Real(thi), csh_aos(thi), 4); CHECK_ULP_CLOSE(Real(1), csh.prime(tlo), 2); - CHECK_ULP_CLOSE(Real(1), csh.prime(thi), 500); + CHECK_ULP_CLOSE(Real(1), csh.prime(thi), 512); CHECK_ULP_CLOSE(Real(1), csh_aos.prime(tlo), 2); - CHECK_ULP_CLOSE(Real(1), csh_aos.prime(thi), 500); + CHECK_ULP_CLOSE(Real(1), csh_aos.prime(thi), 512); CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(tlo), std::numeric_limits::epsilon()); - CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(thi), 400*std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(thi), 800*std::numeric_limits::epsilon()); CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(tlo), std::numeric_limits::epsilon()); - CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(thi), 400*std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(thi), 800*std::numeric_limits::epsilon()); tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); thi = boost::math::nextafter(thi, std::numeric_limits::lowest()); From 8b3393091a3a0ac46f4c1ada373cc2dddc2397b0 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Mon, 23 Mar 2020 18:23:32 +0000 Subject: [PATCH 103/104] Daubechies: More code simplification. --- .../special_functions/daubechies_scaling.hpp | 294 ++++------- .../special_functions/daubechies_wavelet.hpp | 481 +++++++----------- test/daubechies_scaling_test.cpp | 4 +- test/daubechies_wavelet_test.cpp | 1 + 4 files changed, 303 insertions(+), 477 deletions(-) diff --git a/include/boost/math/special_functions/daubechies_scaling.hpp b/include/boost/math/special_functions/daubechies_scaling.hpp index 4144469df..e9cf67872 100644 --- a/include/boost/math/special_functions/daubechies_scaling.hpp +++ b/include/boost/math/special_functions/daubechies_scaling.hpp @@ -298,147 +298,138 @@ struct daubechies_eval_type } }; +struct null_interpolator +{ + template + T operator()(const T&) + { + return 1; + } +}; + } // namespace detail template class daubechies_scaling { + // + // Some type manipulation so we know the type of the interpolator, and the vector type it requires: + // + typedef std::vector> vector_type; + // + // List our interpolators: + // + typedef std::tuple< + detail::null_interpolator, detail::matched_holder_aos, detail::linear_interpolation_aos, + interpolators::detail::cardinal_cubic_hermite_detail_aos, interpolators::detail::cardinal_quintic_hermite_detail_aos, + interpolators::detail::cardinal_septic_hermite_detail_aos > interpolator_list; + // + // Select the one we need: + // + typedef std::tuple_element_t< + p == 1 ? 0 : + p == 2 ? 1 : + p == 3 ? 2 : + p <= 5 ? 3 : + p <= 9 ? 4 : 5, interpolator_list> interpolator_type; + public: - daubechies_scaling(int grid_refinements = -1) - { - static_assert(p < 20, "Daubechies scaling functions are only implemented for p < 20."); - static_assert(p > 0, "Daubechies scaling functions must have at least 1 vanishing moment."); - if constexpr (p == 1) - { - return; - } - else { - if (grid_refinements < 0) - { + daubechies_scaling(int grid_refinements = -1) + { + static_assert(p < 20, "Daubechies scaling functions are only implemented for p < 20."); + static_assert(p > 0, "Daubechies scaling functions must have at least 1 vanishing moment."); + if constexpr (p == 1) + { + return; + } + else { + if (grid_refinements < 0) + { if (std::is_same_v) { - if (grid_refinements == -2) - { - // Control absolute error: - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3}; - grid_refinements = r[p]; - } - else - { - // Control relative error: - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11}; - grid_refinements = r[p]; - } + if (grid_refinements == -2) + { + // Control absolute error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{ -1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3 }; + grid_refinements = r[p]; + } + else + { + // Control relative error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{ -1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11 }; + grid_refinements = r[p]; + } } else if (std::is_same_v) { - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18}; - grid_refinements = r[p]; + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{ -1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 19, 18, 18, 18, 18, 18, 18 }; + grid_refinements = r[p]; } else { - grid_refinements = 21; + grid_refinements = 21; } - } + } - // Compute the refined grid: - // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. - std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { + // Compute the refined grid: + // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. + std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: auto v = daubechies_scaling_dyadic_grid::type, p, 0>(grid_refinements); return detail::daubechies_eval_type::vector_cast(v); - }); - // Compute the derivative of the refined grid: - std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { - auto v = daubechies_scaling_dyadic_grid::type, p, 1>(grid_refinements); - return detail::daubechies_eval_type::vector_cast(v); - }); + }); + // Compute the derivative of the refined grid: + std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { + auto v = daubechies_scaling_dyadic_grid::type, p, 1>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); - // if necessary, compute the second and third derivative: - std::vector d2ydx2; - std::vector d3ydx3; - if constexpr (p >= 6) { + // if necessary, compute the second and third derivative: + std::vector d2ydx2; + std::vector d3ydx3; + if constexpr (p >= 6) { std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { auto v = daubechies_scaling_dyadic_grid::type, p, 2>(grid_refinements); return detail::daubechies_eval_type::vector_cast(v); - }); + }); if constexpr (p >= 10) { - std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { - auto v = daubechies_scaling_dyadic_grid::type, p, 3>(grid_refinements); - return detail::daubechies_eval_type::vector_cast(v); - }); - d3ydx3 = t4.get(); + std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { + auto v = daubechies_scaling_dyadic_grid::type, p, 3>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); + d3ydx3 = t4.get(); } d2ydx2 = t3.get(); - } + } - auto y = t0.get(); - auto dydx = t1.get(); + auto y = t0.get(); + auto dydx = t1.get(); - if constexpr (p==2) - { - std::vector> data(y.size()); + if constexpr (p >= 2) + { + vector_type data(y.size()); for (size_t i = 0; i < y.size(); ++i) { - data[i][0] = y[i]; - data[i][1] = dydx[i]; + data[i][0] = y[i]; + data[i][1] = dydx[i]; + if constexpr (p >= 6) + data[i][2] = d2ydx2[i]; + if constexpr (p >= 10) + data[i][3] = d3ydx3[i]; } - m_mh = std::make_shared>>>(std::move(data), grid_refinements, Real(0)); - } - if constexpr (p==3) - { - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - } - m_lin = std::make_shared>>>(std::move(data), grid_refinements, Real(0)); - } - if constexpr (p == 4 || p == 5) - { - Real dx = Real(1)/(1 << grid_refinements); - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - } - m_cbh = std::make_shared>>>(std::move(data), Real(0), dx); - } - if constexpr (p >= 6 && p <= 9) - { - Real dx = Real(1)/(1 << grid_refinements); - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - data[i][2] = d2ydx2[i]; - } - - m_qh = std::make_shared>>>(std::move(data), Real(0), dx); - } - if constexpr (p >= 10) - { - Real dx = Real(1)/(1 << grid_refinements); - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - data[i][2] = d2ydx2[i]; - data[i][3] = d3ydx3[i]; - } - m_sh = std::make_shared>>>(std::move(data), Real(0), dx); - } - } - } - + if constexpr (p <= 3) + m_interpolator = std::make_shared(std::move(data), grid_refinements, Real(0)); + else + m_interpolator = std::make_shared(std::move(data), Real(0), Real(1) / (1 << grid_refinements)); + } + else + m_interpolator = std::make_shared(); + } + } inline Real operator()(Real x) const { @@ -446,30 +437,7 @@ public: { return 0; } - if constexpr (p==1) - { - return Real(1); - } - if constexpr (p==2) - { - return m_mh->operator()(x); - } - if constexpr (p==3) - { - return m_lin->operator()(x); - } - if constexpr (p==4 || p ==5) - { - return m_cbh->unchecked_evaluation(x); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->unchecked_evaluation(x); - } - if constexpr (p >= 10) - { - return m_sh->unchecked_evaluation(x); - } + return (*m_interpolator)(x); } inline Real prime(Real x) const @@ -479,22 +447,7 @@ public: { return 0; } - if constexpr (p == 3) - { - return m_lin->prime(x); - } - if constexpr (p == 4 || p == 5) - { - return m_cbh->unchecked_prime(x); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->unchecked_prime(x); - } - if constexpr (p >= 10) - { - return m_sh->unchecked_prime(x); - } + return m_interpolator->prime(x); } inline Real double_prime(Real x) const @@ -504,14 +457,7 @@ public: { return Real(0); } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->unchecked_double_prime(x); - } - if constexpr (p >= 10) - { - return m_sh->unchecked_double_prime(x); - } + return m_interpolator->double_prime(x); } std::pair support() const @@ -521,41 +467,11 @@ public: int64_t bytes() const { - if constexpr (p==2) - { - return m_mh->bytes() + sizeof(m_mh); - } - if constexpr (p == 3) - { - return m_lin->bytes() + sizeof(m_lin); - } - if constexpr (p == 4 || p == 5) - { - return m_cbh->bytes() + sizeof(m_cbh); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->bytes() + sizeof(m_qh); - } - if constexpr (p >= 10) - { - return m_sh->bytes() + sizeof(m_sh); - } - - return -1; + return m_interpolator->bytes() + sizeof(m_interpolator); } private: - // Need this for p = 2: - std::shared_ptr>>> m_mh; - // Need this for p = 3: - std::shared_ptr>>> m_lin; - // Need this for p = 4,5: - std::shared_ptr>>> m_cbh; - // Need this for p = 6,7,8,9: - std::shared_ptr>>> m_qh; - // Need this for p >= 10: - std::shared_ptr>>> m_sh; + std::shared_ptr m_interpolator; }; } diff --git a/include/boost/math/special_functions/daubechies_wavelet.hpp b/include/boost/math/special_functions/daubechies_wavelet.hpp index cbb31b3d9..6c7af4659 100644 --- a/include/boost/math/special_functions/daubechies_wavelet.hpp +++ b/include/boost/math/special_functions/daubechies_wavelet.hpp @@ -23,324 +23,231 @@ namespace boost::math { -template -std::vector daubechies_wavelet_dyadic_grid(int64_t j_max) -{ - if (j_max == 0) - { - throw std::domain_error("The wavelet dyadic grid is refined from the scaling integer grid, so its minimum amount of data is half integer widths."); - } - auto phijk = daubechies_scaling_dyadic_grid(j_max-1); - //psi_j[l] = psi(-p+1 + l/2^j) = \sum_{k=0}^{2p-1} (-1)^k c_k \phi(1-2p+k + l/2^{j-1}) - //For derivatives just map c_k -> 2^order c_k. - auto d = boost::math::filters::daubechies_scaling_filter(); - Real scale = boost::math::constants::root_two()*(1 << order); - for (size_t i = 0; i < d.size(); ++i) - { - d[i] *= scale; - if (!(i & 1)) - { + template + std::vector daubechies_wavelet_dyadic_grid(int64_t j_max) + { + if (j_max == 0) + { + throw std::domain_error("The wavelet dyadic grid is refined from the scaling integer grid, so its minimum amount of data is half integer widths."); + } + auto phijk = daubechies_scaling_dyadic_grid(j_max - 1); + //psi_j[l] = psi(-p+1 + l/2^j) = \sum_{k=0}^{2p-1} (-1)^k c_k \phi(1-2p+k + l/2^{j-1}) + //For derivatives just map c_k -> 2^order c_k. + auto d = boost::math::filters::daubechies_scaling_filter(); + Real scale = boost::math::constants::root_two() * (1 << order); + for (size_t i = 0; i < d.size(); ++i) + { + d[i] *= scale; + if (!(i & 1)) + { d[i] = -d[i]; - } - } + } + } - std::vector v(2*p + (2*p-1)*((int64_t(1) <::quiet_NaN()); - v[0] = 0; - v[v.size()-1] = 0; + std::vector v(2 * p + (2 * p - 1) * ((int64_t(1) << j_max) - 1), std::numeric_limits::quiet_NaN()); + v[0] = 0; + v[v.size() - 1] = 0; - for (int64_t l = 1; l < static_cast(v.size() - 1); ++l) - { - Real term = 0; - for (int64_t k = 0; k < static_cast(d.size()); ++k) - { - int64_t idx = (int64_t(1) << (j_max-1))*(1 - 2*p + k) + l; + for (int64_t l = 1; l < static_cast(v.size() - 1); ++l) + { + Real term = 0; + for (int64_t k = 0; k < static_cast(d.size()); ++k) + { + int64_t idx = (int64_t(1) << (j_max - 1)) * (1 - 2 * p + k) + l; if (idx < 0 || idx >= static_cast(phijk.size())) { - continue; + continue; } - term += d[k]*phijk[idx]; - } - v[l] = term; - } + term += d[k] * phijk[idx]; + } + v[l] = term; + } - return v; -} + return v; + } -template -class daubechies_wavelet { -public: - daubechies_wavelet(int grid_refinements = -1) - { - static_assert(p < 20, "Daubechies wavelets are only implemented for p < 20."); - static_assert(p > 0, "Daubechies wavelets must have at least 1 vanishing moment."); - if (grid_refinements == 0) - { + template + class daubechies_wavelet { + // + // Some type manipulation so we know the type of the interpolator, and the vector type it requires: + // + typedef std::vector < std::array < Real, p < 6 ? 2 : p < 10 ? 3 : 4>> vector_type; + // + // List our interpolators: + // + typedef std::tuple< + detail::null_interpolator, detail::matched_holder_aos, detail::linear_interpolation_aos, + interpolators::detail::cardinal_cubic_hermite_detail_aos, interpolators::detail::cardinal_quintic_hermite_detail_aos, + interpolators::detail::cardinal_septic_hermite_detail_aos > interpolator_list; + // + // Select the one we need: + // + typedef std::tuple_element_t< + p == 1 ? 0 : + p == 2 ? 1 : + p == 3 ? 2 : + p <= 5 ? 3 : + p <= 9 ? 4 : 5, interpolator_list> interpolator_type; + public: + daubechies_wavelet(int grid_refinements = -1) + { + static_assert(p < 20, "Daubechies wavelets are only implemented for p < 20."); + static_assert(p > 0, "Daubechies wavelets must have at least 1 vanishing moment."); + if (grid_refinements == 0) + { throw std::domain_error("The wavelet requires at least 1 grid refinement."); - } - if constexpr (p == 1) - { + } + if constexpr (p == 1) + { return; - } - else - { - if (grid_refinements < 0) - { - if (std::is_same_v) + } + else + { + if (grid_refinements < 0) { - if (grid_refinements == -2) - { - // Control absolute error: - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3}; - grid_refinements = r[p]; - } - else - { - // Control relative error: - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11}; - grid_refinements = r[p]; - } + if (std::is_same_v) + { + if (grid_refinements == -2) + { + // Control absolute error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{ -1, -1, 18, 19, 16, 11, 8, 7, 7, 7, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3 }; + grid_refinements = r[p]; + } + else + { + // Control relative error: + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{ -1, -1, 21, 21, 21, 17, 16, 15, 14, 13, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11 }; + grid_refinements = r[p]; + } + } + else if (std::is_same_v) + { + // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 + std::array r{ -1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 18, 18, 18, 18, 18, 18, 18 }; + grid_refinements = r[p]; + } + else + { + grid_refinements = 21; + } } - else if (std::is_same_v) + + // Compute the refined grid: + // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. + std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { + // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: + auto v = daubechies_wavelet_dyadic_grid::type, p, 0>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); + // Compute the derivative of the refined grid: + std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { + auto v = daubechies_wavelet_dyadic_grid::type, p, 1>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); + + // if necessary, compute the second and third derivative: + std::vector d2ydx2; + std::vector d3ydx3; + if constexpr (p >= 6) { + std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { + auto v = daubechies_wavelet_dyadic_grid::type, p, 2>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); + + if constexpr (p >= 10) { + std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { + auto v = daubechies_wavelet_dyadic_grid::type, p, 3>(grid_refinements); + return detail::daubechies_eval_type::vector_cast(v); + }); + d3ydx3 = t4.get(); + } + d2ydx2 = t3.get(); + } + + + auto y = t0.get(); + auto dydx = t1.get(); + + if constexpr (p >= 2) { - // p= 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 - std::array r{-1, -1, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 19, 18, 18, 18, 18, 18, 18, 18}; - grid_refinements = r[p]; + vector_type data(y.size()); + for (size_t i = 0; i < y.size(); ++i) + { + data[i][0] = y[i]; + data[i][1] = dydx[i]; + if constexpr (p >= 6) + data[i][2] = d2ydx2[i]; + if constexpr (p >= 10) + data[i][3] = d3ydx3[i]; + } + if constexpr (p <= 3) + m_interpolator = std::make_shared(std::move(data), grid_refinements, Real(-p + 1)); + else + m_interpolator = std::make_shared(std::move(data), Real(-p + 1), Real(1) / (1 << grid_refinements)); } else - { - grid_refinements = 21; - } - } - - // Compute the refined grid: - // In fact for float precision I know the grid must be computed in double precision and then cast back down, or else parts of the support are systematically inaccurate. - std::future> t0 = std::async(std::launch::async, [&grid_refinements]() { - // Computing in higher precision and downcasting is essential for 1ULP evaluation in float precision: - auto v = daubechies_wavelet_dyadic_grid::type, p, 0>(grid_refinements); - return detail::daubechies_eval_type::vector_cast(v); - }); - // Compute the derivative of the refined grid: - std::future> t1 = std::async(std::launch::async, [&grid_refinements]() { - auto v = daubechies_wavelet_dyadic_grid::type, p, 1>(grid_refinements); - return detail::daubechies_eval_type::vector_cast(v); - }); - - // if necessary, compute the second and third derivative: - std::vector d2ydx2; - std::vector d3ydx3; - if constexpr (p >= 6) { - std::future> t3 = std::async(std::launch::async, [&grid_refinements]() { - auto v = daubechies_wavelet_dyadic_grid::type, p, 2>(grid_refinements); - return detail::daubechies_eval_type::vector_cast(v); - }); - - if constexpr (p >= 10) { - std::future> t4 = std::async(std::launch::async, [&grid_refinements]() { - auto v = daubechies_wavelet_dyadic_grid::type, p, 3>(grid_refinements); - return detail::daubechies_eval_type::vector_cast(v); - }); - d3ydx3 = t4.get(); - } - d2ydx2 = t3.get(); - } + m_interpolator = std::make_shared(); + } + } - auto y = t0.get(); - auto dydx = t1.get(); - - if constexpr (p==2) - { - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - } - m_mh = std::make_shared>>>(std::move(data), grid_refinements, Real(-p+1)); - } - if constexpr (p==3) - { - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - } - m_lin = std::make_shared>>>(std::move(data), grid_refinements, Real(-p+1)); - } - if constexpr (p == 4 || p == 5) - { - Real dx = Real(1)/(1 << grid_refinements); - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - } - m_cbh = std::make_shared>>>(std::move(data), Real(-p+1), dx); - } - if constexpr (p >= 6 && p <= 9) - { - Real dx = Real(1)/(1 << grid_refinements); - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - data[i][2] = d2ydx2[i]; - } - - m_qh = std::make_shared>>>(std::move(data), Real(-p+1), dx); - } - if constexpr (p >= 10) - { - Real dx = Real(1)/(1 << grid_refinements); - std::vector> data(y.size()); - for (size_t i = 0; i < y.size(); ++i) - { - data[i][0] = y[i]; - data[i][1] = dydx[i]; - data[i][2] = d2ydx2[i]; - data[i][3] = d3ydx3[i]; - } - m_sh = std::make_shared>>>(std::move(data), Real(-p+1), dx); - } - } - } - - - inline Real operator()(Real x) const - { - if (x <= -p + 1 || x >= p) - { + inline Real operator()(Real x) const + { + if (x <= -p + 1 || x >= p) + { return 0; - } - if constexpr (p==1) - { - if (x < Real(1)/Real(2)) + } + if constexpr (p == 1) + { + if (x < Real(1) / Real(2)) { - return 1; + return 1; } - else if (x == Real(1)/Real(2)) + else if (x == Real(1) / Real(2)) { - return 0; + return 0; } return -1; - } - if constexpr (p==2) - { - return m_mh->operator()(x); - } - if constexpr (p==3) - { - return m_lin->operator()(x); - } - if constexpr (p==4 || p ==5) - { - return m_cbh->unchecked_evaluation(x); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->unchecked_evaluation(x); - } - if constexpr (p >= 10) - { - return m_sh->unchecked_evaluation(x); - } - } + } + return (*m_interpolator)(x); + } - inline Real prime(Real x) const - { - static_assert(p > 2, "The 3-vanishing moment Daubechies wavelet is the first which is continuously differentiable."); - if (x <= -p + 1 || x >= p) - { + inline Real prime(Real x) const + { + static_assert(p > 2, "The 3-vanishing moment Daubechies wavelet is the first which is continuously differentiable."); + if (x <= -p + 1 || x >= p) + { return 0; - } - if constexpr (p == 3) - { - return m_lin->prime(x); - } - if constexpr (p == 4 || p == 5) - { - return m_cbh->unchecked_prime(x); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->unchecked_prime(x); - } - if constexpr (p >= 10) - { - return m_sh->unchecked_prime(x); - } - } + } + return m_interpolator->prime(x); + } - inline Real double_prime(Real x) const - { - static_assert(p >= 6, "Second derivatives of Daubechies wavelets require at least 6 vanishing moments."); - if (x <= -p + 1 || x >= p) - { + inline Real double_prime(Real x) const + { + static_assert(p >= 6, "Second derivatives of Daubechies wavelets require at least 6 vanishing moments."); + if (x <= -p + 1 || x >= p) + { return Real(0); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->unchecked_double_prime(x); - } - if constexpr (p >= 10) - { - return m_sh->unchecked_double_prime(x); - } - } + } + return m_interpolator->double_prime(x); + } - std::pair support() const - { - return {Real(-p+1), Real(p)}; - } + std::pair support() const + { + return { Real(-p + 1), Real(p) }; + } - int64_t bytes() const - { - if constexpr (p==1) - { - return sizeof(this); - } - if constexpr (p==2) - { - return m_mh->bytes() + sizeof(m_mh); - } - if constexpr (p == 3) - { - return m_lin->bytes() + sizeof(m_lin); - } - if constexpr (p == 4 || p == 5) - { - return m_cbh->bytes() + sizeof(m_cbh); - } - if constexpr (p >= 6 && p <= 9) - { - return m_qh->bytes() + sizeof(m_qh); - } - if constexpr (p >= 10) - { - return m_sh->bytes() + sizeof(m_sh); - } + int64_t bytes() const + { + return m_interpolator->bytes() + sizeof(*this); + } - return -1; - } - -private: - // Need this for p = 2: - std::shared_ptr>>> m_mh; - // Need this for p = 3: - std::shared_ptr>>> m_lin; - // Need this for p = 4,5: - std::shared_ptr>>> m_cbh; - // Need this for p = 6,7,8,9: - std::shared_ptr>>> m_qh; - // Need this for p >= 10: - std::shared_ptr>>> m_sh; -}; + private: + std::shared_ptr m_interpolator; + }; } #endif diff --git a/test/daubechies_scaling_test.cpp b/test/daubechies_scaling_test.cpp index ceb43da88..febb77d50 100644 --- a/test/daubechies_scaling_test.cpp +++ b/test/daubechies_scaling_test.cpp @@ -338,6 +338,7 @@ void test_quadratures() // so one-off it is. Real h = Real(1)/Real(256); auto phi = boost::math::daubechies_scaling(); + std::cout << "Scaling functor size is " << phi.bytes() << " bytes" << std::endl; Real t = 0; Real Q = 0; while (t < 3) { @@ -374,7 +375,8 @@ void test_quadratures() else if constexpr (p > 2) { auto phi = boost::math::daubechies_scaling(); - + std::cout << "Scaling functor size is " << phi.bytes() << " bytes" << std::endl; + Real tol = std::numeric_limits::epsilon(); Real error_estimate = std::numeric_limits::quiet_NaN(); Real L1 = std::numeric_limits::quiet_NaN(); diff --git a/test/daubechies_wavelet_test.cpp b/test/daubechies_wavelet_test.cpp index 384b02664..eb92c271c 100644 --- a/test/daubechies_wavelet_test.cpp +++ b/test/daubechies_wavelet_test.cpp @@ -46,6 +46,7 @@ void test_quadratures() std::cout << "Testing quadratures of " << p << " vanishing moment Daubechies wavelet on type " << boost::core::demangle(typeid(Real).name()) << "\n"; using boost::math::quadrature::trapezoidal; auto psi = boost::math::daubechies_wavelet(); + std::cout << "Wavelet functor size is " << psi.bytes() << " bytes" << std::endl; Real tol = std::numeric_limits::epsilon(); Real error_estimate = std::numeric_limits::quiet_NaN(); From d009f3c6b468c3411acf7cce6383a2576343f0d0 Mon Sep 17 00:00:00 2001 From: Nick Date: Tue, 24 Mar 2020 05:42:47 -0400 Subject: [PATCH 104/104] Yet again increase tolerance on Windows --- test/septic_hermite_test.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/septic_hermite_test.cpp b/test/septic_hermite_test.cpp index 188ac56de..6119b8f1f 100644 --- a/test/septic_hermite_test.cpp +++ b/test/septic_hermite_test.cpp @@ -183,17 +183,17 @@ void test_linear() while (i++ < samples) { CHECK_ULP_CLOSE(Real(tlo), csh(tlo), 2); - CHECK_ULP_CLOSE(Real(thi), csh(thi), 4); + CHECK_ULP_CLOSE(Real(thi), csh(thi), 5); CHECK_ULP_CLOSE(Real(tlo), csh_aos(tlo), 2); - CHECK_ULP_CLOSE(Real(thi), csh_aos(thi), 4); + CHECK_ULP_CLOSE(Real(thi), csh_aos(thi), 5); CHECK_ULP_CLOSE(Real(1), csh.prime(tlo), 2); - CHECK_ULP_CLOSE(Real(1), csh.prime(thi), 512); + CHECK_ULP_CLOSE(Real(1), csh.prime(thi), 580); CHECK_ULP_CLOSE(Real(1), csh_aos.prime(tlo), 2); - CHECK_ULP_CLOSE(Real(1), csh_aos.prime(thi), 512); + CHECK_ULP_CLOSE(Real(1), csh_aos.prime(thi), 580); CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(tlo), std::numeric_limits::epsilon()); - CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(thi), 800*std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh.double_prime(thi), 1000*std::numeric_limits::epsilon()); CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(tlo), std::numeric_limits::epsilon()); - CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(thi), 800*std::numeric_limits::epsilon()); + CHECK_MOLLIFIED_CLOSE(Real(0), csh_aos.double_prime(thi), 1000*std::numeric_limits::epsilon()); tlo = boost::math::nextafter(tlo, std::numeric_limits::max()); thi = boost::math::nextafter(thi, std::numeric_limits::lowest());