Add quadtree back to the Makefile
[ipdf/code.git] / src / rational.h
index b019505..0fa5d99 100644 (file)
@@ -23,6 +23,7 @@ template <class T> T Tabs(const T & a)
 template <> Arbint Tabs(const Arbint & a);
 template <> Gmpint Tabs(const Gmpint & a);
 
+
 /* Recursive version  of GCD
 template <class T>
 T gcd(const T & a, const T & b)
@@ -77,6 +78,8 @@ struct Rational
        {
                Simplify();
        }
+       
+
 
        Rational(const T & _P, const T & _Q) : P(_P), Q(_Q)
        {
@@ -170,11 +173,20 @@ struct Rational
        Rational & operator-=(const Rational & r) {this->operator=(*this-r); return *this;}
        Rational & operator*=(const Rational & r) {this->operator=(*this*r); return *this;}
        Rational & operator/=(const Rational & r) {this->operator=(*this/r); return *this;}
+       Rational Sqrt() const
+       {
+               return Rational(sqrt(ToDouble()));
+       }
+
+       int64_t ToInt64() const
+       {
+               return (int64_t)ToDouble();
+       }
 
        double ToDouble() const 
        {
                T num = P, denom = Q;
-               while (Tabs(num) > T(DBL_MAX))
+               while (Tabs(num) > T(1e10))
                {
                        num /= T(16);
                        denom /= T(16);
@@ -205,8 +217,11 @@ struct Rational
 };
 
 
-
-
+template <class P>
+Rational<P> Abs(const Rational<P> & a)
+{
+       return Rational<P>(Tabs(a.P), a.Q);
+}
 
 }
 

UCC git Repository :: git.ucc.asn.au