fixed a bug which didn't see overflow cascade all the way up in subtraction
This commit is contained in:
parent
079b16c51e
commit
0af557f86e
1 changed files with 7 additions and 7 deletions
14
integer.cpp
14
integer.cpp
|
@ -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,11 +144,11 @@ 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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue