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

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

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

\end{array}
double f(double x, double y, double z) {
        double r18964767 = x;
        double r18964768 = 0.5;
        double r18964769 = r18964767 - r18964768;
        double r18964770 = log(r18964767);
        double r18964771 = r18964769 * r18964770;
        double r18964772 = r18964771 - r18964767;
        double r18964773 = 0.91893853320467;
        double r18964774 = r18964772 + r18964773;
        double r18964775 = y;
        double r18964776 = 0.0007936500793651;
        double r18964777 = r18964775 + r18964776;
        double r18964778 = z;
        double r18964779 = r18964777 * r18964778;
        double r18964780 = 0.0027777777777778;
        double r18964781 = r18964779 - r18964780;
        double r18964782 = r18964781 * r18964778;
        double r18964783 = 0.083333333333333;
        double r18964784 = r18964782 + r18964783;
        double r18964785 = r18964784 / r18964767;
        double r18964786 = r18964774 + r18964785;
        return r18964786;
}

double f(double x, double y, double z) {
        double r18964787 = z;
        double r18964788 = -3.231657961535374e+33;
        bool r18964789 = r18964787 <= r18964788;
        double r18964790 = x;
        double r18964791 = log(r18964790);
        double r18964792 = 0.5;
        double r18964793 = r18964790 - r18964792;
        double r18964794 = r18964787 * r18964787;
        double r18964795 = r18964794 / r18964790;
        double r18964796 = y;
        double r18964797 = 0.0007936500793651;
        double r18964798 = r18964790 / r18964797;
        double r18964799 = r18964794 / r18964798;
        double r18964800 = 0.0027777777777778;
        double r18964801 = r18964787 / r18964790;
        double r18964802 = r18964800 * r18964801;
        double r18964803 = r18964799 - r18964802;
        double r18964804 = fma(r18964795, r18964796, r18964803);
        double r18964805 = fma(r18964791, r18964793, r18964804);
        double r18964806 = 0.91893853320467;
        double r18964807 = r18964806 - r18964790;
        double r18964808 = r18964805 + r18964807;
        double r18964809 = 1340928350.1376693;
        bool r18964810 = r18964787 <= r18964809;
        double r18964811 = 1.0;
        double r18964812 = r18964797 + r18964796;
        double r18964813 = r18964787 * r18964812;
        double r18964814 = r18964813 - r18964800;
        double r18964815 = 0.083333333333333;
        double r18964816 = fma(r18964814, r18964787, r18964815);
        double r18964817 = r18964790 / r18964816;
        double r18964818 = r18964811 / r18964817;
        double r18964819 = r18964818 + r18964807;
        double r18964820 = fma(r18964793, r18964791, r18964819);
        double r18964821 = -r18964790;
        double r18964822 = fma(r18964821, r18964811, r18964790);
        double r18964823 = r18964820 + r18964822;
        double r18964824 = r18964810 ? r18964823 : r18964808;
        double r18964825 = r18964789 ? r18964808 : r18964824;
        return r18964825;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original6.2
Target1.2
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 z < -3.231657961535374e+33 or 1340928350.1376693 < z

    1. Initial program 24.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. Simplified24.4

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

      \[\leadsto \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) + \left(0.9189385332046700050057097541866824030876 - x\right)\]
    4. Simplified16.8

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

    if -3.231657961535374e+33 < z < 1340928350.1376693

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

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

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

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

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

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

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

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

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

Reproduce

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