Home | History | Annotate | Download | only in mpreal

Lines Matching full:mpreal

128 #define MPREAL_DOUBLE_BITS_OVERFLOW -1          // Triggers overflow exception during conversion to double if mpreal 

139 class mpreal {
150 mpreal();
151 mpreal(const mpreal& u);
152 mpreal(const mpfr_t u);
153 mpreal(const mpf_t u);
154 mpreal(const mpz_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
155 mpreal(const mpq_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
156 mpreal(const double u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
157 mpreal(const long double u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
158 mpreal(const unsigned long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
159 mpreal(const unsigned int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
160 mpreal(const long int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
161 mpreal(const int u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
164 mpreal(const uint64_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
165 mpreal(const int64_t u, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t mode = mpreal::get_default_rnd());
168 mpreal(const char* s, mp_prec_t prec = mpreal::get_default_prec(), int base = 10, mp_rnd_t mode = mpreal::get_default_rnd());
169 mpreal(const std::string& s, mp_prec_t prec = mpreal::get_default_prec(), int base = 10, mp_rnd_t mode = mpreal::get_default_rnd());
171 ~mpreal();
180 mpreal& operator=(const mpreal& v);
181 mpreal& operator=(const mpf_t v);
182 mpreal& operator=(const mpz_t v);
183 mpreal& operator=(const mpq_t v);
184 mpreal& operator=(const long double v);
185 mpreal& operator=(const double v);
186 mpreal& operator=(const unsigned long int v);
187 mpreal& operator=(const unsigned int v);
188 mpreal& operator=(const long int v);
189 mpreal& operator=(const int v);
190 mpreal& operator=(const char* s);
191 mpreal& operator=(const std::string& s);
194 mpreal& operator+=(const mpreal& v);
195 mpreal& operator+=(const mpf_t v);
196 mpreal& operator+=(const mpz_t v);
197 mpreal& operator+=(const mpq_t v);
198 mpreal& operator+=(const long double u);
199 mpreal& operator+=(const double u);
200 mpreal& operator+=(const unsigned long int u);
201 mpreal& operator+=(const unsigned int u);
202 mpreal& operator+=(const long int u);
203 mpreal& operator+=(const int u);
206 mpreal& operator+=(const int64_t u);
207 mpreal& operator+=(const uint64_t u);
208 mpreal& operator-=(const int64_t u);
209 mpreal& operator-=(const uint64_t u);
210 mpreal& operator*=(const int64_t u);
211 mpreal& operator*=(const uint64_t u);
212 mpreal& operator/=(const int64_t u);
213 mpreal& operator/=(const uint64_t u);
216 const mpreal operator+() const;
217 mpreal& operator++ ();
218 const mpreal operator++ (int);
221 mpreal& operator-=(const mpreal& v);
222 mpreal& operator-=(const mpz_t v);
223 mpreal& operator-=(const mpq_t v);
224 mpreal& operator-=(const long double u);
225 mpreal& operator-=(const double u);
226 mpreal& operator-=(const unsigned long int u);
227 mpreal& operator-=(const unsigned int u);
228 mpreal& operator-=(const long int u);
229 mpreal& operator-=(const int u);
230 const mpreal operator-() const;
231 friend const mpreal operator-(const unsigned long int b, const mpreal& a);
232 friend const mpreal operator-(const unsigned int b, const mpreal& a);
233 friend const mpreal operator-(const long int b, const mpreal& a);
234 friend const mpreal operator-(const int b, const mpreal& a);
235 friend const mpreal operator-(const double b, const mpreal& a);
236 mpreal& operator-- ();
237 const mpreal operator-- (int);
240 mpreal& operator*=(const mpreal& v);
241 mpreal& operator*=(const mpz_t v);
242 mpreal& operator*=(const mpq_t v);
243 mpreal& operator*=(const long double v);
244 mpreal& operator*=(const double v);
245 mpreal& operator*=(const unsigned long int v);
246 mpreal& operator*=(const unsigned int v);
247 mpreal& operator*=(const long int v);
248 mpreal& operator*=(const int v);
251 mpreal& operator/=(const mpreal& v);
252 mpreal& operator/=(const mpz_t v);
253 mpreal& operator/=(const mpq_t v);
254 mpreal& operator/=(const long double v);
255 mpreal& operator/=(const double v);
256 mpreal& operator/=(const unsigned long int v);
257 mpreal& operator/=(const unsigned int v);
258 mpreal& operator/=(const long int v);
259 mpreal& operator/=(const int v);
260 friend const mpreal operator/(const unsigned long int b, const mpreal& a);
261 friend const mpreal operator/(const unsigned int b, const mpreal& a);
262 friend const mpreal operator/(const long int b, const mpreal& a);
263 friend const mpreal operator/(const int b, const mpreal& a);
264 friend const mpreal operator/(const double b, const mpreal& a);
267 mpreal& operator<<=(const unsigned long int u);
268 mpreal& operator<<=(const unsigned int u);
269 mpreal& operator<<=(const long int u);
270 mpreal& operator<<=(const int u);
273 mpreal& operator>>=(const unsigned long int u);
274 mpreal& operator>>=(const unsigned int u);
275 mpreal& operator>>=(const long int u);
276 mpreal& operator>>=(const int u);
279 friend bool operator > (const mpreal& a, const mpreal& b);
280 friend bool operator >= (const mpreal& a, const mpreal& b);
281 friend bool operator < (const mpreal& a, const mpreal& b);
282 friend bool operator <= (const mpreal& a, const mpreal& b);
283 friend bool operator == (const mpreal& a, const mpreal& b);
284 friend bool operator != (const mpreal& a, const mpreal& b);
287 friend bool operator == (const mpreal& a, const unsigned long int b);
288 friend bool operator == (const mpreal& a, const unsigned int b);
289 friend bool operator == (const mpreal& a, const long int b);
290 friend bool operator == (const mpreal& a, const int b);
291 friend bool operator == (const mpreal& a, const long double b);
292 friend bool operator == (const mpreal& a, const double b);
305 // Get raw pointers so that mpreal can be directly used in raw mpfr_* functions
310 // Convert mpreal to string with n significant digits in base b
312 std::string toString(int n = 0, int b = 10, mp_rnd_t mode = mpreal::get_default_rnd()) const;
319 friend const mpreal sqr (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
320 friend const mpreal sqrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
321 friend const mpreal sqrt(const unsigned long int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
322 friend const mpreal cbrt(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
323 friend const mpreal root(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
324 friend const mpreal pow (const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
325 friend const mpreal pow (const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
326 friend const mpreal pow (const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
327 friend const mpreal pow (const mpreal& a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
328 friend const mpreal pow (const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
329 friend const mpreal pow (const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
330 friend const mpreal fabs(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
332 friend const mpreal abs(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
333 friend const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
334 friend inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
335 friend inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
336 mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
337 friend inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
338 friend int cmpabs(const mpreal& a,const mpreal& b);
340 friend const mpreal log (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
341 friend const mpreal log2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
342 friend const mpreal log10(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
343 friend const mpreal exp (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
344 friend const mpreal exp2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
345 friend const mpreal exp10(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
346 friend const mpreal log1p(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
347 friend const mpreal expm1(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
349 friend const mpreal cos(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
350 friend const mpreal sin(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
351 friend const mpreal tan(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
352 friend const mpreal sec(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
353 friend const mpreal csc(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
354 friend const mpreal cot(const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
355 friend int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
357 friend const mpreal acos (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
358 friend const mpreal asin (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
359 friend const mpreal atan (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
360 friend const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
361 friend const mpreal acot (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
362 friend const mpreal asec (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
363 friend const mpreal acsc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
365 friend const mpreal cosh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
366 friend const mpreal sinh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
367 friend const mpreal tanh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
368 friend const mpreal sech (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
369 friend const mpreal csch (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
370 friend const mpreal coth (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
371 friend const mpreal acosh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
372 friend const mpreal asinh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
373 friend const mpreal atanh (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
374 friend const mpreal acoth (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
375 friend const mpreal asech (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
376 friend const mpreal acsch (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
378 friend const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
380 friend const mpreal fac_ui (unsigned long int v, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd());
381 friend const mpreal eint (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
383 friend const mpreal gamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
384 friend const mpreal lngamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
385 friend const mpreal lgamma (const mpreal& v, int *signp = 0, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
386 friend const mpreal zeta (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
387 friend const mpreal erf (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
388 friend const mpreal erfc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
389 friend const mpreal besselj0 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
390 friend const mpreal besselj1 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
391 friend const mpreal besseljn (long n, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
392 friend const mpreal bessely0 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
393 friend const mpreal bessely1 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
394 friend const mpreal besselyn (long n, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
395 friend const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
396 friend const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
397 friend const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
398 friend const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
399 friend int sgn(const mpreal& v); // returns -1 or +1
403 friend int sinh_cosh (mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
404 friend const mpreal li2 (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
405 friend const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
406 friend const mpreal rec_sqrt (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
409 friend const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); // Remainder after division
410 friend const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); // Modulus after division
415 friend const mpreal digamma (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
416 friend const mpreal ai (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
417 friend const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode = mpreal::get_default_rnd()); // use gmp_randinit_default() to init state, gmp_randclear() to clear
424 friend const mpreal random(unsigned int seed = 0);
427 friend const mpreal frexp(const mpreal& v, mp_exp_t* exp);
428 friend const mpreal ldexp(const mpreal& v, mp_exp_t exp);
430 // Splits mpreal value into fractional and integer parts.
432 friend const mpreal modf(const mpreal& v, mpreal& n);
436 friend const mpreal const_log2 (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd());
437 friend const mpreal const_pi (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd());
438 friend const mpreal const_euler (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd());
439 friend const mpreal const_catalan (mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd());
442 friend const mpreal const_infinity(int sign = 1, mp_prec_t prec = mpreal::get_default_prec(), mp_rnd_t rnd_mode = mpreal::get_default_rnd());
445 friend std::ostream& operator<<(std::ostream& os, const mpreal& v);
446 friend std::istream& operator>>(std::istream& is, mpreal& v);
449 friend const mpreal rint (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
450 friend const mpreal ceil (const mpreal& v);
451 friend const mpreal floor(const mpreal& v);
452 friend const mpreal round(const mpreal& v);
453 friend const mpreal trunc(const mpreal& v);
454 friend const mpreal rint_ceil (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
455 friend const mpreal rint_floor (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
456 friend const mpreal rint_round (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
457 friend const mpreal rint_trunc (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
458 friend const mpreal frac (const mpreal& v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
459 friend const mpreal remainder ( const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
460 friend const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
463 friend const mpreal nexttoward (const mpreal& x, const mpreal& y);
464 friend const mpreal nextabove (const mpreal& x);
465 friend const mpreal nextbelow (const mpreal& x);
468 friend const mpreal urandomb (gmp_randstate_t& state);
472 friend const mpreal random2 (mp_size_t size, mp_exp_t exp);
476 friend bool isnan (const mpreal& v);
477 friend bool isinf (const mpreal& v);
478 friend bool isfinite (const mpreal& v);
480 friend bool isnum (const mpreal& v);
481 friend bool iszero (const mpreal& v);
482 friend bool isint (const mpreal& v);
485 friend bool isregular(const mpreal& v);
492 // Aliases for get_prec(), set_prec() - needed for compatibility with std::complex<mpreal> interface
493 inline mpreal& setPrecision(int Precision, mp_rnd_t RoundingMode = get_default_rnd());
496 // Set mpreal to +/- inf, NaN, +/-0
497 mpreal& setInf (int Sign = +1);
498 mpreal& setNan ();
499 mpreal& setZero (int Sign = +1);
500 mpreal& setSign (int Sign, mp_rnd_t RoundingMode = get_default_rnd());
524 // Efficient swapping of two mpreal values - needed for std algorithms
525 friend void swap(mpreal& x, mpreal& y);
527 friend const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
528 friend const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
534 // mpfr::mpreal=<DebugView> ; Show value only
535 // mpfr::mpreal=<DebugView>, <mp[0]._mpfr_prec,u>bits ; Show value & precision
552 inline mpreal::mpreal()
554 mpfr_init2(mp,mpreal::get_default_prec());
555 mpfr_set_ui(mp,0,mpreal::get_default_rnd());
560 inline mpreal::mpreal(const mpreal& u)
563 mpfr_set(mp,u.mp,mpreal::get_default_rnd());
568 inline mpreal::mpreal(const mpfr_t u)
571 mpfr_set(mp,u,mpreal::get_default_rnd());
576 inline mpreal::mpreal(const mpf_t u)
579 mpfr_set_f(mp,u,mpreal::get_default_rnd());
584 inline mpreal::mpreal(const mpz_t u, mp_prec_t prec, mp_rnd_t mode)
592 inline mpreal::mpreal(const mpq_t u, mp_prec_t prec, mp_rnd_t mode)
600 inline mpreal::mpreal(const double u, mp_prec_t prec, mp_rnd_t mode)
617 inline mpreal::mpreal(const long double u, mp_prec_t prec, mp_rnd_t mode)
625 inline mpreal::mpreal(const unsigned long int u, mp_prec_t prec, mp_rnd_t mode)
633 inline mpreal::mpreal(const unsigned int u, mp_prec_t prec, mp_rnd_t mode)
641 inline mpreal::mpreal(const long int u, mp_prec_t prec, mp_rnd_t mode)
649 inline mpreal::mpreal(const int u, mp_prec_t prec, mp_rnd_t mode)
658 inline mpreal::mpreal(const uint64_t u, mp_prec_t prec, mp_rnd_t mode)
666 inline mpreal::mpreal(const int64_t u, mp_prec_t prec, mp_rnd_t mode)
675 inline mpreal::mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode)
683 inline mpreal::mpreal(const std::string& s, mp_prec_t prec, int base, mp_rnd_t mode)
691 inline mpreal::~mpreal()
704 template <> struct result_type<mpreal> {typedef mpreal type;};
705 template <> struct result_type<mpz_t> {typedef mpreal type;};
706 template <> struct result_type<mpq_t> {typedef mpreal type;};
707 template <> struct result_type<long double> {typedef mpreal type;};
708 template <> struct result_type<double> {typedef mpreal type;};
709 template <> struct result_type<unsigned long int> {typedef mpreal type;};
710 template <> struct result_type<unsigned int> {typedef mpreal type;};
711 template <> struct result_type<long int> {typedef mpreal type;};
712 template <> struct result_type<int> {typedef mpreal type;};
715 template <> struct result_type<int64_t > {typedef mpreal type;};
716 template <> struct result_type<uint64_t > {typedef mpreal type;};
723 operator+(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) += rhs; }
727 operator+(const Lhs& lhs, const mpreal& rhs){ return mpreal(rhs) += lhs; }
732 operator-(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) -= rhs; }
736 operator-(const Lhs& lhs, const mpreal& rhs){ return mpreal(lhs) -= rhs; }
741 operator*(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) *= rhs; }
745 operator*(const Lhs& lhs, const mpreal& rhs){ return mpreal(rhs) *= lhs; }
750 operator/(const mpreal& lhs, const Rhs& rhs){ return mpreal(lhs) /= rhs; }
754 operator/(const Lhs& lhs, const mpreal& rhs){ return mpreal(lhs) /= rhs; }
758 const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
759 const mpreal sqrt(const long int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
760 const mpreal sqrt(const int v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
761 const mpreal sqrt(const long double v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
762 const mpreal sqrt(const double v, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
766 const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
767 const mpreal pow(const mpreal& a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
768 const mpreal pow(const mpreal& a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
769 const mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
771 const mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
772 const mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
773 const mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
774 const mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
775 const mpreal pow(const double a, const mpreal& b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
777 const mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
778 const mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
779 const mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
780 const mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
781 const mpreal pow(const unsigned long int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
783 const mpreal pow(const unsigned int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
784 const mpreal pow(const unsigned int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
785 const mpreal pow(const unsigned int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
786 const mpreal pow(const unsigned int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
787 const mpreal pow(const unsigned int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
788 const mpreal pow(const unsigned int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
790 const mpreal pow(const long int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
791 const mpreal pow(const long int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
792 const mpreal pow(const long int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
793 const mpreal pow(const long int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
794 const mpreal pow(const long int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
795 const mpreal pow(const long int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
797 const mpreal pow(const int a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
798 const mpreal pow(const int a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
799 const mpreal pow(const int a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
800 const mpreal pow(const int a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
801 const mpreal pow(const int a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
802 const mpreal pow(const int a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
804 const mpreal pow(const long double a, const long double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
805 const mpreal pow(const long double a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
806 const mpreal pow(const long double a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
807 const mpreal pow(const long double a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
808 const mpreal pow(const long double a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
810 const mpreal pow(const double a, const double b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
811 const mpreal pow(const double a, const unsigned long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
812 const mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
813 const mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
814 const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode = mpreal::get_default_rnd());
819 inline mpreal machine_epsilon(mp_prec_t prec = mpreal::get_default_prec());
822 inline mpreal machine_epsilon(const mpreal& x);
827 inline mpreal minval(mp_prec_t prec = mpreal::get_default_prec());
828 inline mpreal maxval(mp_prec_t prec = mpreal::get_default_prec());
831 inline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps);
834 inline bool isEqualFuzzy(const mpreal& a, const mpreal& b);
838 inline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps);
850 const mpreal (max)(const mpreal& x, const mpreal& y);
851 const mpreal (min)(const mpreal& x, const mpreal& y);
859 inline mpreal& mpreal::operator=(const mpreal& v)
871 mpfr_set(mp, v.mp, mpreal::get_default_rnd());
878 inline mpreal& mpreal::operator=(const mpf_t v)
880 mpfr_set_f(mp, v, mpreal::get_default_rnd());
886 inline mpreal& mpreal::operator=(const mpz_t v)
888 mpfr_set_z(mp, v, mpreal::get_default_rnd());
894 inline mpreal& mpreal::operator=(const mpq_t v)
896 mpfr_set_q(mp, v, mpreal::get_default_rnd());
902 inline mpreal& mpreal::operator=(const long double v)
904 mpfr_set_ld(mp, v, mpreal::get_default_rnd());
910 inline mpreal& mpreal::operator=(const double v)
915 mpfr_set_d(mp,v,mpreal::get_default_rnd());
919 mpfr_set_d(mp,v,mpreal::get_default_rnd());
926 inline mpreal& mpreal::operator=(const unsigned long int v)
928 mpfr_set_ui(mp, v, mpreal::get_default_rnd());
934 inline mpreal& mpreal::operator=(const unsigned int v)
936 mpfr_set_ui(mp, v, mpreal::get_default_rnd());
942 inline mpreal& mpreal::operator=(const long int v)
944 mpfr_set_si(mp, v, mpreal::get_default_rnd());
950 inline mpreal& mpreal::operator=(const int v)
952 mpfr_set_si(mp, v, mpreal::get_default_rnd());
958 inline mpreal& mpreal::operator=(const char* s)
962 // mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode)
963 // mpreal(const std::string& s,mp_prec_t prec, int base, mp_rnd_t mode)
971 if(0 == mpfr_set_str(t, s, 10, mpreal::get_default_rnd()))
973 mpfr_set(mp, t, mpreal::get_default_rnd());
981 inline mpreal& mpreal::operator=(const std::string& s)
985 // mpreal(const char* s, mp_prec_t prec, int base, mp_rnd_t mode)
986 // mpreal(const std::string& s,mp_prec_t prec, int base, mp_rnd_t mode)
994 if(0 == mpfr_set_str(t, s.c_str(), 10, mpreal::get_default_rnd()))
996 mpfr_set(mp, t, mpreal::get_default_rnd());
1007 inline mpreal& mpreal::operator+=(const mpreal& v)
1009 mpfr_add(mp,mp,v.mp,mpreal::get_default_rnd());
1014 inline mpreal& mpreal::operator+=(const mpf_t u)
1016 *this += mpreal(u);
1021 inline mpreal& mpreal::operator+=(const mpz_t u)
1023 mpfr_add_z(mp,mp,u,mpreal::get_default_rnd());
1028 inline mpreal& mpreal::operator+=(const mpq_t u)
1030 mpfr_add_q(mp,mp,u,mpreal::get_default_rnd());
1035 inline mpreal& mpreal::operator+= (const long double u)
1037 *this += mpreal(u);
1042 inline mpreal& mpreal::operator+= (const double u)
1045 mpfr_add_d(mp,mp,u,mpreal::get_default_rnd());
1047 *this += mpreal(u);
1054 inline mpreal& mpreal::operator+=(const unsigned long int u)
1056 mpfr_add_ui(mp,mp,u,mpreal::get_default_rnd());
1061 inline mpreal& mpreal::operator+=(const unsigned int u)
1063 mpfr_add_ui(mp,mp,u,mpreal::get_default_rnd());
1068 inline mpreal& mpreal::operator+=(const long int u)
1070 mpfr_add_si(mp,mp,u,mpreal::get_default_rnd());
1075 inline mpreal& mpreal::operator+=(const int u)
1077 mpfr_add_si(mp,mp,u,mpreal::get_default_rnd());
1083 inline mpreal& mpreal::operator+=(const int64_t u){ *this += mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1084 inline mpreal& mpreal::operator+=(const uint64_t u){ *this += mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1085 inline mpreal& mpreal::operator-=(const int64_t u){ *this -= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1086 inline mpreal& mpreal::operator-=(const uint64_t u){ *this -= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1087 inline mpreal& mpreal::operator*=(const int64_t u){ *this *= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1088 inline mpreal& mpreal::operator*=(const uint64_t u){ *this *= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1089 inline mpreal& mpreal::operator/=(const int64_t u){ *this /= mpreal(u); MPREAL_MSVC_DEBUGVIEW_CODE; return *this; }
1090 inline mpreal& mpreal::operator/=(const uint64_t u){ *this /= mpreal
1093 inline const mpreal mpreal::operator+()const { return mpreal(*this); }
1095 inline const mpreal operator+(const mpreal& a, const mpreal& b)
1097 mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr())));
1098 mpfr_add(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd());
1102 inline mpreal& mpreal::operator++()
1107 inline const mpreal mpreal::operator++ (int)
1109 mpreal x(*this);
1114 inline mpreal& mpreal::operator--()
1119 inline const mpreal mpreal::operator-- (int)
1121 mpreal x(*this);
1128 inline mpreal& mpreal::operator-=(const mpreal& v)
1130 mpfr_sub(mp,mp,v.mp,mpreal::get_default_rnd());
1135 inline mpreal& mpreal::operator-=(const mpz_t v)
1137 mpfr_sub_z(mp,mp,v,mpreal::get_default_rnd());
1142 inline mpreal& mpreal::operator-=(const mpq_t v)
1144 mpfr_sub_q(mp,mp,v,mpreal::get_default_rnd());
1149 inline mpreal& mpreal::operator-=(const long double v)
1151 *this -= mpreal(v);
1156 inline mpreal& mpreal::operator-=(const double v)
1159 mpfr_sub_d(mp,mp,v,mpreal::get_default_rnd());
1161 *this -= mpreal(v);
1168 inline mpreal& mpreal::operator-=(const unsigned long int v)
1170 mpfr_sub_ui(mp,mp,v,mpreal::get_default_rnd());
1175 inline mpreal& mpreal::operator-=(const unsigned int v)
1177 mpfr_sub_ui(mp,mp,v,mpreal::get_default_rnd());
1182 inline mpreal& mpreal::operator-=(const long int v)
1184 mpfr_sub_si(mp,mp,v,mpreal::get_default_rnd());
1189 inline mpreal& mpreal::operator-=(const int v)
1191 mpfr_sub_si(mp,mp,v,mpreal::get_default_rnd());
1196 inline const mpreal mpreal::operator-()const
1198 mpreal u(*this);
1199 mpfr_neg(u.mp,u.mp,mpreal::get_default_rnd());
1203 inline const mpreal operator-(const mpreal& a, const mpreal& b)
1205 mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr())));
1206 mpfr_sub(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd());
1210 inline const mpreal operator-(const double b, const mpreal& a)
1213 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1214 mpfr_d_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1217 mpreal x(b, mpfr_get_prec(a.mpfr_ptr()));
1223 inline const mpreal operator-(const unsigned long int b, const mpreal& a)
1225 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1226 mpfr_ui_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1230 inline const mpreal operator-(const unsigned int b, const mpreal& a)
1232 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1233 mpfr_ui_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1237 inline const mpreal operator-(const long int b, const mpreal& a)
1239 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1240 mpfr_si_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1244 inline const mpreal operator-(const int b, const mpreal& a)
1246 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1247 mpfr_si_sub(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1253 inline mpreal& mpreal::operator*= (const mpreal& v)
1255 mpfr_mul(mp,mp,v.mp,mpreal::get_default_rnd());
1260 inline mpreal& mpreal::operator*=(const mpz_t v)
1262 mpfr_mul_z(mp,mp,v,mpreal::get_default_rnd());
1267 inline mpreal& mpreal::operator*=(const mpq_t v)
1269 mpfr_mul_q(mp,mp,v,mpreal::get_default_rnd());
1274 inline mpreal& mpreal::operator*=(const long double v)
1276 *this *= mpreal(v);
1281 inline mpreal& mpreal::operator*=(const double v)
1284 mpfr_mul_d(mp,mp,v,mpreal::get_default_rnd());
1286 *this *= mpreal(v);
1292 inline mpreal& mpreal::operator*=(const unsigned long int v)
1294 mpfr_mul_ui(mp,mp,v,mpreal::get_default_rnd());
1299 inline mpreal& mpreal::operator*=(const unsigned int v)
1301 mpfr_mul_ui(mp,mp,v,mpreal::get_default_rnd());
1306 inline mpreal& mpreal::operator*=(const long int v)
1308 mpfr_mul_si(mp,mp,v,mpreal::get_default_rnd());
1313 inline mpreal& mpreal::operator*=(const int v)
1315 mpfr_mul_si(mp,mp,v,mpreal::get_default_rnd());
1320 inline const mpreal operator*(const mpreal& a, const mpreal& b)
1322 mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr())));
1323 mpfr_mul(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd());
1329 inline mpreal& mpreal::operator/=(const mpreal& v)
1331 mpfr_div(mp,mp,v.mp,mpreal::get_default_rnd());
1336 inline mpreal& mpreal::operator/=(const mpz_t v)
1338 mpfr_div_z(mp,mp,v,mpreal::get_default_rnd());
1343 inline mpreal& mpreal::operator/=(const mpq_t v)
1345 mpfr_div_q(mp,mp,v,mpreal::get_default_rnd());
1350 inline mpreal& mpreal::operator/=(const long double v)
1352 *this /= mpreal(v);
1357 inline mpreal& mpreal::operator/=(const double v)
1360 mpfr_div_d(mp,mp,v,mpreal::get_default_rnd());
1362 *this /= mpreal(v);
1368 inline mpreal& mpreal::operator/=(const unsigned long int v)
1370 mpfr_div_ui(mp,mp,v,mpreal::get_default_rnd());
1375 inline mpreal& mpreal::operator/=(const unsigned int v)
1377 mpfr_div_ui(mp,mp,v,mpreal::get_default_rnd());
1382 inline mpreal& mpreal::operator/=(const long int v)
1384 mpfr_div_si(mp,mp,v,mpreal::get_default_rnd());
1389 inline mpreal& mpreal::operator/=(const int v)
1391 mpfr_div_si(mp,mp,v,mpreal::get_default_rnd());
1396 inline const mpreal operator/(const mpreal& a, const mpreal& b)
1398 mpreal c(0, (std::max)(mpfr_get_prec(a.mpfr_ptr()), mpfr_get_prec(b.mpfr_ptr())));
1399 mpfr_div(c.mpfr_ptr(), a.mpfr_srcptr(), b.mpfr_srcptr(), mpreal::get_default_rnd());
1403 inline const mpreal operator/(const unsigned long int b, const mpreal& a)
1405 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1406 mpfr_ui_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1410 inline const mpreal operator/(const unsigned int b, const mpreal& a)
1412 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1413 mpfr_ui_div(x.mpfr_ptr(), b, a.mpfr_srcptr(), mpreal::get_default_rnd());
1417 inline const mpreal operator/(const long int b, const mpreal& a)
1419 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1420 mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(),mpreal::get_default_rnd());
1424 inline const mpreal operator/(const int b, const mpreal& a)
1426 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1427 mpfr_si_div(x.mpfr_ptr(), b, a.mpfr_srcptr(),mpreal::get_default_rnd());
1431 inline const mpreal operator/(const double b, const mpreal& a)
1434 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1435 mpfr_d_div(x.mpfr_ptr(), b, a.mpfr_srcptr(),mpreal::get_default_rnd());
1438 mpreal x(0, mpfr_get_prec(a.mpfr_ptr()));
1446 inline mpreal& mpreal::operator<<=(const unsigned long int u)
1448 mpfr_mul_2ui(mp,mp,u,mpreal::get_default_rnd());
1453 inline mpreal& mpreal::operator<<=(const unsigned int u)
1455 mpfr_mul_2ui(mp,mp,static_cast<unsigned long int>(u),mpreal::get_default_rnd());
1460 inline mpreal& mpreal::operator<<=(const long int u)
1462 mpfr_mul_2si(mp,mp,u,mpreal::get_default_rnd());
1467 inline mpreal& mpreal::operator<<=(const int u)
1469 mpfr_mul_2si(mp,mp,static_cast<long int>(u),mpreal::get_default_rnd());
1474 inline mpreal& mpreal::operator>>=(const unsigned long int u)
1476 mpfr_div_2ui(mp,mp,u,mpreal::get_default_rnd());
1481 inline mpreal& mpreal::operator>>=(const unsigned int u)
1483 mpfr_div_2ui(mp,mp,static_cast<unsigned long int>(u),mpreal::get_default_rnd());
1488 inline mpreal& mpreal::operator>>=(const long int u)
1490 mpfr_div_2si(mp,mp,u,mpreal::get_default_rnd());
1495 inline mpreal& mpreal::operator>>=(const int u)
1497 mpfr_div_2si(mp,mp,static_cast<long int>(u),mpreal::get_default_rnd());
1502 inline const mpreal operator<<(const mpreal& v, const unsigned long int k)
1507 inline const mpreal operator<<(const mpreal& v, const unsigned int k)
1512 inline const mpreal operator<<(const mpreal& v, const long int k)
1517 inline const mpreal operator<<(const mpreal& v, const int k)
1522 inline const mpreal operator>>(const mpreal& v, const unsigned long int k)
1527 inline const mpreal operator>>(const mpreal& v, const long int k)
1532 inline const mpreal operator>>(const mpreal& v, const unsigned int k)
1537 inline const mpreal operator>>(const mpreal& v, const int k)
1543 inline const mpreal mul_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode)
1545 mpreal x(v);
1551 inline const mpreal mul_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode)
1553 mpreal x(v);
1558 inline const mpreal div_2ui(const mpreal& v, unsigned long int k, mp_rnd_t rnd_mode)
1560 mpreal x(v);
1565 inline const mpreal div_2si(const mpreal& v, long int k, mp_rnd_t rnd_mode)
1567 mpreal x(v);
1574 inline bool operator > (const mpreal& a, const mpreal& b){ return (mpfr_greater_p(a.mp,b.mp) !=0); }
1575 inline bool operator >= (const mpreal& a, const mpreal& b){ return (mpfr_greaterequal_p(a.mp,b.mp) !=0); }
1576 inline bool operator < (const mpreal& a, const mpreal& b){ return (mpfr_less_p(a.mp,b.mp) !=0); }
1577 inline bool operator <= (const mpreal& a, const mpreal& b){ return (mpfr_lessequal_p(a.mp,b.mp) !=0); }
1578 inline bool operator == (const mpreal& a, const mpreal& b){ return (mpfr_equal_p(a.mp,b.mp) !=0); }
1579 inline bool operator != (const mpreal& a, const mpreal& b){ return (mpfr_lessgreater_p(a.mp,b.mp) !=0); }
1581 inline bool operator == (const mpreal& a, const unsigned long int b ){ return (mpfr_cmp_ui(a.mp,b) == 0); }
1582 inline bool operator == (const mpreal& a, const unsigned int b ){ return (mpfr_cmp_ui(a.mp,b) == 0); }
1583 inline bool operator == (const mpreal& a, const long int b ){ return (mpfr_cmp_si(a.mp,b) == 0); }
1584 inline bool operator == (const mpreal& a, const int b ){ return (mpfr_cmp_si(a.mp,b) == 0); }
1585 inline bool operator == (const mpreal& a, const long double b ){ return (mpfr_cmp_ld(a.mp,b) == 0); }
1586 inline bool operator == (const mpreal& a, const double b ){ return (mpfr_cmp_d(a.mp,b) == 0); }
1589 inline bool isnan (const mpreal& v){ return (mpfr_nan_p(v.mp) != 0); }
1590 inline bool isinf (const mpreal& v){ return (mpfr_inf_p(v.mp) != 0); }
1591 inline bool isfinite (const mpreal& v){ return (mpfr_number_p(v.mp) != 0); }
1592 inline bool iszero (const mpreal& v){ return (mpfr_zero_p(v.mp) != 0); }
1593 inline bool isint (const mpreal& v){ return (mpfr_integer_p(v.mp) != 0); }
1596 inline bool isregular(const mpreal& v){ return (mpfr_regular_p(v.mp));}
1601 inline long mpreal::toLong (mp_rnd_t mode) const { return mpfr_get_si(mp, mode); }
1602 inline unsigned long mpreal::toULong (mp_rnd_t mode) const { return mpfr_get_ui(mp, mode); }
1603 inline double mpreal::toDouble (mp_rnd_t mode) const { return mpfr_get_d (mp, mode); }
1604 inline long double mpreal::toLDouble(mp_rnd_t mode) const { return mpfr_get_ld(mp, mode); }
1607 inline int64_t mpreal::toInt64 (mp_rnd_t mode) const{ return mpfr_get_sj(mp, mode); }
1608 inline uint64_t mpreal::toUInt64(mp_rnd_t mode) const{ return mpfr_get_uj(mp, mode); }
1611 inline ::mpfr_ptr mpreal::mpfr_ptr() { return mp; }
1612 inline ::mpfr_srcptr mpreal::mpfr_ptr() const { return mp; }
1613 inline ::mpfr_srcptr mpreal::mpfr_srcptr() const { return mp; }
1625 inline std::string mpreal::toString(const std::string& format) const
1645 inline std::string mpreal::toString(int n, int b, mp_rnd_t mode) const
1764 inline std::ostream& operator<<(std::ostream& os, const mpreal& v)
1769 inline std::istream& operator>>(std::istream &is, mpreal& v)
1774 mpfr_set_str(v.mp, tmp.c_str(), 10, mpreal::get_default_rnd());
1799 inline int sgn(const mpreal& v)
1805 inline mpreal& mpreal::setSign(int sign, mp_rnd_t RoundingMode)
1812 inline int mpreal::getPrecision() const
1817 inline mpreal& mpreal::setPrecision(int Precision, mp_rnd_t RoundingMode)
1824 inline mpreal& mpreal::setInf(int sign)
1831 inline mpreal& mpreal::setNan()
1838 inline mpreal& mpreal::setZero(int sign)
1852 inline mp_prec_t mpreal::get_prec() const
1857 inline void mpreal::set_prec(mp_prec_t prec, mp_rnd_t rnd_mode)
1863 inline mp_exp_t mpreal::get_exp ()
1868 inline int mpreal::set_exp (mp_exp_t e)
1875 inline const mpreal frexp(const mpreal& v, mp_exp_t* exp)
1877 mpreal x(v);
1883 inline const mpreal ldexp(const mpreal& v, mp_exp_t exp)
1885 mpreal x(v);
1888 mpfr_mul_2si(x.mp,x.mp,exp,mpreal::get_default_rnd());
1892 inline mpreal machine_epsilon(mp_prec_t prec)
1895 return machine_epsilon(mpreal(1, prec));
1898 inline mpreal machine_epsilon(const mpreal& x)
1910 inline mpreal minval(mp_prec_t prec)
1913 return mpreal(1, prec) << mpreal::get_emin()-1;
1917 inline mpreal maxval(mp_prec_t prec)
1920 return (mpreal(1, prec) - machine_epsilon(prec)) << mpreal::get_emax();
1923 inline bool isEqualUlps(const mpreal& a, const mpreal& b, int maxUlps)
1928 inline bool isEqualFuzzy(const mpreal& a, const mpreal& b, const mpreal& eps)
1933 inline bool isEqualFuzzy(const mpreal& a, const mpreal& b)
1938 inline const mpreal modf(const mpreal& v, mpreal& n)
1940 mpreal frac(v);
1943 mpfr_frac(frac.mp,frac.mp,mpreal::get_default_rnd());
1948 inline int mpreal::check_range (int t, mp_rnd_t rnd_mode)
1953 inline int mpreal::subnormalize (int t,mp_rnd_t rnd_mode)
1960 inline mp_exp_t mpreal::get_emin (void)
1965 inline int mpreal::set_emin (mp_exp_t exp)
1970 inline mp_exp_t mpreal::get_emax (void)
1975 inline int mpreal::set_emax (mp_exp_t exp)
1980 inline mp_exp_t mpreal::get_emin_min (void)
1985 inline mp_exp_t mpreal::get_emin_max (void)
1990 inline mp_exp_t mpreal::get_emax_min (void)
1995 inline mp_exp_t mpreal::get_emax_max (void)
2004 mpreal y(0, mpfr_get_prec(x.mpfr_srcptr())); \
2008 inline const mpreal sqr (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sqr ); }
2009 inline const mpreal sqrt (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sqrt); }
2011 inline const mpreal sqrt(const unsigned long int x, mp_rnd_t r)
2013 mpreal y;
2018 inline const mpreal sqrt(const unsigned int v, mp_rnd_t rnd_mode)
2023 inline const mpreal sqrt(const long int v, mp_rnd_t rnd_mode)
2026 else return mpreal().setNan(); // NaN
2029 inline const mpreal sqrt(const int v, mp_rnd_t rnd_mode)
2032 else return mpreal().setNan(); // NaN
2035 inline const mpreal root(const mpreal& x, unsigned long int k, mp_rnd_t r)
2037 mpreal y(0, mpfr_get_prec(x.mpfr_srcptr()));
2042 inline const mpreal dim(const mpreal& a, const mpreal& b, mp_rnd_t r)
2044 mpreal y(0, mpfr_get_prec(a.mpfr_srcptr()));
2049 inline int cmpabs(const mpreal& a,const mpreal& b)
2054 inline int sin_cos(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode)
2059 inline const mpreal sqrt (const long double v, mp_rnd_t rnd_mode) { return sqrt(mpreal(v),rnd_mode); }
2060 inline const mpreal sqrt (const double v, mp_rnd_t rnd_mode) { return sqrt(mpreal(v),rnd_mode); }
2062 inline const mpreal cbrt (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cbrt ); }
2063 inline const mpreal fabs (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); }
2064 inline const mpreal abs (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(abs ); }
2065 inline const mpreal log (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log ); }
2066 inline const mpreal log2 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log2 ); }
2067 inline const mpreal log10 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log10); }
2068 inline const mpreal exp (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp ); }
2069 inline const mpreal exp2 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp2 ); }
2070 inline const mpreal exp10 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(exp10); }
2071 inline const mpreal cos (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cos ); }
2072 inline const mpreal sin (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sin ); }
2073 inline const mpreal tan (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(tan ); }
2074 inline const mpreal sec (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sec ); }
2075 inline const mpreal csc (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(csc ); }
2076 inline const mpreal cot (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cot ); }
2077 inline const mpreal acos (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(acos); }
2078 inline const mpreal asin (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(asin); }
2079 inline const mpreal atan (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(atan); }
2081 inline const mpreal acot (const mpreal& v, mp_rnd_t r) { return atan (1/v, r); }
2082 inline const mpreal asec (const mpreal& v, mp_rnd_t r) { return acos (1/v, r); }
2083 inline const mpreal acsc (const mpreal& v, mp_rnd_t r) { return asin (1/v, r); }
2084 inline const mpreal acoth (const mpreal& v, mp_rnd_t r) { return atanh(1/v, r); }
2085 inline const mpreal asech (const mpreal& v, mp_rnd_t r) { return acosh(1/v, r); }
2086 inline const mpreal acsch (const mpreal& v, mp_rnd_t r) { return asinh(1/v, r); }
2088 inline const mpreal cosh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(cosh ); }
2089 inline const mpreal sinh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sinh ); }
2090 inline const mpreal tanh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(tanh ); }
2091 inline const mpreal sech (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(sech ); }
2092 inline const mpreal csch (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(csch ); }
2093 inline const mpreal coth (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(coth ); }
2094 inline const mpreal acosh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(acosh); }
2095 inline const mpreal asinh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(asinh); }
2096 inline const mpreal atanh (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(atanh); }
2098 inline const mpreal log1p (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(log1p ); }
2099 inline const mpreal expm1 (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(expm1 ); }
2100 inline const mpreal eint (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(eint ); }
2101 inline const mpreal gamma (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(gamma ); }
2102 inline const mpreal lngamma (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(lngamma); }
2103 inline const mpreal zeta (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(zeta ); }
2104 inline const mpreal erf (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(erf ); }
2105 inline const mpreal erfc (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(erfc ); }
2106 inline const mpreal besselj0(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(j0 ); }
2107 inline const mpreal besselj1(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(j1 ); }
2108 inline const mpreal bessely0(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(y0 ); }
2109 inline const mpreal bessely1(const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(y1 ); }
2111 inline const mpreal atan2 (const mpreal& y, const mpreal& x, mp_rnd_t rnd_mode)
2113 mpreal a;
2126 inline const mpreal hypot (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2128 mpreal a;
2141 inline const mpreal remainder (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2143 mpreal a;
2156 inline const mpreal remquo (long* q, const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2158 mpreal a;
2171 inline const mpreal
2173 mpreal x(0, prec);
2179 inline const mpreal lgamma (const mpreal& v, int *signp, mp_rnd_t rnd_mode)
2181 mpreal x(v);
2191 inline const mpreal besseljn (long n, const mpreal& x, mp_rnd_t r)
2193 mpreal y(0, mpfr_get_prec(x.mpfr_srcptr()));
2198 inline const mpreal besselyn (long n, const mpreal& x, mp_rnd_t r)
2200 mpreal y(0, mpfr_get_prec(x.mpfr_srcptr()));
2205 inline const mpreal fma (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode)
2207 mpreal a;
2220 inline const mpreal fms (const mpreal& v1, const mpreal& v2, const mpreal& v3, mp_rnd_t rnd_mode)
2222 mpreal a;
2235 inline const mpreal agm (const mpreal& v1, const mpreal& v2, mp_rnd_t rnd_mode)
2237 mpreal a;
2250 inline const mpreal sum (const mpreal tab[], unsigned long int n, mp_rnd_t rnd_mode)
2252 mpreal x;
2267 inline int sinh_cosh(mpreal& s, mpreal& c, const mpreal& v, mp_rnd_t rnd_mode)
2272 inline const mpreal li2 (const mpreal& x, mp_rnd_t r)
2277 inline const mpreal rem (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2283 inline const mpreal mod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2301 mpreal m = x - floor(x / y) * y;
2308 inline const mpreal fmod (const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2310 mpreal a;
2323 inline const mpreal rec_sqrt(const mpreal& v, mp_rnd_t rnd_mode)
2325 mpreal x(v);
2334 inline const mpreal digamma (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(digamma); }
2335 inline const mpreal ai (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(ai); }
2340 inline const mpreal const_log2 (mp_prec_t p, mp_rnd_t r)
2342 mpreal x(0, p);
2347 inline const mpreal const_pi (mp_prec_t p, mp_rnd_t r)
2349 mpreal x(0, p);
2354 inline const mpreal const_euler (mp_prec_t p, mp_rnd_t r)
2356 mpreal x(0, p);
2361 inline const mpreal const_catalan (mp_prec_t p, mp_rnd_t r)
2363 mpreal x(0, p);
2368 inline const mpreal const_infinity (int sign, mp_prec_t p, mp_rnd_t /*r*/)
2370 mpreal x(0, p);
2377 inline const mpreal ceil(const mpreal& v)
2379 mpreal x(v);
2384 inline const mpreal floor(const mpreal& v)
2386 mpreal x(v);
2391 inline const mpreal round(const mpreal& v)
2393 mpreal x(v);
2398 inline const mpreal trunc(const mpreal& v)
2400 mpreal x(v);
2405 inline const mpreal rint (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint ); }
2406 inline const mpreal rint_ceil (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_ceil ); }
2407 inline const mpreal rint_floor (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_floor); }
2408 inline const mpreal rint_round (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_round); }
2409 inline const mpreal rint_trunc (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(rint_trunc); }
2410 inline const mpreal frac (const mpreal& x, mp_rnd_t r) { MPREAL_UNARY_MATH_FUNCTION_BODY(frac ); }
2414 inline void swap (mpreal& a, mpreal& b) { mpfr_swap(a.mp,b.mp); }
2415 inline const mpreal (max)(const mpreal& x, const mpreal& y){ return (x>y?x:y); }
2416 inline const mpreal (min)(const mpreal& x, const mpreal& y){ return (x<y?x:y); }
2418 inline const mpreal fmax(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2420 mpreal a;
2425 inline const mpreal fmin(const mpreal& x, const mpreal& y, mp_rnd_t rnd_mode)
2427 mpreal a;
2432 inline const mpreal nexttoward (const mpreal& x, const mpreal& y)
2434 mpreal a(x);
2439 inline const mpreal nextabove (const mpreal& x)
2441 mpreal a(x);
2446 inline const mpreal nextbelow (const mpreal& x)
2448 mpreal a(x);
2453 inline const mpreal urandomb (gmp_randstate_t& state)
2455 mpreal x;
2462 inline const mpreal urandom (gmp_randstate_t& state, mp_rnd_t rnd_mode)
2464 mpreal x;
2471 inline const mpreal random2 (mp_size_t size, mp_exp_t exp)
2473 mpreal x;
2483 inline const mpreal random(unsigned int seed)
2502 return mpfr::mpreal(std::rand()/(double)RAND_MAX);
2509 inline void mpreal::set_default_prec(mp_prec_t prec)
2514 inline void mpreal::set_default_rnd(mp_rnd_t rnd_mode)
2519 inline bool mpreal::fits_in_bits(double x, int n)
2526 inline const mpreal pow(const mpreal& a, const mpreal& b, mp_rnd_t rnd_mode)
2528 mpreal x(a);
2533 inline const mpreal pow(const mpreal& a, const mpz_t b, mp_rnd_t rnd_mode)
2535 mpreal x(a);
2540 inline const mpreal pow(const mpreal& a, const unsigned long int b, mp_rnd_t rnd_mode)
2542 mpreal x(a);
2547 inline const mpreal pow(const mpreal& a, const unsigned int b, mp_rnd_t rnd_mode)
2552 inline const mpreal pow(const mpreal& a, const long int b, mp_rnd_t rnd_mode)
2554 mpreal x(a);
2559 inline const mpreal pow(const mpreal& a, const int b, mp_rnd_t rnd_mode)
2564 inline const mpreal pow(const mpreal& a, const long double b, mp_rnd_t rnd_mode)
2566 return pow(a,mpreal(b),rnd_mode);
2569 inline const mpreal pow(const mpreal& a, const double b, mp_rnd_t rnd_mode)
2571 return pow(a,mpreal(b),rnd_mode);
2574 inline const mpreal pow(const unsigned long int a, const mpreal& b, mp_rnd_t rnd_mode)
2576 mpreal x(a);
2581 inline const mpreal pow(const unsigned int a, const mpreal& b, mp_rnd_t rnd_mode)
2586 inline const mpreal pow(const long int a, const mpreal& b, mp_rnd_t rnd_mode)
2589 else return pow(mpreal(a),b,rnd_mode);
2592 inline const mpreal pow(const int a, const mpreal& b, mp_rnd_t rnd_mode)
2595 else return pow(mpreal(a),b,rnd_mode);
2598 inline const mpreal pow(const long double a, const mpreal& b, mp_rnd_t rnd_mode)
2600 return pow(mpreal(a),b,rnd_mode);
2603 inline const mpreal pow(const double a, const mpreal& b, mp_rnd_t rnd_mode)
2605 return pow(mpreal(a),b,rnd_mode);
2609 inline const mpreal pow(const unsigned long int a, const unsigned long int b, mp_rnd_t rnd_mode)
2611 mpreal x(a);
2616 inline const mpreal pow(const unsigned long int a, const unsigned int b, mp_rnd_t rnd_mode)
2621 inline const mpreal pow(const unsigned long int a, const long int b, mp_rnd_t rnd_mode)
2624 else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow
2627 inline const mpreal pow(const unsigned long int a, const int b, mp_rnd_t rnd_mode)
2630 else return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow
2633 inline const mpreal pow(const unsigned long int a, const long double b, mp_rnd_t rnd_mode)
2635 return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow
2638 inline const mpreal pow(const unsigned long int a, const double b, mp_rnd_t rnd_mode)
2640 return pow(a,mpreal(b),rnd_mode); //mpfr_ui_pow
2644 inline const mpreal pow(const unsigned int a, const unsigned long int b, mp_rnd_t rnd_mode)
2649 inline const mpreal pow(const unsigned int a, const unsigned int b, mp_rnd_t rnd_mode)
2654 inline const mpreal pow(const unsigned int a, const long int b, mp_rnd_t rnd_mode)
2657 else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2660 inline const mpreal pow(const unsigned int a, const int b, mp_rnd_t rnd_mode)
2663 else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2666 inline const mpreal pow(const unsigned int a, const long double b, mp_rnd_t rnd_mode)
2668 return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2671 inline const mpreal pow(const unsigned int a, const double b, mp_rnd_t rnd_mode)
2673 return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2677 inline const mpreal pow(const long int a, const unsigned long int b, mp_rnd_t rnd_mode)
2680 else return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui
2683 inline const mpreal pow(const long int a, const unsigned int b, mp_rnd_t rnd_mode)
2686 else return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_pow_ui
2689 inline const mpreal pow(const long int a, const long int b, mp_rnd_t rnd_mode)
2694 else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2696 return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si
2700 inline const mpreal pow(const long int a, const int b, mp_rnd_t rnd_mode)
2705 else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2707 return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si
2711 inline const mpreal pow(const long int a, const long double b, mp_rnd_t rnd_mode)
2713 if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2714 else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow
2717 inline const mpreal pow(const long int a, const double b, mp_rnd_t rnd_mode)
2719 if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2720 else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow
2724 inline const mpreal pow(const int a, const unsigned long int b, mp_rnd_t rnd_mode)
2727 else return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui
2730 inline const mpreal pow(const int a, const unsigned int b, mp_rnd_t rnd_mode)
2733 else return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_pow_ui
2736 inline const mpreal pow(const int a, const long int b, mp_rnd_t rnd_mode)
2741 else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2743 return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si
2747 inline const mpreal pow(const int a, const int b, mp_rnd_t rnd_mode)
2752 else return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2754 return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si
2758 inline const mpreal pow(const int a, const long double b, mp_rnd_t rnd_mode)
2760 if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2761 else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow
2764 inline const mpreal pow(const int a, const double b, mp_rnd_t rnd_mode)
2766 if (a>=0) return pow(static_cast<unsigned long int>(a),mpreal(b),rnd_mode); //mpfr_ui_pow
2767 else return pow(mpreal(a),mpreal(b),rnd_mode); //mpfr_pow
2771 inline const mpreal pow(const long double a, const long double b, mp_rnd_t rnd_mode)
2773 return pow(mpreal(a),mpreal(b),rnd_mode);
2776 inline const mpreal pow(const long double a, const unsigned long int b, mp_rnd_t rnd_mode)
2778 return pow(mpreal(a),b,rnd_mode); //mpfr_pow_ui
2781 inline const mpreal pow(const long double a, const unsigned int b, mp_rnd_t rnd_mode)
2783 return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); //mpfr_pow_ui
2786 inline const mpreal pow(const long double a, const long int b, mp_rnd_t rnd_mode)
2788 return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si
2791 inline const mpreal pow(const long double a, const int b, mp_rnd_t rnd_mode)
2793 return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si
2796 inline const mpreal pow(const double a, const double b, mp_rnd_t rnd_mode)
2798 return pow(mpreal(a),mpreal(b),rnd_mode);
2801 inline const mpreal pow(const double a, const unsigned long int b, mp_rnd_t rnd_mode)
2803 return pow(mpreal(a),b,rnd_mode); // mpfr_pow_ui
2806 inline const mpreal pow(const double a, const unsigned int b, mp_rnd_t rnd_mode)
2808 return pow(mpreal(a),static_cast<unsigned long int>(b),rnd_mode); // mpfr_pow_ui
2811 inline const mpreal pow(const double a, const long int b, mp_rnd_t rnd_mode)
2813 return pow(mpreal(a),b,rnd_mode); // mpfr_pow_si
2816 inline const mpreal pow(const double a, const int b, mp_rnd_t rnd_mode)
2818 return pow(mpreal(a),static_cast<long int>(b),rnd_mode); // mpfr_pow_si
2822 // Explicit specialization of std::swap for mpreal numbers
2829 inline void swap(mpfr::mpreal& x, mpfr::mpreal& y)
2835 class numeric_limits<mpfr::mpreal>
2858 mp_rnd_t r = mpfr::mpreal::get_default_rnd();
2870 inline static mpfr::mpreal (min) (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::minval(precision); }
2871 inline static mpfr::mpreal (max) (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::maxval(precision); }
2872 inline static mpfr::mpreal lowest (mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return -mpfr::maxval(precision); }
2875 inline static mpfr::mpreal epsilon(mp_prec_t precision = mpfr::mpreal::get_default_prec()) { return mpfr::machine_epsilon(precision); }
2878 inline static mpfr::mpreal epsilon(const mpfr::mpreal& x) { return mpfr::machine_epsilon(x); }
2880 inline static mpfr::mpreal round_error(mp_prec_t precision = mpfr::mpreal::get_default_prec())
2882 mp_rnd_t r = mpfr::mpreal::get_default_rnd();
2884 if(r == MPFR_RNDN) return mpfr::mpreal(0.5, precision);
2885 else return mpfr::mpreal(1.0, precision);
2888 inline static const mpfr::mpreal infinity() { return mpfr::const_infinity(); }
2889 inline static const mpfr::mpreal quiet_NaN() { return mpfr::mpreal().setNan(); }
2890 inline static const mpfr::mpreal signaling_NaN() { return mpfr::mpreal().setNan(); }
2891 inline static const mpfr::mpreal denorm_min() { return (min)(); }
2901 inline static int digits() { return mpfr::mpreal::get_default_prec(); }
2902 inline static int digits(const mpfr::mpreal& x) { return x.getPrecision(); }
2904 inline static int digits10(mp_prec_t precision = mpfr::mpreal::get_default_prec())
2909 inline static int digits10(const mpfr::mpreal& x)
2914 inline static int max_digits10(mp_prec_t precision = mpfr::mpreal::get_default_prec())