Average Error: 29.8 → 0.4
Time: 6.1s
Precision: 64
\[\left(e^{x} - 2\right) + e^{-x}\]
\[\begin{array}{l} \mathbf{if}\;x \le 0.027742406259524545:\\ \;\;\;\;{x}^{2} + \left(\frac{1}{360} \cdot {x}^{6} + \frac{1}{12} \cdot {x}^{4}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{e^{x} \cdot e^{x} - 2 \cdot 2}{e^{x} + 2} + e^{-x}\\ \end{array}\]
\left(e^{x} - 2\right) + e^{-x}
\begin{array}{l}
\mathbf{if}\;x \le 0.027742406259524545:\\
\;\;\;\;{x}^{2} + \left(\frac{1}{360} \cdot {x}^{6} + \frac{1}{12} \cdot {x}^{4}\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{e^{x} \cdot e^{x} - 2 \cdot 2}{e^{x} + 2} + e^{-x}\\

\end{array}
double f(double x) {
        double r102203 = x;
        double r102204 = exp(r102203);
        double r102205 = 2.0;
        double r102206 = r102204 - r102205;
        double r102207 = -r102203;
        double r102208 = exp(r102207);
        double r102209 = r102206 + r102208;
        return r102209;
}

double f(double x) {
        double r102210 = x;
        double r102211 = 0.027742406259524545;
        bool r102212 = r102210 <= r102211;
        double r102213 = 2.0;
        double r102214 = pow(r102210, r102213);
        double r102215 = 0.002777777777777778;
        double r102216 = 6.0;
        double r102217 = pow(r102210, r102216);
        double r102218 = r102215 * r102217;
        double r102219 = 0.08333333333333333;
        double r102220 = 4.0;
        double r102221 = pow(r102210, r102220);
        double r102222 = r102219 * r102221;
        double r102223 = r102218 + r102222;
        double r102224 = r102214 + r102223;
        double r102225 = exp(r102210);
        double r102226 = r102225 * r102225;
        double r102227 = 2.0;
        double r102228 = r102227 * r102227;
        double r102229 = r102226 - r102228;
        double r102230 = r102225 + r102227;
        double r102231 = r102229 / r102230;
        double r102232 = -r102210;
        double r102233 = exp(r102232);
        double r102234 = r102231 + r102233;
        double r102235 = r102212 ? r102224 : r102234;
        return r102235;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original29.8
Target0.0
Herbie0.4
\[4 \cdot {\left(\sinh \left(\frac{x}{2}\right)\right)}^{2}\]

Derivation

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

    1. Initial program 30.0

      \[\left(e^{x} - 2\right) + e^{-x}\]
    2. Taylor expanded around 0 0.4

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

    if 0.027742406259524545 < x

    1. Initial program 1.5

      \[\left(e^{x} - 2\right) + e^{-x}\]
    2. Using strategy rm
    3. Applied flip--2.6

      \[\leadsto \color{blue}{\frac{e^{x} \cdot e^{x} - 2 \cdot 2}{e^{x} + 2}} + e^{-x}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.4

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

Reproduce

herbie shell --seed 2020035 
(FPCore (x)
  :name "exp2 (problem 3.3.7)"
  :precision binary64

  :herbie-target
  (* 4 (pow (sinh (/ x 2)) 2))

  (+ (- (exp x) 2) (exp (- x))))