Average Error: 0.4 → 0.3
Time: 57.3s
Precision: 64
\[0.0 \le u1 \le 1 \land 0.0 \le u2 \le 1\]
\[\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\]
\[\frac{1 \cdot {\left(\log u1 \cdot -2\right)}^{0.5}}{6} \cdot \cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) + 0.5\]
\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
\frac{1 \cdot {\left(\log u1 \cdot -2\right)}^{0.5}}{6} \cdot \cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) + 0.5
double f(double u1, double u2) {
        double r3133168 = 1.0;
        double r3133169 = 6.0;
        double r3133170 = r3133168 / r3133169;
        double r3133171 = -2.0;
        double r3133172 = u1;
        double r3133173 = log(r3133172);
        double r3133174 = r3133171 * r3133173;
        double r3133175 = 0.5;
        double r3133176 = pow(r3133174, r3133175);
        double r3133177 = r3133170 * r3133176;
        double r3133178 = 2.0;
        double r3133179 = atan2(1.0, 0.0);
        double r3133180 = r3133178 * r3133179;
        double r3133181 = u2;
        double r3133182 = r3133180 * r3133181;
        double r3133183 = cos(r3133182);
        double r3133184 = r3133177 * r3133183;
        double r3133185 = r3133184 + r3133175;
        return r3133185;
}

double f(double u1, double u2) {
        double r3133186 = 1.0;
        double r3133187 = u1;
        double r3133188 = log(r3133187);
        double r3133189 = -2.0;
        double r3133190 = r3133188 * r3133189;
        double r3133191 = 0.5;
        double r3133192 = pow(r3133190, r3133191);
        double r3133193 = r3133186 * r3133192;
        double r3133194 = 6.0;
        double r3133195 = r3133193 / r3133194;
        double r3133196 = u2;
        double r3133197 = 2.0;
        double r3133198 = atan2(1.0, 0.0);
        double r3133199 = r3133197 * r3133198;
        double r3133200 = r3133196 * r3133199;
        double r3133201 = cos(r3133200);
        double r3133202 = r3133195 * r3133201;
        double r3133203 = r3133202 + r3133191;
        return r3133203;
}

Error

Bits error versus u1

Bits error versus u2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.4

    \[\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\]
  2. Using strategy rm
  3. Applied associate-*l/0.3

    \[\leadsto \color{blue}{\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  4. Final simplification0.3

    \[\leadsto \frac{1 \cdot {\left(\log u1 \cdot -2\right)}^{0.5}}{6} \cdot \cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) + 0.5\]

Reproduce

herbie shell --seed 2019168 
(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))