Average Error: 53.5 → 0.3
Time: 13.2s
Precision: 64
\[\log \left(x + \sqrt{x \cdot x + 1}\right)\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.9958177061725915768519712401030119508505:\\ \;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\ \mathbf{elif}\;x \le 0.8810785844419956047701703027996700257063:\\ \;\;\;\;\log \left(\sqrt{1}\right) + \left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right) \cdot \frac{x}{\sqrt{1}}\\ \mathbf{else}:\\ \;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(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 -0.9958177061725915768519712401030119508505:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\

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

\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{0.125}{{x}^{3}}\right)\right)\right)\\

\end{array}
double f(double x) {
        double r134630 = x;
        double r134631 = r134630 * r134630;
        double r134632 = 1.0;
        double r134633 = r134631 + r134632;
        double r134634 = sqrt(r134633);
        double r134635 = r134630 + r134634;
        double r134636 = log(r134635);
        return r134636;
}

double f(double x) {
        double r134637 = x;
        double r134638 = -0.9958177061725916;
        bool r134639 = r134637 <= r134638;
        double r134640 = 0.125;
        double r134641 = 3.0;
        double r134642 = pow(r134637, r134641);
        double r134643 = r134640 / r134642;
        double r134644 = 0.0625;
        double r134645 = 5.0;
        double r134646 = pow(r134637, r134645);
        double r134647 = r134644 / r134646;
        double r134648 = r134643 - r134647;
        double r134649 = 0.5;
        double r134650 = r134649 / r134637;
        double r134651 = r134648 - r134650;
        double r134652 = log(r134651);
        double r134653 = 0.8810785844419956;
        bool r134654 = r134637 <= r134653;
        double r134655 = 1.0;
        double r134656 = sqrt(r134655);
        double r134657 = log(r134656);
        double r134658 = -0.16666666666666666;
        double r134659 = r134637 * r134637;
        double r134660 = r134659 / r134655;
        double r134661 = r134658 * r134660;
        double r134662 = 1.0;
        double r134663 = r134661 + r134662;
        double r134664 = r134637 / r134656;
        double r134665 = r134663 * r134664;
        double r134666 = r134657 + r134665;
        double r134667 = r134637 - r134643;
        double r134668 = r134650 + r134667;
        double r134669 = r134637 + r134668;
        double r134670 = log(r134669);
        double r134671 = r134654 ? r134666 : r134670;
        double r134672 = r134639 ? r134652 : r134671;
        return r134672;
}

Error

Bits error versus x

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original53.5
Target45.7
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 < -0.9958177061725916

    1. Initial program 63.2

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

    if -0.9958177061725916 < x < 0.8810785844419956

    1. Initial program 58.5

      \[\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}}}\]
    3. Simplified0.3

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

    if 0.8810785844419956 < x

    1. Initial program 32.5

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

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

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

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

Reproduce

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