\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(1 \cdot \frac{{\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 r96891 = 1.0;
double r96892 = 6.0;
double r96893 = r96891 / r96892;
double r96894 = -2.0;
double r96895 = u1;
double r96896 = log(r96895);
double r96897 = r96894 * r96896;
double r96898 = 0.5;
double r96899 = pow(r96897, r96898);
double r96900 = r96893 * r96899;
double r96901 = 2.0;
double r96902 = atan2(1.0, 0.0);
double r96903 = r96901 * r96902;
double r96904 = u2;
double r96905 = r96903 * r96904;
double r96906 = cos(r96905);
double r96907 = r96900 * r96906;
double r96908 = r96907 + r96898;
return r96908;
}
double f(double u1, double u2) {
double r96909 = 1.0;
double r96910 = -2.0;
double r96911 = u1;
double r96912 = log(r96911);
double r96913 = r96910 * r96912;
double r96914 = 0.5;
double r96915 = pow(r96913, r96914);
double r96916 = 6.0;
double r96917 = r96915 / r96916;
double r96918 = r96909 * r96917;
double r96919 = 2.0;
double r96920 = atan2(1.0, 0.0);
double r96921 = r96919 * r96920;
double r96922 = u2;
double r96923 = r96921 * r96922;
double r96924 = cos(r96923);
double r96925 = r96918 * r96924;
double r96926 = r96925 + r96914;
return r96926;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied div-inv0.4
Applied associate-*l*0.4
Simplified0.3
rmApplied flip-+0.4
Final simplification0.3
herbie shell --seed 2019291
(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))