2010-07-27 13 views

Respuesta

8

Math.random() genera un número de coma flotante de 16 cifras decimales mayores que o igual a cero y menor que 1.

+5

Los números de coma flotante de Javascript son valores IEEE 754 de 64 bits, por lo que no son * exactamente * 16 lugares decimales. – Pointy

+0

¿Cómo no sería exacto? – jpc826

+0

@volatile: si su precisión no es una potencia de 10. – Brian

3

según Wikipedia: Double-precision floating-point format la parte fracción es 52 bits, y se sabe que el número será entre 0 y 1 (creo que no incluye 1), por lo que el exponente es -1, eso nos deja con 52 bits aleatorios.

Los 52 bits aleatorios le proporciona una precisión de 52 bits, que en base 10 es de aproximadamente

52*log10(2) ~= 15.653559774527022151114422525674 digits. 
6

navegador motor de It/JavaScript dependiente.

La precisión máxima posible es de 52 bits, porque Math.random devuelve un punto flotante de precisión doble entre 0 (inclusive) y 1 (exclusivo). Este máximo corresponde a aproximadamente 16 decimales, ver la respuesta de Sly1024.

En la práctica, muchos navegadores dan una precisión más pequeña. Este parece ser el estado actual:

  • Firefox: los 52 bits aleatorios completos.
  • V8/Chrome: 32 bits de precisión (hace algunos años que solía ser tan bajo como 30 bits, consulte https://codereview.chromium.org/1599019)
  • Safari: 32 bits
  • IE:?

Ejecuta la siguiente pieza de código varias veces y verás que los 21 bits finales son consistentemente 0 en Chrome y Safari.

console.log((Math.random() * Math.pow(2,53)).toString(2));

+0

IE11: 52 bits aleatorios, aunque el código anterior ofrece resultados como '111000000101010100010110011011110111000111010101110.1' a veces. –