\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}{6 \cdot \frac{1}{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 r66967 = 1.0;
double r66968 = 6.0;
double r66969 = r66967 / r66968;
double r66970 = -2.0;
double r66971 = u1;
double r66972 = log(r66971);
double r66973 = r66970 * r66972;
double r66974 = 0.5;
double r66975 = pow(r66973, r66974);
double r66976 = r66969 * r66975;
double r66977 = 2.0;
double r66978 = atan2(1.0, 0.0);
double r66979 = r66977 * r66978;
double r66980 = u2;
double r66981 = r66979 * r66980;
double r66982 = cos(r66981);
double r66983 = r66976 * r66982;
double r66984 = r66983 + r66974;
return r66984;
}
double f(double u1, double u2) {
double r66985 = 1.0;
double r66986 = 6.0;
double r66987 = 1.0;
double r66988 = -2.0;
double r66989 = u1;
double r66990 = log(r66989);
double r66991 = r66988 * r66990;
double r66992 = 0.5;
double r66993 = pow(r66991, r66992);
double r66994 = r66987 * r66993;
double r66995 = r66985 / r66994;
double r66996 = r66986 * r66995;
double r66997 = r66985 / r66996;
double r66998 = 2.0;
double r66999 = atan2(1.0, 0.0);
double r67000 = r66998 * r66999;
double r67001 = u2;
double r67002 = r67000 * r67001;
double r67003 = cos(r67002);
double r67004 = r66997 * r67003;
double r67005 = r67004 + r66992;
return r67005;
}



Bits error versus u1



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