Average Error: 40.2 → 0.6
Time: 16.4s
Precision: 64
\[\frac{e^{x}}{e^{x} - 1}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.0016014345181303183:\\ \;\;\;\;\sqrt[3]{\frac{e^{x}}{e^{x} - 1}} \cdot \left(\sqrt[3]{\frac{e^{x}}{e^{x} - 1}} \cdot \sqrt[3]{\frac{e^{x}}{e^{x} - 1}}\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot \frac{1}{12} + \left(\frac{1}{x} + \frac{1}{2}\right)\\ \end{array}\]
double f(double x) {
        double r4639937 = x;
        double r4639938 = exp(r4639937);
        double r4639939 = 1.0;
        double r4639940 = r4639938 - r4639939;
        double r4639941 = r4639938 / r4639940;
        return r4639941;
}

double f(double x) {
        double r4639942 = x;
        double r4639943 = -0.0016014345181303183;
        bool r4639944 = r4639942 <= r4639943;
        double r4639945 = exp(r4639942);
        double r4639946 = 1.0;
        double r4639947 = r4639945 - r4639946;
        double r4639948 = r4639945 / r4639947;
        double r4639949 = cbrt(r4639948);
        double r4639950 = r4639949 * r4639949;
        double r4639951 = r4639949 * r4639950;
        double r4639952 = 0.08333333333333333;
        double r4639953 = r4639942 * r4639952;
        double r4639954 = r4639946 / r4639942;
        double r4639955 = 0.5;
        double r4639956 = r4639954 + r4639955;
        double r4639957 = r4639953 + r4639956;
        double r4639958 = r4639944 ? r4639951 : r4639957;
        return r4639958;
}

\frac{e^{x}}{e^{x} - 1}
\begin{array}{l}
\mathbf{if}\;x \le -0.0016014345181303183:\\
\;\;\;\;\sqrt[3]{\frac{e^{x}}{e^{x} - 1}} \cdot \left(\sqrt[3]{\frac{e^{x}}{e^{x} - 1}} \cdot \sqrt[3]{\frac{e^{x}}{e^{x} - 1}}\right)\\

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

\end{array}

Error

Bits error versus x

Target

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

Derivation

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

    1. Initial program 0.0

      \[\frac{e^{x}}{e^{x} - 1}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt0.0

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

    if -0.0016014345181303183 < x

    1. Initial program 60.2

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

      \[\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.0016014345181303183:\\ \;\;\;\;\sqrt[3]{\frac{e^{x}}{e^{x} - 1}} \cdot \left(\sqrt[3]{\frac{e^{x}}{e^{x} - 1}} \cdot \sqrt[3]{\frac{e^{x}}{e^{x} - 1}}\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot \frac{1}{12} + \left(\frac{1}{x} + \frac{1}{2}\right)\\ \end{array}\]

Reproduce

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

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

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