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 -89041130263420682240 \lor \neg \left(z \le 6.610802954180224365758675671634236105775 \cdot 10^{49}\right):\\
\;\;\;\;\mathsf{fma}\left(y, 3.130605476229999961645944495103321969509 + \frac{t}{{z}^{2}}, x\right)\\
\mathbf{else}:\\
\;\;\;\;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}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r427009 = x;
double r427010 = y;
double r427011 = z;
double r427012 = 3.13060547623;
double r427013 = r427011 * r427012;
double r427014 = 11.1667541262;
double r427015 = r427013 + r427014;
double r427016 = r427015 * r427011;
double r427017 = t;
double r427018 = r427016 + r427017;
double r427019 = r427018 * r427011;
double r427020 = a;
double r427021 = r427019 + r427020;
double r427022 = r427021 * r427011;
double r427023 = b;
double r427024 = r427022 + r427023;
double r427025 = r427010 * r427024;
double r427026 = 15.234687407;
double r427027 = r427011 + r427026;
double r427028 = r427027 * r427011;
double r427029 = 31.4690115749;
double r427030 = r427028 + r427029;
double r427031 = r427030 * r427011;
double r427032 = 11.9400905721;
double r427033 = r427031 + r427032;
double r427034 = r427033 * r427011;
double r427035 = 0.607771387771;
double r427036 = r427034 + r427035;
double r427037 = r427025 / r427036;
double r427038 = r427009 + r427037;
return r427038;
}
double f(double x, double y, double z, double t, double a, double b) {
double r427039 = z;
double r427040 = -8.904113026342068e+19;
bool r427041 = r427039 <= r427040;
double r427042 = 6.610802954180224e+49;
bool r427043 = r427039 <= r427042;
double r427044 = !r427043;
bool r427045 = r427041 || r427044;
double r427046 = y;
double r427047 = 3.13060547623;
double r427048 = t;
double r427049 = 2.0;
double r427050 = pow(r427039, r427049);
double r427051 = r427048 / r427050;
double r427052 = r427047 + r427051;
double r427053 = x;
double r427054 = fma(r427046, r427052, r427053);
double r427055 = r427039 * r427047;
double r427056 = 11.1667541262;
double r427057 = r427055 + r427056;
double r427058 = r427057 * r427039;
double r427059 = r427058 + r427048;
double r427060 = r427059 * r427039;
double r427061 = a;
double r427062 = r427060 + r427061;
double r427063 = r427062 * r427039;
double r427064 = b;
double r427065 = r427063 + r427064;
double r427066 = r427046 * r427065;
double r427067 = 15.234687407;
double r427068 = r427039 + r427067;
double r427069 = r427068 * r427039;
double r427070 = 31.4690115749;
double r427071 = r427069 + r427070;
double r427072 = r427071 * r427039;
double r427073 = 11.9400905721;
double r427074 = r427072 + r427073;
double r427075 = r427074 * r427039;
double r427076 = 0.607771387771;
double r427077 = r427075 + r427076;
double r427078 = r427066 / r427077;
double r427079 = r427053 + r427078;
double r427080 = r427045 ? r427054 : r427079;
return r427080;
}




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.3 |
|---|---|
| Target | 0.9 |
| Herbie | 1.5 |
if z < -8.904113026342068e+19 or 6.610802954180224e+49 < z Initial program 59.3
Simplified57.4
rmApplied div-inv57.4
Taylor expanded around inf 8.5
Simplified1.4
if -8.904113026342068e+19 < z < 6.610802954180224e+49Initial program 1.7
Final simplification1.5
herbie shell --seed 2019351 +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))))