Average Error: 0.4 → 0.4
Time: 28.2s
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\]
\[\left(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\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
\left(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r73449 = 1.0;
        double r73450 = 6.0;
        double r73451 = r73449 / r73450;
        double r73452 = -2.0;
        double r73453 = u1;
        double r73454 = log(r73453);
        double r73455 = r73452 * r73454;
        double r73456 = 0.5;
        double r73457 = pow(r73455, r73456);
        double r73458 = r73451 * r73457;
        double r73459 = 2.0;
        double r73460 = atan2(1.0, 0.0);
        double r73461 = r73459 * r73460;
        double r73462 = u2;
        double r73463 = r73461 * r73462;
        double r73464 = cos(r73463);
        double r73465 = r73458 * r73464;
        double r73466 = r73465 + r73456;
        return r73466;
}

double f(double u1, double u2) {
        double r73467 = 1.0;
        double r73468 = 6.0;
        double r73469 = r73467 / r73468;
        double r73470 = sqrt(r73469);
        double r73471 = -2.0;
        double r73472 = u1;
        double r73473 = log(r73472);
        double r73474 = r73471 * r73473;
        double r73475 = 0.5;
        double r73476 = pow(r73474, r73475);
        double r73477 = r73470 * r73476;
        double r73478 = r73470 * r73477;
        double r73479 = 2.0;
        double r73480 = atan2(1.0, 0.0);
        double r73481 = r73479 * r73480;
        double r73482 = u2;
        double r73483 = r73481 * r73482;
        double r73484 = cos(r73483);
        double r73485 = r73478 * r73484;
        double r73486 = r73485 + r73475;
        return r73486;
}

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 add-sqr-sqrt0.4

    \[\leadsto \left(\color{blue}{\left(\sqrt{\frac{1}{6}} \cdot \sqrt{\frac{1}{6}}\right)} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  4. Applied associate-*l*0.4

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

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

Reproduce

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