Обрабатывать целые числа произвольной длины в C ++

Может кто-нибудь сказать мне хорошую библиотеку C ++ для обработки (выполнения операций и т. Д.) С произвольно большими числами (это может быть библиотека, которая обрабатывает произвольные числа с плавающей точкой точности, но более важна обработка целых чисел)?

Пожалуйста, обращайтесь только к тем библиотекам, которые ВЫ использовали, и скажите мне, как вам удалось их настроить и подобрать, может быть, с очень минималистичным примером или чем-то другим (в основном, если в упомянутой библиотеке отсутствует хорошая документация, предоставьте свой собственный ввод).

Для записи я использую Windows 7 на компьютере с 64-разрядной версией, CodeBlocks в качестве моей IDE и последнюю версию MinGW в качестве компилятора.

Библиотеки, которые я пробовал:

vlint (не достаточно операций, отлично работает для небольших вещей, хотя)

bigint (его легко настроить, скомпилировать ошибки и не так много документации (из которой могут быть получены ошибки))

ttmath (казалось многообещающим, скомпилировал некоторые БОЛЬШИЕ примеры программ и выполнил некоторые исправления из-за ошибок компиляции, непонятного синтаксиса из-за практически отсутствия документирования)

gmp (даже не смог его настроить)

постскриптум Удалена «рутинная часть вопроса», которая в основном объясняла, почему я спрашиваю то, что много раз задавали в Stackoverflow, чтобы люди могли прочитать его до конца.

-> ОБНОВЛЕНИЕ

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

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

Windows 7 Ultimate x64

Amd k10 x64 (некоторые библиотеки не будут работать с этим, другие будут вести себя по-другому, другие настроены специально для amd k10, так что это поможет вам не только с библиотекой, которую я использовал, но, возможно, и с другими)

Код :: Блоки 10.05 версия без MinGW, имя файла «codeblocks-10.05-setup.exe» (установлено в C: \ Program Files (x86) \ CodeBlocks)

Пакеты MinGW (binutils-2.15.91-20040904-1.tar.gz gcc-core-3.4.2-20040916-1.tar.gz gcc-g ++ - 3.4.2-20040916-1.tar.gz mingw-runtime-3.11. tar.gz w32api-3.8.tar.gz) извлечено на C: \ MinGW

TTMath 0.9.2 имя файла «ttmath-0.9.2-src.tar.gz» распаковал и скопировал папку «ttmath» в папку «C: \ CPPLibs» (в эту папку я помещаю свои библиотеки c ++)

Что нужно сделать, чтобы все это настроить

Перейдите в раздел Код: Блоки> Настройки> Компилятор и Отладчик (Мой компилятор был обнаружен здесь автоматически.Если это не произойдет с вами, в «Выбранном компиляторе» выберите «Компилятор GNU GCC» и нажмите «Установить по умолчанию», затем в «Наборы инструментов», «Каталог установки компиляторов, вы можете выбрать каталог установки компилятора или выполнить попытку автоматического определения», и с этим отсортировать на "C ++ Compiler" выберите или напишите "mingw32-g ++. exe".Если это случится с вами Просто сделайте это, в «Выбранный компилятор» выберите «Компилятор GNU GCC» и нажмите «Установить по умолчанию»).

Не выходя из раздела «Код: Блоки> Настройки> Компилятор и отладчик» и разобрав вышеперечисленное, перейдите в «Поиск по каталогам», а затем «Компилятор», нажмите «Добавить» и выберите папку, в которой хранятся ваши библиотеки или куда вы помещаете свои ». ttmath »(в моем случае C: \ CPPLibs), затем перейдите в« Linker »и сделайте то же самое.

Чтобы начать кодирование с библиотекой "ttmath", вы должны поставить эту строку#include <ttmath/ttmath.h> перед основной функцией (НОТА: Если вы используете 64-битную систему, вы получите много ошибок, если вы не введете эту строку#define TTMATH_DONT_USE_WCHAR ДО эта линия#include <ttmath/ttmath.h>, я боролся с этим дерьмом, пока не нашел исправление, которое какой-то другой парень, который также боролся, нашел и разместил в сети, и это сработало для меня) p.s. Я думаю, что это только для 64-битных систем, но если вы получаете ошибки только из-за включения заголовочного файла "ttmath.h", это, скорее всего, из-за этого.

