Percentage Based Probability

我是研究僧i 提交于 2019-11-29 06:44:37

This is very easy to check for yourself:

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);

the result:

0.2497914

The conslusion: Yes, yes it is.


Edit: Just for fun, the LINQy version:

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);

For most cases, I would say yes. However, you have to remember that most randomization algorithms use a pseudo-random generator, and so to some extent, you're at the mercy of the idiosyncrasies of that particular generator. I do agree with @AwokeKnowing that you can you also just do a random number between 1 and 4 and get the same result. I assume that the .Net randomization algorithm should suffice for most cases. For more info see:

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

yes, that should work fine. just as >=75 would work too. if you just want 25%, you can go ahead and just do a random number between 1 and 4.

but please note, a 25% chance does NOT mean that out of 100 tries, he will win 25 times. It just means each time he has a 25% chance of winning. it's theoretically possible for him to win every single time. (but that will not happen, especially with a pseudo-random generator).

Internally the random number will be between 0 and 1 so it's just as random to use 4 as 1000, as far as that goes. add the parameter just projects it to the range you want.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!