\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{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r69715 = 1.0;
double r69716 = 6.0;
double r69717 = r69715 / r69716;
double r69718 = -2.0;
double r69719 = u1;
double r69720 = log(r69719);
double r69721 = r69718 * r69720;
double r69722 = 0.5;
double r69723 = pow(r69721, r69722);
double r69724 = r69717 * r69723;
double r69725 = 2.0;
double r69726 = atan2(1.0, 0.0);
double r69727 = r69725 * r69726;
double r69728 = u2;
double r69729 = r69727 * r69728;
double r69730 = cos(r69729);
double r69731 = r69724 * r69730;
double r69732 = r69731 + r69722;
return r69732;
}
double f(double u1, double u2) {
double r69733 = 1.0;
double r69734 = -2.0;
double r69735 = u1;
double r69736 = log(r69735);
double r69737 = r69734 * r69736;
double r69738 = 0.5;
double r69739 = pow(r69737, r69738);
double r69740 = r69733 * r69739;
double r69741 = 6.0;
double r69742 = r69740 / r69741;
double r69743 = 2.0;
double r69744 = atan2(1.0, 0.0);
double r69745 = r69743 * r69744;
double r69746 = u2;
double r69747 = r69745 * r69746;
double r69748 = cos(r69747);
double r69749 = r69742 * r69748;
double r69750 = r69749 + r69738;
return r69750;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied associate-*l/0.3
Final simplification0.3
herbie shell --seed 2020035
(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))