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 -3.351770489844849963440765979757572867159 \cdot 10^{56} \lor \neg \left(z \le 128535262688296208\right):\\
\;\;\;\;x + \left(\frac{y}{z} \cdot \left(\frac{t}{z} - 36.52704169880641416057187598198652267456\right) + 3.130605476229999961645944495103321969509 \cdot y\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 r291509 = x;
double r291510 = y;
double r291511 = z;
double r291512 = 3.13060547623;
double r291513 = r291511 * r291512;
double r291514 = 11.1667541262;
double r291515 = r291513 + r291514;
double r291516 = r291515 * r291511;
double r291517 = t;
double r291518 = r291516 + r291517;
double r291519 = r291518 * r291511;
double r291520 = a;
double r291521 = r291519 + r291520;
double r291522 = r291521 * r291511;
double r291523 = b;
double r291524 = r291522 + r291523;
double r291525 = r291510 * r291524;
double r291526 = 15.234687407;
double r291527 = r291511 + r291526;
double r291528 = r291527 * r291511;
double r291529 = 31.4690115749;
double r291530 = r291528 + r291529;
double r291531 = r291530 * r291511;
double r291532 = 11.9400905721;
double r291533 = r291531 + r291532;
double r291534 = r291533 * r291511;
double r291535 = 0.607771387771;
double r291536 = r291534 + r291535;
double r291537 = r291525 / r291536;
double r291538 = r291509 + r291537;
return r291538;
}
double f(double x, double y, double z, double t, double a, double b) {
double r291539 = z;
double r291540 = -3.35177048984485e+56;
bool r291541 = r291539 <= r291540;
double r291542 = 1.2853526268829621e+17;
bool r291543 = r291539 <= r291542;
double r291544 = !r291543;
bool r291545 = r291541 || r291544;
double r291546 = x;
double r291547 = y;
double r291548 = r291547 / r291539;
double r291549 = t;
double r291550 = r291549 / r291539;
double r291551 = 36.527041698806414;
double r291552 = r291550 - r291551;
double r291553 = r291548 * r291552;
double r291554 = 3.13060547623;
double r291555 = r291554 * r291547;
double r291556 = r291553 + r291555;
double r291557 = r291546 + r291556;
double r291558 = 15.234687407;
double r291559 = r291539 + r291558;
double r291560 = r291559 * r291539;
double r291561 = 31.4690115749;
double r291562 = r291560 + r291561;
double r291563 = r291562 * r291539;
double r291564 = 11.9400905721;
double r291565 = r291563 + r291564;
double r291566 = r291565 * r291539;
double r291567 = 0.607771387771;
double r291568 = r291566 + r291567;
double r291569 = r291539 * r291554;
double r291570 = 11.1667541262;
double r291571 = r291569 + r291570;
double r291572 = r291571 * r291539;
double r291573 = r291572 + r291549;
double r291574 = r291573 * r291539;
double r291575 = a;
double r291576 = r291574 + r291575;
double r291577 = r291576 * r291539;
double r291578 = b;
double r291579 = r291577 + r291578;
double r291580 = r291568 / r291579;
double r291581 = r291547 / r291580;
double r291582 = r291546 + r291581;
double r291583 = r291545 ? r291557 : r291582;
return r291583;
}




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.8 |
|---|---|
| Target | 1.0 |
| Herbie | 1.3 |
if z < -3.35177048984485e+56 or 1.2853526268829621e+17 < z Initial program 59.6
rmApplied add-cube-cbrt59.6
Applied associate-*r*59.6
Taylor expanded around inf 8.6
Simplified1.9
if -3.35177048984485e+56 < z < 1.2853526268829621e+17Initial program 1.8
rmApplied associate-/l*0.7
Final simplification1.3
herbie shell --seed 2019323
(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))))