forked from boostorg/math
-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
@ckormanyos mentioned that math does not depend on multiprecision. So we cannot simply #include <boost/multiprecision/complex_adaptor.hpp> and go ahead. Also there is a multitude of real types available within Boost. See for example this short program:
#include <boost/config.hpp>
#include <boost/cstdfloat.hpp>
#include <boost/multiprecision/float128.hpp>
#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/mpfr.hpp>
#include <boost/multiprecision/mpfi.hpp>
#include <boost/core/demangle.hpp>
template<typename T>
void print_sin_1() {
using std::sin;
std::cout << sin(T(1)) << " type: " << boost::core::demangle(typeid(T).name()) << std::endl;
}
template <typename... T>
constexpr inline auto for_each = [](auto&& f) {
(f.template operator()<T>(), ...);
};
int main() {
auto for_each_test_type = for_each<
float
, double
, long double
, boost::multiprecision::float128
, boost::multiprecision::cpp_bin_float_50
, boost::multiprecision::cpp_bin_float_quad
, boost::multiprecision::cpp_dec_float_100
, boost::multiprecision::number<boost::multiprecision::cpp_bin_float<200> >
, boost::multiprecision::mpfr_float_100
, boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<200> >
, boost::multiprecision::mpfi_float_100
, boost::multiprecision::number<boost::multiprecision::mpfi_float_backend<200> >
>;
for_each_test_type([]<typename T>() {
print_sin_1<T>();
});
}
Also this code snippet should be nice to test the solution to the problem which we seek here.
Not mentioning the types in the works such as double_float and quad_float (I believe complex_adaptor is for them).
Now we need something which, in a universal way, constructs a Complex type for each of them. We have a hackish tool for that here already used in the code in several places.
Metadata
Metadata
Assignees
Labels
No labels