Average Error: 29.1 → 0.0
Time: 17.0s
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 r1940168 = 2.0;
        double r1940169 = 1.0;
        double r1940170 = -2.0;
        double r1940171 = x;
        double r1940172 = r1940170 * r1940171;
        double r1940173 = exp(r1940172);
        double r1940174 = r1940169 + r1940173;
        double r1940175 = r1940168 / r1940174;
        double r1940176 = r1940175 - r1940169;
        return r1940176;
}

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

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))