/// <summary>开方</summary>
        static internal BigNumber Sqrt(BigNumber value, int precision) {
            if (!value.IsPlus)
                throw new ExpressionException("只有正数才有开平方运算");

            List<int> div = new List<int>();
            int index = 0;
            int resultIntCount = (value.IntPart.Count + 1) / 2;

            List<int> result = GetFirstDiv(value, ref div, ref index);

            div = FirstTry(result, div);
            div.AddRange(GetNewTwoDiv(value, ref index));
            BigCalculate.RemoveStartZero(div);
            //考虑精度的计算
            while (true) {
                div = TryDiv(div, result);
                if (result.Count - resultIntCount >= precision)
                    break;

                div.AddRange(GetNewTwoDiv(value, ref index));
                BigCalculate.RemoveStartZero(div);
            }

            return new BigNumber(result.GetRange(0, resultIntCount), result.GetRange(resultIntCount, result.Count - resultIntCount), true);
        }
Example #2
0
        //仅限于寻找有序数列中的众数
        //多个众数时返回最小的众数
        public static string Mode(BigNumber[] NumberSeries)
        {

            double MaxCount = 0;
            double CurrentCount = 0;
            BigNumber MaxNumber = new BigNumber("0");
            BigNumber CurrentNumber = new BigNumber("0");
            int len = NumberSeries.Length;
            for (int i = 1; i < len; i++)
            {
                if (CompareNumber.Compare(NumberSeries[i - 1], NumberSeries[i]) == 0)
                {
                    CurrentCount++;
                    if (CurrentCount > MaxCount)
                    {
                        MaxCount = CurrentCount;
                        MaxNumber = NumberSeries[i];
                    }
                }
                else
                {
                    CurrentCount = 0;
                }
            }
            if (MaxCount == 0)
            {
                return "NA";
            }
            else
            {
                return MaxNumber.ToString();
            }
        }
 /// <summary>减</summary>
 public static BigNumber Minus(BigNumber one, BigNumber two) {
     BigNumber oneAbsolute = one.AbsoluteNumber;
     BigNumber twoAbsolute = two.AbsoluteNumber;
     //正数减正数
     if (one.IsPlus && two.IsPlus) {
         if (oneAbsolute.CompareTo(twoAbsolute) == 1)
             return PlusMinus(one, two);
         else if (oneAbsolute.CompareTo(twoAbsolute) == -1)
             return PlusMinus(two, one).ReverseNumber;
         else
             return BigNumber.Zero;
     }
         //正数减负数
     else if (one.IsPlus && !two.IsPlus) {
         return PlusAdd(oneAbsolute, twoAbsolute);
     }
         //负数减正数
     else if (!one.IsPlus && two.IsPlus) {
         return PlusAdd(oneAbsolute, twoAbsolute).ReverseNumber;
     }
         //负数减负数
     else if (!one.IsPlus && !two.IsPlus) {
         return Add(one, twoAbsolute);
     }
     throw new Exception("不可能到达的地方");
 }
 static void Main(string[] args) 
 {
     BigNumber e = new BigNumber("1");
     BigNumber[,] table = new BigNumber[3, 3] { { 52*e, 64*e, 24*e },{60*e,59*e,52*e},{50*e,65*e,74*e} };
     Console.WriteLine(contingency(table));
     Console.ReadKey();
 }
Example #5
0
       public  static void Main(string[] args)
        {
            Console.WriteLine("请输入x的值,用逗号分开");
            string numberseriesx = Console.ReadLine();
            Console.WriteLine("请输入y的值,用逗号分开");
            string numberlinresy = Console.ReadLine();
            char[] separator = { ',' };
            string[] numbersx = numberseriesx.Split(separator);
            string[] numbersy = numberlinresy.Split(separator);
            int n = numbersx.Length;
            BigNumber[] x = new BigNumber[n];
            BigNumber[] y = new BigNumber[n];
            for (int i = 0; i < n; i++)
            {
                x[i] = new BigNumber(numbersx[i]);

            }
            for (int j = 0; j < n; j++)
            {
                y[j] = new BigNumber(numbersy[j]);
            }
            Console.WriteLine( Regression(x,y,n));
            Console.ReadKey();

        }
Example #6
0
 static BigNumber Quantile(BigNumber[] NumberSeries, double quan)
 {
     int len = NumberSeries.Length;
     double position = quan * (double)len;
     position = Convert.ToDouble(round(position.ToString(), 0));
     return NumberSeries[Convert.ToInt32(position - 1)];
 }
Example #7
0
        public void BigNum()
        {
            var x = new BigNumber(9007199254740992);

            Assert.Equal(@"{
  ""Number"": ""9007199254740992""
}", JsonObject.FromObject(x).ToString());
        }
Example #8
0
        public void LilNumber()
        {
            var x = new BigNumber(1);

            Assert.Equal(@"{
  ""Number"": 1
}", JsonObject.FromObject(x).ToString());
        }
Example #9
0
       public static string Regression(BigNumber[] x,BigNumber[] y,int n)
        {
            BigNumber sumx = new BigNumber("0");
            BigNumber sumy = new BigNumber("0");
            BigNumber lxy = new BigNumber("0");
            BigNumber lxx = new BigNumber("0");
            BigNumber xbar, ybar, beta0, beta1;

            for (int i = 0; i < n; i++)
            {
                sumx = sumx + x[i];
            }

            xbar = sumx / new BigNumber(x.Length.ToString());
            for (int a = 0; a <= n-1; a++)
            {
                lxx = lxx + (x[a] - xbar).Power(new BigNumber("2"));
            }
            for (int i = 0; i <= n-1; i++)
            {
                sumy = sumy + y[i];
            }
            ybar = sumy / new BigNumber(y.Length.ToString());
            for (int i = 0; i <= n-1; i++)
            {
                lxy = lxy + (x[i] - xbar) * (y[i] - ybar);
            }
            beta1 = lxy / lxx;
            beta0 = ybar - beta1 * xbar;
          
            BigNumber[] Ey = new BigNumber[n];
            BigNumber[] residual = new BigNumber[n];
            BigNumber SSR = new BigNumber("0");
            BigNumber SSE = new BigNumber("0");
            BigNumber Fvalue, Rsquare;
            for (int i =0;i <= n-1; i++)
            {
                Ey[i] = beta0 + beta1 * x[i];
            }
            for (int i=0; i <= n-1;i++)
            {
                residual[i] = y[i] - Ey[i];
            }
            for (int i = 0; i <= n - 1; i++)
            {
                SSR = SSR + (Ey[i] - ybar).Power(new BigNumber("2"));
                SSE = SSE + (y[i] - Ey[i]).Power(new BigNumber("2"));
            }
            Fvalue = SSR / SSE * (new BigNumber( n.ToString()) - new BigNumber("2"));
            string f = Fvalue.ToString();
            double F =  Convert.ToDouble(f);
            Rsquare = SSR / (SSR+SSE);
           // BigNumber Fa = new BigNumber(Stat.FdistUa(0.05, 2,1).ToString());
            //BigNumber FF =new BigNumber("1") / Fa;
            BigNumber p = new BigNumber(Stat.FCDF(F, 1, 2).ToString());
            return p.ToString()+" "+f;//+" "+ Fvalue.ToString();//"回归方程为:y=" + MathV.round(beta0.ToString(),3,0)+ "+" + MathV.round(beta1.ToString(),3,0) + "*x"+" Rsquare:"+MathV.round(Rsquare.ToString(),3,0)+" Fvalue:"+MathV.round(Fvalue.ToString(),3,0);
        }
