// (C) Copyright Nick Thompson 2023. // 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 using std::pow; using boost::multiprecision::cpp_bin_float_100; using boost::math::filters::daubechies_scaling_filter; using boost::math::tools::polynomial; using boost::math::constants::half; using boost::math::constants::root_two; template std::vector get_constants() { auto h = daubechies_scaling_filter(); auto p = polynomial(h.begin(), h.end()); auto q = polynomial({half(), half()}); q = pow(q, N); auto l = p/q; return l.data(); } template void print_constants(std::vector const & l) { std::cout << std::setprecision(std::numeric_limits::digits10 -10); std::cout << "return std::array{"; for (size_t i = 0; i < l.size() - 1; ++i) { std::cout << "BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, " << l[i]/root_two() << "), "; } std::cout << "BOOST_MATH_BIG_CONSTANT(Real, std::numeric_limits::digits, " << l.back()/root_two() << ")};\n"; } int main() { auto constants = get_constants(); print_constants(constants); }