Average Error: 0.4 → 0.4
Time: 10.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\]
\[\mathsf{fma}\left(0.166666666666666657 \cdot {\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5}, \cos \left(\left(\left(2 \cdot \pi\right) \cdot \sqrt{u2}\right) \cdot \sqrt{u2}\right), 0.5\right)\]
\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(0.166666666666666657 \cdot {\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5}, \cos \left(\left(\left(2 \cdot \pi\right) \cdot \sqrt{u2}\right) \cdot \sqrt{u2}\right), 0.5\right)
double f(double u1, double u2) {
        double r58471 = 1.0;
        double r58472 = 6.0;
        double r58473 = r58471 / r58472;
        double r58474 = -2.0;
        double r58475 = u1;
        double r58476 = log(r58475);
        double r58477 = r58474 * r58476;
        double r58478 = 0.5;
        double r58479 = pow(r58477, r58478);
        double r58480 = r58473 * r58479;
        double r58481 = 2.0;
        double r58482 = atan2(1.0, 0.0);
        double r58483 = r58481 * r58482;
        double r58484 = u2;
        double r58485 = r58483 * r58484;
        double r58486 = cos(r58485);
        double r58487 = r58480 * r58486;
        double r58488 = r58487 + r58478;
        return r58488;
}

double f(double u1, double u2) {
        double r58489 = 0.16666666666666666;
        double r58490 = -1.0;
        double r58491 = 1.0;
        double r58492 = pow(r58490, r58491);
        double r58493 = -2.0;
        double r58494 = pow(r58493, r58491);
        double r58495 = 1.0;
        double r58496 = u1;
        double r58497 = r58495 / r58496;
        double r58498 = log(r58497);
        double r58499 = pow(r58498, r58491);
        double r58500 = r58494 * r58499;
        double r58501 = r58492 * r58500;
        double r58502 = 0.5;
        double r58503 = pow(r58501, r58502);
        double r58504 = r58489 * r58503;
        double r58505 = 2.0;
        double r58506 = atan2(1.0, 0.0);
        double r58507 = r58505 * r58506;
        double r58508 = u2;
        double r58509 = sqrt(r58508);
        double r58510 = r58507 * r58509;
        double r58511 = r58510 * r58509;
        double r58512 = cos(r58511);
        double r58513 = fma(r58504, r58512, r58502);
        return r58513;
}

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}{\mathsf{fma}\left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)}\]
  3. Using strategy rm
  4. Applied associate-*l/0.3

    \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  5. Using strategy rm
  6. Applied add-sqr-sqrt0.3

    \[\leadsto \mathsf{fma}\left(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot \color{blue}{\left(\sqrt{u2} \cdot \sqrt{u2}\right)}\right), 0.5\right)\]
  7. Applied associate-*r*0.3

    \[\leadsto \mathsf{fma}\left(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}, \cos \color{blue}{\left(\left(\left(2 \cdot \pi\right) \cdot \sqrt{u2}\right) \cdot \sqrt{u2}\right)}, 0.5\right)\]
  8. Taylor expanded around inf 0.4

    \[\leadsto \mathsf{fma}\left(\color{blue}{0.166666666666666657 \cdot {\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5}}, \cos \left(\left(\left(2 \cdot \pi\right) \cdot \sqrt{u2}\right) \cdot \sqrt{u2}\right), 0.5\right)\]
  9. Final simplification0.4

    \[\leadsto \mathsf{fma}\left(0.166666666666666657 \cdot {\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5}, \cos \left(\left(\left(2 \cdot \pi\right) \cdot \sqrt{u2}\right) \cdot \sqrt{u2}\right), 0.5\right)\]

Reproduce

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