Average Error: 0.4 → 0.3
Time: 10.9s
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 r67143 = 1.0;
        double r67144 = 6.0;
        double r67145 = r67143 / r67144;
        double r67146 = -2.0;
        double r67147 = u1;
        double r67148 = log(r67147);
        double r67149 = r67146 * r67148;
        double r67150 = 0.5;
        double r67151 = pow(r67149, r67150);
        double r67152 = r67145 * r67151;
        double r67153 = 2.0;
        double r67154 = atan2(1.0, 0.0);
        double r67155 = r67153 * r67154;
        double r67156 = u2;
        double r67157 = r67155 * r67156;
        double r67158 = cos(r67157);
        double r67159 = r67152 * r67158;
        double r67160 = r67159 + r67150;
        return r67160;
}

double f(double u1, double u2) {
        double r67161 = 1.0;
        double r67162 = 6.0;
        double r67163 = 1.0;
        double r67164 = -2.0;
        double r67165 = u1;
        double r67166 = log(r67165);
        double r67167 = r67164 * r67166;
        double r67168 = 0.5;
        double r67169 = pow(r67167, r67168);
        double r67170 = r67163 * r67169;
        double r67171 = r67162 / r67170;
        double r67172 = r67161 / r67171;
        double r67173 = 2.0;
        double r67174 = atan2(1.0, 0.0);
        double r67175 = r67173 * r67174;
        double r67176 = u2;
        double r67177 = r67175 * r67176;
        double r67178 = cos(r67177);
        double r67179 = r67172 * r67178;
        double r67180 = r67179 + r67168;
        return r67180;
}

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 2020100 
(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))