\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({\left({\left(-\log u1\right)}^{1}\right)}^{0.5} \cdot {\left({-2}^{1} \cdot {-1}^{1}\right)}^{0.5}, \cos \left(\left(\pi \cdot u2\right) \cdot 2\right) \cdot 0.1666666666666666574148081281236954964697, 0.5\right)double f(double u1, double u2) {
double r85138 = 1.0;
double r85139 = 6.0;
double r85140 = r85138 / r85139;
double r85141 = -2.0;
double r85142 = u1;
double r85143 = log(r85142);
double r85144 = r85141 * r85143;
double r85145 = 0.5;
double r85146 = pow(r85144, r85145);
double r85147 = r85140 * r85146;
double r85148 = 2.0;
double r85149 = atan2(1.0, 0.0);
double r85150 = r85148 * r85149;
double r85151 = u2;
double r85152 = r85150 * r85151;
double r85153 = cos(r85152);
double r85154 = r85147 * r85153;
double r85155 = r85154 + r85145;
return r85155;
}
double f(double u1, double u2) {
double r85156 = u1;
double r85157 = log(r85156);
double r85158 = -r85157;
double r85159 = 1.0;
double r85160 = pow(r85158, r85159);
double r85161 = 0.5;
double r85162 = pow(r85160, r85161);
double r85163 = -2.0;
double r85164 = pow(r85163, r85159);
double r85165 = -1.0;
double r85166 = pow(r85165, r85159);
double r85167 = r85164 * r85166;
double r85168 = pow(r85167, r85161);
double r85169 = r85162 * r85168;
double r85170 = atan2(1.0, 0.0);
double r85171 = u2;
double r85172 = r85170 * r85171;
double r85173 = 2.0;
double r85174 = r85172 * r85173;
double r85175 = cos(r85174);
double r85176 = 0.16666666666666666;
double r85177 = r85175 * r85176;
double r85178 = fma(r85169, r85177, r85161);
return r85178;
}



Bits error versus u1



Bits error versus u2
Initial program 0.4
Simplified0.3
Taylor expanded around inf 0.4
Simplified0.4
rmApplied unpow-prod-down0.3
rmApplied *-un-lft-identity0.3
Applied unpow-prod-down0.3
Applied unpow-prod-down0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019174 +o rules:numerics
(FPCore (u1 u2)
:name "normal distribution"
:pre (and (<= 0.0 u1 1.0) (<= 0.0 u2 1.0))
(+ (* (* (/ 1.0 6.0) (pow (* -2.0 (log u1)) 0.5)) (cos (* (* 2.0 PI) u2))) 0.5))