summaryrefslogtreecommitdiff
path: root/add_ulp.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2001-11-16 10:04:07 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2001-11-16 10:04:07 +0000
commitd7c5add62414518abcc3aba8bcfd4f2576f553ff (patch)
tree88c350c64bfeddaa7b12aff653b9af7e9f2fa938 /add_ulp.c
parente541a0e318b9cd4508b5ff3c4e408108ae10a9af (diff)
downloadmpfr-d7c5add62414518abcc3aba8bcfd4f2576f553ff.tar.gz
1 -> BITS_PER_MP_LIMB
1 << (BITS_PER_MP_LIMB - 1) -> MP_LIMB_T_HIGHBIT git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1501 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'add_ulp.c')
-rw-r--r--add_ulp.c45
1 files changed, 23 insertions, 22 deletions
diff --git a/add_ulp.c b/add_ulp.c
index d94fd73b6..1c0c695b1 100644
--- a/add_ulp.c
+++ b/add_ulp.c
@@ -26,23 +26,21 @@ MA 02111-1307, USA. */
/* sets x to x+sign(x)*2^(MPFR_EXP(x)-MPFR_PREC(x)) */
void
-#if __STDC__
-mpfr_add_one_ulp(mpfr_ptr x)
-#else
-mpfr_add_one_ulp(x)
- mpfr_ptr x;
-#endif
+mpfr_add_one_ulp (mpfr_ptr x)
{
- int xn, sh; mp_limb_t *xp;
+ int xn, sh;
+ mp_limb_t *xp;
- if (MPFR_IS_INF(x)) { return; }
- xn = 1 + (MPFR_PREC(x)-1)/BITS_PER_MP_LIMB;
- sh = xn*BITS_PER_MP_LIMB - MPFR_PREC(x);
+ if (MPFR_IS_INF(x))
+ return;
+
+ xn = 1 + (MPFR_PREC(x) - 1) / BITS_PER_MP_LIMB;
+ sh = xn * BITS_PER_MP_LIMB - MPFR_PREC(x);
xp = MPFR_MANT(x);
- if (mpn_add_1(xp, xp, xn, (mp_limb_t)1<<sh)) {
- MPFR_EXP(x)++;
- mpn_rshift(xp, xp, xn, 1);
- xp[xn-1] += (mp_limb_t)1<<(BITS_PER_MP_LIMB-1);
+ if (mpn_add_1 (xp, xp, xn, MP_LIMB_T_ONE << sh)) /* got 1.0000... */
+ {
+ MPFR_EXP(x)++;
+ xp[xn-1] = MP_LIMB_T_HIGHBIT;
}
return;
}
@@ -51,18 +49,21 @@ mpfr_add_one_ulp(x)
void
mpfr_sub_one_ulp(mpfr_ptr x)
{
- int xn, sh; mp_limb_t *xp;
+ int xn, sh;
+ mp_limb_t *xp;
+
+ if (MPFR_IS_INF(x))
+ return;
- if (MPFR_IS_INF(x)) { return; }
- xn = 1 + (MPFR_PREC(x)-1)/BITS_PER_MP_LIMB;
- sh = xn*BITS_PER_MP_LIMB-MPFR_PREC(x);
+ xn = 1 + (MPFR_PREC(x) - 1) / BITS_PER_MP_LIMB;
+ sh = xn * BITS_PER_MP_LIMB - MPFR_PREC(x);
xp = MPFR_MANT(x);
- mpn_sub_1(xp, xp, xn, (mp_limb_t)1<<sh);
- if (xp[xn-1] >> (BITS_PER_MP_LIMB-1) == 0) {
+ mpn_sub_1 (xp, xp, xn, MP_LIMB_T_ONE << sh);
+ if (xp[xn-1] >> (BITS_PER_MP_LIMB - 1) == 0) {
/* was an exact power of two: not normalized any more */
MPFR_EXP(x)--;
- mpn_lshift(xp, xp, xn, 1);
- *xp |= ((mp_limb_t)1 << sh);
+ mpn_lshift (xp, xp, xn, 1);
+ *xp |= MP_LIMB_T_ONE << sh;
}
return;
}