@vafegoc821

Нормальное распределение суммы 2-х игральных костей?

На страницу нужно вывести одновременно два числа, от 1 до 6 каждое, но таких, чтобы сумма этих чисел подчинялась нормальному распределению. Сразу говорю, что я далёк от математики. Подумалось, что функция преобразования Бокса-Мюллера может помочь, типа:
function randn_bm() {
  let u = 0, v = 0;
  while(u === 0) u = Math.random();
  while(v === 0) v = Math.random();
  let num = Math.sqrt( -2.0 * Math.log( u ) ) * Math.cos( 2.0 * Math.PI * v );
  num = num / 10.0 + 0.5;
  if (num > 1 || num < 0) return randn_bm()
  return num
}
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
Так?
function randn_bm() {
  let u = 0, v = 0;
  while(u === 0) u = Math.random(); //Converting [0,1) to (0,1)
  while(v === 0) v = Math.random();
  let num = Math.sqrt( -2.0 * Math.log( u ) ) * Math.cos( 2.0 * Math.PI * v );
  num = num / 10.0 + 0.5; // Translate to 0 -> 1
  if (num > 1 || num < 0) return randn_bm() // resample between 0 and 1
  return num
}

function randomIntegerInRange(min, max) {
  return Math.floor(randn_bm() * (max - min + 1)) + min;
}

console.log(randomIntegerInRange(1, 6));


randomIntegerInRange
JavaScript Math.random Normal distribution
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы