Average Error: 0.4 → 0.3
Time: 11.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\]
\[\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\]
\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 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6} \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r72987 = 1.0;
        double r72988 = 6.0;
        double r72989 = r72987 / r72988;
        double r72990 = -2.0;
        double r72991 = u1;
        double r72992 = log(r72991);
        double r72993 = r72990 * r72992;
        double r72994 = 0.5;
        double r72995 = pow(r72993, r72994);
        double r72996 = r72989 * r72995;
        double r72997 = 2.0;
        double r72998 = atan2(1.0, 0.0);
        double r72999 = r72997 * r72998;
        double r73000 = u2;
        double r73001 = r72999 * r73000;
        double r73002 = cos(r73001);
        double r73003 = r72996 * r73002;
        double r73004 = r73003 + r72994;
        return r73004;
}

double f(double u1, double u2) {
        double r73005 = 1.0;
        double r73006 = -2.0;
        double r73007 = u1;
        double r73008 = log(r73007);
        double r73009 = r73006 * r73008;
        double r73010 = 0.5;
        double r73011 = pow(r73009, r73010);
        double r73012 = r73005 * r73011;
        double r73013 = 6.0;
        double r73014 = r73012 / r73013;
        double r73015 = 2.0;
        double r73016 = atan2(1.0, 0.0);
        double r73017 = r73015 * r73016;
        double r73018 = u2;
        double r73019 = r73017 * r73018;
        double r73020 = cos(r73019);
        double r73021 = r73014 * r73020;
        double r73022 = r73021 + r73010;
        return r73022;
}

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

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

Reproduce

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