\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(\left({\left(\log u1 \cdot -2\right)}^{0.5} \cdot \sqrt{\frac{1}{6}}\right) \cdot \sqrt{\frac{1}{6}}\right) \cdot \cos \left(2 \cdot \left(\pi \cdot u2\right)\right) + 0.5double f(double u1, double u2) {
double r719712 = 1.0;
double r719713 = 6.0;
double r719714 = r719712 / r719713;
double r719715 = -2.0;
double r719716 = u1;
double r719717 = log(r719716);
double r719718 = r719715 * r719717;
double r719719 = 0.5;
double r719720 = pow(r719718, r719719);
double r719721 = r719714 * r719720;
double r719722 = 2.0;
double r719723 = atan2(1.0, 0.0);
double r719724 = r719722 * r719723;
double r719725 = u2;
double r719726 = r719724 * r719725;
double r719727 = cos(r719726);
double r719728 = r719721 * r719727;
double r719729 = r719728 + r719719;
return r719729;
}
double f(double u1, double u2) {
double r719730 = u1;
double r719731 = log(r719730);
double r719732 = -2.0;
double r719733 = r719731 * r719732;
double r719734 = 0.5;
double r719735 = pow(r719733, r719734);
double r719736 = 0.16666666666666666;
double r719737 = sqrt(r719736);
double r719738 = r719735 * r719737;
double r719739 = r719738 * r719737;
double r719740 = 2.0;
double r719741 = atan2(1.0, 0.0);
double r719742 = u2;
double r719743 = r719741 * r719742;
double r719744 = r719740 * r719743;
double r719745 = cos(r719744);
double r719746 = r719739 * r719745;
double r719747 = r719746 + r719734;
return r719747;
}



Bits error versus u1



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