x + \frac{y \cdot \left(\left(\left(\left(z \cdot 3.13060547623 + 11.1667541262\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)}{\left(\left(\left(z + 15.234687407\right) \cdot z + 31.4690115749\right) \cdot z + 11.9400905721\right) \cdot z + 0.607771387771}\begin{array}{l}
\mathbf{if}\;z \le -8.355580014785396 \cdot 10^{+24}:\\
\;\;\;\;\left(3.13060547623 \cdot y + \left(\frac{\frac{t}{z}}{z} \cdot y - \frac{y \cdot 36.527041698806414}{z}\right)\right) + x\\
\mathbf{elif}\;z \le 5.826555097007075 \cdot 10^{+25}:\\
\;\;\;\;x + \frac{y \cdot \left(b + \left(z \cdot \left(\left(z \cdot 11.1667541262 + \left(3.13060547623 \cdot z\right) \cdot z\right) + t\right) + a\right) \cdot z\right)}{0.607771387771 + z \cdot \left(11.9400905721 + \left(31.4690115749 + z \cdot \left(z + 15.234687407\right)\right) \cdot z\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(3.13060547623 \cdot y + \left(\frac{t}{\frac{z \cdot z}{y}} - \frac{y \cdot 36.527041698806414}{z}\right)\right) + x\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r19635231 = x;
double r19635232 = y;
double r19635233 = z;
double r19635234 = 3.13060547623;
double r19635235 = r19635233 * r19635234;
double r19635236 = 11.1667541262;
double r19635237 = r19635235 + r19635236;
double r19635238 = r19635237 * r19635233;
double r19635239 = t;
double r19635240 = r19635238 + r19635239;
double r19635241 = r19635240 * r19635233;
double r19635242 = a;
double r19635243 = r19635241 + r19635242;
double r19635244 = r19635243 * r19635233;
double r19635245 = b;
double r19635246 = r19635244 + r19635245;
double r19635247 = r19635232 * r19635246;
double r19635248 = 15.234687407;
double r19635249 = r19635233 + r19635248;
double r19635250 = r19635249 * r19635233;
double r19635251 = 31.4690115749;
double r19635252 = r19635250 + r19635251;
double r19635253 = r19635252 * r19635233;
double r19635254 = 11.9400905721;
double r19635255 = r19635253 + r19635254;
double r19635256 = r19635255 * r19635233;
double r19635257 = 0.607771387771;
double r19635258 = r19635256 + r19635257;
double r19635259 = r19635247 / r19635258;
double r19635260 = r19635231 + r19635259;
return r19635260;
}
double f(double x, double y, double z, double t, double a, double b) {
double r19635261 = z;
double r19635262 = -8.355580014785396e+24;
bool r19635263 = r19635261 <= r19635262;
double r19635264 = 3.13060547623;
double r19635265 = y;
double r19635266 = r19635264 * r19635265;
double r19635267 = t;
double r19635268 = r19635267 / r19635261;
double r19635269 = r19635268 / r19635261;
double r19635270 = r19635269 * r19635265;
double r19635271 = 36.527041698806414;
double r19635272 = r19635265 * r19635271;
double r19635273 = r19635272 / r19635261;
double r19635274 = r19635270 - r19635273;
double r19635275 = r19635266 + r19635274;
double r19635276 = x;
double r19635277 = r19635275 + r19635276;
double r19635278 = 5.826555097007075e+25;
bool r19635279 = r19635261 <= r19635278;
double r19635280 = b;
double r19635281 = 11.1667541262;
double r19635282 = r19635261 * r19635281;
double r19635283 = r19635264 * r19635261;
double r19635284 = r19635283 * r19635261;
double r19635285 = r19635282 + r19635284;
double r19635286 = r19635285 + r19635267;
double r19635287 = r19635261 * r19635286;
double r19635288 = a;
double r19635289 = r19635287 + r19635288;
double r19635290 = r19635289 * r19635261;
double r19635291 = r19635280 + r19635290;
double r19635292 = r19635265 * r19635291;
double r19635293 = 0.607771387771;
double r19635294 = 11.9400905721;
double r19635295 = 31.4690115749;
double r19635296 = 15.234687407;
double r19635297 = r19635261 + r19635296;
double r19635298 = r19635261 * r19635297;
double r19635299 = r19635295 + r19635298;
double r19635300 = r19635299 * r19635261;
double r19635301 = r19635294 + r19635300;
double r19635302 = r19635261 * r19635301;
double r19635303 = r19635293 + r19635302;
double r19635304 = r19635292 / r19635303;
double r19635305 = r19635276 + r19635304;
double r19635306 = r19635261 * r19635261;
double r19635307 = r19635306 / r19635265;
double r19635308 = r19635267 / r19635307;
double r19635309 = r19635308 - r19635273;
double r19635310 = r19635266 + r19635309;
double r19635311 = r19635310 + r19635276;
double r19635312 = r19635279 ? r19635305 : r19635311;
double r19635313 = r19635263 ? r19635277 : r19635312;
return r19635313;
}




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 | 28.9 |
|---|---|
| Target | 1.0 |
| Herbie | 1.7 |
if z < -8.355580014785396e+24Initial program 57.3
Taylor expanded around inf 8.7
Simplified2.2
rmApplied associate-/r*2.2
if -8.355580014785396e+24 < z < 5.826555097007075e+25Initial program 0.7
Taylor expanded around 0 0.7
Simplified0.7
if 5.826555097007075e+25 < z Initial program 56.3
Taylor expanded around inf 9.7
Simplified2.5
rmApplied associate-/r*2.5
Taylor expanded around 0 9.8
Simplified2.9
Final simplification1.7
herbie shell --seed 2019165
(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))) (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))))