表示非理数的十进制小数

时间:2016-12-20 20:49:27

标签: c# .net math decimal

我想表示一个无理数的大小数字,如sqrt(2)或cos(23)。 例如,我需要显示sqrt(2)的前100,000个十进制数字,这在c#中是可能的,我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

AFAIK(如果我错了,请任何读者纠正我)没有内置类型。但是,作为解决方法:

  1. answer here有一些系统。
  2. 使用BigInteger并自己动手。
  3. 使用提及BigRationalhere

答案 1 :(得分:0)

我使用 GNU MPFR库解决了这个问题,特别是LubošHemala的c# wrapper,然后我编写了第N个根的算法。

  public static void Nth_Root(ref StringBuilder Output,ref long ComaPos, String Radicand, String Index, ulong Precision,int NBase)
        {
            // (1 / Input Index) = N_Index
            Decimal D_index = Convert.ToDecimal(Index, new CultureInfo("en-US"));
            D_index = 1.00m / D_index;
            String N_Index = D_index.ToString(new CultureInfo("en-US"));
            //Calculating Precision
            Decimal Prec02 = Precision * 3.31125m;
            ulong Prec03 = Convert.ToUInt64(Prec02);
            int Prec04 = Convert.ToInt32(Precision);
            // Declaring MPFR Variables
            var Rad = new mpfr_struct();
            var Ind = new mpfr_struct();
            var Res = new mpfr_struct();
            MPFRLibrary.mpfr_init2(Rad, 1000LU);
            MPFRLibrary.mpfr_init2(Ind, 1000LU);
            MPFRLibrary.mpfr_init2(Res, Prec03);
            //String inputs to MPFR variables
            MPFRLibrary.mpfr_set_str(Rad, Radicand, 10, (int)Rounding.AwayFromZero);
            MPFRLibrary.mpfr_set_str(Ind, N_Index, 10, (int)Rounding.AwayFromZero);
            //Calculating Power of Radicand to the N_Index
            var sb = new StringBuilder(Prec04);
            long expptr = 0;
            MPFRLibrary.mpfr_pow(Res, Rad, Ind, (int)Rounding.AwayFromZero);
            //Converting MPFR Result to StringB
            MPFRLibrary.mpfr_get_str(sb, ref expptr, NBase, 0, Res, (int)Rounding.AwayFromZero);
            Output = sb;
            ComaPos = expptr;
        }

相关问题