Основные математические операции с ОГРОМНЫМИ числами - PullRequest
4 голосов
/ 08 октября 2010

Под огромными числами я имею в виду, если вы взяли гигабайт (вместо 4/8 байтов и т. Д.) И попытались добавить / вычесть / умножить / разделить его на какое-то другое сколь угодно большое (или маленькое) число.

Сложение и вычитание довольно просты (по одному к / м / байт за раз):

out_byteN = a_byteN + b_byteN + overflowBit 

Для каждого байта, таким образом, я могу складывать / вычитать, когда я читаю число с диска, не рискуяне хватает ОЗУ.

Для умножения / деления просто сделайте вышеупомянутое в цикле.

Но как насчет получения n-го корня ОГРОМНОГО числа?

Ответы [ 4 ]

8 голосов
/ 08 октября 2010

Вы запрашиваете что-то вроде "Многофункциональная арифметическая библиотека GNU" (на http://gmplib.org/)?

7 голосов
/ 08 октября 2010

То же, что и любое другое число: Итерация Ньютона .

1 голос
/ 08 октября 2010

Вы можете использовать библиотеку с произвольной точностью . BigDigits хороший.

1 голос
/ 08 октября 2010

Есть несколько способов: деление пополам, ньютоны, метод домохозяина.

http://en.wikipedia.org/wiki/Root-finding_algorithm

...