Average Error: 0.4 → 0.4
Time: 2.8m
Precision: 64
\[0 \le u1 \le 1 \land 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(\frac{1}{6} \cdot \cos \left(2 \cdot \left(u2 \cdot \pi\right)\right)\right) \cdot \left({\left(\left({\left(-\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-1}^{1.0}\right)}^{0.5}\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(\frac{1}{6} \cdot \cos \left(2 \cdot \left(u2 \cdot \pi\right)\right)\right) \cdot \left({\left(\left({\left(-\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-1}^{1.0}\right)}^{0.5}\right) + 0.5)_*
double f(double u1, double u2) {
        double r17190557 = 1.0;
        double r17190558 = 6.0;
        double r17190559 = r17190557 / r17190558;
        double r17190560 = -2.0;
        double r17190561 = u1;
        double r17190562 = log(r17190561);
        double r17190563 = r17190560 * r17190562;
        double r17190564 = 0.5;
        double r17190565 = pow(r17190563, r17190564);
        double r17190566 = r17190559 * r17190565;
        double r17190567 = 2.0;
        double r17190568 = atan2(1.0, 0.0);
        double r17190569 = r17190567 * r17190568;
        double r17190570 = u2;
        double r17190571 = r17190569 * r17190570;
        double r17190572 = cos(r17190571);
        double r17190573 = r17190566 * r17190572;
        double r17190574 = r17190573 + r17190564;
        return r17190574;
}

double f(double u1, double u2) {
        double r17190575 = 0.16666666666666666;
        double r17190576 = 2.0;
        double r17190577 = u2;
        double r17190578 = atan2(1.0, 0.0);
        double r17190579 = r17190577 * r17190578;
        double r17190580 = r17190576 * r17190579;
        double r17190581 = cos(r17190580);
        double r17190582 = r17190575 * r17190581;
        double r17190583 = u1;
        double r17190584 = log(r17190583);
        double r17190585 = -r17190584;
        double r17190586 = 1.0;
        double r17190587 = pow(r17190585, r17190586);
        double r17190588 = -2.0;
        double r17190589 = pow(r17190588, r17190586);
        double r17190590 = r17190587 * r17190589;
        double r17190591 = -1.0;
        double r17190592 = pow(r17190591, r17190586);
        double r17190593 = r17190590 * r17190592;
        double r17190594 = 0.5;
        double r17190595 = pow(r17190593, r17190594);
        double r17190596 = fma(r17190582, r17190595, r17190594);
        return r17190596;
}

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.3

    \[\leadsto \color{blue}{(\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \left(\frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) + 0.5)_*}\]
  3. Taylor expanded around inf 0.4

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

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

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

Reproduce

herbie shell --seed 2019119 +o rules:numerics
(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))