diff --git a/src/util/mpz.h b/src/util/mpz.h index e74da812a..f6ed99689 100644 --- a/src/util/mpz.h +++ b/src/util/mpz.h @@ -605,7 +605,11 @@ public: void set(mpz & a, unsigned val) { set(a, (uint64_t)val); } void set(mpz & a, int64_t val) { - if (mpz::fits_in_small(val) && is_small(a)) { + if (val == 0) { + // Zero is always represented as small + reset(a); + } + else if (mpz::fits_in_small(val) && is_small(a)) { a.set(val); } else { @@ -614,7 +618,11 @@ public: } void set(mpz & a, uint64_t val) { - if (mpz::fits_in_small(val) && is_small(a)) { + if (val == 0) { + // Zero is always represented as small + reset(a); + } + else if (mpz::fits_in_small(val) && is_small(a)) { a.set(static_cast(val)); } else {