Example #10
0
		private void test_ecdh_curve(Asn1Object obj, string text, BigNumber.Context ctx) {
			Key a = Key.FromCurveName(obj);
			Key b = Key.FromCurveName(obj);
			BigNumber x_a = new BigNumber();
			BigNumber y_a = new BigNumber();
			BigNumber x_b = new BigNumber();
			BigNumber y_b = new BigNumber();
			
			try {
				Console.Write("Testing key generation with {0}", text);
				
				a.GenerateKey();
				if (a.Group.Method.FieldType == Objects.NID.X9_62_prime_field.NID) {
					a.PublicKey.GetAffineCoordinatesGFp(x_a, y_a, ctx);
				}
				else {
					a.PublicKey.GetAffineCoordinatesGF2m(x_a, y_a, ctx);
				}
				Console.Write(".");
				
				b.GenerateKey();
				if (b.Group.Method.FieldType == Objects.NID.X9_62_prime_field.NID) {
					b.PublicKey.GetAffineCoordinatesGFp(x_b, y_b, ctx);
				}
				else {
					b.PublicKey.GetAffineCoordinatesGF2m(x_b, y_b, ctx);
				}
				Console.Write(".");
				
				byte[] abuf = new byte[MessageDigest.SHA1.Size];
				int aout = a.ComputeKey(b, abuf, KDF1_SHA1);
				Console.Write(".");
				
				byte[] bbuf = new byte[MessageDigest.SHA1.Size];
				int bout = b.ComputeKey(a, bbuf, KDF1_SHA1);
				Console.Write(".");
				
				Assert.Greater(aout, 4);
				Assert.AreEqual(aout, bout);
				Assert.IsTrue(Compare(abuf, bbuf));

				Console.Write(" ok");
			}
			finally {
				a.Dispose();
				b.Dispose();
				x_a.Dispose();
				y_a.Dispose();
				x_b.Dispose();
				y_b.Dispose();
			}
			
			Console.WriteLine();
		}
Example #11
0
 static BigNumber Mean(BigNumber[] NumberSeries)
 {
     BigNumber sum = new BigNumber("0");
     foreach (BigNumber SingleNumber in NumberSeries)
     {
         sum += SingleNumber;
     }
     int len = NumberSeries.Length;
     BigNumber len_bignumber = new BigNumber(len.ToString());
     return sum / len_bignumber;
 }
Example #12
0
 //输入为BigNumber数组,返回为BigNumber值
 //n - 1个自由度
 public static BigNumber Variance(BigNumber[] NumberSeries)
 {
     BigNumber sum = new BigNumber("0");
     int len = NumberSeries.Length;
     BigNumber mean_series = Mean(NumberSeries);
     foreach (BigNumber SingleNumber in NumberSeries)
     {
         sum += (SingleNumber - mean_series).Power(new BigNumber("2"), 30);
     }
     return sum / new BigNumber((len - 1).ToString());
 }
        /// <summary>e次幂</summary>
        public static BigNumber Exp(BigNumber value, int precision) {
            BigNumber sum = new BigNumber("0");

            for (BigNumber n = new BigNumber("0"); ; n++) {
                BigNumber r = BigNumber.Division(value.Power(n), n.Factorial(), precision + 1);

                if (r.GetPrecision(0) > precision)
                    break;
                sum = sum + r;
            }
            Remove(sum, precision);
            return sum;
        }
Example #14
0
    } //计算分位数值
 static string ParaEasti(BigNumber[] NumberSeries, double significance, int tail, BigNumber goalnumber)
    {
        //总体均值的区间估计
        //tail == 1单尾,为2则双尾
        BigNumber n = new BigNumber(NumberSeries.Length.ToString());
        if (tail == 2)
        {
            significance = significance / 2;
        }
        BigNumber lower = Proportion(NumberSeries, goalnumber)-new BigNumber(NORMSINV(significance).ToString())*(Proportion(NumberSeries, goalnumber) * (new BigNumber("1") - Proportion(NumberSeries, goalnumber)) / n).Power(new BigNumber("0.5"));
        BigNumber upper = Proportion(NumberSeries, goalnumber)+new BigNumber(NORMSINV(significance).ToString())*(Proportion(NumberSeries, goalnumber) * (new BigNumber("1") - Proportion(NumberSeries, goalnumber)) / n).Power(new BigNumber("0.5"));
        return lower.ToString() + "," + upper.ToString();
    }
Example #15
0
        internal static BigNumber Division(BigNumber one, BigNumber two, int precision) {
            List<int> oneInt = new List<int>();
            List<int> oneDecimal = new List<int>();
            oneInt.AddRange(one.IntPart);
            oneDecimal.AddRange(one.DecimalPart);
            List<int> twoText = new List<int>();
            twoText.AddRange(two.IntPart);
            twoText.AddRange(two.DecimalPart);
            RemoveStartZero(twoText);
            //将15/2.3 移位为 150/23  //DecimalLength
            for (int i = 0; i < two.DecimalPart.Count; i++) {
                if (oneDecimal.Count != 0) {
                    oneInt.Add(oneDecimal[0]);
                    oneDecimal.RemoveAt(0);
                } else {
                    oneInt.Add(0);
                }
            }
            List<int> resultInt = new List<int>();
            List<int> resultDecimal = new List<int>();

            int index = twoText.Count < oneInt.Count ? twoText.Count - 1 : oneInt.Count - 1;
            List<int> div = oneInt.GetRange(0, index + 1);
            //正数部分的除法
            while (true) {
                resultInt.Add(Division(div, twoText));
                div = IntMinus(div, Multiply(twoText, new List<int> { resultInt[resultInt.Count - 1] }), 0);
                index++;
                if (index >= oneInt.Count)
                    break;
                div.Add(oneInt[index]);
            }
            index = 0;
            //小数部分的除法
            while (true) {
                //满足精度后退出
                if (resultDecimal.Count >= precision)
                    break;
                if (index >= oneDecimal.Count)
                    div.Add(0);
                else {
                    div.Add(oneDecimal[index]);
                }
                int r = Division(div, twoText);
                resultDecimal.Add(r);
                div = IntMinus(div, Multiply(twoText, new List<int> { r }), 0);
                index++;
            }
            return new BigNumber(resultInt, resultDecimal, !(one.IsPlus ^ two.IsPlus));
        }
