Average Error: 53.2 → 0.2
Time: 15.3s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -1.02274118080473863656720823200885206461:\\ \;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 0.8828713596856151424319136822305154055357:\\ \;\;\;\;\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(x + \left(x + \left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\right)\\ \end{array}\]
\log \left(x + \sqrt{x \cdot x + 1}\right)
\begin{array}{l}
\mathbf{if}\;x \le -1.02274118080473863656720823200885206461:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\

\mathbf{elif}\;x \le 0.8828713596856151424319136822305154055357:\\
\;\;\;\;\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(x + \left(x + \left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\right)\\

\end{array}
double f(double x) {
        double r142373 = x;
        double r142374 = r142373 * r142373;
        double r142375 = 1.0;
        double r142376 = r142374 + r142375;
        double r142377 = sqrt(r142376);
        double r142378 = r142373 + r142377;
        double r142379 = log(r142378);
        return r142379;
}

double f(double x) {
        double r142380 = x;
        double r142381 = -1.0227411808047386;
        bool r142382 = r142380 <= r142381;
        double r142383 = 0.125;
        double r142384 = 3.0;
        double r142385 = pow(r142380, r142384);
        double r142386 = r142383 / r142385;
        double r142387 = 0.5;
        double r142388 = r142387 / r142380;
        double r142389 = r142386 - r142388;
        double r142390 = 0.0625;
        double r142391 = 5.0;
        double r142392 = pow(r142380, r142391);
        double r142393 = r142390 / r142392;
        double r142394 = r142389 - r142393;
        double r142395 = log(r142394);
        double r142396 = 0.8828713596856151;
        bool r142397 = r142380 <= r142396;
        double r142398 = 1.0;
        double r142399 = sqrt(r142398);
        double r142400 = log(r142399);
        double r142401 = r142380 / r142399;
        double r142402 = r142400 + r142401;
        double r142403 = 0.16666666666666666;
        double r142404 = pow(r142399, r142384);
        double r142405 = r142385 / r142404;
        double r142406 = r142403 * r142405;
        double r142407 = r142402 - r142406;
        double r142408 = r142388 - r142386;
        double r142409 = r142380 + r142408;
        double r142410 = r142380 + r142409;
        double r142411 = log(r142410);
        double r142412 = r142397 ? r142407 : r142411;
        double r142413 = r142382 ? r142395 : r142412;
        return r142413;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.2
Target45.6
Herbie0.2
\[\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 < -1.0227411808047386

    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(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)}\]

    if -1.0227411808047386 < x < 0.8828713596856151

    1. Initial program 58.6

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

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

    1. Initial program 32.1

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -1.02274118080473863656720823200885206461:\\ \;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\ \mathbf{elif}\;x \le 0.8828713596856151424319136822305154055357:\\ \;\;\;\;\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(x + \left(x + \left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019305 
(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)))))