\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{0.5 \cdot 0.5 - \left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) \cdot \left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \frac{1}{6}\right)\right) \cdot \left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) \cdot \left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \frac{1}{6}\right)\right)}{0.5 - \cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) \cdot \left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \frac{1}{6}\right)}double f(double u1, double u2) {
double r1939871 = 1.0;
double r1939872 = 6.0;
double r1939873 = r1939871 / r1939872;
double r1939874 = -2.0;
double r1939875 = u1;
double r1939876 = log(r1939875);
double r1939877 = r1939874 * r1939876;
double r1939878 = 0.5;
double r1939879 = pow(r1939877, r1939878);
double r1939880 = r1939873 * r1939879;
double r1939881 = 2.0;
double r1939882 = atan2(1.0, 0.0);
double r1939883 = r1939881 * r1939882;
double r1939884 = u2;
double r1939885 = r1939883 * r1939884;
double r1939886 = cos(r1939885);
double r1939887 = r1939880 * r1939886;
double r1939888 = r1939887 + r1939878;
return r1939888;
}
double f(double u1, double u2) {
double r1939889 = 0.5;
double r1939890 = r1939889 * r1939889;
double r1939891 = u2;
double r1939892 = 2.0;
double r1939893 = atan2(1.0, 0.0);
double r1939894 = r1939892 * r1939893;
double r1939895 = r1939891 * r1939894;
double r1939896 = cos(r1939895);
double r1939897 = -2.0;
double r1939898 = u1;
double r1939899 = log(r1939898);
double r1939900 = r1939897 * r1939899;
double r1939901 = pow(r1939900, r1939889);
double r1939902 = 0.16666666666666666;
double r1939903 = r1939901 * r1939902;
double r1939904 = r1939896 * r1939903;
double r1939905 = r1939904 * r1939904;
double r1939906 = r1939890 - r1939905;
double r1939907 = r1939889 - r1939904;
double r1939908 = r1939906 / r1939907;
return r1939908;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
Simplified0.4
rmApplied flip-+0.4
Final simplification0.4
herbie shell --seed 2019135
(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))