diff options
-rw-r--r-- | ui_sub.c | 24 |
1 files changed, 15 insertions, 9 deletions
@@ -30,9 +30,9 @@ MA 02111-1307, USA. */ void #if __STDC__ -mpfr_ui_sub(mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode) +mpfr_ui_sub (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode) #else -mpfr_ui_sub(y, u, x, rnd_mode) +mpfr_ui_sub (y, u, x, rnd_mode) mpfr_ptr y; unsigned long int u; mpfr_srcptr x; @@ -44,11 +44,17 @@ mpfr_ui_sub(y, u, x, rnd_mode) unsigned long cnt; TMP_DECL(marker); - if (MPFR_IS_NAN(x)) { MPFR_SET_NAN(y); return; } - if (MPFR_IS_INF(x)) - { - MPFR_SET_INF(y); - if (MPFR_SIGN(x) == MPFR_SIGN(y)) { MPFR_CHANGE_SIGN(y); } return; + if (MPFR_IS_NAN(x)) + { + MPFR_SET_NAN(y); + return; + } + + if (MPFR_IS_INF(x)) + { + MPFR_SET_INF(y); + if (MPFR_SIGN(x) == MPFR_SIGN(y)) MPFR_CHANGE_SIGN(y); + return; } if (u) { @@ -58,9 +64,9 @@ mpfr_ui_sub(y, u, x, rnd_mode) *up = (mp_limb_t) u << cnt; MPFR_EXP(uu) = BITS_PER_MP_LIMB-cnt; - mpfr_sub(y, uu, x, rnd_mode); + mpfr_sub (y, uu, x, rnd_mode); TMP_FREE(marker); } - else mpfr_neg(y, x, rnd_mode); /* if u=0, then set y to -x */ + else mpfr_neg (y, x, rnd_mode); /* if u=0, then set y to -x */ } |