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 -1.043350614437016864861199658116527863629 \cdot 10^{63} \lor \neg \left(z \le 268754673014384413935017689849467502592\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}{\sqrt[3]{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227} \cdot \sqrt[3]{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}} \cdot \frac{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\sqrt[3]{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r258728 = x;
double r258729 = y;
double r258730 = z;
double r258731 = 3.13060547623;
double r258732 = r258730 * r258731;
double r258733 = 11.1667541262;
double r258734 = r258732 + r258733;
double r258735 = r258734 * r258730;
double r258736 = t;
double r258737 = r258735 + r258736;
double r258738 = r258737 * r258730;
double r258739 = a;
double r258740 = r258738 + r258739;
double r258741 = r258740 * r258730;
double r258742 = b;
double r258743 = r258741 + r258742;
double r258744 = r258729 * r258743;
double r258745 = 15.234687407;
double r258746 = r258730 + r258745;
double r258747 = r258746 * r258730;
double r258748 = 31.4690115749;
double r258749 = r258747 + r258748;
double r258750 = r258749 * r258730;
double r258751 = 11.9400905721;
double r258752 = r258750 + r258751;
double r258753 = r258752 * r258730;
double r258754 = 0.607771387771;
double r258755 = r258753 + r258754;
double r258756 = r258744 / r258755;
double r258757 = r258728 + r258756;
return r258757;
}
double f(double x, double y, double z, double t, double a, double b) {
double r258758 = z;
double r258759 = -1.0433506144370169e+63;
bool r258760 = r258758 <= r258759;
double r258761 = 2.687546730143844e+38;
bool r258762 = r258758 <= r258761;
double r258763 = !r258762;
bool r258764 = r258760 || r258763;
double r258765 = x;
double r258766 = 3.13060547623;
double r258767 = y;
double r258768 = r258766 * r258767;
double r258769 = t;
double r258770 = r258769 * r258767;
double r258771 = 2.0;
double r258772 = pow(r258758, r258771);
double r258773 = r258770 / r258772;
double r258774 = r258768 + r258773;
double r258775 = 36.527041698806414;
double r258776 = r258767 / r258758;
double r258777 = r258775 * r258776;
double r258778 = r258774 - r258777;
double r258779 = r258765 + r258778;
double r258780 = 15.234687407;
double r258781 = r258758 + r258780;
double r258782 = r258781 * r258758;
double r258783 = 31.4690115749;
double r258784 = r258782 + r258783;
double r258785 = r258784 * r258758;
double r258786 = 11.9400905721;
double r258787 = r258785 + r258786;
double r258788 = r258787 * r258758;
double r258789 = 0.607771387771;
double r258790 = r258788 + r258789;
double r258791 = cbrt(r258790);
double r258792 = r258791 * r258791;
double r258793 = r258767 / r258792;
double r258794 = r258758 * r258766;
double r258795 = 11.1667541262;
double r258796 = r258794 + r258795;
double r258797 = r258796 * r258758;
double r258798 = r258797 + r258769;
double r258799 = r258798 * r258758;
double r258800 = a;
double r258801 = r258799 + r258800;
double r258802 = r258801 * r258758;
double r258803 = b;
double r258804 = r258802 + r258803;
double r258805 = r258804 / r258791;
double r258806 = r258793 * r258805;
double r258807 = r258765 + r258806;
double r258808 = r258764 ? r258779 : r258807;
return r258808;
}




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.5 |
|---|---|
| Target | 0.9 |
| Herbie | 4.9 |
if z < -1.0433506144370169e+63 or 2.687546730143844e+38 < z Initial program 61.2
Taylor expanded around inf 9.0
if -1.0433506144370169e+63 < z < 2.687546730143844e+38Initial program 2.6
rmApplied add-cube-cbrt2.7
Applied times-frac1.5
Final simplification4.9
herbie shell --seed 2019209
(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.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))