\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\log \left(e^{\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r66829 = 1.0;
double r66830 = 6.0;
double r66831 = r66829 / r66830;
double r66832 = -2.0;
double r66833 = u1;
double r66834 = log(r66833);
double r66835 = r66832 * r66834;
double r66836 = 0.5;
double r66837 = pow(r66835, r66836);
double r66838 = r66831 * r66837;
double r66839 = 2.0;
double r66840 = atan2(1.0, 0.0);
double r66841 = r66839 * r66840;
double r66842 = u2;
double r66843 = r66841 * r66842;
double r66844 = cos(r66843);
double r66845 = r66838 * r66844;
double r66846 = r66845 + r66836;
return r66846;
}
double f(double u1, double u2) {
double r66847 = 1.0;
double r66848 = -2.0;
double r66849 = u1;
double r66850 = log(r66849);
double r66851 = r66848 * r66850;
double r66852 = 0.5;
double r66853 = pow(r66851, r66852);
double r66854 = r66847 * r66853;
double r66855 = 6.0;
double r66856 = r66854 / r66855;
double r66857 = exp(r66856);
double r66858 = log(r66857);
double r66859 = 2.0;
double r66860 = atan2(1.0, 0.0);
double r66861 = r66859 * r66860;
double r66862 = u2;
double r66863 = r66861 * r66862;
double r66864 = cos(r66863);
double r66865 = r66858 * r66864;
double r66866 = r66865 + r66852;
return r66866;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied associate-*l/0.3
rmApplied add-log-exp0.3
Final simplification0.3
herbie shell --seed 2020002
(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))