\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(\left(\frac{1}{6} \cdot \cos \left(2 \cdot \left(u2 \cdot \pi\right)\right)\right), \left({\left(\left({\left(-\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-1}^{1.0}\right)}^{0.5}\right), 0.5\right)double f(double u1, double u2) {
double r16580274 = 1.0;
double r16580275 = 6.0;
double r16580276 = r16580274 / r16580275;
double r16580277 = -2.0;
double r16580278 = u1;
double r16580279 = log(r16580278);
double r16580280 = r16580277 * r16580279;
double r16580281 = 0.5;
double r16580282 = pow(r16580280, r16580281);
double r16580283 = r16580276 * r16580282;
double r16580284 = 2.0;
double r16580285 = atan2(1.0, 0.0);
double r16580286 = r16580284 * r16580285;
double r16580287 = u2;
double r16580288 = r16580286 * r16580287;
double r16580289 = cos(r16580288);
double r16580290 = r16580283 * r16580289;
double r16580291 = r16580290 + r16580281;
return r16580291;
}
double f(double u1, double u2) {
double r16580292 = 0.16666666666666666;
double r16580293 = 2.0;
double r16580294 = u2;
double r16580295 = atan2(1.0, 0.0);
double r16580296 = r16580294 * r16580295;
double r16580297 = r16580293 * r16580296;
double r16580298 = cos(r16580297);
double r16580299 = r16580292 * r16580298;
double r16580300 = u1;
double r16580301 = log(r16580300);
double r16580302 = -r16580301;
double r16580303 = 1.0;
double r16580304 = pow(r16580302, r16580303);
double r16580305 = -2.0;
double r16580306 = pow(r16580305, r16580303);
double r16580307 = r16580304 * r16580306;
double r16580308 = -1.0;
double r16580309 = pow(r16580308, r16580303);
double r16580310 = r16580307 * r16580309;
double r16580311 = 0.5;
double r16580312 = pow(r16580310, r16580311);
double r16580313 = fma(r16580299, r16580312, r16580311);
return r16580313;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Taylor expanded around inf 0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2019124 +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))