\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(\log u1 \cdot -2\right)}^{0.5} \cdot \frac{1}{6}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r1550425 = 1.0;
double r1550426 = 6.0;
double r1550427 = r1550425 / r1550426;
double r1550428 = -2.0;
double r1550429 = u1;
double r1550430 = log(r1550429);
double r1550431 = r1550428 * r1550430;
double r1550432 = 0.5;
double r1550433 = pow(r1550431, r1550432);
double r1550434 = r1550427 * r1550433;
double r1550435 = 2.0;
double r1550436 = atan2(1.0, 0.0);
double r1550437 = r1550435 * r1550436;
double r1550438 = u2;
double r1550439 = r1550437 * r1550438;
double r1550440 = cos(r1550439);
double r1550441 = r1550434 * r1550440;
double r1550442 = r1550441 + r1550432;
return r1550442;
}
double f(double u1, double u2) {
double r1550443 = u1;
double r1550444 = log(r1550443);
double r1550445 = -2.0;
double r1550446 = r1550444 * r1550445;
double r1550447 = 0.5;
double r1550448 = pow(r1550446, r1550447);
double r1550449 = 0.16666666666666666;
double r1550450 = r1550448 * r1550449;
double r1550451 = 2.0;
double r1550452 = atan2(1.0, 0.0);
double r1550453 = r1550451 * r1550452;
double r1550454 = u2;
double r1550455 = r1550453 * r1550454;
double r1550456 = cos(r1550455);
double r1550457 = r1550450 * r1550456;
double r1550458 = r1550457 + r1550447;
return r1550458;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.4
rmApplied associate-*r*0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019137
(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))