+ return (int64_t)ToDouble();
+ }
+
+ double ToDouble() const
+ {
+ T num = P, denom = Q;
+ while (Tabs(num) > T(1e10) || Tabs(denom) > T(1e10))
+ {
+ num /= T(16);
+ denom /= T(16);
+ }
+ return ((double)(num))/((double)(denom));
+ }
+ bool CheckAccuracy(double d, const char * msg, double threshold = 1e-3) const
+ {
+ double result = fabs(ToDouble() - d);
+ if (d != 0e0) result /= d;