Average Error: 0.4 → 0.4
Time: 12.3s
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\]
\[\frac{\mathsf{fma}\left(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right) \cdot \left(\left(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) - 0.5\right)}{\left(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\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
\frac{\mathsf{fma}\left(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right) \cdot \left(\left(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) - 0.5\right)}{\left(1 \cdot \frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) - 0.5}
double f(double u1, double u2) {
        double r75782 = 1.0;
        double r75783 = 6.0;
        double r75784 = r75782 / r75783;
        double r75785 = -2.0;
        double r75786 = u1;
        double r75787 = log(r75786);
        double r75788 = r75785 * r75787;
        double r75789 = 0.5;
        double r75790 = pow(r75788, r75789);
        double r75791 = r75784 * r75790;
        double r75792 = 2.0;
        double r75793 = atan2(1.0, 0.0);
        double r75794 = r75792 * r75793;
        double r75795 = u2;
        double r75796 = r75794 * r75795;
        double r75797 = cos(r75796);
        double r75798 = r75791 * r75797;
        double r75799 = r75798 + r75789;
        return r75799;
}

double f(double u1, double u2) {
        double r75800 = 1.0;
        double r75801 = -2.0;
        double r75802 = u1;
        double r75803 = log(r75802);
        double r75804 = r75801 * r75803;
        double r75805 = 0.5;
        double r75806 = pow(r75804, r75805);
        double r75807 = 6.0;
        double r75808 = r75806 / r75807;
        double r75809 = r75800 * r75808;
        double r75810 = 2.0;
        double r75811 = atan2(1.0, 0.0);
        double r75812 = r75810 * r75811;
        double r75813 = u2;
        double r75814 = r75812 * r75813;
        double r75815 = cos(r75814);
        double r75816 = fma(r75809, r75815, r75805);
        double r75817 = r75809 * r75815;
        double r75818 = r75817 - r75805;
        double r75819 = r75816 * r75818;
        double r75820 = r75819 / r75818;
        return r75820;
}

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. Using strategy rm
  3. Applied div-inv0.4

    \[\leadsto \left(\color{blue}{\left(1 \cdot \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(1 \cdot \left(\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. Simplified0.3

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

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

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

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

Reproduce

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