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 -441648319598393860 \lor \neg \left(z \le 706881567136002.375\right):\\
\;\;\;\;x + \left(\left(3.13060547622999996 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.527041698806414 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\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 r353977 = x;
double r353978 = y;
double r353979 = z;
double r353980 = 3.13060547623;
double r353981 = r353979 * r353980;
double r353982 = 11.1667541262;
double r353983 = r353981 + r353982;
double r353984 = r353983 * r353979;
double r353985 = t;
double r353986 = r353984 + r353985;
double r353987 = r353986 * r353979;
double r353988 = a;
double r353989 = r353987 + r353988;
double r353990 = r353989 * r353979;
double r353991 = b;
double r353992 = r353990 + r353991;
double r353993 = r353978 * r353992;
double r353994 = 15.234687407;
double r353995 = r353979 + r353994;
double r353996 = r353995 * r353979;
double r353997 = 31.4690115749;
double r353998 = r353996 + r353997;
double r353999 = r353998 * r353979;
double r354000 = 11.9400905721;
double r354001 = r353999 + r354000;
double r354002 = r354001 * r353979;
double r354003 = 0.607771387771;
double r354004 = r354002 + r354003;
double r354005 = r353993 / r354004;
double r354006 = r353977 + r354005;
return r354006;
}
double f(double x, double y, double z, double t, double a, double b) {
double r354007 = z;
double r354008 = -4.4164831959839386e+17;
bool r354009 = r354007 <= r354008;
double r354010 = 706881567136002.4;
bool r354011 = r354007 <= r354010;
double r354012 = !r354011;
bool r354013 = r354009 || r354012;
double r354014 = x;
double r354015 = 3.13060547623;
double r354016 = y;
double r354017 = r354015 * r354016;
double r354018 = t;
double r354019 = r354018 * r354016;
double r354020 = 2.0;
double r354021 = pow(r354007, r354020);
double r354022 = r354019 / r354021;
double r354023 = r354017 + r354022;
double r354024 = 36.527041698806414;
double r354025 = r354016 / r354007;
double r354026 = r354024 * r354025;
double r354027 = r354023 - r354026;
double r354028 = r354014 + r354027;
double r354029 = 15.234687407;
double r354030 = r354007 + r354029;
double r354031 = r354030 * r354007;
double r354032 = 31.4690115749;
double r354033 = r354031 + r354032;
double r354034 = r354033 * r354007;
double r354035 = 11.9400905721;
double r354036 = r354034 + r354035;
double r354037 = r354036 * r354007;
double r354038 = 0.607771387771;
double r354039 = r354037 + r354038;
double r354040 = r354007 * r354015;
double r354041 = 11.1667541262;
double r354042 = r354040 + r354041;
double r354043 = r354042 * r354007;
double r354044 = r354043 + r354018;
double r354045 = r354044 * r354007;
double r354046 = a;
double r354047 = r354045 + r354046;
double r354048 = r354047 * r354007;
double r354049 = b;
double r354050 = r354048 + r354049;
double r354051 = r354039 / r354050;
double r354052 = r354016 / r354051;
double r354053 = r354014 + r354052;
double r354054 = r354013 ? r354028 : r354053;
return r354054;
}




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.2 |
| Herbie | 4.9 |
if z < -4.4164831959839386e+17 or 706881567136002.4 < z Initial program 56.9
Taylor expanded around inf 9.3
if -4.4164831959839386e+17 < z < 706881567136002.4Initial program 0.5
rmApplied associate-/l*0.2
Final simplification4.9
herbie shell --seed 2020045
(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))))