\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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right), \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \sqrt{\frac{1}{6}}, 0.5\right)double f(double u1, double u2) {
double r1372949 = 1.0;
double r1372950 = 6.0;
double r1372951 = r1372949 / r1372950;
double r1372952 = -2.0;
double r1372953 = u1;
double r1372954 = log(r1372953);
double r1372955 = r1372952 * r1372954;
double r1372956 = 0.5;
double r1372957 = pow(r1372955, r1372956);
double r1372958 = r1372951 * r1372957;
double r1372959 = 2.0;
double r1372960 = atan2(1.0, 0.0);
double r1372961 = r1372959 * r1372960;
double r1372962 = u2;
double r1372963 = r1372961 * r1372962;
double r1372964 = cos(r1372963);
double r1372965 = r1372958 * r1372964;
double r1372966 = r1372965 + r1372956;
return r1372966;
}
double f(double u1, double u2) {
double r1372967 = atan2(1.0, 0.0);
double r1372968 = 2.0;
double r1372969 = r1372967 * r1372968;
double r1372970 = u2;
double r1372971 = r1372969 * r1372970;
double r1372972 = cos(r1372971);
double r1372973 = 0.16666666666666666;
double r1372974 = sqrt(r1372973);
double r1372975 = -2.0;
double r1372976 = u1;
double r1372977 = log(r1372976);
double r1372978 = r1372975 * r1372977;
double r1372979 = 0.5;
double r1372980 = pow(r1372978, r1372979);
double r1372981 = r1372974 * r1372980;
double r1372982 = r1372981 * r1372974;
double r1372983 = fma(r1372972, r1372982, r1372979);
return r1372983;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2019144 +o rules:numerics
(FPCore (u1 u2)
:name "normal distribution"
:pre (and (<= 0 u1 1) (<= 0 u2 1))
(+ (* (* (/ 1 6) (pow (* -2 (log u1)) 0.5)) (cos (* (* 2 PI) u2))) 0.5))