Объявление переменных это будет иметь большие целочисленные значения должно быть сделано так:ttmath::UInt<n> a,b,c; где «a, b, c» - ваши переменные, а «n» - размер чисел, которые вы можете хранить в переменных в этой форме «2 ^ (32 * n) -1» для 32-битных систем и в этой форме «2 ^ (64 * n) -1 "для 64-битных систем

Присвоение значений переменным если ты это сделаешьa = 333; (и число вместо 333 больше, чем стандартный тип данных "long int" на c ++), он не скомпилируется, потому что при присваивании значений таким переменным независимо от размера, который вы указали ранее, целое число может быть таким же большим, как стандартный тип данных "long int" на c ++ (я понял это самостоятельно, трудный путь), даже если вы используете значение, которое меньше, и оно хорошо компилируется, а затем вы запускаете свою программу и она пытается записать в эта переменная больше, чем число, которое может обрабатывать упомянутый стандартный тип данных "long int", тогда ваша математика будет неправильной, поэтому следите за этим: чтобы присвоить значение переменнойправильный путь Вы должны назначить это такa = "333"; (да, я знаю, что вы в значительной степени относитесь к нему как к строке таким образом, но он будет выполнять операции без проблем, и если вы решите «присмотреть» за переменной, это никогда не будет результатом экспоненциальной или научной записи, как вы используете стандартные целочисленные типы данных без сочетания с некоторыми «дополнительными операторами» для правильного отображения числа)

постскриптум Используя эти простые правила для работы с целыми числами и этой библиотекой, я вычислил числа Фибоначчи с точностью до 100.000-го числа с помощью простой программы (которая заняла 3 минуты для кодирования) за 15-20 секунд, а число заняло, как 3 страницы, так что помимо практического Библиотека, как только вы узнаете, как она работает (что раньше у вас практически не было помощи, некоторые примеры сайта ttmath довольно обманчивы, но теперь у вас есть некоторая помощь), это также кажется довольно эффективным, я подтвердил, что 100.000-е число вероятно, правильно, потому что я увеличил размер ("n") с 10000 до 50000, а число сохранило размер, а начальные и конечные цифры были одинаковыми. Это исходный код, который я использовал, я использовал ОЧЕНЬ БОЛЬШОЙ номер для целочисленного размера, просто чтобы проверить, я на самом деле не удосужился увидеть, на какой длине запускается программа, что-то делать не так, но я знаю, что длина до 10 000-е число Фибоначчи не превысит заданную мной длину, потому что до этого я делал программу «cout» каждый результат, пока не достиг 10 000-й, и он всегда рос. Я также проверил первые числа последовательности прежде, когда я приостановил программу, и я увидел, что «цифры растут» и подтвердил первые числа Фибоначчи последовательности, и они были правильными.НОТА: Этот исходный код будет отображать только номер последовательности Фибоначчи, который вы хотите знать, он будет показывать вам только «растущие» числа, если вы раскомментируете закомментированные строки.

#define TTMATH_DONT_USE_WCHAR
#include <ttmath/ttmath.h>
#include <iostream>

using namespace std;
int main () {

int fibonaccinumber;
cin >> fibonaccinumber;
cin.ignore();

ttmath::UInt<10000> fibonacci1,fibonacci2,fibonacci3;
fibonacci1 = 1;
fibonacci2 = 1;
//cout << "1. " << fibonacci1 << "\n2. " << fibonacci2 << "\n";

for(int i=3;i<=fibonaccinumber;i++)
{fibonacci3 = fibonacci1 + fibonacci2;
//   cout << i << ". " << fibonacci3 << "\n";
fibonacci1=fibonacci2;
fibonacci2=fibonacci3;}

cout << "the " << fibonaccinumber << "th fibonacci number is " << fibonacci2;

string endprog;
getline(cin,endprog);
return 0;}  

Я еще не возился с произвольными значениями точности этой библиотеки, но когда я это сделаю, я продолжу расширять это руководство, если я увижу, что люди заинтересованы в нем, спасибо за все комментарии и ответы.

Ответы на вопрос(3)

Ваш ответ на вопрос