\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 -3.67035503993276071 \cdot 10^{43} \lor \neg \left(x \le 3.7248869126440915 \cdot 10^{43}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\left(\frac{\left({\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x\right)}^{3} + {137.51941641600001}^{3}\right) \cdot x}{\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x\right) \cdot \left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x\right) + \left(137.51941641600001 \cdot 137.51941641600001 - \left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x\right) \cdot 137.51941641600001\right)} + y\right) \cdot x + z}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\\
\end{array}double f(double x, double y, double z) {
double r435740 = x;
double r435741 = 2.0;
double r435742 = r435740 - r435741;
double r435743 = 4.16438922228;
double r435744 = r435740 * r435743;
double r435745 = 78.6994924154;
double r435746 = r435744 + r435745;
double r435747 = r435746 * r435740;
double r435748 = 137.519416416;
double r435749 = r435747 + r435748;
double r435750 = r435749 * r435740;
double r435751 = y;
double r435752 = r435750 + r435751;
double r435753 = r435752 * r435740;
double r435754 = z;
double r435755 = r435753 + r435754;
double r435756 = r435742 * r435755;
double r435757 = 43.3400022514;
double r435758 = r435740 + r435757;
double r435759 = r435758 * r435740;
double r435760 = 263.505074721;
double r435761 = r435759 + r435760;
double r435762 = r435761 * r435740;
double r435763 = 313.399215894;
double r435764 = r435762 + r435763;
double r435765 = r435764 * r435740;
double r435766 = 47.066876606;
double r435767 = r435765 + r435766;
double r435768 = r435756 / r435767;
return r435768;
}
double f(double x, double y, double z) {
double r435769 = x;
double r435770 = -3.6703550399327607e+43;
bool r435771 = r435769 <= r435770;
double r435772 = 3.7248869126440915e+43;
bool r435773 = r435769 <= r435772;
double r435774 = !r435773;
bool r435775 = r435771 || r435774;
double r435776 = y;
double r435777 = 2.0;
double r435778 = pow(r435769, r435777);
double r435779 = r435776 / r435778;
double r435780 = 4.16438922228;
double r435781 = r435780 * r435769;
double r435782 = r435779 + r435781;
double r435783 = 110.1139242984811;
double r435784 = r435782 - r435783;
double r435785 = 2.0;
double r435786 = r435769 - r435785;
double r435787 = r435769 * r435780;
double r435788 = 78.6994924154;
double r435789 = r435787 + r435788;
double r435790 = r435789 * r435769;
double r435791 = 3.0;
double r435792 = pow(r435790, r435791);
double r435793 = 137.519416416;
double r435794 = pow(r435793, r435791);
double r435795 = r435792 + r435794;
double r435796 = r435795 * r435769;
double r435797 = r435790 * r435790;
double r435798 = r435793 * r435793;
double r435799 = r435790 * r435793;
double r435800 = r435798 - r435799;
double r435801 = r435797 + r435800;
double r435802 = r435796 / r435801;
double r435803 = r435802 + r435776;
double r435804 = r435803 * r435769;
double r435805 = z;
double r435806 = r435804 + r435805;
double r435807 = 43.3400022514;
double r435808 = r435769 + r435807;
double r435809 = r435808 * r435769;
double r435810 = 263.505074721;
double r435811 = r435809 + r435810;
double r435812 = r435811 * r435769;
double r435813 = 313.399215894;
double r435814 = r435812 + r435813;
double r435815 = r435814 * r435769;
double r435816 = 47.066876606;
double r435817 = r435815 + r435816;
double r435818 = r435806 / r435817;
double r435819 = r435786 * r435818;
double r435820 = r435775 ? r435784 : r435819;
return r435820;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 27.5 |
|---|---|
| Target | 0.5 |
| Herbie | 0.5 |
if x < -3.6703550399327607e+43 or 3.7248869126440915e+43 < x Initial program 61.0
Taylor expanded around inf 0.6
if -3.6703550399327607e+43 < x < 3.7248869126440915e+43Initial program 1.1
rmApplied *-un-lft-identity1.1
Applied times-frac0.4
Simplified0.4
rmApplied flip3-+0.5
Applied associate-*l/0.5
Final simplification0.5
herbie shell --seed 2020047
(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)))