int den () const { return den_; }
int num_i () const { return sign_ * num_; }
int den_i () const { return den_; }
- Rational truncated () const;
+ Rational trunc_rat () const;
+ Rational div_rat (Rational) const;
+ Rational mod_rat (Rational) const;
void negate ();
operator bool () const;
operator int () const;
Rational &operator /= (Rational);
Rational &operator += (Rational);
Rational &operator -= (Rational);
+ Rational &operator %= (Rational);
static int compare (Rational const&, Rational const&);
int sign () const;
String str () const;
IMPLEMENT_ARITHMETIC_OPERATOR (Rational, + );
IMPLEMENT_ARITHMETIC_OPERATOR (Rational, * );
IMPLEMENT_ARITHMETIC_OPERATOR (Rational, - );
+IMPLEMENT_ARITHMETIC_OPERATOR (Rational, % );
INSTANTIATE_COMPARE (Rational const&, Rational::compare);
}
Rational
-Rational::truncated () const
+Rational::trunc_rat () const
{
return Rational(num_ - (num_ % den_), den_);
}
return r;
}
+Rational
+Rational::div_rat (Rational div) const
+{
+ Rational r (*this);
+ r /= div;
+ return r.trunc_rat ();
+}
+
+Rational
+Rational::mod_rat (Rational div) const
+{
+ Rational r (*this);
+ r = (r / div - r.div_rat (div)) * div;
+ return r;
+}
+
void
Rational::normalise ()
{
return Rational::compare (r, s );
}
+Rational &
+Rational::operator %= (Rational r)
+{
+ *this = r.mod_rat (r);
+ return *this;
+}
+
Rational &
Rational::operator += (Rational r)
{
time3_2beamAutoEnd32 = "1/8";
time3_4beamAutoBegin = "1/4";
time3_4beamAutoEnd8 = "3/4";
+time3_4beamAutoBegin32 = "1/8";
time3_4beamAutoEnd32 = "1/8";
time3_8beamAutoBegin = "1/8";
time3_8beamAutoEnd = "3/8";