fixed a bug which didn't see overflow cascade all the way up in subtraction

This commit is contained in:
Pagwin 2024-12-11 20:26:01 -05:00
parent 079b16c51e
commit 0af557f86e
No known key found for this signature in database
GPG key ID: 81137023740CA260

View file

@ -136,7 +136,7 @@ public:
friend Integer &abs_sub(Integer &lhs, Integer const &rhs) {
assert(abs_lt(rhs, lhs));
auto r_size = rhs.true_size();
auto t_size = r_size + (lhs.true_size() > r_size ? 1 : 0);
auto t_size = lhs.true_size();
bool overflow = false;
for (std::size_t i = 0; i < t_size; i++) {
byte to_sub = 0;
@ -144,12 +144,12 @@ public:
overflow = false;
if (r_size > i) {
to_sub = rhs.bytes[i];
}
if (to_sub + overflow_handle > lhs.bytes[i] ||
// overflow detection
(to_sub + overflow_handle == 0 && to_sub != 0)) {
overflow = true;
}
}
lhs.bytes[i] -= to_sub + overflow_handle;
}
return lhs;
@ -319,7 +319,7 @@ int main(void) {
}
for (std::size_t i = 0; i <= 4500; i++) {
Integer n = i;
std::cout << n << std::endl;
// std::cout << n << std::endl;
Integer base_n = n;
n *= 1;
assert(n == base_n);