Average Error: 0.4 → 0.3
Time: 10.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\]
\[\left(1 \cdot \frac{{\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
\left(1 \cdot \frac{{\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 r62192 = 1.0;
        double r62193 = 6.0;
        double r62194 = r62192 / r62193;
        double r62195 = -2.0;
        double r62196 = u1;
        double r62197 = log(r62196);
        double r62198 = r62195 * r62197;
        double r62199 = 0.5;
        double r62200 = pow(r62198, r62199);
        double r62201 = r62194 * r62200;
        double r62202 = 2.0;
        double r62203 = atan2(1.0, 0.0);
        double r62204 = r62202 * r62203;
        double r62205 = u2;
        double r62206 = r62204 * r62205;
        double r62207 = cos(r62206);
        double r62208 = r62201 * r62207;
        double r62209 = r62208 + r62199;
        return r62209;
}

double f(double u1, double u2) {
        double r62210 = 1.0;
        double r62211 = -2.0;
        double r62212 = u1;
        double r62213 = log(r62212);
        double r62214 = r62211 * r62213;
        double r62215 = 0.5;
        double r62216 = pow(r62214, r62215);
        double r62217 = 6.0;
        double r62218 = r62216 / r62217;
        double r62219 = r62210 * r62218;
        double r62220 = 2.0;
        double r62221 = atan2(1.0, 0.0);
        double r62222 = r62220 * r62221;
        double r62223 = u2;
        double r62224 = r62222 * r62223;
        double r62225 = cos(r62224);
        double r62226 = r62219 * r62225;
        double r62227 = r62226 + r62215;
        return r62227;
}

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

    \[\leadsto \left(\color{blue}{\left(1 \cdot \frac{1}{6}\right)} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  4. Applied associate-*l*0.4

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

    \[\leadsto \left(1 \cdot \color{blue}{\frac{{\left(-2 \cdot \log u1\right)}^{0.5}}{6}}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  6. Using strategy rm
  7. Applied *-un-lft-identity0.3

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

    \[\leadsto \left(1 \cdot \frac{{\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 2019347 +o rules:numerics
(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))