public static PrecisionDecimal operator /(PrecisionDecimal lhs, PrecisionDecimal rhs)
            {
                PrecisionDecimal ans = new PrecisionDecimal();

                ans.P = lhs.P.Multiply(rhs.Q);
                ans.Q = lhs.Q.Multiply(rhs.P);
                return(ans);
            }
            public static PrecisionDecimal operator +(PrecisionDecimal lhs, PrecisionDecimal rhs)
            {
                PrecisionDecimal ans = new PrecisionDecimal();

                ans.P = (lhs.P.Multiply(rhs.Q)).Add(lhs.Q.Multiply(rhs.P));
                ans.Q = lhs.Q.Multiply(rhs.Q);
                BigInteger factor = ans.P.Gcd(ans.Q);

                if (factor.Abs().CompareTo(BigInteger.One) != 0)
                {
                    ans.P = ans.P.Divide(factor);
                    ans.Q = ans.Q.Divide(factor);
                }
                return(ans);
            }
            public bool Equals(PrecisionDecimal other)
            {
                int test = p.Multiply(other.Q).CompareTo(q.Multiply(other.P));

                return(test == 0);
            }