\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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right), \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}, 0.5\right)double f(double u1, double u2) {
double r5330780 = 1.0;
double r5330781 = 6.0;
double r5330782 = r5330780 / r5330781;
double r5330783 = -2.0;
double r5330784 = u1;
double r5330785 = log(r5330784);
double r5330786 = r5330783 * r5330785;
double r5330787 = 0.5;
double r5330788 = pow(r5330786, r5330787);
double r5330789 = r5330782 * r5330788;
double r5330790 = 2.0;
double r5330791 = atan2(1.0, 0.0);
double r5330792 = r5330790 * r5330791;
double r5330793 = u2;
double r5330794 = r5330792 * r5330793;
double r5330795 = cos(r5330794);
double r5330796 = r5330789 * r5330795;
double r5330797 = r5330796 + r5330787;
return r5330797;
}
double f(double u1, double u2) {
double r5330798 = atan2(1.0, 0.0);
double r5330799 = 2.0;
double r5330800 = r5330798 * r5330799;
double r5330801 = u2;
double r5330802 = r5330800 * r5330801;
double r5330803 = cos(r5330802);
double r5330804 = -2.0;
double r5330805 = u1;
double r5330806 = log(r5330805);
double r5330807 = r5330804 * r5330806;
double r5330808 = 0.5;
double r5330809 = pow(r5330807, r5330808);
double r5330810 = 6.0;
double r5330811 = r5330809 / r5330810;
double r5330812 = fma(r5330803, r5330811, r5330808);
return r5330812;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019158 +o rules:numerics
(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))