Пример #1
0
        public static Fraction32 Parse(string s)
        {
            int numerator, denominator;
            int wholeNumber = FractionUtil.Parse32(s, out numerator, out denominator);

            return(new Fraction32(wholeNumber, numerator, denominator));
        }
Пример #2
0
        public static Fraction64 Parse(string s)
        {
            long numerator, denominator;
            long wholeNumber = FractionUtil.Parse64(s, out numerator, out denominator);

            return(new Fraction64(wholeNumber, numerator, denominator));
        }
Пример #3
0
        public int CompareTo(Fraction64 other)
        {
            int i = _wholeNumber.CompareTo(other._wholeNumber);

            if (i != 0)
            {
                return(i);
            }
            if (_wholeNumber == 0)
            {
                if (_numerator == 0 || other._numerator == 0 || _denominator == other._denominator)
                {
                    return(_numerator.CompareTo(other._numerator));
                }
            }
            else
            {
                if (_numerator == 0)
                {
                    return((other._numerator < (long)(int.MinValue)) ? -1 : ((other._numerator > 0L) ? 1 : 0));
                }
                if (other._numerator == 0)
                {
                    return((_numerator < (long)(int.MinValue)) ? -1 : ((_numerator > 0L) ? 1 : 0));
                }
            }

            long n1 = _numerator, d1 = _denominator, n2 = other._numerator, d2 = other._denominator;

            FractionUtil.ToCommonDenominator64(ref n1, ref d1, ref n2, ref d2);
            return(n1.CompareTo(n2));
        }
Пример #4
0
        public Fraction64(IFraction fraction)
        {
            long numerator, denominator;

            _wholeNumber = FractionUtil.GetNormalizedRational64(FractionUtil.ToInt64(fraction.WholeNumber), FractionUtil.ToInt64(fraction.Numerator), FractionUtil.ToInt64(fraction.Denominator, 1), out numerator, out denominator);
            _numerator   = numerator;
            _denominator = denominator;
        }
Пример #5
0
        public Fraction16(short numerator, short denominator)
        {
            int n, d;

            _wholeNumber = (short)(FractionUtil.GetNormalizedRational(0, numerator, denominator, out n, out d));
            _numerator   = (short)n;
            _denominator = (short)d;
        }
Пример #6
0
        public Fraction16(IFraction fraction)
        {
            int numerator, denominator;

            _wholeNumber = (short)(FractionUtil.GetNormalizedRational(FractionUtil.ToInt32(fraction.WholeNumber), FractionUtil.ToInt32(fraction.Numerator), FractionUtil.ToInt32(fraction.Denominator, 1), out numerator, out denominator));
            _numerator   = (short)numerator;
            _denominator = (short)denominator;
        }
Пример #7
0
        public Fraction8(sbyte numerator, sbyte denominator)
        {
            int n, d;

            _hashCode    = 0;
            _wholeNumber = (sbyte)(FractionUtil.GetNormalizedRational(0, numerator, denominator, out n, out d));
            _numerator   = (sbyte)n;
            _denominator = (sbyte)d;
        }
Пример #8
0
        public Fraction8(IFraction other)
        {
            _hashCode = 0;
            sbyte numerator, denominator;

            _wholeNumber = FractionUtil.GetNormalizedRational8(FractionUtil.ToSByte(other.WholeNumber), FractionUtil.ToSByte(other.Numerator), FractionUtil.ToSByte(other.Denominator, 1), out numerator, out denominator);
            _numerator   = numerator;
            _denominator = denominator;
        }
Пример #9
0
        public Fraction64 Multiply(Fraction64 other)
        {
            if ((_numerator == 0 && _wholeNumber == 0) || (other._numerator == 0 && other._wholeNumber == 0))
            {
                return(Fraction64.Zero);
            }

            long w1 = _wholeNumber, n1 = _numerator, d1 = _denominator, w2 = other._wholeNumber, n2 = other._numerator, d2 = other._denominator;

            w1 = FractionUtil.GetNormalizedRational64(w1 * w2, n1 * n2, d1 * d2, out n1, out d1);
            return(new Fraction64((long)w1, (long)n1, (long)d1));
        }
