x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}\begin{array}{l}
\mathbf{if}\;z \le -2.543298083476128238862421340438293592178 \cdot 10^{70} \lor \neg \left(z \le 2.610770306171521983695485978089202927343 \cdot 10^{63}\right):\\
\;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r266664 = x;
double r266665 = y;
double r266666 = z;
double r266667 = 3.13060547623;
double r266668 = r266666 * r266667;
double r266669 = 11.1667541262;
double r266670 = r266668 + r266669;
double r266671 = r266670 * r266666;
double r266672 = t;
double r266673 = r266671 + r266672;
double r266674 = r266673 * r266666;
double r266675 = a;
double r266676 = r266674 + r266675;
double r266677 = r266676 * r266666;
double r266678 = b;
double r266679 = r266677 + r266678;
double r266680 = r266665 * r266679;
double r266681 = 15.234687407;
double r266682 = r266666 + r266681;
double r266683 = r266682 * r266666;
double r266684 = 31.4690115749;
double r266685 = r266683 + r266684;
double r266686 = r266685 * r266666;
double r266687 = 11.9400905721;
double r266688 = r266686 + r266687;
double r266689 = r266688 * r266666;
double r266690 = 0.607771387771;
double r266691 = r266689 + r266690;
double r266692 = r266680 / r266691;
double r266693 = r266664 + r266692;
return r266693;
}
double f(double x, double y, double z, double t, double a, double b) {
double r266694 = z;
double r266695 = -2.5432980834761282e+70;
bool r266696 = r266694 <= r266695;
double r266697 = 2.610770306171522e+63;
bool r266698 = r266694 <= r266697;
double r266699 = !r266698;
bool r266700 = r266696 || r266699;
double r266701 = x;
double r266702 = 3.13060547623;
double r266703 = y;
double r266704 = r266702 * r266703;
double r266705 = t;
double r266706 = r266705 * r266703;
double r266707 = 2.0;
double r266708 = pow(r266694, r266707);
double r266709 = r266706 / r266708;
double r266710 = r266704 + r266709;
double r266711 = 36.527041698806414;
double r266712 = r266703 / r266694;
double r266713 = r266711 * r266712;
double r266714 = r266710 - r266713;
double r266715 = r266701 + r266714;
double r266716 = 15.234687407;
double r266717 = r266694 + r266716;
double r266718 = r266717 * r266694;
double r266719 = 31.4690115749;
double r266720 = r266718 + r266719;
double r266721 = r266720 * r266694;
double r266722 = 11.9400905721;
double r266723 = r266721 + r266722;
double r266724 = r266723 * r266694;
double r266725 = 0.607771387771;
double r266726 = r266724 + r266725;
double r266727 = r266694 * r266702;
double r266728 = 11.1667541262;
double r266729 = r266727 + r266728;
double r266730 = r266729 * r266694;
double r266731 = r266730 + r266705;
double r266732 = r266731 * r266694;
double r266733 = a;
double r266734 = r266732 + r266733;
double r266735 = r266734 * r266694;
double r266736 = b;
double r266737 = r266735 + r266736;
double r266738 = r266726 / r266737;
double r266739 = r266703 / r266738;
double r266740 = r266701 + r266739;
double r266741 = r266700 ? r266715 : r266740;
return r266741;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
Results
| Original | 29.2 |
|---|---|
| Target | 1.1 |
| Herbie | 4.6 |
if z < -2.5432980834761282e+70 or 2.610770306171522e+63 < z Initial program 62.9
Taylor expanded around inf 7.9
if -2.5432980834761282e+70 < z < 2.610770306171522e+63Initial program 4.4
rmApplied associate-/l*2.1
Final simplification4.6
herbie shell --seed 2019325
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:precision binary64
:herbie-target
(if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.066965436914287e+59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771) (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771))))