| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | 
							- #ifndef MANDEL_MPFRWRAPPER_H
 
- #define MANDEL_MPFRWRAPPER_H
 
- #include <mpfr.h>
 
- #include <string>
 
- namespace mnd
 
- {
 
-     template<unsigned int bits>
 
-     class MpfrFloat;
 
- }
 
- template<unsigned int bits>
 
- class MpfrFloat
 
- {
 
-     mpfr_t val;
 
- public:
 
-     inline MpfrFloat(void)
 
-     {
 
-         mpfr_init2(val, bits);
 
-     }
 
-     inline MpfrFloat(const MpfrFloat<bits>& other) : MpfrFloat()
 
-     {
 
-         mpfr_set(val, other, MPFR_RNDN);
 
-     }
 
-     inline MpfrFloat(MpfrFloat<bits>&& other)
 
-     {
 
-         val->_mpfr_d = nullptr;
 
-         mpfr_swap(val, other, MPFR_RNDN);
 
-     }
 
-     inline ~MpfrFloat(void)
 
-     {
 
-         if (val->_mpfr_d != nullptr)
 
-             mpfr_clear(val);
 
-     }
 
-     inline MpfrFloat<bits>& operator=(const MpfrFloat<bits>& other)
 
-     {
 
-         mpfr_set(val, other, MPFR_RNDN);
 
-     }
 
-     inline MpfrFloat<bits>& operator=(MpfrFloat<bits>&& other)
 
-     {
 
-         mpfr_swap(val, other, MPFR_RNDN);
 
-     }
 
-     inline MpfrFloat(double v)
 
-     {
 
-         mpfr_init2(val, bits);
 
-         mpfr_set_d(val, v, MPFR_RNDD);
 
-     }
 
-     inline MpfrFloat(const char* str)
 
-     {
 
-         mpfr_init2(val, bits);
 
-         mpfr_set_str(val, str, 10, MPFR_RNDD);
 
-     }
 
-     inline MpfrFloat<bits>& operator+=(const MpfrFloat<bits>& other)
 
-     {
 
-         mpfr_add(val, val, other.val);
 
-     }
 
-     inline MpfrFloat<bits>& operator-=(const MpfrFloat<bits>& other)
 
-     {
 
-         mpfr_sub(val, val, other.val);
 
-     }
 
-     inline MpfrFloat<bits>& operator*=(const MpfrFloat<bits>& other)
 
-     {
 
-         mpfr_mul(val, val, other.val);
 
-     }
 
-     inline MpfrFloat<bits>& operator/=(const MpfrFloat<bits>& other)
 
-     {
 
-         mpfr_div(val, val, other.val);
 
-     }
 
-     inline MpfrFloat<bits> operator+(const MpfrFloat<bits>& other) const
 
-     {
 
-         MpfrFloat<bits> result = *this;
 
-         result += other;
 
-         return result;
 
-     }
 
-     inline MpfrFloat<bits> operator-(const MpfrFloat<bits>& other) const
 
-     {
 
-         MpfrFloat<bits> result = *this;
 
-         result -= other;
 
-         return result;
 
-     }
 
-     inline MpfrFloat<bits> operator*(const MpfrFloat<bits>& other) const
 
-     {
 
-         MpfrFloat<bits> result = *this;
 
-         result *= other;
 
-         return result;
 
-     }
 
-     inline MpfrFloat<bits> operator/(const MpfrFloat<bits>& other) const
 
-     {
 
-         MpfrFloat<bits> result = *this;
 
-         result /= other;
 
-         return result;
 
-     }
 
-     inline std::string toString(void) const
 
-     {
 
-         char buf[32 + bits / 2];
 
-         int len = mpfr_snprintf(buf, sizeof buf, "%R", val);
 
-         if (len > sizeof buf) {
 
-             // error
 
-         }
 
-         return std::string(buf);
 
-     }
 
- };
 
- #endif // MANDEL_MPFRWRAPPER_H
 
 
  |