Average Error: 29.7 → 13.8
Time: 21.0s
Precision: 64
\[e^{a \cdot x} - 1\]
\[\begin{array}{l} \mathbf{if}\;a \le -2.220968693212043584151047536654679869547 \cdot 10^{98}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le -3.362393975033817970229302492536134970466 \cdot 10^{63}:\\ \;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\ \mathbf{elif}\;a \le -1655268361375023616:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le -1.370587247264004292740295499973634293283 \cdot 10^{-65}:\\ \;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\ \mathbf{elif}\;a \le -4.92652882719554893357575898335612646908 \cdot 10^{-81}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le 5.142228780426164324409301691996597408294 \cdot 10^{104}:\\ \;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \end{array}\]
e^{a \cdot x} - 1
\begin{array}{l}
\mathbf{if}\;a \le -2.220968693212043584151047536654679869547 \cdot 10^{98}:\\
\;\;\;\;e^{x \cdot a} - 1\\

\mathbf{elif}\;a \le -3.362393975033817970229302492536134970466 \cdot 10^{63}:\\
\;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\

\mathbf{elif}\;a \le -1655268361375023616:\\
\;\;\;\;e^{x \cdot a} - 1\\

\mathbf{elif}\;a \le -1.370587247264004292740295499973634293283 \cdot 10^{-65}:\\
\;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\

\mathbf{elif}\;a \le -4.92652882719554893357575898335612646908 \cdot 10^{-81}:\\
\;\;\;\;e^{x \cdot a} - 1\\

\mathbf{elif}\;a \le 5.142228780426164324409301691996597408294 \cdot 10^{104}:\\
\;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\

\mathbf{else}:\\
\;\;\;\;e^{x \cdot a} - 1\\

\end{array}
double f(double a, double x) {
        double r5284071 = a;
        double r5284072 = x;
        double r5284073 = r5284071 * r5284072;
        double r5284074 = exp(r5284073);
        double r5284075 = 1.0;
        double r5284076 = r5284074 - r5284075;
        return r5284076;
}

double f(double a, double x) {
        double r5284077 = a;
        double r5284078 = -2.2209686932120436e+98;
        bool r5284079 = r5284077 <= r5284078;
        double r5284080 = x;
        double r5284081 = r5284080 * r5284077;
        double r5284082 = exp(r5284081);
        double r5284083 = 1.0;
        double r5284084 = r5284082 - r5284083;
        double r5284085 = -3.362393975033818e+63;
        bool r5284086 = r5284077 <= r5284085;
        double r5284087 = r5284081 * r5284081;
        double r5284088 = 0.5;
        double r5284089 = r5284087 * r5284088;
        double r5284090 = 0.16666666666666666;
        double r5284091 = r5284090 * r5284077;
        double r5284092 = r5284091 * r5284087;
        double r5284093 = r5284092 * r5284080;
        double r5284094 = r5284081 + r5284093;
        double r5284095 = r5284089 + r5284094;
        double r5284096 = -1.6552683613750236e+18;
        bool r5284097 = r5284077 <= r5284096;
        double r5284098 = -1.3705872472640043e-65;
        bool r5284099 = r5284077 <= r5284098;
        double r5284100 = -4.926528827195549e-81;
        bool r5284101 = r5284077 <= r5284100;
        double r5284102 = 5.1422287804261643e+104;
        bool r5284103 = r5284077 <= r5284102;
        double r5284104 = r5284103 ? r5284095 : r5284084;
        double r5284105 = r5284101 ? r5284084 : r5284104;
        double r5284106 = r5284099 ? r5284095 : r5284105;
        double r5284107 = r5284097 ? r5284084 : r5284106;
        double r5284108 = r5284086 ? r5284095 : r5284107;
        double r5284109 = r5284079 ? r5284084 : r5284108;
        return r5284109;
}

Error

Bits error versus a

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original29.7
Target0.2
Herbie13.8
\[\begin{array}{l} \mathbf{if}\;\left|a \cdot x\right| \lt 0.1000000000000000055511151231257827021182:\\ \;\;\;\;\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 2 regimes
  2. if a < -2.2209686932120436e+98 or -3.362393975033818e+63 < a < -1.6552683613750236e+18 or -1.3705872472640043e-65 < a < -4.926528827195549e-81 or 5.1422287804261643e+104 < a

    1. Initial program 19.0

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

      \[\leadsto \color{blue}{e^{\log \left(e^{a \cdot x}\right)}} - 1\]
    4. Simplified19.0

      \[\leadsto e^{\color{blue}{x \cdot a}} - 1\]

    if -2.2209686932120436e+98 < a < -3.362393975033818e+63 or -1.6552683613750236e+18 < a < -1.3705872472640043e-65 or -4.926528827195549e-81 < a < 5.1422287804261643e+104

    1. Initial program 34.6

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

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

      \[\leadsto \color{blue}{\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + x \cdot \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) + a\right)}\]
    4. Using strategy rm
    5. Applied distribute-lft-in11.5

      \[\leadsto \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \color{blue}{\left(x \cdot \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) + x \cdot a\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification13.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -2.220968693212043584151047536654679869547 \cdot 10^{98}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le -3.362393975033817970229302492536134970466 \cdot 10^{63}:\\ \;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\ \mathbf{elif}\;a \le -1655268361375023616:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le -1.370587247264004292740295499973634293283 \cdot 10^{-65}:\\ \;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\ \mathbf{elif}\;a \le -4.92652882719554893357575898335612646908 \cdot 10^{-81}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le 5.142228780426164324409301691996597408294 \cdot 10^{104}:\\ \;\;\;\;\left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right) \cdot \frac{1}{2} + \left(x \cdot a + \left(\left(\frac{1}{6} \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot x\right)\\ \mathbf{else}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \end{array}\]

Reproduce

herbie shell --seed 2019171 
(FPCore (a x)
  :name "expax (section 3.5)"
  :herbie-expected 14

  :herbie-target
  (if (< (fabs (* a x)) 0.1) (* (* a x) (+ 1.0 (+ (/ (* a x) 2.0) (/ (pow (* a x) 2.0) 6.0)))) (- (exp (* a x)) 1.0))

  (- (exp (* a x)) 1.0))