Average Error: 0.4 → 0.3
Time: 15.7s
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\]
\[\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\]
\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(\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
double f(double u1, double u2) {
        double r61552 = 1.0;
        double r61553 = 6.0;
        double r61554 = r61552 / r61553;
        double r61555 = -2.0;
        double r61556 = u1;
        double r61557 = log(r61556);
        double r61558 = r61555 * r61557;
        double r61559 = 0.5;
        double r61560 = pow(r61558, r61559);
        double r61561 = r61554 * r61560;
        double r61562 = 2.0;
        double r61563 = atan2(1.0, 0.0);
        double r61564 = r61562 * r61563;
        double r61565 = u2;
        double r61566 = r61564 * r61565;
        double r61567 = cos(r61566);
        double r61568 = r61561 * r61567;
        double r61569 = r61568 + r61559;
        return r61569;
}

double f(double u1, double u2) {
        double r61570 = 1.0;
        double r61571 = 6.0;
        double r61572 = r61570 / r61571;
        double r61573 = sqrt(r61572);
        double r61574 = -2.0;
        double r61575 = u1;
        double r61576 = log(r61575);
        double r61577 = r61574 * r61576;
        double r61578 = 0.5;
        double r61579 = pow(r61577, r61578);
        double r61580 = r61573 * r61579;
        double r61581 = r61573 * r61580;
        double r61582 = 2.0;
        double r61583 = atan2(1.0, 0.0);
        double r61584 = r61582 * r61583;
        double r61585 = u2;
        double r61586 = r61584 * r61585;
        double r61587 = cos(r61586);
        double r61588 = r61581 * r61587;
        double r61589 = r61588 + r61578;
        return r61589;
}

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. Final simplification0.3

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

Reproduce

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