Average Error: 0.4 → 0.4
Time: 11.7s
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({\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5} \cdot {\left(\sqrt{0.1666666666666666574148081281236954964697}\right)}^{2}\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({\left({-1}^{1} \cdot \left({-2}^{1} \cdot {\left(\log \left(\frac{1}{u1}\right)\right)}^{1}\right)\right)}^{0.5} \cdot {\left(\sqrt{0.1666666666666666574148081281236954964697}\right)}^{2}\right) \cdot \cos \left(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5
double f(double u1, double u2) {
        double r73352 = 1.0;
        double r73353 = 6.0;
        double r73354 = r73352 / r73353;
        double r73355 = -2.0;
        double r73356 = u1;
        double r73357 = log(r73356);
        double r73358 = r73355 * r73357;
        double r73359 = 0.5;
        double r73360 = pow(r73358, r73359);
        double r73361 = r73354 * r73360;
        double r73362 = 2.0;
        double r73363 = atan2(1.0, 0.0);
        double r73364 = r73362 * r73363;
        double r73365 = u2;
        double r73366 = r73364 * r73365;
        double r73367 = cos(r73366);
        double r73368 = r73361 * r73367;
        double r73369 = r73368 + r73359;
        return r73369;
}

double f(double u1, double u2) {
        double r73370 = -1.0;
        double r73371 = 1.0;
        double r73372 = pow(r73370, r73371);
        double r73373 = -2.0;
        double r73374 = pow(r73373, r73371);
        double r73375 = 1.0;
        double r73376 = u1;
        double r73377 = r73375 / r73376;
        double r73378 = log(r73377);
        double r73379 = pow(r73378, r73371);
        double r73380 = r73374 * r73379;
        double r73381 = r73372 * r73380;
        double r73382 = 0.5;
        double r73383 = pow(r73381, r73382);
        double r73384 = 0.16666666666666666;
        double r73385 = sqrt(r73384);
        double r73386 = 2.0;
        double r73387 = pow(r73385, r73386);
        double r73388 = r73383 * r73387;
        double r73389 = 2.0;
        double r73390 = atan2(1.0, 0.0);
        double r73391 = r73389 * r73390;
        double r73392 = u2;
        double r73393 = r73391 * r73392;
        double r73394 = cos(r73393);
        double r73395 = r73388 * r73394;
        double r73396 = r73395 + r73382;
        return r73396;
}

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 add-sqr-sqrt0.4

    \[\leadsto \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(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  4. Applied associate-*l*0.3

    \[\leadsto \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(\left(2 \cdot \pi\right) \cdot u2\right) + 0.5\]
  5. Taylor expanded around inf 0.4

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

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

Reproduce

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