\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\mathsf{fma}\left(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right), \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \sqrt{\frac{1}{6}}, 0.5\right)double f(double u1, double u2) {
double r1388271 = 1.0;
double r1388272 = 6.0;
double r1388273 = r1388271 / r1388272;
double r1388274 = -2.0;
double r1388275 = u1;
double r1388276 = log(r1388275);
double r1388277 = r1388274 * r1388276;
double r1388278 = 0.5;
double r1388279 = pow(r1388277, r1388278);
double r1388280 = r1388273 * r1388279;
double r1388281 = 2.0;
double r1388282 = atan2(1.0, 0.0);
double r1388283 = r1388281 * r1388282;
double r1388284 = u2;
double r1388285 = r1388283 * r1388284;
double r1388286 = cos(r1388285);
double r1388287 = r1388280 * r1388286;
double r1388288 = r1388287 + r1388278;
return r1388288;
}
double f(double u1, double u2) {
double r1388289 = atan2(1.0, 0.0);
double r1388290 = 2.0;
double r1388291 = r1388289 * r1388290;
double r1388292 = u2;
double r1388293 = r1388291 * r1388292;
double r1388294 = cos(r1388293);
double r1388295 = 0.16666666666666666;
double r1388296 = sqrt(r1388295);
double r1388297 = -2.0;
double r1388298 = u1;
double r1388299 = log(r1388298);
double r1388300 = r1388297 * r1388299;
double r1388301 = 0.5;
double r1388302 = pow(r1388300, r1388301);
double r1388303 = r1388296 * r1388302;
double r1388304 = r1388303 * r1388296;
double r1388305 = fma(r1388294, r1388304, r1388301);
return r1388305;
}



Bits error versus u1



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