Probabilité basée sur le pourcentage

J’ai cet extrait de code:

Random rand = new Random(); int chance = rand.Next(1, 101); if (chance <= 25) // probability of 25% { Console.WriteLine("You win"); } else { Console.WriteLine("You lose"); } 

Ma question est la suivante: calcule-t-il réellement une probabilité de 25% de gagner ici? Est-ce que la chance de gagner pour le joueur ici est vraiment de 25%?

Modifier:

Je viens d’écrire ceci:

  double total = 0; double prob = 0; Random rnd = new Random(); for (int i = 0; i < 100; i++) { double chance = rnd.Next(1, 101); if (chance <= 25) prob++; total++; } Console.WriteLine(prob / total); Console.ReadKey(); 

Et c’est très inexact. Cela va d’environ 0,15 à 0,3.

Mais quand je fais plus de vérifications (passer de (i <100) à (i <10000)), c'est beaucoup plus précis.

Pourquoi est-ce? Pourquoi 100 contrôles ne suffisent-ils pas pour qu’il soit exact?

C’est très facile à vérifier par vous-même:

 Random rand = new Random(); int yes = 0; const int iterations = 10000000; for (int i = 0; i < iterations; i++) { if (rand.Next(1, 101) <= 25) { yes++; } } Console.WriteLine((float)yes/iterations); 

le résultat:

 0.2497914 

Le consensus: Oui, oui c'est.


Edit: Juste pour le plaisir, la version de LINQy:

 Random rand = new Random(); const int iterations = 10000000; int sum = Enumerable.Range(1, iterations) .Count(i => rand.Next(1, 101) <= 25); Console.WriteLine(sum / (float)iterations); 

Dans la plupart des cas, je dirais oui. Cependant, vous devez vous rappeler que la plupart des algorithmes de randomisation utilisent un générateur pseudo-aléatoire et que, dans une certaine mesure, vous êtes donc à la merci des idiosyncrasies de ce générateur particulier. Je suis d’accord avec @AwokeKnowing que vous pouvez également faire un nombre aléatoire compris entre 1 et 4 et obtenir le même résultat. Je suppose que l’algorithme de randomisation .Net devrait suffire dans la plupart des cas. Pour plus d’informations, voir:

http://en.wikipedia.org/wiki/Pseudorandom_number_generator

oui, cela devrait bien fonctionner. tout comme> = 75 fonctionnerait aussi. si vous voulez seulement 25%, vous pouvez continuer et faire un nombre aléatoire compris entre 1 et 4.

mais s’il vous plaît noter, une chance de 25% ne signifie pas que sur 100 essais, il va gagner 25 fois. Cela signifie simplement qu’il a 25% de chances de gagner à chaque fois. il est théoriquement possible pour lui de gagner à chaque fois. (mais cela n’arrivera pas, surtout avec un générateur pseudo-aléatoire).

En interne, le nombre aléatoire sera compris entre 0 et 1, il est donc tout aussi aléatoire d’utiliser 4 comme 1000, pour autant que cela disparaisse. ajoutez le paramètre le projette simplement dans la plage souhaitée.