private static void Test2() { Rational r0 = new Rational(25, 24); Rational r1 = new Rational(81, 80); Rational r2 = new Rational(128, 125); Debug.Print("{0}", new Rational(45, 32) * r1.Power(-1)); // 25/18 }
public static Rational MakeNarrow(Rational r, Rational b) { if (r.GetHighPrimeIndex() == b.GetHighPrimeIndex()) { return(r); // can't narrow on same prime level } double r_ = r.ToDouble(); double b_ = b.ToDouble(); double l = Math.Log(r_, b_); // e.g. 1.58 for {3, 2} Pow e = (Pow)(l + 0.25); // something between Floor and Round r /= b.Power(e); return(r); }