Average Error: 0.4 → 0.4
Time: 15.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\]
\[\mathsf{fma}\left({\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5} \cdot 0.166666666666666657, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
\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
\mathsf{fma}\left({\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5} \cdot 0.166666666666666657, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)
double f(double u1, double u2) {
        double r80282 = 1.0;
        double r80283 = 6.0;
        double r80284 = r80282 / r80283;
        double r80285 = -2.0;
        double r80286 = u1;
        double r80287 = log(r80286);
        double r80288 = r80285 * r80287;
        double r80289 = 0.5;
        double r80290 = pow(r80288, r80289);
        double r80291 = r80284 * r80290;
        double r80292 = 2.0;
        double r80293 = atan2(1.0, 0.0);
        double r80294 = r80292 * r80293;
        double r80295 = u2;
        double r80296 = r80294 * r80295;
        double r80297 = cos(r80296);
        double r80298 = r80291 * r80297;
        double r80299 = r80298 + r80289;
        return r80299;
}

double f(double u1, double u2) {
        double r80300 = u1;
        double r80301 = log(r80300);
        double r80302 = 1.0;
        double r80303 = pow(r80301, r80302);
        double r80304 = -2.0;
        double r80305 = pow(r80304, r80302);
        double r80306 = r80303 * r80305;
        double r80307 = 0.5;
        double r80308 = pow(r80306, r80307);
        double r80309 = 0.16666666666666666;
        double r80310 = r80308 * r80309;
        double r80311 = 2.0;
        double r80312 = atan2(1.0, 0.0);
        double r80313 = r80311 * r80312;
        double r80314 = u2;
        double r80315 = r80313 * r80314;
        double r80316 = cos(r80315);
        double r80317 = fma(r80310, r80316, r80307);
        return r80317;
}

Error

Bits error versus u1

Bits error versus u2

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}{\mathsf{fma}\left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)}\]
  3. Using strategy rm
  4. Applied add-exp-log64.0

    \[\leadsto \mathsf{fma}\left(\frac{1}{6} \cdot {\left(-2 \cdot \color{blue}{e^{\log \left(\log u1\right)}}\right)}^{0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  5. Applied add-exp-log64.0

    \[\leadsto \mathsf{fma}\left(\frac{1}{6} \cdot {\left(\color{blue}{e^{\log -2}} \cdot e^{\log \left(\log u1\right)}\right)}^{0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  6. Applied prod-exp64.0

    \[\leadsto \mathsf{fma}\left(\frac{1}{6} \cdot {\color{blue}{\left(e^{\log -2 + \log \left(\log u1\right)}\right)}}^{0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  7. Applied pow-exp64.0

    \[\leadsto \mathsf{fma}\left(\frac{1}{6} \cdot \color{blue}{e^{\left(\log -2 + \log \left(\log u1\right)\right) \cdot 0.5}}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  8. Applied add-exp-log64.0

    \[\leadsto \mathsf{fma}\left(\frac{1}{\color{blue}{e^{\log 6}}} \cdot e^{\left(\log -2 + \log \left(\log u1\right)\right) \cdot 0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  9. Applied add-exp-log64.0

    \[\leadsto \mathsf{fma}\left(\frac{\color{blue}{e^{\log 1}}}{e^{\log 6}} \cdot e^{\left(\log -2 + \log \left(\log u1\right)\right) \cdot 0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  10. Applied div-exp64.0

    \[\leadsto \mathsf{fma}\left(\color{blue}{e^{\log 1 - \log 6}} \cdot e^{\left(\log -2 + \log \left(\log u1\right)\right) \cdot 0.5}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  11. Applied prod-exp64.0

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

    \[\leadsto \mathsf{fma}\left(e^{\color{blue}{\log \left(\frac{1}{6} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)}}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  13. Using strategy rm
  14. Applied add-sqr-sqrt0.5

    \[\leadsto \mathsf{fma}\left(e^{\log \left(\color{blue}{\left(\sqrt{\frac{1}{6}} \cdot \sqrt{\frac{1}{6}}\right)} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  15. Applied associate-*l*0.5

    \[\leadsto \mathsf{fma}\left(e^{\log \color{blue}{\left(\sqrt{\frac{1}{6}} \cdot \left(\sqrt{\frac{1}{6}} \cdot {\left(-2 \cdot \log u1\right)}^{0.5}\right)\right)}}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  16. Taylor expanded around 0 0.4

    \[\leadsto \mathsf{fma}\left(\color{blue}{{\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5} \cdot {\left(\sqrt{0.166666666666666657}\right)}^{2}}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  17. Simplified0.4

    \[\leadsto \mathsf{fma}\left(\color{blue}{{\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5} \cdot 0.166666666666666657}, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]
  18. Final simplification0.4

    \[\leadsto \mathsf{fma}\left({\left({\left(\log u1\right)}^{1} \cdot {-2}^{1}\right)}^{0.5} \cdot 0.166666666666666657, \cos \left(\left(2 \cdot \pi\right) \cdot u2\right), 0.5\right)\]

Reproduce

herbie shell --seed 2020045 +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))