diff options
Diffstat (limited to 'ui_sub.c')
-rw-r--r-- | ui_sub.c | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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_ui_sub (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode) 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 @@ mpfr_ui_sub (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode) /* 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_ui_sub (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode) 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 */ } |