Example #16
0
        /// <summary> 乘  </summary>
        public static BigNumber Multiply(BigNumber one, BigNumber two) {
            List<int> oneText = new List<int>();
            List<int> twoText = new List<int>();
            oneText.AddRange(one.IntPart);
            oneText.AddRange(one.DecimalPart);
            twoText.AddRange(two.IntPart);
            twoText.AddRange(two.DecimalPart);
            List<int> resultText = Multiply(oneText, twoText);

            int decimalLength = one.DecimalPart.Count + two.DecimalPart.Count;
            List<int> intPart = resultText.GetRange(0, resultText.Count - decimalLength);
            List<int> decimalPart = resultText.GetRange(resultText.Count - decimalLength, decimalLength);
            return new BigNumber(intPart, decimalPart, !(one.IsPlus ^ two.IsPlus));
        }
Example #17
0
 static void Sort(int n, BigNumber[] NumberSeries)
 {
     BigNumber temp = new BigNumber("0");
     if (n <= 1){
         return;
     }
     for (int i = 0;i < n - 1;i++){
         if (CompareNumber.Compare(NumberSeries[i] , NumberSeries[i+1]) == 1){
             temp = NumberSeries[i +1];
             NumberSeries[i + 1]= NumberSeries[i];
             NumberSeries[i]=temp;
         }
         	Sort(n - 1, NumberSeries);
     }
 }
Example #18
0
     static string HT(BigNumber H0, BigNumber[] NumberSeries, double significance, int tail, BigNumber goalnumber)
     {
         //Hypothesis Testing假设检验
         string result = ParaEasti(NumberSeries, significance, tail, goalnumber);
         char[] separator = { ',' };
         string[] intervals = result.Split(separator);
         BigNumber lower = new BigNumber(intervals[0]);
         BigNumber upper = new BigNumber(intervals[1]);
         if (tail == 2)
         {
             significance = significance / 2;

             if (CompareNumber.Compare(lower, H0) == -1 && CompareNumber.Compare(upper, H0) == 1)
             {
                 return "不拒绝原假设";
             }
             else
             {
                 return "拒绝原假设";
             }
         }
         else if (tail == -1)//左单尾
         {
             significance = significance / 1;
             if (CompareNumber.Compare(lower, H0) == -1)
             {
                 return "不拒绝原假设";
             }
             else
             {
                 return "拒绝原假设";
             }
         }
         else//右单尾
         {
             significance = significance / 1;
             if (CompareNumber.Compare(upper, H0) == -1)
             {
                 return "拒绝原假设";
             }
             else
             {
                 return "不拒绝原假设";
             }
         }

         }
 /// <summary>获取第一个除数</summary>
 static List<int> GetFirstDiv(BigNumber value, ref List<int> div, ref int index) {
     //这里有待加入对0.02和0.002的考虑
     if (value.IntPart.Count == 1 && value.IntPart[0] == 0) {
         List<int> result = new List<int>();
         result.Add(0);
         while (true) {
             if (value.DecimalPart[index] != 0) {
                 for (int i = 0; i < index / 2; i++) {
                     result.Add(0);
                 }
                 //0.005
                 if (index % 2 == 0) {
                     div.Add(value.DecimalPart[index]);
                     if (index + 1 < value.DecimalPart.Count) {
                         div.Add(value.DecimalPart[index + 1]);
                     } else {
                         div.Add(0);
                     }
                 }
                     //0.05
                 else {
                     div.Add(value.DecimalPart[index]);
                 }
                 index++;
                 break;
             }
             index++;
             if (index == value.DecimalPart.Count)
                 break;
         }
         index++;
         return result;
     } else {
         //如果是偶数则第一次取两位
         if (value.IntPart.Count % 2 == 0) {
             div = value.IntPart.GetRange(0, 2);
             index = 2;
         }
             //是奇数则只取一位
         else {
             div = value.IntPart.GetRange(0, 1);
             index = 1;
         }
         return new List<int>();
     }
 }
Example #20
0
     static BigNumber Proportion(BigNumber[] NumberSeries,BigNumber goalnumber)
     {      int n = NumberSeries.Length;
            BigNumber count= new BigNumber("0");
            BigNumber goal= new BigNumber(goalnumber.ToString());
            for (int i = 0; i< n; i++ )
            {
                if (CompareNumber.Compare(NumberSeries[i],goal) == 0)
                {
                    count = count + new BigNumber("1");
                  }
                else
             {
                 count = count + new BigNumber("0");
             }
            }
            return count / new BigNumber(n.ToString());

        }//计算目标样本比例p
 static int ComparePlus( BigNumber one, BigNumber two )
 {
     BigCalculate.RemoveStartZero( one.IntPart );
     BigCalculate.RemoveStartZero( two.IntPart );
     int minDecimalLength = one.DecimalPart.Count < two.DecimalPart.Count ? one.DecimalPart.Count : two.DecimalPart.Count;
     //通过正数的长短比较
     if ( one.IntPart.Count > two.IntPart.Count )
         return 1;
     else if ( one.IntPart.Count < two.IntPart.Count )
         return -1;
     else
     {
         //从最高位依次比较
         for ( int i = 0; i < one.IntPart.Count; i++ )
         {
             if ( one.IntPart[i] > two.IntPart[i] )
                 return 1;
             else if ( one.IntPart[i] < two.IntPart[i] )
                 return -1;
         }
         //比较小数部分,行判断是否有小数位
         if ( one.DecimalPart .Count == 0 && two.DecimalPart .Count != 0 )
             return -1;
         else if ( one.DecimalPart .Count != 0 && two.DecimalPart .Count == 0 )
             return 1;
         else if ( one.DecimalPart .Count == 0 && two.DecimalPart .Count == 0 )
             return 0;
         else
         {
             for ( int i = 0; i < minDecimalLength; i++ )
             {
                 if ( one.DecimalPart[i] > two.DecimalPart[i] )
                     return 1;
                 else if ( one.DecimalPart[i] < two.DecimalPart[i] )
                     return -1;
             }
             if ( one.DecimalPart .Count > two.DecimalPart .Count )
                 return 1;
             else if ( one.DecimalPart .Count < two.DecimalPart .Count )
                 return -1;
         }
         return 0;
     }
 }
