Произвольная точность арифметики с GMP - PullRequest
0 голосов
/ 20 июня 2011

Я использую библиотеку GMP для создания программы Pi, которая будет вычислять около 7 триллионов цифр числа Pi. Проблема в том, что я не могу понять, сколько бит нужно для хранения такого количества десятичных разрядов.

Ответы [ 3 ]

1 голос
/ 28 сентября 2013

Я хочу просто исправить одно из того, что было написано в ответном ответе:

Напомним, что log (a ^ b) = a * log (b)

ну это наоборот:

log(a^b) = b * log(a)
1 голос
/ 20 июня 2011

7 триллионов цифр могут представлять любое из 10 ^ (7 триллионов) различных чисел.

x битов могут представлять 2 ^ x различных чисел.

Итак, вы хотите решить:

2^x = 10^7000000000000

Возьмите log-base-2 с обеих сторон:

x = log2(10^7000000000000)

Напомним, что log(a^b) = b * log(a):

x = 7000000000000 * log2(10)

Я получаю 23253496664212биты.Я бы добавил еще один или два, чтобы быть в безопасности.Удачи в поиске петабайт для их хранения.

Я подозреваю, что вам понадобится более интересный алгоритм.

0 голосов
/ 20 июня 2011

2 ^ 10 = 1024, поэтому десять бит будут представлять чуть более трех цифр.Поскольку вы говорите о 7 триллионах цифр, это будет что-то вроде 23 триллионов бит или около 3 терабайт, что больше, чем я мог бы получить на одном диске с Costco в последний раз, когда я посещал.

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

(Математический способ решения этой проблемы - использовать логарифмы, поскольку число, представляющее 7 триллионов цифр для представления, имеетlog base 10 около 7 трлн. Найдите журнал числа в существующей базе, преобразуйте базу, и вы получите свой ответ. Для сокращения между базой 2 и базой 10 используйте десять бит == три цифры, потому что этоне очень далеко не так. Он говорит, что база журнала 10 из 2 равна .3, хотя на самом деле она больше похожа на .301.)

...