Average Error: 6.0 → 4.1
Time: 29.3s
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 7252182.273118807934224605560302734375:\\ \;\;\;\;\left(\left(\sqrt{\left(x - 0.5\right) \cdot \log x} \cdot \sqrt{\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}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\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 7252182.273118807934224605560302734375:\\
\;\;\;\;\left(\left(\sqrt{\left(x - 0.5\right) \cdot \log x} \cdot \sqrt{\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}\\

\mathbf{else}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right)\\

\end{array}
double f(double x, double y, double z) {
        double r377919 = x;
        double r377920 = 0.5;
        double r377921 = r377919 - r377920;
        double r377922 = log(r377919);
        double r377923 = r377921 * r377922;
        double r377924 = r377923 - r377919;
        double r377925 = 0.91893853320467;
        double r377926 = r377924 + r377925;
        double r377927 = y;
        double r377928 = 0.0007936500793651;
        double r377929 = r377927 + r377928;
        double r377930 = z;
        double r377931 = r377929 * r377930;
        double r377932 = 0.0027777777777778;
        double r377933 = r377931 - r377932;
        double r377934 = r377933 * r377930;
        double r377935 = 0.083333333333333;
        double r377936 = r377934 + r377935;
        double r377937 = r377936 / r377919;
        double r377938 = r377926 + r377937;
        return r377938;
}

double f(double x, double y, double z) {
        double r377939 = x;
        double r377940 = 7252182.273118808;
        bool r377941 = r377939 <= r377940;
        double r377942 = 0.5;
        double r377943 = r377939 - r377942;
        double r377944 = log(r377939);
        double r377945 = r377943 * r377944;
        double r377946 = sqrt(r377945);
        double r377947 = r377946 * r377946;
        double r377948 = r377947 - r377939;
        double r377949 = 0.91893853320467;
        double r377950 = r377948 + r377949;
        double r377951 = y;
        double r377952 = 0.0007936500793651;
        double r377953 = r377951 + r377952;
        double r377954 = z;
        double r377955 = r377953 * r377954;
        double r377956 = 0.0027777777777778;
        double r377957 = r377955 - r377956;
        double r377958 = r377957 * r377954;
        double r377959 = 0.083333333333333;
        double r377960 = r377958 + r377959;
        double r377961 = r377960 / r377939;
        double r377962 = r377950 + r377961;
        double r377963 = r377945 - r377939;
        double r377964 = r377963 + r377949;
        double r377965 = 2.0;
        double r377966 = pow(r377954, r377965);
        double r377967 = r377966 / r377939;
        double r377968 = r377967 * r377953;
        double r377969 = r377954 / r377939;
        double r377970 = r377956 * r377969;
        double r377971 = r377968 - r377970;
        double r377972 = r377964 + r377971;
        double r377973 = r377941 ? r377962 : r377972;
        return r377973;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original6.0
Target1.2
Herbie4.1
\[\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 < 7252182.273118808

    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. Using strategy rm
    3. Applied add-sqr-sqrt0.2

      \[\leadsto \left(\left(\color{blue}{\sqrt{\left(x - 0.5\right) \cdot \log x} \cdot \sqrt{\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}\]

    if 7252182.273118808 < x

    1. Initial program 10.3

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

      \[\leadsto \left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \color{blue}{\left(\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)}\]
    3. Simplified7.1

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 7252182.273118807934224605560302734375:\\ \;\;\;\;\left(\left(\sqrt{\left(x - 0.5\right) \cdot \log x} \cdot \sqrt{\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}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \left(\frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) - 0.002777777777777800001512975569539776188321 \cdot \frac{z}{x}\right)\\ \end{array}\]

Reproduce

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