\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(\left({\left(\log u1 \cdot -2\right)}^{0.5} \cdot \sqrt{\frac{1}{6}}\right) \cdot \sqrt{\frac{1}{6}}\right) \cdot \cos \left(2 \cdot \left(\pi \cdot u2\right)\right) + 0.5double f(double u1, double u2) {
double r3081508 = 1.0;
double r3081509 = 6.0;
double r3081510 = r3081508 / r3081509;
double r3081511 = -2.0;
double r3081512 = u1;
double r3081513 = log(r3081512);
double r3081514 = r3081511 * r3081513;
double r3081515 = 0.5;
double r3081516 = pow(r3081514, r3081515);
double r3081517 = r3081510 * r3081516;
double r3081518 = 2.0;
double r3081519 = atan2(1.0, 0.0);
double r3081520 = r3081518 * r3081519;
double r3081521 = u2;
double r3081522 = r3081520 * r3081521;
double r3081523 = cos(r3081522);
double r3081524 = r3081517 * r3081523;
double r3081525 = r3081524 + r3081515;
return r3081525;
}
double f(double u1, double u2) {
double r3081526 = u1;
double r3081527 = log(r3081526);
double r3081528 = -2.0;
double r3081529 = r3081527 * r3081528;
double r3081530 = 0.5;
double r3081531 = pow(r3081529, r3081530);
double r3081532 = 0.16666666666666666;
double r3081533 = sqrt(r3081532);
double r3081534 = r3081531 * r3081533;
double r3081535 = r3081534 * r3081533;
double r3081536 = 2.0;
double r3081537 = atan2(1.0, 0.0);
double r3081538 = u2;
double r3081539 = r3081537 * r3081538;
double r3081540 = r3081536 * r3081539;
double r3081541 = cos(r3081540);
double r3081542 = r3081535 * r3081541;
double r3081543 = r3081542 + r3081530;
return r3081543;
}



Bits error versus u1



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