Average Error: 29.7 → 13.8
Time: 27.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(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\ \mathbf{elif}\;a \le -1655268361375023616:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le -1.370587247264004292740295499973634293283 \cdot 10^{-65}:\\ \;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\ \mathbf{elif}\;a \le -4.92652882719554893357575898335612646908 \cdot 10^{-81}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le 5.142228780426164324409301691996597408294 \cdot 10^{104}:\\ \;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\ \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(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\

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

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

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

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

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

\end{array}
double f(double a, double x) {
        double r4983434 = a;
        double r4983435 = x;
        double r4983436 = r4983434 * r4983435;
        double r4983437 = exp(r4983436);
        double r4983438 = 1.0;
        double r4983439 = r4983437 - r4983438;
        return r4983439;
}

double f(double a, double x) {
        double r4983440 = a;
        double r4983441 = -2.2209686932120436e+98;
        bool r4983442 = r4983440 <= r4983441;
        double r4983443 = x;
        double r4983444 = r4983443 * r4983440;
        double r4983445 = exp(r4983444);
        double r4983446 = 1.0;
        double r4983447 = r4983445 - r4983446;
        double r4983448 = -3.362393975033818e+63;
        bool r4983449 = r4983440 <= r4983448;
        double r4983450 = 0.5;
        double r4983451 = r4983450 * r4983444;
        double r4983452 = r4983444 * r4983451;
        double r4983453 = r4983444 + r4983452;
        double r4983454 = r4983444 * r4983444;
        double r4983455 = r4983444 * r4983454;
        double r4983456 = 0.16666666666666666;
        double r4983457 = r4983455 * r4983456;
        double r4983458 = r4983453 + r4983457;
        double r4983459 = -1.6552683613750236e+18;
        bool r4983460 = r4983440 <= r4983459;
        double r4983461 = -1.3705872472640043e-65;
        bool r4983462 = r4983440 <= r4983461;
        double r4983463 = -4.926528827195549e-81;
        bool r4983464 = r4983440 <= r4983463;
        double r4983465 = 5.1422287804261643e+104;
        bool r4983466 = r4983440 <= r4983465;
        double r4983467 = r4983466 ? r4983458 : r4983447;
        double r4983468 = r4983464 ? r4983447 : r4983467;
        double r4983469 = r4983462 ? r4983458 : r4983468;
        double r4983470 = r4983460 ? r4983447 : r4983469;
        double r4983471 = r4983449 ? r4983458 : r4983470;
        double r4983472 = r4983442 ? r4983447 : r4983471;
        return r4983472;
}

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(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6} + \left(x \cdot a + \left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \frac{1}{2}\right)\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(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\ \mathbf{elif}\;a \le -1655268361375023616:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le -1.370587247264004292740295499973634293283 \cdot 10^{-65}:\\ \;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\ \mathbf{elif}\;a \le -4.92652882719554893357575898335612646908 \cdot 10^{-81}:\\ \;\;\;\;e^{x \cdot a} - 1\\ \mathbf{elif}\;a \le 5.142228780426164324409301691996597408294 \cdot 10^{104}:\\ \;\;\;\;\left(x \cdot a + \left(x \cdot a\right) \cdot \left(\frac{1}{2} \cdot \left(x \cdot a\right)\right)\right) + \left(\left(x \cdot a\right) \cdot \left(\left(x \cdot a\right) \cdot \left(x \cdot a\right)\right)\right) \cdot \frac{1}{6}\\ \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))