py/mpz: Fix calculation of max digit storage for mpz; fix sys.maxsize.

When creating constant mpz's, the length of the mpz must be exactly how
many digits are used (not allocated) otherwise these numbers are not
compatible with dynamically allocated numbers.

Addresses issue #1448.
This commit is contained in:
Damien George
2015-09-15 16:15:57 +01:00
parent b230a86d33
commit 8b4fb4fe14
3 changed files with 27 additions and 11 deletions

View File

@@ -78,8 +78,9 @@ typedef int8_t mpz_dbl_dig_signed_t;
#define MPZ_LONG_1 1L
#endif
#define MPZ_NUM_DIG_FOR_INT (sizeof(mp_int_t) * 8 / MPZ_DIG_SIZE + 1)
#define MPZ_NUM_DIG_FOR_LL (sizeof(long long) * 8 / MPZ_DIG_SIZE + 1)
// these define the maximum storage needed to hold an int or long long
#define MPZ_NUM_DIG_FOR_INT ((sizeof(mp_int_t) * 8 + MPZ_DIG_SIZE - 1) / MPZ_DIG_SIZE)
#define MPZ_NUM_DIG_FOR_LL ((sizeof(long long) * 8 + MPZ_DIG_SIZE - 1) / MPZ_DIG_SIZE)
typedef struct _mpz_t {
mp_uint_t neg : 1;