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 -118634480579497590784 \lor \neg \left(z \le 914856.9161543957889080047607421875\right):\\
\;\;\;\;x + y \cdot \left(\left(0.07512208616047560960637952121032867580652 \cdot \frac{1}{z} + 0.06929105992918889456166908757950295694172\right) - 0.4046220386999212492717958866705885156989 \cdot \frac{1}{{z}^{2}}\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\\
\end{array}double f(double x, double y, double z) {
double r243426 = x;
double r243427 = y;
double r243428 = z;
double r243429 = 0.0692910599291889;
double r243430 = r243428 * r243429;
double r243431 = 0.4917317610505968;
double r243432 = r243430 + r243431;
double r243433 = r243432 * r243428;
double r243434 = 0.279195317918525;
double r243435 = r243433 + r243434;
double r243436 = r243427 * r243435;
double r243437 = 6.012459259764103;
double r243438 = r243428 + r243437;
double r243439 = r243438 * r243428;
double r243440 = 3.350343815022304;
double r243441 = r243439 + r243440;
double r243442 = r243436 / r243441;
double r243443 = r243426 + r243442;
return r243443;
}
double f(double x, double y, double z) {
double r243444 = z;
double r243445 = -1.1863448057949759e+20;
bool r243446 = r243444 <= r243445;
double r243447 = 914856.9161543958;
bool r243448 = r243444 <= r243447;
double r243449 = !r243448;
bool r243450 = r243446 || r243449;
double r243451 = x;
double r243452 = y;
double r243453 = 0.07512208616047561;
double r243454 = 1.0;
double r243455 = r243454 / r243444;
double r243456 = r243453 * r243455;
double r243457 = 0.0692910599291889;
double r243458 = r243456 + r243457;
double r243459 = 0.40462203869992125;
double r243460 = 2.0;
double r243461 = pow(r243444, r243460);
double r243462 = r243454 / r243461;
double r243463 = r243459 * r243462;
double r243464 = r243458 - r243463;
double r243465 = r243452 * r243464;
double r243466 = r243451 + r243465;
double r243467 = r243444 * r243457;
double r243468 = 0.4917317610505968;
double r243469 = r243467 + r243468;
double r243470 = r243469 * r243444;
double r243471 = 0.279195317918525;
double r243472 = r243470 + r243471;
double r243473 = 6.012459259764103;
double r243474 = r243444 + r243473;
double r243475 = r243474 * r243444;
double r243476 = 3.350343815022304;
double r243477 = r243475 + r243476;
double r243478 = r243472 / r243477;
double r243479 = r243452 * r243478;
double r243480 = r243451 + r243479;
double r243481 = r243450 ? r243466 : r243480;
return r243481;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -1.1863448057949759e+20 or 914856.9161543958 < z Initial program 41.6
rmApplied *-un-lft-identity41.6
Applied times-frac33.8
Simplified33.8
Taylor expanded around inf 0.0
if -1.1863448057949759e+20 < z < 914856.9161543958Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019298
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))