// Problem 3: Normal Distribution (Box-Muller)
#include <bits/stdc++.h>
using namespace std;
int main() {
srand(time(0));
int N = 20000;
double s = 0, ss = 0;
for (int i = 0; i < 10000; i++) {
double u1 = (rand() + 1.0) / (RAND_MAX + 1.0);
double u2 = (rand() + 1.0) / (RAND_MAX + 1.0);
double z0 = sqrt(-2 * log(u1)) * cos(2 * M_PI * u2);
double z1 = sqrt(-2 * log(u1)) * sin(2 * M_PI * u2);
s += z0 + z1;
ss += z0 * z0 + z1 * z1;
}
double mean = s / N;
double var = (ss / N) - mean * mean;
double sd = sqrt(var);
cout << "Mean = " << mean << endl;
cout << "Stddev = " << sd << endl;
return 0;
}
/*
Q1. Does your distribution resemble a bell curve?
= Yes. The generated values form a bell-shaped curve (Normal Distribution).
Q2. What is the mean and stddev? Are they close to 0 and 1?
= Mean is near 0, Stddev near 1. Results vary slightly since values are random,
but repeated runs show they stay close to 0 and 1.
*/
Ly8gUHJvYmxlbSAzOiBOb3JtYWwgRGlzdHJpYnV0aW9uIChCb3gtTXVsbGVyKQoKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIHNyYW5kKHRpbWUoMCkpOwogICAgaW50IE4gPSAyMDAwMDsKICAgIGRvdWJsZSBzID0gMCwgc3MgPSAwOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewogICAgICAgIGRvdWJsZSB1MSA9IChyYW5kKCkgKyAxLjApIC8gKFJBTkRfTUFYICsgMS4wKTsKICAgICAgICBkb3VibGUgdTIgPSAocmFuZCgpICsgMS4wKSAvIChSQU5EX01BWCArIDEuMCk7CgogICAgICAgIGRvdWJsZSB6MCA9IHNxcnQoLTIgKiBsb2codTEpKSAqIGNvcygyICogTV9QSSAqIHUyKTsKICAgICAgICBkb3VibGUgejEgPSBzcXJ0KC0yICogbG9nKHUxKSkgKiBzaW4oMiAqIE1fUEkgKiB1Mik7CgogICAgICAgIHMgKz0gejAgKyB6MTsKICAgICAgICBzcyArPSB6MCAqIHowICsgejEgKiB6MTsKICAgIH0KCiAgICBkb3VibGUgbWVhbiA9IHMgLyBOOwogICAgZG91YmxlIHZhciA9IChzcyAvIE4pIC0gbWVhbiAqIG1lYW47CiAgICBkb3VibGUgc2QgPSBzcXJ0KHZhcik7CgogICAgY291dCA8PCAiTWVhbiA9ICIgPDwgbWVhbiA8PCBlbmRsOwogICAgY291dCA8PCAiU3RkZGV2ID0gIiA8PCBzZCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9CgovKgpRMS4gRG9lcyB5b3VyIGRpc3RyaWJ1dGlvbiByZXNlbWJsZSBhIGJlbGwgY3VydmU/Cj0gWWVzLiBUaGUgZ2VuZXJhdGVkIHZhbHVlcyBmb3JtIGEgYmVsbC1zaGFwZWQgY3VydmUgKE5vcm1hbCBEaXN0cmlidXRpb24pLgoKUTIuIFdoYXQgaXMgdGhlIG1lYW4gYW5kIHN0ZGRldj8gQXJlIHRoZXkgY2xvc2UgdG8gMCBhbmQgMT8KPSBNZWFuIGlzIG5lYXIgMCwgU3RkZGV2IG5lYXIgMS4gUmVzdWx0cyB2YXJ5IHNsaWdodGx5IHNpbmNlIHZhbHVlcyBhcmUgcmFuZG9tLCAKYnV0IHJlcGVhdGVkIHJ1bnMgc2hvdyB0aGV5IHN0YXkgY2xvc2UgdG8gMCBhbmQgMS4KKi8K