x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -6134214662947.4755859375 \lor \neg \left(z \le 0.02992000358306671353725292306080518756062\right):\\
\;\;\;\;x + \left(0.06929105992918889456166908757950295694172 \cdot y + 0.07512208616047560960637952121032867580652 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt[3]{{\left(\frac{z \cdot \left(0.06929105992918889456166908757950295694172 \cdot z + 0.4917317610505967939715787906607147306204\right) + 0.2791953179185249767080279070796677842736}{3.350343815022303939343828460550867021084 + z \cdot \left(z + 6.012459259764103336465268512256443500519\right)}\right)}^{3}} \cdot y + x\\
\end{array}double f(double x, double y, double z) {
double r297455 = x;
double r297456 = y;
double r297457 = z;
double r297458 = 0.0692910599291889;
double r297459 = r297457 * r297458;
double r297460 = 0.4917317610505968;
double r297461 = r297459 + r297460;
double r297462 = r297461 * r297457;
double r297463 = 0.279195317918525;
double r297464 = r297462 + r297463;
double r297465 = r297456 * r297464;
double r297466 = 6.012459259764103;
double r297467 = r297457 + r297466;
double r297468 = r297467 * r297457;
double r297469 = 3.350343815022304;
double r297470 = r297468 + r297469;
double r297471 = r297465 / r297470;
double r297472 = r297455 + r297471;
return r297472;
}
double f(double x, double y, double z) {
double r297473 = z;
double r297474 = -6134214662947.476;
bool r297475 = r297473 <= r297474;
double r297476 = 0.029920003583066714;
bool r297477 = r297473 <= r297476;
double r297478 = !r297477;
bool r297479 = r297475 || r297478;
double r297480 = x;
double r297481 = 0.0692910599291889;
double r297482 = y;
double r297483 = r297481 * r297482;
double r297484 = 0.07512208616047561;
double r297485 = r297482 / r297473;
double r297486 = r297484 * r297485;
double r297487 = r297483 + r297486;
double r297488 = r297480 + r297487;
double r297489 = r297481 * r297473;
double r297490 = 0.4917317610505968;
double r297491 = r297489 + r297490;
double r297492 = r297473 * r297491;
double r297493 = 0.279195317918525;
double r297494 = r297492 + r297493;
double r297495 = 3.350343815022304;
double r297496 = 6.012459259764103;
double r297497 = r297473 + r297496;
double r297498 = r297473 * r297497;
double r297499 = r297495 + r297498;
double r297500 = r297494 / r297499;
double r297501 = 3.0;
double r297502 = pow(r297500, r297501);
double r297503 = cbrt(r297502);
double r297504 = r297503 * r297482;
double r297505 = r297504 + r297480;
double r297506 = r297479 ? r297488 : r297505;
return r297506;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if z < -6134214662947.476 or 0.029920003583066714 < z Initial program 40.8
Simplified32.4
Taylor expanded around inf 0.3
Simplified0.3
if -6134214662947.476 < z < 0.029920003583066714Initial program 0.1
Simplified0.1
rmApplied add-cbrt-cube0.1
Applied add-cbrt-cube0.1
Applied cbrt-undiv0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019179
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 6.576118972787377e+20) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1.0 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))