Il fenomeno di San Pietroburgo. I paradossi della teoria della probabilità. - pagina 3

 
Dmitry Fedoseev:

Con una puntata di 4, sembra essere un gioco alla pari (se ho capito bene le regole del gioco).

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

o

if(MathRand()%2) ...

o

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

o

o

Ultima opzione. Il resto della divisione della curva - controllato.

 
Dmitry Fedoseev:

Ultima opzione. Il resto della divisione della curva - controllato.

Perché è storto? Non è storto, è solo il compilatore che giura, ma giura invano.

Per evitarlo, potete fare così:

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

Non è difficile controllarlo:

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

Perché è storto? Non è storto, è solo il compilatore che sta imprecando, ma sta imprecando invano.

Potete fare quanto segue per evitarlo:

Non è difficile controllarlo:

L'abbiamo fatto, la casualità non era affatto casuale. È stato molto tempo fa, nel quarto forum. Non ricordo esattamente come l'hanno controllato, ma l'immagine era abbastanza sinusoidale. Non è perché il compilatore ci rimprovererebbe.

 
Dmitry Fedoseev:

Abbiamo controllato, la casualità non era affatto casuale.

Ma di che cosa stai parlando!

MathRand()%2 prende solo due valori - 0 o 1.

 
Dmitry Fedoseev:

Abbiamo controllato, la casualità non era affatto casuale. È stato molto tempo fa, nel quarto forum. Non ricordo esattamente come è stato controllato, ma l'immagine era abbastanza sinusoidale. Non è che il compilatore rimproveri affatto.

Sì, ho capito il tuo punto di vista. In effetti, ho visto un abbandono di un processo casuale. L'algoritmo rand() è ovviamente lontano dall'essere perfetto.
Sì, allora questa variante, soprattutto è la più veloce, poiché non ci sono operazioni matematiche:

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

Ma di che cosa stai parlando!

MathRand()%2 prende solo due valori - 0 o 1.

Ma potete sommarli o non prendere il resto da due.

 
Sì, l'opzione più normale con if(rand()<16384), non ci avevo pensato))
 
Dmitry Fedoseev:
Sì, la variante più normale con if(rand()<16384), qualcosa non ha pensato))

Si possono fare altri colpi di scena:

if(rand()<1<<14) 

che è esattamente la stessa cosa, ma in un modo che la maggior parte delle persone non capisce. ))

 
Ma se fosse da 0 a 5, o 7, o qualsiasi altro numero? Dovete ancora dividere per 32768,0. O ci sono opzioni?