martes, 11 de enero de 2011

Numeros Grandes en C++

Si has programado en c o c++, seguro te has encontrado con el problema de que quieres guardar un numero en una variable y no te cabe, o peor aun, el codigo no te funciona por que se esta produciendo un overflow en alguna variable y esta mostrando un resultado erroneo.
Diferente a como funciona en algunos lenguajes de mas alto nivel (java, python), el manejo de los tipos de datos en c++ se debe tratar con mucho cuidado, pues las variables tienen un valor maximo que soportan, y si el valor es superado, se produce un overflow arruinando el resultado del programa.
Los tamaños de los datos que puede soportar un tipo de variable se muestran a continuacion.


Tipo Tamaño Valores
unsigned char 8 bits 0 a 255
char 8 bits -128 a 127
short int 16 bits -32,768 a 32,767
unsigned int 32 bits 0 a 4,294,967,295
int 32 bits -2,147,483,648 a 2,147,483,647
unsigned long 32 bits 0 a 4,294,967,295
enum 16 bits -2,147,483,648 a 2,147,483,647
long 32 bits -2,147,483,648 a 2,147,483,647
float 32 bits 3.4 x 10^-38 a 3.4 x 10^38(6 dec)
double 64 bits 1.7 x 10^-308 a 1.7*10^308(15 dec)
long double 80 bits 3.4 x 10^-4932 a 1.1 x 10^+4932



Pero, que pasa si aun necesitamos manejar numero mas grandes, o con mayor presicion?, pues gracias a la moduridad de c++ se puede crear nuevos tipos de datos,uno de estos es CLN (Class Library for Numbers), este conjunto de clases permite manejar numeros extermadamente grandes, flotantes con una muy buena presicion, como si fuera poco, incluye gran cantidad de funciones matematicas, tiene sobrecargados gran cantidad de operadores, por lo cual el manejo es muy simple.
Personalmente he usado numeros con + de 3000 digitos sin ningun problema.

Enlace a documentacion de CLN: http://www.ginac.de/CLN/cln.html
Puedes bajar el codigo fuente de la pagina, o si usas algun derivado de debian, instalarlo mediante sudo apt-get install libcln-dev
Recuerda que cuando quieras enlazar un programa que use esta libreria, debes agregar al final -lcln.

Mas informacion: http://www.programacionfacil.com/cpp:tipos_de_datos
http://www.ginac.de/CLN/cln.html

3 comentarios:

  1. Nunca use números grandes en mi amado C++, pero ahora lo requiero, así que me puse a buscar por internet y de todas las opciones que vi esta es la que más me gustó. Instalable en mi debian con un simple apt-get, gracias por la publicación.

    ResponderEliminar
  2. Hola pues creo que c++ no sirve para crear un cajero automático simple ahí con sumas y restas con cantidades grandes, ejemplo si tengo una variable con banco = 1000.0000; esto no funciona vale por 100, si yo quisiera retirar 20.000; solo hace valer 20, entonces creo que esa es una limitarte de c++, y no lo encontré este tipo de info ni el libros ese dato. si alguien tiene ese dato seria bueno conocerlo lo intente con todo tipo de definición de variables y nada. saludos

    ResponderEliminar
  3. me sucede el problema de convertir el numero 89 en capicua, es un numero tan largo que c++ no lo puede leer

    ResponderEliminar

No Divagues... Se Tu!!