summaryrefslogtreecommitdiff
path: root/src/mpfr-mini-gmp.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2017-12-06 17:14:27 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2017-12-06 17:14:27 +0000
commit83e97eec2d8c7537e9cf38aee3a0635e550f7d81 (patch)
tree32da5a5c86236ab69026feaf82d33cec51fb95d1 /src/mpfr-mini-gmp.c
parent976aedc24e707a04af06abf4d98c23234505aa08 (diff)
downloadmpfr-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.c106
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