Average Error: 0.4 → 0.3
Time: 17.6s
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(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{\left(2 \cdot \frac{0.5}{2}\right)}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot 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(\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{\left(2 \cdot \frac{0.5}{2}\right)}}{6}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)
double f(double u1, double u2) {
        double r63681 = 1.0;
        double r63682 = 6.0;
        double r63683 = r63681 / r63682;
        double r63684 = -2.0;
        double r63685 = u1;
        double r63686 = log(r63685);
        double r63687 = r63684 * r63686;
        double r63688 = 0.5;
        double r63689 = pow(r63687, r63688);
        double r63690 = r63683 * r63689;
        double r63691 = 2.0;
        double r63692 = atan2(1.0, 0.0);
        double r63693 = r63691 * r63692;
        double r63694 = u2;
        double r63695 = r63693 * r63694;
        double r63696 = cos(r63695);
        double r63697 = r63690 * r63696;
        double r63698 = r63697 + r63688;
        return r63698;
}

double f(double u1, double u2) {
        double r63699 = 1.0;
        double r63700 = -2.0;
        double r63701 = u1;
        double r63702 = log(r63701);
        double r63703 = r63700 * r63702;
        double r63704 = 2.0;
        double r63705 = 0.5;
        double r63706 = r63705 / r63704;
        double r63707 = r63704 * r63706;
        double r63708 = pow(r63703, r63707);
        double r63709 = r63699 * r63708;
        double r63710 = 6.0;
        double r63711 = r63709 / r63710;
        double r63712 = 2.0;
        double r63713 = atan2(1.0, 0.0);
        double r63714 = r63712 * r63713;
        double r63715 = u2;
        double r63716 = r63714 * r63715;
        double r63717 = cos(r63716);
        double r63718 = fma(r63711, r63717, r63705);
        return r63718;
}

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 sqr-pow0.6

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

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

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

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

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

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

Reproduce

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