\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({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \sqrt{\frac{1}{6}}\right) \cdot \sqrt{\frac{1}{6}}, 0.5\right)double f(double u1, double u2) {
double r701260 = 1.0;
double r701261 = 6.0;
double r701262 = r701260 / r701261;
double r701263 = -2.0;
double r701264 = u1;
double r701265 = log(r701264);
double r701266 = r701263 * r701265;
double r701267 = 0.5;
double r701268 = pow(r701266, r701267);
double r701269 = r701262 * r701268;
double r701270 = 2.0;
double r701271 = atan2(1.0, 0.0);
double r701272 = r701270 * r701271;
double r701273 = u2;
double r701274 = r701272 * r701273;
double r701275 = cos(r701274);
double r701276 = r701269 * r701275;
double r701277 = r701276 + r701267;
return r701277;
}
double f(double u1, double u2) {
double r701278 = atan2(1.0, 0.0);
double r701279 = 2.0;
double r701280 = r701278 * r701279;
double r701281 = u2;
double r701282 = r701280 * r701281;
double r701283 = cos(r701282);
double r701284 = -2.0;
double r701285 = u1;
double r701286 = log(r701285);
double r701287 = r701284 * r701286;
double r701288 = 0.5;
double r701289 = pow(r701287, r701288);
double r701290 = 0.16666666666666666;
double r701291 = sqrt(r701290);
double r701292 = r701289 * r701291;
double r701293 = r701292 * r701291;
double r701294 = fma(r701283, r701293, r701288);
return r701294;
}



Bits error versus u1



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