From 2d8505c4e91c252067110df0571564eab836b973 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Sat, 18 Feb 2012 21:16:26 +0100 Subject: Remove a temporary in expressions like q=q*q+z*z: tmp=z*z, q=q*q, q+=tmp. Note that we could do the same for q=q*q+z, but that would require checking if z is the numerator or denominator of q. --- gmpxx.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'gmpxx.h') diff --git a/gmpxx.h b/gmpxx.h index c3505199d..b3aa5653b 100644 --- a/gmpxx.h +++ b/gmpxx.h @@ -2576,7 +2576,7 @@ public: \ { eval_fun::eval(q, expr.val1.get_mpz_t(), expr.val2.get_mpq_t()); } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template <> \ @@ -2594,7 +2594,7 @@ public: \ { eval_fun::eval(q, expr.val1.get_mpq_t(), expr.val2.get_mpz_t()); } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template \ @@ -2616,7 +2616,7 @@ public: \ } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template \ @@ -2638,7 +2638,7 @@ public: \ } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template \ @@ -2660,7 +2660,7 @@ public: \ } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template \ @@ -2682,7 +2682,7 @@ public: \ } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template \ @@ -2700,12 +2700,12 @@ public: \ void eval(mpq_ptr q) const \ { \ mpz_class temp1(expr.val1); \ - mpq_class temp2(expr.val2); \ - eval_fun::eval(q, temp1.get_mpz_t(), temp2.get_mpq_t()); \ + expr.val2.eval(q); \ + eval_fun::eval(q, temp1.get_mpz_t(), q); \ } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; \ \ template \ @@ -2722,13 +2722,13 @@ public: \ : expr(val1, val2) { } \ void eval(mpq_ptr q) const \ { \ - mpq_class temp1(expr.val1); \ mpz_class temp2(expr.val2); \ - eval_fun::eval(q, temp1.get_mpq_t(), temp2.get_mpz_t()); \ + expr.val1.eval(q); \ + eval_fun::eval(q, q, temp2.get_mpz_t()); \ } \ const val1_type & get_val1() const { return expr.val1; } \ const val2_type & get_val2() const { return expr.val2; } \ - mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ + mp_bitcnt_t get_prec() const { return mpf_get_default_prec(); } \ }; -- cgit v1.2.1