ReducedFraction& ReducedFraction::operator-=(const ReducedFraction& val) { reduce(); ReducedFraction value = val; value.reduce(); const int tmp = lcm(denominator_, val.denominator_); numerator_ = fractionPart(tmp, numerator_, denominator_) - fractionPart(tmp, val.numerator_, val.denominator_); denominator_ = tmp; return *this; }
ReducedFraction& ReducedFraction::operator+=(const ReducedFraction& val) { preventOverflow(); ReducedFraction value = val; value.preventOverflow(); const int tmp = lcm(denominator_, val.denominator_); numerator_ = fractionPart(tmp, numerator_, denominator_) + fractionPart(tmp, val.numerator_, val.denominator_); denominator_ = tmp; return *this; }
bool ReducedFraction::operator!=(const ReducedFraction& val) const { const int v = lcm(denominator_, val.denominator_); return fractionPart(v, numerator_, denominator_) != fractionPart(v, val.numerator_, val.denominator_); }