\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 r440762 = x;
double r440763 = 2.0;
double r440764 = r440762 - r440763;
double r440765 = 4.16438922228;
double r440766 = r440762 * r440765;
double r440767 = 78.6994924154;
double r440768 = r440766 + r440767;
double r440769 = r440768 * r440762;
double r440770 = 137.519416416;
double r440771 = r440769 + r440770;
double r440772 = r440771 * r440762;
double r440773 = y;
double r440774 = r440772 + r440773;
double r440775 = r440774 * r440762;
double r440776 = z;
double r440777 = r440775 + r440776;
double r440778 = r440764 * r440777;
double r440779 = 43.3400022514;
double r440780 = r440762 + r440779;
double r440781 = r440780 * r440762;
double r440782 = 263.505074721;
double r440783 = r440781 + r440782;
double r440784 = r440783 * r440762;
double r440785 = 313.399215894;
double r440786 = r440784 + r440785;
double r440787 = r440786 * r440762;
double r440788 = 47.066876606;
double r440789 = r440787 + r440788;
double r440790 = r440778 / r440789;
return r440790;
}
double f(double x, double y, double z) {
double r440791 = x;
double r440792 = -3.6703550399327607e+43;
bool r440793 = r440791 <= r440792;
double r440794 = 3.7248869126440915e+43;
bool r440795 = r440791 <= r440794;
double r440796 = !r440795;
bool r440797 = r440793 || r440796;
double r440798 = y;
double r440799 = 2.0;
double r440800 = pow(r440791, r440799);
double r440801 = r440798 / r440800;
double r440802 = 4.16438922228;
double r440803 = r440802 * r440791;
double r440804 = r440801 + r440803;
double r440805 = 110.1139242984811;
double r440806 = r440804 - r440805;
double r440807 = 2.0;
double r440808 = r440791 - r440807;
double r440809 = r440791 * r440802;
double r440810 = 78.6994924154;
double r440811 = r440809 + r440810;
double r440812 = r440811 * r440791;
double r440813 = 3.0;
double r440814 = pow(r440812, r440813);
double r440815 = 137.519416416;
double r440816 = pow(r440815, r440813);
double r440817 = r440814 + r440816;
double r440818 = r440817 * r440791;
double r440819 = r440812 * r440812;
double r440820 = r440815 * r440815;
double r440821 = r440812 * r440815;
double r440822 = r440820 - r440821;
double r440823 = r440819 + r440822;
double r440824 = r440818 / r440823;
double r440825 = r440824 + r440798;
double r440826 = r440825 * r440791;
double r440827 = z;
double r440828 = r440826 + r440827;
double r440829 = 43.3400022514;
double r440830 = r440791 + r440829;
double r440831 = r440830 * r440791;
double r440832 = 263.505074721;
double r440833 = r440831 + r440832;
double r440834 = r440833 * r440791;
double r440835 = 313.399215894;
double r440836 = r440834 + r440835;
double r440837 = r440836 * r440791;
double r440838 = 47.066876606;
double r440839 = r440837 + r440838;
double r440840 = r440828 / r440839;
double r440841 = r440808 * r440840;
double r440842 = r440797 ? r440806 : r440841;
return r440842;
}




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)))