matemáticas - desbordamiento de enteros en JavaScript
El siguiente código
console.log(Math.pow(2, 53));
console.log(Math.pow(2, 53) + 1);
produce exactamente la misma salida para ambos cálculos:
9007199254740992
¿Por qué?
Respuesta #1
El resultado que ves ocurre porque Math.Pow() está trabajando con números de punto flotante, y cuando llegas al décimo sexto dígito decimal, no necesariamente puedes sumar uno al dígito decimal menos significativo del valor y esperar que el resultado cambie.
Típicamente, en un valor binario de punto flotante IEEE 754 de 64 bits (8 bytes), hay 53 bits para la mantisa (incluyendo el bit implícito). Su cálculo Math.Pow(2, 53) requiere 54 bits en la mantisa para garantizar un cambio. Si suma 2, debería ver el cambio.