\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 r70602 = 1.0;
double r70603 = 6.0;
double r70604 = r70602 / r70603;
double r70605 = -2.0;
double r70606 = u1;
double r70607 = log(r70606);
double r70608 = r70605 * r70607;
double r70609 = 0.5;
double r70610 = pow(r70608, r70609);
double r70611 = r70604 * r70610;
double r70612 = 2.0;
double r70613 = atan2(1.0, 0.0);
double r70614 = r70612 * r70613;
double r70615 = u2;
double r70616 = r70614 * r70615;
double r70617 = cos(r70616);
double r70618 = r70611 * r70617;
double r70619 = r70618 + r70609;
return r70619;
}
double f(double u1, double u2) {
double r70620 = 1.0;
double r70621 = -2.0;
double r70622 = u1;
double r70623 = log(r70622);
double r70624 = r70621 * r70623;
double r70625 = 0.5;
double r70626 = pow(r70624, r70625);
double r70627 = r70620 * r70626;
double r70628 = 6.0;
double r70629 = r70627 / r70628;
double r70630 = 2.0;
double r70631 = atan2(1.0, 0.0);
double r70632 = r70630 * r70631;
double r70633 = u2;
double r70634 = r70632 * r70633;
double r70635 = cos(r70634);
double r70636 = fma(r70629, r70635, r70625);
return r70636;
}



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))