diff -Naur mpfr-2.1.0-p16/ui_sub.c mpfr-2.1.0-p17/ui_sub.c --- mpfr-2.1.0-p16/ui_sub.c 2004-04-07 14:42:32.000000000 +0000 +++ mpfr-2.1.0-p17/ui_sub.c 2005-02-21 13:17:42.639432000 +0000 @@ -1,6 +1,6 @@ /* mpfr_ui_sub -- subtract a floating-point number from an integer -Copyright 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the MPFR Library. @@ -28,7 +28,10 @@ mpfr_t uu; mp_limb_t up[1]; unsigned long cnt; - + + if (MPFR_UNLIKELY (u == 0)) + return mpfr_neg (y, x, rnd_mode); + if (MPFR_UNLIKELY(MPFR_IS_SINGULAR(x))) { if (MPFR_IS_NAN(x)) @@ -47,7 +50,7 @@ /* u - 0 = u */ return mpfr_set_ui(y, u, rnd_mode); } - else if (MPFR_LIKELY(u)) + else { MPFR_TMP_INIT1 (up, uu, BITS_PER_MP_LIMB); MPFR_ASSERTN(u == (mp_limb_t) u); @@ -56,7 +59,4 @@ MPFR_SET_EXP (uu, BITS_PER_MP_LIMB - cnt); return mpfr_sub (y, uu, x, rnd_mode); } - else - /* u == 0 BUT x != 0 */ - return mpfr_neg (y, x, rnd_mode); /* if u=0, then set y to -x */ }