Average Error: 40.8 → 0.5
Time: 14.1s
Precision: 64
\[\frac{e^{x}}{e^{x} - 1}\]
\[\begin{array}{l} \mathbf{if}\;e^{x} \le 0.9954396134444862:\\ \;\;\;\;\frac{e^{x}}{\frac{-1 + e^{3 \cdot x}}{\left(1 + e^{x}\right) \cdot e^{x} + 1}}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{12} \cdot x + \left(\frac{1}{x} + \frac{1}{2}\right)\\ \end{array}\]
\frac{e^{x}}{e^{x} - 1}
\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9954396134444862:\\
\;\;\;\;\frac{e^{x}}{\frac{-1 + e^{3 \cdot x}}{\left(1 + e^{x}\right) \cdot e^{x} + 1}}\\

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

\end{array}
double f(double x) {
        double r2663824 = x;
        double r2663825 = exp(r2663824);
        double r2663826 = 1.0;
        double r2663827 = r2663825 - r2663826;
        double r2663828 = r2663825 / r2663827;
        return r2663828;
}

double f(double x) {
        double r2663829 = x;
        double r2663830 = exp(r2663829);
        double r2663831 = 0.9954396134444862;
        bool r2663832 = r2663830 <= r2663831;
        double r2663833 = -1.0;
        double r2663834 = 3.0;
        double r2663835 = r2663834 * r2663829;
        double r2663836 = exp(r2663835);
        double r2663837 = r2663833 + r2663836;
        double r2663838 = 1.0;
        double r2663839 = r2663838 + r2663830;
        double r2663840 = r2663839 * r2663830;
        double r2663841 = r2663840 + r2663838;
        double r2663842 = r2663837 / r2663841;
        double r2663843 = r2663830 / r2663842;
        double r2663844 = 0.08333333333333333;
        double r2663845 = r2663844 * r2663829;
        double r2663846 = r2663838 / r2663829;
        double r2663847 = 0.5;
        double r2663848 = r2663846 + r2663847;
        double r2663849 = r2663845 + r2663848;
        double r2663850 = r2663832 ? r2663843 : r2663849;
        return r2663850;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original40.8
Target40.5
Herbie0.5
\[\frac{1}{1 - e^{-x}}\]

Derivation

  1. Split input into 2 regimes
  2. if (exp x) < 0.9954396134444862

    1. Initial program 0.0

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

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

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

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

    if 0.9954396134444862 < (exp x)

    1. Initial program 60.3

      \[\frac{e^{x}}{e^{x} - 1}\]
    2. Taylor expanded around 0 0.7

      \[\leadsto \color{blue}{\frac{1}{12} \cdot x + \left(\frac{1}{x} + \frac{1}{2}\right)}\]
    3. Taylor expanded around 0 0.7

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

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

Reproduce

herbie shell --seed 2019142 
(FPCore (x)
  :name "expq2 (section 3.11)"

  :herbie-target
  (/ 1 (- 1 (exp (- x))))

  (/ (exp x) (- (exp x) 1)))