Búsqueda de sitios web

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.