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;
      }
ReducedFraction& ReducedFraction::operator/=(const ReducedFraction& val)
      {
      preventOverflow();
      ReducedFraction value = val;
      value.preventOverflow();

      Q_ASSERT_X(!isMultiplicationOverflow(numerator_, val.denominator_),
                 "ReducedFraction::operator/=", "Multiplication overflow");
      Q_ASSERT_X(!isMultiplicationOverflow(denominator_, val.numerator_),
                 "ReducedFraction::operator/=", "Multiplication overflow");

      numerator_ *= val.denominator_;
      denominator_  *= val.numerator_;
      return *this;
      }