\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(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)double f(double u1, double u2) {
double r70581 = 1.0;
double r70582 = 6.0;
double r70583 = r70581 / r70582;
double r70584 = -2.0;
double r70585 = u1;
double r70586 = log(r70585);
double r70587 = r70584 * r70586;
double r70588 = 0.5;
double r70589 = pow(r70587, r70588);
double r70590 = r70583 * r70589;
double r70591 = 2.0;
double r70592 = atan2(1.0, 0.0);
double r70593 = r70591 * r70592;
double r70594 = u2;
double r70595 = r70593 * r70594;
double r70596 = cos(r70595);
double r70597 = r70590 * r70596;
double r70598 = r70597 + r70588;
return r70598;
}
double f(double u1, double u2) {
double r70599 = 1.0;
double r70600 = -2.0;
double r70601 = u1;
double r70602 = log(r70601);
double r70603 = r70600 * r70602;
double r70604 = 0.5;
double r70605 = pow(r70603, r70604);
double r70606 = r70599 * r70605;
double r70607 = 6.0;
double r70608 = r70606 / r70607;
double r70609 = 2.0;
double r70610 = atan2(1.0, 0.0);
double r70611 = r70609 * r70610;
double r70612 = u2;
double r70613 = r70611 * r70612;
double r70614 = cos(r70613);
double r70615 = fma(r70608, r70614, r70604);
return r70615;
}



Bits error versus u1



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