как я могу получить 1000 десятичных цифр в С#?

Можно ли получить до 1000 десятичных цифр в С#?

мне нужно по крайней мере 1000 знаков после запятой значения пи для моей программы.


person Haruka    schedule 08.07.2012    source источник
comment
Если вам нужно всего 1000 цифр, вы можете просто посмотреть их в Интернете и скопировать + вставить в свою программу.   -  person Mysticial    schedule 08.07.2012
comment
Это не поможет, если вам нужно выполнить какую-либо арифметику. Как только он будет преобразован во встроенный тип данных, вы потеряете большую часть этой точности.   -  person Pete Baughman    schedule 08.07.2012
comment
Всякий раз, когда кто-то задает подобный вопрос, мой первый ответ — не как, а почему. В данном случае меня переполняет любопытство. Для чего вам может требоваться точность в 1000 цифр?   -  person Chris    schedule 08.07.2012
comment
мне нужно по крайней мере 1000 десятичных цифр. но моя проблема в том, что программа позволяет пользователю вводить количество десятичных цифр для отображения   -  person Haruka    schedule 08.07.2012


Ответы (4)


Ну, вы можете использовать массив для имитации числа, например, если вам нужно вычислить a (имеет 100000 цифр) плюс b (имеет 99999 цифр):

 a:     a[100000]     a[99999]      a[99998]   ... a[1]           a[0]
+b:                   b[9999]       b[99998]   ... b[1]           b[0]
----------------------------------------------------------------------------
                                     ...   a[1]+b[1]+Carry      a[0]+b[0]
person Cheng Chen    schedule 08.07.2012
comment
Не делай этого. Используйте MP-библиотеку! - person Antimony; 17.08.2012

Да, но без использования встроенных типов данных. Decimal — это лучшее, что вы можете сделать, и оно содержит только от 28 до 29 значащих цифр. .

Вам понадобится библиотека произвольной точности, или вам нужно пересмотреть свой дизайн и определить, действительно ли вам нужна 1000 десятичных цифр.

Если вы просто пытаетесь вычислить число Пи до 1000 цифр, существуют функции, которые вы можете использовать для вычисления n-й цифры числа Пи. В этот момент вы можете просто сохранить результаты в массиве

person Pete Baughman    schedule 08.07.2012
comment
да, мне нужно как минимум 1000 десятичных цифр. но моя проблема в том, что пользователь будет тем, кто введет, сколько десятичных цифр показать - person Haruka; 08.07.2012

Если вы все еще ищете альтернативу другим ответам, ознакомьтесь с Bailey Borwein Plouffe формула для вычисления n-й цифры числа Пи. Вы можете использовать его для вычисления первых 1000 цифр.

введите здесь описание изображения

person Austin Henley    schedule 08.07.2012
comment
@BenVoigt Действительно. Я слегка удивлен, что в половине ответов рекомендуется использовать этот алгоритм извлечения цифр, который работает только для двоичных цифр. - person Mysticial; 08.07.2012
comment
@Mysticial: Что ж, похоже, Плуфф где-то опубликовал формулу для десятичных цифр числа Пи ... но это не та формула. На самом деле, я не вижу, как эта формула дает двоичные или даже шестнадцатеричные цифры (каждый дробный разряд должен быть 16^-k (значение разряда), умноженным на какое-то целое число в диапазоне 0-15 (сама цифра), и я вижу место значение в приведенной выше формуле, но то, что должно быть цифрой, не кажется целым числом. - person Ben Voigt; 08.07.2012
comment
@BenVoigt Алгоритм для двоичных цифр квазилинейный. Но алгоритм для десятичных цифр либо квадратичный, либо кубический. (Я не могу вспомнить какой.) Вот почему его никто не использует. Я реализовал BBP для двоичных цифр. На самом деле это очень сложно, поскольку он злоупотребляет модулем мощности, чтобы пропустить все предыдущие цифры. ИМО, для реализации требуется довольно сильный математический фон. - person Mysticial; 08.07.2012
comment
@BenVoigt Приходи в гостиную, если хочешь обсудить это дальше. Так как это буквально в моей области знаний. ржу не могу - person Mysticial; 08.07.2012

Вам нужно использовать арифметику произвольной точности. Я не уверен насчет нативных библиотек C#, но GMP говорит, что у них есть оболочка C#.

Вы также можете использовать J# BigDecimal.

Вот аналогичный вопрос.

person Antimony    schedule 08.07.2012