Точность Math.random()

Какова точность функции JavaScript Math.random()?

Ответы

Ответ 1

Math.random() генерирует число с плавающей запятой из 16 знаков после запятой, большее или равное нулю, и меньше 1.

Ответ 2

Он зависит от браузера и JavaScript.

Максимально возможная точность - 52 бита, потому что Math.random возвращает плавучую точку с двойной точностью между 0 (включительно) и 1 (исключая). Этот максимум соответствует примерно 16 десятичным знакам, см. Sly1024.

На практике многие браузеры дают меньшую точность. Кажется, это текущее состояние:

  • Firefox: полные 52 случайных бита.
  • V8/Chrome: 32-битная точность (несколько лет назад она составляла до 30 бит, см. https://codereview.chromium.org/1599019)
  • Safari: 32 бит
  • IE:?

Выполните следующий фрагмент кода несколько раз, и вы увидите, что завершающие 21 бит последовательно содержат 0 в Chrome и Safari.

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

Ответ 3

Согласно wikipedia: Формат с плавающей запятой с двойной точностью часть фракции составляет 52 бита, и мы знаем, что число будет от 0 до 1 (я думаю, не включая 1), поэтому показатель составляет -1, что оставляет нас с 52 случайными битами.

52 случайных бита дают вам 52-битную точность, которая в базе 10 составляет около

52*log10(2) ~= 15.653559774527022151114422525674 digits.