Answer the question
In order to leave comments, you need to log in
What formula can be chosen?
It is necessary to generate a random number from 0 to 1
But so that the larger the number, the greater the probability of its occurrence.
What would 0.8 drop out with a probability of 80%, 0.1 with a probability of 10%, etc.
How can I do that?
Obviously, if you just generate a random number from 0 to 1, then whether the output is 0.02 or 0.92, the probability of their occurrence is the same.
ps While I came up with a very oaky option: create an array, drive eight eights, ten tens and so on into it, mix and poke randomly into one of the elements.
Answer the question
In order to leave comments, you need to log in
Из Ваших условий плотность распределения должна быть возрастающей, например - прямая.
Соответствующая ей функция распределения будет квадратичной.
А формула которую Вы ищете, это обратная к функции распределения, т.е. простейший случай - квадратный корень.
Генерируем равномерное число от 0 до 1, берем от него квадратный корень:
- выпало 0.90, считаем, что сгенерировали 0.94896
- выпало 0.50, считаем, что сгенерировали 0.70711.
В общем случае, мне кажется, что Вам подойдет любая непрерывная функция с отрицательной второй производной
Еще, для линейного увеличения вероятности, выберите два случайных числа между 0 и 1 если второе меньше первого, верните первое иначе попробовать еще. Кстати в вашей задаче 1, должен выпасть с вероятностью 1, т.е кроме 1 ничего выпасть не должно. Надо все-таки, наверное, чтобы площадь оставалась равной 1 (т.е числа в районе 0 должны выпадать с вероятностью близкой к 0, а в районе 1 с вероятностью близкой к 0.5).
float montecarlo() {
while (true) {
float r1 = random(1);
float probability = r1;
float r2 = random(1);
if (r2 < probability) {
return r1;
}
}
}
natureofcode.com/book/introduction
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question