33#ifndef BERTINI_MPFR_EXTENSIONS_HPP
34#define BERTINI_MPFR_EXTENSIONS_HPP
38#include <boost/multiprecision/mpfr.hpp>
40#ifdef B2_FORBID_MIXED_ARITHMETIC
41 #include "bertini2/forbid_mixed_arithmetic.hpp"
44#include <boost/random.hpp>
46#include <boost/archive/text_oarchive.hpp>
47#include <boost/archive/text_iarchive.hpp>
48#include <boost/serialization/split_member.hpp>
55#ifdef BMP_EXPRESSION_TEMPLATES
56 using mpfr_float = boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<0>, boost::multiprecision::et_on>;
57 using mpz_int = boost::multiprecision::number<boost::multiprecision::backends::gmp_int, boost::multiprecision::et_on>;
58 using mpq_rational = boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, boost::multiprecision::et_on>;
60 using mpfr_float = boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<0>, boost::multiprecision::et_off>;
61 using mpz_int = boost::multiprecision::number<boost::multiprecision::backends::gmp_int, boost::multiprecision::et_off>;
62 using mpq_rational = boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, boost::multiprecision::et_off>;
73 return num.precision();
81 inline void Precision(mpfr_float & num,
unsigned prec)
98 T
max(T
const& a, T
const& b, T
const& c)
112 template <
typename T>
113 T
max(T
const& a, T
const& b, T
const& c, T
const& d)
129 template <
typename T>
130 T
max(T
const& a, T
const& b, T
const& c, T
const& d, T
const& e)
134 return max(
max(a,b,c,d),e);
141namespace boost {
namespace serialization {
145 template <
typename Archive>
146 void save(Archive& ar, ::boost::multiprecision::backends::mpfr_float_backend<0>
const& r,
unsigned )
148 unsigned num_digits(r.precision());
150 std::string tmp = r.str(0,std::ios::scientific);
157 template <
typename Archive>
158 void load(Archive& ar, ::boost::multiprecision::backends::mpfr_float_backend<0>& r,
unsigned )
162 r.precision(num_digits);
173 template <
typename Archive>
174 void save(Archive& ar, ::boost::multiprecision::backends::gmp_rational
const& r,
unsigned )
176 std::string tmp = r.str(0,std::ios::scientific);
183 template <
typename Archive>
184 void load(Archive& ar, ::boost::multiprecision::backends::gmp_rational& r,
unsigned )
195 template <
typename Archive>
196 void save(Archive& ar, ::boost::multiprecision::backends::gmp_int
const& r,
unsigned )
198 std::string tmp = r.str(0,std::ios::scientific);
205 template <
typename Archive>
206 void load(Archive& ar, ::boost::multiprecision::backends::gmp_int& r,
unsigned )
218BOOST_SERIALIZATION_SPLIT_FREE(::boost::multiprecision::backends::mpfr_float_backend<0>)
220BOOST_SERIALIZATION_SPLIT_FREE(::boost::multiprecision::backends::gmp_rational)
222BOOST_SERIALIZATION_SPLIT_FREE(::boost::multiprecision::backends::gmp_int)
228#define EIGEN_DEVICE_FUNC
229#include <Eigen/src/Core/util/Macros.h>
231#ifdef BMP_EXPRESSION_TEMPLATES
232 #if (!EIGEN_VERSION_AT_LEAST(3,2,92))
234using boost::multiprecision::min;
235using boost::multiprecision::max;
Provides bertini extensions to the double and complex<double> types.
unsigned Precision(Eigen::MatrixBase< Derived > const &v)
Get the precision of an Eigen object. If the object is empty, it's the precision of a default-constru...
Definition eigen_extensions.hpp:292
void load(Archive &ar, ::boost::multiprecision::backends::mpc_complex_backend< 0 > &r, unsigned)
Definition mpfr_complex.hpp:163
void save(Archive &ar, ::boost::multiprecision::backends::mpc_complex_backend< 0 > const &r, unsigned)
Definition mpfr_complex.hpp:151
T max(T const &a, T const &b, T const &c)
Three-argument form of max.
Definition mpfr_extensions.hpp:98