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

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

\end{array}
double f(double x) {
        double r21197 = 2.0;
        double r21198 = x;
        double r21199 = r21197 * r21198;
        double r21200 = exp(r21199);
        double r21201 = 1.0;
        double r21202 = r21200 - r21201;
        double r21203 = exp(r21198);
        double r21204 = r21203 - r21201;
        double r21205 = r21202 / r21204;
        double r21206 = sqrt(r21205);
        return r21206;
}

double f(double x) {
        double r21207 = x;
        double r21208 = -3.6396238490178844e-07;
        bool r21209 = r21207 <= r21208;
        double r21210 = 2.0;
        double r21211 = r21210 * r21207;
        double r21212 = exp(r21211);
        double r21213 = 1.0;
        double r21214 = r21212 - r21213;
        double r21215 = r21207 + r21207;
        double r21216 = exp(r21215);
        double r21217 = r21213 * r21213;
        double r21218 = r21216 - r21217;
        double r21219 = r21214 / r21218;
        double r21220 = sqrt(r21219);
        double r21221 = exp(r21207);
        double r21222 = r21221 + r21213;
        double r21223 = log1p(r21222);
        double r21224 = expm1(r21223);
        double r21225 = sqrt(r21224);
        double r21226 = r21220 * r21225;
        double r21227 = 0.5;
        double r21228 = fma(r21227, r21207, r21213);
        double r21229 = fma(r21207, r21228, r21210);
        double r21230 = sqrt(r21229);
        double r21231 = r21209 ? r21226 : r21230;
        return r21231;
}

Error

Bits error versus x

Derivation

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

    1. Initial program 0.2

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

      \[\leadsto \sqrt{\frac{e^{2 \cdot x} - 1}{\color{blue}{\frac{e^{x} \cdot e^{x} - 1 \cdot 1}{e^{x} + 1}}}}\]
    4. Applied associate-/r/0.1

      \[\leadsto \sqrt{\color{blue}{\frac{e^{2 \cdot x} - 1}{e^{x} \cdot e^{x} - 1 \cdot 1} \cdot \left(e^{x} + 1\right)}}\]
    5. Applied sqrt-prod0.1

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

      \[\leadsto \color{blue}{\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x + x} - 1 \cdot 1}}} \cdot \sqrt{e^{x} + 1}\]
    7. Using strategy rm
    8. Applied expm1-log1p-u0.0

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

    if -3.6396238490178844e-07 < x

    1. Initial program 34.4

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

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

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

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

Reproduce

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