Average Error: 29.2 → 0.2
Time: 22.4s
Precision: 64
\[\frac{2}{1 + e^{-2 \cdot x}} - 1\]
\[\begin{array}{l} \mathbf{if}\;-2 \cdot x \le -0.00459821061185296253714938075063400901854:\\ \;\;\;\;\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \left(\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1}\right)\\ \mathbf{elif}\;-2 \cdot x \le 1.161789732782175467453026366524393816126 \cdot 10^{-12}:\\ \;\;\;\;1 \cdot x - \mathsf{fma}\left(\left(x \cdot x\right) \cdot x, 0.3333333333333333703407674875052180141211, 5.5511151231257827021181583404541015625 \cdot 10^{-17} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \left(\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \sqrt[3]{\mathsf{fma}\left(1, -1, 1\right) + \left(\frac{\sqrt[3]{2} \cdot \left(\sqrt[3]{2} \cdot \sqrt[3]{2}\right)}{e^{-2 \cdot x} + 1} - 1\right)}\right)\\ \end{array}\]
\frac{2}{1 + e^{-2 \cdot x}} - 1
\begin{array}{l}
\mathbf{if}\;-2 \cdot x \le -0.00459821061185296253714938075063400901854:\\
\;\;\;\;\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \left(\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1}\right)\\

\mathbf{elif}\;-2 \cdot x \le 1.161789732782175467453026366524393816126 \cdot 10^{-12}:\\
\;\;\;\;1 \cdot x - \mathsf{fma}\left(\left(x \cdot x\right) \cdot x, 0.3333333333333333703407674875052180141211, 5.5511151231257827021181583404541015625 \cdot 10^{-17} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right)\\

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

\end{array}
double f(double x, double __attribute__((unused)) y) {
        double r2120942 = 2.0;
        double r2120943 = 1.0;
        double r2120944 = -2.0;
        double r2120945 = x;
        double r2120946 = r2120944 * r2120945;
        double r2120947 = exp(r2120946);
        double r2120948 = r2120943 + r2120947;
        double r2120949 = r2120942 / r2120948;
        double r2120950 = r2120949 - r2120943;
        return r2120950;
}

double f(double x, double __attribute__((unused)) y) {
        double r2120951 = -2.0;
        double r2120952 = x;
        double r2120953 = r2120951 * r2120952;
        double r2120954 = -0.0045982106118529625;
        bool r2120955 = r2120953 <= r2120954;
        double r2120956 = 2.0;
        double r2120957 = exp(r2120953);
        double r2120958 = 1.0;
        double r2120959 = r2120957 + r2120958;
        double r2120960 = r2120956 / r2120959;
        double r2120961 = r2120960 - r2120958;
        double r2120962 = cbrt(r2120961);
        double r2120963 = r2120962 * r2120962;
        double r2120964 = r2120962 * r2120963;
        double r2120965 = 1.1617897327821755e-12;
        bool r2120966 = r2120953 <= r2120965;
        double r2120967 = r2120958 * r2120952;
        double r2120968 = r2120952 * r2120952;
        double r2120969 = r2120968 * r2120952;
        double r2120970 = 0.33333333333333337;
        double r2120971 = 5.551115123125783e-17;
        double r2120972 = r2120968 * r2120968;
        double r2120973 = r2120971 * r2120972;
        double r2120974 = fma(r2120969, r2120970, r2120973);
        double r2120975 = r2120967 - r2120974;
        double r2120976 = -1.0;
        double r2120977 = fma(r2120958, r2120976, r2120958);
        double r2120978 = cbrt(r2120956);
        double r2120979 = r2120978 * r2120978;
        double r2120980 = r2120978 * r2120979;
        double r2120981 = r2120980 / r2120959;
        double r2120982 = r2120981 - r2120958;
        double r2120983 = r2120977 + r2120982;
        double r2120984 = cbrt(r2120983);
        double r2120985 = r2120962 * r2120984;
        double r2120986 = r2120962 * r2120985;
        double r2120987 = r2120966 ? r2120975 : r2120986;
        double r2120988 = r2120955 ? r2120964 : r2120987;
        return r2120988;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Split input into 3 regimes
  2. if (* -2.0 x) < -0.0045982106118529625

    1. Initial program 0.0

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

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

    if -0.0045982106118529625 < (* -2.0 x) < 1.1617897327821755e-12

    1. Initial program 59.8

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

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

      \[\leadsto \color{blue}{x \cdot 1 - \mathsf{fma}\left(x \cdot \left(x \cdot x\right), 0.3333333333333333703407674875052180141211, 5.5511151231257827021181583404541015625 \cdot 10^{-17} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right)}\]

    if 1.1617897327821755e-12 < (* -2.0 x)

    1. Initial program 0.8

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

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

      \[\leadsto \left(\sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - 1} \cdot \sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - \color{blue}{\left(\sqrt[3]{1} \cdot \sqrt[3]{1}\right) \cdot \sqrt[3]{1}}}\right) \cdot \sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - 1}\]
    6. Applied *-un-lft-identity0.8

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

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

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

      \[\leadsto \left(\sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - 1} \cdot \sqrt[3]{\color{blue}{\mathsf{fma}\left(\frac{\sqrt[3]{2} \cdot \sqrt[3]{2}}{1}, \frac{\sqrt[3]{2}}{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)}}\right) \cdot \sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - 1}\]
    10. Simplified0.8

      \[\leadsto \left(\sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - 1} \cdot \sqrt[3]{\color{blue}{\left(\frac{\left(\sqrt[3]{2} \cdot \sqrt[3]{2}\right) \cdot \sqrt[3]{2}}{e^{-2 \cdot x} + 1} - 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)}\right) \cdot \sqrt[3]{\frac{2}{1 + e^{-2 \cdot x}} - 1}\]
    11. Simplified0.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;-2 \cdot x \le -0.00459821061185296253714938075063400901854:\\ \;\;\;\;\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \left(\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1}\right)\\ \mathbf{elif}\;-2 \cdot x \le 1.161789732782175467453026366524393816126 \cdot 10^{-12}:\\ \;\;\;\;1 \cdot x - \mathsf{fma}\left(\left(x \cdot x\right) \cdot x, 0.3333333333333333703407674875052180141211, 5.5511151231257827021181583404541015625 \cdot 10^{-17} \cdot \left(\left(x \cdot x\right) \cdot \left(x \cdot x\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \left(\sqrt[3]{\frac{2}{e^{-2 \cdot x} + 1} - 1} \cdot \sqrt[3]{\mathsf{fma}\left(1, -1, 1\right) + \left(\frac{\sqrt[3]{2} \cdot \left(\sqrt[3]{2} \cdot \sqrt[3]{2}\right)}{e^{-2 \cdot x} + 1} - 1\right)}\right)\\ \end{array}\]

Reproduce

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