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 -6.50311312171162177 \cdot 10^{54} \lor \neg \left(z \le 8.9425971063945801 \cdot 10^{37}\right):\\
\;\;\;\;x + \left(\left(3.13060547622999996 \cdot y + \frac{t \cdot y}{{z}^{2}}\right) - 36.527041698806414 \cdot \frac{y}{z}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{y}{\frac{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004}{\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\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 r381754 = x;
double r381755 = y;
double r381756 = z;
double r381757 = 3.13060547623;
double r381758 = r381756 * r381757;
double r381759 = 11.1667541262;
double r381760 = r381758 + r381759;
double r381761 = r381760 * r381756;
double r381762 = t;
double r381763 = r381761 + r381762;
double r381764 = r381763 * r381756;
double r381765 = a;
double r381766 = r381764 + r381765;
double r381767 = r381766 * r381756;
double r381768 = b;
double r381769 = r381767 + r381768;
double r381770 = r381755 * r381769;
double r381771 = 15.234687407;
double r381772 = r381756 + r381771;
double r381773 = r381772 * r381756;
double r381774 = 31.4690115749;
double r381775 = r381773 + r381774;
double r381776 = r381775 * r381756;
double r381777 = 11.9400905721;
double r381778 = r381776 + r381777;
double r381779 = r381778 * r381756;
double r381780 = 0.607771387771;
double r381781 = r381779 + r381780;
double r381782 = r381770 / r381781;
double r381783 = r381754 + r381782;
return r381783;
}
double f(double x, double y, double z, double t, double a, double b) {
double r381784 = z;
double r381785 = -6.503113121711622e+54;
bool r381786 = r381784 <= r381785;
double r381787 = 8.94259710639458e+37;
bool r381788 = r381784 <= r381787;
double r381789 = !r381788;
bool r381790 = r381786 || r381789;
double r381791 = x;
double r381792 = 3.13060547623;
double r381793 = y;
double r381794 = r381792 * r381793;
double r381795 = t;
double r381796 = r381795 * r381793;
double r381797 = 2.0;
double r381798 = pow(r381784, r381797);
double r381799 = r381796 / r381798;
double r381800 = r381794 + r381799;
double r381801 = 36.527041698806414;
double r381802 = r381793 / r381784;
double r381803 = r381801 * r381802;
double r381804 = r381800 - r381803;
double r381805 = r381791 + r381804;
double r381806 = 15.234687407;
double r381807 = r381784 + r381806;
double r381808 = r381807 * r381784;
double r381809 = 31.4690115749;
double r381810 = r381808 + r381809;
double r381811 = r381810 * r381784;
double r381812 = 11.9400905721;
double r381813 = r381811 + r381812;
double r381814 = r381813 * r381784;
double r381815 = 0.607771387771;
double r381816 = r381814 + r381815;
double r381817 = r381784 * r381792;
double r381818 = 11.1667541262;
double r381819 = r381817 + r381818;
double r381820 = r381819 * r381784;
double r381821 = r381820 + r381795;
double r381822 = r381821 * r381784;
double r381823 = a;
double r381824 = r381822 + r381823;
double r381825 = r381824 * r381784;
double r381826 = b;
double r381827 = r381825 + r381826;
double r381828 = r381816 / r381827;
double r381829 = r381793 / r381828;
double r381830 = r381791 + r381829;
double r381831 = r381790 ? r381805 : r381830;
return r381831;
}




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.6 |
|---|---|
| Target | 1.1 |
| Herbie | 4.7 |
if z < -6.503113121711622e+54 or 8.94259710639458e+37 < z Initial program 60.8
Taylor expanded around inf 9.0
if -6.503113121711622e+54 < z < 8.94259710639458e+37Initial program 2.3
rmApplied associate-/l*0.9
Final simplification4.7
herbie shell --seed 2020027
(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))))