Average Error: 28.9 → 8.9
Time: 10.5s
Precision: 64
\[e^{a \cdot x} - 1\]
\[\begin{array}{l} \mathbf{if}\;a \cdot x \le -1.21980114088280676 \cdot 10^{-14}:\\ \;\;\;\;\frac{e^{2 \cdot \left(x \cdot a\right)} - 1 \cdot 1}{1 + e^{x \cdot a}}\\ \mathbf{elif}\;a \cdot x \le 3.0774139795037859 \cdot 10^{-19}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}, \sqrt[3]{e^{a \cdot x}}, -1\right)}}\right) \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right)\\ \end{array}\]
e^{a \cdot x} - 1
\begin{array}{l}
\mathbf{if}\;a \cdot x \le -1.21980114088280676 \cdot 10^{-14}:\\
\;\;\;\;\frac{e^{2 \cdot \left(x \cdot a\right)} - 1 \cdot 1}{1 + e^{x \cdot a}}\\

\mathbf{elif}\;a \cdot x \le 3.0774139795037859 \cdot 10^{-19}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right)\right)\\

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

\end{array}
double f(double a, double x) {
        double r94422 = a;
        double r94423 = x;
        double r94424 = r94422 * r94423;
        double r94425 = exp(r94424);
        double r94426 = 1.0;
        double r94427 = r94425 - r94426;
        return r94427;
}

double f(double a, double x) {
        double r94428 = a;
        double r94429 = x;
        double r94430 = r94428 * r94429;
        double r94431 = -1.2198011408828068e-14;
        bool r94432 = r94430 <= r94431;
        double r94433 = 2.0;
        double r94434 = r94429 * r94428;
        double r94435 = r94433 * r94434;
        double r94436 = exp(r94435);
        double r94437 = 1.0;
        double r94438 = r94437 * r94437;
        double r94439 = r94436 - r94438;
        double r94440 = exp(r94434);
        double r94441 = r94437 + r94440;
        double r94442 = r94439 / r94441;
        double r94443 = 3.077413979503786e-19;
        bool r94444 = r94430 <= r94443;
        double r94445 = 0.16666666666666666;
        double r94446 = 3.0;
        double r94447 = pow(r94428, r94446);
        double r94448 = pow(r94429, r94446);
        double r94449 = r94447 * r94448;
        double r94450 = 0.5;
        double r94451 = pow(r94428, r94433);
        double r94452 = r94450 * r94451;
        double r94453 = r94452 * r94429;
        double r94454 = r94428 + r94453;
        double r94455 = r94429 * r94454;
        double r94456 = fma(r94445, r94449, r94455);
        double r94457 = exp(r94430);
        double r94458 = r94457 - r94437;
        double r94459 = cbrt(r94458);
        double r94460 = r94459 * r94459;
        double r94461 = r94460 * r94459;
        double r94462 = cbrt(r94461);
        double r94463 = cbrt(r94462);
        double r94464 = cbrt(r94457);
        double r94465 = r94464 * r94464;
        double r94466 = -r94437;
        double r94467 = fma(r94465, r94464, r94466);
        double r94468 = cbrt(r94467);
        double r94469 = cbrt(r94468);
        double r94470 = r94463 * r94469;
        double r94471 = cbrt(r94459);
        double r94472 = r94470 * r94471;
        double r94473 = r94460 * r94472;
        double r94474 = r94444 ? r94456 : r94473;
        double r94475 = r94432 ? r94442 : r94474;
        return r94475;
}

Error

Bits error versus a

Bits error versus x

Target

Original28.9
Target0.2
Herbie8.9
\[\begin{array}{l} \mathbf{if}\;\left|a \cdot x\right| \lt 0.10000000000000001:\\ \;\;\;\;\left(a \cdot x\right) \cdot \left(1 + \left(\frac{a \cdot x}{2} + \frac{{\left(a \cdot x\right)}^{2}}{6}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;e^{a \cdot x} - 1\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (* a x) < -1.2198011408828068e-14

    1. Initial program 1.0

      \[e^{a \cdot x} - 1\]
    2. Using strategy rm
    3. Applied flip--1.0

      \[\leadsto \color{blue}{\frac{e^{a \cdot x} \cdot e^{a \cdot x} - 1 \cdot 1}{e^{a \cdot x} + 1}}\]
    4. Simplified1.0

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

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

    if -1.2198011408828068e-14 < (* a x) < 3.077413979503786e-19

    1. Initial program 44.7

      \[e^{a \cdot x} - 1\]
    2. Taylor expanded around 0 12.6

      \[\leadsto \color{blue}{\frac{1}{2} \cdot \left({a}^{2} \cdot {x}^{2}\right) + \left(\frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right) + a \cdot x\right)}\]
    3. Simplified12.6

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right)\right)}\]

    if 3.077413979503786e-19 < (* a x)

    1. Initial program 28.0

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

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

      \[\leadsto \left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \color{blue}{\left(\left(\sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}} \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right) \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right)}\]
    6. Using strategy rm
    7. Applied add-cube-cbrt28.1

      \[\leadsto \left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\color{blue}{\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}}}} \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right) \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right)\]
    8. Using strategy rm
    9. Applied add-cube-cbrt28.9

      \[\leadsto \left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}}} \cdot \sqrt[3]{\sqrt[3]{\color{blue}{\left(\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}\right) \cdot \sqrt[3]{e^{a \cdot x}}} - 1}}\right) \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right)\]
    10. Applied fma-neg29.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \cdot x \le -1.21980114088280676 \cdot 10^{-14}:\\ \;\;\;\;\frac{e^{2 \cdot \left(x \cdot a\right)} - 1 \cdot 1}{1 + e^{x \cdot a}}\\ \mathbf{elif}\;a \cdot x \le 3.0774139795037859 \cdot 10^{-19}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{6}, {a}^{3} \cdot {x}^{3}, x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \left(\left(\sqrt[3]{\sqrt[3]{\left(\sqrt[3]{e^{a \cdot x} - 1} \cdot \sqrt[3]{e^{a \cdot x} - 1}\right) \cdot \sqrt[3]{e^{a \cdot x} - 1}}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(\sqrt[3]{e^{a \cdot x}} \cdot \sqrt[3]{e^{a \cdot x}}, \sqrt[3]{e^{a \cdot x}}, -1\right)}}\right) \cdot \sqrt[3]{\sqrt[3]{e^{a \cdot x} - 1}}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020047 +o rules:numerics
(FPCore (a x)
  :name "expax (section 3.5)"
  :precision binary64
  :herbie-expected 14

  :herbie-target
  (if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1 (+ (/ (* a x) 2) (/ (pow (* a x) 2) 6)))) (- (exp (* a x)) 1))

  (- (exp (* a x)) 1))