Average Error: 52.8 → 0.1
Time: 1.4m
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.0695644432902263:\\ \;\;\;\;\log \left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \left(\frac{\frac{1}{2}}{x} + \frac{\frac{1}{16}}{{x}^{5}}\right)\right)\\ \mathbf{elif}\;x \le 0.008503660101190065:\\ \;\;\;\;(\left(x \cdot \frac{-1}{6}\right) \cdot \left(x \cdot x\right) + \left((\frac{3}{40} \cdot \left({x}^{5}\right) + x)_*\right))_*\\ \mathbf{else}:\\ \;\;\;\;\log \left(\sqrt{1^2 + x^2}^* + x\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -1.0695644432902263:\\
\;\;\;\;\log \left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \left(\frac{\frac{1}{2}}{x} + \frac{\frac{1}{16}}{{x}^{5}}\right)\right)\\

\mathbf{elif}\;x \le 0.008503660101190065:\\
\;\;\;\;(\left(x \cdot \frac{-1}{6}\right) \cdot \left(x \cdot x\right) + \left((\frac{3}{40} \cdot \left({x}^{5}\right) + x)_*\right))_*\\

\mathbf{else}:\\
\;\;\;\;\log \left(\sqrt{1^2 + x^2}^* + x\right)\\

\end{array}
double f(double x) {
        double r42964536 = x;
        double r42964537 = r42964536 * r42964536;
        double r42964538 = 1.0;
        double r42964539 = r42964537 + r42964538;
        double r42964540 = sqrt(r42964539);
        double r42964541 = r42964536 + r42964540;
        double r42964542 = log(r42964541);
        return r42964542;
}

double f(double x) {
        double r42964543 = x;
        double r42964544 = -1.0695644432902263;
        bool r42964545 = r42964543 <= r42964544;
        double r42964546 = 0.125;
        double r42964547 = r42964546 / r42964543;
        double r42964548 = r42964543 * r42964543;
        double r42964549 = r42964547 / r42964548;
        double r42964550 = 0.5;
        double r42964551 = r42964550 / r42964543;
        double r42964552 = 0.0625;
        double r42964553 = 5.0;
        double r42964554 = pow(r42964543, r42964553);
        double r42964555 = r42964552 / r42964554;
        double r42964556 = r42964551 + r42964555;
        double r42964557 = r42964549 - r42964556;
        double r42964558 = log(r42964557);
        double r42964559 = 0.008503660101190065;
        bool r42964560 = r42964543 <= r42964559;
        double r42964561 = -0.16666666666666666;
        double r42964562 = r42964543 * r42964561;
        double r42964563 = 0.075;
        double r42964564 = fma(r42964563, r42964554, r42964543);
        double r42964565 = fma(r42964562, r42964548, r42964564);
        double r42964566 = 1.0;
        double r42964567 = hypot(r42964566, r42964543);
        double r42964568 = r42964567 + r42964543;
        double r42964569 = log(r42964568);
        double r42964570 = r42964560 ? r42964565 : r42964569;
        double r42964571 = r42964545 ? r42964558 : r42964570;
        return r42964571;
}

Error

Bits error versus x

Target

Original52.8
Target45.1
Herbie0.1
\[\begin{array}{l} \mathbf{if}\;x \lt 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 < -1.0695644432902263

    1. Initial program 61.9

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Simplified61.1

      \[\leadsto \color{blue}{\log \left(x + \sqrt{1^2 + x^2}^*\right)}\]
    3. Taylor expanded around -inf 0.2

      \[\leadsto \log \color{blue}{\left(\frac{1}{8} \cdot \frac{1}{{x}^{3}} - \left(\frac{1}{16} \cdot \frac{1}{{x}^{5}} + \frac{1}{2} \cdot \frac{1}{x}\right)\right)}\]
    4. Simplified0.2

      \[\leadsto \log \color{blue}{\left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \left(\frac{\frac{1}{16}}{{x}^{5}} + \frac{\frac{1}{2}}{x}\right)\right)}\]

    if -1.0695644432902263 < x < 0.008503660101190065

    1. Initial program 59.0

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Simplified59.0

      \[\leadsto \color{blue}{\log \left(x + \sqrt{1^2 + x^2}^*\right)}\]
    3. Taylor expanded around 0 0.1

      \[\leadsto \color{blue}{\left(x + \frac{3}{40} \cdot {x}^{5}\right) - \frac{1}{6} \cdot {x}^{3}}\]
    4. Simplified0.1

      \[\leadsto \color{blue}{(\left(x \cdot \frac{-1}{6}\right) \cdot \left(x \cdot x\right) + \left((\frac{3}{40} \cdot \left({x}^{5}\right) + x)_*\right))_*}\]

    if 0.008503660101190065 < x

    1. Initial program 31.8

      \[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
    2. Simplified0.1

      \[\leadsto \color{blue}{\log \left(x + \sqrt{1^2 + x^2}^*\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.0695644432902263:\\ \;\;\;\;\log \left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \left(\frac{\frac{1}{2}}{x} + \frac{\frac{1}{16}}{{x}^{5}}\right)\right)\\ \mathbf{elif}\;x \le 0.008503660101190065:\\ \;\;\;\;(\left(x \cdot \frac{-1}{6}\right) \cdot \left(x \cdot x\right) + \left((\frac{3}{40} \cdot \left({x}^{5}\right) + x)_*\right))_*\\ \mathbf{else}:\\ \;\;\;\;\log \left(\sqrt{1^2 + x^2}^* + x\right)\\ \end{array}\]

Reproduce

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

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

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