Пример #1
0
        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));
        }
Пример #2
0
        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;
            }
        }