bool Rational::operator >=(const Rational& secondnum) const{ BigInt num1 = this->getNumerator(); BigInt num2 = secondnum.getNumerator(); BigInt deno1 = this->getDenomniator(); BigInt deno2 = secondnum.getDenomniator(); normalize(num1, deno1); normalize(num2, deno2); if(num1 < 0 && deno1 < 0){ num1 = -num1; deno1 = -deno1; } else if(num1 > 0 && deno1 < 0){ num1 = -num1; deno1 = -deno1; } if(num2 < 0 && deno2 < 0){ num2 = -num2; deno2 = -deno2; } else if(num2 > 0 && deno2 < 0){ num2 = -num2; deno2 = -deno2; } if(num1 * deno2 >= num2 * deno1){ return 1; } else{ return 0; } }
const Rational operator -(const Rational& num) { BigInt pos_num = num.getNumerator(); BigInt deno = num.getDenomniator(); normalize(pos_num, deno); BigInt neg_num = -pos_num; return Rational(neg_num, deno); }
const Rational operator -(const Rational& firstnum, const Rational& secondnum) { BigInt denominator = firstnum.getDenomniator() * secondnum.getDenomniator(); BigInt first_numerator = firstnum.getNumerator() * secondnum.getDenomniator(); BigInt second_numerator = secondnum.getNumerator() * firstnum.getDenomniator(); BigInt allnumerator = first_numerator - second_numerator; normalize(allnumerator, denominator); if(denominator < 0 && allnumerator < 0){ denominator = -denominator; allnumerator = -allnumerator; } else if(denominator < 0 && allnumerator > 0 ){ denominator = -denominator; allnumerator = - allnumerator; } return Rational(allnumerator, denominator); }