\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\left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \frac{1}{6}\right) \cdot \cos \left(2 \cdot \left(\pi \cdot u2\right)\right) + 0.5double f(double u1, double u2) {
double r1063953 = 1.0;
double r1063954 = 6.0;
double r1063955 = r1063953 / r1063954;
double r1063956 = -2.0;
double r1063957 = u1;
double r1063958 = log(r1063957);
double r1063959 = r1063956 * r1063958;
double r1063960 = 0.5;
double r1063961 = pow(r1063959, r1063960);
double r1063962 = r1063955 * r1063961;
double r1063963 = 2.0;
double r1063964 = atan2(1.0, 0.0);
double r1063965 = r1063963 * r1063964;
double r1063966 = u2;
double r1063967 = r1063965 * r1063966;
double r1063968 = cos(r1063967);
double r1063969 = r1063962 * r1063968;
double r1063970 = r1063969 + r1063960;
return r1063970;
}
double f(double u1, double u2) {
double r1063971 = -2.0;
double r1063972 = u1;
double r1063973 = log(r1063972);
double r1063974 = r1063971 * r1063973;
double r1063975 = 0.5;
double r1063976 = pow(r1063974, r1063975);
double r1063977 = 0.16666666666666666;
double r1063978 = r1063976 * r1063977;
double r1063979 = 2.0;
double r1063980 = atan2(1.0, 0.0);
double r1063981 = u2;
double r1063982 = r1063980 * r1063981;
double r1063983 = r1063979 * r1063982;
double r1063984 = cos(r1063983);
double r1063985 = r1063978 * r1063984;
double r1063986 = r1063985 + r1063975;
return r1063986;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019152
(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))