diff options
author | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2018-03-03 15:55:53 +0100 |
---|---|---|
committer | Marco Bodrato <bodrato@mail.dm.unipi.it> | 2018-03-03 15:55:53 +0100 |
commit | 73c94b171cf23a69804d64b4332116a53c0ca23b (patch) | |
tree | 9d2ef492d3b0772660015dfe37080079c05e743e /gmpxx.h | |
parent | c9d562990c0bb995d1d9be89434642d8a7433579 (diff) | |
download | gmp-73c94b171cf23a69804d64b4332116a53c0ca23b.tar.gz |
gmpxx.h: Special handling for mpq==0
Diffstat (limited to 'gmpxx.h')
-rw-r--r-- | gmpxx.h | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -1,6 +1,7 @@ /* gmpxx.h -- C++ class wrapper for GMP types. -*- C++ -*- -Copyright 2001-2003, 2006, 2008, 2011-2015 Free Software Foundation, Inc. +Copyright 2001-2003, 2006, 2008, 2011-2015, 2018 Free Software +Foundation, Inc. This file is part of the GNU MP Library. @@ -981,11 +982,15 @@ struct __gmp_binary_equal { return mpq_equal(q, r) != 0; } static bool eval(mpq_srcptr q, unsigned long int l) - { return mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp_ui(mpq_numref(q), l) == 0; } + { return ((__GMPXX_CONSTANT(l) && l == 0) || + 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 mpz_cmp_ui(mpq_denref(q), 1) == 0 && mpz_cmp_si(mpq_numref(q), l) == 0; } + { return ((__GMPXX_CONSTANT(l) && l == 0) || + 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) |