X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Frational.h;fp=src%2Frational.h;h=ce1a7670557737d725de5fd3515da7eb4e1d87b5;hp=9fe8f1f5f44b0e45b2b0111274165e8486644b85;hb=3ab3475a54c82cb9f5e0b1dbb88035f341b92d49;hpb=eaebb5a37393bb02c3272d6259d60ce75d197b6f diff --git a/src/rational.h b/src/rational.h index 9fe8f1f..ce1a767 100644 --- a/src/rational.h +++ b/src/rational.h @@ -37,9 +37,9 @@ T gcd(const T & p, const T & q) big = q; small = p; } - if (small == 0) + if (small == T(0)) return g; - while ((g = big % small) > 0) + while ((g = big % small) > T(0)) { big = small; small = g; @@ -69,17 +69,17 @@ struct Rational void Simplify() { - if (Q < 0) + if (Q < T(0)) { P = -P; Q = -Q; } - if (P == 0) + if (P == T(0)) { - Q = 1; + Q = T(1); return; } - T g = gcd(llabs(P),llabs(Q)); + T g = gcd(T(llabs(P)),T(llabs(Q))); P /= g; Q /= g; } @@ -99,13 +99,13 @@ struct Rational Rational operator+(const Rational & r) const { - Rational result = (r.P == 0) ? Rational(P,Q) : Rational(P*r.Q + r.P*Q, Q*r.Q); + Rational result = (r.P == T(0)) ? Rational(P,Q) : Rational(P*r.Q + r.P*Q, Q*r.Q); result.CheckAccuracy(ToDouble() + r.ToDouble(),"+"); return result; } Rational operator-(const Rational & r) const { - Rational result = (r.P == 0) ? Rational(P,Q) : Rational(P*r.Q - r.P*Q, Q*r.Q); + Rational result = (r.P == T(0)) ? Rational(P,Q) : Rational(P*r.Q - r.P*Q, Q*r.Q); result.CheckAccuracy(ToDouble() - r.ToDouble(),"-"); return result; } @@ -171,6 +171,7 @@ inline Rational pow(const Rational & a, const Rational