X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Freal.h;h=b107649a49815a262d295ecaa97f940994e68dac;hp=322b02b33de8bcce5fdab624ddde5efadb03d873;hb=138ee74c900c6f485cdd959d55c01099d6043661;hpb=8b3424a48d2d2e20de1a0e60ff6e1d84b9b5e226 diff --git a/src/real.h b/src/real.h index 322b02b..b107649 100644 --- a/src/real.h +++ b/src/real.h @@ -11,6 +11,7 @@ #define REAL_VFPU 3 #define REAL_RATIONAL 4 #define REAL_RATIONAL_ARBINT 5 +#define REAL_MPFRCPP 6 #ifndef REAL #error "REAL was not defined!" @@ -30,6 +31,10 @@ #include "gmpint.h" #endif //REAL +#if REAL == REAL_MPFRCPP + #include +#endif //REAL + namespace IPDF { extern const char * g_real_name[]; @@ -54,7 +59,15 @@ namespace IPDF typedef Rational Real; inline float Float(const Real & r) {return (float)r.ToDouble();} inline double Double(const Real & r) {return r.ToDouble();} - + inline int64_t Int64(const Real & r) {return r.ToInt64();} + inline Rational Sqrt(const Rational & r) {return r.Sqrt();} +#elif REAL == REAL_MPFRCPP + typedef mpfr::mpreal Real; + inline double Double(const Real & r) {return r.toDouble();} + inline float Float(const Real & r) {return r.toDouble();} + inline int64_t Int64(const Real & r) {return r.toLong();} + inline Real Sqrt(const Real & r) {return mpfr::sqrt(r, mpfr::mpreal::get_default_rnd());} + inline Real Abs(const Real & r) {return mpfr::abs(r, mpfr::mpreal::get_default_rnd());} #else #error "Type of Real unspecified." #endif //REAL @@ -69,6 +82,8 @@ namespace IPDF inline double Double(double f) {return (double)f;} inline double Double(long double f) {return (double)(f);} inline double Sqrt(double f) {return sqrt(f);} + inline double Abs(double a) {return fabs(a);} + inline int64_t Int64(double a){return (int64_t)a;} inline Real Power(const Real & a, int n) {