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 -1062323905833266034524411178736549560844000 \lor \neg \left(z \le 43462090093737220061812594972643295232\right):\\
\;\;\;\;x + \left(\left(3.130605476229999961645944495103321969509 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.52704169880641416057187598198652267456 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.2346874069999991263557603815570473671\right) \cdot z + 31.46901157490000144889563671313226222992\right) \cdot z + 11.94009057210000079862766142468899488449\right) \cdot z + 0.6077713877710000378584709324059076607227}{\left(\left(\left(z \cdot 3.130605476229999961645944495103321969509 + 11.16675412620000074070958362426608800888\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 r271391 = x;
double r271392 = y;
double r271393 = z;
double r271394 = 3.13060547623;
double r271395 = r271393 * r271394;
double r271396 = 11.1667541262;
double r271397 = r271395 + r271396;
double r271398 = r271397 * r271393;
double r271399 = t;
double r271400 = r271398 + r271399;
double r271401 = r271400 * r271393;
double r271402 = a;
double r271403 = r271401 + r271402;
double r271404 = r271403 * r271393;
double r271405 = b;
double r271406 = r271404 + r271405;
double r271407 = r271392 * r271406;
double r271408 = 15.234687407;
double r271409 = r271393 + r271408;
double r271410 = r271409 * r271393;
double r271411 = 31.4690115749;
double r271412 = r271410 + r271411;
double r271413 = r271412 * r271393;
double r271414 = 11.9400905721;
double r271415 = r271413 + r271414;
double r271416 = r271415 * r271393;
double r271417 = 0.607771387771;
double r271418 = r271416 + r271417;
double r271419 = r271407 / r271418;
double r271420 = r271391 + r271419;
return r271420;
}
double f(double x, double y, double z, double t, double a, double b) {
double r271421 = z;
double r271422 = -1.062323905833266e+42;
bool r271423 = r271421 <= r271422;
double r271424 = 4.346209009373722e+37;
bool r271425 = r271421 <= r271424;
double r271426 = !r271425;
bool r271427 = r271423 || r271426;
double r271428 = x;
double r271429 = 3.13060547623;
double r271430 = y;
double r271431 = r271429 * r271430;
double r271432 = t;
double r271433 = r271432 * r271430;
double r271434 = 2.0;
double r271435 = pow(r271421, r271434);
double r271436 = r271433 / r271435;
double r271437 = r271431 + r271436;
double r271438 = 36.527041698806414;
double r271439 = r271430 / r271421;
double r271440 = r271438 * r271439;
double r271441 = r271437 - r271440;
double r271442 = r271428 + r271441;
double r271443 = 15.234687407;
double r271444 = r271421 + r271443;
double r271445 = r271444 * r271421;
double r271446 = 31.4690115749;
double r271447 = r271445 + r271446;
double r271448 = r271447 * r271421;
double r271449 = 11.9400905721;
double r271450 = r271448 + r271449;
double r271451 = r271450 * r271421;
double r271452 = 0.607771387771;
double r271453 = r271451 + r271452;
double r271454 = r271421 * r271429;
double r271455 = 11.1667541262;
double r271456 = r271454 + r271455;
double r271457 = r271456 * r271421;
double r271458 = r271457 + r271432;
double r271459 = r271458 * r271421;
double r271460 = a;
double r271461 = r271459 + r271460;
double r271462 = r271461 * r271421;
double r271463 = b;
double r271464 = r271462 + r271463;
double r271465 = r271453 / r271464;
double r271466 = r271430 / r271465;
double r271467 = r271428 + r271466;
double r271468 = r271427 ? r271442 : r271467;
return r271468;
}




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.7 |
|---|---|
| Target | 1.2 |
| Herbie | 4.7 |
if z < -1.062323905833266e+42 or 4.346209009373722e+37 < z Initial program 60.0
Taylor expanded around inf 8.9
if -1.062323905833266e+42 < z < 4.346209009373722e+37Initial program 1.7
rmApplied associate-/l*0.8
Final simplification4.7
herbie shell --seed 2019306
(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.4993449962526318e53) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1))) (if (< z 7.0669654369142868e59) (+ x (/ y (/ (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004) (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)))) (+ x (* (+ (- 3.13060547622999996 (/ 36.527041698806414 z)) (/ t (* z z))) (/ y 1)))))
(+ x (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547622999996) 11.166754126200001) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687406999999) z) 31.469011574900001) z) 11.940090572100001) z) 0.60777138777100004))))