Average Error: 0.4 → 0.4
Time: 10.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(0.166666666666666657 \cdot {\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5}\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(0.166666666666666657 \cdot {\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r64979 = 1.0;
        double r64980 = 6.0;
        double r64981 = r64979 / r64980;
        double r64982 = -2.0;
        double r64983 = u1;
        double r64984 = log(r64983);
        double r64985 = r64982 * r64984;
        double r64986 = 0.5;
        double r64987 = pow(r64985, r64986);
        double r64988 = r64981 * r64987;
        double r64989 = 2.0;
        double r64990 = atan2(1.0, 0.0);
        double r64991 = r64989 * r64990;
        double r64992 = u2;
        double r64993 = r64991 * r64992;
        double r64994 = cos(r64993);
        double r64995 = r64988 * r64994;
        double r64996 = r64995 + r64986;
        return r64996;
}

double f(double u1, double u2) {
        double r64997 = 0.16666666666666666;
        double r64998 = u1;
        double r64999 = log(r64998);
        double r65000 = 1.0;
        double r65001 = pow(r64999, r65000);
        double r65002 = -2.0;
        double r65003 = pow(r65002, r65000);
        double r65004 = r65001 * r65003;
        double r65005 = 0.5;
        double r65006 = pow(r65004, r65005);
        double r65007 = r64997 * r65006;
        double r65008 = 2.0;
        double r65009 = atan2(1.0, 0.0);
        double r65010 = r65008 * r65009;
        double r65011 = u2;
        double r65012 = r65010 * r65011;
        double r65013 = cos(r65012);
        double r65014 = r65007 * r65013;
        double r65015 = r65014 + r65005;
        return r65015;
}

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 clear-num0.3

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

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

Reproduce

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