Average Error: 5.7 → 4.0
Time: 36.1s
Precision: 64
\[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le 5383194378760586:\\ \;\;\;\;\left(\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} + \frac{\mathsf{fma}\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778, z, 0.0833333333333329956\right)}{x}\right) - x\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{{z}^{2}}{x}, y, \mathsf{fma}\left(\frac{{z}^{2}}{x}, 7.93650079365100015 \cdot 10^{-4}, \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.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}
\begin{array}{l}
\mathbf{if}\;x \le 5383194378760586:\\
\;\;\;\;\left(\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} + \frac{\mathsf{fma}\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778, z, 0.0833333333333329956\right)}{x}\right) - x\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{z}^{2}}{x}, y, \mathsf{fma}\left(\frac{{z}^{2}}{x}, 7.93650079365100015 \cdot 10^{-4}, \mathsf{fma}\left(\log x, x, -x\right)\right)\right)\\

\end{array}
double f(double x, double y, double z) {
        double r359077 = x;
        double r359078 = 0.5;
        double r359079 = r359077 - r359078;
        double r359080 = log(r359077);
        double r359081 = r359079 * r359080;
        double r359082 = r359081 - r359077;
        double r359083 = 0.91893853320467;
        double r359084 = r359082 + r359083;
        double r359085 = y;
        double r359086 = 0.0007936500793651;
        double r359087 = r359085 + r359086;
        double r359088 = z;
        double r359089 = r359087 * r359088;
        double r359090 = 0.0027777777777778;
        double r359091 = r359089 - r359090;
        double r359092 = r359091 * r359088;
        double r359093 = 0.083333333333333;
        double r359094 = r359092 + r359093;
        double r359095 = r359094 / r359077;
        double r359096 = r359084 + r359095;
        return r359096;
}

double f(double x, double y, double z) {
        double r359097 = x;
        double r359098 = 5383194378760586.0;
        bool r359099 = r359097 <= r359098;
        double r359100 = 0.5;
        double r359101 = r359097 - r359100;
        double r359102 = log(r359097);
        double r359103 = 0.91893853320467;
        double r359104 = fma(r359101, r359102, r359103);
        double r359105 = sqrt(r359104);
        double r359106 = r359105 * r359105;
        double r359107 = y;
        double r359108 = 0.0007936500793651;
        double r359109 = r359107 + r359108;
        double r359110 = z;
        double r359111 = r359109 * r359110;
        double r359112 = 0.0027777777777778;
        double r359113 = r359111 - r359112;
        double r359114 = 0.083333333333333;
        double r359115 = fma(r359113, r359110, r359114);
        double r359116 = r359115 / r359097;
        double r359117 = r359106 + r359116;
        double r359118 = r359117 - r359097;
        double r359119 = 2.0;
        double r359120 = pow(r359110, r359119);
        double r359121 = r359120 / r359097;
        double r359122 = -r359097;
        double r359123 = fma(r359102, r359097, r359122);
        double r359124 = fma(r359121, r359108, r359123);
        double r359125 = fma(r359121, r359107, r359124);
        double r359126 = r359099 ? r359118 : r359125;
        return r359126;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original5.7
Target1.2
Herbie4.0
\[\left(\left(\left(x - 0.5\right) \cdot \log x + \left(0.91893853320467001 - x\right)\right) + \frac{0.0833333333333329956}{x}\right) + \frac{z}{x} \cdot \left(z \cdot \left(y + 7.93650079365100015 \cdot 10^{-4}\right) - 0.0027777777777778\right)\]

Derivation

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

    1. Initial program 0.2

      \[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
    2. Simplified0.2

      \[\leadsto \color{blue}{\left(\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right) + \frac{\mathsf{fma}\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778, z, 0.0833333333333329956\right)}{x}\right) - x}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt0.2

      \[\leadsto \left(\color{blue}{\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)}} + \frac{\mathsf{fma}\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778, z, 0.0833333333333329956\right)}{x}\right) - x\]

    if 5383194378760586.0 < x

    1. Initial program 9.9

      \[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467001\right) + \frac{\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.0833333333333329956}{x}\]
    2. Simplified9.9

      \[\leadsto \color{blue}{\left(\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right) + \frac{\mathsf{fma}\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778, z, 0.0833333333333329956\right)}{x}\right) - x}\]
    3. Taylor expanded around inf 10.0

      \[\leadsto \color{blue}{\left(7.93650079365100015 \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)}\]
    4. Simplified6.9

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 5383194378760586:\\ \;\;\;\;\left(\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.91893853320467001\right)} + \frac{\mathsf{fma}\left(\left(y + 7.93650079365100015 \cdot 10^{-4}\right) \cdot z - 0.0027777777777778, z, 0.0833333333333329956\right)}{x}\right) - x\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{{z}^{2}}{x}, y, \mathsf{fma}\left(\frac{{z}^{2}}{x}, 7.93650079365100015 \cdot 10^{-4}, \mathsf{fma}\left(\log x, x, -x\right)\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019199 +o rules:numerics
(FPCore (x y z)
  :name "Numeric.SpecFunctions:$slogFactorial from math-functions-0.1.5.2, B"

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