El número 2.147.483.647 es el octavo primo de Mersenne , igual a 2 31 − 1. Es uno de los cuatro únicos primos dobles de Mersenne conocidos . [1]
La primalidad de este número fue probada por Leonhard Euler , quien informó de la prueba en una carta a Daniel Bernoulli escrita en 1772. [2] Euler utilizó la división de prueba , mejorando el método de Pietro Cataldi , de modo que como máximo se necesitaban 372 divisiones. [3] De este modo mejoró el récord anterior, 6.700.417, también descubierto por Euler, cuarenta años antes. El número 2.147.483.647 siguió siendo el primo más grande conocido hasta 1867. [4]
En informática, este número es el valor más grande que puede contener un campo entero de 32 bits con signo .
En el momento de su descubrimiento, 2.147.483.647 era el mayor número primo conocido . En 1811, Peter Barlow , sin anticipar el interés futuro por los números perfectos , escribió (en Una investigación elemental de la teoría de los números ):
Euler comprobó que 2 31 − 1 = 2147483647 es un número primo; y este es el mayor número perfecto conocido actualmente y, en consecuencia, el último de los números perfectos anteriores [es decir, 2 30 (2 31 − 1)], que depende de esto, es el mayor número perfecto conocido actualmente, y probablemente el más grande que jamás se haya descubierto; porque como son meramente curiosos, sin ser útiles, no es probable que alguien intente encontrar uno más allá. [5]
Repitió esta predicción en su obra de 1814, Un nuevo diccionario matemático y filosófico . [6] [7]
De hecho, Thomas Clausen (67.280.421.310.721) descubrió un número primo mayor en 1855 , aunque no proporcionó ninguna prueba. Además, en 1867 se demostró que 3.203.431.780.337 era primo .
El número 2.147.483.647 (o hexadecimal 7FFFFFFF 16 ) es el valor positivo máximo para un entero binario con signo de 32 bits en informática . Por lo tanto, es el valor máximo para variables declaradas como números enteros (p. ej., como ) en muchos lenguajes de programación. La apariencia del número a menudo refleja un error, una condición de desbordamiento o un valor faltante. [8]int
El tipo de datos time_t , utilizado en sistemas operativos como Unix , es un entero con signo que cuenta el número de segundos desde el inicio de la época Unix ( medianoche UTC del 1 de enero de 1970) y, a menudo, se implementa como un entero de 32 bits. [9] La última hora que se puede representar de esta forma es las 03:14:07 UTC del martes 19 de enero de 2038 (correspondiente a 2.147.483.647 segundos desde el inicio de la época). Esto significa que los sistemas que utilizan un tipo de 32 bits time_t
son susceptibles al problema del año 2038 . [10]
El 1 de enero de 2022, se informó de un error en los sistemas Microsoft Exchange en el que fallaba la entrega de correo electrónico. Un escáner de malware interno (habilitado de forma predeterminada desde 2013) utilizó la fecha y la hora como un entero de 32 bits con signo. El número entero cambiaría durante el nuevo año a 2.201.010.001 (donde los dos primeros dígitos representan el año), superando el valor máximo para este tipo de datos. [11]
El número 2.147.483.647 a menudo se convierte en un límite estricto para diversas estadísticas en los videojuegos, como puntos o dinero, si se representan mediante números enteros de 32 bits con signo (en lugar de coma flotante , doble precisión o precisión arbitraria ). [12] [13] Superar este límite por medios legítimos, o modificando o pirateando el juego, produce muchos resultados diferentes causados por el desbordamiento de enteros . [14] El resultado más común es que el número se "envuelva" en negativos. Otro resultado potencial es el bloqueo del juego , lo que significa que no se implementó ningún mecanismo de seguridad en caso de que el valor exceda el límite de 32 bits con signo, generalmente si el motor subyacente tiene un comportamiento indefinido, en lugar de un comportamiento envolvente, para el desbordamiento de enteros. Un ejemplo muy conocido en los videojuegos es el de Old School RuneScape y Grand Theft Auto V , donde el número se utiliza como la cantidad máxima de monedas (o cualquier otro elemento) que un jugador puede tener a la vez con métodos normales, conocidos como una "pila máxima de efectivo". [15] [16] En casos similares, cuando se utiliza un entero de 32 bits sin signo en lugar de con signo, el límite podría ampliarse a 4.294.967.295 . [12]
mayor.
es apropiado comprobar que el cálculo no sobrepase el límite máximo de números enteros del idioma del juego (2,1 mil millones).
Desafortunadamente, la lógica utilizada para este cálculo fue incorrecta y cuando se ejecutó en pilas de otros artículos (no en la bolsa en sí), el resultado fue convertir la pila en 2,1 mil millones de monedas.