Average Error: 0.4 → 0.3
Time: 10.8s
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\]
\[\log \left(e^{\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}}\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
\log \left(e^{\frac{1 \cdot {\left(-2 \cdot \log u1\right)}^{0.5}}{6}}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r66829 = 1.0;
        double r66830 = 6.0;
        double r66831 = r66829 / r66830;
        double r66832 = -2.0;
        double r66833 = u1;
        double r66834 = log(r66833);
        double r66835 = r66832 * r66834;
        double r66836 = 0.5;
        double r66837 = pow(r66835, r66836);
        double r66838 = r66831 * r66837;
        double r66839 = 2.0;
        double r66840 = atan2(1.0, 0.0);
        double r66841 = r66839 * r66840;
        double r66842 = u2;
        double r66843 = r66841 * r66842;
        double r66844 = cos(r66843);
        double r66845 = r66838 * r66844;
        double r66846 = r66845 + r66836;
        return r66846;
}

double f(double u1, double u2) {
        double r66847 = 1.0;
        double r66848 = -2.0;
        double r66849 = u1;
        double r66850 = log(r66849);
        double r66851 = r66848 * r66850;
        double r66852 = 0.5;
        double r66853 = pow(r66851, r66852);
        double r66854 = r66847 * r66853;
        double r66855 = 6.0;
        double r66856 = r66854 / r66855;
        double r66857 = exp(r66856);
        double r66858 = log(r66857);
        double r66859 = 2.0;
        double r66860 = atan2(1.0, 0.0);
        double r66861 = r66859 * r66860;
        double r66862 = u2;
        double r66863 = r66861 * r66862;
        double r66864 = cos(r66863);
        double r66865 = r66858 * r66864;
        double r66866 = r66865 + r66852;
        return r66866;
}

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 add-log-exp0.3

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

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

Reproduce

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