\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\left(0.166666666666666657 \cdot {\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r66535 = 1.0;
double r66536 = 6.0;
double r66537 = r66535 / r66536;
double r66538 = -2.0;
double r66539 = u1;
double r66540 = log(r66539);
double r66541 = r66538 * r66540;
double r66542 = 0.5;
double r66543 = pow(r66541, r66542);
double r66544 = r66537 * r66543;
double r66545 = 2.0;
double r66546 = atan2(1.0, 0.0);
double r66547 = r66545 * r66546;
double r66548 = u2;
double r66549 = r66547 * r66548;
double r66550 = cos(r66549);
double r66551 = r66544 * r66550;
double r66552 = r66551 + r66542;
return r66552;
}
double f(double u1, double u2) {
double r66553 = 0.16666666666666666;
double r66554 = u1;
double r66555 = log(r66554);
double r66556 = 1.0;
double r66557 = pow(r66555, r66556);
double r66558 = -2.0;
double r66559 = pow(r66558, r66556);
double r66560 = r66557 * r66559;
double r66561 = 0.5;
double r66562 = pow(r66560, r66561);
double r66563 = r66553 * r66562;
double r66564 = 2.0;
double r66565 = atan2(1.0, 0.0);
double r66566 = r66564 * r66565;
double r66567 = u2;
double r66568 = r66566 * r66567;
double r66569 = cos(r66568);
double r66570 = r66563 * r66569;
double r66571 = r66570 + r66561;
return r66571;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied associate-*l/0.3
rmApplied associate-/l*0.3
Taylor expanded around 0 0.4
Final simplification0.4
herbie shell --seed 2020062
(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))