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 -9.556303061205325 \cdot 10^{56} \lor \neg \left(z \le 2.85934170495834728 \cdot 10^{71}\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 r269204 = x;
double r269205 = y;
double r269206 = z;
double r269207 = 3.13060547623;
double r269208 = r269206 * r269207;
double r269209 = 11.1667541262;
double r269210 = r269208 + r269209;
double r269211 = r269210 * r269206;
double r269212 = t;
double r269213 = r269211 + r269212;
double r269214 = r269213 * r269206;
double r269215 = a;
double r269216 = r269214 + r269215;
double r269217 = r269216 * r269206;
double r269218 = b;
double r269219 = r269217 + r269218;
double r269220 = r269205 * r269219;
double r269221 = 15.234687407;
double r269222 = r269206 + r269221;
double r269223 = r269222 * r269206;
double r269224 = 31.4690115749;
double r269225 = r269223 + r269224;
double r269226 = r269225 * r269206;
double r269227 = 11.9400905721;
double r269228 = r269226 + r269227;
double r269229 = r269228 * r269206;
double r269230 = 0.607771387771;
double r269231 = r269229 + r269230;
double r269232 = r269220 / r269231;
double r269233 = r269204 + r269232;
return r269233;
}
double f(double x, double y, double z, double t, double a, double b) {
double r269234 = z;
double r269235 = -9.556303061205325e+56;
bool r269236 = r269234 <= r269235;
double r269237 = 2.8593417049583473e+71;
bool r269238 = r269234 <= r269237;
double r269239 = !r269238;
bool r269240 = r269236 || r269239;
double r269241 = x;
double r269242 = 3.13060547623;
double r269243 = y;
double r269244 = r269242 * r269243;
double r269245 = t;
double r269246 = r269245 * r269243;
double r269247 = 2.0;
double r269248 = pow(r269234, r269247);
double r269249 = r269246 / r269248;
double r269250 = r269244 + r269249;
double r269251 = 36.527041698806414;
double r269252 = r269243 / r269234;
double r269253 = r269251 * r269252;
double r269254 = r269250 - r269253;
double r269255 = r269241 + r269254;
double r269256 = 15.234687407;
double r269257 = r269234 + r269256;
double r269258 = r269257 * r269234;
double r269259 = 31.4690115749;
double r269260 = r269258 + r269259;
double r269261 = r269260 * r269234;
double r269262 = 11.9400905721;
double r269263 = r269261 + r269262;
double r269264 = r269263 * r269234;
double r269265 = 0.607771387771;
double r269266 = r269264 + r269265;
double r269267 = r269234 * r269242;
double r269268 = 11.1667541262;
double r269269 = r269267 + r269268;
double r269270 = r269269 * r269234;
double r269271 = r269270 + r269245;
double r269272 = r269271 * r269234;
double r269273 = a;
double r269274 = r269272 + r269273;
double r269275 = r269274 * r269234;
double r269276 = b;
double r269277 = r269275 + r269276;
double r269278 = r269266 / r269277;
double r269279 = r269243 / r269278;
double r269280 = r269241 + r269279;
double r269281 = r269240 ? r269255 : r269280;
return r269281;
}




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.1 |
|---|---|
| Target | 1.1 |
| Herbie | 4.4 |
if z < -9.556303061205325e+56 or 2.8593417049583473e+71 < z Initial program 62.8
Taylor expanded around inf 8.0
if -9.556303061205325e+56 < z < 2.8593417049583473e+71Initial program 3.5
rmApplied associate-/l*1.6
Final simplification4.4
herbie shell --seed 2019198
(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))))