\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 7252182.273118807934224605560302734375:\\
\;\;\;\;\left(\left(\sqrt{\left(x - 0.5\right) \cdot \log x} \cdot \sqrt{\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}\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right)\\
\end{array}double f(double x, double y, double z) {
double r377919 = x;
double r377920 = 0.5;
double r377921 = r377919 - r377920;
double r377922 = log(r377919);
double r377923 = r377921 * r377922;
double r377924 = r377923 - r377919;
double r377925 = 0.91893853320467;
double r377926 = r377924 + r377925;
double r377927 = y;
double r377928 = 0.0007936500793651;
double r377929 = r377927 + r377928;
double r377930 = z;
double r377931 = r377929 * r377930;
double r377932 = 0.0027777777777778;
double r377933 = r377931 - r377932;
double r377934 = r377933 * r377930;
double r377935 = 0.083333333333333;
double r377936 = r377934 + r377935;
double r377937 = r377936 / r377919;
double r377938 = r377926 + r377937;
return r377938;
}
double f(double x, double y, double z) {
double r377939 = x;
double r377940 = 7252182.273118808;
bool r377941 = r377939 <= r377940;
double r377942 = 0.5;
double r377943 = r377939 - r377942;
double r377944 = log(r377939);
double r377945 = r377943 * r377944;
double r377946 = sqrt(r377945);
double r377947 = r377946 * r377946;
double r377948 = r377947 - r377939;
double r377949 = 0.91893853320467;
double r377950 = r377948 + r377949;
double r377951 = y;
double r377952 = 0.0007936500793651;
double r377953 = r377951 + r377952;
double r377954 = z;
double r377955 = r377953 * r377954;
double r377956 = 0.0027777777777778;
double r377957 = r377955 - r377956;
double r377958 = r377957 * r377954;
double r377959 = 0.083333333333333;
double r377960 = r377958 + r377959;
double r377961 = r377960 / r377939;
double r377962 = r377950 + r377961;
double r377963 = r377945 - r377939;
double r377964 = r377963 + r377949;
double r377965 = 2.0;
double r377966 = pow(r377954, r377965);
double r377967 = r377966 / r377939;
double r377968 = r377967 * r377953;
double r377969 = r377954 / r377939;
double r377970 = r377956 * r377969;
double r377971 = r377968 - r377970;
double r377972 = r377964 + r377971;
double r377973 = r377941 ? r377962 : r377972;
return r377973;
}




Bits error versus x




Bits error versus y




Bits error versus z
Results
| Original | 6.0 |
|---|---|
| Target | 1.2 |
| Herbie | 4.1 |
if x < 7252182.273118808Initial program 0.1
rmApplied add-sqr-sqrt0.2
if 7252182.273118808 < x Initial program 10.3
Taylor expanded around inf 10.4
Simplified7.1
Final simplification4.1
herbie shell --seed 2019326 +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)))