Другими словами, есть ли способ, с помощью rand () или чего-то еще, выбрать псевдослучайное число, но иметь возможность регулировать шансы на получение определенных результатов и как это сделать, если это возможно.
Для простоты давайте используем drand48()
, который возвращает «значения, равномерно распределенные по интервалу [0.0,1.0)».
Чтобы более вероятно появление значений, близких к одному, примените функцию перекоса log2()
:
log2( drand48() + 1.0 ); // +1 since log2() in is [0.0, 1.0) for values in [1.0, 2.0)
Чтобы увеличить вероятность появления значений, близких к нулю, используйте, например, exp()
(exp(drand48()) - 1.0) * (1/(M_E-1.0)); // exp(0)=1, exp(1)=e
Как правило, вам необходимо создать функцию, которая бы отображала равномерно распределенные значения из случайной функции в значения, которые распределены по-разному, неравномерно.