x + \frac{y \cdot \left(\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736\right)}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\begin{array}{l}
\mathbf{if}\;z \le -644290.947673877584747970104217529296875 \lor \neg \left(z \le 28445.43794444602463045157492160797119141\right):\\
\;\;\;\;x + \left(\left(0.07512208616047560960637952121032867580652 \cdot \frac{y}{z} + 0.06929105992918889456166908757950295694172 \cdot y\right) - 0.4046220386999212492717958866705885156989 \cdot \frac{y}{{z}^{2}}\right)\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{\left(z \cdot 0.06929105992918889456166908757950295694172 + 0.4917317610505967939715787906607147306204\right) \cdot z + 0.2791953179185249767080279070796677842736}{\left(z + 6.012459259764103336465268512256443500519\right) \cdot z + 3.350343815022303939343828460550867021084}\\
\end{array}double f(double x, double y, double z) {
double r297752 = x;
double r297753 = y;
double r297754 = z;
double r297755 = 0.0692910599291889;
double r297756 = r297754 * r297755;
double r297757 = 0.4917317610505968;
double r297758 = r297756 + r297757;
double r297759 = r297758 * r297754;
double r297760 = 0.279195317918525;
double r297761 = r297759 + r297760;
double r297762 = r297753 * r297761;
double r297763 = 6.012459259764103;
double r297764 = r297754 + r297763;
double r297765 = r297764 * r297754;
double r297766 = 3.350343815022304;
double r297767 = r297765 + r297766;
double r297768 = r297762 / r297767;
double r297769 = r297752 + r297768;
return r297769;
}
double f(double x, double y, double z) {
double r297770 = z;
double r297771 = -644290.9476738776;
bool r297772 = r297770 <= r297771;
double r297773 = 28445.437944446025;
bool r297774 = r297770 <= r297773;
double r297775 = !r297774;
bool r297776 = r297772 || r297775;
double r297777 = x;
double r297778 = 0.07512208616047561;
double r297779 = y;
double r297780 = r297779 / r297770;
double r297781 = r297778 * r297780;
double r297782 = 0.0692910599291889;
double r297783 = r297782 * r297779;
double r297784 = r297781 + r297783;
double r297785 = 0.40462203869992125;
double r297786 = 2.0;
double r297787 = pow(r297770, r297786);
double r297788 = r297779 / r297787;
double r297789 = r297785 * r297788;
double r297790 = r297784 - r297789;
double r297791 = r297777 + r297790;
double r297792 = r297770 * r297782;
double r297793 = 0.4917317610505968;
double r297794 = r297792 + r297793;
double r297795 = r297794 * r297770;
double r297796 = 0.279195317918525;
double r297797 = r297795 + r297796;
double r297798 = 6.012459259764103;
double r297799 = r297770 + r297798;
double r297800 = r297799 * r297770;
double r297801 = 3.350343815022304;
double r297802 = r297800 + r297801;
double r297803 = r297797 / r297802;
double r297804 = r297779 * r297803;
double r297805 = r297777 + r297804;
double r297806 = r297776 ? r297791 : r297805;
return r297806;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 20.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if z < -644290.9476738776 or 28445.437944446025 < z Initial program 41.0
Taylor expanded around inf 0.0
if -644290.9476738776 < z < 28445.437944446025Initial program 0.2
rmApplied *-un-lft-identity0.2
Applied times-frac0.1
Simplified0.1
Final simplification0.1
herbie shell --seed 2019212
(FPCore (x y z)
:name "Numeric.SpecFunctions:logGamma from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(if (< z -8120153.6524566747) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x)) (if (< z 657611897278737680000) (+ x (* (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (/ 1 (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394)))) (- (* (+ (/ 0.07512208616047561 z) 0.0692910599291888946) y) (- (/ (* 0.404622038699921249 y) (* z z)) x))))
(+ x (/ (* y (+ (* (+ (* z 0.0692910599291888946) 0.49173176105059679) z) 0.279195317918524977)) (+ (* (+ z 6.0124592597641033) z) 3.35034381502230394))))