30#ifndef BERTINI_MPFR_EXTENSIONS_HPP
31#define BERTINI_MPFR_EXTENSIONS_HPP
35#include <boost/multiprecision/mpfr.hpp>
37#ifdef B2_FORBID_MIXED_ARITHMETIC
41#include <boost/random.hpp>
43#include <boost/archive/text_oarchive.hpp>
44#include <boost/archive/text_iarchive.hpp>
45#include <boost/serialization/split_member.hpp>
52#ifdef BMP_EXPRESSION_TEMPLATES
53 using real_mp = boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<0>, boost::multiprecision::et_on>;
54 using mpz_int = boost::multiprecision::number<boost::multiprecision::backends::gmp_int, boost::multiprecision::et_on>;
55 using mpq_rational = boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, boost::multiprecision::et_on>;
57 using real_mp = boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<0>, boost::multiprecision::et_off>;
58 using mpz_int = boost::multiprecision::number<boost::multiprecision::backends::gmp_int, boost::multiprecision::et_off>;
59 using mpq_rational = boost::multiprecision::number<boost::multiprecision::backends::gmp_rational, boost::multiprecision::et_off>;
70 return num.precision();
96 T
max(T
const& a, T
const& b, T
const& c)
110 template <
typename T>
111 T
max(T
const& a, T
const& b, T
const& c, T
const& d)
127 template <
typename T>
128 T
max(T
const& a, T
const& b, T
const& c, T
const& d, T
const& e)
132 return max(
max(a,b,c,d),e);
143 template <
typename Archive>
144 void save(Archive& ar, ::boost::multiprecision::backends::mpfr_float_backend<0>
const& r,
unsigned )
146 unsigned num_digits(r.precision());
148 std::string tmp = r.str(0,std::ios::scientific);
155 template <
typename Archive>
156 void load(Archive& ar, ::boost::multiprecision::backends::mpfr_float_backend<0>& r,
unsigned )
160 r.precision(num_digits);
171 template <
typename Archive>
172 void save(Archive& ar, ::boost::multiprecision::backends::gmp_rational
const& r,
unsigned )
174 std::string tmp = r.str(0,std::ios::scientific);
181 template <
typename Archive>
182 void load(Archive& ar, ::boost::multiprecision::backends::gmp_rational& r,
unsigned )
193 template <
typename Archive>
194 void save(Archive& ar, ::boost::multiprecision::backends::gmp_int
const& r,
unsigned )
196 std::string tmp = r.str(0,std::ios::scientific);
203 template <
typename Archive>
204 void load(Archive& ar, ::boost::multiprecision::backends::gmp_int& r,
unsigned )
216BOOST_SERIALIZATION_SPLIT_FREE(::boost::multiprecision::backends::mpfr_float_backend<0>)
218BOOST_SERIALIZATION_SPLIT_FREE(::boost::multiprecision::backends::gmp_rational)
220BOOST_SERIALIZATION_SPLIT_FREE(::boost::multiprecision::backends::gmp_int)
Provides bertini extensions to the double and complex<double> types.
Definition algorithm_builder.hpp:36
boost::multiprecision::number< boost::multiprecision::backends::gmp_int, boost::multiprecision::et_on > mpz_int
The arbitrary-precision integer type.
Definition mpfr_extensions.hpp:54
boost::multiprecision::number< boost::multiprecision::mpfr_float_backend< 0 >, boost::multiprecision::et_on > real_mp
The arbitrary-precision real number type.
Definition mpfr_extensions.hpp:53
boost::multiprecision::number< boost::multiprecision::backends::gmp_rational, boost::multiprecision::et_on > mpq_rational
The exact rational number type.
Definition mpfr_extensions.hpp:55
unsigned Precision(Eigen::MatrixBase< Derived > const &v)
Get the precision of an Eigen object.
Definition eigen_extensions.hpp:339
T max(T const &a, T const &b, T const &c)
Three-argument form of max.
Definition mpfr_extensions.hpp:96
Definition mpfr_complex.hpp:191
void load(Archive &ar, ::boost::multiprecision::backends::mpc_complex_backend< 0 > &r, unsigned)
Load a mpc_complex type from a boost archive.
Definition mpfr_complex.hpp:208
void save(Archive &ar, ::boost::multiprecision::backends::mpc_complex_backend< 0 > const &r, unsigned)
Save a mpc_complex type to a boost archive.
Definition mpfr_complex.hpp:196
Definition forbid_mixed_arithmetic.hpp:27