System.Xml.Xsl.XPathConvert.BigNumber.BigNumber C# (CSharp) Method

BigNumber() public method

public BigNumber ( FloatingDecimal dec ) : System.Diagnostics
dec FloatingDecimal
return System.Diagnostics
            public BigNumber(FloatingDecimal dec) {
                Debug.Assert(dec.MantissaSize > 0);

                int  ib, exponent, mantissaSize, wT;
                uint uExtra;
                BigNumber[] TenPowers;

                ib = 0;
                exponent = dec.Exponent;
                mantissaSize = dec.MantissaSize;

                // Record the first digit
                Debug.Assert(dec[ib] > 0 && dec[ib] <= 9);
                this.u2 = (uint)(dec[ib]) << 28;
                this.u1 = 0;
                this.u0 = 0;
                this.exp = 4;
                this.error = 0;
                exponent--;
                Normalize();

                while (++ib < mantissaSize) {
                    Debug.Assert(dec[ib] >= 0 && dec[ib] <= 9);
                    uExtra = MulTenAdd(dec[ib]);
                    exponent--;
                    if (0 != uExtra) {
                        // We've filled up our precision.
                        Round(uExtra);
                        if (ib < mantissaSize - 1) {
                            // There are more digits, so add another error bit just for
                            // safety's sake.
                            this.error++;
                        }
                        break;
                    }
                }

                // Now multiply by 10^exp
                if (0 == exponent) {
                    return;
                }

                if (exponent < 0) {
                    TenPowers = TenPowersNeg;
                    exponent = -exponent;
                } else {
                    TenPowers = TenPowersPos;
                }

                Debug.Assert(exponent > 0 && exponent < 512);
                wT = exponent & 0x1F;
                if (wT > 0) {
                    Mul(ref TenPowers[wT - 1]);
                }

                wT = (exponent >> 5) & 0x0F;
                if (wT > 0) {
                    Mul(ref TenPowers[wT + 30]);
                }
            }

Same methods

XPathConvert.BigNumber::BigNumber ( uint u0, uint u1, uint u2, int exp, uint error ) : System.Diagnostics