\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(\frac{1}{6} \cdot \left(1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5double f(double u1, double u2) {
double r61086 = 1.0;
double r61087 = 6.0;
double r61088 = r61086 / r61087;
double r61089 = -2.0;
double r61090 = u1;
double r61091 = log(r61090);
double r61092 = r61089 * r61091;
double r61093 = 0.5;
double r61094 = pow(r61092, r61093);
double r61095 = r61088 * r61094;
double r61096 = 2.0;
double r61097 = atan2(1.0, 0.0);
double r61098 = r61096 * r61097;
double r61099 = u2;
double r61100 = r61098 * r61099;
double r61101 = cos(r61100);
double r61102 = r61095 * r61101;
double r61103 = r61102 + r61093;
return r61103;
}
double f(double u1, double u2) {
double r61104 = 1.0;
double r61105 = 6.0;
double r61106 = r61104 / r61105;
double r61107 = 1.0;
double r61108 = -2.0;
double r61109 = u1;
double r61110 = log(r61109);
double r61111 = r61108 * r61110;
double r61112 = 0.5;
double r61113 = pow(r61111, r61112);
double r61114 = r61107 * r61113;
double r61115 = r61106 * r61114;
double r61116 = 2.0;
double r61117 = atan2(1.0, 0.0);
double r61118 = r61116 * r61117;
double r61119 = u2;
double r61120 = r61118 * r61119;
double r61121 = cos(r61120);
double r61122 = r61115 * r61121;
double r61123 = r61122 + r61112;
return r61123;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied *-un-lft-identity0.4
Final simplification0.4
herbie shell --seed 2020089 +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))