Fix big subtraction for very large numbers on edges of overflow.

This commit is contained in:
gingerBill
2019-11-10 19:55:26 +00:00
parent 536cceeef9
commit 8da8301b09
+4 -1
View File
@@ -499,7 +499,7 @@ void big_int_add(BigInt *dst, BigInt const *x, BigInt const *y) {
smaller = &neg_abs; smaller = &neg_abs;
break; break;
default: default:
GB_PANIC("Invalid bit_int_cmp value"); GB_PANIC("Invalid big_int_cmp value");
return; return;
} }
@@ -530,6 +530,9 @@ void big_int_add(BigInt *dst, BigInt const *x, BigInt const *y) {
if (sub_overflow_u64(v, prev_overflow, &v)) { if (sub_overflow_u64(v, prev_overflow, &v)) {
found_word = true; found_word = true;
overflow += 1; overflow += 1;
} else {
// IMPORTANT TODO(bill): Is this mathematics correct here?
v += prev_overflow;
} }
dst->d.words[i] = v; dst->d.words[i] = v;
i += 1; i += 1;