\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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right)\right) \cdot \left(\frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) + 0.5)_*double f(double u1, double u2) {
double r11133231 = 1.0;
double r11133232 = 6.0;
double r11133233 = r11133231 / r11133232;
double r11133234 = -2.0;
double r11133235 = u1;
double r11133236 = log(r11133235);
double r11133237 = r11133234 * r11133236;
double r11133238 = 0.5;
double r11133239 = pow(r11133237, r11133238);
double r11133240 = r11133233 * r11133239;
double r11133241 = 2.0;
double r11133242 = atan2(1.0, 0.0);
double r11133243 = r11133241 * r11133242;
double r11133244 = u2;
double r11133245 = r11133243 * r11133244;
double r11133246 = cos(r11133245);
double r11133247 = r11133240 * r11133246;
double r11133248 = r11133247 + r11133238;
return r11133248;
}
double f(double u1, double u2) {
double r11133249 = atan2(1.0, 0.0);
double r11133250 = 2.0;
double r11133251 = r11133249 * r11133250;
double r11133252 = u2;
double r11133253 = r11133251 * r11133252;
double r11133254 = cos(r11133253);
double r11133255 = -2.0;
double r11133256 = u1;
double r11133257 = log(r11133256);
double r11133258 = r11133255 * r11133257;
double r11133259 = 0.5;
double r11133260 = pow(r11133258, r11133259);
double r11133261 = 6.0;
double r11133262 = r11133260 / r11133261;
double r11133263 = fma(r11133254, r11133262, r11133259);
return r11133263;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2019112 +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))