diff options
author | tege <tege@gmplib.org> | 2002-05-06 15:22:19 +0200 |
---|---|---|
committer | tege <tege@gmplib.org> | 2002-05-06 15:22:19 +0200 |
commit | 9080f17b46e75167b7f3bde7c1f0d45f99621db3 (patch) | |
tree | 74c3c0b10276e1ee3f3afc2184523f9594867e63 /mpf/set_si.c | |
parent | bd3be8816de78cfeee4881fe50ff0e1f6d7410f2 (diff) | |
download | gmp-9080f17b46e75167b7f3bde7c1f0d45f99621db3.tar.gz |
Nailify.
Diffstat (limited to 'mpf/set_si.c')
-rw-r--r-- | mpf/set_si.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/mpf/set_si.c b/mpf/set_si.c index 020d647ac..dd9a594cf 100644 --- a/mpf/set_si.c +++ b/mpf/set_si.c @@ -23,9 +23,24 @@ MA 02111-1307, USA. */ #include "gmp-impl.h" void -mpf_set_si (mpf_ptr f, long n) +mpf_set_si (mpf_ptr dest, long val) { - f->_mp_d[0] = (unsigned long) (n >= 0 ? n : -n); - f->_mp_exp = (n != 0); - f->_mp_size = (n < 0 ? -1 : n != 0); + mp_size_t size; + mp_limb_t vl; + + vl = (mp_limb_t) (unsigned long int) (val >= 0 ? val : -val); + + dest->_mp_d[0] = vl & GMP_NUMB_MASK; + size = vl != 0; + +#if GMP_NAIL_BITS != 0 + if (vl > GMP_NUMB_MAX) + { + dest->_mp_d[1] = vl >> GMP_NUMB_BITS; + size = 2; + } +#endif + + dest->_mp_exp = size; + dest->_mp_size = val >= 0 ? size : -size; } |