- double NV_MAGICCONST = 1.7155277699214135; /* (4 * exp(-0.5) / sqrt(2.0)); */
- unsigned long int MAX_RANDOM = 2147483647; /* (2 ** 31) - 1; */
-
- double u1, u2, z, zz;
- for (;;) {
- if (m->control_pressed) { break; }
- u1 = ((float)random()) / MAX_RANDOM;
- u2 = 1.0 - (((float)random()) / MAX_RANDOM);
- z = NV_MAGICCONST * (u1 - 0.5) / u2;
- zz = z * z / 4.0;
- if (zz <= -(log(u2))) {
- break;
- }
- }
- return mu + z * sigma;
+ double u1 = ((double)(rand()) + 1.0 )/( (double)(RAND_MAX) + 1.0);
+ double u2 = ((double)(rand()) + 1.0 )/( (double)(RAND_MAX) + 1.0);
+ //double r = sqrt( -2.0*log(u1) );
+ //double theta = 2.0*PI*u2;
+ //cout << cos(8.*atan(1.)*u2)*sqrt(-2.*log(u1)) << endl;
+ return cos(8.*atan(1.)*u2)*sqrt(-2.*log(u1));