x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}\begin{array}{l}
\mathbf{if}\;z \le -4.78832916976804162 \cdot 10^{29} \lor \neg \left(z \le 2.17040498130427483 \cdot 10^{24}\right):\\
\;\;\;\;\mathsf{fma}\left(y, 3.13060547622999996 + \frac{t}{{z}^{2}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.234687406999999, z, 31.469011574900001\right), z, 11.940090572100001\right), z, 0.60777138777100004\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.234687406999999, z, 31.469011574900001\right), z, 11.940090572100001\right), z, 0.60777138777100004\right)}} \cdot \frac{1}{\sqrt[3]{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z + 15.234687406999999, z, 31.469011574900001\right), z, 11.940090572100001\right), z, 0.60777138777100004\right)}}, \mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(z, 3.13060547622999996, 11.166754126200001\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 r317865 = x;
double r317866 = y;
double r317867 = z;
double r317868 = 3.13060547623;
double r317869 = r317867 * r317868;
double r317870 = 11.1667541262;
double r317871 = r317869 + r317870;
double r317872 = r317871 * r317867;
double r317873 = t;
double r317874 = r317872 + r317873;
double r317875 = r317874 * r317867;
double r317876 = a;
double r317877 = r317875 + r317876;
double r317878 = r317877 * r317867;
double r317879 = b;
double r317880 = r317878 + r317879;
double r317881 = r317866 * r317880;
double r317882 = 15.234687407;
double r317883 = r317867 + r317882;
double r317884 = r317883 * r317867;
double r317885 = 31.4690115749;
double r317886 = r317884 + r317885;
double r317887 = r317886 * r317867;
double r317888 = 11.9400905721;
double r317889 = r317887 + r317888;
double r317890 = r317889 * r317867;
double r317891 = 0.607771387771;
double r317892 = r317890 + r317891;
double r317893 = r317881 / r317892;
double r317894 = r317865 + r317893;
return r317894;
}
double f(double x, double y, double z, double t, double a, double b) {
double r317895 = z;
double r317896 = -4.7883291697680416e+29;
bool r317897 = r317895 <= r317896;
double r317898 = 2.1704049813042748e+24;
bool r317899 = r317895 <= r317898;
double r317900 = !r317899;
bool r317901 = r317897 || r317900;
double r317902 = y;
double r317903 = 3.13060547623;
double r317904 = t;
double r317905 = 2.0;
double r317906 = pow(r317895, r317905);
double r317907 = r317904 / r317906;
double r317908 = r317903 + r317907;
double r317909 = x;
double r317910 = fma(r317902, r317908, r317909);
double r317911 = 15.234687407;
double r317912 = r317895 + r317911;
double r317913 = 31.4690115749;
double r317914 = fma(r317912, r317895, r317913);
double r317915 = 11.9400905721;
double r317916 = fma(r317914, r317895, r317915);
double r317917 = 0.607771387771;
double r317918 = fma(r317916, r317895, r317917);
double r317919 = cbrt(r317918);
double r317920 = r317919 * r317919;
double r317921 = r317902 / r317920;
double r317922 = 1.0;
double r317923 = r317922 / r317919;
double r317924 = r317921 * r317923;
double r317925 = 11.1667541262;
double r317926 = fma(r317895, r317903, r317925);
double r317927 = fma(r317926, r317895, r317904);
double r317928 = a;
double r317929 = fma(r317927, r317895, r317928);
double r317930 = b;
double r317931 = fma(r317929, r317895, r317930);
double r317932 = fma(r317924, r317931, r317909);
double r317933 = r317901 ? r317910 : r317932;
return r317933;
}




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.1 |
|---|---|
| Target | 1.0 |
| Herbie | 1.1 |
if z < -4.7883291697680416e+29 or 2.1704049813042748e+24 < z Initial program 58.4
Simplified56.3
Taylor expanded around inf 8.5
Simplified1.6
if -4.7883291697680416e+29 < z < 2.1704049813042748e+24Initial program 0.8
Simplified0.6
rmApplied div-inv0.7
rmApplied add-cube-cbrt0.7
Applied *-un-lft-identity0.7
Applied times-frac0.7
Applied associate-*r*0.7
Simplified0.7
Final simplification1.1
herbie shell --seed 2020089 +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))))