bignum.cpp: Fix regression in bignum conversion. Fixes #1072.

db4
Doug Coleman 2014-06-16 20:52:51 -07:00
parent a6e0867b22
commit 2834bc90f8
1 changed files with 12 additions and 7 deletions

View File

@ -344,13 +344,18 @@ bignum* factor_vm::bignum_remainder(bignum* numerator, bignum* denominator) {
*scan = (accumulator & BIGNUM_DIGIT_MASK); \ *scan = (accumulator & BIGNUM_DIGIT_MASK); \
return (result); \ return (result); \
} else { \ } else { \
BIGNUM_ASSERT(BIGNUM_DIGITS_FOR(type) == 2); \ bignum_digit_type result_digits[BIGNUM_DIGITS_FOR(type)]; \
bignum* result = allot_bignum(2, negative_p); \ bignum_digit_type* end_digits = result_digits; \
bignum_digit_type* scan = (BIGNUM_START_PTR(result)); \ do { \
(*scan++) = (accumulator & BIGNUM_DIGIT_MASK); \ (*end_digits++) = (accumulator & BIGNUM_DIGIT_MASK); \
accumulator >>= BIGNUM_DIGIT_LENGTH; \ accumulator >>= BIGNUM_DIGIT_LENGTH; \
*scan = (accumulator & BIGNUM_DIGIT_MASK); \ } while (accumulator != 0); \
BIGNUM_ASSERT((accumulator >> BIGNUM_DIGIT_LENGTH) == 0); \ bignum* result = \
(allot_bignum((end_digits - result_digits), negative_p)); \
bignum_digit_type* scan_digits = result_digits; \
bignum_digit_type* scan_result = (BIGNUM_START_PTR(result)); \
while (scan_digits < end_digits) \
(*scan_result++) = (*scan_digits++); \
return (result); \ return (result); \
} \ } \
} \ } \