Beispiel #1
0
        internal Bignum(double value) : this()
        {
            string number = value.ToString("e14", CultureInfo.InvariantCulture);
            int eIndex = number.IndexOf('e');
            if (number[eIndex - 1] == '0')
            {
                int count = 0;
                for (int i = eIndex - 1; i > number.IndexOf('.') + 1; i--)
                {
                    if (number[i] == '0')
                        count++;
                    else
                        break;
                }
                number = number.Remove(eIndex - count, count);
            }
            number = number.Remove(number.IndexOf('.'), 1);

            int exp = int.Parse(number.Substring(number.IndexOf('e') + 1), CultureInfo.InvariantCulture);
            exp -= number.IndexOf('e') - 1;
            if (value < 0)
                exp++;

            string dd = number.Remove(number.IndexOf('e'));
            long digits = long.Parse(dd, CultureInfo.InvariantCulture);

            IronMath.integer x = IronMath.integer.make((int)digits);
            IronMath.integer y = IronMath.integer.make(10).pow(exp);

            this.value = IronMath.integer.multiply(x, y);
        }
Beispiel #2
0
        public Bignum(int sign, string number, int bas)
            : this()
        {
            value = IronMath.integer.ZERO;

            for (int i = 0; i < number.Length ; i++)
            {
                uint digit = (uint)(char.IsDigit(number[i]) ? number[i] - '0' : number[i] - 'A' + 10);
                value = value * bas + digit;

            }

            value *= sign;
        }
Beispiel #3
0
 internal Bignum(IronMath.integer value): this()
 {
     this.value = value;
 }
Beispiel #4
0
 internal Bignum(long value): this()
 {
     this.value = IronMath.integer.make(value);
 }