\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\mathsf{fma}\left(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)double f(double u1, double u2) {
double r74918 = 1.0;
double r74919 = 6.0;
double r74920 = r74918 / r74919;
double r74921 = -2.0;
double r74922 = u1;
double r74923 = log(r74922);
double r74924 = r74921 * r74923;
double r74925 = 0.5;
double r74926 = pow(r74924, r74925);
double r74927 = r74920 * r74926;
double r74928 = 2.0;
double r74929 = atan2(1.0, 0.0);
double r74930 = r74928 * r74929;
double r74931 = u2;
double r74932 = r74930 * r74931;
double r74933 = cos(r74932);
double r74934 = r74927 * r74933;
double r74935 = r74934 + r74925;
return r74935;
}
double f(double u1, double u2) {
double r74936 = 1.0;
double r74937 = -2.0;
double r74938 = u1;
double r74939 = log(r74938);
double r74940 = r74937 * r74939;
double r74941 = 0.5;
double r74942 = pow(r74940, r74941);
double r74943 = r74936 * r74942;
double r74944 = 6.0;
double r74945 = r74943 / r74944;
double r74946 = 2.0;
double r74947 = atan2(1.0, 0.0);
double r74948 = r74946 * r74947;
double r74949 = u2;
double r74950 = r74948 * r74949;
double r74951 = cos(r74950);
double r74952 = fma(r74945, r74951, r74941);
return r74952;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.4
rmApplied associate-*l/0.3
Final simplification0.3
herbie shell --seed 2020064 +o rules:numerics
(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))