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 r250736 = x;
double r250737 = y;
double r250738 = z;
double r250739 = 3.13060547623;
double r250740 = r250738 * r250739;
double r250741 = 11.1667541262;
double r250742 = r250740 + r250741;
double r250743 = r250742 * r250738;
double r250744 = t;
double r250745 = r250743 + r250744;
double r250746 = r250745 * r250738;
double r250747 = a;
double r250748 = r250746 + r250747;
double r250749 = r250748 * r250738;
double r250750 = b;
double r250751 = r250749 + r250750;
double r250752 = r250737 * r250751;
double r250753 = 15.234687407;
double r250754 = r250738 + r250753;
double r250755 = r250754 * r250738;
double r250756 = 31.4690115749;
double r250757 = r250755 + r250756;
double r250758 = r250757 * r250738;
double r250759 = 11.9400905721;
double r250760 = r250758 + r250759;
double r250761 = r250760 * r250738;
double r250762 = 0.607771387771;
double r250763 = r250761 + r250762;
double r250764 = r250752 / r250763;
double r250765 = r250736 + r250764;
return r250765;
}
double f(double x, double y, double z, double t, double a, double b) {
double r250766 = z;
double r250767 = -2.5432980834761282e+70;
bool r250768 = r250766 <= r250767;
double r250769 = 2.610770306171522e+63;
bool r250770 = r250766 <= r250769;
double r250771 = !r250770;
bool r250772 = r250768 || r250771;
double r250773 = x;
double r250774 = 3.13060547623;
double r250775 = y;
double r250776 = r250774 * r250775;
double r250777 = t;
double r250778 = r250777 * r250775;
double r250779 = 2.0;
double r250780 = pow(r250766, r250779);
double r250781 = r250778 / r250780;
double r250782 = r250776 + r250781;
double r250783 = 36.527041698806414;
double r250784 = r250775 / r250766;
double r250785 = r250783 * r250784;
double r250786 = r250782 - r250785;
double r250787 = r250773 + r250786;
double r250788 = 15.234687407;
double r250789 = r250766 + r250788;
double r250790 = r250789 * r250766;
double r250791 = 31.4690115749;
double r250792 = r250790 + r250791;
double r250793 = r250792 * r250766;
double r250794 = 11.9400905721;
double r250795 = r250793 + r250794;
double r250796 = r250795 * r250766;
double r250797 = 0.607771387771;
double r250798 = r250796 + r250797;
double r250799 = r250766 * r250774;
double r250800 = 11.1667541262;
double r250801 = r250799 + r250800;
double r250802 = r250801 * r250766;
double r250803 = r250802 + r250777;
double r250804 = r250803 * r250766;
double r250805 = a;
double r250806 = r250804 + r250805;
double r250807 = r250806 * r250766;
double r250808 = b;
double r250809 = r250807 + r250808;
double r250810 = r250798 / r250809;
double r250811 = r250775 / r250810;
double r250812 = r250773 + r250811;
double r250813 = r250772 ? r250787 : r250812;
return r250813;
}




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))))