El siguiente códigoJavaScript desbordamiento de entero
console.log(Math.pow(2, 53));
console.log(Math.pow(2, 53) + 1);
produce exactamente misma salida para ambos cálculos:
9007199254740992
¿Por qué?
El siguiente códigoJavaScript desbordamiento de entero
console.log(Math.pow(2, 53));
console.log(Math.pow(2, 53) + 1);
produce exactamente misma salida para ambos cálculos:
9007199254740992
¿Por qué?
El resultado que ve se produce porque Math.Pow()
está trabajando con números de punto flotante, y cuando alcanza el decimosexto dígito decimal, no puede agregar necesariamente uno al dígito decimal menos significativo del valor y espera que el resultado cambie.
Normalmente, en un valor binario de coma flotante de 64 bits (8 bytes) IEEE 754, 53 bits para la mantisa (incluido el implícito de 1 bit). Su cálculo Math.Pow(2, 53)
requiere 54 bits en la mantisa para garantizar un cambio. Si agrega 2, debería ver el cambio.
Todos los números de Javascript son dobles.
No. Todos los números en JavaScript son números de coma flotante de 64 bits. – simeg
Posible duplicado: http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-to –