Average Error: 0.4 → 0.4
Time: 2.5m
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\]
\[\cos \left(\left(2 \cdot \pi\right) \cdot u2\right) \cdot \frac{1}{{\left(\frac{1}{{-2}^{1} \cdot {\left(\log u1\right)}^{1}}\right)}^{0.5} \cdot 6} + 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
\cos \left(\left(2 \cdot \pi\right) \cdot u2\right) \cdot \frac{1}{{\left(\frac{1}{{-2}^{1} \cdot {\left(\log u1\right)}^{1}}\right)}^{0.5} \cdot 6} + 0.5
double f(double u1, double u2) {
        double r1902533 = 1.0;
        double r1902534 = 6.0;
        double r1902535 = r1902533 / r1902534;
        double r1902536 = -2.0;
        double r1902537 = u1;
        double r1902538 = log(r1902537);
        double r1902539 = r1902536 * r1902538;
        double r1902540 = 0.5;
        double r1902541 = pow(r1902539, r1902540);
        double r1902542 = r1902535 * r1902541;
        double r1902543 = 2.0;
        double r1902544 = atan2(1.0, 0.0);
        double r1902545 = r1902543 * r1902544;
        double r1902546 = u2;
        double r1902547 = r1902545 * r1902546;
        double r1902548 = cos(r1902547);
        double r1902549 = r1902542 * r1902548;
        double r1902550 = r1902549 + r1902540;
        return r1902550;
}

double f(double u1, double u2) {
        double r1902551 = 2.0;
        double r1902552 = atan2(1.0, 0.0);
        double r1902553 = r1902551 * r1902552;
        double r1902554 = u2;
        double r1902555 = r1902553 * r1902554;
        double r1902556 = cos(r1902555);
        double r1902557 = 1.0;
        double r1902558 = 1.0;
        double r1902559 = -2.0;
        double r1902560 = pow(r1902559, r1902557);
        double r1902561 = u1;
        double r1902562 = log(r1902561);
        double r1902563 = pow(r1902562, r1902557);
        double r1902564 = r1902560 * r1902563;
        double r1902565 = r1902558 / r1902564;
        double r1902566 = 0.5;
        double r1902567 = pow(r1902565, r1902566);
        double r1902568 = 6.0;
        double r1902569 = r1902567 * r1902568;
        double r1902570 = r1902557 / r1902569;
        double r1902571 = r1902556 * r1902570;
        double r1902572 = r1902571 + r1902566;
        return r1902572;
}

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 associate-*l/0.3

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

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

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

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

Reproduce

herbie shell --seed 2019200 
(FPCore (u1 u2)
  :name "normal distribution"
  :pre (and (<= 0.0 u1 1.0) (<= 0.0 u2 1.0))
  (+ (* (* (/ 1.0 6.0) (pow (* -2.0 (log u1)) 0.5)) (cos (* (* 2.0 PI) u2))) 0.5))