Average Error: 5.7 → 0.9
Time: 27.0s
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}\;z \cdot \left(\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778\right) \le -2.0135932251430427 \cdot 10^{-14}:\\ \;\;\;\;\left(0.91893853320467 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{x}\right)\right)\right) - x\right) + \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right)\right) + \left(\left(0.0007936500793651 + y\right) \cdot \frac{z}{\frac{x}{z}} - 0.0027777777777778 \cdot \frac{z}{x}\right)\\ \mathbf{elif}\;z \cdot \left(\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778\right) \le 32213.66957747579:\\ \;\;\;\;\frac{\left(\sqrt[3]{\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778} \cdot \sqrt[3]{\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778}\right) \cdot \left(z \cdot \sqrt[3]{\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778}\right) + 0.083333333333333}{x} + \left(0.91893853320467 + \mathsf{fma}\left(x - 0.5, \log x, -x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(0.91893853320467 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{x}\right)\right)\right) - x\right) + \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right)\right) + \left(\left(0.0007936500793651 + y\right) \cdot \frac{z}{\frac{x}{z}} - 0.0027777777777778 \cdot \frac{z}{x}\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}\;z \cdot \left(\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778\right) \le -2.0135932251430427 \cdot 10^{-14}:\\
\;\;\;\;\left(0.91893853320467 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{x}\right)\right)\right) - x\right) + \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right)\right) + \left(\left(0.0007936500793651 + y\right) \cdot \frac{z}{\frac{x}{z}} - 0.0027777777777778 \cdot \frac{z}{x}\right)\\

\mathbf{elif}\;z \cdot \left(\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778\right) \le 32213.66957747579:\\
\;\;\;\;\frac{\left(\sqrt[3]{\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778} \cdot \sqrt[3]{\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778}\right) \cdot \left(z \cdot \sqrt[3]{\left(0.0007936500793651 + y\right) \cdot z - 0.0027777777777778}\right) + 0.083333333333333}{x} + \left(0.91893853320467 + \mathsf{fma}\left(x - 0.5, \log x, -x\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(0.91893853320467 + \left(\left(\left(x - 0.5\right) \cdot \log \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{x}\right)\right)\right) - x\right) + \log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right)\right)\right) + \left(\left(0.0007936500793651 + y\right) \cdot \frac{z}{\frac{x}{z}} - 0.0027777777777778 \cdot \frac{z}{x}\right)\\

\end{array}
double f(double x, double y, double z) {
        double r20467800 = x;
        double r20467801 = 0.5;
        double r20467802 = r20467800 - r20467801;
        double r20467803 = log(r20467800);
        double r20467804 = r20467802 * r20467803;
        double r20467805 = r20467804 - r20467800;
        double r20467806 = 0.91893853320467;
        double r20467807 = r20467805 + r20467806;
        double r20467808 = y;
        double r20467809 = 0.0007936500793651;
        double r20467810 = r20467808 + r20467809;
        double r20467811 = z;
        double r20467812 = r20467810 * r20467811;
        double r20467813 = 0.0027777777777778;
        double r20467814 = r20467812 - r20467813;
        double r20467815 = r20467814 * r20467811;
        double r20467816 = 0.083333333333333;
        double r20467817 = r20467815 + r20467816;
        double r20467818 = r20467817 / r20467800;
        double r20467819 = r20467807 + r20467818;
        return r20467819;
}

double f(double x, double y, double z) {
        double r20467820 = z;
        double r20467821 = 0.0007936500793651;
        double r20467822 = y;
        double r20467823 = r20467821 + r20467822;
        double r20467824 = r20467823 * r20467820;
        double r20467825 = 0.0027777777777778;
        double r20467826 = r20467824 - r20467825;
        double r20467827 = r20467820 * r20467826;
        double r20467828 = -2.0135932251430427e-14;
        bool r20467829 = r20467827 <= r20467828;
        double r20467830 = 0.91893853320467;
        double r20467831 = x;
        double r20467832 = 0.5;
        double r20467833 = r20467831 - r20467832;
        double r20467834 = cbrt(r20467831);
        double r20467835 = log1p(r20467834);
        double r20467836 = expm1(r20467835);
        double r20467837 = log(r20467836);
        double r20467838 = r20467833 * r20467837;
        double r20467839 = r20467838 - r20467831;
        double r20467840 = r20467834 * r20467834;
        double r20467841 = log(r20467840);
        double r20467842 = r20467841 * r20467833;
        double r20467843 = r20467839 + r20467842;
        double r20467844 = r20467830 + r20467843;
        double r20467845 = r20467831 / r20467820;
        double r20467846 = r20467820 / r20467845;
        double r20467847 = r20467823 * r20467846;
        double r20467848 = r20467820 / r20467831;
        double r20467849 = r20467825 * r20467848;
        double r20467850 = r20467847 - r20467849;
        double r20467851 = r20467844 + r20467850;
        double r20467852 = 32213.66957747579;
        bool r20467853 = r20467827 <= r20467852;
        double r20467854 = cbrt(r20467826);
        double r20467855 = r20467854 * r20467854;
        double r20467856 = r20467820 * r20467854;
        double r20467857 = r20467855 * r20467856;
        double r20467858 = 0.083333333333333;
        double r20467859 = r20467857 + r20467858;
        double r20467860 = r20467859 / r20467831;
        double r20467861 = log(r20467831);
        double r20467862 = -r20467831;
        double r20467863 = fma(r20467833, r20467861, r20467862);
        double r20467864 = r20467830 + r20467863;
        double r20467865 = r20467860 + r20467864;
        double r20467866 = r20467853 ? r20467865 : r20467851;
        double r20467867 = r20467829 ? r20467851 : r20467866;
        return r20467867;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original5.7
Target1.1
Herbie0.9
\[\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 (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) < -2.0135932251430427e-14 or 32213.66957747579 < (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z)

    1. Initial program 15.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. Using strategy rm
    3. Applied add-cube-cbrt15.1

      \[\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.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
    4. Applied log-prod15.2

      \[\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.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
    5. Applied distribute-rgt-in15.2

      \[\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.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
    6. Applied associate--l+15.1

      \[\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.91893853320467\right) + \frac{\left(\left(y + 0.0007936500793651\right) \cdot z - 0.0027777777777778\right) \cdot z + 0.083333333333333}{x}\]
    7. Using strategy rm
    8. Applied expm1-log1p-u15.1

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

      \[\leadsto \left(\left(\log \left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \left(x - 0.5\right) + \left(\log \left(\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{x}\right)\right)\right) \cdot \left(x - 0.5\right) - x\right)\right) + 0.91893853320467\right) + \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)}\]
    10. Simplified2.1

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

    if -2.0135932251430427e-14 < (* (- (* (+ y 0.0007936500793651) z) 0.0027777777777778) z) < 32213.66957747579

    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. Using strategy rm
    3. Applied fma-neg0.2

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

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

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

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

Reproduce

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