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

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(0.5, \frac{x}{\sqrt{2}}, \sqrt{2}\right) + \mathsf{expm1}\left(\mathsf{log1p}\left(\left(0.25 - \frac{0.125}{2}\right) \cdot \frac{x \cdot x}{\sqrt{2}}\right)\right)\\

\end{array}
double f(double x) {
        double r28907 = 2.0;
        double r28908 = x;
        double r28909 = r28907 * r28908;
        double r28910 = exp(r28909);
        double r28911 = 1.0;
        double r28912 = r28910 - r28911;
        double r28913 = exp(r28908);
        double r28914 = r28913 - r28911;
        double r28915 = r28912 / r28914;
        double r28916 = sqrt(r28915);
        return r28916;
}

double f(double x) {
        double r28917 = x;
        double r28918 = -6.780812387076979e-12;
        bool r28919 = r28917 <= r28918;
        double r28920 = 2.0;
        double r28921 = r28920 * r28917;
        double r28922 = exp(r28921);
        double r28923 = 1.0;
        double r28924 = r28922 - r28923;
        double r28925 = -r28923;
        double r28926 = r28917 + r28917;
        double r28927 = exp(r28926);
        double r28928 = fma(r28925, r28923, r28927);
        double r28929 = exp(r28917);
        double r28930 = r28929 + r28923;
        double r28931 = r28928 / r28930;
        double r28932 = r28924 / r28931;
        double r28933 = sqrt(r28932);
        double r28934 = 0.5;
        double r28935 = sqrt(r28920);
        double r28936 = r28917 / r28935;
        double r28937 = fma(r28934, r28936, r28935);
        double r28938 = 0.25;
        double r28939 = 0.125;
        double r28940 = r28939 / r28920;
        double r28941 = r28938 - r28940;
        double r28942 = r28917 * r28917;
        double r28943 = r28942 / r28935;
        double r28944 = r28941 * r28943;
        double r28945 = log1p(r28944);
        double r28946 = expm1(r28945);
        double r28947 = r28937 + r28946;
        double r28948 = r28919 ? r28933 : r28947;
        return r28948;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -6.780812387076979e-12

    1. Initial program 0.5

      \[\sqrt{\frac{e^{2 \cdot x} - 1}{e^{x} - 1}}\]
    2. Using strategy rm
    3. Applied flip--0.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}{\mathsf{fma}\left(-1, 1, e^{x + x}\right)}}{e^{x} + 1}}}\]

    if -6.780812387076979e-12 < x

    1. Initial program 36.3

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

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, \frac{x}{\sqrt{2}}, \sqrt{2}\right) + \frac{x \cdot x}{\sqrt{2}} \cdot \left(0.25 - \frac{0.125}{2}\right)}\]
    4. Using strategy rm
    5. Applied expm1-log1p-u6.8

      \[\leadsto \mathsf{fma}\left(0.5, \frac{x}{\sqrt{2}}, \sqrt{2}\right) + \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{x \cdot x}{\sqrt{2}} \cdot \left(0.25 - \frac{0.125}{2}\right)\right)\right)}\]
    6. Simplified6.8

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

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

Reproduce

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