Fixing an off-by-one error in bignum arithmetic-shift.

This commit is contained in:
Alex Shinn 2014-02-01 22:25:41 +09:00
parent 776fc91be4
commit 9dd60f6f13

View file

@ -186,7 +186,7 @@ static sexp sexp_arithmetic_shift (sexp ctx, sexp self, sexp_sint_t n, sexp i, s
} else { } else {
res = sexp_make_bignum(ctx, len - offset + 1); res = sexp_make_bignum(ctx, len - offset + 1);
sexp_bignum_sign(res) = sexp_bignum_sign(i); sexp_bignum_sign(res) = sexp_bignum_sign(i);
for (j=len-offset, tmp=0; j>=0; j--) { for (j=len-offset-1, tmp=0; j>=0; j--) {
sexp_bignum_data(res)[j] sexp_bignum_data(res)[j]
= (sexp_bignum_data(i)[j+offset] >> bit_shift)+ tmp; = (sexp_bignum_data(i)[j+offset] >> bit_shift)+ tmp;
tmp = sexp_bignum_data(i)[j+offset] tmp = sexp_bignum_data(i)[j+offset]