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 -3.341610835634003 \cdot 10^{23} \lor \neg \left(z \le 3.2272260316104524 \cdot 10^{42}\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}{\left(\left(\left(z + 15.234687406999999\right) \cdot z + 31.469011574900001\right) \cdot z + 11.940090572100001\right) \cdot z + 0.60777138777100004} \cdot \left(\left(\left(\left(z \cdot 3.13060547622999996 + 11.166754126200001\right) \cdot z + t\right) \cdot z + a\right) \cdot z + b\right)\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r341659 = x;
double r341660 = y;
double r341661 = z;
double r341662 = 3.13060547623;
double r341663 = r341661 * r341662;
double r341664 = 11.1667541262;
double r341665 = r341663 + r341664;
double r341666 = r341665 * r341661;
double r341667 = t;
double r341668 = r341666 + r341667;
double r341669 = r341668 * r341661;
double r341670 = a;
double r341671 = r341669 + r341670;
double r341672 = r341671 * r341661;
double r341673 = b;
double r341674 = r341672 + r341673;
double r341675 = r341660 * r341674;
double r341676 = 15.234687407;
double r341677 = r341661 + r341676;
double r341678 = r341677 * r341661;
double r341679 = 31.4690115749;
double r341680 = r341678 + r341679;
double r341681 = r341680 * r341661;
double r341682 = 11.9400905721;
double r341683 = r341681 + r341682;
double r341684 = r341683 * r341661;
double r341685 = 0.607771387771;
double r341686 = r341684 + r341685;
double r341687 = r341675 / r341686;
double r341688 = r341659 + r341687;
return r341688;
}
double f(double x, double y, double z, double t, double a, double b) {
double r341689 = z;
double r341690 = -3.341610835634003e+23;
bool r341691 = r341689 <= r341690;
double r341692 = 3.2272260316104524e+42;
bool r341693 = r341689 <= r341692;
double r341694 = !r341693;
bool r341695 = r341691 || r341694;
double r341696 = x;
double r341697 = 3.13060547623;
double r341698 = y;
double r341699 = r341697 * r341698;
double r341700 = t;
double r341701 = r341700 * r341698;
double r341702 = 2.0;
double r341703 = pow(r341689, r341702);
double r341704 = r341701 / r341703;
double r341705 = r341699 + r341704;
double r341706 = 36.527041698806414;
double r341707 = r341698 / r341689;
double r341708 = r341706 * r341707;
double r341709 = r341705 - r341708;
double r341710 = r341696 + r341709;
double r341711 = 15.234687407;
double r341712 = r341689 + r341711;
double r341713 = r341712 * r341689;
double r341714 = 31.4690115749;
double r341715 = r341713 + r341714;
double r341716 = r341715 * r341689;
double r341717 = 11.9400905721;
double r341718 = r341716 + r341717;
double r341719 = r341718 * r341689;
double r341720 = 0.607771387771;
double r341721 = r341719 + r341720;
double r341722 = r341698 / r341721;
double r341723 = r341689 * r341697;
double r341724 = 11.1667541262;
double r341725 = r341723 + r341724;
double r341726 = r341725 * r341689;
double r341727 = r341726 + r341700;
double r341728 = r341727 * r341689;
double r341729 = a;
double r341730 = r341728 + r341729;
double r341731 = r341730 * r341689;
double r341732 = b;
double r341733 = r341731 + r341732;
double r341734 = r341722 * r341733;
double r341735 = r341696 + r341734;
double r341736 = r341695 ? r341710 : r341735;
return r341736;
}




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 | 30.0 |
|---|---|
| Target | 1.1 |
| Herbie | 4.7 |
if z < -3.341610835634003e+23 or 3.2272260316104524e+42 < z Initial program 59.5
Taylor expanded around inf 8.6
if -3.341610835634003e+23 < z < 3.2272260316104524e+42Initial program 1.1
rmApplied associate-/l*0.6
rmApplied associate-/r/0.8
Final simplification4.7
herbie shell --seed 2020024
(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))))