Ejemplo n.º 1
0
 static BigNumber  Logarithm(BigNumber y)
 { // y in ( -0.05-, 0.05+ ), return ln((1+y)/(1-y))
     BigNumber  v = (new BigNumber("1")), y2 = y * y, t = y2, z = t / (new BigNumber("3"));
     for (BigNumber i = new BigNumber("3"); CompareNumber.Compare(z, new BigNumber("0")) != 0;
         z = (t *= y2) / (i += new BigNumber("2")))
     {
         v += z;
     }
     return v * y * (new BigNumber("2"));
 }
Ejemplo n.º 2
0
 static void Main(string[] args)
 {
     BigNumber num = new BigNumber((double).0000201, NumberType2.irrational);
 }
Ejemplo n.º 3
0
 public static BigNumber Log10(BigNumber x)
 {
     return Log(x) / ln10;
 }
Ejemplo n.º 4
0
 public static BigNumber Log(BigNumber x)
 {
     if (CompareNumber.Compare(x, new BigNumber("0")) == -1 || CompareNumber.Compare(x, new BigNumber("0")) == 0) throw new ArgumentException("Must be positive");
     int k = 0, l = 0;
     for (; CompareNumber.Compare(x, new BigNumber("1")) == 1; k++) x /= new BigNumber("10");
     for (; CompareNumber.Compare(x, new BigNumber("0.1")) == -1; k--) x *= new BigNumber("10");        // ( 0.1, 1 ]
     for (; CompareNumber.Compare(x, new BigNumber("0.9047")) == -1; l--) x *= new BigNumber("1.2217"); // [ 0.9047, 1.10527199 )
     return k * ln10 + l * lnr + Logarithm((x - new BigNumber("1")) / (x + new BigNumber("1")));
 }
Ejemplo n.º 5
0
 public static BigNumber Cos(BigNumber x)
 {
     int precision = 30;
     return TaylorFunction.Cosine(x, precision);
 }
Ejemplo n.º 6
0
 public static BigNumber Exp(BigNumber x)
 {
     int precision = 30;
     return TaylorFunction.Exp(x, precision);
 }
Ejemplo n.º 7
0
        public static BigNumber Pow(BigNumber Num1,BigNumber Num2,int precision = 30)
        {
            //Num1为底,Num2为幂次
			//precision默认为保留30位小数
            if (Num2 > 0)
            {
                return Num1.Power(Num2, precision);
            }
            else if (Num2 <0)
            {
                Num2 = 0 - Num2;
                return 1 / Num1.Power(Num2, precision);
            }
            else
            {
                return 1;
            }
        }
Ejemplo n.º 8
0
 public static BigNumber Sqrt(BigNumber Num)
 {
     if (Num <= 0)
     {
         return 0;
     }
     else
     {
         //return Num.Power(0.5, 30);
         return DecimalPowerCalculator.Sqrt(Num, 30);
     }
 }
Ejemplo n.º 9
0
        public static BigNumber[,] MatPlus(BigNumber[,] mat1, BigNumber[,] mat2)
        {//矩阵加法
            int len11 = mat1.GetLength(0);
            int len12 = mat1.GetLength(1);
            int len21 = mat2.GetLength(0);
            int len22 = mat2.GetLength(1);

            if (len11 == len21 && len12 == len22)
            {
                BigNumber[,] a = new BigNumber[len11, len12];
                for (int i = 0; i < len11; i++)
                {
                    for (int j = 0; j < len22; j++)
                        a[i, j] = 0;
                }
                for (int i = 0; i < len11; i++)
                {
                    for (int j = 0; j < len12; j++)
                    {
                        a[i, j] = mat1[i, j] + mat2[i, j];
                    }
                }
                return a;
            }
            else
            {
                return null;
            }
        }
Ejemplo n.º 10
0
        public static BigNumber Double2Big(Double x_bignumber)
        {
            string NumberStr = x_bignumber.ToString().Trim();
            int E_position = -1;
            int IsNegative = 0;
            int ScientificNotation = 0;
            string ScientificNumber;
            BigNumber result = new BigNumber("0");
            string Scientificupper;
            //0为正,1为负
            for (int i = 0; i < NumberStr.Length; i++)
            {
                if (NumberStr[i] == 'E' || NumberStr[i] == 'e')
                {
                    E_position = i;
                }
            }
            if (E_position != -1)
            {
                ScientificNotation = NumberStr.Length - E_position - 1 - 1;
                ScientificNumber = NumberStr.Substring(E_position + 1 + 1, ScientificNotation);
                Scientificupper = NumberStr.Substring(0, E_position - 1);
                if (NumberStr[E_position + 1] == '-')
                {
                    IsNegative = 1;
                    result = new BigNumber("-1") * new BigNumber(Scientificupper) * (new BigNumber("10").Power(new BigNumber(ScientificNumber)));
                    return result;
                }
                else
                {
                    result = new BigNumber("1") * new BigNumber(Scientificupper) * (new BigNumber("10").Power(new BigNumber(ScientificNumber)));
                    return result;
                }

            }
            else
            {
                result = new BigNumber(NumberStr);
                return result;
            }
        }
Ejemplo n.º 11
0
 public static string round(string number, int digits, int type)
 {
     //type为0时四舍五入,1为ground,2为ceiling
     int NumOriginLen = number.Length;
     char[] digit_dot = { '.' };
     string[] NumberBroken;
     NumberBroken = number.Split(digit_dot);
     if (digits < 0)
     {
         digits = 0;
     }
     if (NumberBroken[0].Length == NumOriginLen)
     {
         if (digits <= 0)
         {
             return number;
         }
         else
         {
             return NumberBroken[0] + ".".PadRight(digits + 1, '0');
         }
     }
     else
     {
         string decimal_part = " ";
         BigNumber zero_point_one = new BigNumber("0.1");
         BigNumber one = new BigNumber("1");
         if (NumberBroken[1].Length > digits)
         {
             if (type == 1)
             {
                 decimal_part = NumberBroken[1].Substring(0, digits);
             }
             else if (type == 2)
             {
                 BigNumber carry = new BigNumber(digits.ToString());
                 carry = zero_point_one.Power(carry, 200);
                 BigNumber number_changed = new BigNumber(number);
                 number_changed = number_changed + carry;
                 if (digits <= 0)
                 {
                     return number_changed.ToString().Substring(0, NumberBroken[0].Length);
                 }
                 return number_changed.ToString().Substring(0, NumOriginLen - (NumberBroken[1].Length - digits));
             }
             else
             {
                 if (Convert.ToInt32(NumberBroken[1].Substring(digits, 1)) > 4)
                 {
                     BigNumber carry = new BigNumber(digits.ToString());
                     carry = zero_point_one.Power(carry, 200);
                     BigNumber number_changed = new BigNumber(number);
                     number_changed = number_changed + carry;
                     return number_changed.ToString().Substring(0, NumOriginLen - (NumberBroken[1].Length - digits));
                 }
                 else
                 {
                     decimal_part = NumberBroken[1].Substring(0, digits);
                 }
             }
         }
         else
         {
             decimal_part = NumberBroken[1].PadRight(digits, '0');
         }
         if (decimal_part == "")
         {
             return NumberBroken[0];
         }
         return NumberBroken[0] + '.' + decimal_part;
     }
 }