Average Error: 6.0 → 4.4
Time: 31.0s
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 3.0969566184972678123326658556504927068 \cdot 10^{49}:\\ \;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right) \cdot \frac{1}{x}\right)\right) - x\\ \mathbf{else}:\\ \;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(\frac{z}{x}, -0.002777777777777800001512975569539776188321, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\right)\right) - x\\ \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 3.0969566184972678123326658556504927068 \cdot 10^{49}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right) \cdot \frac{1}{x}\right)\right) - x\\

\mathbf{else}:\\
\;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(\frac{z}{x}, -0.002777777777777800001512975569539776188321, \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 r342521 = x;
        double r342522 = 0.5;
        double r342523 = r342521 - r342522;
        double r342524 = log(r342521);
        double r342525 = r342523 * r342524;
        double r342526 = r342525 - r342521;
        double r342527 = 0.91893853320467;
        double r342528 = r342526 + r342527;
        double r342529 = y;
        double r342530 = 0.0007936500793651;
        double r342531 = r342529 + r342530;
        double r342532 = z;
        double r342533 = r342531 * r342532;
        double r342534 = 0.0027777777777778;
        double r342535 = r342533 - r342534;
        double r342536 = r342535 * r342532;
        double r342537 = 0.083333333333333;
        double r342538 = r342536 + r342537;
        double r342539 = r342538 / r342521;
        double r342540 = r342528 + r342539;
        return r342540;
}

double f(double x, double y, double z) {
        double r342541 = x;
        double r342542 = 3.096956618497268e+49;
        bool r342543 = r342541 <= r342542;
        double r342544 = 0.91893853320467;
        double r342545 = log(r342541);
        double r342546 = 0.5;
        double r342547 = r342541 - r342546;
        double r342548 = y;
        double r342549 = 0.0007936500793651;
        double r342550 = r342548 + r342549;
        double r342551 = z;
        double r342552 = r342550 * r342551;
        double r342553 = 0.0027777777777778;
        double r342554 = r342552 - r342553;
        double r342555 = 0.083333333333333;
        double r342556 = fma(r342554, r342551, r342555);
        double r342557 = 1.0;
        double r342558 = r342557 / r342541;
        double r342559 = r342556 * r342558;
        double r342560 = fma(r342545, r342547, r342559);
        double r342561 = r342544 + r342560;
        double r342562 = r342561 - r342541;
        double r342563 = r342551 / r342541;
        double r342564 = -r342553;
        double r342565 = 2.0;
        double r342566 = pow(r342551, r342565);
        double r342567 = r342566 / r342541;
        double r342568 = r342567 * r342550;
        double r342569 = fma(r342563, r342564, r342568);
        double r342570 = fma(r342545, r342547, r342569);
        double r342571 = r342544 + r342570;
        double r342572 = r342571 - r342541;
        double r342573 = r342543 ? r342562 : r342572;
        return r342573;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original6.0
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 < 3.096956618497268e+49

    1. Initial program 0.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. Simplified0.4

      \[\leadsto \color{blue}{\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \frac{\mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right)}{x}\right)\right) - x}\]
    3. Using strategy rm
    4. Applied div-inv0.6

      \[\leadsto \left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \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)\right) - x\]

    if 3.096956618497268e+49 < x

    1. Initial program 11.5

      \[\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.5

      \[\leadsto \color{blue}{\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \frac{\mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right)}{x}\right)\right) - x}\]
    3. Using strategy rm
    4. Applied div-inv11.5

      \[\leadsto \left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \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)\right) - x\]
    5. Taylor expanded around inf 11.6

      \[\leadsto \left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \color{blue}{\left(7.936500793651000149400709382518925849581 \cdot 10^{-4} \cdot \frac{{z}^{2}}{x} + \frac{{z}^{2} \cdot y}{x}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}}\right)\right) - x\]
    6. Simplified8.1

      \[\leadsto \left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \color{blue}{\mathsf{fma}\left(\frac{z}{x}, -0.002777777777777800001512975569539776188321, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)}\right)\right) - x\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 3.0969566184972678123326658556504927068 \cdot 10^{49}:\\ \;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321, z, 0.08333333333333299564049667651488562114537\right) \cdot \frac{1}{x}\right)\right) - x\\ \mathbf{else}:\\ \;\;\;\;\left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \mathsf{fma}\left(\frac{z}{x}, -0.002777777777777800001512975569539776188321, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\right)\right) - x\\ \end{array}\]

Reproduce

herbie shell --seed 2019325 +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)))