示例#1
0
        public override double doubleValue()
        {
            bool neg = num.isNegative();

            if (den.isZero())
            {
                return(neg ? Double.NegativeInfinity
                        : num.isZero() ? Double.NaN
                        : Double.PositiveInfinity);
            }
            IntNum n = num;

            if (neg)
            {
                n = IntNum.neg(n);
            }
            int num_len = n.intLength();
            int den_len = den.intLength();
            int exp     = 0;

            if (num_len < den_len + 54)
            {
                exp = den_len + 54 - num_len;
                n   = IntNum.shift(n, exp);
                exp = -exp;
            }

            // Divide n (which is shifted num) by den, using truncating division,
            // and return quot and remainder.
            IntNum quot      = new IntNum();
            IntNum remainder = new IntNum();

            IntNum.divide(n, den, quot, remainder, TRUNCATE);
            quot      = quot.canonicalize();
            remainder = remainder.canonicalize();

            return(quot.roundToDouble(exp, neg, !remainder.isZero()));
        }