1 /////////////////////////////////////////////////////////////////////////////// 2 // Copyright 2018 John Maddock. Distributed under the Boost 3 // Software License, Version 1.0. (See accompanying file 4 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 6 #ifndef BOOST_MP_CPP_COMPLEX_HPP 7 #define BOOST_MP_CPP_COMPLEX_HPP 8 9 #include <boost/multiprecision/cpp_bin_float.hpp> 10 #include <boost/multiprecision/complex_adaptor.hpp> 11 12 namespace boost { 13 namespace multiprecision { 14 15 #ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES 16 17 template <unsigned Digits, backends::digit_base_type DigitBase = backends::digit_base_10, class Allocator = void, class Exponent = int, Exponent MinExponent = 0, Exponent MaxExponent = 0> 18 using cpp_complex_backend = complex_adaptor<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent> >; 19 20 template <unsigned Digits, backends::digit_base_type DigitBase = digit_base_10, class Allocator = void, class Exponent = int, Exponent MinExponent = 0, Exponent MaxExponent = 0, expression_template_option ExpressionTemplates = et_off> 21 using cpp_complex = number<complex_adaptor<cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent> >, ExpressionTemplates>; 22 23 typedef cpp_complex<50> cpp_complex_50; 24 typedef cpp_complex<100> cpp_complex_100; 25 26 typedef cpp_complex<24, backends::digit_base_2, void, boost::int16_t, -126, 127> cpp_complex_single; 27 typedef cpp_complex<53, backends::digit_base_2, void, boost::int16_t, -1022, 1023> cpp_complex_double; 28 typedef cpp_complex<64, backends::digit_base_2, void, boost::int16_t, -16382, 16383> cpp_complex_extended; 29 typedef cpp_complex<113, backends::digit_base_2, void, boost::int16_t, -16382, 16383> cpp_complex_quad; 30 typedef cpp_complex<237, backends::digit_base_2, void, boost::int32_t, -262142, 262143> cpp_complex_oct; 31 32 #else 33 34 typedef number<complex_adaptor<cpp_bin_float<50> >, et_off> cpp_complex_50; 35 typedef number<complex_adaptor<cpp_bin_float<100> >, et_off> cpp_complex_100; 36 37 typedef number<complex_adaptor<cpp_bin_float<24, backends::digit_base_2, void, boost::int16_t, -126, 127> >, et_off> cpp_complex_single; 38 typedef number<complex_adaptor<cpp_bin_float<53, backends::digit_base_2, void, boost::int16_t, -1022, 1023> >, et_off> cpp_complex_double; 39 typedef number<complex_adaptor<cpp_bin_float<64, backends::digit_base_2, void, boost::int16_t, -16382, 16383> >, et_off> cpp_complex_extended; 40 typedef number<complex_adaptor<cpp_bin_float<113, backends::digit_base_2, void, boost::int16_t, -16382, 16383> >, et_off> cpp_complex_quad; 41 typedef number<complex_adaptor<cpp_bin_float<237, backends::digit_base_2, void, boost::int32_t, -262142, 262143> >, et_off> cpp_complex_oct; 42 43 #endif 44 45 } 46 } // namespace boost::multiprecision 47 48 #endif 49