Average Error: 4.9 → 0.1
Time: 23.7s
Precision: 64
\[\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}\]
\[\begin{array}{l} \mathbf{if}\;\frac{e^{2 \cdot x} - 1}{e^{x} - 1} \le 1.526510699119073584655708153465560925624 \cdot 10^{108}:\\ \;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{\frac{e^{x + x} - 1 \cdot 1}{e^{x} + 1}}}\\ \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}\;\frac{e^{2 \cdot x} - 1}{e^{x} - 1} \le 1.526510699119073584655708153465560925624 \cdot 10^{108}:\\
\;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{\frac{e^{x + x} - 1 \cdot 1}{e^{x} + 1}}}\\

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

\end{array}
double f(double x) {
        double r22723 = 2.0;
        double r22724 = x;
        double r22725 = r22723 * r22724;
        double r22726 = exp(r22725);
        double r22727 = 1.0;
        double r22728 = r22726 - r22727;
        double r22729 = exp(r22724);
        double r22730 = r22729 - r22727;
        double r22731 = r22728 / r22730;
        double r22732 = sqrt(r22731);
        return r22732;
}

double f(double x) {
        double r22733 = 2.0;
        double r22734 = x;
        double r22735 = r22733 * r22734;
        double r22736 = exp(r22735);
        double r22737 = 1.0;
        double r22738 = r22736 - r22737;
        double r22739 = exp(r22734);
        double r22740 = r22739 - r22737;
        double r22741 = r22738 / r22740;
        double r22742 = 1.5265106991190736e+108;
        bool r22743 = r22741 <= r22742;
        double r22744 = r22734 + r22734;
        double r22745 = exp(r22744);
        double r22746 = r22737 * r22737;
        double r22747 = r22745 - r22746;
        double r22748 = r22739 + r22737;
        double r22749 = r22747 / r22748;
        double r22750 = r22738 / r22749;
        double r22751 = sqrt(r22750);
        double r22752 = 0.5;
        double r22753 = fma(r22752, r22734, r22737);
        double r22754 = fma(r22734, r22753, r22733);
        double r22755 = sqrt(r22754);
        double r22756 = r22743 ? r22751 : r22755;
        return r22756;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if (/ (- (exp (* 2.0 x)) 1.0) (- (exp x) 1.0)) < 1.5265106991190736e+108

    1. Initial program 1.8

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

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

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

    if 1.5265106991190736e+108 < (/ (- (exp (* 2.0 x)) 1.0) (- (exp x) 1.0))

    1. Initial program 63.7

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

      \[\leadsto \sqrt{\color{blue}{0.5 \cdot {x}^{2} + \left(1 \cdot x + 2\right)}}\]
    3. Simplified2.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.1

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

Reproduce

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