summaryrefslogtreecommitdiff
path: root/gmpxx.h
diff options
context:
space:
mode:
authorMarco Bodrato <bodrato@mail.dm.unipi.it>2018-02-28 08:22:48 +0100
committerMarco Bodrato <bodrato@mail.dm.unipi.it>2018-02-28 08:22:48 +0100
commit0f939b626e99a0da91b35d73637b2905ec9d1e16 (patch)
tree5ba46f9b3e5dbe2dc402d20027a8437d0c303fe1 /gmpxx.h
parent1365b59a8e61268351ede67b1366e566b2ddf721 (diff)
downloadgmp-0f939b626e99a0da91b35d73637b2905ec9d1e16.tar.gz
gmpxx.h (__gmp_binary_equal): Optimised comparison mpq == integer.
Diffstat (limited to 'gmpxx.h')
-rw-r--r--gmpxx.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/gmpxx.h b/gmpxx.h
index 3d778689a..300ed62e6 100644
--- a/gmpxx.h
+++ b/gmpxx.h
@@ -981,11 +981,11 @@ struct __gmp_binary_equal
{ return mpq_equal(q, r) != 0; }
static bool eval(mpq_srcptr q, unsigned long int l)
- { return mpq_cmp_ui(q, l, 1) == 0; }
+ { return mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp_ui(mpq_numref(q), l) == 0; }
static bool eval(unsigned long int l, mpq_srcptr q)
{ return eval(q, l); }
static bool eval(mpq_srcptr q, signed long int l)
- { return mpq_cmp_si(q, l, 1) == 0; }
+ { return mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp_si(mpq_numref(q), l) == 0; }
static bool eval(signed long int l, mpq_srcptr q)
{ return eval(q, l); }
static bool eval(mpq_srcptr q, double d)
@@ -993,7 +993,7 @@ struct __gmp_binary_equal
static bool eval(double d, mpq_srcptr q)
{ return eval(q, d); }
static bool eval(mpq_srcptr q, mpz_srcptr z)
- { return mpq_cmp_z(q, z) == 0; }
+ { return mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp(mpq_numref(q), z) == 0; }
static bool eval(mpz_srcptr z, mpq_srcptr q)
{ return eval(q, z); }