\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 -4.66503060680459687 \cdot 10^{72} \lor \neg \left(x \le 6.7328323193843391 \cdot 10^{53}\right):\\
\;\;\;\;\left(x - 2\right) \cdot \left(\left(\frac{y}{{x}^{3}} + 4.16438922227999964\right) - 101.785145853921094 \cdot \frac{1}{x}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(x - 2\right) \cdot \frac{\left(\left(\left(x \cdot 4.16438922227999964 + 78.6994924154000017\right) \cdot x + 137.51941641600001\right) \cdot x + 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 r339674 = x;
double r339675 = 2.0;
double r339676 = r339674 - r339675;
double r339677 = 4.16438922228;
double r339678 = r339674 * r339677;
double r339679 = 78.6994924154;
double r339680 = r339678 + r339679;
double r339681 = r339680 * r339674;
double r339682 = 137.519416416;
double r339683 = r339681 + r339682;
double r339684 = r339683 * r339674;
double r339685 = y;
double r339686 = r339684 + r339685;
double r339687 = r339686 * r339674;
double r339688 = z;
double r339689 = r339687 + r339688;
double r339690 = r339676 * r339689;
double r339691 = 43.3400022514;
double r339692 = r339674 + r339691;
double r339693 = r339692 * r339674;
double r339694 = 263.505074721;
double r339695 = r339693 + r339694;
double r339696 = r339695 * r339674;
double r339697 = 313.399215894;
double r339698 = r339696 + r339697;
double r339699 = r339698 * r339674;
double r339700 = 47.066876606;
double r339701 = r339699 + r339700;
double r339702 = r339690 / r339701;
return r339702;
}
double f(double x, double y, double z) {
double r339703 = x;
double r339704 = -4.665030606804597e+72;
bool r339705 = r339703 <= r339704;
double r339706 = 6.732832319384339e+53;
bool r339707 = r339703 <= r339706;
double r339708 = !r339707;
bool r339709 = r339705 || r339708;
double r339710 = 2.0;
double r339711 = r339703 - r339710;
double r339712 = y;
double r339713 = 3.0;
double r339714 = pow(r339703, r339713);
double r339715 = r339712 / r339714;
double r339716 = 4.16438922228;
double r339717 = r339715 + r339716;
double r339718 = 101.7851458539211;
double r339719 = 1.0;
double r339720 = r339719 / r339703;
double r339721 = r339718 * r339720;
double r339722 = r339717 - r339721;
double r339723 = r339711 * r339722;
double r339724 = r339703 * r339716;
double r339725 = 78.6994924154;
double r339726 = r339724 + r339725;
double r339727 = r339726 * r339703;
double r339728 = 137.519416416;
double r339729 = r339727 + r339728;
double r339730 = r339729 * r339703;
double r339731 = r339730 + r339712;
double r339732 = r339731 * r339703;
double r339733 = z;
double r339734 = r339732 + r339733;
double r339735 = 43.3400022514;
double r339736 = r339703 + r339735;
double r339737 = r339736 * r339703;
double r339738 = 263.505074721;
double r339739 = r339737 + r339738;
double r339740 = r339739 * r339703;
double r339741 = 313.399215894;
double r339742 = r339740 + r339741;
double r339743 = r339742 * r339703;
double r339744 = 47.066876606;
double r339745 = r339743 + r339744;
double r339746 = r339734 / r339745;
double r339747 = r339711 * r339746;
double r339748 = r339709 ? r339723 : r339747;
return r339748;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 27.1 |
|---|---|
| Target | 0.4 |
| Herbie | 0.4 |
if x < -4.665030606804597e+72 or 6.732832319384339e+53 < x Initial program 63.5
rmApplied *-un-lft-identity63.5
Applied times-frac60.8
Simplified60.8
Taylor expanded around inf 0.3
if -4.665030606804597e+72 < x < 6.732832319384339e+53Initial program 2.4
rmApplied *-un-lft-identity2.4
Applied times-frac0.5
Simplified0.5
Final simplification0.4
herbie shell --seed 2020060
(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)))