Average Error: 4.3 → 0.1
Time: 6.7s
Precision: 64
\[\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.27319002816284202 \cdot 10^{-5} \lor \neg \left(x \le 5.5214039011077179 \cdot 10^{-17}\right):\\ \;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{\mathsf{fma}\left(-1, 1, e^{x + x}\right) \cdot \frac{1}{e^{x} + 1}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(0.5, {x}^{2}, \mathsf{fma}\left(1, x, 2\right)\right)}\\ \end{array}\]
\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}
\begin{array}{l}
\mathbf{if}\;x \le -1.27319002816284202 \cdot 10^{-5} \lor \neg \left(x \le 5.5214039011077179 \cdot 10^{-17}\right):\\
\;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{\mathsf{fma}\left(-1, 1, e^{x + x}\right) \cdot \frac{1}{e^{x} + 1}}}\\

\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(0.5, {x}^{2}, \mathsf{fma}\left(1, x, 2\right)\right)}\\

\end{array}
double f(double x) {
        double r18285 = 2.0;
        double r18286 = x;
        double r18287 = r18285 * r18286;
        double r18288 = exp(r18287);
        double r18289 = 1.0;
        double r18290 = r18288 - r18289;
        double r18291 = exp(r18286);
        double r18292 = r18291 - r18289;
        double r18293 = r18290 / r18292;
        double r18294 = sqrt(r18293);
        return r18294;
}

double f(double x) {
        double r18295 = x;
        double r18296 = -1.273190028162842e-05;
        bool r18297 = r18295 <= r18296;
        double r18298 = 5.521403901107718e-17;
        bool r18299 = r18295 <= r18298;
        double r18300 = !r18299;
        bool r18301 = r18297 || r18300;
        double r18302 = 2.0;
        double r18303 = r18302 * r18295;
        double r18304 = exp(r18303);
        double r18305 = 1.0;
        double r18306 = r18304 - r18305;
        double r18307 = -r18305;
        double r18308 = r18295 + r18295;
        double r18309 = exp(r18308);
        double r18310 = fma(r18307, r18305, r18309);
        double r18311 = 1.0;
        double r18312 = exp(r18295);
        double r18313 = r18312 + r18305;
        double r18314 = r18311 / r18313;
        double r18315 = r18310 * r18314;
        double r18316 = r18306 / r18315;
        double r18317 = sqrt(r18316);
        double r18318 = 0.5;
        double r18319 = 2.0;
        double r18320 = pow(r18295, r18319);
        double r18321 = fma(r18305, r18295, r18302);
        double r18322 = fma(r18318, r18320, r18321);
        double r18323 = sqrt(r18322);
        double r18324 = r18301 ? r18317 : r18323;
        return r18324;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -1.273190028162842e-05 or 5.521403901107718e-17 < x

    1. Initial program 1.0

      \[\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}\]
    2. Using strategy rm
    3. Applied flip--0.7

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

      \[\leadsto \sqrt{\frac{e^{2 \cdot x} - 1}{\frac{\color{blue}{\mathsf{fma}\left(-1, 1, e^{x + x}\right)}}{e^{x} + 1}}}\]
    5. Using strategy rm
    6. Applied div-inv0.1

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

    if -1.273190028162842e-05 < x < 5.521403901107718e-17

    1. Initial program 44.9

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.27319002816284202 \cdot 10^{-5} \lor \neg \left(x \le 5.5214039011077179 \cdot 10^{-17}\right):\\ \;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{\mathsf{fma}\left(-1, 1, e^{x + x}\right) \cdot \frac{1}{e^{x} + 1}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(0.5, {x}^{2}, \mathsf{fma}\left(1, x, 2\right)\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2020035 +o rules:numerics
(FPCore (x)
  :name "sqrtexp (problem 3.4.4)"
  :precision binary64
  (sqrt (/ (- (exp (* 2 x)) 1) (- (exp x) 1))))