Example #22
0
        static string round(string number, int digits)
        {
            int NumOriginLen = number.Length;
            char[] digit_dot = { '.' };
            string[] NumberBroken;
            NumberBroken = number.Split(digit_dot);
            if (digits < 0)
            {
                digits = 0;
            }
            if (NumberBroken[0].Length == NumOriginLen)
            {
                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 (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');
                }
                return NumberBroken[0] + '.' + decimal_part;
            }
        }
        public static  int Compare( BigNumber one, BigNumber two)
        {
            if ( one.IsPlus && two.IsPlus )
            {
                return ComparePlus(one,two );
            }
            else if ( one.IsPlus && !two.IsPlus )
            {
                return 1;
            }
            else if ( !one.IsPlus && two.IsPlus )
            {
                return -1;
            }
            else
            {
                return ( -1 ) * ComparePlus(one ,two );
            }

        }
Example #24
0
        // GET api/values/5
        public Object Get(int id)
        {
            Invocations++;
            Trace.TraceInformation("Otro cliente al que atender.");
            if (id < 10)
            {   var ex = new ArgumentException("Requerida una precisión superior a 10.");

                // Telemetría para App Insights
                var telemetry = new TelemetryClient();
                var telemetryInfo = new Dictionary<string, string>
                { { "invocaciones", Convert.ToString(Invocations) } };
                var telemetryMeasurements = new Dictionary<string, double>
                { { "digitos", id } };
                telemetry.TrackException(ex, telemetryInfo, telemetryMeasurements);

                // Mensaje para Applications Logs
                Trace.TraceError("El cliente anda despistado.");

                throw ex;
            }
            BigNumber x = new BigNumber(id);
            BigNumber y = new BigNumber(id);
            x.ArcTan(16, 5);
            y.ArcTan(4, 239);
            x.Subtract(y);

            string pi = x.AsPrintableString();

            if (pi.Length > 1000)
            {
                Trace.TraceWarning("Resultado de " + pi.Length + " caracteres!");
            }

            var resultado = new
            {
                pi = pi,
                invocations = Invocations
            };

            return resultado;
        }
Example #25
0
 /// <summary>加</summary>
 public static BigNumber Add(BigNumber one, BigNumber two) {
     BigNumber oneAbsolute = one.AbsoluteNumber;
     BigNumber twoAbsolute = two.AbsoluteNumber;
     //正数加正数
     if (one.IsPlus && two.IsPlus) {
         return PlusAdd(one, two);
     }
         //正数加负数
     else if (one.IsPlus && !two.IsPlus) {
         return Minus(oneAbsolute, twoAbsolute);
     }
         //负数加正数
     else if (!one.IsPlus && two.IsPlus) {
         return Add(two, one);
     }
         //负数加负数
     else if (!one.IsPlus && !two.IsPlus) {
         BigNumber result = PlusAdd(one.AbsoluteNumber, two.AbsoluteNumber);
         return new BigNumber(result.IntPart, result.DecimalPart, false);
     }
     throw new Exception("不可能到达的地方");
 }
Example #26
0
        public static RsaKeyPair GenerateRsaPrivateKey(int bits = 2048, BigNumber e = null,
                RsaKeyGeneratorCallback cb = null, object cbArg = null)
        {
            if (e == null)
                e = E_F4;

            using (var rsa = new RSA())
            {
                BigNumber.GeneratorHandler cbWrapper = null;
                if (cb != null)
                    cbWrapper = (x,y,z) => cb(x,y,z);

                Cipher enc = null;
                string pwd = null;
                PasswordHandler pwdCb = null;
                // If we choose to encrypt:
                //      Cipher.DES_CBC;
                //      Cipher.DES_EDE3_CBC;
                //      Cipher.Idea_CBC;
                //      Cipher.AES_128_CBC;
                //      Cipher.AES_192_CBC;
                //      Cipher.AES_256_CBC;
                //   and pwd != null || pwdCb != null
                // We can use a pwdCb to get a password interactively or we can
                // simply pass in a fixed password string (no cbPwd, just pwd)
                if (pwd != null)
                    pwdCb = DefaultPasswordHandler;

                // Ref:  http://openssl.org/docs/manmaster/crypto/RSA_generate_key_ex.html
                rsa.GenerateKeys(bits, e, cbWrapper, cbArg);

                using (var bio = BIO.MemoryBuffer())
                {
                    // Ref:  http://openssl.org/docs/manmaster/crypto/PEM_write_bio_RSAPrivateKey.html
                    rsa.WritePrivateKey(bio, enc, pwdCb, pwd);
                    return new RsaKeyPair(bits, e.ToHexString(), bio.ReadString());
                }
            }
        }
Example #27
0
 static void Main(string[] args)
 {
     
     Console.WriteLine("请输入你要输入数字个数:");
     int n = Convert.ToInt32(Console.ReadLine());
     Console.WriteLine("请输入一列数,用逗号分隔:");
     string number_series = Console.ReadLine();
     char[] separator = {','};
     string[] numbers = number_series.Split(separator);
     BigNumber[] x = new BigNumber[n];
     for (int i = 0; i < n; i++)
     {
         x[i] = new BigNumber(numbers[i]);
     }
     //Console.WriteLine(Mean(x).ToString());
     Sort(x.Length, x);
     for (int i = 0; i < n; i++)
     {
         Console.WriteLine("{0}",x[i]);
     }
     Console.ReadKey();
 }
        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 < len12; j++)
                    {
                        a[i, j] = mat1[i, j] + mat2[i, j];
                    }
                }
                return a;
            }
            else
            {
                return null;
            }
        }
 static void Main(string[] args)
 {
     Console.WriteLine("请输入你要输入数字个数:");
     int n = Convert.ToInt32(Console.ReadLine());
     Console.WriteLine("请输入一列数,用逗号分隔:");
     string number_series = Console.ReadLine();
     char[] separator = { ',' };
     string[] numbers = number_series.Split(separator);
     BigNumber[] x = new BigNumber[n];
     for (int i = 0; i < n; i++)
     {
         x[i] = new BigNumber(numbers[i]);
     }
     Console.WriteLine(Stat.Mean(x).ToString());
     Stat.Sort(x.Length, x);
     for (int i = 0; i < n; i++)
     {
         Console.WriteLine("{0}", x[i]);
     }
     Console.WriteLine("数列的中位数是:{0}", Stat.Quantile(x, 0.5).ToString());
     Console.WriteLine("这列数的方差是:{0}", Stat.Variance(x));
     Console.WriteLine("对方差进行四舍五入,取3位小数:{0}", MathV.round(Stat.Variance(x).ToString(), 3, 0));
     Console.ReadKey();
 }
