\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 r63634 = 1.0;
double r63635 = 6.0;
double r63636 = r63634 / r63635;
double r63637 = -2.0;
double r63638 = u1;
double r63639 = log(r63638);
double r63640 = r63637 * r63639;
double r63641 = 0.5;
double r63642 = pow(r63640, r63641);
double r63643 = r63636 * r63642;
double r63644 = 2.0;
double r63645 = atan2(1.0, 0.0);
double r63646 = r63644 * r63645;
double r63647 = u2;
double r63648 = r63646 * r63647;
double r63649 = cos(r63648);
double r63650 = r63643 * r63649;
double r63651 = r63650 + r63641;
return r63651;
}
double f(double u1, double u2) {
double r63652 = 1.0;
double r63653 = 6.0;
double r63654 = r63652 / r63653;
double r63655 = sqrt(r63654);
double r63656 = -2.0;
double r63657 = u1;
double r63658 = log(r63657);
double r63659 = r63656 * r63658;
double r63660 = 0.5;
double r63661 = pow(r63659, r63660);
double r63662 = r63655 * r63661;
double r63663 = r63655 * r63662;
double r63664 = 2.0;
double r63665 = atan2(1.0, 0.0);
double r63666 = r63664 * r63665;
double r63667 = u2;
double r63668 = r63666 * r63667;
double r63669 = cos(r63668);
double r63670 = r63663 * r63669;
double r63671 = r63670 + r63660;
return r63671;
}



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 2020021 +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))