Pergunta

As operações numéricas fazemos em nossos programas são limitados pelo número de bytes que uma linguagem especifica para um determinado tipo de dados (ou talvez de suporte de hardware).Dizer que eu posso usar inteiro para fazer os cálculos no meu salário (mesmo "curto" é mais do que suficiente para um ano a ganhar!!!;) ), mas não pode fazer o mesmo com o Bill Gates riqueza.Então, vamos para as coisas como o longo tempo e outras coisas.Mas não estamos ainda à mercê do número de bits que nos são dadas.

Então, como se eu emular operações numéricas no software?Dizer que uma classe que abstrai e pode fazer operações numéricas sobre números com 1000 dígitos...Claro que vai ser muito muito lento, mas eu não estou muito preocupado com a complexidade, mas olhando mais em apenas computability...

Talvez eu possa usá-lo para calcular PI 1000 dígitos de precisão em um mês ou um Primos de Mersenne em poucos anos e levar para casa R $100 ;)

Então, agora a minha pergunta, 1) já existem tais bibliotecas para fazer este tipo de coisas lá fora (Em C/C++).2) Se eu for sobre a implementação de um, você tem alguma sugestão para mim?(+, -, *, /, %, <<, >> operações devem suficiente eu acho)


PS:

  1. Estou C/C++ programador.

  2. E esta limitação começou a chatear-me de meus dias de escola.

Foi útil?

Solução

Tais tipos de dados são conhecidos como Arbitrária de números de precisão.Em Java, existem as classes BigDecimal e BigInteger que lidar com operações básicas (+, -, *, /) em dígitos nível.Eles não têm 'built-in' limitação de tamanho.Eles são, na verdade, que lento e são usados em uma grande quantidade de mundo real domínios.

C/C++ não tem built-in, mas há um monte de bibliotecas lá fora.Veja uma lista aqui:http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Libraries

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top