Example #30
0
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="publicKey"></param>
 public Encryption()
 {
     Multiplier = 0;
     Modulus    = 0;
 }
Example #31
0
        public void Should_throw_exception_when_changing_inner_char(string value, int index, string newElementValue)
        {
            var bigNumber = new BigNumber(value);

            Assert.Throws <FormatException>(() => bigNumber[index] = newElementValue[0]);
        }
Example #32
0
 private static BigNumber CreateNumber(params int[] numbers)
 {
     return(BigNumber.FromBytes(numbers));
 }
Example #33
0
 public void Constructor_NumbersIsEmpty()
 {
     Assert.Throws(typeof(ArgumentException), () => BigNumber.FromBytes(new int[0]));
 }
Example #34
0
 public ClickReward(BigNumber moneyToAdd)
 {
     MoneyToAdd = moneyToAdd;
 }
    private static int[] Sum(int[] firstArray, int[] secondArray, BigNumber firstNumber, BigNumber secondNumber)
    {
        int temp        = 0;
        var resultArray = new int[firstNumber.sourceNumber.Length];

        for (int n = 0; n < firstNumber.sourceNumber.Length; n++)
        {
            if ((n + 1) <= secondNumber.sourceNumber.Length)
            {
                if (n < firstNumber.sourceNumber.Length - 1)
                {
                    resultArray[n] = (firstArray[n] + secondArray[n] + temp) % 10;
                    temp           = (firstArray[n] + secondArray[n] + temp) / 10;
                }
                else
                {
                    resultArray[n] = firstArray[n] + secondArray[n] + temp;
                }
            }
            else
            {
                if (n < firstNumber.sourceNumber.Length - 1)
                {
                    resultArray[n] = (firstArray[n] + temp) % 10;
                    temp           = (firstArray[n] + temp) / 10;
                }
                else
                {
                    resultArray[n] = firstArray[n] + temp;
                }
            }
        }

        return(resultArray);
    }
Example #36
0
        public void Should_return_default_BigNumber()
        {
            var bigNumber = new BigNumber();

            bigNumber.ToString().ShouldBe("0.0");
        }
Example #37
0
 public override string ToString()
 {
     return(BigNumber.FormatBigDouble(this, null, null));
 }
Example #38
0
        private static BigNumber[][] StringToBigNumber(string[,] str, int n, string Record)
        {
            //这个函数可以将字符串数组转化为BigNumber的锯齿型数组
            //n为变量数
            BigNumber[][] data = new BigNumber[n][];
            int           q;
            int           i = 0, j = 0;
            //GetLength(0),0代表的行数,1代表的列数
            int data_row = 0;
            int data_column;
            int str_empty_counts;

            //AllEmpty的情况应该事先测试好;
            char[]   separator     = { ',' };
            string[] RecordNumbers = Record.Split(separator);
            int      Empty;
            int      data_Counts = 0;

            //data_Counts用来给data计数,因为data的行数不能用i表示
            //i表示字符串数组的行,j表示列
            //先固定j,然后一行一行往下检测
            for (j = 0; j < str.GetLength(1); j++)
            {
                data_column = 0;
                Empty       = 0;
                //利用foreach语句确认本列是否为空列,有空列则Empty记为1
                foreach (string FindEmptyColumn in RecordNumbers)
                {
                    //MessageBox.Show("FindEmptyColumn = " + FindEmptyColumn );
                    if (FindEmptyColumn == j.ToString())
                    {
                        Empty = 1;
                        //MessageBox.Show("发现空列");
                    }
                }
                if (Empty == 0)
                {
                    //如果Empty为0则不是空列,准备读数据
                    str_empty_counts = 0;
                    //要计算第j列字符串中的空字符单元格数量
                    for (q = 0; q < str.GetLength(0); q++)
                    {
                        if (str[q, j] == null)
                        {
                            str_empty_counts++;
                        }
                        else if (str[q, j].Trim() == "")
                        {
                            str_empty_counts++;
                        }
                    }
                    data[data_Counts] = new BigNumber[str.GetLength(0) - str_empty_counts];
                    data_Counts++;
                    //对数组进行初始化
                    for (i = 0; i < str.GetLength(0); i++)
                    {
                        if (str[i, j] != null)
                        {
                            if (str[i, j].Trim() != "")
                            {
                                //MessageBox.Show("i = " + i + "j = " + j + "录入BigNumber的值 = " + str[i, j]+"data_row = "+data_row + "data_column = "+data_column );
                                data[data_row][data_column] = new BigNumber(str[i, j].Trim());
                                data_column++;
                            }
                        }
                    }
                    data_row++;
                }
            }
            return(data);
        }
