\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\begin{array}{l}
\mathbf{if}\;x \le 1.488526281610515453770934858449448718954 \cdot 10^{82}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \frac{1}{\frac{x}{\mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right)}}\right)\right) - x\\
\mathbf{else}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(0.002777777777777800001512975569539776188321, -\frac{z}{x}, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\right)\right) - x\\
\end{array}double f(double x, double y, double z) {
double r307831 = x;
double r307832 = 0.5;
double r307833 = r307831 - r307832;
double r307834 = log(r307831);
double r307835 = r307833 * r307834;
double r307836 = r307835 - r307831;
double r307837 = 0.91893853320467;
double r307838 = r307836 + r307837;
double r307839 = y;
double r307840 = 0.0007936500793651;
double r307841 = r307839 + r307840;
double r307842 = z;
double r307843 = r307841 * r307842;
double r307844 = 0.0027777777777778;
double r307845 = r307843 - r307844;
double r307846 = r307845 * r307842;
double r307847 = 0.083333333333333;
double r307848 = r307846 + r307847;
double r307849 = r307848 / r307831;
double r307850 = r307838 + r307849;
return r307850;
}
double f(double x, double y, double z) {
double r307851 = x;
double r307852 = 1.4885262816105155e+82;
bool r307853 = r307851 <= r307852;
double r307854 = 0.91893853320467;
double r307855 = log(r307851);
double r307856 = 0.5;
double r307857 = r307851 - r307856;
double r307858 = 1.0;
double r307859 = y;
double r307860 = 0.0007936500793651;
double r307861 = r307859 + r307860;
double r307862 = z;
double r307863 = r307861 * r307862;
double r307864 = 0.0027777777777778;
double r307865 = r307863 - r307864;
double r307866 = 0.083333333333333;
double r307867 = fma(r307865, r307862, r307866);
double r307868 = r307851 / r307867;
double r307869 = r307858 / r307868;
double r307870 = fma(r307855, r307857, r307869);
double r307871 = r307854 + r307870;
double r307872 = r307871 - r307851;
double r307873 = r307862 / r307851;
double r307874 = -r307873;
double r307875 = 2.0;
double r307876 = pow(r307862, r307875);
double r307877 = r307876 / r307851;
double r307878 = r307877 * r307861;
double r307879 = fma(r307864, r307874, r307878);
double r307880 = fma(r307855, r307857, r307879);
double r307881 = r307854 + r307880;
double r307882 = r307881 - r307851;
double r307883 = r307853 ? r307872 : r307882;
return r307883;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.1 |
|---|---|
| Target | 1.2 |
| Herbie | 4.6 |
if x < 1.4885262816105155e+82Initial program 0.8
Simplified0.8
rmApplied clear-num1.0
if 1.4885262816105155e+82 < x Initial program 12.6
Simplified12.6
Taylor expanded around inf 12.7
Simplified9.1
Final simplification4.6
herbie shell --seed 2019323 +o rules:numerics
(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)))