summaryrefslogtreecommitdiff
path: root/ui_sub.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2002-04-19 12:26:06 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2002-04-19 12:26:06 +0000
commit01a47f270cbdb4460adcee4d119bca071917e441 (patch)
tree40f9bf4f3a15ff0c4f1941981d30486beb0eb16a /ui_sub.c
parent73a7c65e1ebdfa0010e59ede641b50aa125483d7 (diff)
downloadmpfr-01a47f270cbdb4460adcee4d119bca071917e441.tar.gz
Added some assertions (any unsigned long must be representable
in a mp_limb_t). git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@1900 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'ui_sub.c')
-rw-r--r--ui_sub.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/ui_sub.c b/ui_sub.c
index 5cc94df76..10f356d8d 100644
--- a/ui_sub.c
+++ b/ui_sub.c
@@ -32,7 +32,7 @@ mpfr_ui_sub (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode)
mp_limb_t up[1];
unsigned long cnt;
- if (MPFR_IS_NAN(x))
+ if (MPFR_IS_NAN(x))
{
MPFR_SET_NAN(y);
MPFR_RET_NAN;
@@ -48,14 +48,15 @@ mpfr_ui_sub (mpfr_ptr y, unsigned long int u, mpfr_srcptr x, mp_rnd_t rnd_mode)
MPFR_RET(0); /* +/-infinity is exact */
}
- if (u) {
- MPFR_INIT1 (up, uu, BITS_PER_MP_LIMB, 1);
- count_leading_zeros (cnt, (mp_limb_t) u);
- *up = (mp_limb_t) u << cnt;
- MPFR_EXP(uu) = BITS_PER_MP_LIMB - cnt;
-
- return mpfr_sub (y, uu, x, rnd_mode);
- }
+ if (u)
+ {
+ MPFR_INIT1 (up, uu, BITS_PER_MP_LIMB, 1);
+ MPFR_ASSERTN(u == (mp_limb_t) u);
+ count_leading_zeros (cnt, (mp_limb_t) u);
+ *up = (mp_limb_t) u << cnt;
+ MPFR_EXP(uu) = BITS_PER_MP_LIMB - cnt;
+ return mpfr_sub (y, uu, x, rnd_mode);
+ }
else
return mpfr_neg (y, x, rnd_mode); /* if u=0, then set y to -x */
}