public static Fraction32 Parse(string s) { int numerator, denominator; int wholeNumber = FractionUtil.Parse32(s, out numerator, out denominator); return(new Fraction32(wholeNumber, numerator, denominator)); }
public static Fraction64 Parse(string s) { long numerator, denominator; long wholeNumber = FractionUtil.Parse64(s, out numerator, out denominator); return(new Fraction64(wholeNumber, numerator, denominator)); }
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)); }
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; }
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; }
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; }
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; }
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; }
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)); }
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); }
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)); }
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)); }
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)); }
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)); }
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)); }
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)); }
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); }
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)); }
public Fraction32(int numerator, int denominator) { _wholeNumber = FractionUtil.GetNormalizedRational(0, numerator, denominator, out numerator, out denominator); _numerator = numerator; _denominator = denominator; }
public Fraction64(long numerator, long denominator) { _wholeNumber = FractionUtil.GetNormalizedRational64(0, numerator, denominator, out numerator, out denominator); _numerator = numerator; _denominator = denominator; }
public override bool Equals(object obj) { return(FractionUtil.EqualTo <long>(this, obj)); }
public int CompareTo(object obj) { return(FractionUtil.Compare <long>(this, obj)); }