x + \frac{y \cdot \left(\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977\right)}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\begin{array}{l}
\mathbf{if}\;z \le -1.6182939126081175 \cdot 10^{49} \lor \neg \left(z \le 512530.02217296814\right):\\
\;\;\;\;x + \left(\left(0.07512208616047561 \cdot \frac{y}{z} + 0.0692910599291888946 \cdot y\right) - 0.404622038699921249 \cdot \frac{y}{{z}^{2}}\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(z \cdot 0.0692910599291888946 + 0.49173176105059679\right) \cdot z + 0.279195317918524977}{\left(z + 6.0124592597641033\right) \cdot z + 3.35034381502230394}\\
\end{array}double f(double x, double y, double z) {
double r442727 = x;
double r442728 = y;
double r442729 = z;
double r442730 = 0.0692910599291889;
double r442731 = r442729 * r442730;
double r442732 = 0.4917317610505968;
double r442733 = r442731 + r442732;
double r442734 = r442733 * r442729;
double r442735 = 0.279195317918525;
double r442736 = r442734 + r442735;
double r442737 = r442728 * r442736;
double r442738 = 6.012459259764103;
double r442739 = r442729 + r442738;
double r442740 = r442739 * r442729;
double r442741 = 3.350343815022304;
double r442742 = r442740 + r442741;
double r442743 = r442737 / r442742;
double r442744 = r442727 + r442743;
return r442744;
}
double f(double x, double y, double z) {
double r442745 = z;
double r442746 = -1.6182939126081175e+49;
bool r442747 = r442745 <= r442746;
double r442748 = 512530.02217296814;
bool r442749 = r442745 <= r442748;
double r442750 = !r442749;
bool r442751 = r442747 || r442750;
double r442752 = x;
double r442753 = 0.07512208616047561;
double r442754 = y;
double r442755 = r442754 / r442745;
double r442756 = r442753 * r442755;
double r442757 = 0.0692910599291889;
double r442758 = r442757 * r442754;
double r442759 = r442756 + r442758;
double r442760 = 0.40462203869992125;
double r442761 = 2.0;
double r442762 = pow(r442745, r442761);
double r442763 = r442754 / r442762;
double r442764 = r442760 * r442763;
double r442765 = r442759 - r442764;
double r442766 = r442752 + r442765;
double r442767 = r442745 * r442757;
double r442768 = 0.4917317610505968;
double r442769 = r442767 + r442768;
double r442770 = r442769 * r442745;
double r442771 = 0.279195317918525;
double r442772 = r442770 + r442771;
double r442773 = 6.012459259764103;
double r442774 = r442745 + r442773;
double r442775 = r442774 * r442745;
double r442776 = 3.350343815022304;
double r442777 = r442775 + r442776;
double r442778 = r442772 / r442777;
double r442779 = r442754 * r442778;
double r442780 = r442752 + r442779;
double r442781 = r442751 ? r442766 : r442780;
return r442781;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.1 |
|---|---|
| Target | 0.1 |
| Herbie | 0.1 |
if z < -1.6182939126081175e+49 or 512530.02217296814 < z Initial program 44.1
Taylor expanded around inf 0.0
if -1.6182939126081175e+49 < z < 512530.02217296814Initial program 0.6
rmApplied *-un-lft-identity0.6
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2020057
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.652456675) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (/ 1 (+ (* (+ z 6.012459259764103) z) 3.350343815022304)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291889) y) (- (/ (* 0.40462203869992125 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291889) 0.4917317610505968) z) 0.279195317918525)) (+ (* (+ z 6.012459259764103) z) 3.350343815022304))))