\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{{\left(-2 \cdot \log u1\right)}^{0.5}}{\frac{6}{1}}, \cos \left(2 \cdot \left(\pi \cdot u2\right)\right), 0.5\right)double f(double u1, double u2) {
double r2526581 = 1.0;
double r2526582 = 6.0;
double r2526583 = r2526581 / r2526582;
double r2526584 = -2.0;
double r2526585 = u1;
double r2526586 = log(r2526585);
double r2526587 = r2526584 * r2526586;
double r2526588 = 0.5;
double r2526589 = pow(r2526587, r2526588);
double r2526590 = r2526583 * r2526589;
double r2526591 = 2.0;
double r2526592 = atan2(1.0, 0.0);
double r2526593 = r2526591 * r2526592;
double r2526594 = u2;
double r2526595 = r2526593 * r2526594;
double r2526596 = cos(r2526595);
double r2526597 = r2526590 * r2526596;
double r2526598 = r2526597 + r2526588;
return r2526598;
}
double f(double u1, double u2) {
double r2526599 = -2.0;
double r2526600 = u1;
double r2526601 = log(r2526600);
double r2526602 = r2526599 * r2526601;
double r2526603 = 0.5;
double r2526604 = pow(r2526602, r2526603);
double r2526605 = 6.0;
double r2526606 = 1.0;
double r2526607 = r2526605 / r2526606;
double r2526608 = r2526604 / r2526607;
double r2526609 = 2.0;
double r2526610 = atan2(1.0, 0.0);
double r2526611 = u2;
double r2526612 = r2526610 * r2526611;
double r2526613 = r2526609 * r2526612;
double r2526614 = cos(r2526613);
double r2526615 = fma(r2526608, r2526614, r2526603);
return r2526615;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019179 +o rules:numerics
(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))