Example #1
0
        public static Expression F(this string str)
        {
            var s   = str.Split('/');
            var top = int.Parse(s.First());
            var bot = int.Parse(s.Last());

            return(BigRational.FromIntFraction(top, bot));
        }
Example #2
0
        public static BigRational ToFraction(this double x, double error = 0.0000000001)
        {
            int num;
            int den;

            var n = (int)Math.Floor(x);

            x -= n;

            if (x < error)
            {
                num = n;
                den = 1;
                return(BigRational.FromIntFraction(num, den));
            }

            if (1 - error < x)
            {
                num = n + 1;
                den = 1;
                return(BigRational.FromIntFraction(num, den));
            }

            var lowerN = 0;
            var lowerD = 1;

            var upperN = 1;
            var upperD = 1;

            while (true)
            {
                var middleN = lowerN + upperN;
                var middleD = lowerD + upperD;

                if (middleD * (x + error) < middleN)
                {
                    upperN = middleN;
                    upperD = middleD;
                }
                else if (middleN < (x - error) * middleD)
                {
                    lowerN = middleN;
                    lowerD = middleD;
                }
                else
                {
                    num = n * middleD + middleN;
                    den = middleD;
                    return(BigRational.FromIntFraction(num, den));
                }
            }

            //BigRational frac;
            //if(x % 1 == 0)	// if whole number
            //        {
            //    frac = BigRational.FromIntFraction((int) x, 1);
            //} else {
            //    double dTemp = x;
            //    int iMultiple = 1;
            //    string strTemp = x.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 = BigRational.FromIntFraction((int) Math.Round(dTemp), iMultiple);
            //}
            //return frac;
        }