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.331658617528236459595809239239425910927 \cdot 10^{58} \lor \neg \left(z \le 7.750193981095729611796510369549970199983 \cdot 10^{59}\right):\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{t}{{z}^{2}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{\sqrt[3]{y} \cdot \sqrt[3]{y}}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.2346874069999991263557603815570473671, z, 31.46901157490000144889563671313226222992\right), z, 11.94009057210000079862766142468899488449\right), z, 0.6077713877710000378584709324059076607227\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.2346874069999991263557603815570473671, z, 31.46901157490000144889563671313226222992\right), z, 11.94009057210000079862766142468899488449\right), z, 0.6077713877710000378584709324059076607227\right)}} \cdot \frac{\sqrt[3]{y}}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.2346874069999991263557603815570473671, z, 31.46901157490000144889563671313226222992\right), z, 11.94009057210000079862766142468899488449\right), z, 0.6077713877710000378584709324059076607227\right)}}, \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z, 3.130605476229999961645944495103321969509, 11.16675412620000074070958362426608800888\right), z, t\right), z, a\right), z, b\right), x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r280853 = x;
double r280854 = y;
double r280855 = z;
double r280856 = 3.13060547623;
double r280857 = r280855 * r280856;
double r280858 = 11.1667541262;
double r280859 = r280857 + r280858;
double r280860 = r280859 * r280855;
double r280861 = t;
double r280862 = r280860 + r280861;
double r280863 = r280862 * r280855;
double r280864 = a;
double r280865 = r280863 + r280864;
double r280866 = r280865 * r280855;
double r280867 = b;
double r280868 = r280866 + r280867;
double r280869 = r280854 * r280868;
double r280870 = 15.234687407;
double r280871 = r280855 + r280870;
double r280872 = r280871 * r280855;
double r280873 = 31.4690115749;
double r280874 = r280872 + r280873;
double r280875 = r280874 * r280855;
double r280876 = 11.9400905721;
double r280877 = r280875 + r280876;
double r280878 = r280877 * r280855;
double r280879 = 0.607771387771;
double r280880 = r280878 + r280879;
double r280881 = r280869 / r280880;
double r280882 = r280853 + r280881;
return r280882;
}
double f(double x, double y, double z, double t, double a, double b) {
double r280883 = z;
double r280884 = -2.3316586175282365e+58;
bool r280885 = r280883 <= r280884;
double r280886 = 7.75019398109573e+59;
bool r280887 = r280883 <= r280886;
double r280888 = !r280887;
bool r280889 = r280885 || r280888;
double r280890 = y;
double r280891 = 3.13060547623;
double r280892 = t;
double r280893 = 2.0;
double r280894 = pow(r280883, r280893);
double r280895 = r280892 / r280894;
double r280896 = r280891 + r280895;
double r280897 = x;
double r280898 = fma(r280890, r280896, r280897);
double r280899 = cbrt(r280890);
double r280900 = r280899 * r280899;
double r280901 = 15.234687407;
double r280902 = r280883 + r280901;
double r280903 = 31.4690115749;
double r280904 = fma(r280902, r280883, r280903);
double r280905 = 11.9400905721;
double r280906 = fma(r280904, r280883, r280905);
double r280907 = 0.607771387771;
double r280908 = fma(r280906, r280883, r280907);
double r280909 = cbrt(r280908);
double r280910 = r280909 * r280909;
double r280911 = r280900 / r280910;
double r280912 = r280899 / r280909;
double r280913 = r280911 * r280912;
double r280914 = 11.1667541262;
double r280915 = fma(r280883, r280891, r280914);
double r280916 = fma(r280915, r280883, r280892);
double r280917 = a;
double r280918 = fma(r280916, r280883, r280917);
double r280919 = b;
double r280920 = fma(r280918, r280883, r280919);
double r280921 = fma(r280913, r280920, r280897);
double r280922 = r280889 ? r280898 : r280921;
return r280922;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 29.8 |
|---|---|
| Target | 1.0 |
| Herbie | 1.4 |
if z < -2.3316586175282365e+58 or 7.75019398109573e+59 < z Initial program 62.3
Simplified60.9
Taylor expanded around inf 8.3
Simplified0.5
if -2.3316586175282365e+58 < z < 7.75019398109573e+59Initial program 3.4
Simplified1.6
rmApplied add-cube-cbrt1.7
Applied add-cube-cbrt2.2
Applied times-frac2.2
Final simplification1.4
herbie shell --seed 2020002 +o rules:numerics
(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))))