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 -1.9368894499979585 \cdot 10^{37} \lor \neg \left(z \le 5056003.575426906\right):\\
\;\;\;\;x + y \cdot \left(\left(\frac{t}{{z}^{2}} + 3.13060547622999996\right) - \frac{36.527041698806414}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \left(y \cdot \frac{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b}{\left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z\right) - 0.60777138777100004 \cdot 0.60777138777100004}\right) \cdot \left(\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z - 0.60777138777100004\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r412614 = x;
double r412615 = y;
double r412616 = z;
double r412617 = 3.13060547623;
double r412618 = r412616 * r412617;
double r412619 = 11.1667541262;
double r412620 = r412618 + r412619;
double r412621 = r412620 * r412616;
double r412622 = t;
double r412623 = r412621 + r412622;
double r412624 = r412623 * r412616;
double r412625 = a;
double r412626 = r412624 + r412625;
double r412627 = r412626 * r412616;
double r412628 = b;
double r412629 = r412627 + r412628;
double r412630 = r412615 * r412629;
double r412631 = 15.234687407;
double r412632 = r412616 + r412631;
double r412633 = r412632 * r412616;
double r412634 = 31.4690115749;
double r412635 = r412633 + r412634;
double r412636 = r412635 * r412616;
double r412637 = 11.9400905721;
double r412638 = r412636 + r412637;
double r412639 = r412638 * r412616;
double r412640 = 0.607771387771;
double r412641 = r412639 + r412640;
double r412642 = r412630 / r412641;
double r412643 = r412614 + r412642;
return r412643;
}
double f(double x, double y, double z, double t, double a, double b) {
double r412644 = z;
double r412645 = -1.9368894499979585e+37;
bool r412646 = r412644 <= r412645;
double r412647 = 5056003.575426906;
bool r412648 = r412644 <= r412647;
double r412649 = !r412648;
bool r412650 = r412646 || r412649;
double r412651 = x;
double r412652 = y;
double r412653 = t;
double r412654 = 2.0;
double r412655 = pow(r412644, r412654);
double r412656 = r412653 / r412655;
double r412657 = 3.13060547623;
double r412658 = r412656 + r412657;
double r412659 = 36.527041698806414;
double r412660 = r412659 / r412644;
double r412661 = r412658 - r412660;
double r412662 = r412652 * r412661;
double r412663 = r412651 + r412662;
double r412664 = r412644 * r412657;
double r412665 = 11.1667541262;
double r412666 = r412664 + r412665;
double r412667 = r412666 * r412644;
double r412668 = r412667 + r412653;
double r412669 = r412668 * r412644;
double r412670 = a;
double r412671 = r412669 + r412670;
double r412672 = r412671 * r412644;
double r412673 = b;
double r412674 = r412672 + r412673;
double r412675 = 15.234687407;
double r412676 = r412644 + r412675;
double r412677 = r412676 * r412644;
double r412678 = 31.4690115749;
double r412679 = r412677 + r412678;
double r412680 = r412679 * r412644;
double r412681 = 11.9400905721;
double r412682 = r412680 + r412681;
double r412683 = r412682 * r412644;
double r412684 = r412683 * r412683;
double r412685 = 0.607771387771;
double r412686 = r412685 * r412685;
double r412687 = r412684 - r412686;
double r412688 = r412674 / r412687;
double r412689 = r412652 * r412688;
double r412690 = r412683 - r412685;
double r412691 = r412689 * r412690;
double r412692 = r412651 + r412691;
double r412693 = r412650 ? r412663 : r412692;
return r412693;
}




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.1 |
| Herbie | 1.3 |
if z < -1.9368894499979585e+37 or 5056003.575426906 < z Initial program 57.9
rmApplied *-un-lft-identity57.9
Applied times-frac55.1
Simplified55.1
Taylor expanded around inf 2.1
Simplified2.1
if -1.9368894499979585e+37 < z < 5056003.575426906Initial program 1.0
rmApplied *-un-lft-identity1.0
Applied times-frac0.5
Simplified0.5
rmApplied flip-+0.5
Applied associate-/r/0.5
Applied associate-*r*0.6
Final simplification1.3
herbie shell --seed 2020043
(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))))