\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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right)\right), \left(\frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right), 0.5\right)double f(double u1, double u2) {
double r1282535 = 1.0;
double r1282536 = 6.0;
double r1282537 = r1282535 / r1282536;
double r1282538 = -2.0;
double r1282539 = u1;
double r1282540 = log(r1282539);
double r1282541 = r1282538 * r1282540;
double r1282542 = 0.5;
double r1282543 = pow(r1282541, r1282542);
double r1282544 = r1282537 * r1282543;
double r1282545 = 2.0;
double r1282546 = atan2(1.0, 0.0);
double r1282547 = r1282545 * r1282546;
double r1282548 = u2;
double r1282549 = r1282547 * r1282548;
double r1282550 = cos(r1282549);
double r1282551 = r1282544 * r1282550;
double r1282552 = r1282551 + r1282542;
return r1282552;
}
double f(double u1, double u2) {
double r1282553 = atan2(1.0, 0.0);
double r1282554 = 2.0;
double r1282555 = r1282553 * r1282554;
double r1282556 = u2;
double r1282557 = r1282555 * r1282556;
double r1282558 = cos(r1282557);
double r1282559 = -2.0;
double r1282560 = u1;
double r1282561 = log(r1282560);
double r1282562 = r1282559 * r1282561;
double r1282563 = 0.5;
double r1282564 = pow(r1282562, r1282563);
double r1282565 = 6.0;
double r1282566 = r1282564 / r1282565;
double r1282567 = fma(r1282558, r1282566, r1282563);
return r1282567;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019132 +o rules:numerics
(FPCore (u1 u2)
:name "normal distribution"
:pre (and (<= 0 u1 1) (<= 0 u2 1))
(+ (* (* (/ 1 6) (pow (* -2 (log u1)) 0.5)) (cos (* (* 2 PI) u2))) 0.5))