public static Fraction operator -(Fraction x, Fraction y) { var gcd = MathLibEx.Gcd(x.Denominator, y.Denominator); var lcm = x.Denominator / gcd * y.Denominator; return(new Fraction((x.Numerator * y.Denominator - y.Numerator * x.Denominator) / gcd, lcm)); }
public Fraction(long 分子, long 分母) { if (分母 == 0) { _numerator = Math.Sign(分子) switch { 0 => 0, 1 => int.MaxValue, _ => int.MinValue, }; _denominator = -1; return; } var negative = (分子 ^ 分母) < 0; 分子 = Math.Abs(分子); 分母 = Math.Abs(分母); if (分子 == 0) { _numerator = 0; _denominator = 0; } else { var gcd = MathLibEx.Gcd(分母, 分子); _numerator = 分子 / gcd; if (negative) { _numerator = -_numerator; } _denominator = 分母 / gcd - 1; } }