vendredi 2 juin 2017

Arriving at a close approximation of the probability using code

I was given a math question on probability. It goes like this:

There are 1000 lotteries and each has 1000 tickets. You decide to buy 1 ticket per lottery. What is the probability that you win at least one lottery?

I was able to do it mathematically on paper, but an idea of trying out large iterations of the random experiment on my computer occurred to me. So, I typed some code — two versions of it to be exact, and both malfunction.

Code 1:

#include<iostream>
#include <stdlib.h>

using namespace std;



int main() {
int p2 = 0;
int p1 = 0;
srand(time(NULL));
for (int i = 0; i<100000; i++){
    for(int j = 0; j<1000; j++){
        int s = 0;
        int x = rand()%1000;
        int y = rand()%1000;
        if(x == y)
            s = 1;
    p1 += s;
    }
if(p1>0)
    p2++;
}
cout<<"The final probability is = "<< (p2/100000);
return 0;
}

Code 2:

#include<iostream>

#include <stdlib.h>


using namespace std;


int main() {
int p2 = 0;
int p1 = 0;
for (int i = 0; i<100000; i++){
    for(int j = 0; j<1000; j++){
        int s = 0;
        srand(time(NULL));
        int x = rand()%1000;
        srand(time(NULL));
        int y = rand()%1000;
        if(x == y)
            s = 1;
    p1 += s;
    }
if(p1>0)
    p2++;
}
cout<<"The final probability is = "<< (p2/100000);
return 0;
}

Code 3 (refered to some advanced text, but I don't understand most of it):

#include<iostream>

#include <random>


using namespace std;


int main() {
int p2 = 0;
int p1 = 0;
random_device rd;
mt19937 gen(rd());
for (int i = 0; i<100000; i++){
    for(int j = 0; j<1000; j++){
        uniform_int_distribution<> dis(1, 1000);
        int s = 0;
        int x = dis(gen);
        int y = dis(gen);
        if(x == y)
            s = 1;
    p1 += s;
    }
if(p1>0)
    p2++;
}
cout<<"The final probability is = "<< (p2/100000);
return 0;
}

Now, all of these codes output the same text:

The final probability is = 1
Process finished with exit code 0

It seems that the rand() function has been outputting the same value over all the 100000 iterations of the loop. I haven't been able to fix this.

I also tried using randomize() function instead of the srand() function, but it doesn't seem to work and gives weird errors like:

error: ‘randomize’ was not declared in this scope
randomize();
           ^

I think that randomize() has been discontinued in the later versions of C++.

I know that I am wrong on many levels. I would really appreciate if you could patiently explain me my mistakes and let me know some possible corrections.




Aucun commentaire:

Enregistrer un commentaire