Average Error: 6.1 → 4.6
Time: 26.6s
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 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}\]
\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 r266260 = x;
        double r266261 = 0.5;
        double r266262 = r266260 - r266261;
        double r266263 = log(r266260);
        double r266264 = r266262 * r266263;
        double r266265 = r266264 - r266260;
        double r266266 = 0.91893853320467;
        double r266267 = r266265 + r266266;
        double r266268 = y;
        double r266269 = 0.0007936500793651;
        double r266270 = r266268 + r266269;
        double r266271 = z;
        double r266272 = r266270 * r266271;
        double r266273 = 0.0027777777777778;
        double r266274 = r266272 - r266273;
        double r266275 = r266274 * r266271;
        double r266276 = 0.083333333333333;
        double r266277 = r266275 + r266276;
        double r266278 = r266277 / r266260;
        double r266279 = r266267 + r266278;
        return r266279;
}

double f(double x, double y, double z) {
        double r266280 = x;
        double r266281 = 1.4885262816105155e+82;
        bool r266282 = r266280 <= r266281;
        double r266283 = 0.91893853320467;
        double r266284 = log(r266280);
        double r266285 = 0.5;
        double r266286 = r266280 - r266285;
        double r266287 = 1.0;
        double r266288 = y;
        double r266289 = 0.0007936500793651;
        double r266290 = r266288 + r266289;
        double r266291 = z;
        double r266292 = r266290 * r266291;
        double r266293 = 0.0027777777777778;
        double r266294 = r266292 - r266293;
        double r266295 = 0.083333333333333;
        double r266296 = fma(r266294, r266291, r266295);
        double r266297 = r266280 / r266296;
        double r266298 = r266287 / r266297;
        double r266299 = fma(r266284, r266286, r266298);
        double r266300 = r266283 + r266299;
        double r266301 = r266300 - r266280;
        double r266302 = r266291 / r266280;
        double r266303 = -r266302;
        double r266304 = 2.0;
        double r266305 = pow(r266291, r266304);
        double r266306 = r266305 / r266280;
        double r266307 = r266306 * r266290;
        double r266308 = fma(r266293, r266303, r266307);
        double r266309 = fma(r266284, r266286, r266308);
        double r266310 = r266283 + r266309;
        double r266311 = r266310 - r266280;
        double r266312 = r266282 ? r266301 : r266311;
        return r266312;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original6.1
Target1.2
Herbie4.6
\[\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 < 1.4885262816105155e+82

    1. Initial program 0.8

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

      \[\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 clear-num1.0

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

    if 1.4885262816105155e+82 < x

    1. Initial program 12.6

      \[\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. Simplified12.6

      \[\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. Taylor expanded around inf 12.7

      \[\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\]
    4. Simplified9.1

      \[\leadsto \left(0.9189385332046700050057097541866824030876 + \mathsf{fma}\left(\log x, x - 0.5, \color{blue}{\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\]
  3. Recombined 2 regimes into one program.
  4. Final simplification4.6

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

Reproduce

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