\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 -5.30632711353810765 \cdot 10^{24}:\\
\;\;\;\;\left(\frac{y}{{x}^{2}} + 4.16438922227999964 \cdot x\right) - 110.11392429848109\\
\mathbf{elif}\;x \le 3.111579507262274 \cdot 10^{42}:\\
\;\;\;\;\left(x - 2\right) \cdot \left(\left(\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + y\right) \cdot x + z\right) \cdot \frac{1}{\left(\left(\left(x + 43.3400022514000014\right) \cdot x + 263.50507472100003\right) \cdot x + 313.399215894\right) \cdot x + 47.066876606000001}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \left(\left(\frac{y}{{x}^{3}} + 4.16438922227999964\right) - 101.785145853921094 \cdot \frac{1}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r356650 = x;
double r356651 = 2.0;
double r356652 = r356650 - r356651;
double r356653 = 4.16438922228;
double r356654 = r356650 * r356653;
double r356655 = 78.6994924154;
double r356656 = r356654 + r356655;
double r356657 = r356656 * r356650;
double r356658 = 137.519416416;
double r356659 = r356657 + r356658;
double r356660 = r356659 * r356650;
double r356661 = y;
double r356662 = r356660 + r356661;
double r356663 = r356662 * r356650;
double r356664 = z;
double r356665 = r356663 + r356664;
double r356666 = r356652 * r356665;
double r356667 = 43.3400022514;
double r356668 = r356650 + r356667;
double r356669 = r356668 * r356650;
double r356670 = 263.505074721;
double r356671 = r356669 + r356670;
double r356672 = r356671 * r356650;
double r356673 = 313.399215894;
double r356674 = r356672 + r356673;
double r356675 = r356674 * r356650;
double r356676 = 47.066876606;
double r356677 = r356675 + r356676;
double r356678 = r356666 / r356677;
return r356678;
}
double f(double x, double y, double z) {
double r356679 = x;
double r356680 = -5.306327113538108e+24;
bool r356681 = r356679 <= r356680;
double r356682 = y;
double r356683 = 2.0;
double r356684 = pow(r356679, r356683);
double r356685 = r356682 / r356684;
double r356686 = 4.16438922228;
double r356687 = r356686 * r356679;
double r356688 = r356685 + r356687;
double r356689 = 110.1139242984811;
double r356690 = r356688 - r356689;
double r356691 = 3.111579507262274e+42;
bool r356692 = r356679 <= r356691;
double r356693 = 2.0;
double r356694 = r356679 - r356693;
double r356695 = r356679 * r356686;
double r356696 = 78.6994924154;
double r356697 = r356695 + r356696;
double r356698 = r356697 * r356679;
double r356699 = 137.519416416;
double r356700 = r356698 + r356699;
double r356701 = r356700 * r356679;
double r356702 = r356701 + r356682;
double r356703 = r356702 * r356679;
double r356704 = z;
double r356705 = r356703 + r356704;
double r356706 = 1.0;
double r356707 = 43.3400022514;
double r356708 = r356679 + r356707;
double r356709 = r356708 * r356679;
double r356710 = 263.505074721;
double r356711 = r356709 + r356710;
double r356712 = r356711 * r356679;
double r356713 = 313.399215894;
double r356714 = r356712 + r356713;
double r356715 = r356714 * r356679;
double r356716 = 47.066876606;
double r356717 = r356715 + r356716;
double r356718 = r356706 / r356717;
double r356719 = r356705 * r356718;
double r356720 = r356694 * r356719;
double r356721 = 3.0;
double r356722 = pow(r356679, r356721);
double r356723 = r356682 / r356722;
double r356724 = r356723 + r356686;
double r356725 = 101.7851458539211;
double r356726 = r356706 / r356679;
double r356727 = r356725 * r356726;
double r356728 = r356724 - r356727;
double r356729 = r356694 * r356728;
double r356730 = r356692 ? r356720 : r356729;
double r356731 = r356681 ? r356690 : r356730;
return r356731;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 26.9 |
|---|---|
| Target | 0.5 |
| Herbie | 1.0 |
if x < -5.306327113538108e+24Initial program 57.9
Taylor expanded around inf 1.7
if -5.306327113538108e+24 < x < 3.111579507262274e+42Initial program 0.7
rmApplied *-un-lft-identity0.7
Applied times-frac0.3
Simplified0.3
rmApplied div-inv0.7
if 3.111579507262274e+42 < x Initial program 61.1
rmApplied *-un-lft-identity61.1
Applied times-frac57.3
Simplified57.3
Taylor expanded around inf 0.8
Final simplification1.0
herbie shell --seed 2020034
(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)))