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);
}