Average Error: 6.5 → 4.4
Time: 23.9s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original6.5
Target1.4
Herbie4.4
\[\left(\left(\left(x - 0.5\right) \cdot \log x + \left(0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{0.08333333333333299564049667651488562114537}{x}\right) + \frac{z}{x} \cdot \left(z \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321\right)\]

Derivation

  1. Split input into 2 regimes
  2. if x < 64634667762854.29

    1. Initial program 0.1

      \[\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}\]
    2. Simplified0.1

      \[\leadsto \color{blue}{\left(\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}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt0.1

      \[\leadsto \left(\color{blue}{\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\]

    if 64634667762854.29 < x

    1. Initial program 11.4

      \[\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}\]
    2. Simplified11.4

      \[\leadsto \color{blue}{\left(\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}\]
    3. Using strategy rm
    4. Applied div-inv11.4

      \[\leadsto \left(\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876\right) + \color{blue}{\mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right) \cdot \frac{1}{x}}\right) - x\]
    5. Taylor expanded around inf 11.4

      \[\leadsto \color{blue}{\left(7.936500793651000149400709382518925849581 \cdot 10^{-4} \cdot \frac{{z}^{2}}{x} + \frac{{z}^{2} \cdot y}{x}\right) - \left(x + x \cdot \log \left(\frac{1}{x}\right)\right)}\]
    6. Simplified7.6

      \[\leadsto \color{blue}{\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)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.4

    \[\leadsto \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}\]

Reproduce

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)))