Average Error: 29.7 → 0.9
Time: 8.9s
Precision: 64
\[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
\[\begin{array}{l} \mathbf{if}\;x \le 468.3220261647265942883677780628204345703:\\ \;\;\;\;\left(0.3333333333333333703407674875052180141211 \cdot {x}^{3} + 1\right) - 0.5 \cdot {x}^{2}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}} \cdot \sqrt{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}}\\ \end{array}\]
\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}
\begin{array}{l}
\mathbf{if}\;x \le 468.3220261647265942883677780628204345703:\\
\;\;\;\;\left(0.3333333333333333703407674875052180141211 \cdot {x}^{3} + 1\right) - 0.5 \cdot {x}^{2}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}} \cdot \sqrt{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}}\\

\end{array}
double f(double x, double eps) {
        double r37590 = 1.0;
        double r37591 = eps;
        double r37592 = r37590 / r37591;
        double r37593 = r37590 + r37592;
        double r37594 = r37590 - r37591;
        double r37595 = x;
        double r37596 = r37594 * r37595;
        double r37597 = -r37596;
        double r37598 = exp(r37597);
        double r37599 = r37593 * r37598;
        double r37600 = r37592 - r37590;
        double r37601 = r37590 + r37591;
        double r37602 = r37601 * r37595;
        double r37603 = -r37602;
        double r37604 = exp(r37603);
        double r37605 = r37600 * r37604;
        double r37606 = r37599 - r37605;
        double r37607 = 2.0;
        double r37608 = r37606 / r37607;
        return r37608;
}

double f(double x, double eps) {
        double r37609 = x;
        double r37610 = 468.3220261647266;
        bool r37611 = r37609 <= r37610;
        double r37612 = 0.33333333333333337;
        double r37613 = 3.0;
        double r37614 = pow(r37609, r37613);
        double r37615 = r37612 * r37614;
        double r37616 = 1.0;
        double r37617 = r37615 + r37616;
        double r37618 = 0.5;
        double r37619 = 2.0;
        double r37620 = pow(r37609, r37619);
        double r37621 = r37618 * r37620;
        double r37622 = r37617 - r37621;
        double r37623 = 1.0;
        double r37624 = eps;
        double r37625 = r37624 + r37616;
        double r37626 = r37609 * r37625;
        double r37627 = exp(r37626);
        double r37628 = r37623 / r37627;
        double r37629 = r37616 - r37624;
        double r37630 = r37609 * r37629;
        double r37631 = exp(r37630);
        double r37632 = r37623 / r37631;
        double r37633 = r37628 + r37632;
        double r37634 = r37627 * r37624;
        double r37635 = r37623 / r37634;
        double r37636 = r37633 - r37635;
        double r37637 = r37618 * r37636;
        double r37638 = r37618 / r37624;
        double r37639 = r37638 / r37631;
        double r37640 = r37637 + r37639;
        double r37641 = sqrt(r37640);
        double r37642 = r37641 * r37641;
        double r37643 = r37611 ? r37622 : r37642;
        return r37643;
}

Error

Bits error versus x

Bits error versus eps

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if x < 468.3220261647266

    1. Initial program 38.9

      \[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
    2. Simplified38.9

      \[\leadsto \color{blue}{\frac{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}}}{2} - \frac{\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{2}}\]
    3. Taylor expanded around 0 1.2

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

    if 468.3220261647266 < x

    1. Initial program 0.0

      \[\frac{\left(1 + \frac{1}{\varepsilon}\right) \cdot e^{-\left(1 - \varepsilon\right) \cdot x} - \left(\frac{1}{\varepsilon} - 1\right) \cdot e^{-\left(1 + \varepsilon\right) \cdot x}}{2}\]
    2. Simplified0.0

      \[\leadsto \color{blue}{\frac{\frac{1 + \frac{1}{\varepsilon}}{e^{\left(1 - \varepsilon\right) \cdot x}}}{2} - \frac{\frac{\frac{1}{\varepsilon} - 1}{e^{\left(1 + \varepsilon\right) \cdot x}}}{2}}\]
    3. Taylor expanded around inf 0

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

      \[\leadsto \color{blue}{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}}\]
    5. Using strategy rm
    6. Applied add-sqr-sqrt0.0

      \[\leadsto \color{blue}{\sqrt{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}} \cdot \sqrt{0.5 \cdot \left(\left(\frac{1}{e^{x \cdot \left(\varepsilon + 1\right)}} + \frac{1}{e^{x \cdot \left(1 - \varepsilon\right)}}\right) - \frac{1}{e^{x \cdot \left(\varepsilon + 1\right)} \cdot \varepsilon}\right) + \frac{\frac{0.5}{\varepsilon}}{e^{x \cdot \left(1 - \varepsilon\right)}}}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.9

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

Reproduce

herbie shell --seed 2019362 
(FPCore (x eps)
  :name "NMSE Section 6.1 mentioned, A"
  :precision binary64
  (/ (- (* (+ 1 (/ 1 eps)) (exp (- (* (- 1 eps) x)))) (* (- (/ 1 eps) 1) (exp (- (* (+ 1 eps) x))))) 2))