Average Error: 29.1 → 0.0
Time: 17.3s
Precision: 64
\[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.006778948484773374:\\ \;\;\;\;\frac{\frac{\frac{8}{1 + e^{-2 \cdot x}}}{\left(1 + e^{-2 \cdot x}\right) \cdot \left(1 + e^{-2 \cdot x}\right)} - 1}{\mathsf{fma}\left(\frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}} + 1\right)}\\ \mathbf{elif}\;x \le 0.006963305059651398:\\ \;\;\;\;\mathsf{fma}\left(\frac{-1}{3}, \left(x \cdot x\right) \cdot x, \mathsf{fma}\left({x}^{5}, \frac{2}{15}, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{8}{1 + e^{-2 \cdot x}}}{\left(1 + e^{-2 \cdot x}\right) \cdot \left(1 + e^{-2 \cdot x}\right)} - 1}{\mathsf{fma}\left(\frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}} + 1\right)}\\ \end{array}\]
\frac{2}{1 + e^{-2 \cdot x}} - 1
\begin{array}{l}
\mathbf{if}\;x \le -0.006778948484773374:\\
\;\;\;\;\frac{\frac{\frac{8}{1 + e^{-2 \cdot x}}}{\left(1 + e^{-2 \cdot x}\right) \cdot \left(1 + e^{-2 \cdot x}\right)} - 1}{\mathsf{fma}\left(\frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}} + 1\right)}\\

\mathbf{elif}\;x \le 0.006963305059651398:\\
\;\;\;\;\mathsf{fma}\left(\frac{-1}{3}, \left(x \cdot x\right) \cdot x, \mathsf{fma}\left({x}^{5}, \frac{2}{15}, x\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{8}{1 + e^{-2 \cdot x}}}{\left(1 + e^{-2 \cdot x}\right) \cdot \left(1 + e^{-2 \cdot x}\right)} - 1}{\mathsf{fma}\left(\frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}} + 1\right)}\\

\end{array}
double f(double x, double __attribute__((unused)) y) {
        double r1940165 = 2.0;
        double r1940166 = 1.0;
        double r1940167 = -2.0;
        double r1940168 = x;
        double r1940169 = r1940167 * r1940168;
        double r1940170 = exp(r1940169);
        double r1940171 = r1940166 + r1940170;
        double r1940172 = r1940165 / r1940171;
        double r1940173 = r1940172 - r1940166;
        return r1940173;
}

double f(double x, double __attribute__((unused)) y) {
        double r1940174 = x;
        double r1940175 = -0.006778948484773374;
        bool r1940176 = r1940174 <= r1940175;
        double r1940177 = 8.0;
        double r1940178 = 1.0;
        double r1940179 = -2.0;
        double r1940180 = r1940179 * r1940174;
        double r1940181 = exp(r1940180);
        double r1940182 = r1940178 + r1940181;
        double r1940183 = r1940177 / r1940182;
        double r1940184 = r1940182 * r1940182;
        double r1940185 = r1940183 / r1940184;
        double r1940186 = r1940185 - r1940178;
        double r1940187 = 2.0;
        double r1940188 = r1940187 / r1940182;
        double r1940189 = r1940188 + r1940178;
        double r1940190 = fma(r1940188, r1940188, r1940189);
        double r1940191 = r1940186 / r1940190;
        double r1940192 = 0.006963305059651398;
        bool r1940193 = r1940174 <= r1940192;
        double r1940194 = -0.3333333333333333;
        double r1940195 = r1940174 * r1940174;
        double r1940196 = r1940195 * r1940174;
        double r1940197 = 5.0;
        double r1940198 = pow(r1940174, r1940197);
        double r1940199 = 0.13333333333333333;
        double r1940200 = fma(r1940198, r1940199, r1940174);
        double r1940201 = fma(r1940194, r1940196, r1940200);
        double r1940202 = r1940193 ? r1940201 : r1940191;
        double r1940203 = r1940176 ? r1940191 : r1940202;
        return r1940203;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Split input into 2 regimes
  2. if x < -0.006778948484773374 or 0.006963305059651398 < x

    1. Initial program 0.0

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Using strategy rm
    3. Applied flip3--0.0

      \[\leadsto \color{blue}{\frac{{\left(\frac{2}{1 + e^{-2 \cdot x}}\right)}^{3} - {1}^{3}}{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}} + \left(1 \cdot 1 + \frac{2}{1 + e^{-2 \cdot x}} \cdot 1\right)}}\]
    4. Simplified0.0

      \[\leadsto \frac{\color{blue}{\frac{\frac{8}{e^{x \cdot -2} + 1}}{\left(e^{x \cdot -2} + 1\right) \cdot \left(e^{x \cdot -2} + 1\right)} - 1}}{\frac{2}{1 + e^{-2 \cdot x}} \cdot \frac{2}{1 + e^{-2 \cdot x}} + \left(1 \cdot 1 + \frac{2}{1 + e^{-2 \cdot x}} \cdot 1\right)}\]
    5. Simplified0.0

      \[\leadsto \frac{\frac{\frac{8}{e^{x \cdot -2} + 1}}{\left(e^{x \cdot -2} + 1\right) \cdot \left(e^{x \cdot -2} + 1\right)} - 1}{\color{blue}{\mathsf{fma}\left(\frac{2}{e^{x \cdot -2} + 1}, \frac{2}{e^{x \cdot -2} + 1}, \frac{2}{e^{x \cdot -2} + 1} + 1\right)}}\]

    if -0.006778948484773374 < x < 0.006963305059651398

    1. Initial program 58.9

      \[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
    2. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left(x + \frac{2}{15} \cdot {x}^{5}\right) - \frac{1}{3} \cdot {x}^{3}}\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{-1}{3}, \left(x \cdot x\right) \cdot x, \mathsf{fma}\left({x}^{5}, \frac{2}{15}, x\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.006778948484773374:\\ \;\;\;\;\frac{\frac{\frac{8}{1 + e^{-2 \cdot x}}}{\left(1 + e^{-2 \cdot x}\right) \cdot \left(1 + e^{-2 \cdot x}\right)} - 1}{\mathsf{fma}\left(\frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}} + 1\right)}\\ \mathbf{elif}\;x \le 0.006963305059651398:\\ \;\;\;\;\mathsf{fma}\left(\frac{-1}{3}, \left(x \cdot x\right) \cdot x, \mathsf{fma}\left({x}^{5}, \frac{2}{15}, x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\frac{8}{1 + e^{-2 \cdot x}}}{\left(1 + e^{-2 \cdot x}\right) \cdot \left(1 + e^{-2 \cdot x}\right)} - 1}{\mathsf{fma}\left(\frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}}, \frac{2}{1 + e^{-2 \cdot x}} + 1\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y)
  :name "Logistic function from Lakshay Garg"
  (- (/ 2 (+ 1 (exp (* -2 x)))) 1))