2011-01-30 7 views
5

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é?

+0

Posible duplicado: http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-to –

Respuesta

10

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.

-3

Todos los números de Javascript son dobles.

+0

No. Todos los números en JavaScript son números de coma flotante de 64 bits. – simeg

Cuestiones relacionadas