\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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\sqrt[3]{\frac{1}{\left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot \left(\left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot \left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right)\right)}}\right)}^{0.5}}\right) + 0.5)_*double f(double u1, double u2) {
double r25841361 = 1.0;
double r25841362 = 6.0;
double r25841363 = r25841361 / r25841362;
double r25841364 = -2.0;
double r25841365 = u1;
double r25841366 = log(r25841365);
double r25841367 = r25841364 * r25841366;
double r25841368 = 0.5;
double r25841369 = pow(r25841367, r25841368);
double r25841370 = r25841363 * r25841369;
double r25841371 = 2.0;
double r25841372 = atan2(1.0, 0.0);
double r25841373 = r25841371 * r25841372;
double r25841374 = u2;
double r25841375 = r25841373 * r25841374;
double r25841376 = cos(r25841375);
double r25841377 = r25841370 * r25841376;
double r25841378 = r25841377 + r25841368;
return r25841378;
}
double f(double u1, double u2) {
double r25841379 = atan2(1.0, 0.0);
double r25841380 = 2.0;
double r25841381 = r25841379 * r25841380;
double r25841382 = u2;
double r25841383 = r25841381 * r25841382;
double r25841384 = cos(r25841383);
double r25841385 = 0.16666666666666666;
double r25841386 = 1.0;
double r25841387 = u1;
double r25841388 = log(r25841387);
double r25841389 = 1.0;
double r25841390 = pow(r25841388, r25841389);
double r25841391 = -2.0;
double r25841392 = pow(r25841391, r25841389);
double r25841393 = r25841390 * r25841392;
double r25841394 = r25841393 * r25841393;
double r25841395 = r25841393 * r25841394;
double r25841396 = r25841386 / r25841395;
double r25841397 = cbrt(r25841396);
double r25841398 = 0.5;
double r25841399 = pow(r25841397, r25841398);
double r25841400 = r25841385 / r25841399;
double r25841401 = fma(r25841384, r25841400, r25841398);
return r25841401;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
rmApplied clear-num0.3
Taylor expanded around 0 0.4
rmApplied associate-/r*0.4
rmApplied add-cbrt-cube0.4
Applied add-cbrt-cube0.4
Applied cbrt-unprod0.4
Applied add-cbrt-cube0.4
Applied cbrt-undiv0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019107 +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))