Average Error: 28.9 → 9.4
Time: 2.7s
Precision: 64
\[e^{a \cdot x} - 1\]
\[\begin{array}{l} \mathbf{if}\;a \cdot x \le -3.32894132256475227 \cdot 10^{-11}:\\ \;\;\;\;\frac{\frac{{\left(e^{\left(a \cdot x\right) \cdot 3}\right)}^{3} - {\left({1}^{3}\right)}^{3}}{\left({\left(e^{a \cdot x}\right)}^{6} + e^{\left(a \cdot x\right) \cdot 3} \cdot {1}^{3}\right) + {1}^{6}}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\ \mathbf{else}:\\ \;\;\;\;x \cdot \left(a + \left(\frac{1}{2} \cdot {a}^{2}\right) \cdot x\right) + \frac{1}{6} \cdot \left({a}^{3} \cdot {x}^{3}\right)\\ \end{array}\]
e^{a \cdot x} - 1
\begin{array}{l}
\mathbf{if}\;a \cdot x \le -3.32894132256475227 \cdot 10^{-11}:\\
\;\;\;\;\frac{\frac{{\left(e^{\left(a \cdot x\right) \cdot 3}\right)}^{3} - {\left({1}^{3}\right)}^{3}}{\left({\left(e^{a \cdot x}\right)}^{6} + e^{\left(a \cdot x\right) \cdot 3} \cdot {1}^{3}\right) + {1}^{6}}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\\

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

\end{array}
double f(double a, double x) {
        double r107584 = a;
        double r107585 = x;
        double r107586 = r107584 * r107585;
        double r107587 = exp(r107586);
        double r107588 = 1.0;
        double r107589 = r107587 - r107588;
        return r107589;
}

double f(double a, double x) {
        double r107590 = a;
        double r107591 = x;
        double r107592 = r107590 * r107591;
        double r107593 = -3.328941322564752e-11;
        bool r107594 = r107592 <= r107593;
        double r107595 = 3.0;
        double r107596 = r107592 * r107595;
        double r107597 = exp(r107596);
        double r107598 = pow(r107597, r107595);
        double r107599 = 1.0;
        double r107600 = pow(r107599, r107595);
        double r107601 = pow(r107600, r107595);
        double r107602 = r107598 - r107601;
        double r107603 = exp(r107592);
        double r107604 = 6.0;
        double r107605 = pow(r107603, r107604);
        double r107606 = r107597 * r107600;
        double r107607 = r107605 + r107606;
        double r107608 = pow(r107599, r107604);
        double r107609 = r107607 + r107608;
        double r107610 = r107602 / r107609;
        double r107611 = r107603 + r107599;
        double r107612 = r107603 * r107611;
        double r107613 = r107599 * r107599;
        double r107614 = r107612 + r107613;
        double r107615 = r107610 / r107614;
        double r107616 = 0.5;
        double r107617 = 2.0;
        double r107618 = pow(r107590, r107617);
        double r107619 = r107616 * r107618;
        double r107620 = r107619 * r107591;
        double r107621 = r107590 + r107620;
        double r107622 = r107591 * r107621;
        double r107623 = 0.16666666666666666;
        double r107624 = pow(r107590, r107595);
        double r107625 = pow(r107591, r107595);
        double r107626 = r107624 * r107625;
        double r107627 = r107623 * r107626;
        double r107628 = r107622 + r107627;
        double r107629 = r107594 ? r107615 : r107628;
        return r107629;
}

Error

Bits error versus a

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original28.9
Target0.2
Herbie9.4
\[\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 2 regimes
  2. if (* a x) < -3.328941322564752e-11

    1. Initial program 0.6

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

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

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

      \[\leadsto \frac{\color{blue}{e^{\left(a \cdot x\right) \cdot 3}} - {1}^{3}}{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}\]
    7. Using strategy rm
    8. Applied flip3--0.5

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

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

    if -3.328941322564752e-11 < (* a x)

    1. Initial program 44.0

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

      \[\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. Simplified14.2

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

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

Reproduce

herbie shell --seed 2020046 
(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))