Average Error: 0.4 → 0.3
Time: 11.4s
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}{\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\]
\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}{\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
double f(double u1, double u2) {
        double r70833 = 1.0;
        double r70834 = 6.0;
        double r70835 = r70833 / r70834;
        double r70836 = -2.0;
        double r70837 = u1;
        double r70838 = log(r70837);
        double r70839 = r70836 * r70838;
        double r70840 = 0.5;
        double r70841 = pow(r70839, r70840);
        double r70842 = r70835 * r70841;
        double r70843 = 2.0;
        double r70844 = atan2(1.0, 0.0);
        double r70845 = r70843 * r70844;
        double r70846 = u2;
        double r70847 = r70845 * r70846;
        double r70848 = cos(r70847);
        double r70849 = r70842 * r70848;
        double r70850 = r70849 + r70840;
        return r70850;
}

double f(double u1, double u2) {
        double r70851 = 1.0;
        double r70852 = 6.0;
        double r70853 = 1.0;
        double r70854 = -2.0;
        double r70855 = u1;
        double r70856 = log(r70855);
        double r70857 = r70854 * r70856;
        double r70858 = 0.5;
        double r70859 = pow(r70857, r70858);
        double r70860 = r70853 * r70859;
        double r70861 = r70852 / r70860;
        double r70862 = r70851 / r70861;
        double r70863 = 2.0;
        double r70864 = atan2(1.0, 0.0);
        double r70865 = r70863 * r70864;
        double r70866 = u2;
        double r70867 = r70865 * r70866;
        double r70868 = cos(r70867);
        double r70869 = r70862 * r70868;
        double r70870 = r70869 + r70858;
        return r70870;
}

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

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

Reproduce

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