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