\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.50.5 + \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)double f(double u1, double u2) {
double r76998 = 1.0;
double r76999 = 6.0;
double r77000 = r76998 / r76999;
double r77001 = -2.0;
double r77002 = u1;
double r77003 = log(r77002);
double r77004 = r77001 * r77003;
double r77005 = 0.5;
double r77006 = pow(r77004, r77005);
double r77007 = r77000 * r77006;
double r77008 = 2.0;
double r77009 = atan2(1.0, 0.0);
double r77010 = r77008 * r77009;
double r77011 = u2;
double r77012 = r77010 * r77011;
double r77013 = cos(r77012);
double r77014 = r77007 * r77013;
double r77015 = r77014 + r77005;
return r77015;
}
double f(double u1, double u2) {
double r77016 = 0.5;
double r77017 = 1.0;
double r77018 = 6.0;
double r77019 = r77017 / r77018;
double r77020 = -2.0;
double r77021 = u1;
double r77022 = log(r77021);
double r77023 = r77020 * r77022;
double r77024 = pow(r77023, r77016);
double r77025 = r77019 * r77024;
double r77026 = 2.0;
double r77027 = atan2(1.0, 0.0);
double r77028 = r77026 * r77027;
double r77029 = u2;
double r77030 = r77028 * r77029;
double r77031 = cos(r77030);
double r77032 = r77025 * r77031;
double r77033 = r77016 + r77032;
return r77033;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.3
rmApplied *-un-lft-identity0.3
Applied sqrt-prod0.3
Applied associate-*l*0.3
Simplified0.4
Final simplification0.4
herbie shell --seed 2019323
(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))