public void LeastCommonMultiple_Long(long x, long y, long lcm) { long actual = EuclideanAlgorithm.LeastCommonMultiple(x, y); Assert.Equal(lcm, actual); }
public void LeastCommonMultiple_Int(int x, int y, int lcm) { int actual = EuclideanAlgorithm.LeastCommonMultiple(x, y); Assert.Equal(lcm, actual); }
public void GreatestCommonDivisor_Int(int x, int y, int gcd) { int actual = EuclideanAlgorithm.GreatestCommonDivisor(x, y); Assert.Equal(gcd, actual); }
public void GreatestCommonDivisor_Long(long x, long y, long gcd) { long actual = EuclideanAlgorithm.GreatestCommonDivisor(x, y); Assert.Equal(gcd, actual); }
public static Rational64 Multiply(Rational64 first, Rational64 second) { unchecked { var first_numerator = (UInt32)first.bits; var first_denominator = (Int32)(first.bits >> 32); var second_numerator = (UInt32)second.bits; var second_denominator = (Int32)(second.bits >> 32); if (0 == first_numerator || 0 == second_numerator) { return(Zero); } var s = 0 > (first_denominator ^ second_denominator); if (0 <= first_denominator) { ++first_denominator; } else { first_denominator = -first_denominator; } if (0 <= second_denominator) { ++second_denominator; } else { second_denominator = -second_denominator; } { var d = EuclideanAlgorithm.GreatestCommonDivisorPartial((UInt32)first_denominator, second_numerator); first_denominator = (Int32)((UInt32)first_denominator / d); second_numerator /= d; } { var d = EuclideanAlgorithm.GreatestCommonDivisorPartial(first_numerator, (UInt32)second_denominator); first_numerator /= d; second_denominator = (Int32)((UInt32)second_denominator / d); } /* * var q = (Int64)((UInt64)(UInt32)first_denominator * (UInt32)second_denominator); * if (s) { * q = -q; * } else { * --q; * } * checked((Int32)q).Ignore(); * return new Rational64(checked(first_numerator * second_numerator) | (UInt64)q << 32); */ var p = (UInt64)first_numerator * second_numerator; var q = (Int64)((UInt64)(UInt32)first_denominator * (UInt32)second_denominator); p = checked ((UInt32)p); checked (unchecked ((UInt32)Int32.MinValue) - unchecked ((UInt64)q)).Ignore(); if (s) { return(new Rational64((UInt64)(-q << 32) | p)); } else { return(new Rational64((UInt64)(--q << 32) | p)); } } }