Average Error: 4.5 → 0.8
Time: 25.7s
Precision: 64
\[\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}\]
\[\begin{array}{l} \mathbf{if}\;x \le -3.162953279719332850191955246177410998598 \cdot 10^{-7}:\\ \;\;\;\;\sqrt{\frac{\sqrt{1} + \sqrt{e^{2 \cdot x}}}{\frac{e^{x} - 1}{\sqrt{e^{2 \cdot x}} - \sqrt{1}}}}\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\mathsf{fma}\left(x, 1, \mathsf{fma}\left(x \cdot 0.5, x, 2\right)\right)}\\ \end{array}\]
\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}
\begin{array}{l}
\mathbf{if}\;x \le -3.162953279719332850191955246177410998598 \cdot 10^{-7}:\\
\;\;\;\;\sqrt{\frac{\sqrt{1} + \sqrt{e^{2 \cdot x}}}{\frac{e^{x} - 1}{\sqrt{e^{2 \cdot x}} - \sqrt{1}}}}\\

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

\end{array}
double f(double x) {
        double r1989511 = 2.0;
        double r1989512 = x;
        double r1989513 = r1989511 * r1989512;
        double r1989514 = exp(r1989513);
        double r1989515 = 1.0;
        double r1989516 = r1989514 - r1989515;
        double r1989517 = exp(r1989512);
        double r1989518 = r1989517 - r1989515;
        double r1989519 = r1989516 / r1989518;
        double r1989520 = sqrt(r1989519);
        return r1989520;
}

double f(double x) {
        double r1989521 = x;
        double r1989522 = -3.162953279719333e-07;
        bool r1989523 = r1989521 <= r1989522;
        double r1989524 = 1.0;
        double r1989525 = sqrt(r1989524);
        double r1989526 = 2.0;
        double r1989527 = r1989526 * r1989521;
        double r1989528 = exp(r1989527);
        double r1989529 = sqrt(r1989528);
        double r1989530 = r1989525 + r1989529;
        double r1989531 = exp(r1989521);
        double r1989532 = r1989531 - r1989524;
        double r1989533 = r1989529 - r1989525;
        double r1989534 = r1989532 / r1989533;
        double r1989535 = r1989530 / r1989534;
        double r1989536 = sqrt(r1989535);
        double r1989537 = 0.5;
        double r1989538 = r1989521 * r1989537;
        double r1989539 = fma(r1989538, r1989521, r1989526);
        double r1989540 = fma(r1989521, r1989524, r1989539);
        double r1989541 = sqrt(r1989540);
        double r1989542 = r1989523 ? r1989536 : r1989541;
        return r1989542;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -3.162953279719333e-07

    1. Initial program 0.1

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

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

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

      \[\leadsto \sqrt{\frac{\color{blue}{\left(\sqrt{e^{2 \cdot x}} + \sqrt{1}\right) \cdot \left(\sqrt{e^{2 \cdot x}} - \sqrt{1}\right)}}{e^{x} - 1}}\]
    6. Applied associate-/l*0.0

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

    if -3.162953279719333e-07 < x

    1. Initial program 34.2

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

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

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

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

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (x)
  :name "sqrtexp (problem 3.4.4)"
  (sqrt (/ (- (exp (* 2.0 x)) 1.0) (- (exp x) 1.0))))