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 -5.35775335811664385649824258098630454492 \cdot 10^{69} \lor \neg \left(z \le 7.967156506649024971604719810103340041056 \cdot 10^{45}\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 r346795 = x;
double r346796 = y;
double r346797 = z;
double r346798 = 3.13060547623;
double r346799 = r346797 * r346798;
double r346800 = 11.1667541262;
double r346801 = r346799 + r346800;
double r346802 = r346801 * r346797;
double r346803 = t;
double r346804 = r346802 + r346803;
double r346805 = r346804 * r346797;
double r346806 = a;
double r346807 = r346805 + r346806;
double r346808 = r346807 * r346797;
double r346809 = b;
double r346810 = r346808 + r346809;
double r346811 = r346796 * r346810;
double r346812 = 15.234687407;
double r346813 = r346797 + r346812;
double r346814 = r346813 * r346797;
double r346815 = 31.4690115749;
double r346816 = r346814 + r346815;
double r346817 = r346816 * r346797;
double r346818 = 11.9400905721;
double r346819 = r346817 + r346818;
double r346820 = r346819 * r346797;
double r346821 = 0.607771387771;
double r346822 = r346820 + r346821;
double r346823 = r346811 / r346822;
double r346824 = r346795 + r346823;
return r346824;
}
double f(double x, double y, double z, double t, double a, double b) {
double r346825 = z;
double r346826 = -5.357753358116644e+69;
bool r346827 = r346825 <= r346826;
double r346828 = 7.967156506649025e+45;
bool r346829 = r346825 <= r346828;
double r346830 = !r346829;
bool r346831 = r346827 || r346830;
double r346832 = x;
double r346833 = 3.13060547623;
double r346834 = y;
double r346835 = r346833 * r346834;
double r346836 = t;
double r346837 = r346836 * r346834;
double r346838 = 2.0;
double r346839 = pow(r346825, r346838);
double r346840 = r346837 / r346839;
double r346841 = r346835 + r346840;
double r346842 = 36.527041698806414;
double r346843 = r346834 / r346825;
double r346844 = r346842 * r346843;
double r346845 = r346841 - r346844;
double r346846 = r346832 + r346845;
double r346847 = 15.234687407;
double r346848 = r346825 + r346847;
double r346849 = r346848 * r346825;
double r346850 = 31.4690115749;
double r346851 = r346849 + r346850;
double r346852 = r346851 * r346825;
double r346853 = 11.9400905721;
double r346854 = r346852 + r346853;
double r346855 = r346854 * r346825;
double r346856 = 0.607771387771;
double r346857 = r346855 + r346856;
double r346858 = r346825 * r346833;
double r346859 = 11.1667541262;
double r346860 = r346858 + r346859;
double r346861 = r346860 * r346825;
double r346862 = r346861 + r346836;
double r346863 = r346862 * r346825;
double r346864 = a;
double r346865 = r346863 + r346864;
double r346866 = r346865 * r346825;
double r346867 = b;
double r346868 = r346866 + r346867;
double r346869 = r346857 / r346868;
double r346870 = r346834 / r346869;
double r346871 = r346832 + r346870;
double r346872 = r346831 ? r346846 : r346871;
return r346872;
}




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 | 30.4 |
|---|---|
| Target | 1.0 |
| Herbie | 4.4 |
if z < -5.357753358116644e+69 or 7.967156506649025e+45 < z Initial program 61.7
Taylor expanded around inf 7.8
if -5.357753358116644e+69 < z < 7.967156506649025e+45Initial program 3.4
rmApplied associate-/l*1.4
Final simplification4.4
herbie shell --seed 2019297
(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))))