py: Fix mpn_sub, was increasing wrong source pointer.
Also change int -> machine_int_t where appropriate.
This commit is contained in:
parent
2ee55c312d
commit
aca141269e
14
py/mpz.c
14
py/mpz.c
@ -113,7 +113,7 @@ uint mpn_sub(mpz_dig_t *idig, const mpz_dig_t *jdig, uint jlen, const mpz_dig_t
|
||||
borrow >>= DIG_SIZE;
|
||||
}
|
||||
|
||||
for (; jlen > 0; --jlen, ++idig, ++kdig) {
|
||||
for (; jlen > 0; --jlen, ++idig, ++jdig) {
|
||||
borrow += *jdig;
|
||||
*idig = borrow & DIG_MASK;
|
||||
borrow >>= DIG_SIZE;
|
||||
@ -315,7 +315,7 @@ void mpn_div(mpz_dig_t *num_dig, machine_uint_t *num_len, mpz_dig_t *den_dig, ma
|
||||
|
||||
#define MIN_ALLOC (4)
|
||||
#define ALIGN_ALLOC (2)
|
||||
#define NUM_DIG_FOR_INT (sizeof(int) * 8 / DIG_SIZE + 1)
|
||||
#define NUM_DIG_FOR_INT (sizeof(machine_int_t) * 8 / DIG_SIZE + 1)
|
||||
|
||||
static const uint log_base2_floor[] = {
|
||||
0,
|
||||
@ -329,7 +329,7 @@ static const uint log_base2_floor[] = {
|
||||
4, 4, 4, 5
|
||||
};
|
||||
|
||||
bool mpz_int_is_sml_int(int i) {
|
||||
bool mpz_int_is_sml_int(machine_int_t i) {
|
||||
return -(1 << DIG_SIZE) < i && i < (1 << DIG_SIZE);
|
||||
}
|
||||
|
||||
@ -497,7 +497,7 @@ int mpz_cmp(const mpz_t *z1, const mpz_t *z2) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
int mpz_cmp_sml_int(const mpz_t *z, int sml_int) {
|
||||
int mpz_cmp_sml_int(const mpz_t *z, machine_int_t sml_int) {
|
||||
int cmp;
|
||||
if (z->neg == 0) {
|
||||
if (sml_int < 0) return 1;
|
||||
@ -885,13 +885,13 @@ mpz_t *mpz_mod(const mpz_t *lhs, const mpz_t *rhs) {
|
||||
}
|
||||
#endif
|
||||
|
||||
int mpz_as_int(const mpz_t *i) {
|
||||
int val = 0;
|
||||
machine_int_t mpz_as_int(const mpz_t *i) {
|
||||
machine_int_t val = 0;
|
||||
mpz_dig_t *d = i->dig + i->len;
|
||||
|
||||
while (--d >= i->dig)
|
||||
{
|
||||
int oldval = val;
|
||||
machine_int_t oldval = val;
|
||||
val = (val << DIG_SIZE) | *d;
|
||||
if (val < oldval)
|
||||
{
|
||||
|
6
py/mpz.h
6
py/mpz.h
@ -11,7 +11,7 @@ typedef struct _mpz_t {
|
||||
mpz_dig_t *dig;
|
||||
} mpz_t;
|
||||
|
||||
bool mpz_int_is_sml_int(int i);
|
||||
bool mpz_int_is_sml_int(machine_int_t i);
|
||||
|
||||
void mpz_init_zero(mpz_t *z);
|
||||
void mpz_init_from_int(mpz_t *z, machine_int_t val);
|
||||
@ -35,7 +35,7 @@ bool mpz_is_odd(const mpz_t *z);
|
||||
bool mpz_is_even(const mpz_t *z);
|
||||
|
||||
int mpz_cmp(const mpz_t *lhs, const mpz_t *rhs);
|
||||
int mpz_cmp_sml_int(const mpz_t *lhs, int sml_int);
|
||||
int mpz_cmp_sml_int(const mpz_t *lhs, machine_int_t sml_int);
|
||||
|
||||
mpz_t *mpz_abs(const mpz_t *z);
|
||||
mpz_t *mpz_neg(const mpz_t *z);
|
||||
@ -58,7 +58,7 @@ void mpz_divmod_inpl(mpz_t *dest_quo, mpz_t *dest_rem, const mpz_t *lhs, const m
|
||||
mpz_t *mpz_div(const mpz_t *lhs, const mpz_t *rhs);
|
||||
mpz_t *mpz_mod(const mpz_t *lhs, const mpz_t *rhs);
|
||||
|
||||
int mpz_as_int(const mpz_t *z);
|
||||
machine_int_t mpz_as_int(const mpz_t *z);
|
||||
machine_float_t mpz_as_float(const mpz_t *z);
|
||||
uint mpz_as_str_size(const mpz_t *z, uint base);
|
||||
char *mpz_as_str(const mpz_t *z, uint base);
|
||||
|
Loading…
Reference in New Issue
Block a user