putc('\n', stderr);
#endif /* def MPZ_TEST_DIV */
return (PyObject *)z;
-
+
} /* mpz_divide() */
static PyObject *
#endif /* def MPZ_SPARE_MALLOC */
mpzobject *z;
-
+
if ((
#ifdef MPZ_SPARE_MALLOC
cmpres =
putc('\n', stderr);
#endif /* def MPZ_TEST_DIV */
return (PyObject *)z;
-
+
} /* mpz_remainder() */
static PyObject *
(void)PyTuple_SetItem(z, 0, (PyObject *)x);
(void)PyTuple_SetItem(z, 1, (PyObject *)y);
-
+
return z;
} /* mpz_div_and_mod() */
Py_INCREF(mpz_value_one);
return (PyObject *)mpz_value_one;
}
-
+
if (cmpres < 0) {
PyErr_SetString(PyExc_ValueError,
"mpz.pow to negative exponent");
if ((z = newmpzobject()) == NULL)
return NULL;
-
+
mpz_pow_ui(&z->mpz, &a->mpz, mpz_get_ui(&b->mpz));
-
+
return (PyObject *)z;
} /* mpz_power() */
{
mpzobject *z;
-
+
#ifdef MPZ_SPARE_MALLOC
if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) == 0) {
/* -0 == 0 */
{
mpzobject *z;
-
+
if (mpz_cmp_ui(&v->mpz, (unsigned long int)0) >= 0) {
Py_INCREF(v);
return (PyObject *)v;
mpz_xor(MP_INT *res, const MP_INT *op1, const MP_INT *op2)
{
MP_INT tmpmpz;
-
+
mpz_init(&tmpmpz);
mpz_and(res, op1, op2);
if (!PyArg_Parse(objp, "l", &lval))
return NULL;
-
+
if (lval == (long)0) {
Py_INCREF(mpz_value_zero);
mpzp = mpz_value_zero;
MP_INT mplongdigit;
int i;
unsigned char isnegative;
-
+
if ((mpzp = newmpzobject()) == NULL)
return NULL;
mpz_set_si(&mpzp->mpz, 0L);
mpz_init(&mplongdigit);
-
+
/* how we're gonna handle this? */
if ((isnegative =
((i = ((PyLongObject *)objp)->ob_size) < 0) ))
mpz_set_si(&mpzp->mpz, 0L);
mpz_init(&mplongdigit);
-
+
/* let's do it the same way as with the long conversion:
without thinking how it can be faster (-: :-) */
mpzobject *z;
int tstres;
-
+
if (!PyArg_Parse(args, "(OOO)", &base, &exp, &mod))
return NULL;
else {
mpz_powm(&z->mpz, &mpzbase->mpz, &mpzexp->mpz, &mpzmod->mpz);
}
-
+
Py_DECREF(mpzbase);
Py_DECREF(mpzexp);
Py_DECREF(mpzmod);
mpzobject *mpzop1 = NULL, *mpzop2 = NULL;
mpzobject *z;
-
+
if (!PyArg_Parse(args, "(OO)", &op1, &op2))
return NULL;
mpzobject *mpzop1 = NULL, *mpzop2 = NULL;
mpzobject *g = NULL, *s = NULL, *t = NULL;
-
+
if (!PyArg_Parse(args, "(OO)", &op1, &op2))
return NULL;
mpzobject *mpzop = NULL;
mpzobject *z;
-
+
if (!PyArg_Parse(args, "O", &op))
return NULL;
mpzobject *mpzop = NULL;
mpzobject *root = NULL, *rem = NULL;
-
+
if (!PyArg_Parse(args, "O", &op))
return NULL;
}
else
mpz_mod(res, &s0, mod);
-
+
#else /* def MPZ_MDIV_BUG */
mpz_mmod(res, &s0, mod);
#endif /* def MPZ_MDIV_BUG else */
mpzobject *mpznum, *mpzden = NULL, *mpzmod = NULL;
mpzobject *z = NULL;
-
+
if (!PyArg_Parse(args, "(OOO)", &num, &den, &mod))
return NULL;
Py_XDECREF(mpzmod);
return NULL;
}
-
+
mpz_divm(&z->mpz, &mpznum->mpz, &mpzden->mpz, &mpzmod->mpz);
Py_DECREF(mpznum);
while (ldcount > 0 && longobjp->ob_digit[ldcount-1] == 0)
ldcount--;
longobjp->ob_size = ldcount;
-
+
if (isnegative)
longobjp->ob_size = -longobjp->ob_size;
return (PyObject *)longobjp;
-
+
} /* mpz_long() */
/* I would have avoided pow() anyways, so ... */
static const double multiplier = 256.0 * 256.0 * 256.0 * 256.0;
-
+
#ifdef MPZ_CONVERSIONS_AS_METHODS
static PyObject *
mpz_float(mpzobject *self, PyObject *args)
#endif /* def MPZ_CONVERSIONS_AS_METHODS */
i = (int)mpz_size(&self->mpz);
-
+
/* determine sign, and copy abs(self) to scratch var */
if ((isnegative = (mpz_cmp_ui(&self->mpz, (unsigned long int)0) < 0)))
{
x = -x;
return PyFloat_FromDouble(x);
-
+
} /* mpz_float() */
#ifdef MPZ_CONVERSIONS_AS_METHODS
if (!PyArg_NoArgs(args))
return NULL;
#endif /* def MPZ_CONVERSIONS_AS_METHODS */
-
+
return mpz_format((PyObject *)self, 16, (unsigned char)1);
} /* mpz_hex() */
-
+
#ifdef MPZ_CONVERSIONS_AS_METHODS
static PyObject *
mpz_oct(mpzobject *self, PyObject *args)
return mpz_format((PyObject *)self, 8, (unsigned char)1);
} /* mpz_oct() */
-
+
static PyObject *
mpz_binary(mpzobject *self, PyObject *args)
{
char *cp;
MP_INT mp;
unsigned long ldigit;
-
+
if (!PyArg_NoArgs(args))
return NULL;
*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
*cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ if (sizeof(ldigit) == 8 && BITS_PER_MP_LIMB == 64) {
+ *cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ *cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ *cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ *cp++ = (unsigned char)((ldigit >>= 8) & 0xFF);
+ }
}
while (strobjp->ob_size && !*--cp)
return (PyObject *)strobjp;
} /* mpz_binary() */
-
+
static PyMethodDef mpz_methods[] = {
#ifdef MPZ_CONVERSIONS_AS_METHODS