\frac{\left(x - 2\right) \cdot \left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right)}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\begin{array}{l}
\mathbf{if}\;x \le -5.741693258524662747095892486951768886156 \cdot 10^{62} \lor \neg \left(x \le 4.720269174859224845800342392444799647478 \cdot 10^{62}\right):\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{else}:\\
\;\;\;\;\frac{x - 2}{\sqrt{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}} \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z}{\sqrt{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}}\\
\end{array}double f(double x, double y, double z) {
double r303701 = x;
double r303702 = 2.0;
double r303703 = r303701 - r303702;
double r303704 = 4.16438922228;
double r303705 = r303701 * r303704;
double r303706 = 78.6994924154;
double r303707 = r303705 + r303706;
double r303708 = r303707 * r303701;
double r303709 = 137.519416416;
double r303710 = r303708 + r303709;
double r303711 = r303710 * r303701;
double r303712 = y;
double r303713 = r303711 + r303712;
double r303714 = r303713 * r303701;
double r303715 = z;
double r303716 = r303714 + r303715;
double r303717 = r303703 * r303716;
double r303718 = 43.3400022514;
double r303719 = r303701 + r303718;
double r303720 = r303719 * r303701;
double r303721 = 263.505074721;
double r303722 = r303720 + r303721;
double r303723 = r303722 * r303701;
double r303724 = 313.399215894;
double r303725 = r303723 + r303724;
double r303726 = r303725 * r303701;
double r303727 = 47.066876606;
double r303728 = r303726 + r303727;
double r303729 = r303717 / r303728;
return r303729;
}
double f(double x, double y, double z) {
double r303730 = x;
double r303731 = -5.741693258524663e+62;
bool r303732 = r303730 <= r303731;
double r303733 = 4.720269174859225e+62;
bool r303734 = r303730 <= r303733;
double r303735 = !r303734;
bool r303736 = r303732 || r303735;
double r303737 = y;
double r303738 = 2.0;
double r303739 = pow(r303730, r303738);
double r303740 = r303737 / r303739;
double r303741 = 4.16438922228;
double r303742 = r303741 * r303730;
double r303743 = r303740 + r303742;
double r303744 = 110.1139242984811;
double r303745 = r303743 - r303744;
double r303746 = 2.0;
double r303747 = r303730 - r303746;
double r303748 = 43.3400022514;
double r303749 = r303730 + r303748;
double r303750 = r303749 * r303730;
double r303751 = 263.505074721;
double r303752 = r303750 + r303751;
double r303753 = r303752 * r303730;
double r303754 = 313.399215894;
double r303755 = r303753 + r303754;
double r303756 = r303755 * r303730;
double r303757 = 47.066876606;
double r303758 = r303756 + r303757;
double r303759 = sqrt(r303758);
double r303760 = r303747 / r303759;
double r303761 = r303730 * r303741;
double r303762 = 78.6994924154;
double r303763 = r303761 + r303762;
double r303764 = r303763 * r303730;
double r303765 = 137.519416416;
double r303766 = r303764 + r303765;
double r303767 = r303766 * r303730;
double r303768 = r303767 + r303737;
double r303769 = r303768 * r303730;
double r303770 = z;
double r303771 = r303769 + r303770;
double r303772 = r303771 / r303759;
double r303773 = r303760 * r303772;
double r303774 = r303736 ? r303745 : r303773;
return r303774;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.6 |
|---|---|
| Target | 0.5 |
| Herbie | 0.7 |
if x < -5.741693258524663e+62 or 4.720269174859225e+62 < x Initial program 64.0
Taylor expanded around inf 0.3
if -5.741693258524663e+62 < x < 4.720269174859225e+62Initial program 1.8
rmApplied add-sqr-sqrt1.9
Applied times-frac1.0
Final simplification0.7
herbie shell --seed 2019297
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, C"
:precision binary64
:herbie-target
(if (< x -3.3261287258700048e62) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109) (if (< x 9.4299917145546727e55) (* (/ (- x 2) 1) (/ (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z) (+ (* (+ (+ (* 263.50507472100003 x) (+ (* 43.3400022514000014 (* x x)) (* x (* x x)))) 313.399215894) x) 47.066876606000001))) (- (+ (/ y (* x x)) (* 4.16438922227999964 x)) 110.11392429848109)))
(/ (* (- x 2) (+ (* (+ (* (+ (* (+ (* x 4.16438922227999964) 78.6994924154000017) x) 137.51941641600001) x) y) x) z)) (+ (* (+ (* (+ (* (+ x 43.3400022514000014) x) 263.50507472100003) x) 313.399215894) x) 47.066876606000001)))