Example #39
0
        public override PrivateKey GeneratePrivateKey(PrivateKeyParams pkp)
        {
            var rsaPkParams = pkp as RsaPrivateKeyParams;
            var ecPkParams  = pkp as EcPrivateKeyParams;

            if (rsaPkParams != null)
            {
                int bits;
                // Bits less than 1024 are weak Ref: http://openssl.org/docs/manmaster/crypto/RSA_generate_key_ex.html
                if (rsaPkParams.NumBits < 1024)
                {
                    bits = RSA_BITS_DEFAULT;
                }
                else
                {
                    bits = rsaPkParams.NumBits;
                }

                BigNumber e;
                if (string.IsNullOrEmpty(rsaPkParams.PubExp))
                {
                    e = RSA_E_F4;
                }
                else if (rsaPkParams.PubExp.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
                {
                    e = BigNumber.FromHexString(rsaPkParams.PubExp);
                }
                else
                {
                    e = BigNumber.FromDecimalString(rsaPkParams.PubExp);
                }

                using (var rsa = new RSA())
                {
                    BigNumber.GeneratorHandler cbWrapper = null;
                    if (rsaPkParams.Callback != null)
                    {
                        cbWrapper = (x, y, z) => rsaPkParams.Callback(x, y, z);
                    }

                    Cipher          enc   = null;
                    string          pwd   = null;
                    PasswordHandler pwdCb = null;
                    // If we choose to encrypt:
                    //      Cipher.DES_CBC;
                    //      Cipher.DES_EDE3_CBC;
                    //      Cipher.Idea_CBC;
                    //      Cipher.AES_128_CBC;
                    //      Cipher.AES_192_CBC;
                    //      Cipher.AES_256_CBC;
                    //   and pwd != null || pwdCb != null
                    // We can use a pwdCb to get a password interactively or we can
                    // simply pass in a fixed password string (no cbPwd, just pwd)
                    if (pwd != null)
                    {
                        pwdCb = DefaultPasswordHandler;
                    }

                    // Ref:  http://openssl.org/docs/manmaster/crypto/RSA_generate_key_ex.html
                    rsa.GenerateKeys(bits, e, cbWrapper, rsaPkParams.CallbackArg);

                    using (var bio = BIO.MemoryBuffer())
                    {
                        // Ref:  http://openssl.org/docs/manmaster/crypto/PEM_write_bio_RSAPrivateKey.html
                        rsa.WritePrivateKey(bio, enc, pwdCb, pwd);
                        return(new RsaPrivateKey(bits, e.ToHexString(), bio.ReadString()));
                    }
                }
            }
            else if (ecPkParams != null)
            {
                throw new NotImplementedException("EC private keys have not yet been implemented");

                //var curveName = Asn1Object.FromShortName("P-256");
                ////var curveName = new Asn1Object("P-256");
                //using (var ec =OpenSSL.Crypto.EC.Key.FromCurveName(curveName))
                //{
                //    ec.GenerateKey();
                //}
            }
            else
            {
                throw new NotSupportedException("unsupported private key parameter type");
            }
        }
Example #40
0
 /// <summary>
 /// Если число вероятно простое, то возвращается true.
 /// </summary>
 private bool PrimeTestNumber(BigNumber number)
 {
     return(!multiplicityChecker.Check(number) && primeTest.CheckPrimality(number));
 }
Example #41
0
 public string ToString(string format, IFormatProvider formatProvider)
 {
     return(BigNumber.FormatBigDouble(this, format, formatProvider));
 }
Example #42
0
 public string ToString(string format)
 {
     return(BigNumber.FormatBigDouble(this, format, null));
 }
Example #43
0
        private static IEnumerable <TestCaseData> TestCasesForDifference()
        {
            var value_1    = 1.56843;
            var value_2    = 3.65766;
            var defaultPow = 1;

            for (var pow = 1; pow < 200; pow++)
            {
                //same number but different pows
                var expectedResult_1 = (value_1 * Math.Pow(10, defaultPow)) - (value_1 * Math.Pow(10, pow));
                var bigNumber_1      = new BigNumber()
                {
                    Number = value_1, PowOfTen = defaultPow
                };
                var bigNumber_2 = new BigNumber()
                {
                    Number = value_1, PowOfTen = pow
                };
                yield return(new TestCaseData(bigNumber_1, bigNumber_2, expectedResult_1).SetName($"[0]Check diff operator {bigNumber_1} - {bigNumber_2} = {expectedResult_1}"));

                var expectedResult_2 = (value_1 * Math.Pow(10, pow)) - (value_1 * Math.Pow(10, defaultPow));
                var bigNumber_3      = new BigNumber()
                {
                    Number = value_1, PowOfTen = pow
                };
                var bigNumber_4 = new BigNumber()
                {
                    Number = value_1, PowOfTen = defaultPow
                };
                yield return(new TestCaseData(bigNumber_3, bigNumber_4, expectedResult_2).SetName($"[1]Check diff operator {bigNumber_3} - {bigNumber_4} = {expectedResult_2}"));

                //same pow but different numbers
                var expectedResult_3 = (value_1 * Math.Pow(10, pow)) - (value_2 * Math.Pow(10, pow));
                var bigNumber_5      = new BigNumber()
                {
                    Number = value_1, PowOfTen = pow
                };
                var bigNumber_6 = new BigNumber()
                {
                    Number = value_2, PowOfTen = pow
                };
                yield return(new TestCaseData(bigNumber_5, bigNumber_6, expectedResult_3).SetName($"[2]Check diff operator {bigNumber_5} - {bigNumber_6} = {expectedResult_3}"));

                var expectedResult_4 = (value_2 * Math.Pow(10, pow)) - (value_1 * Math.Pow(10, pow));
                var bigNumber_7      = new BigNumber()
                {
                    Number = value_2, PowOfTen = pow
                };
                var bigNumber_8 = new BigNumber()
                {
                    Number = value_1, PowOfTen = pow
                };
                yield return(new TestCaseData(bigNumber_7, bigNumber_8, expectedResult_4).SetName($"[3]Check diff operator {bigNumber_7} - {bigNumber_8} = {expectedResult_4}"));

                //different pow and different number
                var expectedResult_5 = (value_1 * Math.Pow(10, pow)) - (value_2 * Math.Pow(10, pow - 1));
                var bigNumber_9      = new BigNumber()
                {
                    Number = value_1, PowOfTen = pow
                };
                var bigNumber_10 = new BigNumber()
                {
                    Number = value_2, PowOfTen = pow - 1
                };
                yield return(new TestCaseData(bigNumber_9, bigNumber_10, expectedResult_5).SetName($"[4]Check diff operator {bigNumber_9} - {bigNumber_10} = {expectedResult_5}"));

                var expectedResult_6 = (value_2 * Math.Pow(10, pow)) - (value_1 * Math.Pow(10, pow - 1));
                var bigNumber_11     = new BigNumber()
                {
                    Number = value_2, PowOfTen = pow
                };
                var bigNumber_12 = new BigNumber()
                {
                    Number = value_1, PowOfTen = pow - 1
                };
                yield return(new TestCaseData(bigNumber_11, bigNumber_12, expectedResult_6).SetName($"[5]Check diff operator {bigNumber_11} - {bigNumber_12} = {expectedResult_6}"));
            }
        }
Example #44
0
        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);
            }
        }
 private string Serialize(BigNumber number)
 {
     return(serializer.Serialize(number));
 }
