Sfoglia il codice sorgente

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

gingerBill 5 anni fa
parent
commit
8da8301b09
1 ha cambiato i file con 4 aggiunte e 1 eliminazioni
  1. 4 1
      src/big_int.cpp

+ 4 - 1
src/big_int.cpp

@@ -499,7 +499,7 @@ void big_int_add(BigInt *dst, BigInt const *x, BigInt const *y) {
 			smaller = &neg_abs;
 			break;
 		default:
-			GB_PANIC("Invalid bit_int_cmp value");
+			GB_PANIC("Invalid big_int_cmp value");
 			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)) {
 				found_word = true;
 				overflow += 1;
+			} else {
+				// IMPORTANT TODO(bill): Is this mathematics correct here?
+				v += prev_overflow;
 			}
 			dst->d.words[i] = v;
 			i += 1;