Какова точность функции JavaScript Math.random()
?
Точность 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.