Average Error: 5.6 → 3.6
Time: 32.8s
Precision: 64
\[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le 2.663242591017173 \cdot 10^{+22}:\\ \;\;\;\;\frac{\mathsf{fma}\left(z, z \cdot \left(0.0007936500793651 + y\right) - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(\sqrt{x} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right) \cdot \left(\sqrt{x} + \sqrt{\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(0.0007936500793651 + y\right) \cdot \frac{z \cdot z}{x} - 0.0027777777777778 \cdot \frac{z}{x}\right) - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\\ \end{array}\]
\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}
\begin{array}{l}
\mathbf{if}\;x \le 2.663242591017173 \cdot 10^{+22}:\\
\;\;\;\;\frac{\mathsf{fma}\left(z, z \cdot \left(0.0007936500793651 + y\right) - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(\sqrt{x} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right) \cdot \left(\sqrt{x} + \sqrt{\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)}\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\left(0.0007936500793651 + y\right) \cdot \frac{z \cdot z}{x} - 0.0027777777777778 \cdot \frac{z}{x}\right) - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\\

\end{array}
double f(double x, double y, double z) {
        double r18535802 = x;
        double r18535803 = 0.5;
        double r18535804 = r18535802 - r18535803;
        double r18535805 = log(r18535802);
        double r18535806 = r18535804 * r18535805;
        double r18535807 = r18535806 - r18535802;
        double r18535808 = 0.91893853320467;
        double r18535809 = r18535807 + r18535808;
        double r18535810 = y;
        double r18535811 = 0.0007936500793651;
        double r18535812 = r18535810 + r18535811;
        double r18535813 = z;
        double r18535814 = r18535812 * r18535813;
        double r18535815 = 0.0027777777777778;
        double r18535816 = r18535814 - r18535815;
        double r18535817 = r18535816 * r18535813;
        double r18535818 = 0.083333333333333;
        double r18535819 = r18535817 + r18535818;
        double r18535820 = r18535819 / r18535802;
        double r18535821 = r18535809 + r18535820;
        return r18535821;
}

double f(double x, double y, double z) {
        double r18535822 = x;
        double r18535823 = 2.663242591017173e+22;
        bool r18535824 = r18535822 <= r18535823;
        double r18535825 = z;
        double r18535826 = 0.0007936500793651;
        double r18535827 = y;
        double r18535828 = r18535826 + r18535827;
        double r18535829 = r18535825 * r18535828;
        double r18535830 = 0.0027777777777778;
        double r18535831 = r18535829 - r18535830;
        double r18535832 = 0.083333333333333;
        double r18535833 = fma(r18535825, r18535831, r18535832);
        double r18535834 = r18535833 / r18535822;
        double r18535835 = sqrt(r18535822);
        double r18535836 = log(r18535822);
        double r18535837 = 0.5;
        double r18535838 = r18535822 - r18535837;
        double r18535839 = 0.91893853320467;
        double r18535840 = fma(r18535836, r18535838, r18535839);
        double r18535841 = sqrt(r18535840);
        double r18535842 = r18535835 - r18535841;
        double r18535843 = cbrt(r18535840);
        double r18535844 = r18535843 * r18535843;
        double r18535845 = r18535843 * r18535844;
        double r18535846 = sqrt(r18535845);
        double r18535847 = r18535835 + r18535846;
        double r18535848 = r18535842 * r18535847;
        double r18535849 = r18535834 - r18535848;
        double r18535850 = r18535825 * r18535825;
        double r18535851 = r18535850 / r18535822;
        double r18535852 = r18535828 * r18535851;
        double r18535853 = r18535825 / r18535822;
        double r18535854 = r18535830 * r18535853;
        double r18535855 = r18535852 - r18535854;
        double r18535856 = -r18535836;
        double r18535857 = fma(r18535856, r18535838, r18535822);
        double r18535858 = r18535857 - r18535839;
        double r18535859 = r18535855 - r18535858;
        double r18535860 = r18535824 ? r18535849 : r18535859;
        return r18535860;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original5.6
Target1.1
Herbie3.6
\[\left(\left(\left(x - 0.5\right) \cdot \log x + \left(0.91893853320467 - x\right)\right) + \frac{0.083333333333333}{x}\right) + \frac{z}{x} \cdot \left(z \cdot \left(y + 0.0007936500793651\right) - 0.0027777777777778\right)\]

Derivation

  1. Split input into 2 regimes
  2. if x < 2.663242591017173e+22

    1. Initial program 0.2

      \[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
    2. Simplified0.2

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

      \[\leadsto \frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(x - \color{blue}{\sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}}\right)\]
    5. Applied add-sqr-sqrt0.2

      \[\leadsto \frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(\color{blue}{\sqrt{x} \cdot \sqrt{x}} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)\]
    6. Applied difference-of-squares0.2

      \[\leadsto \frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \color{blue}{\left(\sqrt{x} + \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right) \cdot \left(\sqrt{x} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)}\]
    7. Using strategy rm
    8. Applied add-cube-cbrt0.2

      \[\leadsto \frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(\sqrt{x} + \sqrt{\color{blue}{\left(\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right) \cdot \sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}}}\right) \cdot \left(\sqrt{x} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)\]

    if 2.663242591017173e+22 < x

    1. Initial program 10.1

      \[\left(\left(\left(x - 0.5\right) \cdot \log x - x\right) + 0.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
    2. Simplified10.1

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(x - \mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)\right)}\]
    3. Taylor expanded around inf 10.1

      \[\leadsto \frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \color{blue}{\left(\left(x + x \cdot \log \left(\frac{1}{x}\right)\right) - \left(0.5 \cdot \log \left(\frac{1}{x}\right) + 0.91893853320467\right)\right)}\]
    4. Simplified10.1

      \[\leadsto \frac{\mathsf{fma}\left(z, \left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778, 0.083333333333333\right)}{x} - \color{blue}{\left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)}\]
    5. Taylor expanded around inf 10.1

      \[\leadsto \color{blue}{\left(\left(0.0007936500793651 \cdot \frac{{z}^{2}}{x} + \frac{{z}^{2} \cdot y}{x}\right) - 0.0027777777777778 \cdot \frac{z}{x}\right)} - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\]
    6. Simplified6.4

      \[\leadsto \color{blue}{\left(\frac{z \cdot z}{x} \cdot \left(y + 0.0007936500793651\right) - \frac{z}{x} \cdot 0.0027777777777778\right)} - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le 2.663242591017173 \cdot 10^{+22}:\\ \;\;\;\;\frac{\mathsf{fma}\left(z, z \cdot \left(0.0007936500793651 + y\right) - 0.0027777777777778, 0.083333333333333\right)}{x} - \left(\sqrt{x} - \sqrt{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right) \cdot \left(\sqrt{x} + \sqrt{\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\log x, x - 0.5, 0.91893853320467\right)}\right)}\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(0.0007936500793651 + y\right) \cdot \frac{z \cdot z}{x} - 0.0027777777777778 \cdot \frac{z}{x}\right) - \left(\mathsf{fma}\left(-\log x, x - 0.5, x\right) - 0.91893853320467\right)\\ \end{array}\]

Reproduce

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