diff options
author | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2002-04-19 12:26:06 +0000 |
---|---|---|
committer | vlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4> | 2002-04-19 12:26:06 +0000 |
commit | 01a47f270cbdb4460adcee4d119bca071917e441 (patch) | |
tree | 40f9bf4f3a15ff0c4f1941981d30486beb0eb16a /ui_sub.c | |
parent | 73a7c65e1ebdfa0010e59ede641b50aa125483d7 (diff) | |
download | mpfr-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.c | 19 |
1 files changed, 10 insertions, 9 deletions
@@ -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 */ } |