summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-08-30 08:09:21 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2018-08-30 08:09:21 +0000
commit81cc6ae854ad735088be6ed73889ae68bb1b593e (patch)
treef66eed6d157c56744bcb00562dceacfe3c3f743f
parent95b1222d762bd3c20ab2d636b77eb5cf9de88cee (diff)
downloadmpfr-81cc6ae854ad735088be6ed73889ae68bb1b593e.tar.gz
[src/set_ui_2exp.c] fix for 16-bit limb
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@13078 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r--src/set_ui_2exp.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/set_ui_2exp.c b/src/set_ui_2exp.c
index 3a3742345..92f5f9557 100644
--- a/src/set_ui_2exp.c
+++ b/src/set_ui_2exp.c
@@ -34,6 +34,7 @@ mpfr_set_ui_2exp (mpfr_ptr x, unsigned long i, mpfr_exp_t e, mpfr_rnd_t rnd_mode
MPFR_SET_ZERO (x);
MPFR_RET (0);
}
+#ifdef MPFR_LONG_WITHIN_LIMB
else
{
mp_size_t xn;
@@ -69,4 +70,15 @@ mpfr_set_ui_2exp (mpfr_ptr x, unsigned long i, mpfr_exp_t e, mpfr_rnd_t rnd_mode
MPFR_EXP (x) = e;
return mpfr_check_range (x, inex, rnd_mode);
}
+#else
+ /* if a long does not fit into a limb, we use mpfr_set_z_2exp */
+ {
+ mpz_t z;
+ int inex;
+ mpz_init_set_ui (z, i);
+ inex = mpfr_set_z_2exp (x, z, e, rnd_mode);
+ mpz_clear (z);
+ return inex;
+ }
+#endif
}