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 -441648319598393860 \lor \neg \left(z \le 706881567136002.375\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 r145634 = x;
double r145635 = y;
double r145636 = z;
double r145637 = 3.13060547623;
double r145638 = r145636 * r145637;
double r145639 = 11.1667541262;
double r145640 = r145638 + r145639;
double r145641 = r145640 * r145636;
double r145642 = t;
double r145643 = r145641 + r145642;
double r145644 = r145643 * r145636;
double r145645 = a;
double r145646 = r145644 + r145645;
double r145647 = r145646 * r145636;
double r145648 = b;
double r145649 = r145647 + r145648;
double r145650 = r145635 * r145649;
double r145651 = 15.234687407;
double r145652 = r145636 + r145651;
double r145653 = r145652 * r145636;
double r145654 = 31.4690115749;
double r145655 = r145653 + r145654;
double r145656 = r145655 * r145636;
double r145657 = 11.9400905721;
double r145658 = r145656 + r145657;
double r145659 = r145658 * r145636;
double r145660 = 0.607771387771;
double r145661 = r145659 + r145660;
double r145662 = r145650 / r145661;
double r145663 = r145634 + r145662;
return r145663;
}
double f(double x, double y, double z, double t, double a, double b) {
double r145664 = z;
double r145665 = -4.4164831959839386e+17;
bool r145666 = r145664 <= r145665;
double r145667 = 706881567136002.4;
bool r145668 = r145664 <= r145667;
double r145669 = !r145668;
bool r145670 = r145666 || r145669;
double r145671 = x;
double r145672 = 3.13060547623;
double r145673 = y;
double r145674 = r145672 * r145673;
double r145675 = t;
double r145676 = r145675 * r145673;
double r145677 = 2.0;
double r145678 = pow(r145664, r145677);
double r145679 = r145676 / r145678;
double r145680 = r145674 + r145679;
double r145681 = 36.527041698806414;
double r145682 = r145673 / r145664;
double r145683 = r145681 * r145682;
double r145684 = r145680 - r145683;
double r145685 = r145671 + r145684;
double r145686 = 15.234687407;
double r145687 = r145664 + r145686;
double r145688 = r145687 * r145664;
double r145689 = 31.4690115749;
double r145690 = r145688 + r145689;
double r145691 = r145690 * r145664;
double r145692 = 11.9400905721;
double r145693 = r145691 + r145692;
double r145694 = r145693 * r145664;
double r145695 = 0.607771387771;
double r145696 = r145694 + r145695;
double r145697 = r145664 * r145672;
double r145698 = 11.1667541262;
double r145699 = r145697 + r145698;
double r145700 = r145699 * r145664;
double r145701 = r145700 + r145675;
double r145702 = r145701 * r145664;
double r145703 = a;
double r145704 = r145702 + r145703;
double r145705 = r145704 * r145664;
double r145706 = b;
double r145707 = r145705 + r145706;
double r145708 = r145696 / r145707;
double r145709 = r145673 / r145708;
double r145710 = r145671 + r145709;
double r145711 = r145670 ? r145685 : r145710;
return r145711;
}




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.4 |
|---|---|
| Target | 1.2 |
| Herbie | 4.9 |
if z < -4.4164831959839386e+17 or 706881567136002.4 < z Initial program 56.9
Taylor expanded around inf 9.3
if -4.4164831959839386e+17 < z < 706881567136002.4Initial program 0.5
rmApplied associate-/l*0.2
Final simplification4.9
herbie shell --seed 2020045
(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))))