Una duda que nos plantearon hace algún tiempo, es la problemática de operar con números grandes en C, aunque este acercamiento también es válido para otros lenguajes. Lo primero de todo decir que cuando hablamos de números grandes debemos definir el número de cifras con las que consideramos que el número es grande.
Un modo bastante simple, para acercarnos a este problema es ver cual es el mayor número que podemos almacenar en un tipo de dato. Aquí hay que hacer distinciones, por una parte si hablamos de números reales y por otra si hablamos de números enteros.
En el caso de números enteros, por ejemplo si nuestro tipo de dato es un entero de 32bits, y acepta números tanto positivos como negativos, el mayor número que puede almacenar es: 2^31 -1 = 2.147.483.647. Si queremos almacenar números más grandes, y no vamos a utilizar los negativos, podemos usar un entero de 32bits sin signo. En este caso tenemos que el mayor número es el 2^32 -1 = 4.294.967.295
El siguiente paso para poder manejar números más grandes, es bastante obvio y consiste en aprovechar las máquinas de 64bits, utilizando enteros de 64bits. Pudiendo almacenar como máximo el número 18.446.744.073.709.551.615.
Los tipos de datos reales, utilizan otra representación que podéis ver aquí.
En algunos casos, como en las aplicaciones que utilizan algoritmos de criptografía, se necesita utilizar números extremadamente grandes. En estos casos encontramos dos soluciones:
Los Enteros Grandes son un tipo de datos, que no pertenecen a los tipos de datos del lenguaje, pero los podemos encontrar en muchas librerías (principalmente en las de criptografía), estos enteros grandes nos permiten utilizar enteros que ocupan cientos de bits, por ejemplo enteros de 2048 bits para generar certificados. Como os podéis imaginar las operaciones se han tenido que programar de manera distinta, para por un lado agilizar los cálculos y por otro no desbordar los registros y/o buffers del sistema.
En el caso de que uséis C, podéis utilizar la implementación de OpenSSL.
En el caso de que uséis Java, podéis utilizar la clase BigInteger, que en este caso sí pertenece al JDK.
Espero que este artículo os haya gustado. Saludos.
Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite…
Cada vez estamos más acostumbrados a usar código para generar la infraestructura (IaC), documentar nuestro…
Uno de los problemas que se presentan con una mayor frecuencia hoy en día, es…
Uno de los problemas que solemos tener los programadores, es que nos gusta estar a…
Docker es una de las herramientas más usadas por los desarrolladores, sin embargo, usarlo en…
Como seguramente sabrás el uso de JavaScript ha crecido exponencialmente en los últimos tiempos, sin…