Average Error: 29.3 → 0.3
Time: 1.0m
Precision: 64
\[e^{a \cdot x} - 1\]
\[\begin{array}{l} \mathbf{if}\;a \cdot x \le -0.000501535156076782:\\ \;\;\;\;\frac{e^{\left(a \cdot x\right) \cdot 3} - 1}{\left(1 + e^{a \cdot x}\right) + e^{a \cdot x} \cdot e^{a \cdot x}}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(a \cdot x\right) \cdot \frac{1}{2}\right) \cdot \left(a \cdot x\right) + \left(\left(\left(a \cdot \frac{1}{6}\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right)\right) \cdot x + a \cdot x\right)\\ \end{array}\]
e^{a \cdot x} - 1
\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.000501535156076782:\\
\;\;\;\;\frac{e^{\left(a \cdot x\right) \cdot 3} - 1}{\left(1 + e^{a \cdot x}\right) + e^{a \cdot x} \cdot e^{a \cdot x}}\\

\mathbf{else}:\\
\;\;\;\;\left(\left(a \cdot x\right) \cdot \frac{1}{2}\right) \cdot \left(a \cdot x\right) + \left(\left(\left(a \cdot \frac{1}{6}\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right)\right) \cdot x + a \cdot x\right)\\

\end{array}
double f(double a, double x) {
        double r9946570 = a;
        double r9946571 = x;
        double r9946572 = r9946570 * r9946571;
        double r9946573 = exp(r9946572);
        double r9946574 = 1.0;
        double r9946575 = r9946573 - r9946574;
        return r9946575;
}

double f(double a, double x) {
        double r9946576 = a;
        double r9946577 = x;
        double r9946578 = r9946576 * r9946577;
        double r9946579 = -0.000501535156076782;
        bool r9946580 = r9946578 <= r9946579;
        double r9946581 = 3.0;
        double r9946582 = r9946578 * r9946581;
        double r9946583 = exp(r9946582);
        double r9946584 = 1.0;
        double r9946585 = r9946583 - r9946584;
        double r9946586 = exp(r9946578);
        double r9946587 = r9946584 + r9946586;
        double r9946588 = r9946586 * r9946586;
        double r9946589 = r9946587 + r9946588;
        double r9946590 = r9946585 / r9946589;
        double r9946591 = 0.5;
        double r9946592 = r9946578 * r9946591;
        double r9946593 = r9946592 * r9946578;
        double r9946594 = 0.16666666666666666;
        double r9946595 = r9946576 * r9946594;
        double r9946596 = r9946578 * r9946578;
        double r9946597 = r9946595 * r9946596;
        double r9946598 = r9946597 * r9946577;
        double r9946599 = r9946598 + r9946578;
        double r9946600 = r9946593 + r9946599;
        double r9946601 = r9946580 ? r9946590 : r9946600;
        return r9946601;
}

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.3
Target0.2
Herbie0.3
\[\begin{array}{l} \mathbf{if}\;\left|a \cdot x\right| \lt \frac{1}{10}:\\ \;\;\;\;\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 x) < -0.000501535156076782

    1. Initial program 0.0

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

      \[\leadsto \color{blue}{\frac{{\left(e^{a \cdot x}\right)}^{3} - {1}^{3}}{e^{a \cdot x} \cdot e^{a \cdot x} + \left(1 \cdot 1 + e^{a \cdot x} \cdot 1\right)}}\]
    4. Using strategy rm
    5. Applied pow-exp0.0

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

    if -0.000501535156076782 < (* a x)

    1. Initial program 44.5

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

      \[\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. Simplified0.5

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \cdot x \le -0.000501535156076782:\\ \;\;\;\;\frac{e^{\left(a \cdot x\right) \cdot 3} - 1}{\left(1 + e^{a \cdot x}\right) + e^{a \cdot x} \cdot e^{a \cdot x}}\\ \mathbf{else}:\\ \;\;\;\;\left(\left(a \cdot x\right) \cdot \frac{1}{2}\right) \cdot \left(a \cdot x\right) + \left(\left(\left(a \cdot \frac{1}{6}\right) \cdot \left(\left(a \cdot x\right) \cdot \left(a \cdot x\right)\right)\right) \cdot x + a \cdot x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019104 
(FPCore (a x)
  :name "expax (section 3.5)"

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

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