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

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

\end{array}
double f(double x) {
        double r134521 = x;
        double r134522 = r134521 * r134521;
        double r134523 = 1.0;
        double r134524 = r134522 + r134523;
        double r134525 = sqrt(r134524);
        double r134526 = r134521 + r134525;
        double r134527 = log(r134526);
        return r134527;
}

double f(double x) {
        double r134528 = x;
        double r134529 = -1.017049376431383;
        bool r134530 = r134528 <= r134529;
        double r134531 = 0.125;
        double r134532 = 3.0;
        double r134533 = pow(r134528, r134532);
        double r134534 = r134531 / r134533;
        double r134535 = 0.5;
        double r134536 = r134535 / r134528;
        double r134537 = 0.0625;
        double r134538 = 5.0;
        double r134539 = pow(r134528, r134538);
        double r134540 = r134537 / r134539;
        double r134541 = r134536 + r134540;
        double r134542 = r134534 - r134541;
        double r134543 = log(r134542);
        double r134544 = 0.8981400227354687;
        bool r134545 = r134528 <= r134544;
        double r134546 = 1.0;
        double r134547 = sqrt(r134546);
        double r134548 = log(r134547);
        double r134549 = r134528 / r134547;
        double r134550 = r134548 + r134549;
        double r134551 = 0.16666666666666666;
        double r134552 = pow(r134547, r134532);
        double r134553 = r134533 / r134552;
        double r134554 = r134551 * r134553;
        double r134555 = r134550 - r134554;
        double r134556 = r134536 - r134534;
        double r134557 = 2.0;
        double r134558 = r134557 * r134528;
        double r134559 = r134556 + r134558;
        double r134560 = log(r134559);
        double r134561 = r134545 ? r134555 : r134560;
        double r134562 = r134530 ? r134543 : r134561;
        return r134562;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.3
Target45.4
Herbie0.3
\[\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.017049376431383

    1. Initial program 62.8

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

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

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

    if -1.017049376431383 < x < 0.8981400227354687

    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.8981400227354687 < x

    1. Initial program 32.2

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

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

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

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

Reproduce

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