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.275224954987132994321982327394344911771 \cdot 10^{68}:\\
\;\;\;\;\left(\left(\frac{y}{z} \cdot \frac{t}{z} + 3.130605476229999961645944495103321969509 \cdot y\right) - \frac{36.52704169880641416057187598198652267456}{\frac{z}{y}}\right) + x\\
\mathbf{elif}\;z \le 7597311987327426783290525665460224:\\
\;\;\;\;\frac{\left(z \cdot \left(\left(\sqrt[3]{\left(11.16675412620000074070958362426608800888 + 3.130605476229999961645944495103321969509 \cdot z\right) \cdot z} \cdot \sqrt[3]{\left(11.16675412620000074070958362426608800888 + 3.130605476229999961645944495103321969509 \cdot z\right) \cdot z}\right) \cdot \sqrt[3]{\left(11.16675412620000074070958362426608800888 + 3.130605476229999961645944495103321969509 \cdot z\right) \cdot z} + t\right) + a\right) \cdot z + b}{0.6077713877710000378584709324059076607227 + z \cdot \left(11.94009057210000079862766142468899488449 + \left(z \cdot \left(z + 15.2346874069999991263557603815570473671\right) + 31.46901157490000144889563671313226222992\right) \cdot z\right)} \cdot y + x\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \left(\left(3.130605476229999961645944495103321969509 - \frac{36.52704169880641416057187598198652267456}{z}\right) + \frac{\frac{t}{z}}{z}\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r22527842 = x;
double r22527843 = y;
double r22527844 = z;
double r22527845 = 3.13060547623;
double r22527846 = r22527844 * r22527845;
double r22527847 = 11.1667541262;
double r22527848 = r22527846 + r22527847;
double r22527849 = r22527848 * r22527844;
double r22527850 = t;
double r22527851 = r22527849 + r22527850;
double r22527852 = r22527851 * r22527844;
double r22527853 = a;
double r22527854 = r22527852 + r22527853;
double r22527855 = r22527854 * r22527844;
double r22527856 = b;
double r22527857 = r22527855 + r22527856;
double r22527858 = r22527843 * r22527857;
double r22527859 = 15.234687407;
double r22527860 = r22527844 + r22527859;
double r22527861 = r22527860 * r22527844;
double r22527862 = 31.4690115749;
double r22527863 = r22527861 + r22527862;
double r22527864 = r22527863 * r22527844;
double r22527865 = 11.9400905721;
double r22527866 = r22527864 + r22527865;
double r22527867 = r22527866 * r22527844;
double r22527868 = 0.607771387771;
double r22527869 = r22527867 + r22527868;
double r22527870 = r22527858 / r22527869;
double r22527871 = r22527842 + r22527870;
return r22527871;
}
double f(double x, double y, double z, double t, double a, double b) {
double r22527872 = z;
double r22527873 = -1.275224954987133e+68;
bool r22527874 = r22527872 <= r22527873;
double r22527875 = y;
double r22527876 = r22527875 / r22527872;
double r22527877 = t;
double r22527878 = r22527877 / r22527872;
double r22527879 = r22527876 * r22527878;
double r22527880 = 3.13060547623;
double r22527881 = r22527880 * r22527875;
double r22527882 = r22527879 + r22527881;
double r22527883 = 36.527041698806414;
double r22527884 = r22527872 / r22527875;
double r22527885 = r22527883 / r22527884;
double r22527886 = r22527882 - r22527885;
double r22527887 = x;
double r22527888 = r22527886 + r22527887;
double r22527889 = 7.597311987327427e+33;
bool r22527890 = r22527872 <= r22527889;
double r22527891 = 11.1667541262;
double r22527892 = r22527880 * r22527872;
double r22527893 = r22527891 + r22527892;
double r22527894 = r22527893 * r22527872;
double r22527895 = cbrt(r22527894);
double r22527896 = r22527895 * r22527895;
double r22527897 = r22527896 * r22527895;
double r22527898 = r22527897 + r22527877;
double r22527899 = r22527872 * r22527898;
double r22527900 = a;
double r22527901 = r22527899 + r22527900;
double r22527902 = r22527901 * r22527872;
double r22527903 = b;
double r22527904 = r22527902 + r22527903;
double r22527905 = 0.607771387771;
double r22527906 = 11.9400905721;
double r22527907 = 15.234687407;
double r22527908 = r22527872 + r22527907;
double r22527909 = r22527872 * r22527908;
double r22527910 = 31.4690115749;
double r22527911 = r22527909 + r22527910;
double r22527912 = r22527911 * r22527872;
double r22527913 = r22527906 + r22527912;
double r22527914 = r22527872 * r22527913;
double r22527915 = r22527905 + r22527914;
double r22527916 = r22527904 / r22527915;
double r22527917 = r22527916 * r22527875;
double r22527918 = r22527917 + r22527887;
double r22527919 = r22527883 / r22527872;
double r22527920 = r22527880 - r22527919;
double r22527921 = r22527878 / r22527872;
double r22527922 = r22527920 + r22527921;
double r22527923 = r22527875 * r22527922;
double r22527924 = r22527887 + r22527923;
double r22527925 = r22527890 ? r22527918 : r22527924;
double r22527926 = r22527874 ? r22527888 : r22527925;
return r22527926;
}




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.4 |
|---|---|
| Target | 1.0 |
| Herbie | 1.1 |
if z < -1.275224954987133e+68Initial program 63.0
Taylor expanded around inf 8.2
Simplified0.4
if -1.275224954987133e+68 < z < 7.597311987327427e+33Initial program 2.8
rmApplied *-un-lft-identity2.8
Applied times-frac1.2
Simplified1.2
rmApplied add-cube-cbrt1.3
if 7.597311987327427e+33 < z Initial program 59.7
rmApplied *-un-lft-identity59.7
Applied times-frac57.5
Simplified57.5
Taylor expanded around inf 1.4
Simplified1.4
Final simplification1.1
herbie shell --seed 2019169
(FPCore (x y z t a b)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, D"
:herbie-target
(if (< z -6.499344996252632e+53) (+ x (* (+ (- 3.13060547623 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1.0))) (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.0)))))
(+ 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))))