diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2017-12-06 17:14:27 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2017-12-06 17:14:27 +0000 |
commit | 83e97eec2d8c7537e9cf38aee3a0635e550f7d81 (patch) | |
tree | 32da5a5c86236ab69026feaf82d33cec51fb95d1 /src/mpfr-mini-gmp.c | |
parent | 976aedc24e707a04af06abf4d98c23234505aa08 (diff) | |
download | mpfr-83e97eec2d8c7537e9cf38aee3a0635e550f7d81.tar.gz |
[src/mpfr-mini-gmp.c] updated with GMP 6.1.2
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@11926 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/mpfr-mini-gmp.c')
-rw-r--r-- | src/mpfr-mini-gmp.c | 106 |
1 files changed, 44 insertions, 62 deletions
diff --git a/src/mpfr-mini-gmp.c b/src/mpfr-mini-gmp.c index 0091d46bb..a9f6db766 100644 --- a/src/mpfr-mini-gmp.c +++ b/src/mpfr-mini-gmp.c @@ -29,6 +29,8 @@ http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., #include "mpfr-mini-gmp.h" +/************************ random generation functions ************************/ + #ifdef WANT_gmp_randinit_default void gmp_randinit_default (gmp_randstate_t state) @@ -58,45 +60,6 @@ gmp_randinit_set (gmp_randstate_t s1, gmp_randstate_t s2) } #endif -#ifdef WANT_mpn_divrem_1 -mp_limb_t -mpn_divrem_1 (mp_limb_t *qp, mp_size_t qxn, mp_limb_t *np, mp_size_t nn, - mp_limb_t d0) -{ - mpz_t q, r, n, d; - mp_limb_t ret, dd[1]; - - d->_mp_d = dd; - d->_mp_d[0] = d0; - d->_mp_size = 1; - mpz_init (q); - mpz_init (r); - if (qxn == 0) - { - n->_mp_d = np; - n->_mp_size = nn; - } - else - { - mpz_init2 (n, (nn + qxn) * GMP_NUMB_BITS); - mpn_copyi (n->_mp_d + qxn, np, nn); - mpn_zero (n->_mp_d, qxn); - n->_mp_size = nn + qxn; - } - mpz_tdiv_qr (q, r, n, d); - if (q->_mp_size > 0) - mpn_copyi (qp, q->_mp_d, q->_mp_size); - if (q->_mp_size < nn + qxn) - mpn_zero (qp + q->_mp_size, nn + qxn - q->_mp_size); - ret = (r->_mp_size == 1) ? r->_mp_d[0] : 0; - mpz_clear (q); - mpz_clear (r); - if (qxn != 0) - mpz_clear (n); - return ret; -} -#endif - static mp_limb_t random_limb (void) { @@ -145,6 +108,47 @@ gmp_urandomb_ui (gmp_randstate_t state, unsigned long n) } #endif +/************************* division functions ********************************/ + +#ifdef WANT_mpn_divrem_1 +mp_limb_t +mpn_divrem_1 (mp_limb_t *qp, mp_size_t qxn, mp_limb_t *np, mp_size_t nn, + mp_limb_t d0) +{ + mpz_t q, r, n, d; + mp_limb_t ret, dd[1]; + + d->_mp_d = dd; + d->_mp_d[0] = d0; + d->_mp_size = 1; + mpz_init (q); + mpz_init (r); + if (qxn == 0) + { + n->_mp_d = np; + n->_mp_size = nn; + } + else + { + mpz_init2 (n, (nn + qxn) * GMP_NUMB_BITS); + mpn_copyi (n->_mp_d + qxn, np, nn); + mpn_zero (n->_mp_d, qxn); + n->_mp_size = nn + qxn; + } + mpz_tdiv_qr (q, r, n, d); + if (q->_mp_size > 0) + mpn_copyi (qp, q->_mp_d, q->_mp_size); + if (q->_mp_size < nn + qxn) + mpn_zero (qp + q->_mp_size, nn + qxn - q->_mp_size); + ret = (r->_mp_size == 1) ? r->_mp_d[0] : 0; + mpz_clear (q); + mpz_clear (r); + if (qxn != 0) + mpz_clear (n); + return ret; +} +#endif + #ifdef WANT_mpn_divrem mp_limb_t mpn_divrem (mp_limb_t *qp, mp_size_t qn, mp_limb_t *np, @@ -204,29 +208,7 @@ mpn_tdiv_qr (mp_limb_t *qp, mp_limb_t *rp, mp_size_t qxn, } #endif -#ifdef WANT_mpn_sqrtrem -mp_size_t -mpn_sqrtrem (mp_limb_t *sp, mp_limb_t *rp, const mp_limb_t *np, mp_size_t nn) -{ - mpz_t s, r, n; - mp_size_t sn = (nn + 1) >> 1, ret; - - MPFR_ASSERTN(rp == NULL); - n->_mp_d = (mp_limb_t*) np; - n->_mp_size = nn; - mpz_init (s); - mpz_init (r); - mpz_sqrtrem (s, r, n); - if (s->_mp_size > 0) - mpn_copyi (sp, s->_mp_d, s->_mp_size); - if (s->_mp_size < sn) - mpn_zero (sp + s->_mp_size, sn - s->_mp_size); - ret = r->_mp_size; - mpz_clear (s); - mpz_clear (r); - return ret; -} -#endif +/*************************** miscellaneous functions *************************/ #ifdef WANT_mpz_dump void |