Average Error: 40.2 → 0.2
Time: 11.3s
Precision: 64
\[\frac{e^{x} - 1}{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.0001417210001282003:\\ \;\;\;\;\sqrt{e^{x}} \cdot \frac{\sqrt{e^{x}}}{x} - \frac{1}{x}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{1}{2} + x \cdot \frac{1}{6}\right) \cdot x + 1\\ \end{array}\]
\frac{e^{x} - 1}{x}
\begin{array}{l}
\mathbf{if}\;x \le -0.0001417210001282003:\\
\;\;\;\;\sqrt{e^{x}} \cdot \frac{\sqrt{e^{x}}}{x} - \frac{1}{x}\\

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

\end{array}
double f(double x) {
        double r3240387 = x;
        double r3240388 = exp(r3240387);
        double r3240389 = 1.0;
        double r3240390 = r3240388 - r3240389;
        double r3240391 = r3240390 / r3240387;
        return r3240391;
}

double f(double x) {
        double r3240392 = x;
        double r3240393 = -0.0001417210001282003;
        bool r3240394 = r3240392 <= r3240393;
        double r3240395 = exp(r3240392);
        double r3240396 = sqrt(r3240395);
        double r3240397 = r3240396 / r3240392;
        double r3240398 = r3240396 * r3240397;
        double r3240399 = 1.0;
        double r3240400 = r3240399 / r3240392;
        double r3240401 = r3240398 - r3240400;
        double r3240402 = 0.5;
        double r3240403 = 0.16666666666666666;
        double r3240404 = r3240392 * r3240403;
        double r3240405 = r3240402 + r3240404;
        double r3240406 = r3240405 * r3240392;
        double r3240407 = r3240406 + r3240399;
        double r3240408 = r3240394 ? r3240401 : r3240407;
        return r3240408;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original40.2
Target39.3
Herbie0.2
\[\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.0001417210001282003

    1. Initial program 0.0

      \[\frac{e^{x} - 1}{x}\]
    2. Using strategy rm
    3. Applied div-sub0.0

      \[\leadsto \color{blue}{\frac{e^{x}}{x} - \frac{1}{x}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity0.0

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

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

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

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

    if -0.0001417210001282003 < x

    1. Initial program 60.1

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

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

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

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

Reproduce

herbie shell --seed 2019132 
(FPCore (x)
  :name "Kahan's exp quotient"

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

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