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

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

\end{array}
double f(double x) {
        double r6894453 = x;
        double r6894454 = exp(r6894453);
        double r6894455 = 1.0;
        double r6894456 = r6894454 - r6894455;
        double r6894457 = r6894454 / r6894456;
        return r6894457;
}

double f(double x) {
        double r6894458 = x;
        double r6894459 = -0.0018039782452811378;
        bool r6894460 = r6894458 <= r6894459;
        double r6894461 = exp(r6894458);
        double r6894462 = 3.0;
        double r6894463 = pow(r6894461, r6894462);
        double r6894464 = 1.0;
        double r6894465 = r6894463 - r6894464;
        double r6894466 = r6894461 + r6894464;
        double r6894467 = r6894461 * r6894461;
        double r6894468 = r6894466 + r6894467;
        double r6894469 = r6894465 / r6894468;
        double r6894470 = r6894461 / r6894469;
        double r6894471 = 0.08333333333333333;
        double r6894472 = r6894458 * r6894471;
        double r6894473 = 0.5;
        double r6894474 = r6894464 / r6894458;
        double r6894475 = r6894473 + r6894474;
        double r6894476 = r6894472 + r6894475;
        double r6894477 = r6894460 ? r6894470 : r6894476;
        return r6894477;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original40.3
Target39.9
Herbie0.6
\[\frac{1}{1 - e^{-x}}\]

Derivation

  1. Split input into 2 regimes
  2. if x < -0.0018039782452811378

    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)}}}\]

    if -0.0018039782452811378 < x

    1. Initial program 60.3

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

      \[\leadsto \color{blue}{\frac{1}{12} \cdot x + \left(\frac{1}{x} + \frac{1}{2}\right)}\]
    3. Using strategy rm
    4. Applied insert-posit161.0

      \[\leadsto \color{blue}{\left(\left(\frac{1}{12} \cdot x\right)\right)} + \left(\frac{1}{x} + \frac{1}{2}\right)\]
    5. Taylor expanded around -inf 0.8

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

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

Reproduce

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

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

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