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 -252224470884185145344 \lor \neg \left(z \le \frac{7611215845031975}{4722366482869645213696}\right):\\
\;\;\;\;x + \left(\left(\frac{1353279196958449}{18014398509481984} \cdot \frac{y}{z} + \frac{4992947066835229}{72057594037927936} \cdot y\right) - \frac{7289022650859423}{18014398509481984} \cdot \frac{y}{{z}^{2}}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y \cdot \left(\left(z \cdot \frac{4992947066835229}{72057594037927936} + \frac{4429125951667411}{9007199254740992}\right) \cdot z\right) + y \cdot \frac{5029535718965825}{18014398509481984}}{\left(z + \frac{1692356830115869}{281474976710656}\right) \cdot z + \frac{7544303578448747}{2251799813685248}}\\
\end{array}double f(double x, double y, double z) {
double r317495 = x;
double r317496 = y;
double r317497 = z;
double r317498 = 0.0692910599291889;
double r317499 = r317497 * r317498;
double r317500 = 0.4917317610505968;
double r317501 = r317499 + r317500;
double r317502 = r317501 * r317497;
double r317503 = 0.279195317918525;
double r317504 = r317502 + r317503;
double r317505 = r317496 * r317504;
double r317506 = 6.012459259764103;
double r317507 = r317497 + r317506;
double r317508 = r317507 * r317497;
double r317509 = 3.350343815022304;
double r317510 = r317508 + r317509;
double r317511 = r317505 / r317510;
double r317512 = r317495 + r317511;
return r317512;
}
double f(double x, double y, double z) {
double r317513 = z;
double r317514 = -2.5222447088418515e+20;
bool r317515 = r317513 <= r317514;
double r317516 = 7611215845031975.0;
double r317517 = 4.722366482869645e+21;
double r317518 = r317516 / r317517;
bool r317519 = r317513 <= r317518;
double r317520 = !r317519;
bool r317521 = r317515 || r317520;
double r317522 = x;
double r317523 = 1353279196958449.0;
double r317524 = 18014398509481984.0;
double r317525 = r317523 / r317524;
double r317526 = y;
double r317527 = r317526 / r317513;
double r317528 = r317525 * r317527;
double r317529 = 4992947066835229.0;
double r317530 = 7.205759403792794e+16;
double r317531 = r317529 / r317530;
double r317532 = r317531 * r317526;
double r317533 = r317528 + r317532;
double r317534 = 7289022650859423.0;
double r317535 = r317534 / r317524;
double r317536 = 2.0;
double r317537 = pow(r317513, r317536);
double r317538 = r317526 / r317537;
double r317539 = r317535 * r317538;
double r317540 = r317533 - r317539;
double r317541 = r317522 + r317540;
double r317542 = r317513 * r317531;
double r317543 = 4429125951667411.0;
double r317544 = 9007199254740992.0;
double r317545 = r317543 / r317544;
double r317546 = r317542 + r317545;
double r317547 = r317546 * r317513;
double r317548 = r317526 * r317547;
double r317549 = 5029535718965825.0;
double r317550 = r317549 / r317524;
double r317551 = r317526 * r317550;
double r317552 = r317548 + r317551;
double r317553 = 1692356830115869.0;
double r317554 = 281474976710656.0;
double r317555 = r317553 / r317554;
double r317556 = r317513 + r317555;
double r317557 = r317556 * r317513;
double r317558 = 7544303578448747.0;
double r317559 = 2251799813685248.0;
double r317560 = r317558 / r317559;
double r317561 = r317557 + r317560;
double r317562 = r317552 / r317561;
double r317563 = r317522 + r317562;
double r317564 = r317521 ? r317541 : r317563;
return r317564;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.4 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if z < -2.5222447088418515e+20 or 1.611737647351516e-06 < z Initial program 41.7
Simplified41.7
rmApplied associate-/l*33.5
Taylor expanded around inf 0.4
Simplified0.4
if -2.5222447088418515e+20 < z < 1.611737647351516e-06Initial program 0.2
Simplified0.2
rmApplied distribute-lft-in0.2
Final simplification0.3
herbie shell --seed 2019304
(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))))