\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(\cos \left(\left(u2 \cdot \pi\right) \cdot 2\right), \frac{{\left(\log u1 \cdot -2\right)}^{0.5}}{6} \cdot 1, 0.5\right)double f(double u1, double u2) {
double r1831354 = 1.0;
double r1831355 = 6.0;
double r1831356 = r1831354 / r1831355;
double r1831357 = -2.0;
double r1831358 = u1;
double r1831359 = log(r1831358);
double r1831360 = r1831357 * r1831359;
double r1831361 = 0.5;
double r1831362 = pow(r1831360, r1831361);
double r1831363 = r1831356 * r1831362;
double r1831364 = 2.0;
double r1831365 = atan2(1.0, 0.0);
double r1831366 = r1831364 * r1831365;
double r1831367 = u2;
double r1831368 = r1831366 * r1831367;
double r1831369 = cos(r1831368);
double r1831370 = r1831363 * r1831369;
double r1831371 = r1831370 + r1831361;
return r1831371;
}
double f(double u1, double u2) {
double r1831372 = u2;
double r1831373 = atan2(1.0, 0.0);
double r1831374 = r1831372 * r1831373;
double r1831375 = 2.0;
double r1831376 = r1831374 * r1831375;
double r1831377 = cos(r1831376);
double r1831378 = u1;
double r1831379 = log(r1831378);
double r1831380 = -2.0;
double r1831381 = r1831379 * r1831380;
double r1831382 = 0.5;
double r1831383 = pow(r1831381, r1831382);
double r1831384 = 6.0;
double r1831385 = r1831383 / r1831384;
double r1831386 = 1.0;
double r1831387 = r1831385 * r1831386;
double r1831388 = fma(r1831377, r1831387, r1831382);
return r1831388;
}



Bits error versus u1



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