Average Error: 52.9 → 0.1
Time: 6.0s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.997323780249505298:\\ \;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\ \mathbf{elif}\;x \le 0.001113141778355475:\\ \;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{1}{6} \cdot \frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}\\ \mathbf{else}:\\ \;\;\;\;\log \left(1 \cdot \left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -0.997323780249505298:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\

\mathbf{elif}\;x \le 0.001113141778355475:\\
\;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{1}{6} \cdot \frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}\\

\mathbf{else}:\\
\;\;\;\;\log \left(1 \cdot \left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)\right)\\

\end{array}
double f(double x) {
        double r132984 = x;
        double r132985 = r132984 * r132984;
        double r132986 = 1.0;
        double r132987 = r132985 + r132986;
        double r132988 = sqrt(r132987);
        double r132989 = r132984 + r132988;
        double r132990 = log(r132989);
        return r132990;
}

double f(double x) {
        double r132991 = x;
        double r132992 = -0.9973237802495053;
        bool r132993 = r132991 <= r132992;
        double r132994 = 0.125;
        double r132995 = 3.0;
        double r132996 = pow(r132991, r132995);
        double r132997 = r132994 / r132996;
        double r132998 = 0.5;
        double r132999 = r132998 / r132991;
        double r133000 = 0.0625;
        double r133001 = -r133000;
        double r133002 = 5.0;
        double r133003 = pow(r132991, r133002);
        double r133004 = r133001 / r133003;
        double r133005 = r132999 - r133004;
        double r133006 = r132997 - r133005;
        double r133007 = log(r133006);
        double r133008 = 0.0011131417783554753;
        bool r133009 = r132991 <= r133008;
        double r133010 = 1.0;
        double r133011 = sqrt(r133010);
        double r133012 = log(r133011);
        double r133013 = r132991 / r133011;
        double r133014 = r133012 + r133013;
        double r133015 = 0.16666666666666666;
        double r133016 = pow(r133011, r132995);
        double r133017 = r132996 / r133016;
        double r133018 = r133015 * r133017;
        double r133019 = r133014 - r133018;
        double r133020 = 1.0;
        double r133021 = hypot(r132991, r133011);
        double r133022 = r133021 + r132991;
        double r133023 = r133020 * r133022;
        double r133024 = log(r133023);
        double r133025 = r133009 ? r133019 : r133024;
        double r133026 = r132993 ? r133007 : r133025;
        return r133026;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original52.9
Target45.3
Herbie0.1
\[\begin{array}{l} \mathbf{if}\;x \lt 0.0:\\ \;\;\;\;\log \left(\frac{-1}{x - \sqrt{x \cdot x + 1}}\right)\\ \mathbf{else}:\\ \;\;\;\;\log \left(x + \sqrt{x \cdot x + 1}\right)\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if x < -0.9973237802495053

    1. Initial program 63.1

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Taylor expanded around -inf 0.1

      \[\leadsto \log \color{blue}{\left(0.125 \cdot \frac{1}{{x}^{3}} - \left(0.5 \cdot \frac{1}{x} + 0.0625 \cdot \frac{1}{{x}^{5}}\right)\right)}\]
    3. Simplified0.1

      \[\leadsto \log \color{blue}{\left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)}\]

    if -0.9973237802495053 < x < 0.0011131417783554753

    1. Initial program 58.8

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Taylor expanded around 0 0.2

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

    if 0.0011131417783554753 < x

    1. Initial program 30.9

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Using strategy rm
    3. Applied *-un-lft-identity30.9

      \[\leadsto \log \left(x + \color{blue}{1 \cdot \sqrt{x \cdot x + 1}}\right)\]
    4. Applied *-un-lft-identity30.9

      \[\leadsto \log \left(\color{blue}{1 \cdot x} + 1 \cdot \sqrt{x \cdot x + 1}\right)\]
    5. Applied distribute-lft-out30.9

      \[\leadsto \log \color{blue}{\left(1 \cdot \left(x + \sqrt{x \cdot x + 1}\right)\right)}\]
    6. Simplified0.1

      \[\leadsto \log \left(1 \cdot \color{blue}{\left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)}\right)\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.997323780249505298:\\ \;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\ \mathbf{elif}\;x \le 0.001113141778355475:\\ \;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{1}{6} \cdot \frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}\\ \mathbf{else}:\\ \;\;\;\;\log \left(1 \cdot \left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020056 +o rules:numerics
(FPCore (x)
  :name "Hyperbolic arcsine"
  :precision binary64

  :herbie-target
  (if (< x 0.0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))

  (log (+ x (sqrt (+ (* x x) 1)))))