anipular inteiros de comprimento arbitrário em C

Alguém pode me falar de uma boa biblioteca C ++ para manipulação (executando operações etc ...) com números arbitrariamente grandes (pode ser uma biblioteca que também lida com flutuações arbitrárias de precisão, mas a manipulação de números inteiros é mais importante

Por favor, consulte apenas as bibliotecas que você usou e me diga como você conseguiu configurá-lo e buscá-lo, talvez com um exemplo muito minimalista ou algo assim (basicamente, se a biblioteca mencionada não possuir boa documentação, forneça suas próprias informações).

Para registrar, estou usando o Windows 7 em uma máquina x64, o CodeBlocks como meu IDE e o MinGW mais recente como o compilado

Bibliotecas que tentei:

vlint (operações insuficientes, funciona bem para pequenas coisas)

bigint (fácil de configurar, compilar erros e não muita documentação (da qual os erros podem ser derivados))

ttmath (parecia promissor, compilou alguns programas de exemplo BIG e foi executado após algumas correções devido a erros de compilação, sintaxe incompreensível por praticamente nenhuma documentação)

gmp (não conseguia nem configurá-lo)

p.s. Foi removida a 'parte difícil da pergunta', que basicamente explicava por que estou perguntando algo que foi solicitado várias vezes no Stackoverflow, para que as pessoas o leiam até o fina

-> ATUALIZAÇÃO

ntão, eu escolhi uma resposta que não era direta para minha pergunta inicial, mas me ajudou muito a resolver isso e vou postar algumas das minhas descobertas para ajudar outros iniciantes em c ++ como eu a começar a trabalhar com números muito grandes sem dificuldades com bibliotecas por dias como eu fiz em um micro-guia fácil passo a passo.

Coisas que eu estava usando (lembre-se de seguir o guia):

Windows 7 Ultimate x64

Amd k10 x64 (algumas bibliotecas não funcionam com isso, outras se comportam de maneira diferente, outras são personalizadas para o amd k10, portanto isso não apenas o ajudará com a biblioteca que usei, mas possivelmente também com outros)

Code :: Blocos 10.05 a versão sem o MinGW incluído, nome do arquivo "codeblocks-10.05-setup.exe" (instalado em C: \ Arquivos de Programas (x86) \ CodeBlocks)

MinGW packagesara obter mais informações, consulte o manual do usuário e o manual do usuário.Clique no botão `` Iniciar '' e depois em `` Configurações ''. .tar.gz w32api-3.8.tar.gz) extraído em C: \ MinGW

TTMath 0.9.2 nome do arquivo "ttmath-0.9.2-src.tar.gz" descompactou e copiou a pasta "ttmath" para a pasta "C: \ CPPLibs" (que é a pasta onde eu coloco minhas bibliotecas c ++)

O que fazer para configurar tudo

