2016-12-20 14 views
-1

Я хочу представить множество десятичных цифр иррационального числа, такого как sqrt (2) или cos (23). Например, мне нужно показать первые 100 000 десятичных цифр sqrt (2), это возможно в C# ?, как я могу это сделать?Представляют собой очень много десятичных знаков иррационального числа

+2

Вы ищете 'типа BigDecimal'. – SLaks

+3

Это зависит от числа - если вы можете найти серию Тейлора или другой метод для вычисления числа, то да, это возможно. Не _simple_, но _possible_. –

+0

Возможный дубликат http://stackoverflow.com/questions/10359372/is-there-a-bigfloat-class-in-c – Georg

ответ

0

Я решил эту проблему с GNU MPFR библиотеки, в частности, с помощью c# wrapper Любош Hemala, то я кодировать алгоритм для 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; 
 
     }

0

AFAIK (пожалуйста, любой читатель поправит меня, если я ошибаюсь), для этого нет встроенного типа. Однако в качестве обходных путей:

  1. answer here с некоторой системой для этого.
  2. Используйте BigInteger и сделайте все сами.
  3. BigRational упомянутый here.