\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(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{\left(2 \cdot \frac{0.5}{2}\right)}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)double f(double u1, double u2) {
double r63681 = 1.0;
double r63682 = 6.0;
double r63683 = r63681 / r63682;
double r63684 = -2.0;
double r63685 = u1;
double r63686 = log(r63685);
double r63687 = r63684 * r63686;
double r63688 = 0.5;
double r63689 = pow(r63687, r63688);
double r63690 = r63683 * r63689;
double r63691 = 2.0;
double r63692 = atan2(1.0, 0.0);
double r63693 = r63691 * r63692;
double r63694 = u2;
double r63695 = r63693 * r63694;
double r63696 = cos(r63695);
double r63697 = r63690 * r63696;
double r63698 = r63697 + r63688;
return r63698;
}
double f(double u1, double u2) {
double r63699 = 1.0;
double r63700 = -2.0;
double r63701 = u1;
double r63702 = log(r63701);
double r63703 = r63700 * r63702;
double r63704 = 2.0;
double r63705 = 0.5;
double r63706 = r63705 / r63704;
double r63707 = r63704 * r63706;
double r63708 = pow(r63703, r63707);
double r63709 = r63699 * r63708;
double r63710 = 6.0;
double r63711 = r63709 / r63710;
double r63712 = 2.0;
double r63713 = atan2(1.0, 0.0);
double r63714 = r63712 * r63713;
double r63715 = u2;
double r63716 = r63714 * r63715;
double r63717 = cos(r63716);
double r63718 = fma(r63711, r63717, r63705);
return r63718;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.4
rmApplied sqr-pow0.6
Applied associate-*r*0.6
rmApplied associate-*l/0.5
Applied associate-*l/0.5
Simplified0.3
Final simplification0.3
herbie shell --seed 2019351 +o rules:numerics
(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))