\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(0.166666666666666657 \cdot {\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r64979 = 1.0;
double r64980 = 6.0;
double r64981 = r64979 / r64980;
double r64982 = -2.0;
double r64983 = u1;
double r64984 = log(r64983);
double r64985 = r64982 * r64984;
double r64986 = 0.5;
double r64987 = pow(r64985, r64986);
double r64988 = r64981 * r64987;
double r64989 = 2.0;
double r64990 = atan2(1.0, 0.0);
double r64991 = r64989 * r64990;
double r64992 = u2;
double r64993 = r64991 * r64992;
double r64994 = cos(r64993);
double r64995 = r64988 * r64994;
double r64996 = r64995 + r64986;
return r64996;
}
double f(double u1, double u2) {
double r64997 = 0.16666666666666666;
double r64998 = u1;
double r64999 = log(r64998);
double r65000 = 1.0;
double r65001 = pow(r64999, r65000);
double r65002 = -2.0;
double r65003 = pow(r65002, r65000);
double r65004 = r65001 * r65003;
double r65005 = 0.5;
double r65006 = pow(r65004, r65005);
double r65007 = r64997 * r65006;
double r65008 = 2.0;
double r65009 = atan2(1.0, 0.0);
double r65010 = r65008 * r65009;
double r65011 = u2;
double r65012 = r65010 * r65011;
double r65013 = cos(r65012);
double r65014 = r65007 * r65013;
double r65015 = r65014 + r65005;
return r65015;
}



Bits error versus u1



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