diff --git a/src/util/mpf.cpp b/src/util/mpf.cpp index 584e01642..7287b69cf 100644 --- a/src/util/mpf.cpp +++ b/src/util/mpf.cpp @@ -797,9 +797,9 @@ void mpf_manager::fma(mpf_rounding_mode rm, mpf const & x, mpf const & y, mpf co set(o, z); } else if (is_zero(x) || is_zero(y)) { - bool xy_sgn = is_neg(x) ^ is_neg(y); - if (is_zero(z) && xy_sgn ^ is_neg(z)) - mk_zero(x.ebits, x.sbits, rm != MPF_ROUND_TOWARD_NEGATIVE, o); + bool xy_sgn = sgn(x) ^ sgn(y); + if (is_zero(z) && (xy_sgn ^ sgn(z))) + mk_zero(x.ebits, x.sbits, rm == MPF_ROUND_TOWARD_NEGATIVE, o); else set(o, z); }