Average Error: 0.4 → 0.4
Time: 10.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\]
\[\frac{1}{6 \cdot \frac{1}{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}} \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
\frac{1}{6 \cdot \frac{1}{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r66967 = 1.0;
        double r66968 = 6.0;
        double r66969 = r66967 / r66968;
        double r66970 = -2.0;
        double r66971 = u1;
        double r66972 = log(r66971);
        double r66973 = r66970 * r66972;
        double r66974 = 0.5;
        double r66975 = pow(r66973, r66974);
        double r66976 = r66969 * r66975;
        double r66977 = 2.0;
        double r66978 = atan2(1.0, 0.0);
        double r66979 = r66977 * r66978;
        double r66980 = u2;
        double r66981 = r66979 * r66980;
        double r66982 = cos(r66981);
        double r66983 = r66976 * r66982;
        double r66984 = r66983 + r66974;
        return r66984;
}

double f(double u1, double u2) {
        double r66985 = 1.0;
        double r66986 = 6.0;
        double r66987 = 1.0;
        double r66988 = -2.0;
        double r66989 = u1;
        double r66990 = log(r66989);
        double r66991 = r66988 * r66990;
        double r66992 = 0.5;
        double r66993 = pow(r66991, r66992);
        double r66994 = r66987 * r66993;
        double r66995 = r66985 / r66994;
        double r66996 = r66986 * r66995;
        double r66997 = r66985 / r66996;
        double r66998 = 2.0;
        double r66999 = atan2(1.0, 0.0);
        double r67000 = r66998 * r66999;
        double r67001 = u2;
        double r67002 = r67000 * r67001;
        double r67003 = cos(r67002);
        double r67004 = r66997 * r67003;
        double r67005 = r67004 + r66992;
        return r67005;
}

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.4

    \[\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. Using strategy rm
  7. Applied div-inv0.4

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

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

Reproduce

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