Example #46
0
        private void CreateInput()
        {
            while (true)
            {
                bool inputQueueIsLow = false;
                lock (_kernelInput)     { inputQueueIsLow = _kernelInput.Count < 300; }
                if (inputQueueIsLow)
                {
                    int         num_exps = (get_der_len(EXP_MAX) - get_der_len(EXP_MIN) + 1);
                    KernelInput input    = new KernelInput(num_exps);

                    profiler.StartRegion("generate key");
                    input.Rsa.GenerateKey(keySize);                     // Generate a key
                    profiler.EndRegion("generate key");

                    // Build DERs and calculate midstates for exponents of representitive lengths
                    profiler.StartRegion("cpu precompute");
                    int         cur_exp_num = 0;
                    BigNumber[] Exps        = new BigNumber[num_exps];
                    bool        skip_flag   = false;
                    for (int i = get_der_len(EXP_MIN); i <= get_der_len(EXP_MAX); i++)
                    {
                        ulong exp = (ulong)0x01 << (int)((i - 1) * 8);

                        // Set the exponent in the RSA key
                        // NO SANITY CHECK - just for building a DER
                        input.Rsa.Rsa.PublicExponent = (BigNumber)exp;
                        Exps[cur_exp_num]            = (BigNumber)exp;

                        // Get the DER
                        byte[] der       = input.Rsa.DER;
                        int    exp_index = der.Length % 64 - i;
                        if (kernel_type == KernelType.Optimized4_9)
                        {
                            if (exp_index != 9)                              // exponent index assumed to be 9 in the kernel
                            {
                                Console.WriteLine("Exponent index doesn't match - skipping key");
                                skip_flag = true;
                                break;
                            }
                            if (i != 4)                              // exponent length assumed to be 4 in the kernel
                            {
                                Console.WriteLine("Exponent length doesn't match - skipping key");
                                skip_flag = true;
                                break;
                            }
                        }
                        else if (kernel_type == KernelType.Optimized4_11)
                        {
                            if (exp_index != 11)                              // exponent index assumed to be 9 in the kernel
                            {
                                Console.WriteLine("Exponent index doesn't match - skipping key");
                                skip_flag = true;
                                break;
                            }
                            if (i != 4)                              // exponent length assumed to be 4 in the kernel
                            {
                                Console.WriteLine("Exponent length doesn't match - skipping key");
                                skip_flag = true;
                                break;
                            }
                        }

                        // Put the DER into Ws
                        SHA1          Sha1 = new SHA1();
                        List <uint[]> Ws   = Sha1.DataToPaddedBlocks(der);

                        // Put all but the last block through the hash
                        Ws.Take(Ws.Count - 1).Select((t) =>
                        {
                            Sha1.SHA1_Block(t);
                            return(t);
                        }).ToArray();

                        // Put the midstate, the last W block, and the byte index of the exponent into the CL buffers
                        Sha1.H.CopyTo(input.Midstates, 5 * cur_exp_num);
                        Ws.Last().Take(16).ToArray().CopyTo(input.LastWs, 16 * cur_exp_num);
                        input.ExpIndexes[cur_exp_num] = exp_index;

                        // Increment the current exponent size
                        cur_exp_num++;
                        break;
                    }
                    profiler.EndRegion("cpu precompute");

                    if (skip_flag)
                    {
                        continue;                               // we got a bad key - don't enqueue it
                    }
                    List <KernelInput> inputs = new List <KernelInput>();
                    inputs.Add(input);
                    for (uint i = 1; i < (EXP_MAX - EXP_MIN) / 2 / workSize - 1; i++)
                    {
                        profiler.StartRegion("generate key");
                        if (EXP_MIN + workSize * 2 * i >= EXP_MAX)
                        {
                            throw new ArgumentException("base_exp > EXP_MAX");
                        }
                        inputs.Add(new KernelInput(input, EXP_MIN + workSize * 2 * i));
                        profiler.EndRegion("generate key");
                    }
                    lock (_kernelInput)                    //put input on queue
                    {
                        foreach (KernelInput i in inputs)
                        {
                            _kernelInput.Push(i);
                        }
                    }
                    continue;                    //skip the sleep cause we might be really low
                }
                Thread.Sleep(50);
            }
        }
 private string SerializeKey(BigNumber first, BigNumber second)
 {
     return(string.Format("{0}#{1}", Serialize(first), Serialize(second)));
 }
Example #48
0
 public void BigNumberConstructor()
 {
     var op1 = new BigNumber();
     var op2 = new BigNumber("21389101312");
 }
Example #49
0
 public void GetAffineCoordinatesGFp(BigNumber x, BigNumber y, BigNumber.Context ctx)
 {
     Native.ExpectSuccess(
         Native.EC_POINT_get_affine_coordinates_GFp(this.group.Handle, this.ptr, x.Handle, y.Handle, ctx.Handle)
         );
 }
Example #50
0
        public void BigNumberFirst()
        {
            var op1 = new BigNumber("12345");

            Console.WriteLine(op1.First.Value);
        }
Example #51
0
        public void BigNumberWrite()
        {
            var op1 = new BigNumber("123123213");

            op1.Write();
        }
Example #52
0
 public TimeReward(IUpgradeSystem upgrades, float time)
 {
     MoneyToAdd = upgrades.MoneyPerSec * time;
 }
Example #53
0
 private static void CheckNumber(BigNumber number, params int[] expectedNumbers)
 {
     TestHelper.CheckNumber(number, expectedNumbers);
 }
Example #54
0
        public void CheckDivide(BigNumber a, BigNumber b, double expectedResult)
        {
            var resultOfSum = a / b;

            Assert.AreEqual(expectedResult, resultOfSum.Number * Math.Pow(10, resultOfSum.PowOfTen), expectedResult * delta);
        }
Example #55
0
        public void IsEven_NumberIs3()
        {
            var number = BigNumber.FromInt(3);

            Assert.IsFalse(number.IsEven);
        }
Example #56
0
        public void CheckPow(BigNumber a, int pow, double expectedResult)
        {
            var resultOfPow = BigNumber.Pow(a, pow);

            Assert.AreEqual(expectedResult, resultOfPow.Number * Math.Pow(10, resultOfPow.PowOfTen), expectedResult * delta);
        }
