\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(\log_* (1 + (e^{\frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}} - 1)^*)\right) + 0.5)_*double f(double u1, double u2) {
double r5096496 = 1.0;
double r5096497 = 6.0;
double r5096498 = r5096496 / r5096497;
double r5096499 = -2.0;
double r5096500 = u1;
double r5096501 = log(r5096500);
double r5096502 = r5096499 * r5096501;
double r5096503 = 0.5;
double r5096504 = pow(r5096502, r5096503);
double r5096505 = r5096498 * r5096504;
double r5096506 = 2.0;
double r5096507 = atan2(1.0, 0.0);
double r5096508 = r5096506 * r5096507;
double r5096509 = u2;
double r5096510 = r5096508 * r5096509;
double r5096511 = cos(r5096510);
double r5096512 = r5096505 * r5096511;
double r5096513 = r5096512 + r5096503;
return r5096513;
}
double f(double u1, double u2) {
double r5096514 = atan2(1.0, 0.0);
double r5096515 = 2.0;
double r5096516 = r5096514 * r5096515;
double r5096517 = u2;
double r5096518 = r5096516 * r5096517;
double r5096519 = cos(r5096518);
double r5096520 = -2.0;
double r5096521 = u1;
double r5096522 = log(r5096521);
double r5096523 = r5096520 * r5096522;
double r5096524 = 0.5;
double r5096525 = pow(r5096523, r5096524);
double r5096526 = 6.0;
double r5096527 = r5096525 / r5096526;
double r5096528 = expm1(r5096527);
double r5096529 = log1p(r5096528);
double r5096530 = fma(r5096519, r5096529, r5096524);
return r5096530;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
rmApplied log1p-expm1-u0.3
Final simplification0.3
herbie shell --seed 2019104 +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))