Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите написать числовую функцию (https://javascript.ru/forum/misc/30242-pomogite-napisat-chislovuyu-funkciyu.html)

leny 29.07.2012 16:45

PashPP, а прокомментируйте пожалуйста вот эту часть кода
13 if (kol2 > num){
14 Num(num, kol, min);
15 return;
16 }

Dim@ 29.07.2012 16:50

leny,
если при создании случайных чисел их сумма больше максимального то функция заново выполняется с начальными аргументами и первая функция останавливается
for (var i = 0; i < kol; i++){
  ar[i] = min + Math.round(Math.random() * obh);
  kol2 += ar[i]; // сумма всех псевдо-случайных чисел
}

if (kol2 > num){ //если сумма всех псевдо-случайных чисел
  Num(num, kol, min);//функция вызывается с данными аргументами
  return;// а так как в данной уже нет надобности её останавливаем
}

leny 29.07.2012 17:23

Цитата:

Сообщение от Dim@ (Сообщение 192689)
leny,
если при создании случайных чисел их сумма больше максимального то функция заново выполняется с начальными аргументами и первая функция останавливается
for (var i = 0; i < kol; i++){
  ar[i] = min + Math.round(Math.random() * obh);
  kol2 += ar[i]; // сумма всех псевдо-случайных чисел
}

if (kol2 > num){ //если сумма всех псевдо-случайных чисел
  Num(num, kol, min);//функция вызывается с данными аргументами
  return;// а так как в данной уже нет надобности её останавливаем
}

Просто я заметил одну странную штуку, если второй параметр >= 8, функция частенько не срабатывает. При 8 и 9 иногда срабатывает, а вот при 10 и выше - нет.
Может вы знаете где ошибка?

Dim@ 29.07.2012 17:46

leny,
проблема в том что происходит зависание из-за частого срабатывания if-a - слишком мала вероятность правильного выпадания псевдо-случайных чисел
if (kol2 > num){ //если сумма всех псевдо-случайных чисел
Num(num, kol, min);//функция вызывается с данными аргументами
return;// а так как в данной уже нет надобности её останавливаем
}

leny 29.07.2012 17:53

Цитата:

Сообщение от Dim@
проблема в том что происходит зависание из-за частого срабатывания if-a - слишком мала вероятность правильного выпадания псевдо-случайных чисел

Обойти это никак нельзя?

oneguy 29.07.2012 17:57

Цитата:

Сообщение от leny
Обойти это никак нельзя?

Можете использовать моё решение, выложенное выше в этой теме.

Dim@ 29.07.2012 18:08

leny,
действительно - лучше использовать метод oneguy - плюсы
+более рандомный
+обходит данное препятствие

oneguy 29.07.2012 21:03

Обновил 2-ой алгоритм. Теперь число попадает с первого раза, его не приходится перегенерировать, что делает этот алгоритм быстрее и стабильнее.

oneguy 30.07.2012 01:18

Цитата:

Сообщение от Maxmaxmахimus
это нормально или нужно с этим бороться?

По моему мнению, нужно бороться. Нужно, чтобы распределение результата было равномерное.

Deff 30.07.2012 02:17

Maxmaxmахimus,
по идее число комбинаций целочисленных делителей ограничено
В идеале один раз рандомно выбирать из этого массива всех комбинаций


Часовой пояс GMT +3, время: 19:31.