Пример #10
0
        public static bool TryParse(string s, out Fraction64 value)
        {
            long wholeNumber, numerator, denominator;

            if (FractionUtil.TryParse64(s, out wholeNumber, out numerator, out denominator))
            {
                value = new Fraction64(wholeNumber, numerator, denominator);
                return(true);
            }

            value = new Fraction64();
            return(false);
        }
Пример #11
0
        public Fraction64 Subtract(long wholeNumber, long numerator, long denominator)
        {
            if (numerator == 0 && wholeNumber == 0)
            {
                return((_denominator == 0) ? Fraction64.Zero : this);
            }

            long w1 = _wholeNumber, n1 = _numerator, d1 = _denominator, w2, n2 = numerator, d2 = denominator;

            w2 = FractionUtil.GetNormalizedRational64(wholeNumber, numerator, denominator, out n2, out d2);
            FractionUtil.ToCommonDenominator64(ref n1, ref d1, ref n2, ref d2);
            w1 = FractionUtil.GetNormalizedRational64(w1 + w2, n1 + n2, d1, out n1, out d1);
            return(new Fraction64((long)w1, (long)n1, (long)d1));
        }
Пример #12
0
        private int CompareTo(IFraction <int> other)
        {
            if (other == null)
            {
                return(1);
            }

            if (other is Fraction32)
            {
                return(CompareTo((Fraction32)other));
            }

            int n, d;
            int w = FractionUtil.GetNormalizedRational(other.WholeNumber, other.Numerator, other.Denominator, out n, out d);

            int i = _wholeNumber.CompareTo(w);

            if (i != 0)
            {
                return(i);
            }
            if (_wholeNumber == 0)
            {
                if (_numerator == 0 || n == 0 || _denominator == d)
                {
                    return(_numerator.CompareTo(n));
                }
            }
            else
            {
                if (_numerator == 0)
                {
                    return(n);
                }
                if (n == 0)
                {
                    return(_numerator);
                }
            }

            long n1 = _numerator, d1 = _denominator, n2 = n, d2 = d;

            FractionUtil.ToCommonDenominator64(ref n1, ref d1, ref n2, ref d2);
            return(n1.CompareTo(n2));
        }
Пример #13
0
        private int CompareTo(IFraction <long> other)
        {
            if (other == null)
            {
                return(1);
            }

            if (other is Fraction64)
            {
                return(CompareTo((Fraction64)other));
            }

            long n, d;
            long w = FractionUtil.GetNormalizedRational64(other.WholeNumber, other.Numerator, other.Denominator, out n, out d);

            int i = _wholeNumber.CompareTo(w);

            if (i != 0)
            {
                return(i);
            }
            if (_wholeNumber == 0)
            {
                if (_numerator == 0 || n == 0 || _denominator == d)
                {
                    return(_numerator.CompareTo(n));
                }
            }
            else
            {
                if (_numerator == 0)
                {
                    return((n < (long)(int.MinValue)) ? -1 : ((n > 0L) ? 1 : 0));
                }
                if (n == 0)
                {
                    return((_numerator < (long)(int.MinValue)) ? -1 : ((_numerator > 0L) ? 1 : 0));
                }
            }

            long n1 = _numerator, d1 = _denominator, n2 = n, d2 = d;

            FractionUtil.ToCommonDenominator64(ref n1, ref d1, ref n2, ref d2);
            return(n1.CompareTo(n2));
        }
Пример #14
0
        public Fraction64 Add(Fraction64 other)
        {
            if (_numerator == 0 && _wholeNumber == 0)
            {
                return((other._denominator == 0) ? Fraction64.Zero : other);
            }

            if (other._numerator == 0 && other._wholeNumber == 0)
            {
                return((_denominator == 0) ? Fraction64.Zero : this);
            }

            long w1 = _wholeNumber, n1 = _numerator, d1 = _denominator, w2 = other._wholeNumber, n2 = other._numerator, d2 = other._denominator;

            FractionUtil.ToCommonDenominator64(ref n1, ref d1, ref n2, ref d2);
            w1 = FractionUtil.GetNormalizedRational64(w1 + w2, n1 + n2, d1, out n1, out d1);
            return(new Fraction64((long)w1, (long)n1, (long)d1));
        }
