\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\frac{1}{\frac{6}{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r70833 = 1.0;
double r70834 = 6.0;
double r70835 = r70833 / r70834;
double r70836 = -2.0;
double r70837 = u1;
double r70838 = log(r70837);
double r70839 = r70836 * r70838;
double r70840 = 0.5;
double r70841 = pow(r70839, r70840);
double r70842 = r70835 * r70841;
double r70843 = 2.0;
double r70844 = atan2(1.0, 0.0);
double r70845 = r70843 * r70844;
double r70846 = u2;
double r70847 = r70845 * r70846;
double r70848 = cos(r70847);
double r70849 = r70842 * r70848;
double r70850 = r70849 + r70840;
return r70850;
}
double f(double u1, double u2) {
double r70851 = 1.0;
double r70852 = 6.0;
double r70853 = 1.0;
double r70854 = -2.0;
double r70855 = u1;
double r70856 = log(r70855);
double r70857 = r70854 * r70856;
double r70858 = 0.5;
double r70859 = pow(r70857, r70858);
double r70860 = r70853 * r70859;
double r70861 = r70852 / r70860;
double r70862 = r70851 / r70861;
double r70863 = 2.0;
double r70864 = atan2(1.0, 0.0);
double r70865 = r70863 * r70864;
double r70866 = u2;
double r70867 = r70865 * r70866;
double r70868 = cos(r70867);
double r70869 = r70862 * r70868;
double r70870 = r70869 + r70858;
return r70870;
}



Bits error versus u1



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