language agnostic - La implementación más eficiente de una gran cantidad de clases
language-agnostic bignum (5)
Al hacer cálculos en números muy grandes donde los tipos de datos integrales, como double o int64, son insuficientes, puede ser necesaria una clase separada para manejar números tan grandes.
¿Alguien se preocupa por ofrecer un algoritmo eficiente sobre la mejor manera de hacer esto?
En C # 4.0 usa el tipo BigInteger
Está preguntando acerca de la aritmética de precisión arbitraria , un tema sobre el que se han escrito libros . Si solo desea una biblioteca BigNum simple y bastante eficiente para C #, es posible que desee comprobar IntX .
Hacer tu propia biblioteca de BigNum es complicado, así que diría como jjnguy. Usa lo que tu lenguaje ofrezca como bibliotecas.
En .net, haga referencia a la DLL de 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.
Hay 2 soluciones a su problema:
Manera fácil: use una biblioteca externa como '' La Biblioteca GNU MP Bignum y olvídese de los detalles de implementación.
Difícil: diseñe su propia clase / estructura que contenga múltiples tipos de datos de orden superior como variables dobles o int64 y defina operaciones matemáticas básicas para ellos utilizando la sobrecarga del operador (en C ++) o mediante métodos llamados agregar, restar, multiplicar, desplazar, etc. (en JAVA y otros lenguajes OO).
Avíseme si necesita más ayuda. He hecho esto un par de veces en el pasado.
Usar las funciones integradas de un idioma funciona para mí.
Java tiene BigInteger
y BigDecimal
, y Python automáticamente cambia a un objeto similar al de Java si un número se sale del rango de un integer
o lo que sea.
En cuanto a otros idiomas, no tengo idea.
Odio reinventar la rueda.