\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\begin{array}{l}
\mathbf{if}\;x \le 2.7185324079134918 \cdot 10^{63}:\\
\;\;\;\;\left(\left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) + \left(\log \left(\sqrt{x}\right) \cdot \left(x - 0.5\right) - x\right)\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.93650079365100015 \cdot 10^{-4}\right) - 0.0027777777777778 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r572722 = x;
double r572723 = 0.5;
double r572724 = r572722 - r572723;
double r572725 = log(r572722);
double r572726 = r572724 * r572725;
double r572727 = r572726 - r572722;
double r572728 = 0.91893853320467;
double r572729 = r572727 + r572728;
double r572730 = y;
double r572731 = 0.0007936500793651;
double r572732 = r572730 + r572731;
double r572733 = z;
double r572734 = r572732 * r572733;
double r572735 = 0.0027777777777778;
double r572736 = r572734 - r572735;
double r572737 = r572736 * r572733;
double r572738 = 0.083333333333333;
double r572739 = r572737 + r572738;
double r572740 = r572739 / r572722;
double r572741 = r572729 + r572740;
return r572741;
}
double f(double x, double y, double z) {
double r572742 = x;
double r572743 = 2.718532407913492e+63;
bool r572744 = r572742 <= r572743;
double r572745 = sqrt(r572742);
double r572746 = log(r572745);
double r572747 = 0.5;
double r572748 = r572742 - r572747;
double r572749 = r572746 * r572748;
double r572750 = r572749 - r572742;
double r572751 = r572749 + r572750;
double r572752 = 0.91893853320467;
double r572753 = r572751 + r572752;
double r572754 = y;
double r572755 = 0.0007936500793651;
double r572756 = r572754 + r572755;
double r572757 = z;
double r572758 = r572756 * r572757;
double r572759 = 0.0027777777777778;
double r572760 = r572758 - r572759;
double r572761 = r572760 * r572757;
double r572762 = 0.083333333333333;
double r572763 = r572761 + r572762;
double r572764 = r572763 / r572742;
double r572765 = r572753 + r572764;
double r572766 = log(r572742);
double r572767 = r572748 * r572766;
double r572768 = r572767 - r572742;
double r572769 = r572768 + r572752;
double r572770 = 2.0;
double r572771 = pow(r572757, r572770);
double r572772 = r572771 / r572742;
double r572773 = r572772 * r572756;
double r572774 = r572757 / r572742;
double r572775 = r572759 * r572774;
double r572776 = r572773 - r572775;
double r572777 = r572769 + r572776;
double r572778 = r572744 ? r572765 : r572777;
return r572778;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 5.8 |
|---|---|
| Target | 1.2 |
| Herbie | 4.1 |
if x < 2.718532407913492e+63Initial program 0.8
rmApplied add-sqr-sqrt0.8
Applied log-prod0.8
Applied distribute-rgt-in0.8
Applied associate--l+0.8
if 2.718532407913492e+63 < x Initial program 11.2
Taylor expanded around inf 11.3
Simplified7.6
Final simplification4.1
herbie shell --seed 2020042
(FPCore (x y z)
:name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"
:precision binary64
:herbie-target
(+ (+ (+ (* (- x 0.5) (log x)) (- 0.91893853320467 x)) (/ 0.083333333333333 x)) (* (/ z x) (- (* z (+ y 0.0007936500793651)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467) (/ (+ (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) 0.083333333333333) x)))