\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{\left(\cos \left(\left(u2 \cdot 2\right) \cdot \pi\right) \cdot 1\right) \cdot {\left(\log u1 \cdot -2\right)}^{0.5}}{6} + 0.5double f(double u1, double u2) {
double r2713946 = 1.0;
double r2713947 = 6.0;
double r2713948 = r2713946 / r2713947;
double r2713949 = -2.0;
double r2713950 = u1;
double r2713951 = log(r2713950);
double r2713952 = r2713949 * r2713951;
double r2713953 = 0.5;
double r2713954 = pow(r2713952, r2713953);
double r2713955 = r2713948 * r2713954;
double r2713956 = 2.0;
double r2713957 = atan2(1.0, 0.0);
double r2713958 = r2713956 * r2713957;
double r2713959 = u2;
double r2713960 = r2713958 * r2713959;
double r2713961 = cos(r2713960);
double r2713962 = r2713955 * r2713961;
double r2713963 = r2713962 + r2713953;
return r2713963;
}
double f(double u1, double u2) {
double r2713964 = u2;
double r2713965 = 2.0;
double r2713966 = r2713964 * r2713965;
double r2713967 = atan2(1.0, 0.0);
double r2713968 = r2713966 * r2713967;
double r2713969 = cos(r2713968);
double r2713970 = 1.0;
double r2713971 = r2713969 * r2713970;
double r2713972 = u1;
double r2713973 = log(r2713972);
double r2713974 = -2.0;
double r2713975 = r2713973 * r2713974;
double r2713976 = 0.5;
double r2713977 = pow(r2713975, r2713976);
double r2713978 = r2713971 * r2713977;
double r2713979 = 6.0;
double r2713980 = r2713978 / r2713979;
double r2713981 = r2713980 + r2713976;
return r2713981;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
Simplified0.4
rmApplied sqr-pow0.6
Applied associate-*r*0.6
rmApplied fma-udef0.6
Simplified0.3
Final simplification0.3
herbie shell --seed 2019200 +o rules:numerics
(FPCore (u1 u2)
:name "normal distribution"
:pre (and (<= 0.0 u1 1.0) (<= 0.0 u2 1.0))
(+ (* (* (/ 1.0 6.0) (pow (* -2.0 (log u1)) 0.5)) (cos (* (* 2.0 PI) u2))) 0.5))