Search
Write a publication
Pull to refresh
0
0
Send message
Плохо искали. Есть. Работаю уже 5 лет в такой компании.
Спасибо за статью. Когда-то тоже ломал голову над своим генератором. Вот мой вариант, может кому пригодится:
param = 0..1000. При 500 симметричное распределение. Чем ближе к 0 тем ближе чаще значения ближе к min.
int Random::irandomminmaxparam(int min, int max, int param)
{
if (param < 0) param = 0;
if (param > 1000) param = 1000;
iseed = ((iseed >> 3)*iseed * 16805 + 789221) % 2147483647;
float k = (0.05 + 1.9*param / 1000)*0.5;
float y;
float x;
if (iseed < 1073741823) {
x = 1 — iseed / 1073741823;
y = k — k*(x*x);
}
else {
x = iseed / 1073741823 — 1;
y = k + (1 — k)*(x*x);
}
return (max — min)*y + min + 0.5;
}
Обычно в редакторе есть галочка. Использовать пробелы вместо tab. Возможно это решение.
Аж прослезился от наплыва ностальгии. Как давно это было… Школа 7-й класс… паял такие штуки.

Information

Rating
Does not participate
Registered
Activity