\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(1 \cdot \frac{{\left(\log u1 \cdot -2\right)}^{0.5}}{6}\right) \cdot \cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) + 0.5double f(double u1, double u2) {
double r2561458 = 1.0;
double r2561459 = 6.0;
double r2561460 = r2561458 / r2561459;
double r2561461 = -2.0;
double r2561462 = u1;
double r2561463 = log(r2561462);
double r2561464 = r2561461 * r2561463;
double r2561465 = 0.5;
double r2561466 = pow(r2561464, r2561465);
double r2561467 = r2561460 * r2561466;
double r2561468 = 2.0;
double r2561469 = atan2(1.0, 0.0);
double r2561470 = r2561468 * r2561469;
double r2561471 = u2;
double r2561472 = r2561470 * r2561471;
double r2561473 = cos(r2561472);
double r2561474 = r2561467 * r2561473;
double r2561475 = r2561474 + r2561465;
return r2561475;
}
double f(double u1, double u2) {
double r2561476 = 1.0;
double r2561477 = u1;
double r2561478 = log(r2561477);
double r2561479 = -2.0;
double r2561480 = r2561478 * r2561479;
double r2561481 = 0.5;
double r2561482 = pow(r2561480, r2561481);
double r2561483 = 6.0;
double r2561484 = r2561482 / r2561483;
double r2561485 = r2561476 * r2561484;
double r2561486 = u2;
double r2561487 = 2.0;
double r2561488 = atan2(1.0, 0.0);
double r2561489 = r2561487 * r2561488;
double r2561490 = r2561486 * r2561489;
double r2561491 = cos(r2561490);
double r2561492 = r2561485 * r2561491;
double r2561493 = r2561492 + r2561481;
return r2561493;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied div-inv0.4
Applied associate-*l*0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019172
(FPCore (u1 u2)
:name "normal distribution"
:pre (and (<= 0.0 u1 1.0) (<= 0.0 u2 1.0))
(+ (* (* (/ 1.0 6.0) (pow (* -2.0 (log u1)) 0.5)) (cos (* (* 2.0 PI) u2))) 0.5))