\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\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r72403 = 1.0;
double r72404 = 6.0;
double r72405 = r72403 / r72404;
double r72406 = -2.0;
double r72407 = u1;
double r72408 = log(r72407);
double r72409 = r72406 * r72408;
double r72410 = 0.5;
double r72411 = pow(r72409, r72410);
double r72412 = r72405 * r72411;
double r72413 = 2.0;
double r72414 = atan2(1.0, 0.0);
double r72415 = r72413 * r72414;
double r72416 = u2;
double r72417 = r72415 * r72416;
double r72418 = cos(r72417);
double r72419 = r72412 * r72418;
double r72420 = r72419 + r72410;
return r72420;
}
double f(double u1, double u2) {
double r72421 = 1.0;
double r72422 = -2.0;
double r72423 = u1;
double r72424 = log(r72423);
double r72425 = r72422 * r72424;
double r72426 = 0.5;
double r72427 = pow(r72425, r72426);
double r72428 = r72421 * r72427;
double r72429 = 6.0;
double r72430 = r72428 / r72429;
double r72431 = 2.0;
double r72432 = atan2(1.0, 0.0);
double r72433 = r72431 * r72432;
double r72434 = u2;
double r72435 = r72433 * r72434;
double r72436 = cos(r72435);
double r72437 = r72430 * r72436;
double r72438 = r72437 + r72426;
return r72438;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied associate-*l/0.3
Final simplification0.3
herbie shell --seed 2019322
(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))