\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(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r62192 = 1.0;
double r62193 = 6.0;
double r62194 = r62192 / r62193;
double r62195 = -2.0;
double r62196 = u1;
double r62197 = log(r62196);
double r62198 = r62195 * r62197;
double r62199 = 0.5;
double r62200 = pow(r62198, r62199);
double r62201 = r62194 * r62200;
double r62202 = 2.0;
double r62203 = atan2(1.0, 0.0);
double r62204 = r62202 * r62203;
double r62205 = u2;
double r62206 = r62204 * r62205;
double r62207 = cos(r62206);
double r62208 = r62201 * r62207;
double r62209 = r62208 + r62199;
return r62209;
}
double f(double u1, double u2) {
double r62210 = 1.0;
double r62211 = -2.0;
double r62212 = u1;
double r62213 = log(r62212);
double r62214 = r62211 * r62213;
double r62215 = 0.5;
double r62216 = pow(r62214, r62215);
double r62217 = 6.0;
double r62218 = r62216 / r62217;
double r62219 = r62210 * r62218;
double r62220 = 2.0;
double r62221 = atan2(1.0, 0.0);
double r62222 = r62220 * r62221;
double r62223 = u2;
double r62224 = r62222 * r62223;
double r62225 = cos(r62224);
double r62226 = r62219 * r62225;
double r62227 = r62226 + r62215;
return r62227;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied div-inv0.4
Applied associate-*l*0.4
Simplified0.3
rmApplied *-un-lft-identity0.3
Final simplification0.3
herbie shell --seed 2019347 +o rules:numerics
(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))