\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({\left({-2}^{1.0} \cdot {\left(\log u1\right)}^{1.0}\right)}^{0.5}, \cos \left(u2 \cdot \left(\pi \cdot 2\right)\right) \cdot \frac{1}{6}, 0.5\right)double f(double u1, double u2) {
double r2742411 = 1.0;
double r2742412 = 6.0;
double r2742413 = r2742411 / r2742412;
double r2742414 = -2.0;
double r2742415 = u1;
double r2742416 = log(r2742415);
double r2742417 = r2742414 * r2742416;
double r2742418 = 0.5;
double r2742419 = pow(r2742417, r2742418);
double r2742420 = r2742413 * r2742419;
double r2742421 = 2.0;
double r2742422 = atan2(1.0, 0.0);
double r2742423 = r2742421 * r2742422;
double r2742424 = u2;
double r2742425 = r2742423 * r2742424;
double r2742426 = cos(r2742425);
double r2742427 = r2742420 * r2742426;
double r2742428 = r2742427 + r2742418;
return r2742428;
}
double f(double u1, double u2) {
double r2742429 = -2.0;
double r2742430 = 1.0;
double r2742431 = pow(r2742429, r2742430);
double r2742432 = u1;
double r2742433 = log(r2742432);
double r2742434 = pow(r2742433, r2742430);
double r2742435 = r2742431 * r2742434;
double r2742436 = 0.5;
double r2742437 = pow(r2742435, r2742436);
double r2742438 = u2;
double r2742439 = atan2(1.0, 0.0);
double r2742440 = 2.0;
double r2742441 = r2742439 * r2742440;
double r2742442 = r2742438 * r2742441;
double r2742443 = cos(r2742442);
double r2742444 = 0.16666666666666666;
double r2742445 = r2742443 * r2742444;
double r2742446 = fma(r2742437, r2742445, r2742436);
return r2742446;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Taylor expanded around -inf 62.0
Simplified0.4
Final simplification0.4
herbie shell --seed 2019162 +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))