Average Error: 39.6 → 0.3
Time: 7.7s
Precision: 64
\[\frac{e^{x} - 1}{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.7518926899118845 \cdot 10^{-4}:\\ \;\;\;\;\left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \sqrt[3]{\sqrt{1} + \sqrt{e^{x}}}\right) \cdot \left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \frac{\sqrt{e^{x}} - \sqrt{1}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{6}, x \cdot x, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\ \end{array}\]
\frac{e^{x} - 1}{x}
\begin{array}{l}
\mathbf{if}\;x \le -1.7518926899118845 \cdot 10^{-4}:\\
\;\;\;\;\left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \sqrt[3]{\sqrt{1} + \sqrt{e^{x}}}\right) \cdot \left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \frac{\sqrt{e^{x}} - \sqrt{1}}{x}\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{1}{6}, x \cdot x, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\

\end{array}
double f(double x) {
        double r134598 = x;
        double r134599 = exp(r134598);
        double r134600 = 1.0;
        double r134601 = r134599 - r134600;
        double r134602 = r134601 / r134598;
        return r134602;
}

double f(double x) {
        double r134603 = x;
        double r134604 = -0.00017518926899118845;
        bool r134605 = r134603 <= r134604;
        double r134606 = 1.0;
        double r134607 = sqrt(r134606);
        double r134608 = exp(r134603);
        double r134609 = sqrt(r134608);
        double r134610 = r134607 + r134609;
        double r134611 = cbrt(r134610);
        double r134612 = r134611 * r134611;
        double r134613 = r134609 - r134607;
        double r134614 = r134613 / r134603;
        double r134615 = r134611 * r134614;
        double r134616 = r134612 * r134615;
        double r134617 = 0.16666666666666666;
        double r134618 = r134603 * r134603;
        double r134619 = 0.5;
        double r134620 = 1.0;
        double r134621 = fma(r134619, r134603, r134620);
        double r134622 = fma(r134617, r134618, r134621);
        double r134623 = r134605 ? r134616 : r134622;
        return r134623;
}

Error

Bits error versus x

Target

Original39.6
Target40.0
Herbie0.3
\[\begin{array}{l} \mathbf{if}\;x \lt 1 \land x \gt -1:\\ \;\;\;\;\frac{e^{x} - 1}{\log \left(e^{x}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{e^{x} - 1}{x}\\ \end{array}\]

Derivation

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

    1. Initial program 0.0

      \[\frac{e^{x} - 1}{x}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.0

      \[\leadsto \frac{e^{x} - 1}{\color{blue}{1 \cdot x}}\]
    4. Applied add-sqr-sqrt0.0

      \[\leadsto \frac{e^{x} - \color{blue}{\sqrt{1} \cdot \sqrt{1}}}{1 \cdot x}\]
    5. Applied add-sqr-sqrt0.1

      \[\leadsto \frac{\color{blue}{\sqrt{e^{x}} \cdot \sqrt{e^{x}}} - \sqrt{1} \cdot \sqrt{1}}{1 \cdot x}\]
    6. Applied difference-of-squares0.1

      \[\leadsto \frac{\color{blue}{\left(\sqrt{e^{x}} + \sqrt{1}\right) \cdot \left(\sqrt{e^{x}} - \sqrt{1}\right)}}{1 \cdot x}\]
    7. Applied times-frac0.1

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

      \[\leadsto \color{blue}{\left(\sqrt{1} + \sqrt{e^{x}}\right)} \cdot \frac{\sqrt{e^{x}} - \sqrt{1}}{x}\]
    9. Using strategy rm
    10. Applied add-cube-cbrt0.1

      \[\leadsto \color{blue}{\left(\left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \sqrt[3]{\sqrt{1} + \sqrt{e^{x}}}\right) \cdot \sqrt[3]{\sqrt{1} + \sqrt{e^{x}}}\right)} \cdot \frac{\sqrt{e^{x}} - \sqrt{1}}{x}\]
    11. Applied associate-*l*0.1

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

    if -0.00017518926899118845 < x

    1. Initial program 60.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.7518926899118845 \cdot 10^{-4}:\\ \;\;\;\;\left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \sqrt[3]{\sqrt{1} + \sqrt{e^{x}}}\right) \cdot \left(\sqrt[3]{\sqrt{1} + \sqrt{e^{x}}} \cdot \frac{\sqrt{e^{x}} - \sqrt{1}}{x}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\frac{1}{6}, x \cdot x, \mathsf{fma}\left(\frac{1}{2}, x, 1\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020042 +o rules:numerics
(FPCore (x)
  :name "Kahan's exp quotient"
  :precision binary64

  :herbie-target
  (if (and (< x 1) (> x -1)) (/ (- (exp x) 1) (log (exp x))) (/ (- (exp x) 1) x))

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