\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 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r72987 = 1.0;
double r72988 = 6.0;
double r72989 = r72987 / r72988;
double r72990 = -2.0;
double r72991 = u1;
double r72992 = log(r72991);
double r72993 = r72990 * r72992;
double r72994 = 0.5;
double r72995 = pow(r72993, r72994);
double r72996 = r72989 * r72995;
double r72997 = 2.0;
double r72998 = atan2(1.0, 0.0);
double r72999 = r72997 * r72998;
double r73000 = u2;
double r73001 = r72999 * r73000;
double r73002 = cos(r73001);
double r73003 = r72996 * r73002;
double r73004 = r73003 + r72994;
return r73004;
}
double f(double u1, double u2) {
double r73005 = 1.0;
double r73006 = -2.0;
double r73007 = u1;
double r73008 = log(r73007);
double r73009 = r73006 * r73008;
double r73010 = 0.5;
double r73011 = pow(r73009, r73010);
double r73012 = r73005 * r73011;
double r73013 = 6.0;
double r73014 = r73012 / r73013;
double r73015 = 2.0;
double r73016 = atan2(1.0, 0.0);
double r73017 = r73015 * r73016;
double r73018 = u2;
double r73019 = r73017 * r73018;
double r73020 = cos(r73019);
double r73021 = r73014 * r73020;
double r73022 = r73021 + r73010;
return r73022;
}



Bits error versus u1



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