Average Error: 0.4 → 0.4
Time: 4.5m
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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\sqrt[3]{\frac{1}{\left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot \left(\left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot \left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right)\right)}}\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(\cos \left(\left(\pi \cdot 2\right) \cdot u2\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\sqrt[3]{\frac{1}{\left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot \left(\left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right) \cdot \left({\left(\log u1\right)}^{1.0} \cdot {-2}^{1.0}\right)\right)}}\right)}^{0.5}}\right) + 0.5)_*
double f(double u1, double u2) {
        double r25841361 = 1.0;
        double r25841362 = 6.0;
        double r25841363 = r25841361 / r25841362;
        double r25841364 = -2.0;
        double r25841365 = u1;
        double r25841366 = log(r25841365);
        double r25841367 = r25841364 * r25841366;
        double r25841368 = 0.5;
        double r25841369 = pow(r25841367, r25841368);
        double r25841370 = r25841363 * r25841369;
        double r25841371 = 2.0;
        double r25841372 = atan2(1.0, 0.0);
        double r25841373 = r25841371 * r25841372;
        double r25841374 = u2;
        double r25841375 = r25841373 * r25841374;
        double r25841376 = cos(r25841375);
        double r25841377 = r25841370 * r25841376;
        double r25841378 = r25841377 + r25841368;
        return r25841378;
}

double f(double u1, double u2) {
        double r25841379 = atan2(1.0, 0.0);
        double r25841380 = 2.0;
        double r25841381 = r25841379 * r25841380;
        double r25841382 = u2;
        double r25841383 = r25841381 * r25841382;
        double r25841384 = cos(r25841383);
        double r25841385 = 0.16666666666666666;
        double r25841386 = 1.0;
        double r25841387 = u1;
        double r25841388 = log(r25841387);
        double r25841389 = 1.0;
        double r25841390 = pow(r25841388, r25841389);
        double r25841391 = -2.0;
        double r25841392 = pow(r25841391, r25841389);
        double r25841393 = r25841390 * r25841392;
        double r25841394 = r25841393 * r25841393;
        double r25841395 = r25841393 * r25841394;
        double r25841396 = r25841386 / r25841395;
        double r25841397 = cbrt(r25841396);
        double r25841398 = 0.5;
        double r25841399 = pow(r25841397, r25841398);
        double r25841400 = r25841385 / r25841399;
        double r25841401 = fma(r25841384, r25841400, r25841398);
        return r25841401;
}

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. Using strategy rm
  4. Applied clear-num0.3

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

    \[\leadsto (\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \left(\frac{1}{\color{blue}{6 \cdot {\left(\frac{1}{{-2}^{1.0} \cdot {\left(\log u1\right)}^{1.0}}\right)}^{0.5}}}\right) + 0.5)_*\]
  6. Using strategy rm
  7. Applied associate-/r*0.4

    \[\leadsto (\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \color{blue}{\left(\frac{\frac{1}{6}}{{\left(\frac{1}{{-2}^{1.0} \cdot {\left(\log u1\right)}^{1.0}}\right)}^{0.5}}\right)} + 0.5)_*\]
  8. Using strategy rm
  9. Applied add-cbrt-cube0.4

    \[\leadsto (\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\frac{1}{{-2}^{1.0} \cdot \color{blue}{\sqrt[3]{\left({\left(\log u1\right)}^{1.0} \cdot {\left(\log u1\right)}^{1.0}\right) \cdot {\left(\log u1\right)}^{1.0}}}}\right)}^{0.5}}\right) + 0.5)_*\]
  10. Applied add-cbrt-cube0.4

    \[\leadsto (\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\frac{1}{\color{blue}{\sqrt[3]{\left({-2}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-2}^{1.0}}} \cdot \sqrt[3]{\left({\left(\log u1\right)}^{1.0} \cdot {\left(\log u1\right)}^{1.0}\right) \cdot {\left(\log u1\right)}^{1.0}}}\right)}^{0.5}}\right) + 0.5)_*\]
  11. Applied cbrt-unprod0.4

    \[\leadsto (\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\frac{1}{\color{blue}{\sqrt[3]{\left(\left({-2}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-2}^{1.0}\right) \cdot \left(\left({\left(\log u1\right)}^{1.0} \cdot {\left(\log u1\right)}^{1.0}\right) \cdot {\left(\log u1\right)}^{1.0}\right)}}}\right)}^{0.5}}\right) + 0.5)_*\]
  12. Applied add-cbrt-cube0.4

    \[\leadsto (\left(\cos \left(u2 \cdot \left(2 \cdot \pi\right)\right)\right) \cdot \left(\frac{\frac{1}{6}}{{\left(\frac{\color{blue}{\sqrt[3]{\left(1 \cdot 1\right) \cdot 1}}}{\sqrt[3]{\left(\left({-2}^{1.0} \cdot {-2}^{1.0}\right) \cdot {-2}^{1.0}\right) \cdot \left(\left({\left(\log u1\right)}^{1.0} \cdot {\left(\log u1\right)}^{1.0}\right) \cdot {\left(\log u1\right)}^{1.0}\right)}}\right)}^{0.5}}\right) + 0.5)_*\]
  13. Applied cbrt-undiv0.4

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

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

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

Reproduce

herbie shell --seed 2019107 +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))