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 -3.978483443952488632012241591332400099399 \cdot 10^{48} \lor \neg \left(z \le 8.559962113309013051011544276033877945173 \cdot 10^{55}\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 r396783 = x;
double r396784 = y;
double r396785 = z;
double r396786 = 3.13060547623;
double r396787 = r396785 * r396786;
double r396788 = 11.1667541262;
double r396789 = r396787 + r396788;
double r396790 = r396789 * r396785;
double r396791 = t;
double r396792 = r396790 + r396791;
double r396793 = r396792 * r396785;
double r396794 = a;
double r396795 = r396793 + r396794;
double r396796 = r396795 * r396785;
double r396797 = b;
double r396798 = r396796 + r396797;
double r396799 = r396784 * r396798;
double r396800 = 15.234687407;
double r396801 = r396785 + r396800;
double r396802 = r396801 * r396785;
double r396803 = 31.4690115749;
double r396804 = r396802 + r396803;
double r396805 = r396804 * r396785;
double r396806 = 11.9400905721;
double r396807 = r396805 + r396806;
double r396808 = r396807 * r396785;
double r396809 = 0.607771387771;
double r396810 = r396808 + r396809;
double r396811 = r396799 / r396810;
double r396812 = r396783 + r396811;
return r396812;
}
double f(double x, double y, double z, double t, double a, double b) {
double r396813 = z;
double r396814 = -3.9784834439524886e+48;
bool r396815 = r396813 <= r396814;
double r396816 = 8.559962113309013e+55;
bool r396817 = r396813 <= r396816;
double r396818 = !r396817;
bool r396819 = r396815 || r396818;
double r396820 = x;
double r396821 = 3.13060547623;
double r396822 = y;
double r396823 = r396821 * r396822;
double r396824 = t;
double r396825 = r396824 * r396822;
double r396826 = 2.0;
double r396827 = pow(r396813, r396826);
double r396828 = r396825 / r396827;
double r396829 = r396823 + r396828;
double r396830 = 36.527041698806414;
double r396831 = r396822 / r396813;
double r396832 = r396830 * r396831;
double r396833 = r396829 - r396832;
double r396834 = r396820 + r396833;
double r396835 = 15.234687407;
double r396836 = r396813 + r396835;
double r396837 = r396836 * r396813;
double r396838 = 31.4690115749;
double r396839 = r396837 + r396838;
double r396840 = r396839 * r396813;
double r396841 = 11.9400905721;
double r396842 = r396840 + r396841;
double r396843 = r396842 * r396813;
double r396844 = 0.607771387771;
double r396845 = r396843 + r396844;
double r396846 = r396813 * r396821;
double r396847 = 11.1667541262;
double r396848 = r396846 + r396847;
double r396849 = r396848 * r396813;
double r396850 = r396849 + r396824;
double r396851 = r396850 * r396813;
double r396852 = a;
double r396853 = r396851 + r396852;
double r396854 = r396853 * r396813;
double r396855 = b;
double r396856 = r396854 + r396855;
double r396857 = r396845 / r396856;
double r396858 = r396822 / r396857;
double r396859 = r396820 + r396858;
double r396860 = r396819 ? r396834 : r396859;
return r396860;
}




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.6 |
|---|---|
| Target | 1.0 |
| Herbie | 4.4 |
if z < -3.9784834439524886e+48 or 8.559962113309013e+55 < z Initial program 61.6
Taylor expanded around inf 8.4
if -3.9784834439524886e+48 < z < 8.559962113309013e+55Initial program 2.7
rmApplied associate-/l*1.0
Final simplification4.4
herbie shell --seed 2020001
(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))))