\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(1 \cdot \left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right), \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)double f(double u1, double u2) {
double r64447 = 1.0;
double r64448 = 6.0;
double r64449 = r64447 / r64448;
double r64450 = -2.0;
double r64451 = u1;
double r64452 = log(r64451);
double r64453 = r64450 * r64452;
double r64454 = 0.5;
double r64455 = pow(r64453, r64454);
double r64456 = r64449 * r64455;
double r64457 = 2.0;
double r64458 = atan2(1.0, 0.0);
double r64459 = r64457 * r64458;
double r64460 = u2;
double r64461 = r64459 * r64460;
double r64462 = cos(r64461);
double r64463 = r64456 * r64462;
double r64464 = r64463 + r64454;
return r64464;
}
double f(double u1, double u2) {
double r64465 = 1.0;
double r64466 = 1.0;
double r64467 = 6.0;
double r64468 = r64466 / r64467;
double r64469 = -2.0;
double r64470 = u1;
double r64471 = log(r64470);
double r64472 = r64469 * r64471;
double r64473 = 0.5;
double r64474 = pow(r64472, r64473);
double r64475 = r64468 * r64474;
double r64476 = r64465 * r64475;
double r64477 = 2.0;
double r64478 = atan2(1.0, 0.0);
double r64479 = r64477 * r64478;
double r64480 = u2;
double r64481 = r64479 * r64480;
double r64482 = cos(r64481);
double r64483 = fma(r64476, r64482, r64473);
return r64483;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.4
rmApplied *-un-lft-identity0.4
Applied associate-*l*0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020049 +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))