Пример #15
0
        public Fraction32 Add(int wholeNumber, int numerator, int denominator)
        {
            if (_numerator == 0 && _wholeNumber == 0)
            {
                return(new Fraction32(wholeNumber, numerator, denominator));
            }

            if (numerator == 0 && wholeNumber == 0)
            {
                return((_denominator == 0) ? Fraction32.Zero : this);
            }

            long w1 = _wholeNumber, n1 = _numerator, d1 = _denominator, w2, n2 = numerator, d2 = denominator;

            w2 = FractionUtil.GetNormalizedRational64(wholeNumber, numerator, denominator, out n2, out d2);
            FractionUtil.ToCommonDenominator64(ref n1, ref d1, ref n2, ref d2);
            w1 = FractionUtil.GetNormalizedRational64(w1 + w2, n1 + n2, d1, out n1, out d1);
            return(new Fraction32((int)w1, (int)n1, (int)d1));
        }
Пример #16
0
        public Fraction64 Multiply(long wholeNumber, long numerator, long denominator)
        {
            if ((_numerator == 0 && _wholeNumber == 0) || (numerator == 0 && wholeNumber == 0))
            {
                return(Fraction64.Zero);
            }

            long w1 = _wholeNumber, n1 = _numerator, d1 = _denominator, w2, n2 = numerator, d2 = denominator;

            w2 = FractionUtil.GetNormalizedRational64(wholeNumber, numerator, denominator, out n2, out d2);

            if (numerator == 0 && wholeNumber == 0)
            {
                return(Fraction64.Zero);
            }

            w1 = FractionUtil.GetNormalizedRational64(w1 * w2, n1 * n2, d1 * d2, out n1, out d1);
            return(new Fraction64((long)w1, (long)n1, (long)d1));
        }
Пример #17
0
        private bool Equals(IFraction <long> other)
        {
            if (other == null)
            {
                return(false);
            }

            if (other is Fraction64)
            {
                return(Equals((Fraction64)other));
            }

            long n, d;
            long w = FractionUtil.GetNormalizedRational64(other.WholeNumber, other.Numerator, other.Denominator, out n, out d);

            if (_numerator == 0)
            {
                return(n == 0 && _wholeNumber == w);
            }

            return(_numerator == n && _denominator == d && _wholeNumber == w);
        }
Пример #18
0
        public Fraction64 Divide(long wholeNumber, long numerator, long denominator)
        {
            if (_numerator == 0 && _wholeNumber == 0)
            {
                return(Fraction64.Zero);
            }

            if (numerator == 0 && wholeNumber == 0)
            {
                throw new DivideByZeroException();
            }

            long w1 = _wholeNumber, n1 = _numerator, d1 = _denominator, w2, n2, d2;

            w2 = FractionUtil.GetInvertedRational64(wholeNumber, numerator, denominator, out n2, out d2);

            if (n2 == 0 && w2 == 0)
            {
                throw new DivideByZeroException();
            }

            w1 = FractionUtil.GetNormalizedRational64(w1 * w2, n1 * n2, d1 * d2, out n1, out d1);
            return(new Fraction64((long)w1, (long)n1, (long)d1));
        }
Пример #19
0
 public Fraction32(int numerator, int denominator)
 {
     _wholeNumber = FractionUtil.GetNormalizedRational(0, numerator, denominator, out numerator, out denominator);
     _numerator   = numerator;
     _denominator = denominator;
 }
Пример #20
0
 public Fraction64(long numerator, long denominator)
 {
     _wholeNumber = FractionUtil.GetNormalizedRational64(0, numerator, denominator, out numerator, out denominator);
     _numerator   = numerator;
     _denominator = denominator;
 }
Пример #21
0
 public override bool Equals(object obj)
 {
     return(FractionUtil.EqualTo <long>(this, obj));
 }
Пример #22
0
 public int CompareTo(object obj)
 {
     return(FractionUtil.Compare <long>(this, obj));
 }