Example #57
0
        static void Main(string[] args)
        {
            //目标为控制位数在10位
            string Number;
            Console.WriteLine("请输入数字");
            Number = Console.ReadLine();
            Number = Number.Trim();
            int CountDecimalPoint = 0;
            int ScientificNumber;
            string ScientificNotation = "";
            int digits_part;
            BigNumber NumberProcess = new BigNumber("0");
            string ProcessedNumber;
            char[] separator = { '.' };
            //用于分割小数点
            string[] NumberParts = new string[2];
            int IsNegative = 0;
            //用来判定数字是否为负
            int zero_count = 0;
            //用于计算小数点后有多少个零
            NumberParts = Number.Split(separator);
            if (NumberParts[0].Length + 5 > 10)
                //四位小数加上1个小数点
            {
                if (Number[0] == '-'){
                    IsNegative = 1;
                }
                foreach (char FindDecimalPoint in Number)
                {
                    if (FindDecimalPoint == '.')
                    {
                        CountDecimalPoint = 1;
                        break;
                    }
                }
                if (CountDecimalPoint == 0)
                {
                    //无小数点则只有整数部分
                        ScientificNumber = Number.Length - IsNegative - 1;
                        //转换为科学计数法
                        //Console.WriteLine("ScientificNumber = {0}", ScientificNumber);
                        if (ScientificNumber <= 9 && ScientificNumber > 0) 
                        {
                            ScientificNotation = "0" + ScientificNumber.ToString();
                            //如果科学计数法为个位要补零
                        }
                        else
                        {
                            ScientificNotation = ScientificNumber.ToString();
                        }
                            //数字正负无需考虑
                        if (ScientificNotation.Length + 1 + 2 <= 9)
                        {
                            
                            //例如:-3.1415E+05
                            //数字负号占一位,E和科学计数法的符号占两位
                            //大于9的情况不做考虑,数字太大。
                            digits_part = 9 - (ScientificNotation.Length + 1 + 2);
                            //小数位由此算出
                            NumberProcess = new BigNumber (Number.ToString()) / (new BigNumber("10")).Power(new BigNumber(ScientificNumber.ToString()),30);
                            //Console.WriteLine("ScientificNotation = {0},digits_part = {1},NumberProcess = {2}", ScientificNotation, digits_part, NumberProcess.ToString());
                            ProcessedNumber = MathV.round(NumberProcess.ToString(), digits_part, 0) + "E+"+ScientificNotation ;
                            //Console.WriteLine("ProcessedNumber ={0}", ProcessedNumber);
                        }
                        else
                        {
                            //如果已经大于已经大于九位了,则不作处理
                            //这种情况极为罕见,不考虑
                            NumberProcess = new BigNumber(Number.ToString()) / (new BigNumber("10")).Power(new BigNumber(ScientificNumber.ToString()), 30);
                            ProcessedNumber = MathV.round(NumberProcess.ToString(), 0, 0) + "E+" + ScientificNotation;
                        }
                    
                }
                else
                {
                    //有小数点的情况
                    NumberParts = Number.Split(separator);
                    if (NumberParts[0] != "0")
                    {
                        if (NumberParts[0].Length + 1 + 4 >= 9)
                        {
                         //如果保留四位小数之后依旧总长度超过九,则进行如下操作
                        //判断整数部分是否为0
                        //如果不为0,继续科学计数法的处理,舍去小数部分
                        ScientificNumber = NumberParts[0].Length - IsNegative - 1;
                        //转换为科学计数法
                        if (ScientificNumber <= 9 && ScientificNumber > 0)
                        {
                            ScientificNotation = "0" + ScientificNumber.ToString();
                            //如果科学计数法为个位要补零
                        }
                        else
                        {
                            ScientificNotation = ScientificNumber.ToString();
                        }
                        //数字正负无需考虑
                        if (ScientificNotation.Length + 1 + 2 <= 9)
                        {
                            //例如:-3.1415E+05
                            //数字负号占一位,E和科学计数法的符号占两位
                            //大于9的情况不做考虑,数字太大。
                            digits_part = 9 - (ScientificNotation.Length + 1 + 2);
                            //小数位由此算出
                            NumberProcess = new BigNumber(Number.ToString()) / (new BigNumber("10")).Power(new BigNumber(ScientificNumber.ToString()), 30);
                            ProcessedNumber = MathV.round(NumberProcess.ToString(), digits_part, 0) + "E+" + ScientificNotation;
                        }
                        else
                        {
                            //如果已经大于已经大于九位了,则不作处理
                            //这种情况极为罕见,不考虑
                            NumberProcess = new BigNumber(Number.ToString()) / (new BigNumber("10")).Power(new BigNumber(ScientificNumber.ToString()), 30);
                            ProcessedNumber = MathV.round(NumberProcess.ToString(), 0, 0) + "E+" + ScientificNotation;
                        }
                        }
                        else
                        {
                            ProcessedNumber = MathV.round(Number, 4, 0);
                        }
                    }
                    else
                    {
                        zero_count = 0;
                        foreach (char EachDigit in NumberParts[1])
                        {
                            if (EachDigit == '0')
                            {
                                zero_count++;
                            }
                            else
                            {
                                break;
                            }
                        }
                        ScientificNumber = zero_count + 1;
                        //科学计数法的数字为零的个数加1
                        if (ScientificNumber <= 9 && ScientificNumber > 0)
                        {
                            ScientificNotation = "0" + ScientificNumber.ToString();
                            //如果科学计数法为个位要补零
                        }
                        else
                        {
                            ScientificNotation = ScientificNumber.ToString();
                        }
                        if (ScientificNotation.Length + 1 + 2 <= 9)
                        {
                            //例如:-2.654E-05
                            //数字负号占一位,E和科学计数法的符号占两位
                            //大于9的情况不做考虑,数字太大。
                            digits_part = 9 - (ScientificNotation.Length + 1 + 2);
                            //小数位由此算出
                            NumberProcess = new BigNumber(Number.ToString()) * (new BigNumber("10")).Power(new BigNumber(ScientificNumber.ToString()), 30);
                            ProcessedNumber = MathV.round(NumberProcess.ToString(), digits_part, 0) + "E-" + ScientificNotation;
                        }
                        else
                        {
                            //如果已经大于已经大于九位了,则不作处理
                            //这种情况极为罕见,不考虑
                            NumberProcess = new BigNumber(Number.ToString()) * (new BigNumber("10")).Power(new BigNumber(ScientificNumber.ToString()), 30);
                            ProcessedNumber = MathV.round(NumberProcess.ToString(), 0, 0) + "E-" + ScientificNotation;
                        }

                    }
                }
            }
            else {
                ProcessedNumber = MathV.round(Number,4,0);
                //如果本身长度就在十个单位以内,则不作处理
                //保留四位小数
            }
            if (ProcessedNumber.Length < 11)
            {
                ProcessedNumber = ProcessedNumber.PadLeft(11, ' ');
                //11个单位的长度是为了预留量
            }
            Console.WriteLine("ProcessedNumber={0}", ProcessedNumber);
            Console.ReadKey();
        }
Example #58
0
        public void CheckLow(BigNumber a, BigNumber b, bool expectedResult)
        {
            var result = a < b;

            Assert.AreEqual(expectedResult, result);
        }
Example #59
0
File: RSA.cs Project: wlasser/D3Emu
 /// <summary>
 /// Calls RSA_generate_key_ex()
 /// </summary>
 /// <param name="bits"></param>
 /// <param name="e"></param>
 /// <param name="callback"></param>
 /// <param name="arg"></param>
 public void GenerateKeys(int bits, BigNumber e, BigNumber.GeneratorHandler callback, object arg)
 {
     this.thunk = new BigNumber.GeneratorThunk(callback, arg);
     Native.ExpectSuccess(Native.RSA_generate_key_ex(this.ptr, bits, e.Handle, this.thunk.CallbackStruct));
 }
Example #60
0
        public void Should_parse_BigNumber_initial_value(string number, string returnValue)
        {
            var bigNumber = new BigNumber(number);

            bigNumber.ToString().ShouldBe(returnValue);
        }