\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(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r61552 = 1.0;
double r61553 = 6.0;
double r61554 = r61552 / r61553;
double r61555 = -2.0;
double r61556 = u1;
double r61557 = log(r61556);
double r61558 = r61555 * r61557;
double r61559 = 0.5;
double r61560 = pow(r61558, r61559);
double r61561 = r61554 * r61560;
double r61562 = 2.0;
double r61563 = atan2(1.0, 0.0);
double r61564 = r61562 * r61563;
double r61565 = u2;
double r61566 = r61564 * r61565;
double r61567 = cos(r61566);
double r61568 = r61561 * r61567;
double r61569 = r61568 + r61559;
return r61569;
}
double f(double u1, double u2) {
double r61570 = 1.0;
double r61571 = 6.0;
double r61572 = r61570 / r61571;
double r61573 = sqrt(r61572);
double r61574 = -2.0;
double r61575 = u1;
double r61576 = log(r61575);
double r61577 = r61574 * r61576;
double r61578 = 0.5;
double r61579 = pow(r61577, r61578);
double r61580 = r61573 * r61579;
double r61581 = r61573 * r61580;
double r61582 = 2.0;
double r61583 = atan2(1.0, 0.0);
double r61584 = r61582 * r61583;
double r61585 = u2;
double r61586 = r61584 * r61585;
double r61587 = cos(r61586);
double r61588 = r61581 * r61587;
double r61589 = r61588 + r61578;
return r61589;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied add-sqr-sqrt0.4
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2020047
(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))