number max_value longest array javascript integer

max_value - parseint javascript limit



¿Cuál es la diferencia entre JS Number.MAX_SAFE_INTEGER y MAX_VALUE? (4)

Número.MAX_SAFE_INTEGER 9007199254740991

Número.MAX_VALUE 1.7976931348623157e + 308

Entiendo cómo se calcula MAX_SAFE_INTEGER en función de la aritmética de punto flotante de doble precisión de JavaScript, pero ¿de dónde proviene este enorme valor máximo? ¿Es el número que aparece si está utilizando los 63 bits para el exponente en lugar de los 11 bits seguros?


Como saben, el javascript tiene un número de tipo, pero no un entero. El entero aparece por la característica ducktyping en javascript. Entonces, Number.MAX_SAFE_INTEGER < Number.MAX_VALUE .

Junto con MIN_VALUE y MIN_SAFE_INTEGER configuran el rango del posible valor numérico, para double e int cuando usa parseFloat(X) parseInt(X) .


Los números JS son flotadores internos de 64 bits (IEEE 754-2008).

MAX_SAFE_INTEGER es el número entero máximo que se puede representar de manera segura en ese formato, lo que significa que todos los números que se encuentran por debajo de ese valor (y que están por encima de MIN_SAFE_INTEGER) se pueden representar como números enteros.

MAX_VALUE proviene de 2 ^ 1023 (signo de mantisa menos mantisa de 11 bits), eso es aproximadamente 10 ^ 308.

¿Es el número que aparece si está utilizando los 63 bits para el exponente en lugar de los 11 bits seguros?

La mantisa (exponente) siempre es de 11 bits, (no tan) sorprendentemente, eso es suficiente para un máximo de 10 ^ 308.


MAX_VALUE está en doble (64 bit)
MAX_SAFE_INTEGER puede usar el primer 53 bit de un doble (64 bit)
básicamente javascript no soporta mucho tiempo. por lo tanto, para el número int se utiliza el contenedor entero de 32 bits. y para un número mayor de 32 bits, mantenga el número en un contenedor doble cuya parte entera es de 53 bits y los 11 bits restantes son mantisa (mantenga la información de un número de punto flotante).


Number.MAX_SAFE_INTEGER es el entero más grande que se puede usar de forma segura en los cálculos.

Por ejemplo, Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2 es verdadero: cualquier entero mayor que MAX_SAFE_INTEGER no siempre puede representarse en la memoria con precisión. Todos los bits se utilizan para representar los dígitos del número.

Number.MAX_VALUE por otro lado, es el mayor número posible para representar usando una representación de punto flotante de doble precisión. En términos generales, cuanto mayor sea el número, menos preciso será.

Más información números de coma flotante de precisión doble en Wikipedia