Average Error: 0.4 → 0.3
Time: 2.8m
Precision: 64
\[\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{\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)}{\frac{6}{{\left(-2 \cdot \log u1\right)}^{0.5}}} + 0.5\]
double f(double u1, double u2) {
        double r21384358 = 1.0;
        double r21384359 = 6.0;
        double r21384360 = r21384358 / r21384359;
        double r21384361 = -2.0;
        double r21384362 = u1;
        double r21384363 = log(r21384362);
        double r21384364 = r21384361 * r21384363;
        double r21384365 = 0.5;
        double r21384366 = pow(r21384364, r21384365);
        double r21384367 = r21384360 * r21384366;
        double r21384368 = 2.0;
        double r21384369 = atan2(1.0, 0.0);
        double r21384370 = r21384368 * r21384369;
        double r21384371 = u2;
        double r21384372 = r21384370 * r21384371;
        double r21384373 = cos(r21384372);
        double r21384374 = r21384367 * r21384373;
        double r21384375 = r21384374 + r21384365;
        return r21384375;
}

double f(double u1, double u2) {
        double r21384376 = u2;
        double r21384377 = 2.0;
        double r21384378 = atan2(1.0, 0.0);
        double r21384379 = r21384377 * r21384378;
        double r21384380 = r21384376 * r21384379;
        double r21384381 = cos(r21384380);
        double r21384382 = 6.0;
        double r21384383 = -2.0;
        double r21384384 = u1;
        double r21384385 = log(r21384384);
        double r21384386 = r21384383 * r21384385;
        double r21384387 = 0.5;
        double r21384388 = pow(r21384386, r21384387);
        double r21384389 = r21384382 / r21384388;
        double r21384390 = r21384381 / r21384389;
        double r21384391 = r21384390 + r21384387;
        return r21384391;
}

\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{\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)}{\frac{6}{{\left(-2 \cdot \log u1\right)}^{0.5}}} + 0.5

Error

Bits error versus u1

Bits error versus u2

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. Simplified0.4

    \[\leadsto \color{blue}{0.5 + \frac{\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}\]
  3. Using strategy rm
  4. Applied associate-*l/0.3

    \[\leadsto 0.5 + \color{blue}{\frac{\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right) \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}}\]
  5. Using strategy rm
  6. Applied associate-/l*0.3

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

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

Reproduce

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