Le phénomène de Saint-Pétersbourg. Les paradoxes de la théorie des probabilités. - page 3

 
Dmitry Fedoseev:

Avec une mise de 4, il semble que les règles du jeu soient équitables (si je comprends bien les règles du jeu).

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

ou

if(MathRand()%2) ...

ou

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

ou

ou

Dernière option. Le reste de la division de la courbe - vérifié.

 
Dmitry Fedoseev:

Dernière option. Le reste de la division de la courbe - vérifié.

Pourquoi est-il de travers ? Il n'est pas tordu, c'est juste le compilateur qui jure, mais il jure en vain.

Pour l'éviter, vous pouvez faire ceci :

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

Ce n'est pas difficile de le vérifier :

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

Pourquoi est-il de travers ? Il n'est pas tordu, c'est juste le compilateur qui jure, mais il jure en vain.

Vous pouvez faire ce qui suit pour l'éviter :

Ce n'est pas difficile de le vérifier :

Nous l'avons fait, le hasard n'était pas du tout aléatoire. C'était il y a longtemps, au 4ème forum. Je ne me souviens pas exactement comment ils l'ont vérifié, mais l'image était assez sinusoïdale. Ce n'est pas parce que le compilateur nous gronderait.

 
Dmitry Fedoseev:

Nous avons vérifié, le caractère aléatoire ne l'était pas du tout.

De quoi parlez-vous ?

MathRand()%2 ne prend que deux valeurs - 0 ou 1.

 
Dmitry Fedoseev:

Nous avons vérifié, le caractère aléatoire ne l'était pas du tout. C'était il y a longtemps, dans le 4e forum. Je ne me souviens pas exactement comment il a été vérifié, mais l'image était assez sinusoïdale. Ce n'est pas du tout que le compilateur gronde.

Oui, j'ai compris. En effet, j'ai vu un abandon d'un processus aléatoire. L'algorithme rand() est évidemment loin d'être parfait.
Oui, alors cette variante, surtout c'est la plus rapide, puisqu'il n'y a pas d'opérations mathématiques :

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

De quoi parlez-vous ?

MathRand()%2 ne prend que deux valeurs - 0 ou 1.

Mais vous pouvez les additionner ou ne pas prendre le reste de deux.

 
Oui, l'option la plus normale avec if(rand()<16384), je n'y avais pas pensé))
 
Dmitry Fedoseev:
Oui, la variante la plus normale avec if(rand()<16384), quelque chose n'y a pas pensé))

Vous pouvez faire quelques tours et détours supplémentaires :

if(rand()<1<<14) 

ce qui est exactement la même chose, mais d'une manière que la plupart des gens ne comprennent pas. ))

 
Mais que se passe-t-il si c'est de 0 à 5, ou 7, ou tout autre nombre ? Vous devez encore diviser par 32768.0. Ou y a-t-il des options ?
Raison: