summaryrefslogtreecommitdiff
path: root/ui_sub.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui_sub.c')
-rw-r--r--ui_sub.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/ui_sub.c b/ui_sub.c
index f83ef2d0d..1ec0f7ec8 100644
--- a/ui_sub.c
+++ b/ui_sub.c
@@ -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 */
}