示例#1
0
 /// <summary>
 /// internal function for negation
 /// </summary>
 private static Fraction Negate(Fraction frac1)
 {
     long iNumerator = -frac1.Numerator;
     long iDenominator = frac1.Denominator;
     return (new Fraction(iNumerator, iDenominator));
 }
示例#2
0
 private static Fraction Multiply(Fraction frac1, Fraction frac2)
 {
     try
     {
         checked
         {
             long iNumerator = frac1.Numerator * frac2.Numerator;
             long iDenominator = frac1.Denominator * frac2.Denominator;
             return (new Fraction(iNumerator, iDenominator));
         }
     }
     catch (OverflowException)
     {
         throw new FractionException("Overflow occurred while performing arithmetic operation");
     }
     catch (Exception)
     {
         throw new FractionException("An error occurred while performing arithmetic operation");
     }
 }
示例#3
0
 /// <summary>
 /// The function replicates current Fraction object
 /// </summary>
 public Fraction Duplicate()
 {
     Fraction frac = new Fraction { Numerator = this.Numerator, Denominator = this.Denominator };
     return frac;
 }
示例#4
0
 /// <summary>
 /// The function takes a floating point number as an argument 
 /// and returns its corresponding reduced fraction
 /// </summary>
 public static Fraction ToFraction(double dValue)
 {
     try
     {
         checked
         {
             Fraction frac;
             if (dValue % 1 == 0)	// if whole number
             {
                 frac = new Fraction((long)dValue);
             }
             else
             {
                 double dTemp = dValue;
                 long iMultiple = 1;
                 string strTemp = dValue.ToString();
                 while (strTemp.IndexOf("E") > 0)	// if in the form like 12E-9
                 {
                     dTemp *= 10;
                     iMultiple *= 10;
                     strTemp = dTemp.ToString();
                 }
                 int i = 0;
                 while (strTemp[i] != '.')
                     i++;
                 int iDigitsAfterDecimal = strTemp.Length - i - 1;
                 while (iDigitsAfterDecimal > 0)
                 {
                     dTemp *= 10;
                     iMultiple *= 10;
                     iDigitsAfterDecimal--;
                 }
                 frac = new Fraction((int)System.Math.Round(dTemp), iMultiple);
             }
             return frac;
         }
     }
     catch (OverflowException)
     {
         throw new FractionException("Conversion not possible due to overflow");
     }
     catch (Exception)
     {
         throw new FractionException("Conversion not possible");
     }
 }
示例#5
0
        /// <summary>
        /// The function reduces(simplifies) a Fraction object by dividing both its numerator 
        /// and denominator by their GCD
        /// </summary>
        public static void ReduceFraction(Fraction frac)
        {
            try
            {
                if (frac.Numerator == 0)
                {
                    frac.Denominator = 1;
                    return;
                }

                var gcd = GreatestCommonDenominator(frac.Numerator, frac.Denominator);
                frac.Numerator /= gcd;
                frac.Denominator /= gcd;

                if (frac.Denominator < 0) // if -ve sign in denominator
                {
                    // pass -ve sign to numerator
                    frac.Numerator *= -1;
                    frac.Denominator *= -1;
                }
            }
            catch (Exception exp)
            {
                throw new FractionException(string.Format("Cannot reduce Fraction: {0}", exp.Message));
            }
        }
示例#6
0
        /// <summary>
        /// The function returns the inverse of a Fraction object
        /// </summary>
        public static Fraction Inverse(Fraction frac1)
        {
            if (frac1.Numerator == 0)
                throw new FractionException("Operation not possible (Denominator cannot be assigned a ZERO Value)");

            long iNumerator = frac1.Denominator;
            long iDenominator = frac1.Numerator;
            return (new Fraction(iNumerator, iDenominator));
        }