Посмотрите на this page и это класс BigNumber
.
Первое, что нужно отметить, это то, что мы не можем использовать какие-либо примитивные типы в C#: они просто не имеют достаточной точности (например, у двойного типа имеется только 15 значащих цифр, и мы хотите вычислить, скажем, 10000). Нам нужна библиотека с большим количеством чисел, но в .NET Framework ничего подобного нет, поэтому первое, что нам нужно сделать, это написать класс BigNumber.
Эта страница также дает пример использования для расчета пи из 1000 знаков после запятой, поэтому она должна быть достаточно тривиально, чтобы запустить его на 16000.
Запуск его на 16 000 цифр берет меня около полутора секунд, для 160 000 цифр мне потребуется чуть более 2 минут.
Вот моя PrintAsTable()
функция, связанная пост оставляет в качестве упражнения для читателя:
public string PrintAsTable() {
var data = Print();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
if (data[i] == '.') sb.AppendLine(".");
else if ((i -1) % 50 == 0) sb.AppendLine(data[i].ToString());
else if ((i -1) % 10 == 0) {sb.Append(data[i].ToString()); sb.Append(" ");}
else sb.Append(data[i].ToString());
}
return sb.ToString();
}
Возможно попробовать [BitArray] (http://msdn.microsoft.com/en-us/library/ system.collections.bitarray.aspx). См. [Этот вопрос] (http://stackoverflow.com/questions/11282727/how-can-i-use-a-very-large-string-500-million-characters-in-my-program) – tnw
может быть, biginteger? – adt
То, что вы ищете, на более техническом языке вызывается произвольной точностью десятичной (или произвольной точностью). У меня нет личного опыта с ними, но вы можете попробовать ответы на этот вопрос (http://stackoverflow.com/questions/4116078/need-arbitrary-precision-arithmetic-in-c-sharp)? – neminem