BigInteger в C?

Каков самый простой способ обрабатывать огромные числа в C? Мне нужно хранить значения в Области 1000^900 или в более удобочитаемой форме 10^2700.

Кто-нибудь знает простой способ сделать это? Любая помощь будет очень признательна!


person Chris    schedule 19.02.2009    source источник
comment
1000 ^ 900 действительно большой и может вызвать проблемы с большими целыми числами из-за ограничений памяти. Вам, вероятно, понадобится что-то, что выполняет символьные вычисления, чтобы вы могли хранить значения 1000 ^ 900 в свернутом виде.   -  person jww    schedule 12.10.2014
comment
@jww 1000 ^ 900 не такой большой. Моя хреновая доморощенная библиотека multiprecision вычислила это без труда, за меньшее время, чем я мог измерить. Это 8 970-битное число, которое вряд ли вызовет перегрузку памяти.   -  person Steve Summit    schedule 10.11.2019


Ответы (4)


Используйте libgmp:

GMP - это бесплатная библиотека для арифметики произвольной точности, работающей с целыми числами со знаком, рациональными числами и числами с плавающей запятой. Практических ограничений на точность нет, кроме тех, которые подразумеваются доступной памятью в машине, на которой работает GMP ...

Начиная с версии 6, GMP распространяется под двумя лицензиями: GNU LGPL v3 и GNU GPL v2 ...

Основными целевыми платформами GMP являются системы типа Unix, такие как GNU / Linux, Solaris, HP-UX, Mac OS X / Darwin, BSD, AIX и т.д. битовый режим ...

person kmkaplan    schedule 19.02.2009
comment
GMP может обрабатывать числа до 1000 ^ 900? - person jww; 29.08.2017
comment
Я не тестировал, но он читает. Нет практических ограничений точности, кроме тех, которые подразумеваются доступной памятью. Быстрая оценка: 1000 × 1024, то есть умещается менее чем в 9000 бит. Я не вижу причин, по которым это должно нарушать GMP. - person kmkaplan; 31.08.2017

Есть несколько библиотек, которые помогут вам в этом (математика произвольной точности):

Если предположить, что это не связано с работой (то есть вы делаете это для развлечения, или это хобби, или просто возможность чему-то научиться), создание библиотеки для математических вычислений с произвольной точностью является относительно интересным проектом. Но если вам нужно полностью полагаться на это и вас не интересуют гайки и болты, просто используйте библиотеку.

person cletus    schedule 19.02.2009

Существует ряд библиотек для работы с огромными числами. Вам нужна арифметика с целыми числами или числами с плавающей запятой?

Вы можете посмотреть код, встроенный в Python для этой задачи.

Вы можете посмотреть расширения для Perl для этой задачи.

Вы можете посмотреть код в OpenSSL для этой задачи.

Вы можете посмотреть библиотеку GNU MP (multi-precision) - как упоминалось kmkaplan.

person Jonathan Leffler    schedule 19.02.2009
comment
Что делать, если я не должен использовать какую-либо внешнюю библиотеку, а мне разрешено использовать только GCC. Теперь, чтобы на самом деле хранить BIGINTs или выполнять какие-либо вычисления с ними, что мне делать? - person phougatv; 21.02.2016
comment
Читал Кнута? Я имею в виду TAOCP - Искусство компьютерного программирования (Том 2, Получисловые алгоритмы; применяется раздел 4.3 Арифметика с высокой точностью). Или любую подобную книгу, посвященную арифметике с высокой точностью. - person Jonathan Leffler; 21.02.2016

Вы также можете попробовать BIGNUM в openssl, см. https://www.openssl.org/docs/man1.0.2/man3/bn.html, https://www.openssl.org/docs/man1.1.1/man3/, Преобразовать большое число, указанное в виде строки, в OpenSSL BIGNUM для получения подробной информации.

person Donghua Liu    schedule 21.12.2020