Санкт-Петербургский феномен. Парадоксы теории вероятностей. - страница 3

 
Dmitry Fedoseev:

При ставке 4 вроде на равных игра идет (если правильно понял правила игры).

if(MathRand()/32768.0<0.5)  ...
if(MathRand()%2==0) ...

или

if(MathRand()%2) ...

или

if(MathRand()<16384) ...
 
Nikolai Semko:

или

или

Последний вариант. Остаток от деления кривой - проверяли.

 
Dmitry Fedoseev:

Последний вариант. Остаток от деления кривой - проверяли.

Почему кривой? Не кривой, просто компилятор ругается, но ругается напрасно.

Чтоб не ругался можно так:

if(bool(MathRand()%2))  ...

проверить же не трудно:

int OnStart()
  {
   for (int i=0; i<10; i++) if(bool(MathRand()%2)) Print(i);
  }  
 
Nikolai Semko:

Почему кривой? Не кривой, просто компилятор ругается, но ругается напрасно.

Чтоб не ругался можно так:

проверить же не трудно:

Проверяли, случайность совсем не случайная получалась. Давно было, еще на 4-ом форуме. Не помню точно как проверяли, но картинка вырисовывалась довольно синусоидальная. Дело вовсе не в том, что компилятор ругается.

 
Dmitry Fedoseev:

Проверяли, случайность совсем не случайная получалась.

Ну что Вы такое говорите!

Выражение MathRand()%2 принимает только два значения - 0 или 1. 

 
Dmitry Fedoseev:

Проверяли, случайность совсем не случайная получалась. Давно было, еще на 4-ом форуме. Не помню точно как проверяли, но картинка вырисовывалась довольно синусоидальная. Дело вовсе не в том, что компилятор ругается.

Да, понял Вашу мысль. Действительно, увидел выпадание из случайного процесса. Видно алгоритм rand() далеко не совершенен. 
Да, тогда такой вариан, тем более он самый быстрый, т.к нет никаких мат. операций:

if(rand()<16384) ...
 
Nikolai Semko:

Ну что Вы такое говорите!

Выражение MathRand()%2 принимает только два значения - 0 или 1. 

Но ведь из можно суммировать, а можно и не от двух брать остаток

 
Да, самый нормальный вариант с if(rand()<16384), что-то не додумался))
 
Dmitry Fedoseev:
Да, самый нормальный вариант с if(rand()<16384), что-то не додумался))

можно еще поизвращаться:

if(rand()<1<<14) 

что абсолютно тоже самое, но так, чтоб большинство ничего не поняло. ))

 
А вот если надо от 0 до 5, или до 7 или до любого другого числа? Все равно же придется делить на 32768.0. Или есть варианты?
Причина обращения: