Average Error: 0.4 → 0.4
Time: 29.0s
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\]
\[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)\]
\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
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)
double f(double u1, double u2) {
        double r76998 = 1.0;
        double r76999 = 6.0;
        double r77000 = r76998 / r76999;
        double r77001 = -2.0;
        double r77002 = u1;
        double r77003 = log(r77002);
        double r77004 = r77001 * r77003;
        double r77005 = 0.5;
        double r77006 = pow(r77004, r77005);
        double r77007 = r77000 * r77006;
        double r77008 = 2.0;
        double r77009 = atan2(1.0, 0.0);
        double r77010 = r77008 * r77009;
        double r77011 = u2;
        double r77012 = r77010 * r77011;
        double r77013 = cos(r77012);
        double r77014 = r77007 * r77013;
        double r77015 = r77014 + r77005;
        return r77015;
}

double f(double u1, double u2) {
        double r77016 = 0.5;
        double r77017 = 1.0;
        double r77018 = 6.0;
        double r77019 = r77017 / r77018;
        double r77020 = -2.0;
        double r77021 = u1;
        double r77022 = log(r77021);
        double r77023 = r77020 * r77022;
        double r77024 = pow(r77023, r77016);
        double r77025 = r77019 * r77024;
        double r77026 = 2.0;
        double r77027 = atan2(1.0, 0.0);
        double r77028 = r77026 * r77027;
        double r77029 = u2;
        double r77030 = r77028 * r77029;
        double r77031 = cos(r77030);
        double r77032 = r77025 * r77031;
        double r77033 = r77016 + r77032;
        return r77033;
}

Error

Bits error versus u1

Bits error versus u2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

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 add-sqr-sqrt0.4

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

    \[\leadsto \color{blue}{\left(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\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. Using strategy rm
  6. Applied *-un-lft-identity0.3

    \[\leadsto \left(\sqrt{\color{blue}{1 \cdot \frac{1}{6}}} \cdot \left(\sqrt{\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\]
  7. Applied sqrt-prod0.3

    \[\leadsto \left(\color{blue}{\left(\sqrt{1} \cdot \sqrt{\frac{1}{6}}\right)} \cdot \left(\sqrt{\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\]
  8. Applied associate-*l*0.3

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

    \[\leadsto \left(\sqrt{1} \cdot \color{blue}{\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\]
  10. Final simplification0.4

    \[\leadsto 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)\]

Reproduce

herbie shell --seed 2019323 
(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))