Average Error: 41.0 → 0.0
Time: 9.6s
Precision: 64
\[\frac{e^{x}}{e^{x} - 1}\]
\[\begin{array}{l} \mathbf{if}\;e^{x} \le 0.9967130846117587816834770819696132093668:\\ \;\;\;\;\frac{e^{x}}{\frac{\frac{{\left(e^{2}\right)}^{\left(2 \cdot x\right)} - 1 \cdot {1}^{3}}{1 \cdot 1 + {\left(e^{2}\right)}^{x}}}{e^{x} + 1}}\\ \mathbf{elif}\;e^{x} \le 1.000051799989470246998735092347487807274:\\ \;\;\;\;\left(\frac{1}{2} + x \cdot \frac{1}{12}\right) + \frac{1}{x}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{1 - \frac{1}{e^{x}}}\\ \end{array}\]
\frac{e^{x}}{e^{x} - 1}
\begin{array}{l}
\mathbf{if}\;e^{x} \le 0.9967130846117587816834770819696132093668:\\
\;\;\;\;\frac{e^{x}}{\frac{\frac{{\left(e^{2}\right)}^{\left(2 \cdot x\right)} - 1 \cdot {1}^{3}}{1 \cdot 1 + {\left(e^{2}\right)}^{x}}}{e^{x} + 1}}\\

\mathbf{elif}\;e^{x} \le 1.000051799989470246998735092347487807274:\\
\;\;\;\;\left(\frac{1}{2} + x \cdot \frac{1}{12}\right) + \frac{1}{x}\\

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

\end{array}
double f(double x) {
        double r93330 = x;
        double r93331 = exp(r93330);
        double r93332 = 1.0;
        double r93333 = r93331 - r93332;
        double r93334 = r93331 / r93333;
        return r93334;
}

double f(double x) {
        double r93335 = x;
        double r93336 = exp(r93335);
        double r93337 = 0.9967130846117588;
        bool r93338 = r93336 <= r93337;
        double r93339 = 2.0;
        double r93340 = exp(r93339);
        double r93341 = r93339 * r93335;
        double r93342 = pow(r93340, r93341);
        double r93343 = 1.0;
        double r93344 = 3.0;
        double r93345 = pow(r93343, r93344);
        double r93346 = r93343 * r93345;
        double r93347 = r93342 - r93346;
        double r93348 = r93343 * r93343;
        double r93349 = pow(r93340, r93335);
        double r93350 = r93348 + r93349;
        double r93351 = r93347 / r93350;
        double r93352 = r93336 + r93343;
        double r93353 = r93351 / r93352;
        double r93354 = r93336 / r93353;
        double r93355 = 1.0000517999894702;
        bool r93356 = r93336 <= r93355;
        double r93357 = 0.5;
        double r93358 = 0.08333333333333333;
        double r93359 = r93335 * r93358;
        double r93360 = r93357 + r93359;
        double r93361 = 1.0;
        double r93362 = r93361 / r93335;
        double r93363 = r93360 + r93362;
        double r93364 = r93343 / r93336;
        double r93365 = r93361 - r93364;
        double r93366 = r93361 / r93365;
        double r93367 = r93356 ? r93363 : r93366;
        double r93368 = r93338 ? r93354 : r93367;
        return r93368;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original41.0
Target40.5
Herbie0.0
\[\frac{1}{1 - e^{-x}}\]

Derivation

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

    1. Initial program 0.0

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

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

      \[\leadsto \frac{e^{x}}{\frac{\color{blue}{e^{x + x} - 1 \cdot 1}}{e^{x} + 1}}\]
    5. Using strategy rm
    6. Applied flip--0.0

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

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

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

    if 0.9967130846117588 < (exp x) < 1.0000517999894702

    1. Initial program 62.6

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

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

      \[\leadsto \color{blue}{\frac{1}{x} + \left(\frac{1}{2} + x \cdot \frac{1}{12}\right)}\]

    if 1.0000517999894702 < (exp x)

    1. Initial program 35.6

      \[\frac{e^{x}}{e^{x} - 1}\]
    2. Using strategy rm
    3. Applied clear-num35.6

      \[\leadsto \color{blue}{\frac{1}{\frac{e^{x} - 1}{e^{x}}}}\]
    4. Simplified2.1

      \[\leadsto \frac{1}{\color{blue}{1 - \frac{1}{e^{x}}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.0

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

Reproduce

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

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

  (/ (exp x) (- (exp x) 1.0)))