Average Error: 28.8 → 0.8
Time: 4.4s
Precision: 64
\[e^{a \cdot x} - 1\]
\[\begin{array}{l} \mathbf{if}\;a \cdot x \le -0.0299825584401715896:\\ \;\;\;\;\frac{1}{\frac{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}{e^{\left(a \cdot x\right) \cdot 3} - {1}^{3}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\left(0.08333333333333337 \cdot \left(a \cdot x\right) - 0.5\right) + \frac{1}{a \cdot x}}\\ \end{array}\]
e^{a \cdot x} - 1
\begin{array}{l}
\mathbf{if}\;a \cdot x \le -0.0299825584401715896:\\
\;\;\;\;\frac{1}{\frac{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}{e^{\left(a \cdot x\right) \cdot 3} - {1}^{3}}}\\

\mathbf{else}:\\
\;\;\;\;\frac{1}{\left(0.08333333333333337 \cdot \left(a \cdot x\right) - 0.5\right) + \frac{1}{a \cdot x}}\\

\end{array}
double f(double a, double x) {
        double r97807 = a;
        double r97808 = x;
        double r97809 = r97807 * r97808;
        double r97810 = exp(r97809);
        double r97811 = 1.0;
        double r97812 = r97810 - r97811;
        return r97812;
}

double f(double a, double x) {
        double r97813 = a;
        double r97814 = x;
        double r97815 = r97813 * r97814;
        double r97816 = -0.02998255844017159;
        bool r97817 = r97815 <= r97816;
        double r97818 = 1.0;
        double r97819 = exp(r97815);
        double r97820 = 1.0;
        double r97821 = r97819 + r97820;
        double r97822 = r97819 * r97821;
        double r97823 = r97820 * r97820;
        double r97824 = r97822 + r97823;
        double r97825 = 3.0;
        double r97826 = r97815 * r97825;
        double r97827 = exp(r97826);
        double r97828 = pow(r97820, r97825);
        double r97829 = r97827 - r97828;
        double r97830 = r97824 / r97829;
        double r97831 = r97818 / r97830;
        double r97832 = 0.08333333333333337;
        double r97833 = r97832 * r97815;
        double r97834 = 0.5;
        double r97835 = r97833 - r97834;
        double r97836 = r97820 / r97815;
        double r97837 = r97835 + r97836;
        double r97838 = r97818 / r97837;
        double r97839 = r97817 ? r97831 : r97838;
        return r97839;
}

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.8
Target0.2
Herbie0.8
\[\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) < -0.02998255844017159

    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. Simplified0.0

      \[\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.0

      \[\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 clear-num0.0

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

    if -0.02998255844017159 < (* a x)

    1. Initial program 44.1

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

      \[\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. Simplified44.1

      \[\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-exp44.0

      \[\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 clear-num44.0

      \[\leadsto \color{blue}{\frac{1}{\frac{e^{a \cdot x} \cdot \left(e^{a \cdot x} + 1\right) + 1 \cdot 1}{e^{\left(a \cdot x\right) \cdot 3} - {1}^{3}}}}\]
    9. Taylor expanded around 0 1.2

      \[\leadsto \frac{1}{\color{blue}{\left(1 \cdot \frac{1}{a \cdot x} + 0.08333333333333337 \cdot \left(a \cdot x\right)\right) - 0.5}}\]
    10. Simplified1.2

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

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

Reproduce

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