\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.50.5 + \left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\sqrt[3]{u2 \cdot \left(2 \cdot \pi\right)} \cdot \left(\sqrt[3]{u2 \cdot \left(2 \cdot \pi\right)} \cdot \sqrt[3]{u2 \cdot \left(2 \cdot \pi\right)}\right)\right)double f(double u1, double u2) {
double r1779034 = 1.0;
double r1779035 = 6.0;
double r1779036 = r1779034 / r1779035;
double r1779037 = -2.0;
double r1779038 = u1;
double r1779039 = log(r1779038);
double r1779040 = r1779037 * r1779039;
double r1779041 = 0.5;
double r1779042 = pow(r1779040, r1779041);
double r1779043 = r1779036 * r1779042;
double r1779044 = 2.0;
double r1779045 = atan2(1.0, 0.0);
double r1779046 = r1779044 * r1779045;
double r1779047 = u2;
double r1779048 = r1779046 * r1779047;
double r1779049 = cos(r1779048);
double r1779050 = r1779043 * r1779049;
double r1779051 = r1779050 + r1779041;
return r1779051;
}
double f(double u1, double u2) {
double r1779052 = 0.5;
double r1779053 = 0.16666666666666666;
double r1779054 = -2.0;
double r1779055 = u1;
double r1779056 = log(r1779055);
double r1779057 = r1779054 * r1779056;
double r1779058 = pow(r1779057, r1779052);
double r1779059 = r1779053 * r1779058;
double r1779060 = u2;
double r1779061 = 2.0;
double r1779062 = atan2(1.0, 0.0);
double r1779063 = r1779061 * r1779062;
double r1779064 = r1779060 * r1779063;
double r1779065 = cbrt(r1779064);
double r1779066 = r1779065 * r1779065;
double r1779067 = r1779065 * r1779066;
double r1779068 = cos(r1779067);
double r1779069 = r1779059 * r1779068;
double r1779070 = r1779052 + r1779069;
return r1779070;
}



Bits error versus u1



Bits error versus u2
Results
Initial program 0.4
rmApplied add-cube-cbrt0.4
Final simplification0.4
herbie shell --seed 2019163
(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))