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

\mathbf{else}:\\
\;\;\;\;0.5 \cdot \frac{x}{\sqrt{2}} + \left(\sqrt{2} + \frac{{x}^{2}}{\sqrt{2}} \cdot \left(0.25 - \frac{0.125}{2}\right)\right)\\

\end{array}
double f(double x) {
        double r16815 = 2.0;
        double r16816 = x;
        double r16817 = r16815 * r16816;
        double r16818 = exp(r16817);
        double r16819 = 1.0;
        double r16820 = r16818 - r16819;
        double r16821 = exp(r16816);
        double r16822 = r16821 - r16819;
        double r16823 = r16820 / r16822;
        double r16824 = sqrt(r16823);
        return r16824;
}

double f(double x) {
        double r16825 = x;
        double r16826 = -5.602562757292874e-14;
        bool r16827 = r16825 <= r16826;
        double r16828 = 2.0;
        double r16829 = r16828 * r16825;
        double r16830 = exp(r16829);
        double r16831 = 1.0;
        double r16832 = r16830 - r16831;
        double r16833 = -r16831;
        double r16834 = r16825 + r16825;
        double r16835 = exp(r16834);
        double r16836 = fma(r16833, r16831, r16835);
        double r16837 = r16832 / r16836;
        double r16838 = exp(r16825);
        double r16839 = r16838 + r16831;
        double r16840 = r16837 * r16839;
        double r16841 = sqrt(r16840);
        double r16842 = 0.5;
        double r16843 = sqrt(r16828);
        double r16844 = r16825 / r16843;
        double r16845 = r16842 * r16844;
        double r16846 = 2.0;
        double r16847 = pow(r16825, r16846);
        double r16848 = r16847 / r16843;
        double r16849 = 0.25;
        double r16850 = 0.125;
        double r16851 = r16850 / r16828;
        double r16852 = r16849 - r16851;
        double r16853 = r16848 * r16852;
        double r16854 = r16843 + r16853;
        double r16855 = r16845 + r16854;
        double r16856 = r16827 ? r16841 : r16855;
        return r16856;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -5.602562757292874e-14

    1. Initial program 0.6

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

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

      \[\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}{\mathsf{fma}\left(-1, 1, e^{x + x}\right)}} \cdot \left(e^{x} + 1\right)}\]

    if -5.602562757292874e-14 < x

    1. Initial program 37.1

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

      \[\leadsto \color{blue}{\left(0.25 \cdot \frac{{x}^{2}}{\sqrt{2}} + \left(\sqrt{2} + 0.5 \cdot \frac{x}{\sqrt{2}}\right)\right) - 0.125 \cdot \frac{{x}^{2}}{{\left(\sqrt{2}\right)}^{3}}}\]
    3. Simplified7.7

      \[\leadsto \color{blue}{0.5 \cdot \frac{x}{\sqrt{2}} + \left(\sqrt{2} + \frac{{x}^{2}}{\sqrt{2}} \cdot \left(0.25 - \frac{0.125}{2}\right)\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.8

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

Reproduce

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