\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(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right), \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)double f(double u1, double u2) {
double r78538 = 1.0;
double r78539 = 6.0;
double r78540 = r78538 / r78539;
double r78541 = -2.0;
double r78542 = u1;
double r78543 = log(r78542);
double r78544 = r78541 * r78543;
double r78545 = 0.5;
double r78546 = pow(r78544, r78545);
double r78547 = r78540 * r78546;
double r78548 = 2.0;
double r78549 = atan2(1.0, 0.0);
double r78550 = r78548 * r78549;
double r78551 = u2;
double r78552 = r78550 * r78551;
double r78553 = cos(r78552);
double r78554 = r78547 * r78553;
double r78555 = r78554 + r78545;
return r78555;
}
double f(double u1, double u2) {
double r78556 = 1.0;
double r78557 = 6.0;
double r78558 = r78556 / r78557;
double r78559 = sqrt(r78558);
double r78560 = -2.0;
double r78561 = u1;
double r78562 = log(r78561);
double r78563 = r78560 * r78562;
double r78564 = 0.5;
double r78565 = pow(r78563, r78564);
double r78566 = r78559 * r78565;
double r78567 = r78559 * r78566;
double r78568 = 2.0;
double r78569 = atan2(1.0, 0.0);
double r78570 = r78568 * r78569;
double r78571 = u2;
double r78572 = r78570 * r78571;
double r78573 = cos(r78572);
double r78574 = fma(r78567, r78573, r78564);
return r78574;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.4
Final simplification0.4
herbie shell --seed 2019303 +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))