Average Error: 5.9 → 2.8
Time: 17.7s
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 520673369551077.9375:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876 - x\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876 - x\right)} + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\ \mathbf{elif}\;x \le 5.427653638664575180888761127661053009556 \cdot 10^{140}:\\ \;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \mathsf{fma}\left(-\frac{z}{x}, 0.002777777777777800001512975569539776188321, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{1}{x \cdot \left(z \cdot \left(0.4000000000000064059868520871532382443547 - 0.1009522780952416126654114236771420110017 \cdot z\right) + 12.00000000000004796163466380676254630089\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 520673369551077.9375:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876 - x\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876 - x\right)} + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\

\mathbf{elif}\;x \le 5.427653638664575180888761127661053009556 \cdot 10^{140}:\\
\;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \mathsf{fma}\left(-\frac{z}{x}, 0.002777777777777800001512975569539776188321, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{1}{x \cdot \left(z \cdot \left(0.4000000000000064059868520871532382443547 - 0.1009522780952416126654114236771420110017 \cdot z\right) + 12.00000000000004796163466380676254630089\right)}\\

\end{array}
double f(double x, double y, double z) {
        double r350040 = x;
        double r350041 = 0.5;
        double r350042 = r350040 - r350041;
        double r350043 = log(r350040);
        double r350044 = r350042 * r350043;
        double r350045 = r350044 - r350040;
        double r350046 = 0.91893853320467;
        double r350047 = r350045 + r350046;
        double r350048 = y;
        double r350049 = 0.0007936500793651;
        double r350050 = r350048 + r350049;
        double r350051 = z;
        double r350052 = r350050 * r350051;
        double r350053 = 0.0027777777777778;
        double r350054 = r350052 - r350053;
        double r350055 = r350054 * r350051;
        double r350056 = 0.083333333333333;
        double r350057 = r350055 + r350056;
        double r350058 = r350057 / r350040;
        double r350059 = r350047 + r350058;
        return r350059;
}

double f(double x, double y, double z) {
        double r350060 = x;
        double r350061 = 520673369551077.94;
        bool r350062 = r350060 <= r350061;
        double r350063 = 0.5;
        double r350064 = r350060 - r350063;
        double r350065 = log(r350060);
        double r350066 = 0.91893853320467;
        double r350067 = r350066 - r350060;
        double r350068 = fma(r350064, r350065, r350067);
        double r350069 = sqrt(r350068);
        double r350070 = r350069 * r350069;
        double r350071 = y;
        double r350072 = 0.0007936500793651;
        double r350073 = r350071 + r350072;
        double r350074 = z;
        double r350075 = r350073 * r350074;
        double r350076 = 0.0027777777777778;
        double r350077 = r350075 - r350076;
        double r350078 = r350077 * r350074;
        double r350079 = 0.083333333333333;
        double r350080 = r350078 + r350079;
        double r350081 = r350080 / r350060;
        double r350082 = r350070 + r350081;
        double r350083 = 5.427653638664575e+140;
        bool r350084 = r350060 <= r350083;
        double r350085 = r350064 * r350065;
        double r350086 = r350085 - r350060;
        double r350087 = r350086 + r350066;
        double r350088 = r350074 / r350060;
        double r350089 = -r350088;
        double r350090 = 2.0;
        double r350091 = pow(r350074, r350090);
        double r350092 = r350091 / r350060;
        double r350093 = r350092 * r350073;
        double r350094 = fma(r350089, r350076, r350093);
        double r350095 = r350087 + r350094;
        double r350096 = cbrt(r350060);
        double r350097 = r350096 * r350096;
        double r350098 = log(r350097);
        double r350099 = r350098 * r350064;
        double r350100 = log(r350096);
        double r350101 = fma(r350064, r350100, r350067);
        double r350102 = r350099 + r350101;
        double r350103 = 1.0;
        double r350104 = 0.4000000000000064;
        double r350105 = 0.10095227809524161;
        double r350106 = r350105 * r350074;
        double r350107 = r350104 - r350106;
        double r350108 = r350074 * r350107;
        double r350109 = 12.000000000000048;
        double r350110 = r350108 + r350109;
        double r350111 = r350060 * r350110;
        double r350112 = r350103 / r350111;
        double r350113 = r350102 + r350112;
        double r350114 = r350084 ? r350095 : r350113;
        double r350115 = r350062 ? r350082 : r350114;
        return r350115;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original5.9
Target1.2
Herbie2.8
\[\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 3 regimes
  2. if x < 520673369551077.94

    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 \color{blue}{\sqrt{\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876} \cdot \sqrt{\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876}} + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\]
    4. Simplified0.2

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

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

    if 520673369551077.94 < x < 5.427653638664575e+140

    1. Initial program 5.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. Taylor expanded around inf 5.8

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

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

    if 5.427653638664575e+140 < x

    1. Initial program 13.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. Using strategy rm
    3. Applied add-cube-cbrt13.5

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

      \[\leadsto \left(\left(\left(x - 0.5\right) \cdot \color{blue}{\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) + \log \left(\sqrt[3]{x}\right)\right)} - 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}\]
    5. Applied distribute-rgt-in13.5

      \[\leadsto \left(\left(\color{blue}{\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right)} - 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}\]
    6. Applied associate--l+13.5

      \[\leadsto \left(\color{blue}{\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right)\right)} + 0.9189385332046700050057097541866824030876\right) + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\]
    7. Applied associate-+l+13.5

      \[\leadsto \color{blue}{\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\left(\log \left(\sqrt[3]{x}\right) \cdot \left(x - 0.5\right) - x\right) + 0.9189385332046700050057097541866824030876\right)\right)} + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\]
    8. Simplified13.5

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

      \[\leadsto \left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \color{blue}{\frac{1}{\frac{x}{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}}}\]
    11. Simplified13.5

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

      \[\leadsto \left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{1}{\color{blue}{\left(0.4000000000000064059868520871532382443547 \cdot \left(x \cdot z\right) + 12.00000000000004796163466380676254630089 \cdot x\right) - 0.1009522780952416126654114236771420110017 \cdot \left(x \cdot {z}^{2}\right)}}\]
    13. Simplified5.5

      \[\leadsto \left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{1}{\color{blue}{x \cdot \left(z \cdot \left(0.4000000000000064059868520871532382443547 - 0.1009522780952416126654114236771420110017 \cdot z\right) + 12.00000000000004796163466380676254630089\right)}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification2.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 520673369551077.9375:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876 - x\right)} \cdot \sqrt{\mathsf{fma}\left(x - 0.5, \log x, 0.9189385332046700050057097541866824030876 - x\right)} + \frac{\left(\left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right) \cdot z - 0.002777777777777800001512975569539776188321\right) \cdot z + 0.08333333333333299564049667651488562114537}{x}\\ \mathbf{elif}\;x \le 5.427653638664575180888761127661053009556 \cdot 10^{140}:\\ \;\;\;\;\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.9189385332046700050057097541866824030876\right) + \mathsf{fma}\left(-\frac{z}{x}, 0.002777777777777800001512975569539776188321, \frac{{z}^{2}}{x} \cdot \left(y + 7.936500793651000149400709382518925849581 \cdot 10^{-4}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \mathsf{fma}\left(x - 0.5, \log \left(\sqrt[3]{x}\right), 0.9189385332046700050057097541866824030876 - x\right)\right) + \frac{1}{x \cdot \left(z \cdot \left(0.4000000000000064059868520871532382443547 - 0.1009522780952416126654114236771420110017 \cdot z\right) + 12.00000000000004796163466380676254630089\right)}\\ \end{array}\]

Reproduce

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