El fenómeno de San Petersburgo. Las paradojas de la teoría de la probabilidad. - página 3

 
Dmitry Fedoseev:

Con una apuesta de 4, parece que hay igualdad de condiciones (si entiendo bien las reglas del juego).

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

o

if(MathRand()%2) ...

o

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

o

o

Última opción. El resto de la división de la curva - comprobada.

 
Dmitry Fedoseev:

Última opción. El resto de la división de la curva - comprobada.

¿Por qué está torcido? No está torcido, es sólo el compilador que jura, pero jura en vano.

Para evitarlo, puedes hacer lo siguiente:

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

No es difícil comprobarlo:

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

¿Por qué está torcido? No está torcido, es sólo el compilador el que jura, pero jura en vano.

Para evitarlo, puede hacer lo siguiente:

No es difícil comprobarlo:

Lo hicimos, la aleatoriedad no era para nada aleatoria. Fue hace mucho tiempo, en el cuarto foro. No recuerdo exactamente cómo lo comprobaron, pero la imagen era bastante sinusoidal. No es porque el compilador nos regañe.

 
Dmitry Fedoseev:

Lo comprobamos, la aleatoriedad no era en absoluto aleatoria.

¿De qué estás hablando?

MathRand()%2 sólo toma dos valores: 0 o 1.

 
Dmitry Fedoseev:

Lo comprobamos, la aleatoriedad no era en absoluto aleatoria. Fue hace mucho tiempo, en el cuarto foro. No recuerdo exactamente cómo se comprobó, pero la imagen era bastante sinusoidal. No es que el compilador esté regañando en absoluto.

Sí, entiendo tu punto. Efectivamente, he visto un abandono de un proceso aleatorio. Obviamente, el algoritmo rand() está lejos de ser perfecto.
Sí, entonces esta variante, sobre todo es la más rápida, ya que no hay operaciones matemáticas:

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

¿De qué estás hablando?

MathRand()%2 sólo toma dos valores: 0 o 1.

Pero puedes sumarlos o no tomar el resto de dos.

 
Sí, la opción más normal con if(rand()<16384), no se me había ocurrido))
 
Dmitry Fedoseev:
Sí, la variante más normal con if(rand()<16384), algo no pensaba))

Puedes hacer más giros y vueltas:

if(rand()<1<<14) 

que es exactamente lo mismo, pero de una manera que la mayoría de la gente no entiende. ))

 
¿Pero qué pasa si es del 0 al 5, o al 7, o a cualquier otro número? Todavía tienes que dividir por 32768,0. ¿O hay opciones?
Razón de la queja: