A melhor biblioteca matemática de precisão arbitrária para várias plataformas (portátil) [fechada]

Estou procurando uma boa biblioteca matemática de precisão arbitrária em C ou C ++. Poderia me dar alguns conselhos / sugestões?

Os principais requisitos:

istoDEVO lidar com números inteiros arbitrariamente grandes (meu principal interesse é por números inteiros). Caso você não saiba o que a palavra arbitrariamente grande significa, imagine algo como 100000! (o fatorial de 100000).A precisãoNÃO DEVE NECESSIDADE a ser especificado durante a inicialização da biblioteca / criação de objeto. A precisão deveSÓ ser restringido pelos recursos disponíveis do sistema.istoDEVEMOS utilize todo o poder da plataforma e deve lidar com números "pequenos" nativamente. Isso significa que em uma plataforma de 64 bits, o cálculo de 2 ^ 33 + 2 ^ 32 deve usar as instruções disponíveis da CPU de 64 bits. A bibliotecaNÃO DEVERIA calcule isso da mesma maneira que com 2 ^ 66 + 2 ^ 65 na mesma plataforma.istoDEVO manipular adição (+), subtração (-), multiplicação (*), divisão inteira (/), restante (%), potência (**), incremento (++), decremento (-), decremento (-), gcd (), fatorial () e outros cálculos aritméticos inteiros comuns com eficiência. A capacidade de lidar com funções como sqrt () (raiz quadrada), log () (logaritmo) que não produzem resultados inteiros é uma vantagem. Capacidade de lidarcálculos simbólicos é ainda melhor.

Aqui está o que eu encontrei até agora:

JavaéBigInteger eBigDecimal classe: Eu tenho usado isso até agora. Eu li o código fonte, mas não entendo a matemática por baixo. Pode ser baseado em teorias / algoritmos que eu nunca aprendi.O tipo inteiro interno ou nas bibliotecas principais debc / Pitão / Rubi / Haskell / Lisp / Erlang / OCaml / PHP / alguns outros idiomas: eu já usei alguns deles, mas não tenho idéia de qual biblioteca eles estão usando ou que tipo de implementação eles estão usando.

O que eu já sabia:

Usando umCaracteres como um dígito decimal e umCaracteres* como uma sequência decimal e faça cálculos nos dígitos usando um loop for.Usando umint (ou umlong intou umlongo longo) como uma "unidade" básica e uma matriz como um número inteiro longo arbitrário e faça cálculos nos elementos usando um loop for.Usando um tipo inteiro para armazenar um dígito decimal (ou alguns dígitos) comoBCD (decimal com código binário).Algoritmo de multiplicação de Booth

O que eu não sei:

Imprimir a matriz binária mencionada acima em decimal sem usar métodos ingênuos. Exemplo de método ingênuo: (1) adicione os bits do mais baixo ao mais alto: 1, 2, 4, 8, 16, 32, ... (2) use umCaracteres* string mencionada acima para armazenar os resultados decimais intermediários).

O que eu aprecio:

Boas comparações emGMP, MPFR, decNumber (ou outras bibliotecas que são boas na sua opinião).Boas sugestões de livros / artigos que eu deveria ler. Por exemplo, uma ilustração com figuras sobre como umingênuo o algoritmo de conversão binário para decimal funciona é bom. O artigo"Conversão binária em decimal em precisão limitada" por Douglas W. Jones é um exemplo de um bom artigo.Qualquer ajuda.

Por favorNÃO responda a esta pergunta se:

você acha que usando umDuplo (ou umlongo duploou umlongo longo duplo) pode resolver esse problema facilmente. Se você pensa assim, significa que não entende o assunto em discussão.

questionAnswers(5)

yourAnswerToTheQuestion