Average Error: 4.7 → 0.7
Time: 22.9s
Precision: 64
\[\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}\]
\[\begin{array}{l} \mathbf{if}\;x \le -8.130656909693608598308834679857515226331 \cdot 10^{-7}:\\ \;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x + x} - 1 \cdot 1} \cdot \left(e^{x} + 1\right)}\\ \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 -8.130656909693608598308834679857515226331 \cdot 10^{-7}:\\
\;\;\;\;\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x + x} - 1 \cdot 1} \cdot \left(e^{x} + 1\right)}\\

\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 r22864 = 2.0;
        double r22865 = x;
        double r22866 = r22864 * r22865;
        double r22867 = exp(r22866);
        double r22868 = 1.0;
        double r22869 = r22867 - r22868;
        double r22870 = exp(r22865);
        double r22871 = r22870 - r22868;
        double r22872 = r22869 / r22871;
        double r22873 = sqrt(r22872);
        return r22873;
}

double f(double x) {
        double r22874 = x;
        double r22875 = -8.130656909693609e-07;
        bool r22876 = r22874 <= r22875;
        double r22877 = 2.0;
        double r22878 = r22877 * r22874;
        double r22879 = exp(r22878);
        double r22880 = 1.0;
        double r22881 = r22879 - r22880;
        double r22882 = r22874 + r22874;
        double r22883 = exp(r22882);
        double r22884 = r22880 * r22880;
        double r22885 = r22883 - r22884;
        double r22886 = r22881 / r22885;
        double r22887 = exp(r22874);
        double r22888 = r22887 + r22880;
        double r22889 = r22886 * r22888;
        double r22890 = sqrt(r22889);
        double r22891 = 0.5;
        double r22892 = 2.0;
        double r22893 = pow(r22874, r22892);
        double r22894 = fma(r22880, r22874, r22877);
        double r22895 = fma(r22891, r22893, r22894);
        double r22896 = sqrt(r22895);
        double r22897 = r22876 ? r22890 : r22896;
        return r22897;
}

Error

Bits error versus x

Derivation

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

    1. Initial program 0.1

      \[\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. Simplified0.0

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

    if -8.130656909693609e-07 < x

    1. Initial program 36.0

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

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

      \[\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.7

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

Reproduce

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