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}\;\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} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(y, 3.13060547622999996 + \frac{t}{{z}^{2}}, x\right)\\
\mathbf{elif}\;\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} \le 1.0740516029122497 \cdot 10^{302}:\\
\;\;\;\;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}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, 3.13060547622999996 + \frac{\frac{t}{z}}{z}, x\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r327499 = x;
double r327500 = y;
double r327501 = z;
double r327502 = 3.13060547623;
double r327503 = r327501 * r327502;
double r327504 = 11.1667541262;
double r327505 = r327503 + r327504;
double r327506 = r327505 * r327501;
double r327507 = t;
double r327508 = r327506 + r327507;
double r327509 = r327508 * r327501;
double r327510 = a;
double r327511 = r327509 + r327510;
double r327512 = r327511 * r327501;
double r327513 = b;
double r327514 = r327512 + r327513;
double r327515 = r327500 * r327514;
double r327516 = 15.234687407;
double r327517 = r327501 + r327516;
double r327518 = r327517 * r327501;
double r327519 = 31.4690115749;
double r327520 = r327518 + r327519;
double r327521 = r327520 * r327501;
double r327522 = 11.9400905721;
double r327523 = r327521 + r327522;
double r327524 = r327523 * r327501;
double r327525 = 0.607771387771;
double r327526 = r327524 + r327525;
double r327527 = r327515 / r327526;
double r327528 = r327499 + r327527;
return r327528;
}
double f(double x, double y, double z, double t, double a, double b) {
double r327529 = y;
double r327530 = z;
double r327531 = 3.13060547623;
double r327532 = r327530 * r327531;
double r327533 = 11.1667541262;
double r327534 = r327532 + r327533;
double r327535 = r327534 * r327530;
double r327536 = t;
double r327537 = r327535 + r327536;
double r327538 = r327537 * r327530;
double r327539 = a;
double r327540 = r327538 + r327539;
double r327541 = r327540 * r327530;
double r327542 = b;
double r327543 = r327541 + r327542;
double r327544 = r327529 * r327543;
double r327545 = 15.234687407;
double r327546 = r327530 + r327545;
double r327547 = r327546 * r327530;
double r327548 = 31.4690115749;
double r327549 = r327547 + r327548;
double r327550 = r327549 * r327530;
double r327551 = 11.9400905721;
double r327552 = r327550 + r327551;
double r327553 = r327552 * r327530;
double r327554 = 0.607771387771;
double r327555 = r327553 + r327554;
double r327556 = r327544 / r327555;
double r327557 = -inf.0;
bool r327558 = r327556 <= r327557;
double r327559 = 2.0;
double r327560 = pow(r327530, r327559);
double r327561 = r327536 / r327560;
double r327562 = r327531 + r327561;
double r327563 = x;
double r327564 = fma(r327529, r327562, r327563);
double r327565 = 1.0740516029122497e+302;
bool r327566 = r327556 <= r327565;
double r327567 = r327563 + r327556;
double r327568 = r327536 / r327530;
double r327569 = r327568 / r327530;
double r327570 = r327531 + r327569;
double r327571 = fma(r327529, r327570, r327563);
double r327572 = r327566 ? r327567 : r327571;
double r327573 = r327558 ? r327564 : r327572;
return r327573;
}




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.7 |
|---|---|
| Target | 1.0 |
| Herbie | 1.0 |
if (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771)) < -inf.0Initial program 64.0
Simplified30.4
Taylor expanded around inf 23.8
Simplified18.5
if -inf.0 < (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771)) < 1.0740516029122497e+302Initial program 0.2
if 1.0740516029122497e+302 < (/ (* y (+ (* (+ (* (+ (* (+ (* z 3.13060547623) 11.1667541262) z) t) z) a) z) b)) (+ (* (+ (* (+ (* (+ z 15.234687407) z) 31.4690115749) z) 11.9400905721) z) 0.607771387771)) Initial program 63.8
Simplified61.6
Taylor expanded around inf 9.1
Simplified1.0
rmApplied unpow21.0
Applied associate-/r*1.0
Final simplification1.0
herbie shell --seed 2020100 +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))))