# Calculating Probability using C#

Hello,

I'm wondering how to approach a problem of calculating probability in C#.
Lets say, we know that some task has a 5% probability of happening and there're say 100 identical tasks. So theoretically, 5 tasks should happen, but as those tasks are individual tasks, each task has a 5% probability of happening. So, how can I simulate this case using programming?

I presume that I can get 5 random number using Random class (Random rand = new Random(); rand.Next(1, 100)), and then get another 100 numbers and see if any number is in the set I generated first. But in this case, it's not truly random as generating first 5 numbers can use all "random potential" of these numbers and they will happened to be generated again.

Is there any accurate way of doing it?

Thanks
LVL 21
###### Who is Participating?

x

Commented:
Well, I'm not a probability expert myself. But since the random generator is uniformly distributed, so there would be equal chance of you getting 50 as you getting 99. In effect that gives a task a 5% probability of getting happening.
0

Commented:
For each task, generate a random number between (1 to 100), and check if the number is > 95. Assuming that the random generator is uniformly distributed (which it claims so), then there is a 5% probability that the task gets > 95. Repeat this for every task.
0

Author Commented:
yes, I was initially thinking about doing something like that, but just checking if those numbers are from 1 to 5. But that seems to me not very random as for this particular run, all numbers can happen to be from 5 to 100. That's why I started to think about generating random 5 numbers first, rather than using any particular sets (1-5, 20-25, 96-100, etc).

Thanks
0

Author Commented:
Just wrote a quick piece of code to check this theory and in fact, greater the number of repetitions, more chances of evenly spreading of the results. I'll keep it open for a while in case someone has a different approach, but I will probably just do as I first intended (and as phillip suggested).

cheers
0

Commented:
Hmm, seems like we think alike, I've just run my own test as well. The test code is as attached. Basically I run 10000 times of set of 100. For each run (100 numbers), I note down the number of yes and no. Granted that sometimes, there are > 5 yes, sometimes there are < 5 yes. But with 10000 times run, the result average out to about 5 (in my test it's 4.95xxx)
``````        static void Main(string[] args)
{
Random g = new Random();
int avg = 0;
for (int i = 0; i < 10000; i++)
{
int yes = 0;
int no = 0;
for (int j = 0; j < 100; j++)
{
int x = g.Next(0, 100);
if (x >= 95)
yes++;
else
no++;
}
System.Diagnostics.Debug.WriteLine(string.Format("Yes {0} No {1}", yes, no));
avg += yes;
}
System.Diagnostics.Debug.WriteLine(string.Format("Avg {0}", avg));
}
``````
0

Author Commented:
lol,

I've done a bit different thing, but for 100,000 runs, distribution is very even. The code is attached; each number in "groups" is a segment of 5 numbers (1-5, 6-10, etc.)
``````    protected void Page_Load(object sender, EventArgs e)
{
Random rand = new Random();

int[] groups = new int[ 20 ];
int number = 0;

for( int i = 0; i < 100000; i++ )
{
number = rand.Next( 0, 100 );
groups[ number / 5 ]++;
}

for( int i = 0; i < 20; i++ )
{
Response.Write( Math.Round( ( double )groups[ i ] / 100000, 2 ) + "<br/>" );
}

}
``````
0

Commented:
Yup, I ran your code and saw that the distribution is very even, I even had to increase the number of decimal points just to ensure that I'm seeing the real thing. I think this is expected because the random generator is evenly distributed.
0

Author Commented:
thanks for confirming my thoughts :)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.