- 1
- 2
- 3
- 4
- 5
int prev, next;
// next should not be equal to prev;
next = radnom(MAX);
if (next = prev)
next = random(MAX);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+125
int prev, next;
// next should not be equal to prev;
next = radnom(MAX);
if (next = prev)
next = random(MAX);
Просто передаю концепцию на общеславянском.
Будет интересно посчитать насколько всё-таки это говно уменьшает вероятность совпадения при разных MAX.
Fixed?
Другое дело, что так делать нельзя)
При любом рандоме (кроме каноничного result = 3;) на небольших MAX условие будет отрабатывать систематически.
Ну а вероятность выпадения двух одинаковых значений подряд легко посчитать теоретически: p = 1 / MAX.
> код почти наверняка будет работать верно
> Вопрос не в устройстве генератора
Ну я какбэ и говорю, что от качества рандома мало что зависит, нет?
если рандом трушный - он выдает любое число с одинаковой вероятностью. А программировании, строго говоря, это не совсем так. Чем ближе выдаваемая выборка к равномерному распределению - тем лучше рандом.
гоню, все правильно 1/(MAX^2).
Если матожидание ярко выражено, то шанс попадания в одно и тоже число увеличивается. Хотя врятли в рардом будут засовывать нормальное распределение вместо равномерного. Но исключать такое развитие событий не следует)
раскусил, да?
знание, что после одного псевдослучайного числа обязано сгенерироваться отличное от него, снижает стойкость