Average Error: 0.4 → 0.3
Time: 56.2s
Precision: 64
\[0 \le u1 \le 1 \land 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(\sqrt{\frac{1}{6}} \cdot \left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \sqrt{\frac{1}{6}}\right)\right) \cdot \cos \left(\pi \cdot \left(2 \cdot u2\right)\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(\sqrt{\frac{1}{6}} \cdot \left({\left(-2 \cdot \log u1\right)}^{0.5} \cdot \sqrt{\frac{1}{6}}\right)\right) \cdot \cos \left(\pi \cdot \left(2 \cdot u2\right)\right) + 0.5
double f(double u1, double u2) {
        double r4752302 = 1.0;
        double r4752303 = 6.0;
        double r4752304 = r4752302 / r4752303;
        double r4752305 = -2.0;
        double r4752306 = u1;
        double r4752307 = log(r4752306);
        double r4752308 = r4752305 * r4752307;
        double r4752309 = 0.5;
        double r4752310 = pow(r4752308, r4752309);
        double r4752311 = r4752304 * r4752310;
        double r4752312 = 2.0;
        double r4752313 = atan2(1.0, 0.0);
        double r4752314 = r4752312 * r4752313;
        double r4752315 = u2;
        double r4752316 = r4752314 * r4752315;
        double r4752317 = cos(r4752316);
        double r4752318 = r4752311 * r4752317;
        double r4752319 = r4752318 + r4752309;
        return r4752319;
}

double f(double u1, double u2) {
        double r4752320 = 0.16666666666666666;
        double r4752321 = sqrt(r4752320);
        double r4752322 = -2.0;
        double r4752323 = u1;
        double r4752324 = log(r4752323);
        double r4752325 = r4752322 * r4752324;
        double r4752326 = 0.5;
        double r4752327 = pow(r4752325, r4752326);
        double r4752328 = r4752327 * r4752321;
        double r4752329 = r4752321 * r4752328;
        double r4752330 = atan2(1.0, 0.0);
        double r4752331 = 2.0;
        double r4752332 = u2;
        double r4752333 = r4752331 * r4752332;
        double r4752334 = r4752330 * r4752333;
        double r4752335 = cos(r4752334);
        double r4752336 = r4752329 * r4752335;
        double r4752337 = r4752336 + r4752326;
        return r4752337;
}

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. Simplified0.4

    \[\leadsto \color{blue}{0.5 + \left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right) \cdot \cos \left(\pi \cdot \left(2 \cdot u2\right)\right)}\]
  3. Using strategy rm
  4. Applied add-sqr-sqrt0.4

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

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

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

Reproduce

herbie shell --seed 2019124 
(FPCore (u1 u2)
  :name "normal distribution"
  :pre (and (<= 0 u1 1) (<= 0 u2 1))
  (+ (* (* (/ 1 6) (pow (* -2 (log u1)) 0.5)) (cos (* (* 2 PI) u2))) 0.5))