\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(\frac{1}{6} \cdot \cos \left(2 \cdot \left(u2 \cdot \pi\right)\right)\right) \cdot \left({\left(\left({\left(-\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-1}^{1.0}\right)}^{0.5}\right) + 0.5)_*double f(double u1, double u2) {
double r17190557 = 1.0;
double r17190558 = 6.0;
double r17190559 = r17190557 / r17190558;
double r17190560 = -2.0;
double r17190561 = u1;
double r17190562 = log(r17190561);
double r17190563 = r17190560 * r17190562;
double r17190564 = 0.5;
double r17190565 = pow(r17190563, r17190564);
double r17190566 = r17190559 * r17190565;
double r17190567 = 2.0;
double r17190568 = atan2(1.0, 0.0);
double r17190569 = r17190567 * r17190568;
double r17190570 = u2;
double r17190571 = r17190569 * r17190570;
double r17190572 = cos(r17190571);
double r17190573 = r17190566 * r17190572;
double r17190574 = r17190573 + r17190564;
return r17190574;
}
double f(double u1, double u2) {
double r17190575 = 0.16666666666666666;
double r17190576 = 2.0;
double r17190577 = u2;
double r17190578 = atan2(1.0, 0.0);
double r17190579 = r17190577 * r17190578;
double r17190580 = r17190576 * r17190579;
double r17190581 = cos(r17190580);
double r17190582 = r17190575 * r17190581;
double r17190583 = u1;
double r17190584 = log(r17190583);
double r17190585 = -r17190584;
double r17190586 = 1.0;
double r17190587 = pow(r17190585, r17190586);
double r17190588 = -2.0;
double r17190589 = pow(r17190588, r17190586);
double r17190590 = r17190587 * r17190589;
double r17190591 = -1.0;
double r17190592 = pow(r17190591, r17190586);
double r17190593 = r17190590 * r17190592;
double r17190594 = 0.5;
double r17190595 = pow(r17190593, r17190594);
double r17190596 = fma(r17190582, r17190595, r17190594);
return r17190596;
}



Bits error versus u1



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