From 56293860d136db6d38b1e7a1d2e358d429ed1d75 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 1 Aug 2025 15:45:15 +0800 Subject: [PATCH 1/2] Avoid using long double in fourier integrals when not supported --- .../detail/ooura_fourier_integrals_detail.hpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp b/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp index 49677a8d2..094d84760 100644 --- a/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp +++ b/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp @@ -199,7 +199,11 @@ public: add_level(i); } else if (std::is_same::value) { +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(i); +#else + add_level(i); +#endif } else { add_level(i); @@ -270,7 +274,11 @@ public: add_level(ii); } else if (std::is_same::value) { +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(ii); +#else + add_level(ii); +#endif } else { add_level(ii); @@ -468,7 +476,11 @@ public: add_level(i); } else if (std::is_same::value) { +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(i); +#else + add_level(i); +#endif } else { add_level(i); @@ -516,7 +528,11 @@ public: add_level(ii); } else if (std::is_same::value) { +#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(ii); +#else + add_level(ii); +#endif } else { add_level(ii); From 31b94bfc38031e8bd797938759edb1ae2cedf963 Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Fri, 1 Aug 2025 12:40:52 -0400 Subject: [PATCH 2/2] Use `if constexpr` for type based branching in fourier integrals --- .../detail/ooura_fourier_integrals_detail.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp b/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp index 094d84760..c677852da 100644 --- a/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp +++ b/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp @@ -195,10 +195,10 @@ public: lweights_.reserve(levels); for (size_t i = 0; i < levels; ++i) { - if (std::is_same::value) { + BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { add_level(i); } - else if (std::is_same::value) { + else BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(i); #else @@ -270,10 +270,10 @@ public: size_t max_additional_levels = 4; while (big_nodes_.size() < requested_levels_ + max_additional_levels) { size_t ii = big_nodes_.size(); - if (std::is_same::value) { + BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { add_level(ii); } - else if (std::is_same::value) { + else BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(ii); #else @@ -472,10 +472,10 @@ public: lweights_.reserve(levels); for (size_t i = 0; i < levels; ++i) { - if (std::is_same::value) { + BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { add_level(i); } - else if (std::is_same::value) { + else BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(i); #else @@ -524,10 +524,10 @@ public: size_t max_additional_levels = 4; while (big_nodes_.size() < requested_levels_ + max_additional_levels) { size_t ii = big_nodes_.size(); - if (std::is_same::value) { + BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { add_level(ii); } - else if (std::is_same::value) { + else BOOST_MATH_IF_CONSTEXPR (std::is_same::value) { #ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS add_level(ii); #else