O fenômeno de São Petersburgo. Os paradoxos da teoria da probabilidade. - página 3

 
Dmitry Fedoseev:

Com uma aposta de 4, parece ser um campo de jogo nivelado (se eu entender as regras do jogo corretamente).

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

ou

if(MathRand()%2) ...

ou

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

ou

ou

Última opção. O restante da divisão da curva - verificado.

 
Dmitry Fedoseev:

Última opção. O restante da divisão da curva - verificado.

Por que está torto? Não é torto, é apenas o compilador que jura, mas jura em vão.

Para evitá-lo, você pode fazer isso:

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

Não é difícil verificá-lo:

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

Por que está torto? Não é torto, é apenas o compilador que está jurando, mas está jurando em vão.

Você pode fazer o seguinte para evitá-lo:

Não é difícil verificá-lo:

Nós fizemos, a aleatoriedade não foi nada aleatória. Foi há muito tempo, de volta ao 4º fórum. Não me lembro exatamente como eles verificaram, mas a imagem era bastante sinusoidal. Não é porque o compilador nos repreenderia.

 
Dmitry Fedoseev:

Nós verificamos, a aleatoriedade não era nada aleatória.

Do que você está falando!

MathRand()%2 leva apenas dois valores - 0 ou 1.

 
Dmitry Fedoseev:

Nós verificamos, a aleatoriedade não era nada aleatória. Foi há muito tempo, de volta ao 4º fórum. Não me lembro exatamente como foi verificado, mas a imagem era bastante sinusoidal. Não é que o compilador esteja repreendendo de forma alguma.

Sim, entendi seu ponto de vista. De fato, eu vi uma desistência de um processo aleatório. O algoritmo rand() está obviamente longe de ser perfeito.
Sim, então esta variante, especialmente é a mais rápida, já que não há operações matemáticas:

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

Do que você está falando!

MathRand()%2 leva apenas dois valores - 0 ou 1.

Mas você pode resumi-los ou não tirar o restante de dois.

 
Sim, a opção mais normal com if(rand()<16384), eu não pensei nisso)))
 
Dmitry Fedoseev:
Sim, a variante mais normal com if(rand()<16384), algo não pensou)))

Você pode fazer mais algumas voltas e reviravoltas:

if(rand()<1<<14) 

o que é exatamente o mesmo, mas de uma forma que a maioria das pessoas não entende. ))

 
Mas e se for de 0 a 5, ou 7, ou qualquer outro número? Você ainda tem que dividir por 32768,0. Ou existem opções?