\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\mathsf{fma}\left({\left(\frac{{\left(-2 \cdot \log u1\right)}^{\left(2 \cdot 0.5\right)}}{6 \cdot 6}\right)}^{\frac{1}{2}} \cdot 1, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)double f(double u1, double u2) {
double r82486 = 1.0;
double r82487 = 6.0;
double r82488 = r82486 / r82487;
double r82489 = -2.0;
double r82490 = u1;
double r82491 = log(r82490);
double r82492 = r82489 * r82491;
double r82493 = 0.5;
double r82494 = pow(r82492, r82493);
double r82495 = r82488 * r82494;
double r82496 = 2.0;
double r82497 = atan2(1.0, 0.0);
double r82498 = r82496 * r82497;
double r82499 = u2;
double r82500 = r82498 * r82499;
double r82501 = cos(r82500);
double r82502 = r82495 * r82501;
double r82503 = r82502 + r82493;
return r82503;
}
double f(double u1, double u2) {
double r82504 = -2.0;
double r82505 = u1;
double r82506 = log(r82505);
double r82507 = r82504 * r82506;
double r82508 = 2.0;
double r82509 = 0.5;
double r82510 = r82508 * r82509;
double r82511 = pow(r82507, r82510);
double r82512 = 6.0;
double r82513 = r82512 * r82512;
double r82514 = r82511 / r82513;
double r82515 = 0.5;
double r82516 = pow(r82514, r82515);
double r82517 = 1.0;
double r82518 = r82516 * r82517;
double r82519 = 2.0;
double r82520 = atan2(1.0, 0.0);
double r82521 = r82519 * r82520;
double r82522 = u2;
double r82523 = r82521 * r82522;
double r82524 = cos(r82523);
double r82525 = fma(r82518, r82524, r82509);
return r82525;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.4
rmApplied div-inv0.4
Applied associate-*l*0.4
Simplified0.3
rmApplied add-sqr-sqrt0.6
rmApplied pow10.6
Applied sqrt-pow10.6
Applied pow10.6
Applied sqrt-pow10.6
Applied pow-prod-down0.3
Simplified0.2
Final simplification0.2
herbie shell --seed 2019323 +o rules:numerics
(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))