\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({\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5} \cdot {\left(\sqrt{0.1666666666666666574148081281236954964697}\right)}^{2}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r73352 = 1.0;
double r73353 = 6.0;
double r73354 = r73352 / r73353;
double r73355 = -2.0;
double r73356 = u1;
double r73357 = log(r73356);
double r73358 = r73355 * r73357;
double r73359 = 0.5;
double r73360 = pow(r73358, r73359);
double r73361 = r73354 * r73360;
double r73362 = 2.0;
double r73363 = atan2(1.0, 0.0);
double r73364 = r73362 * r73363;
double r73365 = u2;
double r73366 = r73364 * r73365;
double r73367 = cos(r73366);
double r73368 = r73361 * r73367;
double r73369 = r73368 + r73359;
return r73369;
}
double f(double u1, double u2) {
double r73370 = -1.0;
double r73371 = 1.0;
double r73372 = pow(r73370, r73371);
double r73373 = -2.0;
double r73374 = pow(r73373, r73371);
double r73375 = 1.0;
double r73376 = u1;
double r73377 = r73375 / r73376;
double r73378 = log(r73377);
double r73379 = pow(r73378, r73371);
double r73380 = r73374 * r73379;
double r73381 = r73372 * r73380;
double r73382 = 0.5;
double r73383 = pow(r73381, r73382);
double r73384 = 0.16666666666666666;
double r73385 = sqrt(r73384);
double r73386 = 2.0;
double r73387 = pow(r73385, r73386);
double r73388 = r73383 * r73387;
double r73389 = 2.0;
double r73390 = atan2(1.0, 0.0);
double r73391 = r73389 * r73390;
double r73392 = u2;
double r73393 = r73391 * r73392;
double r73394 = cos(r73393);
double r73395 = r73388 * r73394;
double r73396 = r73395 + r73382;
return r73396;
}



Bits error versus u1



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