\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.5e^{\log \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.5double f(double u1, double u2) {
double r76273 = 1.0;
double r76274 = 6.0;
double r76275 = r76273 / r76274;
double r76276 = -2.0;
double r76277 = u1;
double r76278 = log(r76277);
double r76279 = r76276 * r76278;
double r76280 = 0.5;
double r76281 = pow(r76279, r76280);
double r76282 = r76275 * r76281;
double r76283 = 2.0;
double r76284 = atan2(1.0, 0.0);
double r76285 = r76283 * r76284;
double r76286 = u2;
double r76287 = r76285 * r76286;
double r76288 = cos(r76287);
double r76289 = r76282 * r76288;
double r76290 = r76289 + r76280;
return r76290;
}
double f(double u1, double u2) {
double r76291 = 1.0;
double r76292 = 6.0;
double r76293 = r76291 / r76292;
double r76294 = -2.0;
double r76295 = u1;
double r76296 = log(r76295);
double r76297 = r76294 * r76296;
double r76298 = 0.5;
double r76299 = pow(r76297, r76298);
double r76300 = r76293 * r76299;
double r76301 = log(r76300);
double r76302 = exp(r76301);
double r76303 = 2.0;
double r76304 = atan2(1.0, 0.0);
double r76305 = r76303 * r76304;
double r76306 = u2;
double r76307 = r76305 * r76306;
double r76308 = cos(r76307);
double r76309 = r76302 * r76308;
double r76310 = r76309 + r76298;
return r76310;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied add-exp-log64.0
Applied add-exp-log64.0
Applied prod-exp64.0
Applied pow-exp64.0
Applied add-exp-log64.0
Applied add-exp-log64.0
Applied div-exp64.0
Applied prod-exp64.0
Simplified0.5
Final simplification0.5
herbie shell --seed 2019356
(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))