\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\begin{array}{l}
\mathbf{if}\;x \le -8.08485983205999589 \cdot 10^{65} \lor \neg \left(x \le 5.2673144129858201 \cdot 10^{60}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\frac{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z}}\\
\end{array}double f(double x, double y, double z) {
double r562677 = x;
double r562678 = 2.0;
double r562679 = r562677 - r562678;
double r562680 = 4.16438922228;
double r562681 = r562677 * r562680;
double r562682 = 78.6994924154;
double r562683 = r562681 + r562682;
double r562684 = r562683 * r562677;
double r562685 = 137.519416416;
double r562686 = r562684 + r562685;
double r562687 = r562686 * r562677;
double r562688 = y;
double r562689 = r562687 + r562688;
double r562690 = r562689 * r562677;
double r562691 = z;
double r562692 = r562690 + r562691;
double r562693 = r562679 * r562692;
double r562694 = 43.3400022514;
double r562695 = r562677 + r562694;
double r562696 = r562695 * r562677;
double r562697 = 263.505074721;
double r562698 = r562696 + r562697;
double r562699 = r562698 * r562677;
double r562700 = 313.399215894;
double r562701 = r562699 + r562700;
double r562702 = r562701 * r562677;
double r562703 = 47.066876606;
double r562704 = r562702 + r562703;
double r562705 = r562693 / r562704;
return r562705;
}
double f(double x, double y, double z) {
double r562706 = x;
double r562707 = -8.084859832059996e+65;
bool r562708 = r562706 <= r562707;
double r562709 = 5.26731441298582e+60;
bool r562710 = r562706 <= r562709;
double r562711 = !r562710;
bool r562712 = r562708 || r562711;
double r562713 = y;
double r562714 = 2.0;
double r562715 = pow(r562706, r562714);
double r562716 = r562713 / r562715;
double r562717 = 4.16438922228;
double r562718 = r562717 * r562706;
double r562719 = r562716 + r562718;
double r562720 = 110.1139242984811;
double r562721 = r562719 - r562720;
double r562722 = 2.0;
double r562723 = r562706 - r562722;
double r562724 = 43.3400022514;
double r562725 = r562706 + r562724;
double r562726 = r562725 * r562706;
double r562727 = 263.505074721;
double r562728 = r562726 + r562727;
double r562729 = r562728 * r562706;
double r562730 = 313.399215894;
double r562731 = r562729 + r562730;
double r562732 = r562731 * r562706;
double r562733 = 47.066876606;
double r562734 = r562732 + r562733;
double r562735 = r562706 * r562717;
double r562736 = 78.6994924154;
double r562737 = r562735 + r562736;
double r562738 = r562737 * r562706;
double r562739 = 137.519416416;
double r562740 = r562738 + r562739;
double r562741 = r562740 * r562706;
double r562742 = r562741 + r562713;
double r562743 = r562742 * r562706;
double r562744 = z;
double r562745 = r562743 + r562744;
double r562746 = r562734 / r562745;
double r562747 = r562723 / r562746;
double r562748 = r562712 ? r562721 : r562747;
return r562748;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 25.7 |
|---|---|
| Target | 0.6 |
| Herbie | 0.7 |
if x < -8.084859832059996e+65 or 5.26731441298582e+60 < x Initial program 64.0
Taylor expanded around inf 0.2
if -8.084859832059996e+65 < x < 5.26731441298582e+60Initial program 2.0
rmApplied associate-/l*0.9
Final simplification0.7
herbie shell --seed 2020035
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.326128725870005e+62) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811) (if (< x 9.429991714554673e+55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z) (+ (* (+ (+ (* 263.505074721 x) (+ (* 43.3400022514 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606))) (- (+ (/ y (* x x)) (* 4.16438922228 x)) 110.1139242984811)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922228) 78.6994924154) x) 137.519416416) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514) x) 263.505074721) x) 313.399215894) x) 47.066876606)))