\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 -1.397693632282143941734861636880005481846 \cdot 10^{72}:\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999963610045597306452691555 \cdot x\right) - 110.1139242984810948655649553984403610229\\
\mathbf{elif}\;x \le 8086295065711880437760:\\
\;\;\;\;\left(x - 2\right) \cdot \left(\left(\left(\left(\left(x \cdot 4.16438922227999963610045597306452691555 + 78.69949241540000173245061887428164482117\right) \cdot x + 137.5194164160000127594685181975364685059\right) \cdot x + y\right) \cdot x + z\right) \cdot \frac{1}{\left(\left(\left(x + 43.3400022514000013984514225739985704422\right) \cdot x + 263.5050747210000281484099105000495910645\right) \cdot x + 313.3992158940000081202015280723571777344\right) \cdot x + 47.06687660600000100430406746454536914825}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \left(\left(\frac{y}{{x}^{3}} + 4.16438922227999963610045597306452691555\right) - 101.785145853921093817007204052060842514 \cdot \frac{1}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r397706 = x;
double r397707 = 2.0;
double r397708 = r397706 - r397707;
double r397709 = 4.16438922228;
double r397710 = r397706 * r397709;
double r397711 = 78.6994924154;
double r397712 = r397710 + r397711;
double r397713 = r397712 * r397706;
double r397714 = 137.519416416;
double r397715 = r397713 + r397714;
double r397716 = r397715 * r397706;
double r397717 = y;
double r397718 = r397716 + r397717;
double r397719 = r397718 * r397706;
double r397720 = z;
double r397721 = r397719 + r397720;
double r397722 = r397708 * r397721;
double r397723 = 43.3400022514;
double r397724 = r397706 + r397723;
double r397725 = r397724 * r397706;
double r397726 = 263.505074721;
double r397727 = r397725 + r397726;
double r397728 = r397727 * r397706;
double r397729 = 313.399215894;
double r397730 = r397728 + r397729;
double r397731 = r397730 * r397706;
double r397732 = 47.066876606;
double r397733 = r397731 + r397732;
double r397734 = r397722 / r397733;
return r397734;
}
double f(double x, double y, double z) {
double r397735 = x;
double r397736 = -1.397693632282144e+72;
bool r397737 = r397735 <= r397736;
double r397738 = y;
double r397739 = 2.0;
double r397740 = pow(r397735, r397739);
double r397741 = r397738 / r397740;
double r397742 = 4.16438922228;
double r397743 = r397742 * r397735;
double r397744 = r397741 + r397743;
double r397745 = 110.1139242984811;
double r397746 = r397744 - r397745;
double r397747 = 8.08629506571188e+21;
bool r397748 = r397735 <= r397747;
double r397749 = 2.0;
double r397750 = r397735 - r397749;
double r397751 = r397735 * r397742;
double r397752 = 78.6994924154;
double r397753 = r397751 + r397752;
double r397754 = r397753 * r397735;
double r397755 = 137.519416416;
double r397756 = r397754 + r397755;
double r397757 = r397756 * r397735;
double r397758 = r397757 + r397738;
double r397759 = r397758 * r397735;
double r397760 = z;
double r397761 = r397759 + r397760;
double r397762 = 1.0;
double r397763 = 43.3400022514;
double r397764 = r397735 + r397763;
double r397765 = r397764 * r397735;
double r397766 = 263.505074721;
double r397767 = r397765 + r397766;
double r397768 = r397767 * r397735;
double r397769 = 313.399215894;
double r397770 = r397768 + r397769;
double r397771 = r397770 * r397735;
double r397772 = 47.066876606;
double r397773 = r397771 + r397772;
double r397774 = r397762 / r397773;
double r397775 = r397761 * r397774;
double r397776 = r397750 * r397775;
double r397777 = 3.0;
double r397778 = pow(r397735, r397777);
double r397779 = r397738 / r397778;
double r397780 = r397779 + r397742;
double r397781 = 101.7851458539211;
double r397782 = r397762 / r397735;
double r397783 = r397781 * r397782;
double r397784 = r397780 - r397783;
double r397785 = r397750 * r397784;
double r397786 = r397748 ? r397776 : r397785;
double r397787 = r397737 ? r397746 : r397786;
return r397787;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.6 |
|---|---|
| Target | 0.5 |
| Herbie | 0.9 |
if x < -1.397693632282144e+72Initial program 64.0
Taylor expanded around inf 0.0
if -1.397693632282144e+72 < x < 8.08629506571188e+21Initial program 2.1
rmApplied *-un-lft-identity2.1
Applied times-frac0.6
Simplified0.6
rmApplied div-inv0.9
if 8.08629506571188e+21 < x Initial program 57.4
rmApplied *-un-lft-identity57.4
Applied times-frac53.4
Simplified53.4
Taylor expanded around inf 1.6
Final simplification0.9
herbie shell --seed 2020001
(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)))