Vá para o Código: Blocos> Configurações> Compilador e Depurador (Meu compilador foi detectado automaticamente aqui.Se isso não acontecer com você, em "Compilador Selecionado", selecione "Compilador GNU GCC" e clique em "Definir como Padrão" e depois em "Ferramentas Exectáveis da Cadeia de Ferramentas" no "diretório de instalação dos Compiladores, você pode escolher o diretório de instalação do compilador ou tentar detectar automaticamente" e com isso classificado em "C ++ Compiler" selecione ou escreva "mingw32-g ++. exe".Se isso acontecer com você basta fazer isso, em "Compilador Selecionado", selecione "Compilador GNU GCC" e clique em "Definir como Padrão"

Sem sair de "Código: Blocos> Configurações> Compilador e Depurador" e, com o exposto acima, vá para "Diretórios de Pesquisa" e, em seguida, "Compilador", clique em "Adicionar" e escolha a pasta em que você armazena suas bibliotecas ou onde coloca seu arquivo. A pasta "ttmath" (no meu caso, C: \ CPPLibs), vá para "Linker" e faça a mesma cois

Para começar a codificar com a biblioteca "ttmath", você deve colocar esta linha#include <ttmath/ttmath.h> antes da função principal NOTA Se você usa um sistema de 64 bits, você receberá muitos erros se também não colocar esta linha#define TTMATH_DONT_USE_WCHAR ANTE está linha#include <ttmath/ttmath.h>, eu estava lutando com essa porcaria até encontrar a correção que outro cara que também estava lutando encontrou e postou na web e funcionou para mim) p.s. Eu acho que é apenas para sistemas de 64 bits, mas se você receber erros apenas por incluir o arquivo de cabeçalho "ttmath.h", é mais provável por causa diss

Declarando variáveis que terá grandes valores inteiros deve ser feito da seguinte forma:ttmath::UInt<n> a,b,c; onde "a, b, c" são suas variáveis e "n" é o tamanho dos números que você pode armazenar nas variáveis neste formato "2 ^ (32 * n) -1" para sistemas de 32 bits e este formato "2 ^ (64 * n) -1 "para sistemas de 64 bits

Atribuindo valores às variáveis se você fizer istoa = 333; (e o número no lugar de 333 é maior que o tipo de dados padrão "int longo" no c ++) não será compilado porque a atribuição de valores a variáveis como essa, independentemente do tamanho especificado anteriormente, o número inteiro pode ser tão grande quanto o tipo de dados padrão "long int" no c ++ (imaginei esse sozinho, da maneira mais difícil), também se você usar um valor menor e compilar tudo bem, e então você executar o programa e ele tentar escrever para essa variável um número maior que o número que o tipo de dados padrão "long int" mencionado pode manipular, então sua matemática estará errada; então assista ao seguinte: para atribuir um valor a uma variávela maneira certa você tem que atribuí-lo assima = "333"; (sim, eu sei que você está tratando-o como uma string dessa maneira, mas ele fará operações muito bem sem problemas e se você decidir "cout" a variável, nunca será um resultado de notação científica ou exponencial como você obtém usando tipos de dados inteiros padrão sem ser associado a algumas 'instruções extras' para exibir o número correto)

p.s. Usando essas regras simples para trabalhar com números inteiros e esta biblioteca, calculei os números de fibonacci até o 100.000º número com um programa simples (que levou 3 minutos para codificar) em 15 a 20 segundos e o número ocupou 3 páginas, além de ser prático biblioteca assim que você souber como funciona (que você praticamente não tinha ajuda antes, algumas amostras do site ttmath são bastante enganadoras, mas agora você tem alguma ajuda) também parece bastante eficiente, confirmei que o número 100.000 é provavelmente certo, porque eu aumentei o tamanho (o "n") de 10000 para 50000 e o número manteve o tamanho e os dígitos inicial e final eram os mesmos. Este é o código-fonte que eu usei, usei um número MUITO GRANDE para o tamanho inteiro, apenas para testar. Na verdade, eu não me preocupei em ver quanto tempo o programa começaria a fazer coisas erradas, mas eu sei que o comprimento de até o número 10.000º de fibonacci não superará o comprimento que eu defini porque antes disso eu fazia o programa cout todos os resultados até chegar a 10.000º e estava sempre crescendo. Também verifiquei os primeiros números da sequência antes, quando parei o programa e estava vendo os 'dígitos crescerem' e confirmei os primeiros números de fibonacci da sequência e eles estavam corretos.NOTA Este código-fonte exibirá apenas o número da sequência de fibonacci que você deseja conhecer, apenas os números "crescendo" se você descomentar as linhas comentada

#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;}  

Ainda não mexi com flutuadores de precisão arbitrários desta lbrary, mas quando o fizer, continuarei a expandir este guia se perceber que as pessoas estão interessadas nele, obrigado por todos os comentários e resposta

questionAnswers(3)

yourAnswerToTheQuestion