mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[poincare] Fix bug in Integer subtraction!
Change-Id: I2404d5d3b32e282c42cefb34e10d52ea44ba8931
This commit is contained in:
@@ -381,7 +381,7 @@ Integer Integer::usum(const Integer & a, const Integer & b, bool subtract, bool
|
||||
native_uint_t bDigit = (i >= b.m_numberOfDigits ? 0 : b.digit(i));
|
||||
native_uint_t result = (subtract ? aDigit - bDigit - carry : aDigit + bDigit + carry);
|
||||
digits[i] = result;
|
||||
carry = (subtract ? (aDigit<result) : ((aDigit>result)||(bDigit>result))); // There's been an underflow or overflow
|
||||
carry = (subtract ? (aDigit<result+carry) : ((aDigit>result)||(bDigit>result))); // There's been an underflow or overflow
|
||||
}
|
||||
while (digits[size-1] == 0 && size>1) {
|
||||
size--;
|
||||
|
||||
@@ -33,6 +33,7 @@ QUIZ_CASE(poincare_integer_addition) {
|
||||
assert(Integer::Addition(Integer("123456789123456789"), Integer(1)).isEqualTo(Integer("123456789123456790")));
|
||||
assert(Integer::Addition(Integer("-123456789123456789"), Integer("123456789123456789")).isEqualTo(Integer("0")));
|
||||
assert(Integer::Addition(Integer("234"), Integer(-234)).isEqualTo(Integer(0)));
|
||||
assert(Integer::Addition(Integer("18446744073709551616"), Integer("18446744073709551368")).isEqualTo(Integer("36893488147419102984")));
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_integer_subtraction) {
|
||||
@@ -43,6 +44,7 @@ QUIZ_CASE(poincare_integer_subtraction) {
|
||||
assert(Integer::Subtraction(Integer(-23), Integer(-23)).isEqualTo(Integer(0)));
|
||||
assert(Integer::Subtraction(Integer("-123456789123456789"), Integer("-123456789123456789")).isEqualTo(Integer(0)));
|
||||
assert(Integer::Subtraction(Integer("123456789123456789"), Integer("123456789123456789")).isEqualTo(Integer(0)));
|
||||
assert(Integer::Subtraction(Integer("18446744073709551616"), Integer("18446744073709551368")).isEqualTo(Integer(248)));
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_integer_multiplication) {
|
||||
@@ -76,6 +78,7 @@ QUIZ_CASE(poincare_integer_divide) {
|
||||
assert(Integer::Division(Integer("12345678910111213141516171819202122"), Integer("10")).quotient.isEqualTo(Integer("1234567891011121314151617181920212")) && Integer::Division(Integer("12345678910111213141516171819202122"), Integer("10")).remainder.isEqualTo(Integer("2")));
|
||||
assert(Integer::Division(Integer("0"), Integer("-10")).quotient.isEqualTo(Integer("0")) && Integer::Division(Integer("0"), Integer("-10")).remainder.isEqualTo(Integer("0")));
|
||||
assert(Integer::Division(Integer("0"), Integer("-123456789098760")).quotient.isEqualTo(Integer("0")) && Integer::Division(Integer("0"), Integer("-123456789098760")).remainder.isEqualTo(Integer("0")));
|
||||
assert(Integer::Division(Integer("2305843009213693952"), Integer("2305843009213693921")).quotient.isEqualTo(Integer("1")) && Integer::Division(Integer("2305843009213693952"), Integer("2305843009213693921")).remainder.isEqualTo(Integer("31")));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
|
||||
Reference in New Issue
Block a user