\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(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r74685 = 1.0;
double r74686 = 6.0;
double r74687 = r74685 / r74686;
double r74688 = -2.0;
double r74689 = u1;
double r74690 = log(r74689);
double r74691 = r74688 * r74690;
double r74692 = 0.5;
double r74693 = pow(r74691, r74692);
double r74694 = r74687 * r74693;
double r74695 = 2.0;
double r74696 = atan2(1.0, 0.0);
double r74697 = r74695 * r74696;
double r74698 = u2;
double r74699 = r74697 * r74698;
double r74700 = cos(r74699);
double r74701 = r74694 * r74700;
double r74702 = r74701 + r74692;
return r74702;
}
double f(double u1, double u2) {
double r74703 = 1.0;
double r74704 = -2.0;
double r74705 = u1;
double r74706 = log(r74705);
double r74707 = r74704 * r74706;
double r74708 = 0.5;
double r74709 = pow(r74707, r74708);
double r74710 = 6.0;
double r74711 = r74709 / r74710;
double r74712 = r74703 * r74711;
double r74713 = 2.0;
double r74714 = atan2(1.0, 0.0);
double r74715 = r74713 * r74714;
double r74716 = u2;
double r74717 = r74715 * r74716;
double r74718 = cos(r74717);
double r74719 = r74712 * r74718;
double r74720 = r74719 + r74708;
return r74720;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied div-inv0.4
Applied associate-*l*0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2020056
(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))