\left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\left(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r73449 = 1.0;
double r73450 = 6.0;
double r73451 = r73449 / r73450;
double r73452 = -2.0;
double r73453 = u1;
double r73454 = log(r73453);
double r73455 = r73452 * r73454;
double r73456 = 0.5;
double r73457 = pow(r73455, r73456);
double r73458 = r73451 * r73457;
double r73459 = 2.0;
double r73460 = atan2(1.0, 0.0);
double r73461 = r73459 * r73460;
double r73462 = u2;
double r73463 = r73461 * r73462;
double r73464 = cos(r73463);
double r73465 = r73458 * r73464;
double r73466 = r73465 + r73456;
return r73466;
}
double f(double u1, double u2) {
double r73467 = 1.0;
double r73468 = 6.0;
double r73469 = r73467 / r73468;
double r73470 = sqrt(r73469);
double r73471 = -2.0;
double r73472 = u1;
double r73473 = log(r73472);
double r73474 = r73471 * r73473;
double r73475 = 0.5;
double r73476 = pow(r73474, r73475);
double r73477 = r73470 * r73476;
double r73478 = r73470 * r73477;
double r73479 = 2.0;
double r73480 = atan2(1.0, 0.0);
double r73481 = r73479 * r73480;
double r73482 = u2;
double r73483 = r73481 * r73482;
double r73484 = cos(r73483);
double r73485 = r73478 * r73484;
double r73486 = r73485 + r73475;
return r73486;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.4
Final simplification0.4
herbie shell --seed 2019303
(FPCore (u1 u2)
:name "normal distribution"
:precision binary64
:pre (and (<= 0.0 u1 1) (<= 0.0 u2 1))
(+ (* (* (/ 1 6) (pow (* -2 (log u1)) 0.5)) (cos (* (* 2 PI) u2))) 0.5))