2008-08-25 19 views
6

Al realizar cálculos en números muy grandes donde los tipos de datos integrales como double o int64 son insuficientes, puede ser necesaria una clase diferente para manejar números tan grandes.Implementación más eficiente de una clase de número grande

¿Alguien se preocupa por ofrecer un algoritmo eficiente sobre la mejor manera de hacerlo?

Respuesta

4

El uso de las funciones incorporadas de un idioma funciona para mí.

Java tiene BigInteger y BigDecimal, y Python cambia automagicaly a un objeto similar a Java de si un número se sale del rango de un integer o lo que sea.

En cuanto a otros idiomas, no tengo ni idea.

Odio reinventar la rueda.

12

Hay 2 soluciones a su problema:

  • manera fácil: utilizar una biblioteca externa como 'The GNU MP Bignum Library y olvidarse de los detalles de implementación.

  • camino duro: del diseño de su propia clase/estructura que contiene varios tipos de datos de orden superior como las variables dobles o Int64 y definir las operaciones matemáticas básicas para ellos utilizando la sobrecarga de operadores (en C++) o por medio de métodos denominados sumar, restar, multiplicar , shift, etc. (en JAVA y otros lenguajes de OO).

Deseo saber si necesita ayuda adicional. He hecho esto un par de veces en el pasado.

3

Hacer tu propia biblioteca de BigNum es complicada, así que diría como jjnguy. Usa lo que tu lenguaje ofrezca como bibliotecas.

En .net, haga referencia a la dll VisualJ ya que contienen las clases BigInteger y BigDecimal. Sin embargo, debe tener en cuenta algunas limitaciones de estas bibliotecas, como la falta de un método de raíz cuadrada, por ejemplo.

Cuestiones relacionadas