\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 64634667762854.2890625:\\
\;\;\;\;\left(\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876\right)} + \frac{\mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right)}{x}\right) - x\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{z}^{2}}{x}, y, \mathsf{fma}\left(7.936500793651000149400709382518925849581 \cdot 10^{-4}, \frac{{z}^{2}}{x}, \mathsf{fma}\left(\log x, x, -x\right)\right)\right)\\
\end{array}double f(double x, double y, double z) {
double r302397 = x;
double r302398 = 0.5;
double r302399 = r302397 - r302398;
double r302400 = log(r302397);
double r302401 = r302399 * r302400;
double r302402 = r302401 - r302397;
double r302403 = 0.91893853320467;
double r302404 = r302402 + r302403;
double r302405 = y;
double r302406 = 0.0007936500793651;
double r302407 = r302405 + r302406;
double r302408 = z;
double r302409 = r302407 * r302408;
double r302410 = 0.0027777777777778;
double r302411 = r302409 - r302410;
double r302412 = r302411 * r302408;
double r302413 = 0.083333333333333;
double r302414 = r302412 + r302413;
double r302415 = r302414 / r302397;
double r302416 = r302404 + r302415;
return r302416;
}
double f(double x, double y, double z) {
double r302417 = x;
double r302418 = 64634667762854.29;
bool r302419 = r302417 <= r302418;
double r302420 = 0.5;
double r302421 = r302417 - r302420;
double r302422 = log(r302417);
double r302423 = 0.91893853320467;
double r302424 = fma(r302421, r302422, r302423);
double r302425 = sqrt(r302424);
double r302426 = r302425 * r302425;
double r302427 = y;
double r302428 = 0.0007936500793651;
double r302429 = r302427 + r302428;
double r302430 = z;
double r302431 = r302429 * r302430;
double r302432 = 0.0027777777777778;
double r302433 = r302431 - r302432;
double r302434 = 0.083333333333333;
double r302435 = fma(r302433, r302430, r302434);
double r302436 = r302435 / r302417;
double r302437 = r302426 + r302436;
double r302438 = r302437 - r302417;
double r302439 = 2.0;
double r302440 = pow(r302430, r302439);
double r302441 = r302440 / r302417;
double r302442 = -r302417;
double r302443 = fma(r302422, r302417, r302442);
double r302444 = fma(r302428, r302441, r302443);
double r302445 = fma(r302441, r302427, r302444);
double r302446 = r302419 ? r302438 : r302445;
return r302446;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 6.5 |
|---|---|
| Target | 1.4 |
| Herbie | 4.4 |
if x < 64634667762854.29Initial program 0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
if 64634667762854.29 < x Initial program 11.4
Simplified11.4
rmApplied div-inv11.4
Taylor expanded around inf 11.4
Simplified7.6
Final simplification4.4
herbie shell --seed 2019235 +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.91893853320467001 x)) (/ 0.0833333333333329956 x)) (* (/ z x) (- (* z (+ y 7.93650079365100015e-4)) 0.0027777777777778)))
(+ (+ (- (* (- x 0.5) (log x)) x) 0.91893853320467001) (/ (+ (* (- (* (+ y 7.93650079365100015e-4) z) 0.0027777777777778) z) 0.0833333333333329956) x)))