diff --git a/integer.cpp b/integer.cpp index 0a8c544..d6db35d 100644 --- a/integer.cpp +++ b/integer.cpp @@ -128,7 +128,18 @@ public: } return lhs; } - friend Integer &abs_sub(Integer &lhs, Integer const &rhs) { return lhs; } + friend Integer &abs_sub(Integer &lhs, Integer const &rhs) { + assert(lhs > rhs); + auto t_size = rhs.true_size(); + bool overflow = false; + for (std::size_t i = 0; i < t_size; i++) { + if (rhs.bytes[i] + (overflow ? 1 : 0) > lhs.bytes[i]) { + overflow = true; + } + lhs.bytes[i] -= rhs.bytes[i] + (overflow ? 1 : 0); + } + return lhs; + } friend Integer &operator+=(Integer &lhs, Integer const &rhs) { // TODO: negative numbers if (lhs.isNegative == rhs.isNegative) {