Всегда ли n + Math.random () меньше, чем n + 1? - PullRequest
0 голосов
/ 29 октября 2018

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

Итак, мой вопрос, есть ли возможное значение n, для которого n + Math.random ()

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Если Math.random () = 1 тогда n + Math.random () = n + 1

, когда Math.random () находится в диапазоне 0–1 (включая 0, но не 1)

Так что невозможно, чтобы n + Math.random ()

0 голосов
/ 29 октября 2018

Самый большой случайный результат - самый большой дубль, который строго меньше 1,0. Добавление одного к нему приводит к действительному результату, который находится точно на полпути между 2,0 и самым большим двойным числом, которое меньше 2,0. Округление до ближайшего округляет до 2,0, потому что это равенство, а 2,0 - четное.

Вам нужно разрешить, чтобы n + Math.random ()

0 голосов
/ 29 октября 2018

Да, есть несколько - когда значение числа достаточно велико, переводчик не обязательно сможет определить разницу между n и n + 1:

const verify = n => console.log(n + Math.random() < n + 1);
[
  Number.MAX_SAFE_INTEGER + 1,
  Infinity,
  -Infinity
].forEach(verify);

Впрочем, это не столько странность Math.random, сколько причуды точности чисел в JS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...