Average Error: 29.0 → 0.1
Time: 9.0s
Precision: 64
\[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
\[\begin{array}{l} \mathbf{if}\;-2 \cdot x \le -0.896697363290915095 \lor \neg \left(-2 \cdot x \le 3.59224269730938628 \cdot 10^{-6}\right):\\ \;\;\;\;\left(\frac{\frac{2}{\sqrt[3]{1 + e^{-2 \cdot x}}}}{\sqrt[3]{1 + e^{-2 \cdot x}} \cdot \sqrt[3]{1 + e^{-2 \cdot x}}} - 1\right) + \left(1 - 1\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot x - \mathsf{fma}\left(5.55112 \cdot 10^{-17}, {x}^{4}, 0.33333333333333337 \cdot {x}^{3}\right)\\ \end{array}\]
\frac{2}{1 + e^{-2 \cdot x}} - 1
\begin{array}{l}
\mathbf{if}\;-2 \cdot x \le -0.896697363290915095 \lor \neg \left(-2 \cdot x \le 3.59224269730938628 \cdot 10^{-6}\right):\\
\;\;\;\;\left(\frac{\frac{2}{\sqrt[3]{1 + e^{-2 \cdot x}}}}{\sqrt[3]{1 + e^{-2 \cdot x}} \cdot \sqrt[3]{1 + e^{-2 \cdot x}}} - 1\right) + \left(1 - 1\right)\\

\mathbf{else}:\\
\;\;\;\;1 \cdot x - \mathsf{fma}\left(5.55112 \cdot 10^{-17}, {x}^{4}, 0.33333333333333337 \cdot {x}^{3}\right)\\

\end{array}
double f(double x, double __attribute__((unused)) y) {
        double r45282 = 2.0;
        double r45283 = 1.0;
        double r45284 = -2.0;
        double r45285 = x;
        double r45286 = r45284 * r45285;
        double r45287 = exp(r45286);
        double r45288 = r45283 + r45287;
        double r45289 = r45282 / r45288;
        double r45290 = r45289 - r45283;
        return r45290;
}

double f(double x, double __attribute__((unused)) y) {
        double r45291 = -2.0;
        double r45292 = x;
        double r45293 = r45291 * r45292;
        double r45294 = -0.8966973632909151;
        bool r45295 = r45293 <= r45294;
        double r45296 = 3.5922426973093863e-06;
        bool r45297 = r45293 <= r45296;
        double r45298 = !r45297;
        bool r45299 = r45295 || r45298;
        double r45300 = 2.0;
        double r45301 = 1.0;
        double r45302 = exp(r45293);
        double r45303 = r45301 + r45302;
        double r45304 = cbrt(r45303);
        double r45305 = r45300 / r45304;
        double r45306 = r45304 * r45304;
        double r45307 = r45305 / r45306;
        double r45308 = r45307 - r45301;
        double r45309 = r45301 - r45301;
        double r45310 = r45308 + r45309;
        double r45311 = r45301 * r45292;
        double r45312 = 5.551115123125783e-17;
        double r45313 = 4.0;
        double r45314 = pow(r45292, r45313);
        double r45315 = 0.33333333333333337;
        double r45316 = 3.0;
        double r45317 = pow(r45292, r45316);
        double r45318 = r45315 * r45317;
        double r45319 = fma(r45312, r45314, r45318);
        double r45320 = r45311 - r45319;
        double r45321 = r45299 ? r45310 : r45320;
        return r45321;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Split input into 2 regimes
  2. if (* -2.0 x) < -0.8966973632909151 or 3.5922426973093863e-06 < (* -2.0 x)

    1. Initial program 0.1

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

      \[\leadsto \frac{2}{1 + e^{-2 \cdot x}} - \color{blue}{\left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}}\]
    4. Applied add-cube-cbrt0.1

      \[\leadsto \frac{2}{\color{blue}{\left(\sqrt[3]{1 + e^{-2 \cdot x}} \cdot \sqrt[3]{1 + e^{-2 \cdot x}}\right) \cdot \sqrt[3]{1 + e^{-2 \cdot x}}}} - \left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}\]
    5. Applied add-sqr-sqrt0.9

      \[\leadsto \frac{\color{blue}{\sqrt{2} \cdot \sqrt{2}}}{\left(\sqrt[3]{1 + e^{-2 \cdot x}} \cdot \sqrt[3]{1 + e^{-2 \cdot x}}\right) \cdot \sqrt[3]{1 + e^{-2 \cdot x}}} - \left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}\]
    6. Applied times-frac0.9

      \[\leadsto \color{blue}{\frac{\sqrt{2}}{\sqrt[3]{1 + e^{-2 \cdot x}} \cdot \sqrt[3]{1 + e^{-2 \cdot x}}} \cdot \frac{\sqrt{2}}{\sqrt[3]{1 + e^{-2 \cdot x}}}} - \left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}\]
    7. Applied prod-diff0.6

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

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

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

    if -0.8966973632909151 < (* -2.0 x) < 3.5922426973093863e-06

    1. Initial program 59.1

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

      \[\leadsto \color{blue}{1 \cdot x - \left(5.55112 \cdot 10^{-17} \cdot {x}^{4} + 0.33333333333333337 \cdot {x}^{3}\right)}\]
    3. Simplified0.1

      \[\leadsto \color{blue}{1 \cdot x - \mathsf{fma}\left(5.55112 \cdot 10^{-17}, {x}^{4}, 0.33333333333333337 \cdot {x}^{3}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;-2 \cdot x \le -0.896697363290915095 \lor \neg \left(-2 \cdot x \le 3.59224269730938628 \cdot 10^{-6}\right):\\ \;\;\;\;\left(\frac{\frac{2}{\sqrt[3]{1 + e^{-2 \cdot x}}}}{\sqrt[3]{1 + e^{-2 \cdot x}} \cdot \sqrt[3]{1 + e^{-2 \cdot x}}} - 1\right) + \left(1 - 1\right)\\ \mathbf{else}:\\ \;\;\;\;1 \cdot x - \mathsf{fma}\left(5.55112 \cdot 10^{-17}, {x}^{4}, 0.33333333333333337 \cdot {x}^{3}\right)\\ \end{array}\]

Reproduce

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