Aunque la referencia de tydok a PiL 2.3 es correcta y apropiada, y Javier's answer es en la práctica correcta, pensé que la discusión de los números en Lua debería completarse con un par de detalles más.
El intérprete Lua está diseñado para integrarse en una aplicación típicamente como una configuración y/o lenguaje de scripting. Cuando se crea para una aplicación, es común configurar algunas de sus características para que se adapten.
El tipo numérico exacto que se utilizará para los números está disponible para la configuración. Al compilar para una plataforma sin hardware punto flotante donde cargar módulos de terceros no es importante (especialmente en un sistema integrado o aplicación de consola de juegos decodificadores), entonces es razonable elegir un tipo integral en lugar del double
predeterminado. Ocasionalmente, también es razonable cambiar a float
.
Sin embargo, hay aplicaciones en las que se necesitan enteros de 64 bits, o la mayoría de los números pueden ser enteros, pero se requiere aritmética de punto flotante ocasional. Para esos casos, está el LNUM patch en el núcleo de Lua.
LNUM cambia el núcleo para que los números se almacenen como enteros o coma flotante, y permite varias selecciones configurables para la precisión de cada uno.
Por lo tanto, la respuesta final a la pregunta del valor máximo de un número Lua es que depende de la configuración del intérprete elegido en tiempo de compilación, y si le preocupa la magnitud máxima representable o el entero máximo. E incluso entonces, se ha trabajado para que los enteros grandes funcionen bien con las representaciones de coma flotante.
Gracias, lo puede soportar ser odiado por unos pocos programadores 150 millones de años a partir de ahora. – Kai
Por cierto, aunque es una mantisa de 52 bits, hay un poco implícito de precisión "adicional", por lo que lo más alto que puede aumentar en uno es alrededor de 2^53. – Eloff
2^53 * es * el primer número que no aumentará. Esto se debe a que la mantisa IEEE-754 tiene un bit "oculto" más significativo que se supone que es 1 si el exponente no es cero y no es el máximo exponente. Cuando el valor es 2^53, solo se establece ese bit oculto, y el bit menos significativo no se almacena, pero su valor es cero, por lo que el valor sigue siendo exactamente correcto. Incrementar ese valor incrementa ese bit que no está almacenado, por lo que no hay efecto en el resultado. Tenga en cuenta que se pueden almacenar valores más altos, pero solo se almacenarán los 53 bits más altos, los bits más bajos se pondrán a cero. – doug65536