\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 -2.37134358210142024 \cdot 10^{57} \lor \neg \left(x \le 6.95058600294961662 \cdot 10^{46}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\left(\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001\right) \cdot \frac{1}{\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 r431775 = x;
double r431776 = 2.0;
double r431777 = r431775 - r431776;
double r431778 = 4.16438922228;
double r431779 = r431775 * r431778;
double r431780 = 78.6994924154;
double r431781 = r431779 + r431780;
double r431782 = r431781 * r431775;
double r431783 = 137.519416416;
double r431784 = r431782 + r431783;
double r431785 = r431784 * r431775;
double r431786 = y;
double r431787 = r431785 + r431786;
double r431788 = r431787 * r431775;
double r431789 = z;
double r431790 = r431788 + r431789;
double r431791 = r431777 * r431790;
double r431792 = 43.3400022514;
double r431793 = r431775 + r431792;
double r431794 = r431793 * r431775;
double r431795 = 263.505074721;
double r431796 = r431794 + r431795;
double r431797 = r431796 * r431775;
double r431798 = 313.399215894;
double r431799 = r431797 + r431798;
double r431800 = r431799 * r431775;
double r431801 = 47.066876606;
double r431802 = r431800 + r431801;
double r431803 = r431791 / r431802;
return r431803;
}
double f(double x, double y, double z) {
double r431804 = x;
double r431805 = -2.3713435821014202e+57;
bool r431806 = r431804 <= r431805;
double r431807 = 6.950586002949617e+46;
bool r431808 = r431804 <= r431807;
double r431809 = !r431808;
bool r431810 = r431806 || r431809;
double r431811 = y;
double r431812 = 2.0;
double r431813 = pow(r431804, r431812);
double r431814 = r431811 / r431813;
double r431815 = 4.16438922228;
double r431816 = r431815 * r431804;
double r431817 = r431814 + r431816;
double r431818 = 110.1139242984811;
double r431819 = r431817 - r431818;
double r431820 = 2.0;
double r431821 = r431804 - r431820;
double r431822 = 43.3400022514;
double r431823 = r431804 + r431822;
double r431824 = r431823 * r431804;
double r431825 = 263.505074721;
double r431826 = r431824 + r431825;
double r431827 = r431826 * r431804;
double r431828 = 313.399215894;
double r431829 = r431827 + r431828;
double r431830 = r431829 * r431804;
double r431831 = 47.066876606;
double r431832 = r431830 + r431831;
double r431833 = 1.0;
double r431834 = r431804 * r431815;
double r431835 = 78.6994924154;
double r431836 = r431834 + r431835;
double r431837 = r431836 * r431804;
double r431838 = 137.519416416;
double r431839 = r431837 + r431838;
double r431840 = r431839 * r431804;
double r431841 = r431840 + r431811;
double r431842 = r431841 * r431804;
double r431843 = z;
double r431844 = r431842 + r431843;
double r431845 = r431833 / r431844;
double r431846 = r431832 * r431845;
double r431847 = r431821 / r431846;
double r431848 = r431810 ? r431819 : r431847;
return r431848;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.3 |
|---|---|
| Target | 0.4 |
| Herbie | 0.7 |
if x < -2.3713435821014202e+57 or 6.950586002949617e+46 < x Initial program 62.0
Taylor expanded around inf 0.5
if -2.3713435821014202e+57 < x < 6.950586002949617e+46Initial program 1.1
rmApplied associate-/l*0.7
rmApplied div-inv0.7
Final simplification0.7
herbie shell --seed 2020042
(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)))